From a6b3bd2ff6d436f08bb7006ef29e7f6fb69c9ee7 Mon Sep 17 00:00:00 2001 From: Andrey Smirnov Date: Fri, 3 Jul 2020 00:43:59 +0300 Subject: [PATCH] feat: implement service events This implements service events, adds test for events API based on service events as they're the easiest to generate on demand. Disabled validate test for 'metal' as it validates disk device against local system which doesn't make much sense. Signed-off-by: Andrey Smirnov --- api/machine/machine.pb.go | 1446 +++++++++-------- api/machine/machine.proto | 16 + cmd/talosctl/cmd/talos/events.go | 2 + go.mod | 2 +- .../app/machined/pkg/system/events/events.go | 9 + .../app/machined/pkg/system/service_runner.go | 4 + internal/integration/api/events.go | 104 ++ internal/integration/cli/validate.go | 7 +- pkg/client/client.go | 25 +- 9 files changed, 958 insertions(+), 657 deletions(-) create mode 100644 internal/integration/api/events.go diff --git a/api/machine/machine.pb.go b/api/machine/machine.pb.go index bf0d89a9b..019100e05 100644 --- a/api/machine/machine.pb.go +++ b/api/machine/machine.pb.go @@ -176,6 +176,70 @@ func (TaskEvent_Action) EnumDescriptor() ([]byte, []int) { return file_machine_machine_proto_rawDescGZIP(), []int{7, 0} } +type ServiceStateEvent_Action int32 + +const ( + ServiceStateEvent_INITIALIZED ServiceStateEvent_Action = 0 + ServiceStateEvent_PREPARING ServiceStateEvent_Action = 1 + ServiceStateEvent_WAITING ServiceStateEvent_Action = 2 + ServiceStateEvent_RUNNING ServiceStateEvent_Action = 3 + ServiceStateEvent_STOPPING ServiceStateEvent_Action = 4 + ServiceStateEvent_FINISHED ServiceStateEvent_Action = 5 + ServiceStateEvent_FAILED ServiceStateEvent_Action = 6 + ServiceStateEvent_SKIPPED ServiceStateEvent_Action = 7 +) + +// Enum value maps for ServiceStateEvent_Action. +var ( + ServiceStateEvent_Action_name = map[int32]string{ + 0: "INITIALIZED", + 1: "PREPARING", + 2: "WAITING", + 3: "RUNNING", + 4: "STOPPING", + 5: "FINISHED", + 6: "FAILED", + 7: "SKIPPED", + } + ServiceStateEvent_Action_value = map[string]int32{ + "INITIALIZED": 0, + "PREPARING": 1, + "WAITING": 2, + "RUNNING": 3, + "STOPPING": 4, + "FINISHED": 5, + "FAILED": 6, + "SKIPPED": 7, + } +) + +func (x ServiceStateEvent_Action) Enum() *ServiceStateEvent_Action { + p := new(ServiceStateEvent_Action) + *p = x + return p +} + +func (x ServiceStateEvent_Action) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (ServiceStateEvent_Action) Descriptor() protoreflect.EnumDescriptor { + return file_machine_machine_proto_enumTypes[3].Descriptor() +} + +func (ServiceStateEvent_Action) Type() protoreflect.EnumType { + return &file_machine_machine_proto_enumTypes[3] +} + +func (x ServiceStateEvent_Action) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use ServiceStateEvent_Action.Descriptor instead. +func (ServiceStateEvent_Action) EnumDescriptor() ([]byte, []int) { + return file_machine_machine_proto_rawDescGZIP(), []int{8, 0} +} + type RecoverRequest_Source int32 const ( @@ -206,11 +270,11 @@ func (x RecoverRequest_Source) String() string { } func (RecoverRequest_Source) Descriptor() protoreflect.EnumDescriptor { - return file_machine_machine_proto_enumTypes[3].Descriptor() + return file_machine_machine_proto_enumTypes[4].Descriptor() } func (RecoverRequest_Source) Type() protoreflect.EnumType { - return &file_machine_machine_proto_enumTypes[3] + return &file_machine_machine_proto_enumTypes[4] } func (x RecoverRequest_Source) Number() protoreflect.EnumNumber { @@ -219,7 +283,7 @@ func (x RecoverRequest_Source) Number() protoreflect.EnumNumber { // Deprecated: Use RecoverRequest_Source.Descriptor instead. func (RecoverRequest_Source) EnumDescriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{13, 0} + return file_machine_machine_proto_rawDescGZIP(), []int{14, 0} } // rpc reboot @@ -626,6 +690,69 @@ func (x *TaskEvent) GetAction() TaskEvent_Action { return TaskEvent_START } +type ServiceStateEvent struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Service string `protobuf:"bytes,1,opt,name=service,proto3" json:"service,omitempty"` + Action ServiceStateEvent_Action `protobuf:"varint,2,opt,name=action,proto3,enum=machine.ServiceStateEvent_Action" json:"action,omitempty"` + Message string `protobuf:"bytes,3,opt,name=message,proto3" json:"message,omitempty"` +} + +func (x *ServiceStateEvent) Reset() { + *x = ServiceStateEvent{} + if protoimpl.UnsafeEnabled { + mi := &file_machine_machine_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ServiceStateEvent) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ServiceStateEvent) ProtoMessage() {} + +func (x *ServiceStateEvent) ProtoReflect() protoreflect.Message { + mi := &file_machine_machine_proto_msgTypes[8] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ServiceStateEvent.ProtoReflect.Descriptor instead. +func (*ServiceStateEvent) Descriptor() ([]byte, []int) { + return file_machine_machine_proto_rawDescGZIP(), []int{8} +} + +func (x *ServiceStateEvent) GetService() string { + if x != nil { + return x.Service + } + return "" +} + +func (x *ServiceStateEvent) GetAction() ServiceStateEvent_Action { + if x != nil { + return x.Action + } + return ServiceStateEvent_INITIALIZED +} + +func (x *ServiceStateEvent) GetMessage() string { + if x != nil { + return x.Message + } + return "" +} + type EventsRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -635,7 +762,7 @@ type EventsRequest struct { func (x *EventsRequest) Reset() { *x = EventsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[8] + mi := &file_machine_machine_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -648,7 +775,7 @@ func (x *EventsRequest) String() string { func (*EventsRequest) ProtoMessage() {} func (x *EventsRequest) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[8] + mi := &file_machine_machine_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -661,7 +788,7 @@ func (x *EventsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use EventsRequest.ProtoReflect.Descriptor instead. func (*EventsRequest) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{8} + return file_machine_machine_proto_rawDescGZIP(), []int{9} } type Event struct { @@ -676,7 +803,7 @@ type Event struct { func (x *Event) Reset() { *x = Event{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[9] + mi := &file_machine_machine_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -689,7 +816,7 @@ func (x *Event) String() string { func (*Event) ProtoMessage() {} func (x *Event) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[9] + mi := &file_machine_machine_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -702,7 +829,7 @@ func (x *Event) ProtoReflect() protoreflect.Message { // Deprecated: Use Event.ProtoReflect.Descriptor instead. func (*Event) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{9} + return file_machine_machine_proto_rawDescGZIP(), []int{10} } func (x *Event) GetMetadata() *common.Metadata { @@ -732,7 +859,7 @@ type ResetRequest struct { func (x *ResetRequest) Reset() { *x = ResetRequest{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[10] + mi := &file_machine_machine_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -745,7 +872,7 @@ func (x *ResetRequest) String() string { func (*ResetRequest) ProtoMessage() {} func (x *ResetRequest) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[10] + mi := &file_machine_machine_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -758,7 +885,7 @@ func (x *ResetRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ResetRequest.ProtoReflect.Descriptor instead. func (*ResetRequest) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{10} + return file_machine_machine_proto_rawDescGZIP(), []int{11} } func (x *ResetRequest) GetGraceful() bool { @@ -787,7 +914,7 @@ type Reset struct { func (x *Reset) Reset() { *x = Reset{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[11] + mi := &file_machine_machine_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -800,7 +927,7 @@ func (x *Reset) String() string { func (*Reset) ProtoMessage() {} func (x *Reset) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[11] + mi := &file_machine_machine_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -813,7 +940,7 @@ func (x *Reset) ProtoReflect() protoreflect.Message { // Deprecated: Use Reset.ProtoReflect.Descriptor instead. func (*Reset) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{11} + return file_machine_machine_proto_rawDescGZIP(), []int{12} } func (x *Reset) GetMetadata() *common.Metadata { @@ -834,7 +961,7 @@ type ResetResponse struct { func (x *ResetResponse) Reset() { *x = ResetResponse{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[12] + mi := &file_machine_machine_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -847,7 +974,7 @@ func (x *ResetResponse) String() string { func (*ResetResponse) ProtoMessage() {} func (x *ResetResponse) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[12] + mi := &file_machine_machine_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -860,7 +987,7 @@ func (x *ResetResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ResetResponse.ProtoReflect.Descriptor instead. func (*ResetResponse) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{12} + return file_machine_machine_proto_rawDescGZIP(), []int{13} } func (x *ResetResponse) GetMessages() []*Reset { @@ -881,7 +1008,7 @@ type RecoverRequest struct { func (x *RecoverRequest) Reset() { *x = RecoverRequest{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[13] + mi := &file_machine_machine_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -894,7 +1021,7 @@ func (x *RecoverRequest) String() string { func (*RecoverRequest) ProtoMessage() {} func (x *RecoverRequest) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[13] + mi := &file_machine_machine_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -907,7 +1034,7 @@ func (x *RecoverRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RecoverRequest.ProtoReflect.Descriptor instead. func (*RecoverRequest) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{13} + return file_machine_machine_proto_rawDescGZIP(), []int{14} } func (x *RecoverRequest) GetSource() RecoverRequest_Source { @@ -929,7 +1056,7 @@ type Recover struct { func (x *Recover) Reset() { *x = Recover{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[14] + mi := &file_machine_machine_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -942,7 +1069,7 @@ func (x *Recover) String() string { func (*Recover) ProtoMessage() {} func (x *Recover) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[14] + mi := &file_machine_machine_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -955,7 +1082,7 @@ func (x *Recover) ProtoReflect() protoreflect.Message { // Deprecated: Use Recover.ProtoReflect.Descriptor instead. func (*Recover) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{14} + return file_machine_machine_proto_rawDescGZIP(), []int{15} } func (x *Recover) GetMetadata() *common.Metadata { @@ -976,7 +1103,7 @@ type RecoverResponse struct { func (x *RecoverResponse) Reset() { *x = RecoverResponse{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[15] + mi := &file_machine_machine_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -989,7 +1116,7 @@ func (x *RecoverResponse) String() string { func (*RecoverResponse) ProtoMessage() {} func (x *RecoverResponse) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[15] + mi := &file_machine_machine_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1002,7 +1129,7 @@ func (x *RecoverResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use RecoverResponse.ProtoReflect.Descriptor instead. func (*RecoverResponse) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{15} + return file_machine_machine_proto_rawDescGZIP(), []int{16} } func (x *RecoverResponse) GetMessages() []*Recover { @@ -1025,7 +1152,7 @@ type Shutdown struct { func (x *Shutdown) Reset() { *x = Shutdown{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[16] + mi := &file_machine_machine_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1038,7 +1165,7 @@ func (x *Shutdown) String() string { func (*Shutdown) ProtoMessage() {} func (x *Shutdown) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[16] + mi := &file_machine_machine_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1051,7 +1178,7 @@ func (x *Shutdown) ProtoReflect() protoreflect.Message { // Deprecated: Use Shutdown.ProtoReflect.Descriptor instead. func (*Shutdown) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{16} + return file_machine_machine_proto_rawDescGZIP(), []int{17} } func (x *Shutdown) GetMetadata() *common.Metadata { @@ -1072,7 +1199,7 @@ type ShutdownResponse struct { func (x *ShutdownResponse) Reset() { *x = ShutdownResponse{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[17] + mi := &file_machine_machine_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1085,7 +1212,7 @@ func (x *ShutdownResponse) String() string { func (*ShutdownResponse) ProtoMessage() {} func (x *ShutdownResponse) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[17] + mi := &file_machine_machine_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1098,7 +1225,7 @@ func (x *ShutdownResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ShutdownResponse.ProtoReflect.Descriptor instead. func (*ShutdownResponse) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{17} + return file_machine_machine_proto_rawDescGZIP(), []int{18} } func (x *ShutdownResponse) GetMessages() []*Shutdown { @@ -1121,7 +1248,7 @@ type UpgradeRequest struct { func (x *UpgradeRequest) Reset() { *x = UpgradeRequest{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[18] + mi := &file_machine_machine_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1134,7 +1261,7 @@ func (x *UpgradeRequest) String() string { func (*UpgradeRequest) ProtoMessage() {} func (x *UpgradeRequest) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[18] + mi := &file_machine_machine_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1147,7 +1274,7 @@ func (x *UpgradeRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpgradeRequest.ProtoReflect.Descriptor instead. func (*UpgradeRequest) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{18} + return file_machine_machine_proto_rawDescGZIP(), []int{19} } func (x *UpgradeRequest) GetImage() string { @@ -1176,7 +1303,7 @@ type Upgrade struct { func (x *Upgrade) Reset() { *x = Upgrade{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[19] + mi := &file_machine_machine_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1189,7 +1316,7 @@ func (x *Upgrade) String() string { func (*Upgrade) ProtoMessage() {} func (x *Upgrade) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[19] + mi := &file_machine_machine_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1202,7 +1329,7 @@ func (x *Upgrade) ProtoReflect() protoreflect.Message { // Deprecated: Use Upgrade.ProtoReflect.Descriptor instead. func (*Upgrade) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{19} + return file_machine_machine_proto_rawDescGZIP(), []int{20} } func (x *Upgrade) GetMetadata() *common.Metadata { @@ -1230,7 +1357,7 @@ type UpgradeResponse struct { func (x *UpgradeResponse) Reset() { *x = UpgradeResponse{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[20] + mi := &file_machine_machine_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1243,7 +1370,7 @@ func (x *UpgradeResponse) String() string { func (*UpgradeResponse) ProtoMessage() {} func (x *UpgradeResponse) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[20] + mi := &file_machine_machine_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1256,7 +1383,7 @@ func (x *UpgradeResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use UpgradeResponse.ProtoReflect.Descriptor instead. func (*UpgradeResponse) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{20} + return file_machine_machine_proto_rawDescGZIP(), []int{21} } func (x *UpgradeResponse) GetMessages() []*Upgrade { @@ -1279,7 +1406,7 @@ type ServiceList struct { func (x *ServiceList) Reset() { *x = ServiceList{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[21] + mi := &file_machine_machine_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1292,7 +1419,7 @@ func (x *ServiceList) String() string { func (*ServiceList) ProtoMessage() {} func (x *ServiceList) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[21] + mi := &file_machine_machine_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1305,7 +1432,7 @@ func (x *ServiceList) ProtoReflect() protoreflect.Message { // Deprecated: Use ServiceList.ProtoReflect.Descriptor instead. func (*ServiceList) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{21} + return file_machine_machine_proto_rawDescGZIP(), []int{22} } func (x *ServiceList) GetMetadata() *common.Metadata { @@ -1333,7 +1460,7 @@ type ServiceListResponse struct { func (x *ServiceListResponse) Reset() { *x = ServiceListResponse{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[22] + mi := &file_machine_machine_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1346,7 +1473,7 @@ func (x *ServiceListResponse) String() string { func (*ServiceListResponse) ProtoMessage() {} func (x *ServiceListResponse) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[22] + mi := &file_machine_machine_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1359,7 +1486,7 @@ func (x *ServiceListResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ServiceListResponse.ProtoReflect.Descriptor instead. func (*ServiceListResponse) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{22} + return file_machine_machine_proto_rawDescGZIP(), []int{23} } func (x *ServiceListResponse) GetMessages() []*ServiceList { @@ -1383,7 +1510,7 @@ type ServiceInfo struct { func (x *ServiceInfo) Reset() { *x = ServiceInfo{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[23] + mi := &file_machine_machine_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1396,7 +1523,7 @@ func (x *ServiceInfo) String() string { func (*ServiceInfo) ProtoMessage() {} func (x *ServiceInfo) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[23] + mi := &file_machine_machine_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1409,7 +1536,7 @@ func (x *ServiceInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use ServiceInfo.ProtoReflect.Descriptor instead. func (*ServiceInfo) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{23} + return file_machine_machine_proto_rawDescGZIP(), []int{24} } func (x *ServiceInfo) GetId() string { @@ -1451,7 +1578,7 @@ type ServiceEvents struct { func (x *ServiceEvents) Reset() { *x = ServiceEvents{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[24] + mi := &file_machine_machine_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1464,7 +1591,7 @@ func (x *ServiceEvents) String() string { func (*ServiceEvents) ProtoMessage() {} func (x *ServiceEvents) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[24] + mi := &file_machine_machine_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1477,7 +1604,7 @@ func (x *ServiceEvents) ProtoReflect() protoreflect.Message { // Deprecated: Use ServiceEvents.ProtoReflect.Descriptor instead. func (*ServiceEvents) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{24} + return file_machine_machine_proto_rawDescGZIP(), []int{25} } func (x *ServiceEvents) GetEvents() []*ServiceEvent { @@ -1500,7 +1627,7 @@ type ServiceEvent struct { func (x *ServiceEvent) Reset() { *x = ServiceEvent{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[25] + mi := &file_machine_machine_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1513,7 +1640,7 @@ func (x *ServiceEvent) String() string { func (*ServiceEvent) ProtoMessage() {} func (x *ServiceEvent) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[25] + mi := &file_machine_machine_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1526,7 +1653,7 @@ func (x *ServiceEvent) ProtoReflect() protoreflect.Message { // Deprecated: Use ServiceEvent.ProtoReflect.Descriptor instead. func (*ServiceEvent) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{25} + return file_machine_machine_proto_rawDescGZIP(), []int{26} } func (x *ServiceEvent) GetMsg() string { @@ -1564,7 +1691,7 @@ type ServiceHealth struct { func (x *ServiceHealth) Reset() { *x = ServiceHealth{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[26] + mi := &file_machine_machine_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1577,7 +1704,7 @@ func (x *ServiceHealth) String() string { func (*ServiceHealth) ProtoMessage() {} func (x *ServiceHealth) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[26] + mi := &file_machine_machine_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1590,7 +1717,7 @@ func (x *ServiceHealth) ProtoReflect() protoreflect.Message { // Deprecated: Use ServiceHealth.ProtoReflect.Descriptor instead. func (*ServiceHealth) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{26} + return file_machine_machine_proto_rawDescGZIP(), []int{27} } func (x *ServiceHealth) GetUnknown() bool { @@ -1633,7 +1760,7 @@ type ServiceStartRequest struct { func (x *ServiceStartRequest) Reset() { *x = ServiceStartRequest{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[27] + mi := &file_machine_machine_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1646,7 +1773,7 @@ func (x *ServiceStartRequest) String() string { func (*ServiceStartRequest) ProtoMessage() {} func (x *ServiceStartRequest) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[27] + mi := &file_machine_machine_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1659,7 +1786,7 @@ func (x *ServiceStartRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ServiceStartRequest.ProtoReflect.Descriptor instead. func (*ServiceStartRequest) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{27} + return file_machine_machine_proto_rawDescGZIP(), []int{28} } func (x *ServiceStartRequest) GetId() string { @@ -1681,7 +1808,7 @@ type ServiceStart struct { func (x *ServiceStart) Reset() { *x = ServiceStart{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[28] + mi := &file_machine_machine_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1694,7 +1821,7 @@ func (x *ServiceStart) String() string { func (*ServiceStart) ProtoMessage() {} func (x *ServiceStart) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[28] + mi := &file_machine_machine_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1707,7 +1834,7 @@ func (x *ServiceStart) ProtoReflect() protoreflect.Message { // Deprecated: Use ServiceStart.ProtoReflect.Descriptor instead. func (*ServiceStart) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{28} + return file_machine_machine_proto_rawDescGZIP(), []int{29} } func (x *ServiceStart) GetMetadata() *common.Metadata { @@ -1735,7 +1862,7 @@ type ServiceStartResponse struct { func (x *ServiceStartResponse) Reset() { *x = ServiceStartResponse{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[29] + mi := &file_machine_machine_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1748,7 +1875,7 @@ func (x *ServiceStartResponse) String() string { func (*ServiceStartResponse) ProtoMessage() {} func (x *ServiceStartResponse) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[29] + mi := &file_machine_machine_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1761,7 +1888,7 @@ func (x *ServiceStartResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ServiceStartResponse.ProtoReflect.Descriptor instead. func (*ServiceStartResponse) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{29} + return file_machine_machine_proto_rawDescGZIP(), []int{30} } func (x *ServiceStartResponse) GetMessages() []*ServiceStart { @@ -1782,7 +1909,7 @@ type ServiceStopRequest struct { func (x *ServiceStopRequest) Reset() { *x = ServiceStopRequest{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[30] + mi := &file_machine_machine_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1795,7 +1922,7 @@ func (x *ServiceStopRequest) String() string { func (*ServiceStopRequest) ProtoMessage() {} func (x *ServiceStopRequest) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[30] + mi := &file_machine_machine_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1808,7 +1935,7 @@ func (x *ServiceStopRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ServiceStopRequest.ProtoReflect.Descriptor instead. func (*ServiceStopRequest) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{30} + return file_machine_machine_proto_rawDescGZIP(), []int{31} } func (x *ServiceStopRequest) GetId() string { @@ -1830,7 +1957,7 @@ type ServiceStop struct { func (x *ServiceStop) Reset() { *x = ServiceStop{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[31] + mi := &file_machine_machine_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1843,7 +1970,7 @@ func (x *ServiceStop) String() string { func (*ServiceStop) ProtoMessage() {} func (x *ServiceStop) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[31] + mi := &file_machine_machine_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1856,7 +1983,7 @@ func (x *ServiceStop) ProtoReflect() protoreflect.Message { // Deprecated: Use ServiceStop.ProtoReflect.Descriptor instead. func (*ServiceStop) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{31} + return file_machine_machine_proto_rawDescGZIP(), []int{32} } func (x *ServiceStop) GetMetadata() *common.Metadata { @@ -1884,7 +2011,7 @@ type ServiceStopResponse struct { func (x *ServiceStopResponse) Reset() { *x = ServiceStopResponse{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[32] + mi := &file_machine_machine_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1897,7 +2024,7 @@ func (x *ServiceStopResponse) String() string { func (*ServiceStopResponse) ProtoMessage() {} func (x *ServiceStopResponse) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[32] + mi := &file_machine_machine_proto_msgTypes[33] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1910,7 +2037,7 @@ func (x *ServiceStopResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ServiceStopResponse.ProtoReflect.Descriptor instead. func (*ServiceStopResponse) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{32} + return file_machine_machine_proto_rawDescGZIP(), []int{33} } func (x *ServiceStopResponse) GetMessages() []*ServiceStop { @@ -1931,7 +2058,7 @@ type ServiceRestartRequest struct { func (x *ServiceRestartRequest) Reset() { *x = ServiceRestartRequest{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[33] + mi := &file_machine_machine_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1944,7 +2071,7 @@ func (x *ServiceRestartRequest) String() string { func (*ServiceRestartRequest) ProtoMessage() {} func (x *ServiceRestartRequest) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[33] + mi := &file_machine_machine_proto_msgTypes[34] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1957,7 +2084,7 @@ func (x *ServiceRestartRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ServiceRestartRequest.ProtoReflect.Descriptor instead. func (*ServiceRestartRequest) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{33} + return file_machine_machine_proto_rawDescGZIP(), []int{34} } func (x *ServiceRestartRequest) GetId() string { @@ -1979,7 +2106,7 @@ type ServiceRestart struct { func (x *ServiceRestart) Reset() { *x = ServiceRestart{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[34] + mi := &file_machine_machine_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1992,7 +2119,7 @@ func (x *ServiceRestart) String() string { func (*ServiceRestart) ProtoMessage() {} func (x *ServiceRestart) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[34] + mi := &file_machine_machine_proto_msgTypes[35] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2005,7 +2132,7 @@ func (x *ServiceRestart) ProtoReflect() protoreflect.Message { // Deprecated: Use ServiceRestart.ProtoReflect.Descriptor instead. func (*ServiceRestart) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{34} + return file_machine_machine_proto_rawDescGZIP(), []int{35} } func (x *ServiceRestart) GetMetadata() *common.Metadata { @@ -2033,7 +2160,7 @@ type ServiceRestartResponse struct { func (x *ServiceRestartResponse) Reset() { *x = ServiceRestartResponse{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[35] + mi := &file_machine_machine_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2046,7 +2173,7 @@ func (x *ServiceRestartResponse) String() string { func (*ServiceRestartResponse) ProtoMessage() {} func (x *ServiceRestartResponse) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[35] + mi := &file_machine_machine_proto_msgTypes[36] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2059,7 +2186,7 @@ func (x *ServiceRestartResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ServiceRestartResponse.ProtoReflect.Descriptor instead. func (*ServiceRestartResponse) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{35} + return file_machine_machine_proto_rawDescGZIP(), []int{36} } func (x *ServiceRestartResponse) GetMessages() []*ServiceRestart { @@ -2081,7 +2208,7 @@ type StartRequest struct { func (x *StartRequest) Reset() { *x = StartRequest{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[36] + mi := &file_machine_machine_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2094,7 +2221,7 @@ func (x *StartRequest) String() string { func (*StartRequest) ProtoMessage() {} func (x *StartRequest) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[36] + mi := &file_machine_machine_proto_msgTypes[37] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2107,7 +2234,7 @@ func (x *StartRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StartRequest.ProtoReflect.Descriptor instead. func (*StartRequest) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{36} + return file_machine_machine_proto_rawDescGZIP(), []int{37} } func (x *StartRequest) GetId() string { @@ -2129,7 +2256,7 @@ type StartResponse struct { func (x *StartResponse) Reset() { *x = StartResponse{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[37] + mi := &file_machine_machine_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2142,7 +2269,7 @@ func (x *StartResponse) String() string { func (*StartResponse) ProtoMessage() {} func (x *StartResponse) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[37] + mi := &file_machine_machine_proto_msgTypes[38] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2155,7 +2282,7 @@ func (x *StartResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use StartResponse.ProtoReflect.Descriptor instead. func (*StartResponse) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{37} + return file_machine_machine_proto_rawDescGZIP(), []int{38} } func (x *StartResponse) GetResp() string { @@ -2177,7 +2304,7 @@ type StopRequest struct { func (x *StopRequest) Reset() { *x = StopRequest{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[38] + mi := &file_machine_machine_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2190,7 +2317,7 @@ func (x *StopRequest) String() string { func (*StopRequest) ProtoMessage() {} func (x *StopRequest) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[38] + mi := &file_machine_machine_proto_msgTypes[39] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2203,7 +2330,7 @@ func (x *StopRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StopRequest.ProtoReflect.Descriptor instead. func (*StopRequest) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{38} + return file_machine_machine_proto_rawDescGZIP(), []int{39} } func (x *StopRequest) GetId() string { @@ -2225,7 +2352,7 @@ type StopResponse struct { func (x *StopResponse) Reset() { *x = StopResponse{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[39] + mi := &file_machine_machine_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2238,7 +2365,7 @@ func (x *StopResponse) String() string { func (*StopResponse) ProtoMessage() {} func (x *StopResponse) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[39] + mi := &file_machine_machine_proto_msgTypes[40] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2251,7 +2378,7 @@ func (x *StopResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use StopResponse.ProtoReflect.Descriptor instead. func (*StopResponse) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{39} + return file_machine_machine_proto_rawDescGZIP(), []int{40} } func (x *StopResponse) GetResp() string { @@ -2276,7 +2403,7 @@ type CopyRequest struct { func (x *CopyRequest) Reset() { *x = CopyRequest{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[40] + mi := &file_machine_machine_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2289,7 +2416,7 @@ func (x *CopyRequest) String() string { func (*CopyRequest) ProtoMessage() {} func (x *CopyRequest) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[40] + mi := &file_machine_machine_proto_msgTypes[41] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2302,7 +2429,7 @@ func (x *CopyRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CopyRequest.ProtoReflect.Descriptor instead. func (*CopyRequest) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{40} + return file_machine_machine_proto_rawDescGZIP(), []int{41} } func (x *CopyRequest) GetRootPath() string { @@ -2331,7 +2458,7 @@ type ListRequest struct { func (x *ListRequest) Reset() { *x = ListRequest{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[41] + mi := &file_machine_machine_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2344,7 +2471,7 @@ func (x *ListRequest) String() string { func (*ListRequest) ProtoMessage() {} func (x *ListRequest) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[41] + mi := &file_machine_machine_proto_msgTypes[42] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2357,7 +2484,7 @@ func (x *ListRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListRequest.ProtoReflect.Descriptor instead. func (*ListRequest) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{41} + return file_machine_machine_proto_rawDescGZIP(), []int{42} } func (x *ListRequest) GetRoot() string { @@ -2410,7 +2537,7 @@ type FileInfo struct { func (x *FileInfo) Reset() { *x = FileInfo{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[42] + mi := &file_machine_machine_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2423,7 +2550,7 @@ func (x *FileInfo) String() string { func (*FileInfo) ProtoMessage() {} func (x *FileInfo) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[42] + mi := &file_machine_machine_proto_msgTypes[43] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2436,7 +2563,7 @@ func (x *FileInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use FileInfo.ProtoReflect.Descriptor instead. func (*FileInfo) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{42} + return file_machine_machine_proto_rawDescGZIP(), []int{43} } func (x *FileInfo) GetMetadata() *common.Metadata { @@ -2515,7 +2642,7 @@ type Mounts struct { func (x *Mounts) Reset() { *x = Mounts{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[43] + mi := &file_machine_machine_proto_msgTypes[44] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2528,7 +2655,7 @@ func (x *Mounts) String() string { func (*Mounts) ProtoMessage() {} func (x *Mounts) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[43] + mi := &file_machine_machine_proto_msgTypes[44] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2541,7 +2668,7 @@ func (x *Mounts) ProtoReflect() protoreflect.Message { // Deprecated: Use Mounts.ProtoReflect.Descriptor instead. func (*Mounts) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{43} + return file_machine_machine_proto_rawDescGZIP(), []int{44} } func (x *Mounts) GetMetadata() *common.Metadata { @@ -2569,7 +2696,7 @@ type MountsResponse struct { func (x *MountsResponse) Reset() { *x = MountsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[44] + mi := &file_machine_machine_proto_msgTypes[45] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2582,7 +2709,7 @@ func (x *MountsResponse) String() string { func (*MountsResponse) ProtoMessage() {} func (x *MountsResponse) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[44] + mi := &file_machine_machine_proto_msgTypes[45] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2595,7 +2722,7 @@ func (x *MountsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use MountsResponse.ProtoReflect.Descriptor instead. func (*MountsResponse) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{44} + return file_machine_machine_proto_rawDescGZIP(), []int{45} } func (x *MountsResponse) GetMessages() []*Mounts { @@ -2620,7 +2747,7 @@ type MountStat struct { func (x *MountStat) Reset() { *x = MountStat{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[45] + mi := &file_machine_machine_proto_msgTypes[46] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2633,7 +2760,7 @@ func (x *MountStat) String() string { func (*MountStat) ProtoMessage() {} func (x *MountStat) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[45] + mi := &file_machine_machine_proto_msgTypes[46] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2646,7 +2773,7 @@ func (x *MountStat) ProtoReflect() protoreflect.Message { // Deprecated: Use MountStat.ProtoReflect.Descriptor instead. func (*MountStat) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{45} + return file_machine_machine_proto_rawDescGZIP(), []int{46} } func (x *MountStat) GetFilesystem() string { @@ -2690,7 +2817,7 @@ type Version struct { func (x *Version) Reset() { *x = Version{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[46] + mi := &file_machine_machine_proto_msgTypes[47] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2703,7 +2830,7 @@ func (x *Version) String() string { func (*Version) ProtoMessage() {} func (x *Version) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[46] + mi := &file_machine_machine_proto_msgTypes[47] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2716,7 +2843,7 @@ func (x *Version) ProtoReflect() protoreflect.Message { // Deprecated: Use Version.ProtoReflect.Descriptor instead. func (*Version) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{46} + return file_machine_machine_proto_rawDescGZIP(), []int{47} } func (x *Version) GetMetadata() *common.Metadata { @@ -2751,7 +2878,7 @@ type VersionResponse struct { func (x *VersionResponse) Reset() { *x = VersionResponse{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[47] + mi := &file_machine_machine_proto_msgTypes[48] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2764,7 +2891,7 @@ func (x *VersionResponse) String() string { func (*VersionResponse) ProtoMessage() {} func (x *VersionResponse) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[47] + mi := &file_machine_machine_proto_msgTypes[48] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2777,7 +2904,7 @@ func (x *VersionResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use VersionResponse.ProtoReflect.Descriptor instead. func (*VersionResponse) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{47} + return file_machine_machine_proto_rawDescGZIP(), []int{48} } func (x *VersionResponse) GetMessages() []*Version { @@ -2803,7 +2930,7 @@ type VersionInfo struct { func (x *VersionInfo) Reset() { *x = VersionInfo{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[48] + mi := &file_machine_machine_proto_msgTypes[49] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2816,7 +2943,7 @@ func (x *VersionInfo) String() string { func (*VersionInfo) ProtoMessage() {} func (x *VersionInfo) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[48] + mi := &file_machine_machine_proto_msgTypes[49] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2829,7 +2956,7 @@ func (x *VersionInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use VersionInfo.ProtoReflect.Descriptor instead. func (*VersionInfo) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{48} + return file_machine_machine_proto_rawDescGZIP(), []int{49} } func (x *VersionInfo) GetTag() string { @@ -2886,7 +3013,7 @@ type PlatformInfo struct { func (x *PlatformInfo) Reset() { *x = PlatformInfo{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[49] + mi := &file_machine_machine_proto_msgTypes[50] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2899,7 +3026,7 @@ func (x *PlatformInfo) String() string { func (*PlatformInfo) ProtoMessage() {} func (x *PlatformInfo) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[49] + mi := &file_machine_machine_proto_msgTypes[50] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2912,7 +3039,7 @@ func (x *PlatformInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use PlatformInfo.ProtoReflect.Descriptor instead. func (*PlatformInfo) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{49} + return file_machine_machine_proto_rawDescGZIP(), []int{50} } func (x *PlatformInfo) GetName() string { @@ -2947,7 +3074,7 @@ type LogsRequest struct { func (x *LogsRequest) Reset() { *x = LogsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[50] + mi := &file_machine_machine_proto_msgTypes[51] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2960,7 +3087,7 @@ func (x *LogsRequest) String() string { func (*LogsRequest) ProtoMessage() {} func (x *LogsRequest) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[50] + mi := &file_machine_machine_proto_msgTypes[51] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2973,7 +3100,7 @@ func (x *LogsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use LogsRequest.ProtoReflect.Descriptor instead. func (*LogsRequest) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{50} + return file_machine_machine_proto_rawDescGZIP(), []int{51} } func (x *LogsRequest) GetNamespace() string { @@ -3022,7 +3149,7 @@ type ReadRequest struct { func (x *ReadRequest) Reset() { *x = ReadRequest{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[51] + mi := &file_machine_machine_proto_msgTypes[52] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3035,7 +3162,7 @@ func (x *ReadRequest) String() string { func (*ReadRequest) ProtoMessage() {} func (x *ReadRequest) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[51] + mi := &file_machine_machine_proto_msgTypes[52] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3048,7 +3175,7 @@ func (x *ReadRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ReadRequest.ProtoReflect.Descriptor instead. func (*ReadRequest) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{51} + return file_machine_machine_proto_rawDescGZIP(), []int{52} } func (x *ReadRequest) GetPath() string { @@ -3068,7 +3195,7 @@ type RollbackRequest struct { func (x *RollbackRequest) Reset() { *x = RollbackRequest{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[52] + mi := &file_machine_machine_proto_msgTypes[53] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3081,7 +3208,7 @@ func (x *RollbackRequest) String() string { func (*RollbackRequest) ProtoMessage() {} func (x *RollbackRequest) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[52] + mi := &file_machine_machine_proto_msgTypes[53] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3094,7 +3221,7 @@ func (x *RollbackRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RollbackRequest.ProtoReflect.Descriptor instead. func (*RollbackRequest) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{52} + return file_machine_machine_proto_rawDescGZIP(), []int{53} } type Rollback struct { @@ -3108,7 +3235,7 @@ type Rollback struct { func (x *Rollback) Reset() { *x = Rollback{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[53] + mi := &file_machine_machine_proto_msgTypes[54] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3121,7 +3248,7 @@ func (x *Rollback) String() string { func (*Rollback) ProtoMessage() {} func (x *Rollback) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[53] + mi := &file_machine_machine_proto_msgTypes[54] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3134,7 +3261,7 @@ func (x *Rollback) ProtoReflect() protoreflect.Message { // Deprecated: Use Rollback.ProtoReflect.Descriptor instead. func (*Rollback) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{53} + return file_machine_machine_proto_rawDescGZIP(), []int{54} } func (x *Rollback) GetMetadata() *common.Metadata { @@ -3155,7 +3282,7 @@ type RollbackResponse struct { func (x *RollbackResponse) Reset() { *x = RollbackResponse{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[54] + mi := &file_machine_machine_proto_msgTypes[55] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3168,7 +3295,7 @@ func (x *RollbackResponse) String() string { func (*RollbackResponse) ProtoMessage() {} func (x *RollbackResponse) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[54] + mi := &file_machine_machine_proto_msgTypes[55] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3181,7 +3308,7 @@ func (x *RollbackResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use RollbackResponse.ProtoReflect.Descriptor instead. func (*RollbackResponse) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{54} + return file_machine_machine_proto_rawDescGZIP(), []int{55} } func (x *RollbackResponse) GetMessages() []*Rollback { @@ -3245,318 +3372,334 @@ var file_machine_machine_proto_rawDesc = []byte{ 0x61, 0x73, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x1d, 0x0a, 0x06, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x09, 0x0a, 0x05, 0x53, 0x54, 0x41, 0x52, 0x54, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, - 0x53, 0x54, 0x4f, 0x50, 0x10, 0x01, 0x22, 0x0f, 0x0a, 0x0d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x5f, 0x0a, 0x05, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x28, - 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, - 0x6e, 0x79, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x42, 0x0a, 0x0c, 0x52, 0x65, 0x73, 0x65, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x67, 0x72, 0x61, 0x63, - 0x65, 0x66, 0x75, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x67, 0x72, 0x61, 0x63, - 0x65, 0x66, 0x75, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x62, 0x6f, 0x6f, 0x74, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x72, 0x65, 0x62, 0x6f, 0x6f, 0x74, 0x22, 0x35, 0x0a, 0x05, - 0x52, 0x65, 0x73, 0x65, 0x74, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x22, 0x3b, 0x0a, 0x0d, 0x52, 0x65, 0x73, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, - 0x2e, 0x52, 0x65, 0x73, 0x65, 0x74, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, - 0x22, 0x6b, 0x0a, 0x0e, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x36, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x1e, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x52, 0x65, 0x63, - 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x21, 0x0a, 0x06, 0x53, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x12, 0x08, 0x0a, 0x04, 0x45, 0x54, 0x43, 0x44, 0x10, 0x00, 0x12, 0x0d, - 0x0a, 0x09, 0x41, 0x50, 0x49, 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x10, 0x01, 0x22, 0x37, 0x0a, - 0x07, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, - 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x3f, 0x0a, 0x0f, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, - 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x6d, 0x61, - 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x08, 0x6d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0x38, 0x0a, 0x08, 0x53, 0x68, 0x75, 0x74, 0x64, - 0x6f, 0x77, 0x6e, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, + 0x53, 0x54, 0x4f, 0x50, 0x10, 0x01, 0x22, 0xfb, 0x01, 0x0a, 0x11, 0x53, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, + 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x39, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, + 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x77, 0x0a, 0x06, 0x41, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0f, 0x0a, 0x0b, 0x49, 0x4e, 0x49, 0x54, 0x49, 0x41, 0x4c, + 0x49, 0x5a, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x50, 0x52, 0x45, 0x50, 0x41, 0x52, + 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x57, 0x41, 0x49, 0x54, 0x49, 0x4e, 0x47, + 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x55, 0x4e, 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x03, 0x12, + 0x0c, 0x0a, 0x08, 0x53, 0x54, 0x4f, 0x50, 0x50, 0x49, 0x4e, 0x47, 0x10, 0x04, 0x12, 0x0c, 0x0a, + 0x08, 0x46, 0x49, 0x4e, 0x49, 0x53, 0x48, 0x45, 0x44, 0x10, 0x05, 0x12, 0x0a, 0x0a, 0x06, 0x46, + 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x06, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x4b, 0x49, 0x50, 0x50, + 0x45, 0x44, 0x10, 0x07, 0x22, 0x0f, 0x0a, 0x0d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x5f, 0x0a, 0x05, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x2c, + 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x28, 0x0a, 0x04, + 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, + 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x42, 0x0a, 0x0c, 0x52, 0x65, 0x73, 0x65, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x67, 0x72, 0x61, 0x63, 0x65, 0x66, + 0x75, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x67, 0x72, 0x61, 0x63, 0x65, 0x66, + 0x75, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x62, 0x6f, 0x6f, 0x74, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x06, 0x72, 0x65, 0x62, 0x6f, 0x6f, 0x74, 0x22, 0x35, 0x0a, 0x05, 0x52, 0x65, + 0x73, 0x65, 0x74, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0x22, 0x41, 0x0a, 0x10, 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, - 0x65, 0x2e, 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x73, 0x22, 0x42, 0x0a, 0x0e, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x1a, 0x0a, 0x08, - 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, - 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x22, 0x49, 0x0a, 0x07, 0x55, 0x70, 0x67, 0x72, - 0x61, 0x64, 0x65, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x63, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, - 0x61, 0x63, 0x6b, 0x22, 0x3f, 0x0a, 0x0f, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, - 0x6e, 0x65, 0x2e, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x73, 0x22, 0x6d, 0x0a, 0x0b, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c, - 0x69, 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0x12, 0x30, 0x0a, 0x08, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x53, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x73, 0x22, 0x47, 0x0a, 0x13, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, - 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x08, 0x6d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6d, - 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, - 0x73, 0x74, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0x93, 0x01, 0x0a, - 0x0b, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x0e, 0x0a, 0x02, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, - 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, - 0x74, 0x65, 0x12, 0x2e, 0x0a, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x53, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, - 0x74, 0x73, 0x12, 0x2e, 0x0a, 0x06, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x53, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x52, 0x06, 0x68, 0x65, 0x61, 0x6c, - 0x74, 0x68, 0x22, 0x3e, 0x0a, 0x0d, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x73, 0x12, 0x2d, 0x0a, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x53, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, - 0x74, 0x73, 0x22, 0x62, 0x0a, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x6d, 0x73, 0x67, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x2a, 0x0a, 0x02, 0x74, 0x73, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x52, 0x02, 0x74, 0x73, 0x22, 0xa3, 0x01, 0x0a, 0x0d, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x12, 0x18, 0x0a, 0x07, 0x75, 0x6e, 0x6b, 0x6e, - 0x6f, 0x77, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x75, 0x6e, 0x6b, 0x6e, 0x6f, - 0x77, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x79, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x07, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x79, 0x12, 0x21, 0x0a, 0x0c, - 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0b, 0x6c, 0x61, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, - 0x3b, 0x0a, 0x0b, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x04, + 0x61, 0x22, 0x3b, 0x0a, 0x0d, 0x52, 0x65, 0x73, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x52, + 0x65, 0x73, 0x65, 0x74, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0x6b, + 0x0a, 0x0e, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x36, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x1e, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x76, + 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x21, 0x0a, 0x06, 0x53, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x12, 0x08, 0x0a, 0x04, 0x45, 0x54, 0x43, 0x44, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, + 0x41, 0x50, 0x49, 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x10, 0x01, 0x22, 0x37, 0x0a, 0x07, 0x52, + 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x22, 0x3f, 0x0a, 0x0f, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x6d, 0x61, 0x63, 0x68, + 0x69, 0x6e, 0x65, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x08, 0x6d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0x38, 0x0a, 0x08, 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, + 0x6e, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, + 0x41, 0x0a, 0x10, 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, + 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x73, 0x22, 0x42, 0x0a, 0x0e, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, + 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x70, 0x72, + 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x22, 0x49, 0x0a, 0x07, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, + 0x65, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, + 0x10, 0x0a, 0x03, 0x61, 0x63, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x61, 0x63, + 0x6b, 0x22, 0x3f, 0x0a, 0x0f, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, + 0x2e, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x73, 0x22, 0x6d, 0x0a, 0x0b, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, + 0x74, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, + 0x30, 0x0a, 0x08, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x14, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x53, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x73, 0x22, 0x47, 0x0a, 0x13, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6d, 0x61, 0x63, + 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, + 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0x93, 0x01, 0x0a, 0x0b, 0x53, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, + 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, + 0x12, 0x2e, 0x0a, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x16, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, + 0x12, 0x2e, 0x0a, 0x06, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x16, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x52, 0x06, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, + 0x22, 0x3e, 0x0a, 0x0d, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x73, 0x12, 0x2d, 0x0a, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x15, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x53, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, + 0x22, 0x62, 0x0a, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, + 0x73, 0x67, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x2a, 0x0a, 0x02, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x52, 0x0a, 0x6c, 0x61, 0x73, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x22, 0x25, 0x0a, 0x13, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x02, 0x69, 0x64, 0x22, 0x50, 0x0a, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, - 0x61, 0x72, 0x74, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, + 0x52, 0x02, 0x74, 0x73, 0x22, 0xa3, 0x01, 0x0a, 0x0d, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x12, 0x18, 0x0a, 0x07, 0x75, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, + 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x75, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, + 0x12, 0x18, 0x0a, 0x07, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x07, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x79, 0x12, 0x21, 0x0a, 0x0c, 0x6c, 0x61, + 0x73, 0x74, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0b, 0x6c, 0x61, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3b, 0x0a, + 0x0b, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, + 0x6c, 0x61, 0x73, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x22, 0x25, 0x0a, 0x13, 0x53, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, + 0x64, 0x22, 0x50, 0x0a, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x72, + 0x74, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, + 0x12, 0x0a, 0x04, 0x72, 0x65, 0x73, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, + 0x65, 0x73, 0x70, 0x22, 0x49, 0x0a, 0x14, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, + 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x31, 0x0a, 0x08, 0x6d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, + 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, + 0x74, 0x61, 0x72, 0x74, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0x24, + 0x0a, 0x12, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x02, 0x69, 0x64, 0x22, 0x4f, 0x0a, 0x0b, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, + 0x74, 0x6f, 0x70, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x65, 0x73, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x72, 0x65, 0x73, 0x70, 0x22, 0x49, 0x0a, 0x14, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x31, 0x0a, - 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x15, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, - 0x22, 0x24, 0x0a, 0x12, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x6f, 0x70, 0x52, + 0x04, 0x72, 0x65, 0x73, 0x70, 0x22, 0x47, 0x0a, 0x13, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x08, + 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, + 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x53, 0x74, 0x6f, 0x70, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0x27, + 0x0a, 0x15, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x52, 0x0a, 0x0e, 0x53, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x65, 0x73, 0x70, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, 0x65, 0x73, 0x70, 0x22, 0x4d, 0x0a, 0x16, 0x53, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x33, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, + 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0x22, 0x0a, 0x0c, 0x53, 0x74, + 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x3a, 0x02, 0x18, 0x01, 0x22, 0x27, + 0x0a, 0x0d, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x12, 0x0a, 0x04, 0x72, 0x65, 0x73, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, + 0x65, 0x73, 0x70, 0x3a, 0x02, 0x18, 0x01, 0x22, 0x21, 0x0a, 0x0b, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x4f, 0x0a, 0x0b, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x53, 0x74, 0x6f, 0x70, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x65, 0x73, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x72, 0x65, 0x73, 0x70, 0x22, 0x47, 0x0a, 0x13, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, - 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x14, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, - 0x22, 0x27, 0x0a, 0x15, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x74, 0x61, - 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x52, 0x0a, 0x0e, 0x53, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x2c, 0x0a, 0x08, 0x6d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, - 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, - 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x65, 0x73, - 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, 0x65, 0x73, 0x70, 0x22, 0x4d, 0x0a, - 0x16, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x33, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6d, 0x61, 0x63, 0x68, - 0x69, 0x6e, 0x65, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x74, 0x61, - 0x72, 0x74, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0x22, 0x0a, 0x0c, - 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x3a, 0x02, 0x18, 0x01, - 0x22, 0x27, 0x0a, 0x0d, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x65, 0x73, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x72, 0x65, 0x73, 0x70, 0x3a, 0x02, 0x18, 0x01, 0x22, 0x21, 0x0a, 0x0b, 0x53, 0x74, 0x6f, - 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x3a, 0x02, 0x18, 0x01, 0x22, 0x26, 0x0a, 0x0c, - 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, - 0x72, 0x65, 0x73, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, 0x65, 0x73, 0x70, - 0x3a, 0x02, 0x18, 0x01, 0x22, 0x2a, 0x0a, 0x0b, 0x43, 0x6f, 0x70, 0x79, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x6f, 0x6f, 0x74, 0x5f, 0x70, 0x61, 0x74, 0x68, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x6f, 0x6f, 0x74, 0x50, 0x61, 0x74, 0x68, - 0x22, 0x64, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x12, 0x0a, 0x04, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, - 0x6f, 0x6f, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x63, 0x75, 0x72, 0x73, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x72, 0x65, 0x63, 0x75, 0x72, 0x73, 0x65, 0x12, 0x27, 0x0a, - 0x0f, 0x72, 0x65, 0x63, 0x75, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x65, 0x70, 0x74, 0x68, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x72, 0x65, 0x63, 0x75, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x44, 0x65, 0x70, 0x74, 0x68, 0x22, 0xf6, 0x01, 0x0a, 0x08, 0x46, 0x69, 0x6c, 0x65, 0x49, - 0x6e, 0x66, 0x6f, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x6f, 0x64, - 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x12, 0x1a, 0x0a, - 0x08, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x08, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x69, 0x73, 0x5f, - 0x64, 0x69, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x69, 0x73, 0x44, 0x69, 0x72, - 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6c, 0x69, 0x6e, 0x6b, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6c, 0x69, 0x6e, 0x6b, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, - 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0c, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, - 0x60, 0x0a, 0x06, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x28, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x73, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, - 0x2e, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, - 0x73, 0x22, 0x3d, 0x0a, 0x0e, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x2b, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, - 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, - 0x22, 0x7c, 0x0a, 0x09, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x12, 0x1e, 0x0a, - 0x0a, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0a, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x12, 0x12, 0x0a, - 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x73, 0x69, 0x7a, - 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x12, - 0x1d, 0x0a, 0x0a, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x64, 0x5f, 0x6f, 0x6e, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x64, 0x4f, 0x6e, 0x22, 0x9a, - 0x01, 0x0a, 0x07, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, - 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, - 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x2e, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6d, 0x61, 0x63, 0x68, - 0x69, 0x6e, 0x65, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, - 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x31, 0x0a, 0x08, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x6d, 0x61, 0x63, - 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x49, 0x6e, 0x66, - 0x6f, 0x52, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x22, 0x3f, 0x0a, 0x0f, 0x56, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, - 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x10, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0x8a, 0x01, 0x0a, - 0x0b, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x10, 0x0a, 0x03, - 0x74, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x74, 0x61, 0x67, 0x12, 0x10, - 0x0a, 0x03, 0x73, 0x68, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x73, 0x68, 0x61, - 0x12, 0x14, 0x0a, 0x05, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x6f, 0x5f, 0x76, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x6f, 0x56, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x6f, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x02, 0x6f, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x72, 0x63, 0x68, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x61, 0x72, 0x63, 0x68, 0x22, 0x36, 0x0a, 0x0c, 0x50, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, - 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6d, 0x6f, 0x64, - 0x65, 0x22, 0xa3, 0x01, 0x0a, 0x0b, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, - 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, - 0x2f, 0x0a, 0x06, 0x64, 0x72, 0x69, 0x76, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x17, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, - 0x65, 0x72, 0x44, 0x72, 0x69, 0x76, 0x65, 0x72, 0x52, 0x06, 0x64, 0x72, 0x69, 0x76, 0x65, 0x72, - 0x12, 0x16, 0x0a, 0x06, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x06, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x61, 0x69, 0x6c, - 0x5f, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x74, 0x61, - 0x69, 0x6c, 0x4c, 0x69, 0x6e, 0x65, 0x73, 0x22, 0x21, 0x0a, 0x0b, 0x52, 0x65, 0x61, 0x64, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x22, 0x11, 0x0a, 0x0f, 0x52, 0x6f, - 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x38, 0x0a, - 0x08, 0x52, 0x6f, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x41, 0x0a, 0x10, 0x52, 0x6f, 0x6c, 0x6c, 0x62, - 0x61, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x08, 0x6d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, - 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x52, 0x6f, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, - 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x32, 0x91, 0x09, 0x0a, 0x0e, 0x4d, - 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x42, 0x0a, - 0x09, 0x42, 0x6f, 0x6f, 0x74, 0x73, 0x74, 0x72, 0x61, 0x70, 0x12, 0x19, 0x2e, 0x6d, 0x61, 0x63, - 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x42, 0x6f, 0x6f, 0x74, 0x73, 0x74, 0x72, 0x61, 0x70, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, - 0x42, 0x6f, 0x6f, 0x74, 0x73, 0x74, 0x72, 0x61, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x2c, 0x0a, 0x04, 0x43, 0x6f, 0x70, 0x79, 0x12, 0x14, 0x2e, 0x6d, 0x61, 0x63, 0x68, - 0x69, 0x6e, 0x65, 0x2e, 0x43, 0x6f, 0x70, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x0c, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x30, 0x01, 0x12, - 0x32, 0x0a, 0x06, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x16, 0x2e, 0x6d, 0x61, 0x63, 0x68, - 0x69, 0x6e, 0x65, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x0e, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x45, 0x76, 0x65, 0x6e, - 0x74, 0x30, 0x01, 0x12, 0x34, 0x0a, 0x0a, 0x4b, 0x75, 0x62, 0x65, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x0c, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x30, 0x01, 0x12, 0x31, 0x0a, 0x04, 0x4c, 0x69, 0x73, - 0x74, 0x12, 0x14, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x4c, 0x69, 0x73, 0x74, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, - 0x65, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x30, 0x01, 0x12, 0x2c, 0x0a, 0x04, - 0x4c, 0x6f, 0x67, 0x73, 0x12, 0x14, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x4c, - 0x6f, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0c, 0x2e, 0x63, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x30, 0x01, 0x12, 0x39, 0x0a, 0x06, 0x4d, 0x6f, - 0x75, 0x6e, 0x74, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x17, 0x2e, 0x6d, - 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x04, 0x52, 0x65, 0x61, 0x64, 0x12, 0x14, 0x2e, - 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x0c, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x44, 0x61, 0x74, - 0x61, 0x30, 0x01, 0x12, 0x39, 0x0a, 0x06, 0x52, 0x65, 0x62, 0x6f, 0x6f, 0x74, 0x12, 0x16, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x17, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, - 0x52, 0x65, 0x62, 0x6f, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3f, - 0x0a, 0x08, 0x52, 0x6f, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x12, 0x18, 0x2e, 0x6d, 0x61, 0x63, - 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x52, 0x6f, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x52, - 0x6f, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x36, 0x0a, 0x05, 0x52, 0x65, 0x73, 0x65, 0x74, 0x12, 0x15, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, - 0x6e, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x16, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x65, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x07, 0x52, 0x65, 0x63, 0x6f, 0x76, - 0x65, 0x72, 0x12, 0x17, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x52, 0x65, 0x63, - 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x6d, 0x61, - 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x0b, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x4c, 0x69, 0x73, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1c, 0x2e, 0x6d, - 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, - 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, 0x0e, 0x53, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x1e, 0x2e, 0x6d, - 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, - 0x73, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x6d, - 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, - 0x73, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4b, 0x0a, - 0x0c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x1c, 0x2e, - 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, - 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x6d, 0x61, + 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x3a, 0x02, 0x18, 0x01, 0x22, 0x26, 0x0a, 0x0c, 0x53, 0x74, + 0x6f, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x65, + 0x73, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, 0x65, 0x73, 0x70, 0x3a, 0x02, + 0x18, 0x01, 0x22, 0x2a, 0x0a, 0x0b, 0x43, 0x6f, 0x70, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x6f, 0x6f, 0x74, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x6f, 0x6f, 0x74, 0x50, 0x61, 0x74, 0x68, 0x22, 0x64, + 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, + 0x04, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, 0x6f, 0x6f, + 0x74, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x63, 0x75, 0x72, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x07, 0x72, 0x65, 0x63, 0x75, 0x72, 0x73, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x72, + 0x65, 0x63, 0x75, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x65, 0x70, 0x74, 0x68, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x72, 0x65, 0x63, 0x75, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x44, + 0x65, 0x70, 0x74, 0x68, 0x22, 0xf6, 0x01, 0x0a, 0x08, 0x46, 0x69, 0x6c, 0x65, 0x49, 0x6e, 0x66, + 0x6f, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, + 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6d, + 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x6d, + 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x69, 0x73, 0x5f, 0x64, 0x69, + 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x69, 0x73, 0x44, 0x69, 0x72, 0x12, 0x14, + 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, + 0x72, 0x72, 0x6f, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6c, 0x69, 0x6e, 0x6b, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6c, 0x69, 0x6e, 0x6b, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x6c, 0x61, + 0x74, 0x69, 0x76, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0c, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x60, 0x0a, + 0x06, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x28, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x73, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x4d, + 0x6f, 0x75, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x73, 0x22, + 0x3d, 0x0a, 0x0e, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x2b, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x4d, 0x6f, + 0x75, 0x6e, 0x74, 0x73, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0x7c, + 0x0a, 0x09, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x66, + 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0a, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x73, + 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, + 0x1c, 0x0a, 0x09, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x09, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x1d, 0x0a, + 0x0a, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x64, 0x5f, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x64, 0x4f, 0x6e, 0x22, 0x9a, 0x01, 0x0a, + 0x07, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x2e, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x07, 0x76, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x31, 0x0a, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, + 0x6e, 0x65, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x52, + 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x22, 0x3f, 0x0a, 0x0f, 0x56, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x08, + 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, + 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0x8a, 0x01, 0x0a, 0x0b, 0x56, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x10, 0x0a, 0x03, 0x74, 0x61, + 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x74, 0x61, 0x67, 0x12, 0x10, 0x0a, 0x03, + 0x73, 0x68, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x73, 0x68, 0x61, 0x12, 0x14, + 0x0a, 0x05, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x62, + 0x75, 0x69, 0x6c, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x6f, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x6f, 0x56, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x6f, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x02, 0x6f, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x72, 0x63, 0x68, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x61, 0x72, 0x63, 0x68, 0x22, 0x36, 0x0a, 0x0c, 0x50, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6d, + 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x22, + 0xa3, 0x01, 0x0a, 0x0b, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x2f, 0x0a, + 0x06, 0x64, 0x72, 0x69, 0x76, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, + 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, + 0x44, 0x72, 0x69, 0x76, 0x65, 0x72, 0x52, 0x06, 0x64, 0x72, 0x69, 0x76, 0x65, 0x72, 0x12, 0x16, + 0x0a, 0x06, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, + 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x61, 0x69, 0x6c, 0x5f, 0x6c, + 0x69, 0x6e, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x74, 0x61, 0x69, 0x6c, + 0x4c, 0x69, 0x6e, 0x65, 0x73, 0x22, 0x21, 0x0a, 0x0b, 0x52, 0x65, 0x61, 0x64, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x22, 0x11, 0x0a, 0x0f, 0x52, 0x6f, 0x6c, 0x6c, + 0x62, 0x61, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x38, 0x0a, 0x08, 0x52, + 0x6f, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x41, 0x0a, 0x10, 0x52, 0x6f, 0x6c, 0x6c, 0x62, 0x61, 0x63, + 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x08, 0x6d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x6d, 0x61, + 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x52, 0x6f, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x52, 0x08, + 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x32, 0x91, 0x09, 0x0a, 0x0e, 0x4d, 0x61, 0x63, + 0x68, 0x69, 0x6e, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x42, 0x0a, 0x09, 0x42, + 0x6f, 0x6f, 0x74, 0x73, 0x74, 0x72, 0x61, 0x70, 0x12, 0x19, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, + 0x6e, 0x65, 0x2e, 0x42, 0x6f, 0x6f, 0x74, 0x73, 0x74, 0x72, 0x61, 0x70, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x42, 0x6f, + 0x6f, 0x74, 0x73, 0x74, 0x72, 0x61, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x2c, 0x0a, 0x04, 0x43, 0x6f, 0x70, 0x79, 0x12, 0x14, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x2e, 0x43, 0x6f, 0x70, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0c, 0x2e, + 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x30, 0x01, 0x12, 0x32, 0x0a, + 0x06, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x16, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x0e, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x30, + 0x01, 0x12, 0x34, 0x0a, 0x0a, 0x4b, 0x75, 0x62, 0x65, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, + 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x0c, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x2e, 0x44, 0x61, 0x74, 0x61, 0x30, 0x01, 0x12, 0x31, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, + 0x14, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, + 0x46, 0x69, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x30, 0x01, 0x12, 0x2c, 0x0a, 0x04, 0x4c, 0x6f, + 0x67, 0x73, 0x12, 0x14, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x4c, 0x6f, 0x67, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0c, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x30, 0x01, 0x12, 0x39, 0x0a, 0x06, 0x4d, 0x6f, 0x75, 0x6e, + 0x74, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x17, 0x2e, 0x6d, 0x61, 0x63, + 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x04, 0x52, 0x65, 0x61, 0x64, 0x12, 0x14, 0x2e, 0x6d, 0x61, + 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x0c, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x30, + 0x01, 0x12, 0x39, 0x0a, 0x06, 0x52, 0x65, 0x62, 0x6f, 0x6f, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x1a, 0x17, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x52, 0x65, + 0x62, 0x6f, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x08, + 0x52, 0x6f, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x12, 0x18, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, + 0x6e, 0x65, 0x2e, 0x52, 0x6f, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x52, 0x6f, 0x6c, + 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, + 0x05, 0x52, 0x65, 0x73, 0x65, 0x74, 0x12, 0x15, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, + 0x2e, 0x52, 0x65, 0x73, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, + 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x65, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x07, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, + 0x12, 0x17, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x76, + 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x6d, 0x61, 0x63, 0x68, + 0x69, 0x6e, 0x65, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x0b, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, + 0x73, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1c, 0x2e, 0x6d, 0x61, 0x63, + 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, 0x0e, 0x53, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x1e, 0x2e, 0x6d, 0x61, 0x63, + 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x74, + 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x6d, 0x61, 0x63, + 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x74, + 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4b, 0x0a, 0x0c, 0x53, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x1c, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, - 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x0b, 0x53, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x6f, 0x70, 0x12, 0x1b, 0x2e, 0x6d, 0x61, 0x63, 0x68, - 0x69, 0x6e, 0x65, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x6f, 0x70, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, - 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x08, 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, - 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x19, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, - 0x6e, 0x65, 0x2e, 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x07, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x12, 0x17, - 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, - 0x65, 0x2e, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x3b, 0x0a, 0x07, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x18, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x56, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x4b, - 0x0a, 0x0f, 0x63, 0x6f, 0x6d, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x61, 0x70, - 0x69, 0x42, 0x0a, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x41, 0x70, 0x69, 0x50, 0x01, 0x5a, - 0x2a, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x74, 0x61, 0x6c, 0x6f, - 0x73, 0x2d, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x73, 0x2f, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x2f, - 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x33, + 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x6d, 0x61, 0x63, 0x68, + 0x69, 0x6e, 0x65, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x0b, 0x53, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x53, 0x74, 0x6f, 0x70, 0x12, 0x1b, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x53, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x08, 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x12, 0x16, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x19, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, + 0x2e, 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x3c, 0x0a, 0x07, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x12, 0x17, 0x2e, 0x6d, + 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, + 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x3b, 0x0a, 0x07, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, + 0x74, 0x79, 0x1a, 0x18, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x56, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x4b, 0x0a, 0x0f, + 0x63, 0x6f, 0x6d, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x42, + 0x0a, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x41, 0x70, 0x69, 0x50, 0x01, 0x5a, 0x2a, 0x67, + 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x2d, + 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x73, 0x2f, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x2f, 0x61, 0x70, + 0x69, 0x2f, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x33, } var ( @@ -3572,166 +3715,169 @@ func file_machine_machine_proto_rawDescGZIP() []byte { } var ( - file_machine_machine_proto_enumTypes = make([]protoimpl.EnumInfo, 4) - file_machine_machine_proto_msgTypes = make([]protoimpl.MessageInfo, 55) + file_machine_machine_proto_enumTypes = make([]protoimpl.EnumInfo, 5) + file_machine_machine_proto_msgTypes = make([]protoimpl.MessageInfo, 56) file_machine_machine_proto_goTypes = []interface{}{ (SequenceEvent_Action)(0), // 0: machine.SequenceEvent.Action (PhaseEvent_Action)(0), // 1: machine.PhaseEvent.Action (TaskEvent_Action)(0), // 2: machine.TaskEvent.Action - (RecoverRequest_Source)(0), // 3: machine.RecoverRequest.Source - (*Reboot)(nil), // 4: machine.Reboot - (*RebootResponse)(nil), // 5: machine.RebootResponse - (*BootstrapRequest)(nil), // 6: machine.BootstrapRequest - (*Bootstrap)(nil), // 7: machine.Bootstrap - (*BootstrapResponse)(nil), // 8: machine.BootstrapResponse - (*SequenceEvent)(nil), // 9: machine.SequenceEvent - (*PhaseEvent)(nil), // 10: machine.PhaseEvent - (*TaskEvent)(nil), // 11: machine.TaskEvent - (*EventsRequest)(nil), // 12: machine.EventsRequest - (*Event)(nil), // 13: machine.Event - (*ResetRequest)(nil), // 14: machine.ResetRequest - (*Reset)(nil), // 15: machine.Reset - (*ResetResponse)(nil), // 16: machine.ResetResponse - (*RecoverRequest)(nil), // 17: machine.RecoverRequest - (*Recover)(nil), // 18: machine.Recover - (*RecoverResponse)(nil), // 19: machine.RecoverResponse - (*Shutdown)(nil), // 20: machine.Shutdown - (*ShutdownResponse)(nil), // 21: machine.ShutdownResponse - (*UpgradeRequest)(nil), // 22: machine.UpgradeRequest - (*Upgrade)(nil), // 23: machine.Upgrade - (*UpgradeResponse)(nil), // 24: machine.UpgradeResponse - (*ServiceList)(nil), // 25: machine.ServiceList - (*ServiceListResponse)(nil), // 26: machine.ServiceListResponse - (*ServiceInfo)(nil), // 27: machine.ServiceInfo - (*ServiceEvents)(nil), // 28: machine.ServiceEvents - (*ServiceEvent)(nil), // 29: machine.ServiceEvent - (*ServiceHealth)(nil), // 30: machine.ServiceHealth - (*ServiceStartRequest)(nil), // 31: machine.ServiceStartRequest - (*ServiceStart)(nil), // 32: machine.ServiceStart - (*ServiceStartResponse)(nil), // 33: machine.ServiceStartResponse - (*ServiceStopRequest)(nil), // 34: machine.ServiceStopRequest - (*ServiceStop)(nil), // 35: machine.ServiceStop - (*ServiceStopResponse)(nil), // 36: machine.ServiceStopResponse - (*ServiceRestartRequest)(nil), // 37: machine.ServiceRestartRequest - (*ServiceRestart)(nil), // 38: machine.ServiceRestart - (*ServiceRestartResponse)(nil), // 39: machine.ServiceRestartResponse - (*StartRequest)(nil), // 40: machine.StartRequest - (*StartResponse)(nil), // 41: machine.StartResponse - (*StopRequest)(nil), // 42: machine.StopRequest - (*StopResponse)(nil), // 43: machine.StopResponse - (*CopyRequest)(nil), // 44: machine.CopyRequest - (*ListRequest)(nil), // 45: machine.ListRequest - (*FileInfo)(nil), // 46: machine.FileInfo - (*Mounts)(nil), // 47: machine.Mounts - (*MountsResponse)(nil), // 48: machine.MountsResponse - (*MountStat)(nil), // 49: machine.MountStat - (*Version)(nil), // 50: machine.Version - (*VersionResponse)(nil), // 51: machine.VersionResponse - (*VersionInfo)(nil), // 52: machine.VersionInfo - (*PlatformInfo)(nil), // 53: machine.PlatformInfo - (*LogsRequest)(nil), // 54: machine.LogsRequest - (*ReadRequest)(nil), // 55: machine.ReadRequest - (*RollbackRequest)(nil), // 56: machine.RollbackRequest - (*Rollback)(nil), // 57: machine.Rollback - (*RollbackResponse)(nil), // 58: machine.RollbackResponse - (*common.Metadata)(nil), // 59: common.Metadata - (*common.Error)(nil), // 60: common.Error - (*any.Any)(nil), // 61: google.protobuf.Any - (*timestamp.Timestamp)(nil), // 62: google.protobuf.Timestamp - (common.ContainerDriver)(0), // 63: common.ContainerDriver - (*empty.Empty)(nil), // 64: google.protobuf.Empty - (*common.Data)(nil), // 65: common.Data + (ServiceStateEvent_Action)(0), // 3: machine.ServiceStateEvent.Action + (RecoverRequest_Source)(0), // 4: machine.RecoverRequest.Source + (*Reboot)(nil), // 5: machine.Reboot + (*RebootResponse)(nil), // 6: machine.RebootResponse + (*BootstrapRequest)(nil), // 7: machine.BootstrapRequest + (*Bootstrap)(nil), // 8: machine.Bootstrap + (*BootstrapResponse)(nil), // 9: machine.BootstrapResponse + (*SequenceEvent)(nil), // 10: machine.SequenceEvent + (*PhaseEvent)(nil), // 11: machine.PhaseEvent + (*TaskEvent)(nil), // 12: machine.TaskEvent + (*ServiceStateEvent)(nil), // 13: machine.ServiceStateEvent + (*EventsRequest)(nil), // 14: machine.EventsRequest + (*Event)(nil), // 15: machine.Event + (*ResetRequest)(nil), // 16: machine.ResetRequest + (*Reset)(nil), // 17: machine.Reset + (*ResetResponse)(nil), // 18: machine.ResetResponse + (*RecoverRequest)(nil), // 19: machine.RecoverRequest + (*Recover)(nil), // 20: machine.Recover + (*RecoverResponse)(nil), // 21: machine.RecoverResponse + (*Shutdown)(nil), // 22: machine.Shutdown + (*ShutdownResponse)(nil), // 23: machine.ShutdownResponse + (*UpgradeRequest)(nil), // 24: machine.UpgradeRequest + (*Upgrade)(nil), // 25: machine.Upgrade + (*UpgradeResponse)(nil), // 26: machine.UpgradeResponse + (*ServiceList)(nil), // 27: machine.ServiceList + (*ServiceListResponse)(nil), // 28: machine.ServiceListResponse + (*ServiceInfo)(nil), // 29: machine.ServiceInfo + (*ServiceEvents)(nil), // 30: machine.ServiceEvents + (*ServiceEvent)(nil), // 31: machine.ServiceEvent + (*ServiceHealth)(nil), // 32: machine.ServiceHealth + (*ServiceStartRequest)(nil), // 33: machine.ServiceStartRequest + (*ServiceStart)(nil), // 34: machine.ServiceStart + (*ServiceStartResponse)(nil), // 35: machine.ServiceStartResponse + (*ServiceStopRequest)(nil), // 36: machine.ServiceStopRequest + (*ServiceStop)(nil), // 37: machine.ServiceStop + (*ServiceStopResponse)(nil), // 38: machine.ServiceStopResponse + (*ServiceRestartRequest)(nil), // 39: machine.ServiceRestartRequest + (*ServiceRestart)(nil), // 40: machine.ServiceRestart + (*ServiceRestartResponse)(nil), // 41: machine.ServiceRestartResponse + (*StartRequest)(nil), // 42: machine.StartRequest + (*StartResponse)(nil), // 43: machine.StartResponse + (*StopRequest)(nil), // 44: machine.StopRequest + (*StopResponse)(nil), // 45: machine.StopResponse + (*CopyRequest)(nil), // 46: machine.CopyRequest + (*ListRequest)(nil), // 47: machine.ListRequest + (*FileInfo)(nil), // 48: machine.FileInfo + (*Mounts)(nil), // 49: machine.Mounts + (*MountsResponse)(nil), // 50: machine.MountsResponse + (*MountStat)(nil), // 51: machine.MountStat + (*Version)(nil), // 52: machine.Version + (*VersionResponse)(nil), // 53: machine.VersionResponse + (*VersionInfo)(nil), // 54: machine.VersionInfo + (*PlatformInfo)(nil), // 55: machine.PlatformInfo + (*LogsRequest)(nil), // 56: machine.LogsRequest + (*ReadRequest)(nil), // 57: machine.ReadRequest + (*RollbackRequest)(nil), // 58: machine.RollbackRequest + (*Rollback)(nil), // 59: machine.Rollback + (*RollbackResponse)(nil), // 60: machine.RollbackResponse + (*common.Metadata)(nil), // 61: common.Metadata + (*common.Error)(nil), // 62: common.Error + (*any.Any)(nil), // 63: google.protobuf.Any + (*timestamp.Timestamp)(nil), // 64: google.protobuf.Timestamp + (common.ContainerDriver)(0), // 65: common.ContainerDriver + (*empty.Empty)(nil), // 66: google.protobuf.Empty + (*common.Data)(nil), // 67: common.Data } ) var file_machine_machine_proto_depIdxs = []int32{ - 59, // 0: machine.Reboot.metadata:type_name -> common.Metadata - 4, // 1: machine.RebootResponse.messages:type_name -> machine.Reboot - 59, // 2: machine.Bootstrap.metadata:type_name -> common.Metadata - 7, // 3: machine.BootstrapResponse.messages:type_name -> machine.Bootstrap + 61, // 0: machine.Reboot.metadata:type_name -> common.Metadata + 5, // 1: machine.RebootResponse.messages:type_name -> machine.Reboot + 61, // 2: machine.Bootstrap.metadata:type_name -> common.Metadata + 8, // 3: machine.BootstrapResponse.messages:type_name -> machine.Bootstrap 0, // 4: machine.SequenceEvent.action:type_name -> machine.SequenceEvent.Action - 60, // 5: machine.SequenceEvent.error:type_name -> common.Error + 62, // 5: machine.SequenceEvent.error:type_name -> common.Error 1, // 6: machine.PhaseEvent.action:type_name -> machine.PhaseEvent.Action 2, // 7: machine.TaskEvent.action:type_name -> machine.TaskEvent.Action - 59, // 8: machine.Event.metadata:type_name -> common.Metadata - 61, // 9: machine.Event.data:type_name -> google.protobuf.Any - 59, // 10: machine.Reset.metadata:type_name -> common.Metadata - 15, // 11: machine.ResetResponse.messages:type_name -> machine.Reset - 3, // 12: machine.RecoverRequest.source:type_name -> machine.RecoverRequest.Source - 59, // 13: machine.Recover.metadata:type_name -> common.Metadata - 18, // 14: machine.RecoverResponse.messages:type_name -> machine.Recover - 59, // 15: machine.Shutdown.metadata:type_name -> common.Metadata - 20, // 16: machine.ShutdownResponse.messages:type_name -> machine.Shutdown - 59, // 17: machine.Upgrade.metadata:type_name -> common.Metadata - 23, // 18: machine.UpgradeResponse.messages:type_name -> machine.Upgrade - 59, // 19: machine.ServiceList.metadata:type_name -> common.Metadata - 27, // 20: machine.ServiceList.services:type_name -> machine.ServiceInfo - 25, // 21: machine.ServiceListResponse.messages:type_name -> machine.ServiceList - 28, // 22: machine.ServiceInfo.events:type_name -> machine.ServiceEvents - 30, // 23: machine.ServiceInfo.health:type_name -> machine.ServiceHealth - 29, // 24: machine.ServiceEvents.events:type_name -> machine.ServiceEvent - 62, // 25: machine.ServiceEvent.ts:type_name -> google.protobuf.Timestamp - 62, // 26: machine.ServiceHealth.last_change:type_name -> google.protobuf.Timestamp - 59, // 27: machine.ServiceStart.metadata:type_name -> common.Metadata - 32, // 28: machine.ServiceStartResponse.messages:type_name -> machine.ServiceStart - 59, // 29: machine.ServiceStop.metadata:type_name -> common.Metadata - 35, // 30: machine.ServiceStopResponse.messages:type_name -> machine.ServiceStop - 59, // 31: machine.ServiceRestart.metadata:type_name -> common.Metadata - 38, // 32: machine.ServiceRestartResponse.messages:type_name -> machine.ServiceRestart - 59, // 33: machine.FileInfo.metadata:type_name -> common.Metadata - 59, // 34: machine.Mounts.metadata:type_name -> common.Metadata - 49, // 35: machine.Mounts.stats:type_name -> machine.MountStat - 47, // 36: machine.MountsResponse.messages:type_name -> machine.Mounts - 59, // 37: machine.Version.metadata:type_name -> common.Metadata - 52, // 38: machine.Version.version:type_name -> machine.VersionInfo - 53, // 39: machine.Version.platform:type_name -> machine.PlatformInfo - 50, // 40: machine.VersionResponse.messages:type_name -> machine.Version - 63, // 41: machine.LogsRequest.driver:type_name -> common.ContainerDriver - 59, // 42: machine.Rollback.metadata:type_name -> common.Metadata - 57, // 43: machine.RollbackResponse.messages:type_name -> machine.Rollback - 6, // 44: machine.MachineService.Bootstrap:input_type -> machine.BootstrapRequest - 44, // 45: machine.MachineService.Copy:input_type -> machine.CopyRequest - 12, // 46: machine.MachineService.Events:input_type -> machine.EventsRequest - 64, // 47: machine.MachineService.Kubeconfig:input_type -> google.protobuf.Empty - 45, // 48: machine.MachineService.List:input_type -> machine.ListRequest - 54, // 49: machine.MachineService.Logs:input_type -> machine.LogsRequest - 64, // 50: machine.MachineService.Mounts:input_type -> google.protobuf.Empty - 55, // 51: machine.MachineService.Read:input_type -> machine.ReadRequest - 64, // 52: machine.MachineService.Reboot:input_type -> google.protobuf.Empty - 56, // 53: machine.MachineService.Rollback:input_type -> machine.RollbackRequest - 14, // 54: machine.MachineService.Reset:input_type -> machine.ResetRequest - 17, // 55: machine.MachineService.Recover:input_type -> machine.RecoverRequest - 64, // 56: machine.MachineService.ServiceList:input_type -> google.protobuf.Empty - 37, // 57: machine.MachineService.ServiceRestart:input_type -> machine.ServiceRestartRequest - 31, // 58: machine.MachineService.ServiceStart:input_type -> machine.ServiceStartRequest - 34, // 59: machine.MachineService.ServiceStop:input_type -> machine.ServiceStopRequest - 64, // 60: machine.MachineService.Shutdown:input_type -> google.protobuf.Empty - 22, // 61: machine.MachineService.Upgrade:input_type -> machine.UpgradeRequest - 64, // 62: machine.MachineService.Version:input_type -> google.protobuf.Empty - 8, // 63: machine.MachineService.Bootstrap:output_type -> machine.BootstrapResponse - 65, // 64: machine.MachineService.Copy:output_type -> common.Data - 13, // 65: machine.MachineService.Events:output_type -> machine.Event - 65, // 66: machine.MachineService.Kubeconfig:output_type -> common.Data - 46, // 67: machine.MachineService.List:output_type -> machine.FileInfo - 65, // 68: machine.MachineService.Logs:output_type -> common.Data - 48, // 69: machine.MachineService.Mounts:output_type -> machine.MountsResponse - 65, // 70: machine.MachineService.Read:output_type -> common.Data - 5, // 71: machine.MachineService.Reboot:output_type -> machine.RebootResponse - 58, // 72: machine.MachineService.Rollback:output_type -> machine.RollbackResponse - 16, // 73: machine.MachineService.Reset:output_type -> machine.ResetResponse - 19, // 74: machine.MachineService.Recover:output_type -> machine.RecoverResponse - 26, // 75: machine.MachineService.ServiceList:output_type -> machine.ServiceListResponse - 39, // 76: machine.MachineService.ServiceRestart:output_type -> machine.ServiceRestartResponse - 33, // 77: machine.MachineService.ServiceStart:output_type -> machine.ServiceStartResponse - 36, // 78: machine.MachineService.ServiceStop:output_type -> machine.ServiceStopResponse - 21, // 79: machine.MachineService.Shutdown:output_type -> machine.ShutdownResponse - 24, // 80: machine.MachineService.Upgrade:output_type -> machine.UpgradeResponse - 51, // 81: machine.MachineService.Version:output_type -> machine.VersionResponse - 63, // [63:82] is the sub-list for method output_type - 44, // [44:63] is the sub-list for method input_type - 44, // [44:44] is the sub-list for extension type_name - 44, // [44:44] is the sub-list for extension extendee - 0, // [0:44] is the sub-list for field type_name + 3, // 8: machine.ServiceStateEvent.action:type_name -> machine.ServiceStateEvent.Action + 61, // 9: machine.Event.metadata:type_name -> common.Metadata + 63, // 10: machine.Event.data:type_name -> google.protobuf.Any + 61, // 11: machine.Reset.metadata:type_name -> common.Metadata + 17, // 12: machine.ResetResponse.messages:type_name -> machine.Reset + 4, // 13: machine.RecoverRequest.source:type_name -> machine.RecoverRequest.Source + 61, // 14: machine.Recover.metadata:type_name -> common.Metadata + 20, // 15: machine.RecoverResponse.messages:type_name -> machine.Recover + 61, // 16: machine.Shutdown.metadata:type_name -> common.Metadata + 22, // 17: machine.ShutdownResponse.messages:type_name -> machine.Shutdown + 61, // 18: machine.Upgrade.metadata:type_name -> common.Metadata + 25, // 19: machine.UpgradeResponse.messages:type_name -> machine.Upgrade + 61, // 20: machine.ServiceList.metadata:type_name -> common.Metadata + 29, // 21: machine.ServiceList.services:type_name -> machine.ServiceInfo + 27, // 22: machine.ServiceListResponse.messages:type_name -> machine.ServiceList + 30, // 23: machine.ServiceInfo.events:type_name -> machine.ServiceEvents + 32, // 24: machine.ServiceInfo.health:type_name -> machine.ServiceHealth + 31, // 25: machine.ServiceEvents.events:type_name -> machine.ServiceEvent + 64, // 26: machine.ServiceEvent.ts:type_name -> google.protobuf.Timestamp + 64, // 27: machine.ServiceHealth.last_change:type_name -> google.protobuf.Timestamp + 61, // 28: machine.ServiceStart.metadata:type_name -> common.Metadata + 34, // 29: machine.ServiceStartResponse.messages:type_name -> machine.ServiceStart + 61, // 30: machine.ServiceStop.metadata:type_name -> common.Metadata + 37, // 31: machine.ServiceStopResponse.messages:type_name -> machine.ServiceStop + 61, // 32: machine.ServiceRestart.metadata:type_name -> common.Metadata + 40, // 33: machine.ServiceRestartResponse.messages:type_name -> machine.ServiceRestart + 61, // 34: machine.FileInfo.metadata:type_name -> common.Metadata + 61, // 35: machine.Mounts.metadata:type_name -> common.Metadata + 51, // 36: machine.Mounts.stats:type_name -> machine.MountStat + 49, // 37: machine.MountsResponse.messages:type_name -> machine.Mounts + 61, // 38: machine.Version.metadata:type_name -> common.Metadata + 54, // 39: machine.Version.version:type_name -> machine.VersionInfo + 55, // 40: machine.Version.platform:type_name -> machine.PlatformInfo + 52, // 41: machine.VersionResponse.messages:type_name -> machine.Version + 65, // 42: machine.LogsRequest.driver:type_name -> common.ContainerDriver + 61, // 43: machine.Rollback.metadata:type_name -> common.Metadata + 59, // 44: machine.RollbackResponse.messages:type_name -> machine.Rollback + 7, // 45: machine.MachineService.Bootstrap:input_type -> machine.BootstrapRequest + 46, // 46: machine.MachineService.Copy:input_type -> machine.CopyRequest + 14, // 47: machine.MachineService.Events:input_type -> machine.EventsRequest + 66, // 48: machine.MachineService.Kubeconfig:input_type -> google.protobuf.Empty + 47, // 49: machine.MachineService.List:input_type -> machine.ListRequest + 56, // 50: machine.MachineService.Logs:input_type -> machine.LogsRequest + 66, // 51: machine.MachineService.Mounts:input_type -> google.protobuf.Empty + 57, // 52: machine.MachineService.Read:input_type -> machine.ReadRequest + 66, // 53: machine.MachineService.Reboot:input_type -> google.protobuf.Empty + 58, // 54: machine.MachineService.Rollback:input_type -> machine.RollbackRequest + 16, // 55: machine.MachineService.Reset:input_type -> machine.ResetRequest + 19, // 56: machine.MachineService.Recover:input_type -> machine.RecoverRequest + 66, // 57: machine.MachineService.ServiceList:input_type -> google.protobuf.Empty + 39, // 58: machine.MachineService.ServiceRestart:input_type -> machine.ServiceRestartRequest + 33, // 59: machine.MachineService.ServiceStart:input_type -> machine.ServiceStartRequest + 36, // 60: machine.MachineService.ServiceStop:input_type -> machine.ServiceStopRequest + 66, // 61: machine.MachineService.Shutdown:input_type -> google.protobuf.Empty + 24, // 62: machine.MachineService.Upgrade:input_type -> machine.UpgradeRequest + 66, // 63: machine.MachineService.Version:input_type -> google.protobuf.Empty + 9, // 64: machine.MachineService.Bootstrap:output_type -> machine.BootstrapResponse + 67, // 65: machine.MachineService.Copy:output_type -> common.Data + 15, // 66: machine.MachineService.Events:output_type -> machine.Event + 67, // 67: machine.MachineService.Kubeconfig:output_type -> common.Data + 48, // 68: machine.MachineService.List:output_type -> machine.FileInfo + 67, // 69: machine.MachineService.Logs:output_type -> common.Data + 50, // 70: machine.MachineService.Mounts:output_type -> machine.MountsResponse + 67, // 71: machine.MachineService.Read:output_type -> common.Data + 6, // 72: machine.MachineService.Reboot:output_type -> machine.RebootResponse + 60, // 73: machine.MachineService.Rollback:output_type -> machine.RollbackResponse + 18, // 74: machine.MachineService.Reset:output_type -> machine.ResetResponse + 21, // 75: machine.MachineService.Recover:output_type -> machine.RecoverResponse + 28, // 76: machine.MachineService.ServiceList:output_type -> machine.ServiceListResponse + 41, // 77: machine.MachineService.ServiceRestart:output_type -> machine.ServiceRestartResponse + 35, // 78: machine.MachineService.ServiceStart:output_type -> machine.ServiceStartResponse + 38, // 79: machine.MachineService.ServiceStop:output_type -> machine.ServiceStopResponse + 23, // 80: machine.MachineService.Shutdown:output_type -> machine.ShutdownResponse + 26, // 81: machine.MachineService.Upgrade:output_type -> machine.UpgradeResponse + 53, // 82: machine.MachineService.Version:output_type -> machine.VersionResponse + 64, // [64:83] is the sub-list for method output_type + 45, // [45:64] is the sub-list for method input_type + 45, // [45:45] is the sub-list for extension type_name + 45, // [45:45] is the sub-list for extension extendee + 0, // [0:45] is the sub-list for field type_name } func init() { file_machine_machine_proto_init() } @@ -3837,7 +3983,7 @@ func file_machine_machine_proto_init() { } } file_machine_machine_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EventsRequest); i { + switch v := v.(*ServiceStateEvent); i { case 0: return &v.state case 1: @@ -3849,7 +3995,7 @@ func file_machine_machine_proto_init() { } } file_machine_machine_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Event); i { + switch v := v.(*EventsRequest); i { case 0: return &v.state case 1: @@ -3861,7 +4007,7 @@ func file_machine_machine_proto_init() { } } file_machine_machine_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ResetRequest); i { + switch v := v.(*Event); i { case 0: return &v.state case 1: @@ -3873,7 +4019,7 @@ func file_machine_machine_proto_init() { } } file_machine_machine_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Reset); i { + switch v := v.(*ResetRequest); i { case 0: return &v.state case 1: @@ -3885,7 +4031,7 @@ func file_machine_machine_proto_init() { } } file_machine_machine_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ResetResponse); i { + switch v := v.(*Reset); i { case 0: return &v.state case 1: @@ -3897,7 +4043,7 @@ func file_machine_machine_proto_init() { } } file_machine_machine_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RecoverRequest); i { + switch v := v.(*ResetResponse); i { case 0: return &v.state case 1: @@ -3909,7 +4055,7 @@ func file_machine_machine_proto_init() { } } file_machine_machine_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Recover); i { + switch v := v.(*RecoverRequest); i { case 0: return &v.state case 1: @@ -3921,7 +4067,7 @@ func file_machine_machine_proto_init() { } } file_machine_machine_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RecoverResponse); i { + switch v := v.(*Recover); i { case 0: return &v.state case 1: @@ -3933,7 +4079,7 @@ func file_machine_machine_proto_init() { } } file_machine_machine_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Shutdown); i { + switch v := v.(*RecoverResponse); i { case 0: return &v.state case 1: @@ -3945,7 +4091,7 @@ func file_machine_machine_proto_init() { } } file_machine_machine_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ShutdownResponse); i { + switch v := v.(*Shutdown); i { case 0: return &v.state case 1: @@ -3957,7 +4103,7 @@ func file_machine_machine_proto_init() { } } file_machine_machine_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpgradeRequest); i { + switch v := v.(*ShutdownResponse); i { case 0: return &v.state case 1: @@ -3969,7 +4115,7 @@ func file_machine_machine_proto_init() { } } file_machine_machine_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Upgrade); i { + switch v := v.(*UpgradeRequest); i { case 0: return &v.state case 1: @@ -3981,7 +4127,7 @@ func file_machine_machine_proto_init() { } } file_machine_machine_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpgradeResponse); i { + switch v := v.(*Upgrade); i { case 0: return &v.state case 1: @@ -3993,7 +4139,7 @@ func file_machine_machine_proto_init() { } } file_machine_machine_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ServiceList); i { + switch v := v.(*UpgradeResponse); i { case 0: return &v.state case 1: @@ -4005,7 +4151,7 @@ func file_machine_machine_proto_init() { } } file_machine_machine_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ServiceListResponse); i { + switch v := v.(*ServiceList); i { case 0: return &v.state case 1: @@ -4017,7 +4163,7 @@ func file_machine_machine_proto_init() { } } file_machine_machine_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ServiceInfo); i { + switch v := v.(*ServiceListResponse); i { case 0: return &v.state case 1: @@ -4029,7 +4175,7 @@ func file_machine_machine_proto_init() { } } file_machine_machine_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ServiceEvents); i { + switch v := v.(*ServiceInfo); i { case 0: return &v.state case 1: @@ -4041,7 +4187,7 @@ func file_machine_machine_proto_init() { } } file_machine_machine_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ServiceEvent); i { + switch v := v.(*ServiceEvents); i { case 0: return &v.state case 1: @@ -4053,7 +4199,7 @@ func file_machine_machine_proto_init() { } } file_machine_machine_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ServiceHealth); i { + switch v := v.(*ServiceEvent); i { case 0: return &v.state case 1: @@ -4065,7 +4211,7 @@ func file_machine_machine_proto_init() { } } file_machine_machine_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ServiceStartRequest); i { + switch v := v.(*ServiceHealth); i { case 0: return &v.state case 1: @@ -4077,7 +4223,7 @@ func file_machine_machine_proto_init() { } } file_machine_machine_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ServiceStart); i { + switch v := v.(*ServiceStartRequest); i { case 0: return &v.state case 1: @@ -4089,7 +4235,7 @@ func file_machine_machine_proto_init() { } } file_machine_machine_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ServiceStartResponse); i { + switch v := v.(*ServiceStart); i { case 0: return &v.state case 1: @@ -4101,7 +4247,7 @@ func file_machine_machine_proto_init() { } } file_machine_machine_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ServiceStopRequest); i { + switch v := v.(*ServiceStartResponse); i { case 0: return &v.state case 1: @@ -4113,7 +4259,7 @@ func file_machine_machine_proto_init() { } } file_machine_machine_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ServiceStop); i { + switch v := v.(*ServiceStopRequest); i { case 0: return &v.state case 1: @@ -4125,7 +4271,7 @@ func file_machine_machine_proto_init() { } } file_machine_machine_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ServiceStopResponse); i { + switch v := v.(*ServiceStop); i { case 0: return &v.state case 1: @@ -4137,7 +4283,7 @@ func file_machine_machine_proto_init() { } } file_machine_machine_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ServiceRestartRequest); i { + switch v := v.(*ServiceStopResponse); i { case 0: return &v.state case 1: @@ -4149,7 +4295,7 @@ func file_machine_machine_proto_init() { } } file_machine_machine_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ServiceRestart); i { + switch v := v.(*ServiceRestartRequest); i { case 0: return &v.state case 1: @@ -4161,7 +4307,7 @@ func file_machine_machine_proto_init() { } } file_machine_machine_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ServiceRestartResponse); i { + switch v := v.(*ServiceRestart); i { case 0: return &v.state case 1: @@ -4173,7 +4319,7 @@ func file_machine_machine_proto_init() { } } file_machine_machine_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StartRequest); i { + switch v := v.(*ServiceRestartResponse); i { case 0: return &v.state case 1: @@ -4185,7 +4331,7 @@ func file_machine_machine_proto_init() { } } file_machine_machine_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StartResponse); i { + switch v := v.(*StartRequest); i { case 0: return &v.state case 1: @@ -4197,7 +4343,7 @@ func file_machine_machine_proto_init() { } } file_machine_machine_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StopRequest); i { + switch v := v.(*StartResponse); i { case 0: return &v.state case 1: @@ -4209,7 +4355,7 @@ func file_machine_machine_proto_init() { } } file_machine_machine_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StopResponse); i { + switch v := v.(*StopRequest); i { case 0: return &v.state case 1: @@ -4221,7 +4367,7 @@ func file_machine_machine_proto_init() { } } file_machine_machine_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CopyRequest); i { + switch v := v.(*StopResponse); i { case 0: return &v.state case 1: @@ -4233,7 +4379,7 @@ func file_machine_machine_proto_init() { } } file_machine_machine_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListRequest); i { + switch v := v.(*CopyRequest); i { case 0: return &v.state case 1: @@ -4245,7 +4391,7 @@ func file_machine_machine_proto_init() { } } file_machine_machine_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FileInfo); i { + switch v := v.(*ListRequest); i { case 0: return &v.state case 1: @@ -4257,7 +4403,7 @@ func file_machine_machine_proto_init() { } } file_machine_machine_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Mounts); i { + switch v := v.(*FileInfo); i { case 0: return &v.state case 1: @@ -4269,7 +4415,7 @@ func file_machine_machine_proto_init() { } } file_machine_machine_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MountsResponse); i { + switch v := v.(*Mounts); i { case 0: return &v.state case 1: @@ -4281,7 +4427,7 @@ func file_machine_machine_proto_init() { } } file_machine_machine_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MountStat); i { + switch v := v.(*MountsResponse); i { case 0: return &v.state case 1: @@ -4293,7 +4439,7 @@ func file_machine_machine_proto_init() { } } file_machine_machine_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Version); i { + switch v := v.(*MountStat); i { case 0: return &v.state case 1: @@ -4305,7 +4451,7 @@ func file_machine_machine_proto_init() { } } file_machine_machine_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*VersionResponse); i { + switch v := v.(*Version); i { case 0: return &v.state case 1: @@ -4317,7 +4463,7 @@ func file_machine_machine_proto_init() { } } file_machine_machine_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*VersionInfo); i { + switch v := v.(*VersionResponse); i { case 0: return &v.state case 1: @@ -4329,7 +4475,7 @@ func file_machine_machine_proto_init() { } } file_machine_machine_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PlatformInfo); i { + switch v := v.(*VersionInfo); i { case 0: return &v.state case 1: @@ -4341,7 +4487,7 @@ func file_machine_machine_proto_init() { } } file_machine_machine_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LogsRequest); i { + switch v := v.(*PlatformInfo); i { case 0: return &v.state case 1: @@ -4353,7 +4499,7 @@ func file_machine_machine_proto_init() { } } file_machine_machine_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ReadRequest); i { + switch v := v.(*LogsRequest); i { case 0: return &v.state case 1: @@ -4365,7 +4511,7 @@ func file_machine_machine_proto_init() { } } file_machine_machine_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RollbackRequest); i { + switch v := v.(*ReadRequest); i { case 0: return &v.state case 1: @@ -4377,7 +4523,7 @@ func file_machine_machine_proto_init() { } } file_machine_machine_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Rollback); i { + switch v := v.(*RollbackRequest); i { case 0: return &v.state case 1: @@ -4389,6 +4535,18 @@ func file_machine_machine_proto_init() { } } file_machine_machine_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Rollback); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_machine_machine_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*RollbackResponse); i { case 0: return &v.state @@ -4406,8 +4564,8 @@ func file_machine_machine_proto_init() { File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_machine_machine_proto_rawDesc, - NumEnums: 4, - NumMessages: 55, + NumEnums: 5, + NumMessages: 56, NumExtensions: 0, NumServices: 1, }, diff --git a/api/machine/machine.proto b/api/machine/machine.proto index f7ddeed21..31b100a14 100644 --- a/api/machine/machine.proto +++ b/api/machine/machine.proto @@ -77,6 +77,22 @@ message TaskEvent { Action action = 2; } +message ServiceStateEvent { + string service = 1; + enum Action { + INITIALIZED = 0; + PREPARING = 1; + WAITING = 2; + RUNNING = 3; + STOPPING = 4; + FINISHED = 5; + FAILED = 6; + SKIPPED = 7; + }; + Action action = 2; + string message = 3; +}; + message EventsRequest {} message Event { diff --git a/cmd/talosctl/cmd/talos/events.go b/cmd/talosctl/cmd/talos/events.go index d77109c73..3f7114d09 100644 --- a/cmd/talosctl/cmd/talos/events.go +++ b/cmd/talosctl/cmd/talos/events.go @@ -53,6 +53,8 @@ var eventsCmd = &cobra.Command{ } else { args = []interface{}{msg.GetSequence() + " " + msg.GetAction().String()} } + case *machine.ServiceStateEvent: + args = []interface{}{fmt.Sprintf("%s [%s]: %s", msg.GetService(), msg.GetAction(), msg.GetMessage())} default: // We haven't implemented the handling of this event yet. continue diff --git a/go.mod b/go.mod index cc828299c..e8a9fec84 100644 --- a/go.mod +++ b/go.mod @@ -74,7 +74,7 @@ require ( golang.org/x/text v0.3.2 golang.org/x/time v0.0.0-20191024005414-555d28b269f0 google.golang.org/grpc v1.27.0 - google.golang.org/protobuf v1.25.0 // indirect + google.golang.org/protobuf v1.25.0 gopkg.in/freddierice/go-losetup.v1 v1.0.0-20170407175016-fc9adea44124 gopkg.in/fsnotify.v1 v1.4.7 gopkg.in/yaml.v2 v2.2.8 diff --git a/internal/app/machined/pkg/system/events/events.go b/internal/app/machined/pkg/system/events/events.go index c2c366283..52175cdc5 100644 --- a/internal/app/machined/pkg/system/events/events.go +++ b/internal/app/machined/pkg/system/events/events.go @@ -60,6 +60,15 @@ type ServiceEvent struct { Timestamp time.Time } +// AsProto returns protobuf representation of respective machined event. +func (event *ServiceEvent) AsProto(service string) *machineapi.ServiceStateEvent { + return &machineapi.ServiceStateEvent{ + Service: service, + Action: machineapi.ServiceStateEvent_Action(event.State), + Message: event.Message, + } +} + // ServiceEvents is a fixed length history of events. type ServiceEvents struct { events []ServiceEvent diff --git a/internal/app/machined/pkg/system/service_runner.go b/internal/app/machined/pkg/system/service_runner.go index daa6ec7ed..f7c217a02 100644 --- a/internal/app/machined/pkg/system/service_runner.go +++ b/internal/app/machined/pkg/system/service_runner.go @@ -88,6 +88,10 @@ func (svcrunner *ServiceRunner) UpdateState(newstate events.ServiceState, messag isFinished := svcrunner.inStateLocked(StateEventFinished) svcrunner.mu.Unlock() + if svcrunner.runtime != nil { + svcrunner.runtime.Events().Publish(event.AsProto(svcrunner.id)) + } + if isUp { svcrunner.notifyEvent(StateEventUp) } diff --git a/internal/integration/api/events.go b/internal/integration/api/events.go new file mode 100644 index 000000000..51663de78 --- /dev/null +++ b/internal/integration/api/events.go @@ -0,0 +1,104 @@ +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +// +build integration_api + +package api + +import ( + "context" + "fmt" + "time" + + "github.com/talos-systems/talos/api/machine" + "github.com/talos-systems/talos/internal/integration/base" + "github.com/talos-systems/talos/pkg/client" +) + +// EventsSuite verifies Events API. +type EventsSuite struct { + base.APISuite + + ctx context.Context + ctxCancel context.CancelFunc +} + +// SuiteName ... +func (suite *EventsSuite) SuiteName() string { + return "api.EventsSuite" +} + +// SetupTest ... +func (suite *EventsSuite) SetupTest() { + // make sure API calls have timeout + suite.ctx, suite.ctxCancel = context.WithTimeout(context.Background(), 2*time.Minute) +} + +// TearDownTest ... +func (suite *EventsSuite) TearDownTest() { + suite.ctxCancel() +} + +// TestServiceEvents verifies that service restart generates events. +func (suite *EventsSuite) TestServiceEvents() { + const service = "timed" // any restartable service should work + + ctx, ctxCancel := context.WithTimeout(suite.ctx, 30*time.Second) + defer ctxCancel() + + svcInfo, err := suite.Client.ServiceInfo(ctx, service) + suite.Require().NoError(err) + + if len(svcInfo) == 0 { // service is not registered (e.g. docker) + suite.T().Skip(fmt.Sprintf("skipping test as service %q is not registered", service)) + } + + actionsSeen := make(map[machine.ServiceStateEvent_Action]struct{}) + + checkExpectedActions := func() error { + for _, action := range []machine.ServiceStateEvent_Action{ + machine.ServiceStateEvent_STOPPING, + machine.ServiceStateEvent_FINISHED, + machine.ServiceStateEvent_WAITING, + machine.ServiceStateEvent_PREPARING, + machine.ServiceStateEvent_RUNNING, + } { + if _, ok := actionsSeen[action]; !ok { + return fmt.Errorf("expected action %s was not seen", action) + } + } + + return nil + } + + go func() { + suite.Assert().NoError(suite.Client.EventsWatch(ctx, func(ch <-chan client.Event) { + defer ctxCancel() + + for event := range ch { + if msg, ok := event.Payload.(*machine.ServiceStateEvent); ok && msg.GetService() == service { + actionsSeen[msg.GetAction()] = struct{}{} + } + + if checkExpectedActions() == nil { + return + } + } + })) + }() + + // wait for event watcher to start + time.Sleep(200 * time.Millisecond) + + _, err = suite.Client.ServiceRestart(ctx, service) + suite.Assert().NoError(err) + + <-ctx.Done() + + suite.Require().NoError(checkExpectedActions()) +} + +func init() { + allSuites = append(allSuites, new(EventsSuite)) +} diff --git a/internal/integration/cli/validate.go b/internal/integration/cli/validate.go index b90ea813c..5af202719 100644 --- a/internal/integration/cli/validate.go +++ b/internal/integration/cli/validate.go @@ -7,6 +7,7 @@ package cli import ( + "fmt" "io/ioutil" "os" @@ -47,8 +48,10 @@ func (suite *ValidateSuite) TestValidate() { suite.RunCLI([]string{"gen", "config", "foobar", "https://10.0.0.1"}) for _, configFile := range []string{"init.yaml", "controlplane.yaml", "join.yaml"} { - for _, mode := range []string{"cloud", "container", "metal"} { - suite.RunCLI([]string{"validate", "-m", mode, "-c", configFile}) + for _, mode := range []string{"cloud", "container"} { + suite.Run(fmt.Sprintf("%s-%s", configFile, mode), func() { + suite.RunCLI([]string{"validate", "-m", mode, "-c", configFile}) + }) } } } diff --git a/pkg/client/client.go b/pkg/client/client.go index 716623469..fd5f8f2cf 100644 --- a/pkg/client/client.go +++ b/pkg/client/client.go @@ -806,21 +806,26 @@ func (c *Client) EventsWatch(ctx context.Context, watchFunc func(<-chan Event)) var msg proto.Message - seqEvent := &machineapi.SequenceEvent{} - - switch typeURL { - case "talos/runtime/" + string(seqEvent.ProtoReflect().Descriptor().FullName()): - msg = &machineapi.SequenceEvent{} - - if err = proto.Unmarshal(event.GetData().GetValue(), msg); err != nil { - log.Printf("failed to unmarshal message: %v", err) // TODO: this should be fixed to return errors - continue + for _, eventType := range []proto.Message{ + &machineapi.SequenceEvent{}, + &machineapi.ServiceStateEvent{}, + } { + if typeURL == "talos/runtime/"+string(eventType.ProtoReflect().Descriptor().FullName()) { + msg = eventType + break } - default: + } + + if msg == nil { // We haven't implemented the handling of this event yet. continue } + if err = proto.Unmarshal(event.GetData().GetValue(), msg); err != nil { + log.Printf("failed to unmarshal message: %v", err) // TODO: this should be fixed to return errors + continue + } + ev := Event{ Node: defaultNode, TypeURL: typeURL,