diff --git a/api/go/gw/gw.pb.go b/api/go/gw/gw.pb.go index edf14aa3..a355a145 100644 --- a/api/go/gw/gw.pb.go +++ b/api/go/gw/gw.pb.go @@ -392,9 +392,517 @@ func (x ConnState_State) Number() protoreflect.EnumNumber { // Deprecated: Use ConnState_State.Descriptor instead. func (ConnState_State) EnumDescriptor() ([]byte, []int) { - return file_gw_gw_proto_rawDescGZIP(), []int{34, 0} + return file_gw_gw_proto_rawDescGZIP(), []int{44, 0} } +// Gateway events as reported by the ChirpStack Concentratord ZMQ interface. +type Event struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to Event: + // + // *Event_UplinkFrame + // *Event_GatewayStats + // *Event_Mesh + Event isEvent_Event `protobuf_oneof:"event"` +} + +func (x *Event) Reset() { + *x = Event{} + mi := &file_gw_gw_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Event) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Event) ProtoMessage() {} + +func (x *Event) ProtoReflect() protoreflect.Message { + mi := &file_gw_gw_proto_msgTypes[0] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Event.ProtoReflect.Descriptor instead. +func (*Event) Descriptor() ([]byte, []int) { + return file_gw_gw_proto_rawDescGZIP(), []int{0} +} + +func (m *Event) GetEvent() isEvent_Event { + if m != nil { + return m.Event + } + return nil +} + +func (x *Event) GetUplinkFrame() *UplinkFrame { + if x, ok := x.GetEvent().(*Event_UplinkFrame); ok { + return x.UplinkFrame + } + return nil +} + +func (x *Event) GetGatewayStats() *GatewayStats { + if x, ok := x.GetEvent().(*Event_GatewayStats); ok { + return x.GatewayStats + } + return nil +} + +func (x *Event) GetMesh() *MeshEvent { + if x, ok := x.GetEvent().(*Event_Mesh); ok { + return x.Mesh + } + return nil +} + +type isEvent_Event interface { + isEvent_Event() +} + +type Event_UplinkFrame struct { + // Uplink frame. + UplinkFrame *UplinkFrame `protobuf:"bytes,1,opt,name=uplink_frame,json=uplinkFrame,proto3,oneof"` +} + +type Event_GatewayStats struct { + // Gateway stats. + GatewayStats *GatewayStats `protobuf:"bytes,2,opt,name=gateway_stats,json=gatewayStats,proto3,oneof"` +} + +type Event_Mesh struct { + // Gateway Mesh Event. + Mesh *MeshEvent `protobuf:"bytes,3,opt,name=mesh,proto3,oneof"` +} + +func (*Event_UplinkFrame) isEvent_Event() {} + +func (*Event_GatewayStats) isEvent_Event() {} + +func (*Event_Mesh) isEvent_Event() {} + +// Commands that can be sent to the ChirpStack Concentratord ZMQ interface. +type Command struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to Command: + // + // *Command_SendDownlinkFrame + // *Command_SetGatewayConfiguration + // *Command_GetGatewayId + // *Command_GetLocation + // *Command_Mesh + Command isCommand_Command `protobuf_oneof:"command"` +} + +func (x *Command) Reset() { + *x = Command{} + mi := &file_gw_gw_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Command) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Command) ProtoMessage() {} + +func (x *Command) ProtoReflect() protoreflect.Message { + mi := &file_gw_gw_proto_msgTypes[1] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Command.ProtoReflect.Descriptor instead. +func (*Command) Descriptor() ([]byte, []int) { + return file_gw_gw_proto_rawDescGZIP(), []int{1} +} + +func (m *Command) GetCommand() isCommand_Command { + if m != nil { + return m.Command + } + return nil +} + +func (x *Command) GetSendDownlinkFrame() *DownlinkFrame { + if x, ok := x.GetCommand().(*Command_SendDownlinkFrame); ok { + return x.SendDownlinkFrame + } + return nil +} + +func (x *Command) GetSetGatewayConfiguration() *GatewayConfiguration { + if x, ok := x.GetCommand().(*Command_SetGatewayConfiguration); ok { + return x.SetGatewayConfiguration + } + return nil +} + +func (x *Command) GetGetGatewayId() *GetGatewayIdRequest { + if x, ok := x.GetCommand().(*Command_GetGatewayId); ok { + return x.GetGatewayId + } + return nil +} + +func (x *Command) GetGetLocation() *GetLocationRequest { + if x, ok := x.GetCommand().(*Command_GetLocation); ok { + return x.GetLocation + } + return nil +} + +func (x *Command) GetMesh() *MeshCommand { + if x, ok := x.GetCommand().(*Command_Mesh); ok { + return x.Mesh + } + return nil +} + +type isCommand_Command interface { + isCommand_Command() +} + +type Command_SendDownlinkFrame struct { + // Downlink frame. + SendDownlinkFrame *DownlinkFrame `protobuf:"bytes,1,opt,name=send_downlink_frame,json=sendDownlinkFrame,proto3,oneof"` +} + +type Command_SetGatewayConfiguration struct { + // Gateway configuration. + SetGatewayConfiguration *GatewayConfiguration `protobuf:"bytes,2,opt,name=set_gateway_configuration,json=setGatewayConfiguration,proto3,oneof"` +} + +type Command_GetGatewayId struct { + // Get Gateway ID. + GetGatewayId *GetGatewayIdRequest `protobuf:"bytes,3,opt,name=get_gateway_id,json=getGatewayId,proto3,oneof"` +} + +type Command_GetLocation struct { + // Get location. + GetLocation *GetLocationRequest `protobuf:"bytes,4,opt,name=get_location,json=getLocation,proto3,oneof"` +} + +type Command_Mesh struct { + // Gateway Mesh Command. + Mesh *MeshCommand `protobuf:"bytes,5,opt,name=mesh,proto3,oneof"` +} + +func (*Command_SendDownlinkFrame) isCommand_Command() {} + +func (*Command_SetGatewayConfiguration) isCommand_Command() {} + +func (*Command_GetGatewayId) isCommand_Command() {} + +func (*Command_GetLocation) isCommand_Command() {} + +func (*Command_Mesh) isCommand_Command() {} + +type MeshEvent struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Gateway ID (of the Border Gateway). + GatewayId string `protobuf:"bytes,1,opt,name=gateway_id,json=gatewayId,proto3" json:"gateway_id,omitempty"` + // Relay ID. + RelayId string `protobuf:"bytes,2,opt,name=relay_id,json=relayId,proto3" json:"relay_id,omitempty"` + // Timestamp (second precision). + Time *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=time,proto3" json:"time,omitempty"` + // Mesh events. + Events []*MeshEventItem `protobuf:"bytes,4,rep,name=events,proto3" json:"events,omitempty"` +} + +func (x *MeshEvent) Reset() { + *x = MeshEvent{} + mi := &file_gw_gw_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *MeshEvent) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MeshEvent) ProtoMessage() {} + +func (x *MeshEvent) ProtoReflect() protoreflect.Message { + mi := &file_gw_gw_proto_msgTypes[2] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MeshEvent.ProtoReflect.Descriptor instead. +func (*MeshEvent) Descriptor() ([]byte, []int) { + return file_gw_gw_proto_rawDescGZIP(), []int{2} +} + +func (x *MeshEvent) GetGatewayId() string { + if x != nil { + return x.GatewayId + } + return "" +} + +func (x *MeshEvent) GetRelayId() string { + if x != nil { + return x.RelayId + } + return "" +} + +func (x *MeshEvent) GetTime() *timestamppb.Timestamp { + if x != nil { + return x.Time + } + return nil +} + +func (x *MeshEvent) GetEvents() []*MeshEventItem { + if x != nil { + return x.Events + } + return nil +} + +type MeshEventItem struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to Event: + // + // *MeshEventItem_Proprietary + // *MeshEventItem_Heartbeat + Event isMeshEventItem_Event `protobuf_oneof:"event"` +} + +func (x *MeshEventItem) Reset() { + *x = MeshEventItem{} + mi := &file_gw_gw_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *MeshEventItem) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MeshEventItem) ProtoMessage() {} + +func (x *MeshEventItem) ProtoReflect() protoreflect.Message { + mi := &file_gw_gw_proto_msgTypes[3] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MeshEventItem.ProtoReflect.Descriptor instead. +func (*MeshEventItem) Descriptor() ([]byte, []int) { + return file_gw_gw_proto_rawDescGZIP(), []int{3} +} + +func (m *MeshEventItem) GetEvent() isMeshEventItem_Event { + if m != nil { + return m.Event + } + return nil +} + +func (x *MeshEventItem) GetProprietary() *MeshEventProprietary { + if x, ok := x.GetEvent().(*MeshEventItem_Proprietary); ok { + return x.Proprietary + } + return nil +} + +func (x *MeshEventItem) GetHeartbeat() *MeshEventHeartbeat { + if x, ok := x.GetEvent().(*MeshEventItem_Heartbeat); ok { + return x.Heartbeat + } + return nil +} + +type isMeshEventItem_Event interface { + isMeshEventItem_Event() +} + +type MeshEventItem_Proprietary struct { + // Proprietary Mesh event. + Proprietary *MeshEventProprietary `protobuf:"bytes,1,opt,name=proprietary,proto3,oneof"` +} + +type MeshEventItem_Heartbeat struct { + // Mesh heartbeat. + Heartbeat *MeshEventHeartbeat `protobuf:"bytes,2,opt,name=heartbeat,proto3,oneof"` +} + +func (*MeshEventItem_Proprietary) isMeshEventItem_Event() {} + +func (*MeshEventItem_Heartbeat) isMeshEventItem_Event() {} + +type MeshCommand struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Gateway ID (of the Border Gateway). + GatewayId string `protobuf:"bytes,1,opt,name=gateway_id,json=gatewayId,proto3" json:"gateway_id,omitempty"` + // Relay ID. + RelayId string `protobuf:"bytes,2,opt,name=relay_id,json=relayId,proto3" json:"relay_id,omitempty"` + // Mesh events. + Commands []*MeshCommandItem `protobuf:"bytes,3,rep,name=commands,proto3" json:"commands,omitempty"` +} + +func (x *MeshCommand) Reset() { + *x = MeshCommand{} + mi := &file_gw_gw_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *MeshCommand) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MeshCommand) ProtoMessage() {} + +func (x *MeshCommand) ProtoReflect() protoreflect.Message { + mi := &file_gw_gw_proto_msgTypes[4] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MeshCommand.ProtoReflect.Descriptor instead. +func (*MeshCommand) Descriptor() ([]byte, []int) { + return file_gw_gw_proto_rawDescGZIP(), []int{4} +} + +func (x *MeshCommand) GetGatewayId() string { + if x != nil { + return x.GatewayId + } + return "" +} + +func (x *MeshCommand) GetRelayId() string { + if x != nil { + return x.RelayId + } + return "" +} + +func (x *MeshCommand) GetCommands() []*MeshCommandItem { + if x != nil { + return x.Commands + } + return nil +} + +type MeshCommandItem struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to Command: + // + // *MeshCommandItem_Proprietary + Command isMeshCommandItem_Command `protobuf_oneof:"command"` +} + +func (x *MeshCommandItem) Reset() { + *x = MeshCommandItem{} + mi := &file_gw_gw_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *MeshCommandItem) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MeshCommandItem) ProtoMessage() {} + +func (x *MeshCommandItem) ProtoReflect() protoreflect.Message { + mi := &file_gw_gw_proto_msgTypes[5] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MeshCommandItem.ProtoReflect.Descriptor instead. +func (*MeshCommandItem) Descriptor() ([]byte, []int) { + return file_gw_gw_proto_rawDescGZIP(), []int{5} +} + +func (m *MeshCommandItem) GetCommand() isMeshCommandItem_Command { + if m != nil { + return m.Command + } + return nil +} + +func (x *MeshCommandItem) GetProprietary() *MeshCommandProprietary { + if x, ok := x.GetCommand().(*MeshCommandItem_Proprietary); ok { + return x.Proprietary + } + return nil +} + +type isMeshCommandItem_Command interface { + isMeshCommandItem_Command() +} + +type MeshCommandItem_Proprietary struct { + // Proprietary Mesh command. + Proprietary *MeshCommandProprietary `protobuf:"bytes,1,opt,name=proprietary,proto3,oneof"` +} + +func (*MeshCommandItem_Proprietary) isMeshCommandItem_Command() {} + type Modulation struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -410,7 +918,7 @@ type Modulation struct { func (x *Modulation) Reset() { *x = Modulation{} - mi := &file_gw_gw_proto_msgTypes[0] + mi := &file_gw_gw_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -422,7 +930,7 @@ func (x *Modulation) String() string { func (*Modulation) ProtoMessage() {} func (x *Modulation) ProtoReflect() protoreflect.Message { - mi := &file_gw_gw_proto_msgTypes[0] + mi := &file_gw_gw_proto_msgTypes[6] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -435,7 +943,7 @@ func (x *Modulation) ProtoReflect() protoreflect.Message { // Deprecated: Use Modulation.ProtoReflect.Descriptor instead. func (*Modulation) Descriptor() ([]byte, []int) { - return file_gw_gw_proto_rawDescGZIP(), []int{0} + return file_gw_gw_proto_rawDescGZIP(), []int{6} } func (m *Modulation) GetParameters() isModulation_Parameters { @@ -510,7 +1018,7 @@ type UplinkTxInfoLegacy struct { func (x *UplinkTxInfoLegacy) Reset() { *x = UplinkTxInfoLegacy{} - mi := &file_gw_gw_proto_msgTypes[1] + mi := &file_gw_gw_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -522,7 +1030,7 @@ func (x *UplinkTxInfoLegacy) String() string { func (*UplinkTxInfoLegacy) ProtoMessage() {} func (x *UplinkTxInfoLegacy) ProtoReflect() protoreflect.Message { - mi := &file_gw_gw_proto_msgTypes[1] + mi := &file_gw_gw_proto_msgTypes[7] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -535,7 +1043,7 @@ func (x *UplinkTxInfoLegacy) ProtoReflect() protoreflect.Message { // Deprecated: Use UplinkTxInfoLegacy.ProtoReflect.Descriptor instead. func (*UplinkTxInfoLegacy) Descriptor() ([]byte, []int) { - return file_gw_gw_proto_rawDescGZIP(), []int{1} + return file_gw_gw_proto_rawDescGZIP(), []int{7} } func (x *UplinkTxInfoLegacy) GetFrequency() uint32 { @@ -618,7 +1126,7 @@ type UplinkTxInfo struct { func (x *UplinkTxInfo) Reset() { *x = UplinkTxInfo{} - mi := &file_gw_gw_proto_msgTypes[2] + mi := &file_gw_gw_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -630,7 +1138,7 @@ func (x *UplinkTxInfo) String() string { func (*UplinkTxInfo) ProtoMessage() {} func (x *UplinkTxInfo) ProtoReflect() protoreflect.Message { - mi := &file_gw_gw_proto_msgTypes[2] + mi := &file_gw_gw_proto_msgTypes[8] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -643,7 +1151,7 @@ func (x *UplinkTxInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use UplinkTxInfo.ProtoReflect.Descriptor instead. func (*UplinkTxInfo) Descriptor() ([]byte, []int) { - return file_gw_gw_proto_rawDescGZIP(), []int{2} + return file_gw_gw_proto_rawDescGZIP(), []int{8} } func (x *UplinkTxInfo) GetFrequency() uint32 { @@ -685,7 +1193,7 @@ type LoraModulationInfo struct { func (x *LoraModulationInfo) Reset() { *x = LoraModulationInfo{} - mi := &file_gw_gw_proto_msgTypes[3] + mi := &file_gw_gw_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -697,7 +1205,7 @@ func (x *LoraModulationInfo) String() string { func (*LoraModulationInfo) ProtoMessage() {} func (x *LoraModulationInfo) ProtoReflect() protoreflect.Message { - mi := &file_gw_gw_proto_msgTypes[3] + mi := &file_gw_gw_proto_msgTypes[9] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -710,7 +1218,7 @@ func (x *LoraModulationInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use LoraModulationInfo.ProtoReflect.Descriptor instead. func (*LoraModulationInfo) Descriptor() ([]byte, []int) { - return file_gw_gw_proto_rawDescGZIP(), []int{3} + return file_gw_gw_proto_rawDescGZIP(), []int{9} } func (x *LoraModulationInfo) GetBandwidth() uint32 { @@ -775,7 +1283,7 @@ type FskModulationInfo struct { func (x *FskModulationInfo) Reset() { *x = FskModulationInfo{} - mi := &file_gw_gw_proto_msgTypes[4] + mi := &file_gw_gw_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -787,7 +1295,7 @@ func (x *FskModulationInfo) String() string { func (*FskModulationInfo) ProtoMessage() {} func (x *FskModulationInfo) ProtoReflect() protoreflect.Message { - mi := &file_gw_gw_proto_msgTypes[4] + mi := &file_gw_gw_proto_msgTypes[10] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -800,7 +1308,7 @@ func (x *FskModulationInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use FskModulationInfo.ProtoReflect.Descriptor instead. func (*FskModulationInfo) Descriptor() ([]byte, []int) { - return file_gw_gw_proto_rawDescGZIP(), []int{4} + return file_gw_gw_proto_rawDescGZIP(), []int{10} } func (x *FskModulationInfo) GetFrequencyDeviation() uint32 { @@ -835,7 +1343,7 @@ type LrFhssModulationInfo struct { func (x *LrFhssModulationInfo) Reset() { *x = LrFhssModulationInfo{} - mi := &file_gw_gw_proto_msgTypes[5] + mi := &file_gw_gw_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -847,7 +1355,7 @@ func (x *LrFhssModulationInfo) String() string { func (*LrFhssModulationInfo) ProtoMessage() {} func (x *LrFhssModulationInfo) ProtoReflect() protoreflect.Message { - mi := &file_gw_gw_proto_msgTypes[5] + mi := &file_gw_gw_proto_msgTypes[11] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -860,7 +1368,7 @@ func (x *LrFhssModulationInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use LrFhssModulationInfo.ProtoReflect.Descriptor instead. func (*LrFhssModulationInfo) Descriptor() ([]byte, []int) { - return file_gw_gw_proto_rawDescGZIP(), []int{5} + return file_gw_gw_proto_rawDescGZIP(), []int{11} } func (x *LrFhssModulationInfo) GetOperatingChannelWidth() uint32 { @@ -906,7 +1414,7 @@ type EncryptedFineTimestamp struct { func (x *EncryptedFineTimestamp) Reset() { *x = EncryptedFineTimestamp{} - mi := &file_gw_gw_proto_msgTypes[6] + mi := &file_gw_gw_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -918,7 +1426,7 @@ func (x *EncryptedFineTimestamp) String() string { func (*EncryptedFineTimestamp) ProtoMessage() {} func (x *EncryptedFineTimestamp) ProtoReflect() protoreflect.Message { - mi := &file_gw_gw_proto_msgTypes[6] + mi := &file_gw_gw_proto_msgTypes[12] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -931,7 +1439,7 @@ func (x *EncryptedFineTimestamp) ProtoReflect() protoreflect.Message { // Deprecated: Use EncryptedFineTimestamp.ProtoReflect.Descriptor instead. func (*EncryptedFineTimestamp) Descriptor() ([]byte, []int) { - return file_gw_gw_proto_rawDescGZIP(), []int{6} + return file_gw_gw_proto_rawDescGZIP(), []int{12} } func (x *EncryptedFineTimestamp) GetAesKeyIndex() uint32 { @@ -966,7 +1474,7 @@ type PlainFineTimestamp struct { func (x *PlainFineTimestamp) Reset() { *x = PlainFineTimestamp{} - mi := &file_gw_gw_proto_msgTypes[7] + mi := &file_gw_gw_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -978,7 +1486,7 @@ func (x *PlainFineTimestamp) String() string { func (*PlainFineTimestamp) ProtoMessage() {} func (x *PlainFineTimestamp) ProtoReflect() protoreflect.Message { - mi := &file_gw_gw_proto_msgTypes[7] + mi := &file_gw_gw_proto_msgTypes[13] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -991,7 +1499,7 @@ func (x *PlainFineTimestamp) ProtoReflect() protoreflect.Message { // Deprecated: Use PlainFineTimestamp.ProtoReflect.Descriptor instead. func (*PlainFineTimestamp) Descriptor() ([]byte, []int) { - return file_gw_gw_proto_rawDescGZIP(), []int{7} + return file_gw_gw_proto_rawDescGZIP(), []int{13} } func (x *PlainFineTimestamp) GetTime() *timestamppb.Timestamp { @@ -1044,7 +1552,7 @@ type GatewayStats struct { func (x *GatewayStats) Reset() { *x = GatewayStats{} - mi := &file_gw_gw_proto_msgTypes[8] + mi := &file_gw_gw_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1056,7 +1564,7 @@ func (x *GatewayStats) String() string { func (*GatewayStats) ProtoMessage() {} func (x *GatewayStats) ProtoReflect() protoreflect.Message { - mi := &file_gw_gw_proto_msgTypes[8] + mi := &file_gw_gw_proto_msgTypes[14] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1069,7 +1577,7 @@ func (x *GatewayStats) ProtoReflect() protoreflect.Message { // Deprecated: Use GatewayStats.ProtoReflect.Descriptor instead. func (*GatewayStats) Descriptor() ([]byte, []int) { - return file_gw_gw_proto_rawDescGZIP(), []int{8} + return file_gw_gw_proto_rawDescGZIP(), []int{14} } func (x *GatewayStats) GetGatewayIdLegacy() []byte { @@ -1197,7 +1705,7 @@ type PerModulationCount struct { func (x *PerModulationCount) Reset() { *x = PerModulationCount{} - mi := &file_gw_gw_proto_msgTypes[9] + mi := &file_gw_gw_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1209,7 +1717,7 @@ func (x *PerModulationCount) String() string { func (*PerModulationCount) ProtoMessage() {} func (x *PerModulationCount) ProtoReflect() protoreflect.Message { - mi := &file_gw_gw_proto_msgTypes[9] + mi := &file_gw_gw_proto_msgTypes[15] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1222,7 +1730,7 @@ func (x *PerModulationCount) ProtoReflect() protoreflect.Message { // Deprecated: Use PerModulationCount.ProtoReflect.Descriptor instead. func (*PerModulationCount) Descriptor() ([]byte, []int) { - return file_gw_gw_proto_rawDescGZIP(), []int{9} + return file_gw_gw_proto_rawDescGZIP(), []int{15} } func (x *PerModulationCount) GetModulation() *Modulation { @@ -1254,7 +1762,7 @@ type DutyCycleStats struct { func (x *DutyCycleStats) Reset() { *x = DutyCycleStats{} - mi := &file_gw_gw_proto_msgTypes[10] + mi := &file_gw_gw_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1266,7 +1774,7 @@ func (x *DutyCycleStats) String() string { func (*DutyCycleStats) ProtoMessage() {} func (x *DutyCycleStats) ProtoReflect() protoreflect.Message { - mi := &file_gw_gw_proto_msgTypes[10] + mi := &file_gw_gw_proto_msgTypes[16] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1279,7 +1787,7 @@ func (x *DutyCycleStats) ProtoReflect() protoreflect.Message { // Deprecated: Use DutyCycleStats.ProtoReflect.Descriptor instead. func (*DutyCycleStats) Descriptor() ([]byte, []int) { - return file_gw_gw_proto_rawDescGZIP(), []int{10} + return file_gw_gw_proto_rawDescGZIP(), []int{16} } func (x *DutyCycleStats) GetRegulation() common.Regulation { @@ -1322,7 +1830,7 @@ type DutyCycleBand struct { func (x *DutyCycleBand) Reset() { *x = DutyCycleBand{} - mi := &file_gw_gw_proto_msgTypes[11] + mi := &file_gw_gw_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1334,7 +1842,7 @@ func (x *DutyCycleBand) String() string { func (*DutyCycleBand) ProtoMessage() {} func (x *DutyCycleBand) ProtoReflect() protoreflect.Message { - mi := &file_gw_gw_proto_msgTypes[11] + mi := &file_gw_gw_proto_msgTypes[17] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1347,7 +1855,7 @@ func (x *DutyCycleBand) ProtoReflect() protoreflect.Message { // Deprecated: Use DutyCycleBand.ProtoReflect.Descriptor instead. func (*DutyCycleBand) Descriptor() ([]byte, []int) { - return file_gw_gw_proto_rawDescGZIP(), []int{11} + return file_gw_gw_proto_rawDescGZIP(), []int{17} } func (x *DutyCycleBand) GetName() string { @@ -1433,7 +1941,7 @@ type UplinkRxInfoLegacy struct { func (x *UplinkRxInfoLegacy) Reset() { *x = UplinkRxInfoLegacy{} - mi := &file_gw_gw_proto_msgTypes[12] + mi := &file_gw_gw_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1445,7 +1953,7 @@ func (x *UplinkRxInfoLegacy) String() string { func (*UplinkRxInfoLegacy) ProtoMessage() {} func (x *UplinkRxInfoLegacy) ProtoReflect() protoreflect.Message { - mi := &file_gw_gw_proto_msgTypes[12] + mi := &file_gw_gw_proto_msgTypes[18] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1458,7 +1966,7 @@ func (x *UplinkRxInfoLegacy) ProtoReflect() protoreflect.Message { // Deprecated: Use UplinkRxInfoLegacy.ProtoReflect.Descriptor instead. func (*UplinkRxInfoLegacy) Descriptor() ([]byte, []int) { - return file_gw_gw_proto_rawDescGZIP(), []int{12} + return file_gw_gw_proto_rawDescGZIP(), []int{18} } func (x *UplinkRxInfoLegacy) GetGatewayId() []byte { @@ -1649,7 +2157,7 @@ type UplinkRxInfo struct { func (x *UplinkRxInfo) Reset() { *x = UplinkRxInfo{} - mi := &file_gw_gw_proto_msgTypes[13] + mi := &file_gw_gw_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1661,7 +2169,7 @@ func (x *UplinkRxInfo) String() string { func (*UplinkRxInfo) ProtoMessage() {} func (x *UplinkRxInfo) ProtoReflect() protoreflect.Message { - mi := &file_gw_gw_proto_msgTypes[13] + mi := &file_gw_gw_proto_msgTypes[19] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1674,7 +2182,7 @@ func (x *UplinkRxInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use UplinkRxInfo.ProtoReflect.Descriptor instead. func (*UplinkRxInfo) Descriptor() ([]byte, []int) { - return file_gw_gw_proto_rawDescGZIP(), []int{13} + return file_gw_gw_proto_rawDescGZIP(), []int{19} } func (x *UplinkRxInfo) GetGatewayId() string { @@ -1827,7 +2335,7 @@ type DownlinkTxInfoLegacy struct { func (x *DownlinkTxInfoLegacy) Reset() { *x = DownlinkTxInfoLegacy{} - mi := &file_gw_gw_proto_msgTypes[14] + mi := &file_gw_gw_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1839,7 +2347,7 @@ func (x *DownlinkTxInfoLegacy) String() string { func (*DownlinkTxInfoLegacy) ProtoMessage() {} func (x *DownlinkTxInfoLegacy) ProtoReflect() protoreflect.Message { - mi := &file_gw_gw_proto_msgTypes[14] + mi := &file_gw_gw_proto_msgTypes[20] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1852,7 +2360,7 @@ func (x *DownlinkTxInfoLegacy) ProtoReflect() protoreflect.Message { // Deprecated: Use DownlinkTxInfoLegacy.ProtoReflect.Descriptor instead. func (*DownlinkTxInfoLegacy) Descriptor() ([]byte, []int) { - return file_gw_gw_proto_rawDescGZIP(), []int{14} + return file_gw_gw_proto_rawDescGZIP(), []int{20} } func (x *DownlinkTxInfoLegacy) GetGatewayId() []byte { @@ -2027,7 +2535,7 @@ type DownlinkTxInfo struct { func (x *DownlinkTxInfo) Reset() { *x = DownlinkTxInfo{} - mi := &file_gw_gw_proto_msgTypes[15] + mi := &file_gw_gw_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2039,7 +2547,7 @@ func (x *DownlinkTxInfo) String() string { func (*DownlinkTxInfo) ProtoMessage() {} func (x *DownlinkTxInfo) ProtoReflect() protoreflect.Message { - mi := &file_gw_gw_proto_msgTypes[15] + mi := &file_gw_gw_proto_msgTypes[21] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2052,7 +2560,7 @@ func (x *DownlinkTxInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use DownlinkTxInfo.ProtoReflect.Descriptor instead. func (*DownlinkTxInfo) Descriptor() ([]byte, []int) { - return file_gw_gw_proto_rawDescGZIP(), []int{15} + return file_gw_gw_proto_rawDescGZIP(), []int{21} } func (x *DownlinkTxInfo) GetFrequency() uint32 { @@ -2119,7 +2627,7 @@ type Timing struct { func (x *Timing) Reset() { *x = Timing{} - mi := &file_gw_gw_proto_msgTypes[16] + mi := &file_gw_gw_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2131,7 +2639,7 @@ func (x *Timing) String() string { func (*Timing) ProtoMessage() {} func (x *Timing) ProtoReflect() protoreflect.Message { - mi := &file_gw_gw_proto_msgTypes[16] + mi := &file_gw_gw_proto_msgTypes[22] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2144,7 +2652,7 @@ func (x *Timing) ProtoReflect() protoreflect.Message { // Deprecated: Use Timing.ProtoReflect.Descriptor instead. func (*Timing) Descriptor() ([]byte, []int) { - return file_gw_gw_proto_rawDescGZIP(), []int{16} + return file_gw_gw_proto_rawDescGZIP(), []int{22} } func (m *Timing) GetParameters() isTiming_Parameters { @@ -2208,7 +2716,7 @@ type ImmediatelyTimingInfo struct { func (x *ImmediatelyTimingInfo) Reset() { *x = ImmediatelyTimingInfo{} - mi := &file_gw_gw_proto_msgTypes[17] + mi := &file_gw_gw_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2220,7 +2728,7 @@ func (x *ImmediatelyTimingInfo) String() string { func (*ImmediatelyTimingInfo) ProtoMessage() {} func (x *ImmediatelyTimingInfo) ProtoReflect() protoreflect.Message { - mi := &file_gw_gw_proto_msgTypes[17] + mi := &file_gw_gw_proto_msgTypes[23] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2233,7 +2741,7 @@ func (x *ImmediatelyTimingInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use ImmediatelyTimingInfo.ProtoReflect.Descriptor instead. func (*ImmediatelyTimingInfo) Descriptor() ([]byte, []int) { - return file_gw_gw_proto_rawDescGZIP(), []int{17} + return file_gw_gw_proto_rawDescGZIP(), []int{23} } type DelayTimingInfo struct { @@ -2249,7 +2757,7 @@ type DelayTimingInfo struct { func (x *DelayTimingInfo) Reset() { *x = DelayTimingInfo{} - mi := &file_gw_gw_proto_msgTypes[18] + mi := &file_gw_gw_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2261,7 +2769,7 @@ func (x *DelayTimingInfo) String() string { func (*DelayTimingInfo) ProtoMessage() {} func (x *DelayTimingInfo) ProtoReflect() protoreflect.Message { - mi := &file_gw_gw_proto_msgTypes[18] + mi := &file_gw_gw_proto_msgTypes[24] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2274,7 +2782,7 @@ func (x *DelayTimingInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use DelayTimingInfo.ProtoReflect.Descriptor instead. func (*DelayTimingInfo) Descriptor() ([]byte, []int) { - return file_gw_gw_proto_rawDescGZIP(), []int{18} + return file_gw_gw_proto_rawDescGZIP(), []int{24} } func (x *DelayTimingInfo) GetDelay() *durationpb.Duration { @@ -2295,7 +2803,7 @@ type GPSEpochTimingInfo struct { func (x *GPSEpochTimingInfo) Reset() { *x = GPSEpochTimingInfo{} - mi := &file_gw_gw_proto_msgTypes[19] + mi := &file_gw_gw_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2307,7 +2815,7 @@ func (x *GPSEpochTimingInfo) String() string { func (*GPSEpochTimingInfo) ProtoMessage() {} func (x *GPSEpochTimingInfo) ProtoReflect() protoreflect.Message { - mi := &file_gw_gw_proto_msgTypes[19] + mi := &file_gw_gw_proto_msgTypes[25] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2320,7 +2828,7 @@ func (x *GPSEpochTimingInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use GPSEpochTimingInfo.ProtoReflect.Descriptor instead. func (*GPSEpochTimingInfo) Descriptor() ([]byte, []int) { - return file_gw_gw_proto_rawDescGZIP(), []int{19} + return file_gw_gw_proto_rawDescGZIP(), []int{25} } func (x *GPSEpochTimingInfo) GetTimeSinceGpsEpoch() *durationpb.Duration { @@ -2349,7 +2857,7 @@ type UplinkFrame struct { func (x *UplinkFrame) Reset() { *x = UplinkFrame{} - mi := &file_gw_gw_proto_msgTypes[20] + mi := &file_gw_gw_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2361,7 +2869,7 @@ func (x *UplinkFrame) String() string { func (*UplinkFrame) ProtoMessage() {} func (x *UplinkFrame) ProtoReflect() protoreflect.Message { - mi := &file_gw_gw_proto_msgTypes[20] + mi := &file_gw_gw_proto_msgTypes[26] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2374,7 +2882,7 @@ func (x *UplinkFrame) ProtoReflect() protoreflect.Message { // Deprecated: Use UplinkFrame.ProtoReflect.Descriptor instead. func (*UplinkFrame) Descriptor() ([]byte, []int) { - return file_gw_gw_proto_rawDescGZIP(), []int{20} + return file_gw_gw_proto_rawDescGZIP(), []int{26} } func (x *UplinkFrame) GetPhyPayload() []byte { @@ -2427,7 +2935,7 @@ type UplinkFrameSet struct { func (x *UplinkFrameSet) Reset() { *x = UplinkFrameSet{} - mi := &file_gw_gw_proto_msgTypes[21] + mi := &file_gw_gw_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2439,7 +2947,7 @@ func (x *UplinkFrameSet) String() string { func (*UplinkFrameSet) ProtoMessage() {} func (x *UplinkFrameSet) ProtoReflect() protoreflect.Message { - mi := &file_gw_gw_proto_msgTypes[21] + mi := &file_gw_gw_proto_msgTypes[27] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2452,7 +2960,7 @@ func (x *UplinkFrameSet) ProtoReflect() protoreflect.Message { // Deprecated: Use UplinkFrameSet.ProtoReflect.Descriptor instead. func (*UplinkFrameSet) Descriptor() ([]byte, []int) { - return file_gw_gw_proto_rawDescGZIP(), []int{21} + return file_gw_gw_proto_rawDescGZIP(), []int{27} } func (x *UplinkFrameSet) GetPhyPayload() []byte { @@ -2501,7 +3009,7 @@ type DownlinkFrame struct { func (x *DownlinkFrame) Reset() { *x = DownlinkFrame{} - mi := &file_gw_gw_proto_msgTypes[22] + mi := &file_gw_gw_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2513,7 +3021,7 @@ func (x *DownlinkFrame) String() string { func (*DownlinkFrame) ProtoMessage() {} func (x *DownlinkFrame) ProtoReflect() protoreflect.Message { - mi := &file_gw_gw_proto_msgTypes[22] + mi := &file_gw_gw_proto_msgTypes[28] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2526,7 +3034,7 @@ func (x *DownlinkFrame) ProtoReflect() protoreflect.Message { // Deprecated: Use DownlinkFrame.ProtoReflect.Descriptor instead. func (*DownlinkFrame) Descriptor() ([]byte, []int) { - return file_gw_gw_proto_rawDescGZIP(), []int{22} + return file_gw_gw_proto_rawDescGZIP(), []int{28} } func (x *DownlinkFrame) GetDownlinkId() uint32 { @@ -2579,7 +3087,7 @@ type DownlinkFrameItem struct { func (x *DownlinkFrameItem) Reset() { *x = DownlinkFrameItem{} - mi := &file_gw_gw_proto_msgTypes[23] + mi := &file_gw_gw_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2591,7 +3099,7 @@ func (x *DownlinkFrameItem) String() string { func (*DownlinkFrameItem) ProtoMessage() {} func (x *DownlinkFrameItem) ProtoReflect() protoreflect.Message { - mi := &file_gw_gw_proto_msgTypes[23] + mi := &file_gw_gw_proto_msgTypes[29] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2604,7 +3112,7 @@ func (x *DownlinkFrameItem) ProtoReflect() protoreflect.Message { // Deprecated: Use DownlinkFrameItem.ProtoReflect.Descriptor instead. func (*DownlinkFrameItem) Descriptor() ([]byte, []int) { - return file_gw_gw_proto_rawDescGZIP(), []int{23} + return file_gw_gw_proto_rawDescGZIP(), []int{29} } func (x *DownlinkFrameItem) GetPhyPayload() []byte { @@ -2650,7 +3158,7 @@ type DownlinkTxAck struct { func (x *DownlinkTxAck) Reset() { *x = DownlinkTxAck{} - mi := &file_gw_gw_proto_msgTypes[24] + mi := &file_gw_gw_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2662,7 +3170,7 @@ func (x *DownlinkTxAck) String() string { func (*DownlinkTxAck) ProtoMessage() {} func (x *DownlinkTxAck) ProtoReflect() protoreflect.Message { - mi := &file_gw_gw_proto_msgTypes[24] + mi := &file_gw_gw_proto_msgTypes[30] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2675,7 +3183,7 @@ func (x *DownlinkTxAck) ProtoReflect() protoreflect.Message { // Deprecated: Use DownlinkTxAck.ProtoReflect.Descriptor instead. func (*DownlinkTxAck) Descriptor() ([]byte, []int) { - return file_gw_gw_proto_rawDescGZIP(), []int{24} + return file_gw_gw_proto_rawDescGZIP(), []int{30} } func (x *DownlinkTxAck) GetGatewayIdLegacy() []byte { @@ -2724,7 +3232,7 @@ type DownlinkTxAckItem struct { func (x *DownlinkTxAckItem) Reset() { *x = DownlinkTxAckItem{} - mi := &file_gw_gw_proto_msgTypes[25] + mi := &file_gw_gw_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2736,7 +3244,7 @@ func (x *DownlinkTxAckItem) String() string { func (*DownlinkTxAckItem) ProtoMessage() {} func (x *DownlinkTxAckItem) ProtoReflect() protoreflect.Message { - mi := &file_gw_gw_proto_msgTypes[25] + mi := &file_gw_gw_proto_msgTypes[31] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2749,7 +3257,7 @@ func (x *DownlinkTxAckItem) ProtoReflect() protoreflect.Message { // Deprecated: Use DownlinkTxAckItem.ProtoReflect.Descriptor instead. func (*DownlinkTxAckItem) Descriptor() ([]byte, []int) { - return file_gw_gw_proto_rawDescGZIP(), []int{25} + return file_gw_gw_proto_rawDescGZIP(), []int{31} } func (x *DownlinkTxAckItem) GetStatus() TxAckStatus { @@ -2779,7 +3287,7 @@ type GatewayConfiguration struct { func (x *GatewayConfiguration) Reset() { *x = GatewayConfiguration{} - mi := &file_gw_gw_proto_msgTypes[26] + mi := &file_gw_gw_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2791,7 +3299,7 @@ func (x *GatewayConfiguration) String() string { func (*GatewayConfiguration) ProtoMessage() {} func (x *GatewayConfiguration) ProtoReflect() protoreflect.Message { - mi := &file_gw_gw_proto_msgTypes[26] + mi := &file_gw_gw_proto_msgTypes[32] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2804,7 +3312,7 @@ func (x *GatewayConfiguration) ProtoReflect() protoreflect.Message { // Deprecated: Use GatewayConfiguration.ProtoReflect.Descriptor instead. func (*GatewayConfiguration) Descriptor() ([]byte, []int) { - return file_gw_gw_proto_rawDescGZIP(), []int{26} + return file_gw_gw_proto_rawDescGZIP(), []int{32} } func (x *GatewayConfiguration) GetGatewayIdLegacy() []byte { @@ -2842,6 +3350,179 @@ func (x *GatewayConfiguration) GetStatsInterval() *durationpb.Duration { return nil } +type GetGatewayIdRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *GetGatewayIdRequest) Reset() { + *x = GetGatewayIdRequest{} + mi := &file_gw_gw_proto_msgTypes[33] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GetGatewayIdRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetGatewayIdRequest) ProtoMessage() {} + +func (x *GetGatewayIdRequest) ProtoReflect() protoreflect.Message { + mi := &file_gw_gw_proto_msgTypes[33] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetGatewayIdRequest.ProtoReflect.Descriptor instead. +func (*GetGatewayIdRequest) Descriptor() ([]byte, []int) { + return file_gw_gw_proto_rawDescGZIP(), []int{33} +} + +type GetGatewayIdResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Gateway ID. + GatewayId string `protobuf:"bytes,1,opt,name=gateway_id,json=gatewayId,proto3" json:"gateway_id,omitempty"` +} + +func (x *GetGatewayIdResponse) Reset() { + *x = GetGatewayIdResponse{} + mi := &file_gw_gw_proto_msgTypes[34] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GetGatewayIdResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetGatewayIdResponse) ProtoMessage() {} + +func (x *GetGatewayIdResponse) ProtoReflect() protoreflect.Message { + mi := &file_gw_gw_proto_msgTypes[34] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetGatewayIdResponse.ProtoReflect.Descriptor instead. +func (*GetGatewayIdResponse) Descriptor() ([]byte, []int) { + return file_gw_gw_proto_rawDescGZIP(), []int{34} +} + +func (x *GetGatewayIdResponse) GetGatewayId() string { + if x != nil { + return x.GatewayId + } + return "" +} + +type GetLocationRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *GetLocationRequest) Reset() { + *x = GetLocationRequest{} + mi := &file_gw_gw_proto_msgTypes[35] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GetLocationRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetLocationRequest) ProtoMessage() {} + +func (x *GetLocationRequest) ProtoReflect() protoreflect.Message { + mi := &file_gw_gw_proto_msgTypes[35] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetLocationRequest.ProtoReflect.Descriptor instead. +func (*GetLocationRequest) Descriptor() ([]byte, []int) { + return file_gw_gw_proto_rawDescGZIP(), []int{35} +} + +type GetLocationResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Location. + Location *common.Location `protobuf:"bytes,1,opt,name=location,proto3" json:"location,omitempty"` + // Last updated at. + UpdatedAt *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at,omitempty"` +} + +func (x *GetLocationResponse) Reset() { + *x = GetLocationResponse{} + mi := &file_gw_gw_proto_msgTypes[36] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GetLocationResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetLocationResponse) ProtoMessage() {} + +func (x *GetLocationResponse) ProtoReflect() protoreflect.Message { + mi := &file_gw_gw_proto_msgTypes[36] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetLocationResponse.ProtoReflect.Descriptor instead. +func (*GetLocationResponse) Descriptor() ([]byte, []int) { + return file_gw_gw_proto_rawDescGZIP(), []int{36} +} + +func (x *GetLocationResponse) GetLocation() *common.Location { + if x != nil { + return x.Location + } + return nil +} + +func (x *GetLocationResponse) GetUpdatedAt() *timestamppb.Timestamp { + if x != nil { + return x.UpdatedAt + } + return nil +} + type ChannelConfiguration struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -2864,7 +3545,7 @@ type ChannelConfiguration struct { func (x *ChannelConfiguration) Reset() { *x = ChannelConfiguration{} - mi := &file_gw_gw_proto_msgTypes[27] + mi := &file_gw_gw_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2876,7 +3557,7 @@ func (x *ChannelConfiguration) String() string { func (*ChannelConfiguration) ProtoMessage() {} func (x *ChannelConfiguration) ProtoReflect() protoreflect.Message { - mi := &file_gw_gw_proto_msgTypes[27] + mi := &file_gw_gw_proto_msgTypes[37] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2889,7 +3570,7 @@ func (x *ChannelConfiguration) ProtoReflect() protoreflect.Message { // Deprecated: Use ChannelConfiguration.ProtoReflect.Descriptor instead. func (*ChannelConfiguration) Descriptor() ([]byte, []int) { - return file_gw_gw_proto_rawDescGZIP(), []int{27} + return file_gw_gw_proto_rawDescGZIP(), []int{37} } func (x *ChannelConfiguration) GetFrequency() uint32 { @@ -2975,7 +3656,7 @@ type LoraModulationConfig struct { func (x *LoraModulationConfig) Reset() { *x = LoraModulationConfig{} - mi := &file_gw_gw_proto_msgTypes[28] + mi := &file_gw_gw_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2987,7 +3668,7 @@ func (x *LoraModulationConfig) String() string { func (*LoraModulationConfig) ProtoMessage() {} func (x *LoraModulationConfig) ProtoReflect() protoreflect.Message { - mi := &file_gw_gw_proto_msgTypes[28] + mi := &file_gw_gw_proto_msgTypes[38] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3000,7 +3681,7 @@ func (x *LoraModulationConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use LoraModulationConfig.ProtoReflect.Descriptor instead. func (*LoraModulationConfig) Descriptor() ([]byte, []int) { - return file_gw_gw_proto_rawDescGZIP(), []int{28} + return file_gw_gw_proto_rawDescGZIP(), []int{38} } func (x *LoraModulationConfig) GetBandwidthLegacy() uint32 { @@ -3040,7 +3721,7 @@ type FskModulationConfig struct { func (x *FskModulationConfig) Reset() { *x = FskModulationConfig{} - mi := &file_gw_gw_proto_msgTypes[29] + mi := &file_gw_gw_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3052,7 +3733,7 @@ func (x *FskModulationConfig) String() string { func (*FskModulationConfig) ProtoMessage() {} func (x *FskModulationConfig) ProtoReflect() protoreflect.Message { - mi := &file_gw_gw_proto_msgTypes[29] + mi := &file_gw_gw_proto_msgTypes[39] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3065,7 +3746,7 @@ func (x *FskModulationConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use FskModulationConfig.ProtoReflect.Descriptor instead. func (*FskModulationConfig) Descriptor() ([]byte, []int) { - return file_gw_gw_proto_rawDescGZIP(), []int{29} + return file_gw_gw_proto_rawDescGZIP(), []int{39} } func (x *FskModulationConfig) GetBandwidthLegacy() uint32 { @@ -3115,7 +3796,7 @@ type GatewayCommandExecRequest struct { func (x *GatewayCommandExecRequest) Reset() { *x = GatewayCommandExecRequest{} - mi := &file_gw_gw_proto_msgTypes[30] + mi := &file_gw_gw_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3127,7 +3808,7 @@ func (x *GatewayCommandExecRequest) String() string { func (*GatewayCommandExecRequest) ProtoMessage() {} func (x *GatewayCommandExecRequest) ProtoReflect() protoreflect.Message { - mi := &file_gw_gw_proto_msgTypes[30] + mi := &file_gw_gw_proto_msgTypes[40] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3140,7 +3821,7 @@ func (x *GatewayCommandExecRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GatewayCommandExecRequest.ProtoReflect.Descriptor instead. func (*GatewayCommandExecRequest) Descriptor() ([]byte, []int) { - return file_gw_gw_proto_rawDescGZIP(), []int{30} + return file_gw_gw_proto_rawDescGZIP(), []int{40} } func (x *GatewayCommandExecRequest) GetGatewayIdLegacy() []byte { @@ -3207,7 +3888,7 @@ type GatewayCommandExecResponse struct { func (x *GatewayCommandExecResponse) Reset() { *x = GatewayCommandExecResponse{} - mi := &file_gw_gw_proto_msgTypes[31] + mi := &file_gw_gw_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3219,7 +3900,7 @@ func (x *GatewayCommandExecResponse) String() string { func (*GatewayCommandExecResponse) ProtoMessage() {} func (x *GatewayCommandExecResponse) ProtoReflect() protoreflect.Message { - mi := &file_gw_gw_proto_msgTypes[31] + mi := &file_gw_gw_proto_msgTypes[41] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3232,7 +3913,7 @@ func (x *GatewayCommandExecResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GatewayCommandExecResponse.ProtoReflect.Descriptor instead. func (*GatewayCommandExecResponse) Descriptor() ([]byte, []int) { - return file_gw_gw_proto_rawDescGZIP(), []int{31} + return file_gw_gw_proto_rawDescGZIP(), []int{41} } func (x *GatewayCommandExecResponse) GetGatewayIdLegacy() []byte { @@ -3296,7 +3977,7 @@ type RawPacketForwarderEvent struct { func (x *RawPacketForwarderEvent) Reset() { *x = RawPacketForwarderEvent{} - mi := &file_gw_gw_proto_msgTypes[32] + mi := &file_gw_gw_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3308,7 +3989,7 @@ func (x *RawPacketForwarderEvent) String() string { func (*RawPacketForwarderEvent) ProtoMessage() {} func (x *RawPacketForwarderEvent) ProtoReflect() protoreflect.Message { - mi := &file_gw_gw_proto_msgTypes[32] + mi := &file_gw_gw_proto_msgTypes[42] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3321,7 +4002,7 @@ func (x *RawPacketForwarderEvent) ProtoReflect() protoreflect.Message { // Deprecated: Use RawPacketForwarderEvent.ProtoReflect.Descriptor instead. func (*RawPacketForwarderEvent) Descriptor() ([]byte, []int) { - return file_gw_gw_proto_rawDescGZIP(), []int{32} + return file_gw_gw_proto_rawDescGZIP(), []int{42} } func (x *RawPacketForwarderEvent) GetGatewayIdLegacy() []byte { @@ -3364,7 +4045,7 @@ type RawPacketForwarderCommand struct { func (x *RawPacketForwarderCommand) Reset() { *x = RawPacketForwarderCommand{} - mi := &file_gw_gw_proto_msgTypes[33] + mi := &file_gw_gw_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3376,7 +4057,7 @@ func (x *RawPacketForwarderCommand) String() string { func (*RawPacketForwarderCommand) ProtoMessage() {} func (x *RawPacketForwarderCommand) ProtoReflect() protoreflect.Message { - mi := &file_gw_gw_proto_msgTypes[33] + mi := &file_gw_gw_proto_msgTypes[43] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3389,7 +4070,7 @@ func (x *RawPacketForwarderCommand) ProtoReflect() protoreflect.Message { // Deprecated: Use RawPacketForwarderCommand.ProtoReflect.Descriptor instead. func (*RawPacketForwarderCommand) Descriptor() ([]byte, []int) { - return file_gw_gw_proto_rawDescGZIP(), []int{33} + return file_gw_gw_proto_rawDescGZIP(), []int{43} } func (x *RawPacketForwarderCommand) GetGatewayIdLegacy() []byte { @@ -3429,7 +4110,7 @@ type ConnState struct { func (x *ConnState) Reset() { *x = ConnState{} - mi := &file_gw_gw_proto_msgTypes[34] + mi := &file_gw_gw_proto_msgTypes[44] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3441,7 +4122,7 @@ func (x *ConnState) String() string { func (*ConnState) ProtoMessage() {} func (x *ConnState) ProtoReflect() protoreflect.Message { - mi := &file_gw_gw_proto_msgTypes[34] + mi := &file_gw_gw_proto_msgTypes[44] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3454,7 +4135,7 @@ func (x *ConnState) ProtoReflect() protoreflect.Message { // Deprecated: Use ConnState.ProtoReflect.Descriptor instead. func (*ConnState) Descriptor() ([]byte, []int) { - return file_gw_gw_proto_rawDescGZIP(), []int{34} + return file_gw_gw_proto_rawDescGZIP(), []int{44} } func (x *ConnState) GetGatewayIdLegacy() []byte { @@ -3479,36 +4160,30 @@ func (x *ConnState) GetState() ConnState_State { } // Gateway Mesh heartbeat (sent periodically by the Relay Gateways). -type MeshHeartbeat struct { +type MeshEventHeartbeat struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Gateway ID (of the Border Gateway). - GatewayId string `protobuf:"bytes,1,opt,name=gateway_id,json=gatewayId,proto3" json:"gateway_id,omitempty"` - // Relay ID. - RelayId string `protobuf:"bytes,2,opt,name=relay_id,json=relayId,proto3" json:"relay_id,omitempty"` - // Timestamp (second precision). - Time *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=time,proto3" json:"time,omitempty"` // Relay path. - RelayPath []*MeshHeartbeatRelayPath `protobuf:"bytes,4,rep,name=relay_path,json=relayPath,proto3" json:"relay_path,omitempty"` + RelayPath []*MeshEventHeartbeatRelayPath `protobuf:"bytes,4,rep,name=relay_path,json=relayPath,proto3" json:"relay_path,omitempty"` } -func (x *MeshHeartbeat) Reset() { - *x = MeshHeartbeat{} - mi := &file_gw_gw_proto_msgTypes[35] +func (x *MeshEventHeartbeat) Reset() { + *x = MeshEventHeartbeat{} + mi := &file_gw_gw_proto_msgTypes[45] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *MeshHeartbeat) String() string { +func (x *MeshEventHeartbeat) String() string { return protoimpl.X.MessageStringOf(x) } -func (*MeshHeartbeat) ProtoMessage() {} +func (*MeshEventHeartbeat) ProtoMessage() {} -func (x *MeshHeartbeat) ProtoReflect() protoreflect.Message { - mi := &file_gw_gw_proto_msgTypes[35] +func (x *MeshEventHeartbeat) ProtoReflect() protoreflect.Message { + mi := &file_gw_gw_proto_msgTypes[45] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3519,40 +4194,19 @@ func (x *MeshHeartbeat) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use MeshHeartbeat.ProtoReflect.Descriptor instead. -func (*MeshHeartbeat) Descriptor() ([]byte, []int) { - return file_gw_gw_proto_rawDescGZIP(), []int{35} +// Deprecated: Use MeshEventHeartbeat.ProtoReflect.Descriptor instead. +func (*MeshEventHeartbeat) Descriptor() ([]byte, []int) { + return file_gw_gw_proto_rawDescGZIP(), []int{45} } -func (x *MeshHeartbeat) GetGatewayId() string { - if x != nil { - return x.GatewayId - } - return "" -} - -func (x *MeshHeartbeat) GetRelayId() string { - if x != nil { - return x.RelayId - } - return "" -} - -func (x *MeshHeartbeat) GetTime() *timestamppb.Timestamp { - if x != nil { - return x.Time - } - return nil -} - -func (x *MeshHeartbeat) GetRelayPath() []*MeshHeartbeatRelayPath { +func (x *MeshEventHeartbeat) GetRelayPath() []*MeshEventHeartbeatRelayPath { if x != nil { return x.RelayPath } return nil } -type MeshHeartbeatRelayPath struct { +type MeshEventHeartbeatRelayPath struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields @@ -3565,21 +4219,21 @@ type MeshHeartbeatRelayPath struct { Snr int32 `protobuf:"varint,3,opt,name=snr,proto3" json:"snr,omitempty"` } -func (x *MeshHeartbeatRelayPath) Reset() { - *x = MeshHeartbeatRelayPath{} - mi := &file_gw_gw_proto_msgTypes[36] +func (x *MeshEventHeartbeatRelayPath) Reset() { + *x = MeshEventHeartbeatRelayPath{} + mi := &file_gw_gw_proto_msgTypes[46] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *MeshHeartbeatRelayPath) String() string { +func (x *MeshEventHeartbeatRelayPath) String() string { return protoimpl.X.MessageStringOf(x) } -func (*MeshHeartbeatRelayPath) ProtoMessage() {} +func (*MeshEventHeartbeatRelayPath) ProtoMessage() {} -func (x *MeshHeartbeatRelayPath) ProtoReflect() protoreflect.Message { - mi := &file_gw_gw_proto_msgTypes[36] +func (x *MeshEventHeartbeatRelayPath) ProtoReflect() protoreflect.Message { + mi := &file_gw_gw_proto_msgTypes[46] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3590,32 +4244,144 @@ func (x *MeshHeartbeatRelayPath) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use MeshHeartbeatRelayPath.ProtoReflect.Descriptor instead. -func (*MeshHeartbeatRelayPath) Descriptor() ([]byte, []int) { - return file_gw_gw_proto_rawDescGZIP(), []int{36} +// Deprecated: Use MeshEventHeartbeatRelayPath.ProtoReflect.Descriptor instead. +func (*MeshEventHeartbeatRelayPath) Descriptor() ([]byte, []int) { + return file_gw_gw_proto_rawDescGZIP(), []int{46} } -func (x *MeshHeartbeatRelayPath) GetRelayId() string { +func (x *MeshEventHeartbeatRelayPath) GetRelayId() string { if x != nil { return x.RelayId } return "" } -func (x *MeshHeartbeatRelayPath) GetRssi() int32 { +func (x *MeshEventHeartbeatRelayPath) GetRssi() int32 { if x != nil { return x.Rssi } return 0 } -func (x *MeshHeartbeatRelayPath) GetSnr() int32 { +func (x *MeshEventHeartbeatRelayPath) GetSnr() int32 { if x != nil { return x.Snr } return 0 } +// Proprietary mesh event. +type MeshEventProprietary struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Event type. + EventType uint32 `protobuf:"varint,1,opt,name=event_type,json=eventType,proto3" json:"event_type,omitempty"` + // Payload. + Payload []byte `protobuf:"bytes,2,opt,name=payload,proto3" json:"payload,omitempty"` +} + +func (x *MeshEventProprietary) Reset() { + *x = MeshEventProprietary{} + mi := &file_gw_gw_proto_msgTypes[47] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *MeshEventProprietary) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MeshEventProprietary) ProtoMessage() {} + +func (x *MeshEventProprietary) ProtoReflect() protoreflect.Message { + mi := &file_gw_gw_proto_msgTypes[47] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MeshEventProprietary.ProtoReflect.Descriptor instead. +func (*MeshEventProprietary) Descriptor() ([]byte, []int) { + return file_gw_gw_proto_rawDescGZIP(), []int{47} +} + +func (x *MeshEventProprietary) GetEventType() uint32 { + if x != nil { + return x.EventType + } + return 0 +} + +func (x *MeshEventProprietary) GetPayload() []byte { + if x != nil { + return x.Payload + } + return nil +} + +// Proprietary mesh command. +type MeshCommandProprietary struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Command type. + CommandType uint32 `protobuf:"varint,1,opt,name=command_type,json=commandType,proto3" json:"command_type,omitempty"` + // Payload. + Payload []byte `protobuf:"bytes,2,opt,name=payload,proto3" json:"payload,omitempty"` +} + +func (x *MeshCommandProprietary) Reset() { + *x = MeshCommandProprietary{} + mi := &file_gw_gw_proto_msgTypes[48] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *MeshCommandProprietary) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MeshCommandProprietary) ProtoMessage() {} + +func (x *MeshCommandProprietary) ProtoReflect() protoreflect.Message { + mi := &file_gw_gw_proto_msgTypes[48] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MeshCommandProprietary.ProtoReflect.Descriptor instead. +func (*MeshCommandProprietary) Descriptor() ([]byte, []int) { + return file_gw_gw_proto_rawDescGZIP(), []int{48} +} + +func (x *MeshCommandProprietary) GetCommandType() uint32 { + if x != nil { + return x.CommandType + } + return 0 +} + +func (x *MeshCommandProprietary) GetPayload() []byte { + if x != nil { + return x.Payload + } + return nil +} + var File_gw_gw_proto protoreflect.FileDescriptor var file_gw_gw_proto_rawDesc = []byte{ @@ -3627,465 +4393,544 @@ var file_gw_gw_proto_rawDesc = []byte{ 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xa8, 0x01, 0x0a, 0x0a, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2c, 0x0a, 0x04, 0x6c, 0x6f, 0x72, 0x61, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x77, 0x2e, 0x4c, 0x6f, 0x72, 0x61, 0x4d, 0x6f, 0x64, 0x75, - 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x48, 0x00, 0x52, 0x04, 0x6c, 0x6f, - 0x72, 0x61, 0x12, 0x29, 0x0a, 0x03, 0x66, 0x73, 0x6b, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x15, 0x2e, 0x67, 0x77, 0x2e, 0x46, 0x73, 0x6b, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x48, 0x00, 0x52, 0x03, 0x66, 0x73, 0x6b, 0x12, 0x33, 0x0a, - 0x07, 0x6c, 0x72, 0x5f, 0x66, 0x68, 0x73, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, - 0x2e, 0x67, 0x77, 0x2e, 0x4c, 0x72, 0x46, 0x68, 0x73, 0x73, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x48, 0x00, 0x52, 0x06, 0x6c, 0x72, 0x46, 0x68, - 0x73, 0x73, 0x42, 0x0c, 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, - 0x22, 0xe1, 0x02, 0x0a, 0x12, 0x55, 0x70, 0x6c, 0x69, 0x6e, 0x6b, 0x54, 0x78, 0x49, 0x6e, 0x66, - 0x6f, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x12, 0x1c, 0x0a, 0x09, 0x66, 0x72, 0x65, 0x71, 0x75, - 0x65, 0x6e, 0x63, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x66, 0x72, 0x65, 0x71, - 0x75, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x32, 0x0a, 0x0a, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x12, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x2e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x6d, - 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4a, 0x0a, 0x14, 0x6c, 0x6f, 0x72, - 0x61, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x66, - 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x77, 0x2e, 0x4c, 0x6f, 0x72, - 0x61, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x48, - 0x00, 0x52, 0x12, 0x6c, 0x6f, 0x72, 0x61, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x47, 0x0a, 0x13, 0x66, 0x73, 0x6b, 0x5f, 0x6d, 0x6f, 0x64, - 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x67, 0x77, 0x2e, 0x46, 0x73, 0x6b, 0x4d, 0x6f, 0x64, 0x75, 0x6c, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x48, 0x00, 0x52, 0x11, 0x66, 0x73, 0x6b, - 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x51, - 0x0a, 0x17, 0x6c, 0x72, 0x5f, 0x66, 0x68, 0x73, 0x73, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x18, 0x2e, 0x67, 0x77, 0x2e, 0x4c, 0x72, 0x46, 0x68, 0x73, 0x73, 0x4d, 0x6f, 0x64, 0x75, 0x6c, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x48, 0x00, 0x52, 0x14, 0x6c, 0x72, 0x46, - 0x68, 0x73, 0x73, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, - 0x6f, 0x42, 0x11, 0x0a, 0x0f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x69, 0x6e, 0x66, 0x6f, 0x22, 0x5c, 0x0a, 0x0c, 0x55, 0x70, 0x6c, 0x69, 0x6e, 0x6b, 0x54, 0x78, - 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1c, 0x0a, 0x09, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, - 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, - 0x63, 0x79, 0x12, 0x2e, 0x0a, 0x0a, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x67, 0x77, 0x2e, 0x4d, 0x6f, 0x64, 0x75, - 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x22, 0x9c, 0x02, 0x0a, 0x12, 0x4c, 0x6f, 0x72, 0x61, 0x4d, 0x6f, 0x64, 0x75, 0x6c, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1c, 0x0a, 0x09, 0x62, 0x61, 0x6e, - 0x64, 0x77, 0x69, 0x64, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x62, 0x61, - 0x6e, 0x64, 0x77, 0x69, 0x64, 0x74, 0x68, 0x12, 0x29, 0x0a, 0x10, 0x73, 0x70, 0x72, 0x65, 0x61, - 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x66, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x0f, 0x73, 0x70, 0x72, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x46, 0x61, 0x63, 0x74, - 0x6f, 0x72, 0x12, 0x28, 0x0a, 0x10, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x5f, - 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f, - 0x64, 0x65, 0x52, 0x61, 0x74, 0x65, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x12, 0x29, 0x0a, 0x09, - 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x0c, 0x2e, 0x67, 0x77, 0x2e, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x61, 0x74, 0x65, 0x52, 0x08, 0x63, - 0x6f, 0x64, 0x65, 0x52, 0x61, 0x74, 0x65, 0x12, 0x35, 0x0a, 0x16, 0x70, 0x6f, 0x6c, 0x61, 0x72, - 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x70, 0x6f, 0x6c, 0x61, 0x72, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1a, - 0x0a, 0x08, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x08, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x12, 0x15, 0x0a, 0x06, 0x6e, 0x6f, - 0x5f, 0x63, 0x72, 0x63, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x6e, 0x6f, 0x43, 0x72, - 0x63, 0x22, 0x60, 0x0a, 0x11, 0x46, 0x73, 0x6b, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2f, 0x0a, 0x13, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, - 0x6e, 0x63, 0x79, 0x5f, 0x64, 0x65, 0x76, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x12, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x44, 0x65, - 0x76, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x72, - 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x72, - 0x61, 0x74, 0x65, 0x22, 0xc2, 0x01, 0x0a, 0x14, 0x4c, 0x72, 0x46, 0x68, 0x73, 0x73, 0x4d, 0x6f, - 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x36, 0x0a, 0x17, - 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, - 0x6c, 0x5f, 0x77, 0x69, 0x64, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x15, 0x6f, - 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x57, - 0x69, 0x64, 0x74, 0x68, 0x12, 0x28, 0x0a, 0x10, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x72, 0x61, 0x74, - 0x65, 0x5f, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, - 0x63, 0x6f, 0x64, 0x65, 0x52, 0x61, 0x74, 0x65, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x12, 0x29, - 0x0a, 0x09, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x0c, 0x2e, 0x67, 0x77, 0x2e, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x61, 0x74, 0x65, 0x52, - 0x08, 0x63, 0x6f, 0x64, 0x65, 0x52, 0x61, 0x74, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x72, 0x69, - 0x64, 0x5f, 0x73, 0x74, 0x65, 0x70, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x67, - 0x72, 0x69, 0x64, 0x53, 0x74, 0x65, 0x70, 0x73, 0x22, 0x78, 0x0a, 0x16, 0x45, 0x6e, 0x63, 0x72, - 0x79, 0x70, 0x74, 0x65, 0x64, 0x46, 0x69, 0x6e, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x12, 0x22, 0x0a, 0x0d, 0x61, 0x65, 0x73, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x69, 0x6e, - 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x61, 0x65, 0x73, 0x4b, 0x65, - 0x79, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, - 0x74, 0x65, 0x64, 0x5f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x65, 0x6e, - 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x4e, 0x73, 0x12, 0x17, 0x0a, 0x07, 0x66, 0x70, 0x67, - 0x61, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x66, 0x70, 0x67, 0x61, - 0x49, 0x64, 0x22, 0x44, 0x0a, 0x12, 0x50, 0x6c, 0x61, 0x69, 0x6e, 0x46, 0x69, 0x6e, 0x65, 0x54, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x2e, 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x22, 0x82, 0x0a, 0x0a, 0x0c, 0x47, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x5f, 0x69, 0x64, 0x5f, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x49, 0x64, 0x4c, - 0x65, 0x67, 0x61, 0x63, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, - 0x5f, 0x69, 0x64, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x49, 0x64, 0x12, 0x2e, 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xa4, 0x01, 0x0a, 0x05, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, + 0x34, 0x0a, 0x0c, 0x75, 0x70, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x67, 0x77, 0x2e, 0x55, 0x70, 0x6c, 0x69, 0x6e, + 0x6b, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x48, 0x00, 0x52, 0x0b, 0x75, 0x70, 0x6c, 0x69, 0x6e, 0x6b, + 0x46, 0x72, 0x61, 0x6d, 0x65, 0x12, 0x37, 0x0a, 0x0d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x5f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x67, + 0x77, 0x2e, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x53, 0x74, 0x61, 0x74, 0x73, 0x48, 0x00, + 0x52, 0x0c, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x23, + 0x0a, 0x04, 0x6d, 0x65, 0x73, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x67, + 0x77, 0x2e, 0x4d, 0x65, 0x73, 0x68, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x04, 0x6d, + 0x65, 0x73, 0x68, 0x42, 0x07, 0x0a, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x22, 0xd6, 0x02, 0x0a, + 0x07, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x43, 0x0a, 0x13, 0x73, 0x65, 0x6e, 0x64, + 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x67, 0x77, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, + 0x69, 0x6e, 0x6b, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x48, 0x00, 0x52, 0x11, 0x73, 0x65, 0x6e, 0x64, + 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x12, 0x56, 0x0a, + 0x19, 0x73, 0x65, 0x74, 0x5f, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x18, 0x2e, 0x67, 0x77, 0x2e, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x17, 0x73, 0x65, + 0x74, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3f, 0x0a, 0x0e, 0x67, 0x65, 0x74, 0x5f, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, + 0x67, 0x77, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x49, 0x64, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0c, 0x67, 0x65, 0x74, 0x47, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x49, 0x64, 0x12, 0x3b, 0x0a, 0x0c, 0x67, 0x65, 0x74, 0x5f, 0x6c, 0x6f, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, + 0x77, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0b, 0x67, 0x65, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x0a, 0x04, 0x6d, 0x65, 0x73, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x0f, 0x2e, 0x67, 0x77, 0x2e, 0x4d, 0x65, 0x73, 0x68, 0x43, 0x6f, 0x6d, 0x6d, 0x61, + 0x6e, 0x64, 0x48, 0x00, 0x52, 0x04, 0x6d, 0x65, 0x73, 0x68, 0x42, 0x09, 0x0a, 0x07, 0x63, 0x6f, + 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x22, 0xa0, 0x01, 0x0a, 0x09, 0x4d, 0x65, 0x73, 0x68, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x49, 0x64, 0x12, 0x2e, 0x0a, + 0x04, 0x74, 0x69, 0x6d, 0x65, 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, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x29, 0x0a, + 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, + 0x67, 0x77, 0x2e, 0x4d, 0x65, 0x73, 0x68, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x49, 0x74, 0x65, 0x6d, + 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x8e, 0x01, 0x0a, 0x0d, 0x4d, 0x65, 0x73, + 0x68, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x3c, 0x0a, 0x0b, 0x70, 0x72, + 0x6f, 0x70, 0x72, 0x69, 0x65, 0x74, 0x61, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x18, 0x2e, 0x67, 0x77, 0x2e, 0x4d, 0x65, 0x73, 0x68, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x50, 0x72, + 0x6f, 0x70, 0x72, 0x69, 0x65, 0x74, 0x61, 0x72, 0x79, 0x48, 0x00, 0x52, 0x0b, 0x70, 0x72, 0x6f, + 0x70, 0x72, 0x69, 0x65, 0x74, 0x61, 0x72, 0x79, 0x12, 0x36, 0x0a, 0x09, 0x68, 0x65, 0x61, 0x72, + 0x74, 0x62, 0x65, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x77, + 0x2e, 0x4d, 0x65, 0x73, 0x68, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, + 0x65, 0x61, 0x74, 0x48, 0x00, 0x52, 0x09, 0x68, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, + 0x42, 0x07, 0x0a, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x78, 0x0a, 0x0b, 0x4d, 0x65, 0x73, + 0x68, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x65, 0x6c, 0x61, 0x79, + 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x6c, 0x61, 0x79, + 0x49, 0x64, 0x12, 0x2f, 0x0a, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x18, 0x03, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x67, 0x77, 0x2e, 0x4d, 0x65, 0x73, 0x68, 0x43, 0x6f, + 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x61, + 0x6e, 0x64, 0x73, 0x22, 0x5c, 0x0a, 0x0f, 0x4d, 0x65, 0x73, 0x68, 0x43, 0x6f, 0x6d, 0x6d, 0x61, + 0x6e, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x3e, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x72, 0x69, + 0x65, 0x74, 0x61, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x77, + 0x2e, 0x4d, 0x65, 0x73, 0x68, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x50, 0x72, 0x6f, 0x70, + 0x72, 0x69, 0x65, 0x74, 0x61, 0x72, 0x79, 0x48, 0x00, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x72, + 0x69, 0x65, 0x74, 0x61, 0x72, 0x79, 0x42, 0x09, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, + 0x64, 0x22, 0xa8, 0x01, 0x0a, 0x0a, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x2c, 0x0a, 0x04, 0x6c, 0x6f, 0x72, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, + 0x2e, 0x67, 0x77, 0x2e, 0x4c, 0x6f, 0x72, 0x61, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x48, 0x00, 0x52, 0x04, 0x6c, 0x6f, 0x72, 0x61, 0x12, 0x29, + 0x0a, 0x03, 0x66, 0x73, 0x6b, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x67, 0x77, + 0x2e, 0x46, 0x73, 0x6b, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, + 0x66, 0x6f, 0x48, 0x00, 0x52, 0x03, 0x66, 0x73, 0x6b, 0x12, 0x33, 0x0a, 0x07, 0x6c, 0x72, 0x5f, + 0x66, 0x68, 0x73, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x67, 0x77, 0x2e, + 0x4c, 0x72, 0x46, 0x68, 0x73, 0x73, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x49, 0x6e, 0x66, 0x6f, 0x48, 0x00, 0x52, 0x06, 0x6c, 0x72, 0x46, 0x68, 0x73, 0x73, 0x42, 0x0c, + 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x22, 0xe1, 0x02, 0x0a, + 0x12, 0x55, 0x70, 0x6c, 0x69, 0x6e, 0x6b, 0x54, 0x78, 0x49, 0x6e, 0x66, 0x6f, 0x4c, 0x65, 0x67, + 0x61, 0x63, 0x79, 0x12, 0x1c, 0x0a, 0x09, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, + 0x79, 0x12, 0x32, 0x0a, 0x0a, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x12, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, + 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x6d, 0x6f, 0x64, 0x75, 0x6c, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4a, 0x0a, 0x14, 0x6c, 0x6f, 0x72, 0x61, 0x5f, 0x6d, 0x6f, + 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x77, 0x2e, 0x4c, 0x6f, 0x72, 0x61, 0x4d, 0x6f, 0x64, + 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x48, 0x00, 0x52, 0x12, 0x6c, + 0x6f, 0x72, 0x61, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, + 0x6f, 0x12, 0x47, 0x0a, 0x13, 0x66, 0x73, 0x6b, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, + 0x2e, 0x67, 0x77, 0x2e, 0x46, 0x73, 0x6b, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x48, 0x00, 0x52, 0x11, 0x66, 0x73, 0x6b, 0x4d, 0x6f, 0x64, 0x75, + 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x51, 0x0a, 0x17, 0x6c, 0x72, + 0x5f, 0x66, 0x68, 0x73, 0x73, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x67, 0x77, + 0x2e, 0x4c, 0x72, 0x46, 0x68, 0x73, 0x73, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x48, 0x00, 0x52, 0x14, 0x6c, 0x72, 0x46, 0x68, 0x73, 0x73, 0x4d, + 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x11, 0x0a, + 0x0f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x66, 0x6f, + 0x22, 0x5c, 0x0a, 0x0c, 0x55, 0x70, 0x6c, 0x69, 0x6e, 0x6b, 0x54, 0x78, 0x49, 0x6e, 0x66, 0x6f, + 0x12, 0x1c, 0x0a, 0x09, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x09, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x2e, + 0x0a, 0x0a, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x67, 0x77, 0x2e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x0a, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x9c, + 0x02, 0x0a, 0x12, 0x4c, 0x6f, 0x72, 0x61, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1c, 0x0a, 0x09, 0x62, 0x61, 0x6e, 0x64, 0x77, 0x69, 0x64, + 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x62, 0x61, 0x6e, 0x64, 0x77, 0x69, + 0x64, 0x74, 0x68, 0x12, 0x29, 0x0a, 0x10, 0x73, 0x70, 0x72, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, + 0x5f, 0x66, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x73, + 0x70, 0x72, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x46, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x28, + 0x0a, 0x10, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x6c, 0x65, 0x67, 0x61, + 0x63, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f, 0x64, 0x65, 0x52, 0x61, + 0x74, 0x65, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x12, 0x29, 0x0a, 0x09, 0x63, 0x6f, 0x64, 0x65, + 0x5f, 0x72, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0c, 0x2e, 0x67, 0x77, + 0x2e, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x61, 0x74, 0x65, 0x52, 0x08, 0x63, 0x6f, 0x64, 0x65, 0x52, + 0x61, 0x74, 0x65, 0x12, 0x35, 0x0a, 0x16, 0x70, 0x6f, 0x6c, 0x61, 0x72, 0x69, 0x7a, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x15, 0x70, 0x6f, 0x6c, 0x61, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x49, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, + 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x70, 0x72, + 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x12, 0x15, 0x0a, 0x06, 0x6e, 0x6f, 0x5f, 0x63, 0x72, 0x63, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x6e, 0x6f, 0x43, 0x72, 0x63, 0x22, 0x60, 0x0a, + 0x11, 0x46, 0x73, 0x6b, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, + 0x66, 0x6f, 0x12, 0x2f, 0x0a, 0x13, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x5f, + 0x64, 0x65, 0x76, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x12, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x44, 0x65, 0x76, 0x69, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x72, 0x61, 0x74, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x72, 0x61, 0x74, 0x65, 0x22, + 0xc2, 0x01, 0x0a, 0x14, 0x4c, 0x72, 0x46, 0x68, 0x73, 0x73, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x36, 0x0a, 0x17, 0x6f, 0x70, 0x65, 0x72, + 0x61, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x77, 0x69, + 0x64, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x15, 0x6f, 0x70, 0x65, 0x72, 0x61, + 0x74, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x57, 0x69, 0x64, 0x74, 0x68, + 0x12, 0x28, 0x0a, 0x10, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x6c, 0x65, + 0x67, 0x61, 0x63, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f, 0x64, 0x65, + 0x52, 0x61, 0x74, 0x65, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x12, 0x29, 0x0a, 0x09, 0x63, 0x6f, + 0x64, 0x65, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0c, 0x2e, + 0x67, 0x77, 0x2e, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x61, 0x74, 0x65, 0x52, 0x08, 0x63, 0x6f, 0x64, + 0x65, 0x52, 0x61, 0x74, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x72, 0x69, 0x64, 0x5f, 0x73, 0x74, + 0x65, 0x70, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x67, 0x72, 0x69, 0x64, 0x53, + 0x74, 0x65, 0x70, 0x73, 0x22, 0x78, 0x0a, 0x16, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, + 0x64, 0x46, 0x69, 0x6e, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x22, + 0x0a, 0x0d, 0x61, 0x65, 0x73, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x61, 0x65, 0x73, 0x4b, 0x65, 0x79, 0x49, 0x6e, 0x64, + 0x65, 0x78, 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x5f, + 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, + 0x74, 0x65, 0x64, 0x4e, 0x73, 0x12, 0x17, 0x0a, 0x07, 0x66, 0x70, 0x67, 0x61, 0x5f, 0x69, 0x64, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x66, 0x70, 0x67, 0x61, 0x49, 0x64, 0x22, 0x44, + 0x0a, 0x12, 0x50, 0x6c, 0x61, 0x69, 0x6e, 0x46, 0x69, 0x6e, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x61, 0x6d, 0x70, 0x12, 0x2e, 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x04, - 0x74, 0x69, 0x6d, 0x65, 0x12, 0x2c, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, - 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x76, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2e, 0x0a, 0x13, 0x72, 0x78, 0x5f, - 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x5f, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x11, 0x72, 0x78, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, - 0x73, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x12, 0x33, 0x0a, 0x16, 0x72, 0x78, 0x5f, - 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x5f, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, - 0x5f, 0x6f, 0x6b, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x13, 0x72, 0x78, 0x50, 0x61, 0x63, - 0x6b, 0x65, 0x74, 0x73, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x4f, 0x6b, 0x12, 0x2e, - 0x0a, 0x13, 0x74, 0x78, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x5f, 0x72, 0x65, 0x63, - 0x65, 0x69, 0x76, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x11, 0x74, 0x78, 0x50, - 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x12, 0x2c, - 0x0a, 0x12, 0x74, 0x78, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x5f, 0x65, 0x6d, 0x69, - 0x74, 0x74, 0x65, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x10, 0x74, 0x78, 0x50, 0x61, - 0x63, 0x6b, 0x65, 0x74, 0x73, 0x45, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x12, 0x3a, 0x0a, 0x08, - 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, - 0x2e, 0x67, 0x77, 0x2e, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x53, 0x74, 0x61, 0x74, 0x73, - 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, - 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x64, 0x0a, 0x18, 0x74, 0x78, 0x5f, 0x70, - 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x66, 0x72, 0x65, 0x71, 0x75, - 0x65, 0x6e, 0x63, 0x79, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x67, 0x77, 0x2e, - 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x53, 0x74, 0x61, 0x74, 0x73, 0x2e, 0x54, 0x78, 0x50, - 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x50, 0x65, 0x72, 0x46, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, - 0x63, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x15, 0x74, 0x78, 0x50, 0x61, 0x63, 0x6b, 0x65, - 0x74, 0x73, 0x50, 0x65, 0x72, 0x46, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x64, - 0x0a, 0x18, 0x72, 0x78, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x5f, 0x70, 0x65, 0x72, - 0x5f, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x2b, 0x2e, 0x67, 0x77, 0x2e, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x53, 0x74, 0x61, - 0x74, 0x73, 0x2e, 0x52, 0x78, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x50, 0x65, 0x72, 0x46, - 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x15, 0x72, - 0x78, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x50, 0x65, 0x72, 0x46, 0x72, 0x65, 0x71, 0x75, - 0x65, 0x6e, 0x63, 0x79, 0x12, 0x51, 0x0a, 0x19, 0x74, 0x78, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, - 0x74, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x77, 0x2e, 0x50, 0x65, 0x72, - 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, - 0x16, 0x74, 0x78, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x50, 0x65, 0x72, 0x4d, 0x6f, 0x64, - 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x51, 0x0a, 0x19, 0x72, 0x78, 0x5f, 0x70, 0x61, - 0x63, 0x6b, 0x65, 0x74, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x77, 0x2e, - 0x50, 0x65, 0x72, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x75, - 0x6e, 0x74, 0x52, 0x16, 0x72, 0x78, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x50, 0x65, 0x72, - 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x5b, 0x0a, 0x15, 0x74, 0x78, - 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x18, 0x10, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x67, 0x77, 0x2e, 0x47, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x53, 0x74, 0x61, 0x74, 0x73, 0x2e, 0x54, 0x78, 0x50, 0x61, - 0x63, 0x6b, 0x65, 0x74, 0x73, 0x50, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x52, 0x12, 0x74, 0x78, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x50, 0x65, - 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x3c, 0x0a, 0x10, 0x64, 0x75, 0x74, 0x79, 0x5f, - 0x63, 0x79, 0x63, 0x6c, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x18, 0x12, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x77, 0x2e, 0x44, 0x75, 0x74, 0x79, 0x43, 0x79, 0x63, 0x6c, 0x65, - 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x0e, 0x64, 0x75, 0x74, 0x79, 0x43, 0x79, 0x63, 0x6c, 0x65, - 0x53, 0x74, 0x61, 0x74, 0x73, 0x1a, 0x3b, 0x0a, 0x0d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, - 0x38, 0x01, 0x1a, 0x48, 0x0a, 0x1a, 0x54, 0x78, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x50, - 0x65, 0x72, 0x46, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, - 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x48, 0x0a, 0x1a, - 0x52, 0x78, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x50, 0x65, 0x72, 0x46, 0x72, 0x65, 0x71, - 0x75, 0x65, 0x6e, 0x63, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, - 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x45, 0x0a, 0x17, 0x54, 0x78, 0x50, 0x61, 0x63, 0x6b, - 0x65, 0x74, 0x73, 0x50, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, - 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x5a, 0x0a, - 0x12, 0x50, 0x65, 0x72, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, - 0x75, 0x6e, 0x74, 0x12, 0x2e, 0x0a, 0x0a, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x67, 0x77, 0x2e, 0x4d, 0x6f, 0x64, - 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0xa0, 0x01, 0x0a, 0x0e, 0x44, 0x75, - 0x74, 0x79, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x32, 0x0a, 0x0a, - 0x72, 0x65, 0x67, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x12, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x52, 0x65, 0x67, 0x75, 0x6c, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x72, 0x65, 0x67, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x31, 0x0a, 0x06, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x77, 0x69, 0x6e, - 0x64, 0x6f, 0x77, 0x12, 0x27, 0x0a, 0x05, 0x62, 0x61, 0x6e, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x67, 0x77, 0x2e, 0x44, 0x75, 0x74, 0x79, 0x43, 0x79, 0x63, 0x6c, - 0x65, 0x42, 0x61, 0x6e, 0x64, 0x52, 0x05, 0x62, 0x61, 0x6e, 0x64, 0x73, 0x22, 0xe1, 0x01, 0x0a, - 0x0d, 0x44, 0x75, 0x74, 0x79, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x42, 0x61, 0x6e, 0x64, 0x12, 0x12, - 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x5f, - 0x6d, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x66, 0x72, 0x65, 0x71, 0x75, - 0x65, 0x6e, 0x63, 0x79, 0x4d, 0x69, 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x66, 0x72, 0x65, 0x71, 0x75, - 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, - 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x4d, 0x61, 0x78, 0x12, 0x34, 0x0a, 0x08, - 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x6c, 0x6f, 0x61, 0x64, 0x4d, - 0x61, 0x78, 0x12, 0x3c, 0x0a, 0x0c, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x6b, - 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x6c, 0x6f, 0x61, 0x64, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x65, 0x64, - 0x22, 0xd2, 0x06, 0x0a, 0x12, 0x55, 0x70, 0x6c, 0x69, 0x6e, 0x6b, 0x52, 0x78, 0x49, 0x6e, 0x66, - 0x6f, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x49, 0x64, 0x12, 0x2e, 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x4a, 0x0a, 0x14, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, - 0x69, 0x6e, 0x63, 0x65, 0x5f, 0x67, 0x70, 0x73, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x11, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x47, 0x70, 0x73, 0x45, 0x70, 0x6f, - 0x63, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x73, 0x73, 0x69, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x04, 0x72, 0x73, 0x73, 0x69, 0x12, 0x19, 0x0a, 0x08, 0x6c, 0x6f, 0x72, 0x61, 0x5f, 0x73, - 0x6e, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x01, 0x52, 0x07, 0x6c, 0x6f, 0x72, 0x61, 0x53, 0x6e, - 0x72, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x19, 0x0a, 0x08, 0x72, - 0x66, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x72, - 0x66, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x18, - 0x09, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x12, 0x18, 0x0a, 0x07, - 0x61, 0x6e, 0x74, 0x65, 0x6e, 0x6e, 0x61, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x61, - 0x6e, 0x74, 0x65, 0x6e, 0x6e, 0x61, 0x12, 0x2c, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, - 0x6e, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x45, 0x0a, 0x13, 0x66, 0x69, 0x6e, 0x65, 0x5f, 0x74, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x15, 0x2e, 0x67, 0x77, 0x2e, 0x46, 0x69, 0x6e, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, - 0x74, 0x61, 0x6d, 0x70, 0x54, 0x79, 0x70, 0x65, 0x52, 0x11, 0x66, 0x69, 0x6e, 0x65, 0x54, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x54, 0x79, 0x70, 0x65, 0x12, 0x56, 0x0a, 0x18, 0x65, - 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x6e, 0x65, 0x5f, 0x74, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, - 0x67, 0x77, 0x2e, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x46, 0x69, 0x6e, 0x65, - 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x48, 0x00, 0x52, 0x16, 0x65, 0x6e, 0x63, - 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x46, 0x69, 0x6e, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x12, 0x4a, 0x0a, 0x14, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x5f, 0x66, 0x69, 0x6e, - 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x0e, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x77, 0x2e, 0x50, 0x6c, 0x61, 0x69, 0x6e, 0x46, 0x69, 0x6e, 0x65, - 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x48, 0x00, 0x52, 0x12, 0x70, 0x6c, 0x61, - 0x69, 0x6e, 0x46, 0x69, 0x6e, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, - 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0c, - 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x70, 0x6c, - 0x69, 0x6e, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x75, 0x70, - 0x6c, 0x69, 0x6e, 0x6b, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x0a, 0x63, 0x72, 0x63, 0x5f, 0x73, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0d, 0x2e, 0x67, 0x77, 0x2e, - 0x43, 0x52, 0x43, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x09, 0x63, 0x72, 0x63, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x12, 0x40, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, - 0x18, 0x12, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x77, 0x2e, 0x55, 0x70, 0x6c, 0x69, - 0x6e, 0x6b, 0x52, 0x78, 0x49, 0x6e, 0x66, 0x6f, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x2e, 0x4d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x6d, 0x65, - 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x3b, 0x0a, 0x0d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, - 0x02, 0x38, 0x01, 0x42, 0x10, 0x0a, 0x0e, 0x66, 0x69, 0x6e, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0xcf, 0x05, 0x0a, 0x0c, 0x55, 0x70, 0x6c, 0x69, 0x6e, 0x6b, - 0x52, 0x78, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, - 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x70, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, - 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x75, 0x70, 0x6c, 0x69, 0x6e, 0x6b, - 0x49, 0x64, 0x12, 0x33, 0x0a, 0x07, 0x67, 0x77, 0x5f, 0x74, 0x69, 0x6d, 0x65, 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, - 0x06, 0x67, 0x77, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x33, 0x0a, 0x07, 0x6e, 0x73, 0x5f, 0x74, 0x69, - 0x6d, 0x65, 0x18, 0x11, 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, 0x06, 0x6e, 0x73, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x4a, 0x0a, 0x14, - 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x5f, 0x67, 0x70, 0x73, 0x5f, 0x65, - 0x70, 0x6f, 0x63, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x11, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x69, 0x6e, 0x63, 0x65, - 0x47, 0x70, 0x73, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x53, 0x0a, 0x19, 0x66, 0x69, 0x6e, 0x65, - 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x5f, 0x67, 0x70, 0x73, 0x5f, - 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x15, 0x66, 0x69, 0x6e, 0x65, 0x54, 0x69, 0x6d, 0x65, - 0x53, 0x69, 0x6e, 0x63, 0x65, 0x47, 0x70, 0x73, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x12, 0x0a, - 0x04, 0x72, 0x73, 0x73, 0x69, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x72, 0x73, 0x73, - 0x69, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x6e, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x02, 0x52, 0x03, - 0x73, 0x6e, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x19, 0x0a, - 0x08, 0x72, 0x66, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x07, 0x72, 0x66, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x62, 0x6f, 0x61, 0x72, - 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x12, 0x18, - 0x0a, 0x07, 0x61, 0x6e, 0x74, 0x65, 0x6e, 0x6e, 0x61, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x07, 0x61, 0x6e, 0x74, 0x65, 0x6e, 0x6e, 0x61, 0x12, 0x2c, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x6c, 0x6f, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, - 0x74, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, - 0x12, 0x3a, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x0f, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x67, 0x77, 0x2e, 0x55, 0x70, 0x6c, 0x69, 0x6e, 0x6b, 0x52, 0x78, - 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x2c, 0x0a, 0x0a, - 0x63, 0x72, 0x63, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x0d, 0x2e, 0x67, 0x77, 0x2e, 0x43, 0x52, 0x43, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, - 0x09, 0x63, 0x72, 0x63, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x1a, 0x3b, 0x0a, 0x0d, 0x4d, 0x65, - 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, - 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xaf, 0x05, 0x0a, 0x14, 0x44, 0x6f, 0x77, 0x6e, - 0x6c, 0x69, 0x6e, 0x6b, 0x54, 0x78, 0x49, 0x6e, 0x66, 0x6f, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, - 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x49, 0x64, 0x12, - 0x1c, 0x0a, 0x09, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x09, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x14, 0x0a, - 0x05, 0x70, 0x6f, 0x77, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x70, 0x6f, - 0x77, 0x65, 0x72, 0x12, 0x32, 0x0a, 0x0a, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x12, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x2e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x6d, 0x6f, 0x64, - 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4a, 0x0a, 0x14, 0x6c, 0x6f, 0x72, 0x61, 0x5f, - 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, - 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x77, 0x2e, 0x4c, 0x6f, 0x72, 0x61, 0x4d, - 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x48, 0x00, 0x52, - 0x12, 0x6c, 0x6f, 0x72, 0x61, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, - 0x6e, 0x66, 0x6f, 0x12, 0x47, 0x0a, 0x13, 0x66, 0x73, 0x6b, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x15, 0x2e, 0x67, 0x77, 0x2e, 0x46, 0x73, 0x6b, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x48, 0x00, 0x52, 0x11, 0x66, 0x73, 0x6b, 0x4d, 0x6f, - 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x14, 0x0a, 0x05, - 0x62, 0x6f, 0x61, 0x72, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x6f, 0x61, - 0x72, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x6e, 0x74, 0x65, 0x6e, 0x6e, 0x61, 0x18, 0x0b, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x07, 0x61, 0x6e, 0x74, 0x65, 0x6e, 0x6e, 0x61, 0x12, 0x2a, 0x0a, 0x06, - 0x74, 0x69, 0x6d, 0x69, 0x6e, 0x67, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x12, 0x2e, 0x67, - 0x77, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x54, 0x69, 0x6d, 0x69, 0x6e, 0x67, - 0x52, 0x06, 0x74, 0x69, 0x6d, 0x69, 0x6e, 0x67, 0x12, 0x53, 0x0a, 0x17, 0x69, 0x6d, 0x6d, 0x65, - 0x64, 0x69, 0x61, 0x74, 0x65, 0x6c, 0x79, 0x5f, 0x74, 0x69, 0x6d, 0x69, 0x6e, 0x67, 0x5f, 0x69, - 0x6e, 0x66, 0x6f, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x77, 0x2e, 0x49, - 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x6c, 0x79, 0x54, 0x69, 0x6d, 0x69, 0x6e, 0x67, - 0x49, 0x6e, 0x66, 0x6f, 0x48, 0x01, 0x52, 0x15, 0x69, 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, - 0x65, 0x6c, 0x79, 0x54, 0x69, 0x6d, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x41, 0x0a, - 0x11, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x74, 0x69, 0x6d, 0x69, 0x6e, 0x67, 0x5f, 0x69, 0x6e, - 0x66, 0x6f, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x67, 0x77, 0x2e, 0x44, 0x65, - 0x6c, 0x61, 0x79, 0x54, 0x69, 0x6d, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x48, 0x01, 0x52, - 0x0f, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x54, 0x69, 0x6d, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x66, 0x6f, - 0x12, 0x4b, 0x0a, 0x15, 0x67, 0x70, 0x73, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x5f, 0x74, 0x69, - 0x6d, 0x69, 0x6e, 0x67, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x16, 0x2e, 0x67, 0x77, 0x2e, 0x47, 0x50, 0x53, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x54, 0x69, 0x6d, - 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x48, 0x01, 0x52, 0x12, 0x67, 0x70, 0x73, 0x45, 0x70, - 0x6f, 0x63, 0x68, 0x54, 0x69, 0x6d, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x18, 0x0a, - 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, - 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x42, 0x11, 0x0a, 0x0f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x42, 0x0d, 0x0a, 0x0b, 0x74, 0x69, - 0x6d, 0x69, 0x6e, 0x67, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x22, 0xe2, 0x01, 0x0a, 0x0e, 0x44, 0x6f, - 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x54, 0x78, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1c, 0x0a, 0x09, - 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x09, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x6f, - 0x77, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x70, 0x6f, 0x77, 0x65, 0x72, - 0x12, 0x2e, 0x0a, 0x0a, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x67, 0x77, 0x2e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x14, 0x0a, 0x05, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x05, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x6e, 0x74, 0x65, 0x6e, 0x6e, - 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x61, 0x6e, 0x74, 0x65, 0x6e, 0x6e, 0x61, - 0x12, 0x22, 0x0a, 0x06, 0x74, 0x69, 0x6d, 0x69, 0x6e, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x0a, 0x2e, 0x67, 0x77, 0x2e, 0x54, 0x69, 0x6d, 0x69, 0x6e, 0x67, 0x52, 0x06, 0x74, 0x69, - 0x6d, 0x69, 0x6e, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x22, 0xb9, - 0x01, 0x0a, 0x06, 0x54, 0x69, 0x6d, 0x69, 0x6e, 0x67, 0x12, 0x3d, 0x0a, 0x0b, 0x69, 0x6d, 0x6d, - 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x6c, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, - 0x2e, 0x67, 0x77, 0x2e, 0x49, 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x6c, 0x79, 0x54, - 0x69, 0x6d, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x48, 0x00, 0x52, 0x0b, 0x69, 0x6d, 0x6d, - 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x6c, 0x79, 0x12, 0x2b, 0x0a, 0x05, 0x64, 0x65, 0x6c, 0x61, - 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x67, 0x77, 0x2e, 0x44, 0x65, 0x6c, - 0x61, 0x79, 0x54, 0x69, 0x6d, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x48, 0x00, 0x52, 0x05, - 0x64, 0x65, 0x6c, 0x61, 0x79, 0x12, 0x35, 0x0a, 0x09, 0x67, 0x70, 0x73, 0x5f, 0x65, 0x70, 0x6f, - 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x77, 0x2e, 0x47, 0x50, - 0x53, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x54, 0x69, 0x6d, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x66, 0x6f, - 0x48, 0x00, 0x52, 0x08, 0x67, 0x70, 0x73, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x42, 0x0c, 0x0a, 0x0a, - 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x22, 0x17, 0x0a, 0x15, 0x49, 0x6d, - 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x6c, 0x79, 0x54, 0x69, 0x6d, 0x69, 0x6e, 0x67, 0x49, - 0x6e, 0x66, 0x6f, 0x22, 0x42, 0x0a, 0x0f, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x54, 0x69, 0x6d, 0x69, - 0x6e, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2f, 0x0a, 0x05, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x05, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x22, 0x60, 0x0a, 0x12, 0x47, 0x50, 0x53, 0x45, 0x70, - 0x6f, 0x63, 0x68, 0x54, 0x69, 0x6d, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x4a, 0x0a, - 0x14, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x5f, 0x67, 0x70, 0x73, 0x5f, - 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x11, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x69, 0x6e, 0x63, - 0x65, 0x47, 0x70, 0x73, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x22, 0x80, 0x02, 0x0a, 0x0b, 0x55, 0x70, - 0x6c, 0x69, 0x6e, 0x6b, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x68, 0x79, - 0x5f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, - 0x70, 0x68, 0x79, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x3c, 0x0a, 0x0e, 0x74, 0x78, - 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x5f, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x77, 0x2e, 0x55, 0x70, 0x6c, 0x69, 0x6e, 0x6b, 0x54, 0x78, - 0x49, 0x6e, 0x66, 0x6f, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x52, 0x0c, 0x74, 0x78, 0x49, 0x6e, - 0x66, 0x6f, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x12, 0x3c, 0x0a, 0x0e, 0x72, 0x78, 0x5f, 0x69, - 0x6e, 0x66, 0x6f, 0x5f, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x16, 0x2e, 0x67, 0x77, 0x2e, 0x55, 0x70, 0x6c, 0x69, 0x6e, 0x6b, 0x52, 0x78, 0x49, 0x6e, - 0x66, 0x6f, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x52, 0x0c, 0x72, 0x78, 0x49, 0x6e, 0x66, 0x6f, - 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x12, 0x29, 0x0a, 0x07, 0x74, 0x78, 0x5f, 0x69, 0x6e, 0x66, - 0x6f, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x67, 0x77, 0x2e, 0x55, 0x70, 0x6c, - 0x69, 0x6e, 0x6b, 0x54, 0x78, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x74, 0x78, 0x49, 0x6e, 0x66, - 0x6f, 0x12, 0x29, 0x0a, 0x07, 0x72, 0x78, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x67, 0x77, 0x2e, 0x55, 0x70, 0x6c, 0x69, 0x6e, 0x6b, 0x52, 0x78, - 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x72, 0x78, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x87, 0x01, 0x0a, - 0x0e, 0x55, 0x70, 0x6c, 0x69, 0x6e, 0x6b, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x53, 0x65, 0x74, 0x12, - 0x1f, 0x0a, 0x0b, 0x70, 0x68, 0x79, 0x5f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x70, 0x68, 0x79, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, - 0x12, 0x29, 0x0a, 0x07, 0x74, 0x78, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x10, 0x2e, 0x67, 0x77, 0x2e, 0x55, 0x70, 0x6c, 0x69, 0x6e, 0x6b, 0x54, 0x78, 0x49, - 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x74, 0x78, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x29, 0x0a, 0x07, 0x72, - 0x78, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x67, - 0x77, 0x2e, 0x55, 0x70, 0x6c, 0x69, 0x6e, 0x6b, 0x52, 0x78, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, - 0x72, 0x78, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0xd6, 0x01, 0x0a, 0x0d, 0x44, 0x6f, 0x77, 0x6e, 0x6c, - 0x69, 0x6e, 0x6b, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x64, 0x6f, 0x77, 0x6e, - 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x64, - 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x12, 0x64, 0x6f, 0x77, - 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x69, 0x64, 0x5f, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x10, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x49, - 0x64, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x12, 0x2b, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, - 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x67, 0x77, 0x2e, 0x44, 0x6f, 0x77, 0x6e, - 0x6c, 0x69, 0x6e, 0x6b, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, 0x69, - 0x74, 0x65, 0x6d, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, - 0x69, 0x64, 0x5f, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, - 0x0f, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x49, 0x64, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, - 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x49, 0x64, 0x22, - 0xa1, 0x01, 0x0a, 0x11, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x46, 0x72, 0x61, 0x6d, - 0x65, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x68, 0x79, 0x5f, 0x70, 0x61, 0x79, - 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x70, 0x68, 0x79, 0x50, - 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x3e, 0x0a, 0x0e, 0x74, 0x78, 0x5f, 0x69, 0x6e, 0x66, - 0x6f, 0x5f, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, - 0x2e, 0x67, 0x77, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x54, 0x78, 0x49, 0x6e, - 0x66, 0x6f, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x52, 0x0c, 0x74, 0x78, 0x49, 0x6e, 0x66, 0x6f, - 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x12, 0x2b, 0x0a, 0x07, 0x74, 0x78, 0x5f, 0x69, 0x6e, 0x66, - 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x77, 0x2e, 0x44, 0x6f, 0x77, - 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x54, 0x78, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x74, 0x78, 0x49, - 0x6e, 0x66, 0x6f, 0x22, 0xd6, 0x01, 0x0a, 0x0d, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, - 0x54, 0x78, 0x41, 0x63, 0x6b, 0x12, 0x2a, 0x0a, 0x11, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x74, 0x69, 0x6d, 0x65, 0x22, 0x82, 0x0a, 0x0a, 0x0c, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x69, 0x64, 0x5f, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x49, 0x64, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x69, 0x64, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x49, 0x64, - 0x12, 0x1f, 0x0a, 0x0b, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x69, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x49, - 0x64, 0x12, 0x2c, 0x0a, 0x12, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x69, 0x64, - 0x5f, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x10, 0x64, - 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x49, 0x64, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x12, - 0x2b, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, - 0x2e, 0x67, 0x77, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x54, 0x78, 0x41, 0x63, - 0x6b, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x3c, 0x0a, 0x11, - 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x54, 0x78, 0x41, 0x63, 0x6b, 0x49, 0x74, 0x65, - 0x6d, 0x12, 0x27, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x0f, 0x2e, 0x67, 0x77, 0x2e, 0x54, 0x78, 0x41, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0xf3, 0x01, 0x0a, 0x14, 0x47, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x0a, 0x11, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x69, - 0x64, 0x5f, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, - 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x49, 0x64, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x12, - 0x1d, 0x0a, 0x0a, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x49, 0x64, 0x12, 0x18, - 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x34, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x6e, - 0x6e, 0x65, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x67, 0x77, 0x2e, - 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x12, 0x40, - 0x0a, 0x0e, 0x73, 0x74, 0x61, 0x74, 0x73, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, + 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x49, 0x64, + 0x12, 0x2e, 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, + 0x12, 0x2c, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4c, 0x6f, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, + 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x56, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2e, 0x0a, 0x13, 0x72, 0x78, 0x5f, 0x70, 0x61, 0x63, 0x6b, + 0x65, 0x74, 0x73, 0x5f, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x11, 0x72, 0x78, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x52, 0x65, 0x63, + 0x65, 0x69, 0x76, 0x65, 0x64, 0x12, 0x33, 0x0a, 0x16, 0x72, 0x78, 0x5f, 0x70, 0x61, 0x63, 0x6b, + 0x65, 0x74, 0x73, 0x5f, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x5f, 0x6f, 0x6b, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x13, 0x72, 0x78, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, + 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x4f, 0x6b, 0x12, 0x2e, 0x0a, 0x13, 0x74, 0x78, + 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x5f, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, + 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x11, 0x74, 0x78, 0x50, 0x61, 0x63, 0x6b, 0x65, + 0x74, 0x73, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x12, 0x2c, 0x0a, 0x12, 0x74, 0x78, + 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x5f, 0x65, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, + 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x10, 0x74, 0x78, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, + 0x73, 0x45, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x12, 0x3a, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x67, 0x77, 0x2e, + 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x53, 0x74, 0x61, 0x74, 0x73, 0x2e, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x12, 0x64, 0x0a, 0x18, 0x74, 0x78, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, + 0x74, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, + 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x67, 0x77, 0x2e, 0x47, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x53, 0x74, 0x61, 0x74, 0x73, 0x2e, 0x54, 0x78, 0x50, 0x61, 0x63, 0x6b, 0x65, + 0x74, 0x73, 0x50, 0x65, 0x72, 0x46, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x52, 0x15, 0x74, 0x78, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x50, 0x65, + 0x72, 0x46, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x64, 0x0a, 0x18, 0x72, 0x78, + 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x66, 0x72, 0x65, + 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x67, + 0x77, 0x2e, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x53, 0x74, 0x61, 0x74, 0x73, 0x2e, 0x52, + 0x78, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x50, 0x65, 0x72, 0x46, 0x72, 0x65, 0x71, 0x75, + 0x65, 0x6e, 0x63, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x15, 0x72, 0x78, 0x50, 0x61, 0x63, + 0x6b, 0x65, 0x74, 0x73, 0x50, 0x65, 0x72, 0x46, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, + 0x12, 0x51, 0x0a, 0x19, 0x74, 0x78, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x5f, 0x70, + 0x65, 0x72, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0e, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x77, 0x2e, 0x50, 0x65, 0x72, 0x4d, 0x6f, 0x64, 0x75, + 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x16, 0x74, 0x78, 0x50, + 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x50, 0x65, 0x72, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x51, 0x0a, 0x19, 0x72, 0x78, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, + 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x0f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x77, 0x2e, 0x50, 0x65, 0x72, 0x4d, + 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x16, + 0x72, 0x78, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x50, 0x65, 0x72, 0x4d, 0x6f, 0x64, 0x75, + 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x5b, 0x0a, 0x15, 0x74, 0x78, 0x5f, 0x70, 0x61, 0x63, + 0x6b, 0x65, 0x74, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, + 0x10, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x67, 0x77, 0x2e, 0x47, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x53, 0x74, 0x61, 0x74, 0x73, 0x2e, 0x54, 0x78, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, + 0x73, 0x50, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x12, 0x74, 0x78, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x50, 0x65, 0x72, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x12, 0x3c, 0x0a, 0x10, 0x64, 0x75, 0x74, 0x79, 0x5f, 0x63, 0x79, 0x63, 0x6c, + 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, + 0x67, 0x77, 0x2e, 0x44, 0x75, 0x74, 0x79, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, + 0x73, 0x52, 0x0e, 0x64, 0x75, 0x74, 0x79, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, + 0x73, 0x1a, 0x3b, 0x0a, 0x0d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x48, + 0x0a, 0x1a, 0x54, 0x78, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x50, 0x65, 0x72, 0x46, 0x72, + 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, + 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x48, 0x0a, 0x1a, 0x52, 0x78, 0x50, 0x61, + 0x63, 0x6b, 0x65, 0x74, 0x73, 0x50, 0x65, 0x72, 0x46, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, + 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, + 0x38, 0x01, 0x1a, 0x45, 0x0a, 0x17, 0x54, 0x78, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x50, + 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, + 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, + 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x5a, 0x0a, 0x12, 0x50, 0x65, 0x72, + 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, + 0x2e, 0x0a, 0x0a, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x67, 0x77, 0x2e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0xa0, 0x01, 0x0a, 0x0e, 0x44, 0x75, 0x74, 0x79, 0x43, 0x79, + 0x63, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x32, 0x0a, 0x0a, 0x72, 0x65, 0x67, 0x75, + 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x12, 0x2e, 0x63, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x52, 0x65, 0x67, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x0a, 0x72, 0x65, 0x67, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x31, 0x0a, 0x06, + 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, + 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x12, + 0x27, 0x0a, 0x05, 0x62, 0x61, 0x6e, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, + 0x2e, 0x67, 0x77, 0x2e, 0x44, 0x75, 0x74, 0x79, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x42, 0x61, 0x6e, + 0x64, 0x52, 0x05, 0x62, 0x61, 0x6e, 0x64, 0x73, 0x22, 0xe1, 0x01, 0x0a, 0x0d, 0x44, 0x75, 0x74, + 0x79, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x42, 0x61, 0x6e, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x23, + 0x0a, 0x0d, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x6d, 0x69, 0x6e, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, + 0x4d, 0x69, 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, + 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x66, 0x72, 0x65, 0x71, + 0x75, 0x65, 0x6e, 0x63, 0x79, 0x4d, 0x61, 0x78, 0x12, 0x34, 0x0a, 0x08, 0x6c, 0x6f, 0x61, 0x64, + 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x6c, 0x6f, 0x61, 0x64, 0x4d, 0x61, 0x78, 0x12, 0x3c, + 0x0a, 0x0c, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x0b, 0x6c, 0x6f, 0x61, 0x64, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x22, 0xd2, 0x06, 0x0a, + 0x12, 0x55, 0x70, 0x6c, 0x69, 0x6e, 0x6b, 0x52, 0x78, 0x49, 0x6e, 0x66, 0x6f, 0x4c, 0x65, 0x67, + 0x61, 0x63, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x49, 0x64, 0x12, 0x2e, 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x04, 0x74, 0x69, + 0x6d, 0x65, 0x12, 0x4a, 0x0a, 0x14, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, + 0x5f, 0x67, 0x70, 0x73, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x11, 0x74, 0x69, 0x6d, + 0x65, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x47, 0x70, 0x73, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x12, + 0x0a, 0x04, 0x72, 0x73, 0x73, 0x69, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x72, 0x73, + 0x73, 0x69, 0x12, 0x19, 0x0a, 0x08, 0x6c, 0x6f, 0x72, 0x61, 0x5f, 0x73, 0x6e, 0x72, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x01, 0x52, 0x07, 0x6c, 0x6f, 0x72, 0x61, 0x53, 0x6e, 0x72, 0x12, 0x18, 0x0a, + 0x07, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, + 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x66, 0x5f, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x72, 0x66, 0x43, 0x68, 0x61, + 0x69, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x05, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x6e, 0x74, 0x65, + 0x6e, 0x6e, 0x61, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x61, 0x6e, 0x74, 0x65, 0x6e, + 0x6e, 0x61, 0x12, 0x2c, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0b, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4c, 0x6f, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x45, 0x0a, 0x13, 0x66, 0x69, 0x6e, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, + 0x6d, 0x70, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, + 0x67, 0x77, 0x2e, 0x46, 0x69, 0x6e, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x54, 0x79, 0x70, 0x65, 0x52, 0x11, 0x66, 0x69, 0x6e, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x54, 0x79, 0x70, 0x65, 0x12, 0x56, 0x0a, 0x18, 0x65, 0x6e, 0x63, 0x72, 0x79, + 0x70, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x6e, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x77, 0x2e, 0x45, + 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x46, 0x69, 0x6e, 0x65, 0x54, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x48, 0x00, 0x52, 0x16, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, + 0x65, 0x64, 0x46, 0x69, 0x6e, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, + 0x4a, 0x0a, 0x14, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x5f, 0x66, 0x69, 0x6e, 0x65, 0x5f, 0x74, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, + 0x67, 0x77, 0x2e, 0x50, 0x6c, 0x61, 0x69, 0x6e, 0x46, 0x69, 0x6e, 0x65, 0x54, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x48, 0x00, 0x52, 0x12, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x46, 0x69, + 0x6e, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x18, 0x0a, 0x07, 0x63, + 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x63, 0x6f, + 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x70, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, + 0x69, 0x64, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x75, 0x70, 0x6c, 0x69, 0x6e, 0x6b, + 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x0a, 0x63, 0x72, 0x63, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x18, 0x11, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0d, 0x2e, 0x67, 0x77, 0x2e, 0x43, 0x52, 0x43, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x09, 0x63, 0x72, 0x63, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x12, 0x40, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x12, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x77, 0x2e, 0x55, 0x70, 0x6c, 0x69, 0x6e, 0x6b, 0x52, 0x78, + 0x49, 0x6e, 0x66, 0x6f, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x1a, 0x3b, 0x0a, 0x0d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, + 0x10, 0x0a, 0x0e, 0x66, 0x69, 0x6e, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, + 0x70, 0x22, 0xcf, 0x05, 0x0a, 0x0c, 0x55, 0x70, 0x6c, 0x69, 0x6e, 0x6b, 0x52, 0x78, 0x49, 0x6e, + 0x66, 0x6f, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x49, + 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x70, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x75, 0x70, 0x6c, 0x69, 0x6e, 0x6b, 0x49, 0x64, 0x12, 0x33, + 0x0a, 0x07, 0x67, 0x77, 0x5f, 0x74, 0x69, 0x6d, 0x65, 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, 0x06, 0x67, 0x77, 0x54, + 0x69, 0x6d, 0x65, 0x12, 0x33, 0x0a, 0x07, 0x6e, 0x73, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x11, + 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, 0x06, 0x6e, 0x73, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x4a, 0x0a, 0x14, 0x74, 0x69, 0x6d, 0x65, + 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x5f, 0x67, 0x70, 0x73, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, + 0x6e, 0x52, 0x11, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x47, 0x70, 0x73, 0x45, + 0x70, 0x6f, 0x63, 0x68, 0x12, 0x53, 0x0a, 0x19, 0x66, 0x69, 0x6e, 0x65, 0x5f, 0x74, 0x69, 0x6d, + 0x65, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x5f, 0x67, 0x70, 0x73, 0x5f, 0x65, 0x70, 0x6f, 0x63, + 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x15, 0x66, 0x69, 0x6e, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x69, 0x6e, 0x63, + 0x65, 0x47, 0x70, 0x73, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x73, 0x73, + 0x69, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x72, 0x73, 0x73, 0x69, 0x12, 0x10, 0x0a, + 0x03, 0x73, 0x6e, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x02, 0x52, 0x03, 0x73, 0x6e, 0x72, 0x12, + 0x18, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x66, 0x5f, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x72, 0x66, 0x43, + 0x68, 0x61, 0x69, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x18, 0x0a, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x6e, + 0x74, 0x65, 0x6e, 0x6e, 0x61, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x61, 0x6e, 0x74, + 0x65, 0x6e, 0x6e, 0x61, 0x12, 0x2c, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, + 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x0d, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x3a, 0x0a, 0x08, + 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, + 0x2e, 0x67, 0x77, 0x2e, 0x55, 0x70, 0x6c, 0x69, 0x6e, 0x6b, 0x52, 0x78, 0x49, 0x6e, 0x66, 0x6f, + 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, + 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x2c, 0x0a, 0x0a, 0x63, 0x72, 0x63, 0x5f, + 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0d, 0x2e, 0x67, + 0x77, 0x2e, 0x43, 0x52, 0x43, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x09, 0x63, 0x72, 0x63, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x1a, 0x3b, 0x0a, 0x0d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, + 0x02, 0x38, 0x01, 0x22, 0xaf, 0x05, 0x0a, 0x14, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, + 0x54, 0x78, 0x49, 0x6e, 0x66, 0x6f, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x12, 0x1d, 0x0a, 0x0a, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, + 0x52, 0x09, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x66, + 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, + 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x6f, 0x77, + 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x70, 0x6f, 0x77, 0x65, 0x72, 0x12, + 0x32, 0x0a, 0x0a, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x12, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x6f, 0x64, + 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x4a, 0x0a, 0x14, 0x6c, 0x6f, 0x72, 0x61, 0x5f, 0x6d, 0x6f, 0x64, 0x75, + 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x08, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x77, 0x2e, 0x4c, 0x6f, 0x72, 0x61, 0x4d, 0x6f, 0x64, 0x75, 0x6c, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x48, 0x00, 0x52, 0x12, 0x6c, 0x6f, 0x72, + 0x61, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, + 0x47, 0x0a, 0x13, 0x66, 0x73, 0x6b, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x67, + 0x77, 0x2e, 0x46, 0x73, 0x6b, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, + 0x6e, 0x66, 0x6f, 0x48, 0x00, 0x52, 0x11, 0x66, 0x73, 0x6b, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x14, 0x0a, 0x05, 0x62, 0x6f, 0x61, 0x72, + 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x12, 0x18, + 0x0a, 0x07, 0x61, 0x6e, 0x74, 0x65, 0x6e, 0x6e, 0x61, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x07, 0x61, 0x6e, 0x74, 0x65, 0x6e, 0x6e, 0x61, 0x12, 0x2a, 0x0a, 0x06, 0x74, 0x69, 0x6d, 0x69, + 0x6e, 0x67, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x12, 0x2e, 0x67, 0x77, 0x2e, 0x44, 0x6f, + 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x54, 0x69, 0x6d, 0x69, 0x6e, 0x67, 0x52, 0x06, 0x74, 0x69, + 0x6d, 0x69, 0x6e, 0x67, 0x12, 0x53, 0x0a, 0x17, 0x69, 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, + 0x65, 0x6c, 0x79, 0x5f, 0x74, 0x69, 0x6d, 0x69, 0x6e, 0x67, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, + 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x77, 0x2e, 0x49, 0x6d, 0x6d, 0x65, 0x64, + 0x69, 0x61, 0x74, 0x65, 0x6c, 0x79, 0x54, 0x69, 0x6d, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x66, 0x6f, + 0x48, 0x01, 0x52, 0x15, 0x69, 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x6c, 0x79, 0x54, + 0x69, 0x6d, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x41, 0x0a, 0x11, 0x64, 0x65, 0x6c, + 0x61, 0x79, 0x5f, 0x74, 0x69, 0x6d, 0x69, 0x6e, 0x67, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x0e, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x67, 0x77, 0x2e, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x54, + 0x69, 0x6d, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x48, 0x01, 0x52, 0x0f, 0x64, 0x65, 0x6c, + 0x61, 0x79, 0x54, 0x69, 0x6d, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x4b, 0x0a, 0x15, + 0x67, 0x70, 0x73, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x5f, 0x74, 0x69, 0x6d, 0x69, 0x6e, 0x67, + 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x77, + 0x2e, 0x47, 0x50, 0x53, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x54, 0x69, 0x6d, 0x69, 0x6e, 0x67, 0x49, + 0x6e, 0x66, 0x6f, 0x48, 0x01, 0x52, 0x12, 0x67, 0x70, 0x73, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x54, + 0x69, 0x6d, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, + 0x74, 0x65, 0x78, 0x74, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, + 0x65, 0x78, 0x74, 0x42, 0x11, 0x0a, 0x0f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x42, 0x0d, 0x0a, 0x0b, 0x74, 0x69, 0x6d, 0x69, 0x6e, 0x67, + 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x22, 0xe2, 0x01, 0x0a, 0x0e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x69, + 0x6e, 0x6b, 0x54, 0x78, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1c, 0x0a, 0x09, 0x66, 0x72, 0x65, 0x71, + 0x75, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x66, 0x72, 0x65, + 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x6f, 0x77, 0x65, 0x72, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x70, 0x6f, 0x77, 0x65, 0x72, 0x12, 0x2e, 0x0a, 0x0a, + 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x0e, 0x2e, 0x67, 0x77, 0x2e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x0a, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, + 0x62, 0x6f, 0x61, 0x72, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x6f, 0x61, + 0x72, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x6e, 0x74, 0x65, 0x6e, 0x6e, 0x61, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x07, 0x61, 0x6e, 0x74, 0x65, 0x6e, 0x6e, 0x61, 0x12, 0x22, 0x0a, 0x06, + 0x74, 0x69, 0x6d, 0x69, 0x6e, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x67, + 0x77, 0x2e, 0x54, 0x69, 0x6d, 0x69, 0x6e, 0x67, 0x52, 0x06, 0x74, 0x69, 0x6d, 0x69, 0x6e, 0x67, + 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x22, 0xb9, 0x01, 0x0a, 0x06, 0x54, + 0x69, 0x6d, 0x69, 0x6e, 0x67, 0x12, 0x3d, 0x0a, 0x0b, 0x69, 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61, + 0x74, 0x65, 0x6c, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x77, 0x2e, + 0x49, 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x6c, 0x79, 0x54, 0x69, 0x6d, 0x69, 0x6e, + 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x48, 0x00, 0x52, 0x0b, 0x69, 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61, + 0x74, 0x65, 0x6c, 0x79, 0x12, 0x2b, 0x0a, 0x05, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x67, 0x77, 0x2e, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x54, 0x69, + 0x6d, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x48, 0x00, 0x52, 0x05, 0x64, 0x65, 0x6c, 0x61, + 0x79, 0x12, 0x35, 0x0a, 0x09, 0x67, 0x70, 0x73, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x77, 0x2e, 0x47, 0x50, 0x53, 0x45, 0x70, 0x6f, + 0x63, 0x68, 0x54, 0x69, 0x6d, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x48, 0x00, 0x52, 0x08, + 0x67, 0x70, 0x73, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x42, 0x0c, 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x61, + 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x22, 0x17, 0x0a, 0x15, 0x49, 0x6d, 0x6d, 0x65, 0x64, 0x69, + 0x61, 0x74, 0x65, 0x6c, 0x79, 0x54, 0x69, 0x6d, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x22, + 0x42, 0x0a, 0x0f, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x54, 0x69, 0x6d, 0x69, 0x6e, 0x67, 0x49, 0x6e, + 0x66, 0x6f, 0x12, 0x2f, 0x0a, 0x05, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x64, 0x65, + 0x6c, 0x61, 0x79, 0x22, 0x60, 0x0a, 0x12, 0x47, 0x50, 0x53, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x54, + 0x69, 0x6d, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x4a, 0x0a, 0x14, 0x74, 0x69, 0x6d, + 0x65, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x5f, 0x67, 0x70, 0x73, 0x5f, 0x65, 0x70, 0x6f, 0x63, + 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x11, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x47, 0x70, 0x73, + 0x45, 0x70, 0x6f, 0x63, 0x68, 0x22, 0x80, 0x02, 0x0a, 0x0b, 0x55, 0x70, 0x6c, 0x69, 0x6e, 0x6b, + 0x46, 0x72, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x68, 0x79, 0x5f, 0x70, 0x61, 0x79, + 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x70, 0x68, 0x79, 0x50, + 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x3c, 0x0a, 0x0e, 0x74, 0x78, 0x5f, 0x69, 0x6e, 0x66, + 0x6f, 0x5f, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, + 0x2e, 0x67, 0x77, 0x2e, 0x55, 0x70, 0x6c, 0x69, 0x6e, 0x6b, 0x54, 0x78, 0x49, 0x6e, 0x66, 0x6f, + 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x52, 0x0c, 0x74, 0x78, 0x49, 0x6e, 0x66, 0x6f, 0x4c, 0x65, + 0x67, 0x61, 0x63, 0x79, 0x12, 0x3c, 0x0a, 0x0e, 0x72, 0x78, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x5f, + 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, + 0x77, 0x2e, 0x55, 0x70, 0x6c, 0x69, 0x6e, 0x6b, 0x52, 0x78, 0x49, 0x6e, 0x66, 0x6f, 0x4c, 0x65, + 0x67, 0x61, 0x63, 0x79, 0x52, 0x0c, 0x72, 0x78, 0x49, 0x6e, 0x66, 0x6f, 0x4c, 0x65, 0x67, 0x61, + 0x63, 0x79, 0x12, 0x29, 0x0a, 0x07, 0x74, 0x78, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x67, 0x77, 0x2e, 0x55, 0x70, 0x6c, 0x69, 0x6e, 0x6b, 0x54, + 0x78, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x74, 0x78, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x29, 0x0a, + 0x07, 0x72, 0x78, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, + 0x2e, 0x67, 0x77, 0x2e, 0x55, 0x70, 0x6c, 0x69, 0x6e, 0x6b, 0x52, 0x78, 0x49, 0x6e, 0x66, 0x6f, + 0x52, 0x06, 0x72, 0x78, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x87, 0x01, 0x0a, 0x0e, 0x55, 0x70, 0x6c, + 0x69, 0x6e, 0x6b, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x53, 0x65, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, + 0x68, 0x79, 0x5f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, + 0x52, 0x0a, 0x70, 0x68, 0x79, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x29, 0x0a, 0x07, + 0x74, 0x78, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, + 0x67, 0x77, 0x2e, 0x55, 0x70, 0x6c, 0x69, 0x6e, 0x6b, 0x54, 0x78, 0x49, 0x6e, 0x66, 0x6f, 0x52, + 0x06, 0x74, 0x78, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x29, 0x0a, 0x07, 0x72, 0x78, 0x5f, 0x69, 0x6e, + 0x66, 0x6f, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x67, 0x77, 0x2e, 0x55, 0x70, + 0x6c, 0x69, 0x6e, 0x6b, 0x52, 0x78, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x72, 0x78, 0x49, 0x6e, + 0x66, 0x6f, 0x22, 0xd6, 0x01, 0x0a, 0x0d, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x46, + 0x72, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, + 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x64, 0x6f, 0x77, 0x6e, 0x6c, + 0x69, 0x6e, 0x6b, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x12, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, + 0x6b, 0x5f, 0x69, 0x64, 0x5f, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x10, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x49, 0x64, 0x4c, 0x65, 0x67, + 0x61, 0x63, 0x79, 0x12, 0x2b, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x67, 0x77, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, + 0x46, 0x72, 0x61, 0x6d, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, + 0x12, 0x2a, 0x0a, 0x11, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x69, 0x64, 0x5f, 0x6c, + 0x65, 0x67, 0x61, 0x63, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x49, 0x64, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x12, 0x1d, 0x0a, 0x0a, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x49, 0x64, 0x22, 0xa1, 0x01, 0x0a, 0x11, + 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x49, 0x74, 0x65, + 0x6d, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x68, 0x79, 0x5f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x70, 0x68, 0x79, 0x50, 0x61, 0x79, 0x6c, 0x6f, + 0x61, 0x64, 0x12, 0x3e, 0x0a, 0x0e, 0x74, 0x78, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x5f, 0x6c, 0x65, + 0x67, 0x61, 0x63, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x67, 0x77, 0x2e, + 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x54, 0x78, 0x49, 0x6e, 0x66, 0x6f, 0x4c, 0x65, + 0x67, 0x61, 0x63, 0x79, 0x52, 0x0c, 0x74, 0x78, 0x49, 0x6e, 0x66, 0x6f, 0x4c, 0x65, 0x67, 0x61, + 0x63, 0x79, 0x12, 0x2b, 0x0a, 0x07, 0x74, 0x78, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x77, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, + 0x6b, 0x54, 0x78, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x74, 0x78, 0x49, 0x6e, 0x66, 0x6f, 0x22, + 0xd6, 0x01, 0x0a, 0x0d, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x54, 0x78, 0x41, 0x63, + 0x6b, 0x12, 0x2a, 0x0a, 0x11, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x69, 0x64, 0x5f, + 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x49, 0x64, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x12, 0x1d, 0x0a, + 0x0a, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, + 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x0a, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x49, 0x64, 0x12, 0x2c, 0x0a, + 0x12, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x69, 0x64, 0x5f, 0x6c, 0x65, 0x67, + 0x61, 0x63, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x10, 0x64, 0x6f, 0x77, 0x6e, 0x6c, + 0x69, 0x6e, 0x6b, 0x49, 0x64, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x12, 0x2b, 0x0a, 0x05, 0x69, + 0x74, 0x65, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x67, 0x77, 0x2e, + 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x54, 0x78, 0x41, 0x63, 0x6b, 0x49, 0x74, 0x65, + 0x6d, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x3c, 0x0a, 0x11, 0x44, 0x6f, 0x77, 0x6e, + 0x6c, 0x69, 0x6e, 0x6b, 0x54, 0x78, 0x41, 0x63, 0x6b, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x27, 0x0a, + 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, + 0x67, 0x77, 0x2e, 0x54, 0x78, 0x41, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, + 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0xf3, 0x01, 0x0a, 0x14, 0x47, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x2a, 0x0a, 0x11, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x69, 0x64, 0x5f, 0x6c, 0x65, + 0x67, 0x61, 0x63, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x49, 0x64, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x09, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x34, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, + 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x67, 0x77, 0x2e, 0x43, 0x68, 0x61, 0x6e, + 0x6e, 0x65, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x08, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x12, 0x40, 0x0a, 0x0e, 0x73, 0x74, + 0x61, 0x74, 0x73, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x73, + 0x74, 0x61, 0x74, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x22, 0x15, 0x0a, 0x13, + 0x47, 0x65, 0x74, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x49, 0x64, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x22, 0x35, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x49, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x09, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x49, 0x64, 0x22, 0x14, 0x0a, 0x12, 0x47, 0x65, + 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x22, 0x7e, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x6c, 0x6f, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x39, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, + 0x5f, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x22, 0xe3, 0x02, 0x0a, 0x14, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x66, 0x72, @@ -4184,70 +5029,75 @@ var file_gw_gw_proto_rawDesc = []byte{ 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, 0x20, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x4f, 0x46, 0x46, 0x4c, 0x49, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x4f, 0x4e, 0x4c, - 0x49, 0x4e, 0x45, 0x10, 0x01, 0x22, 0xb4, 0x01, 0x0a, 0x0d, 0x4d, 0x65, 0x73, 0x68, 0x48, 0x65, - 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x5f, - 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x49, - 0x64, 0x12, 0x2e, 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, 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, 0x04, 0x74, 0x69, 0x6d, - 0x65, 0x12, 0x39, 0x0a, 0x0a, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, - 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x77, 0x2e, 0x4d, 0x65, 0x73, 0x68, 0x48, - 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x50, 0x61, 0x74, - 0x68, 0x52, 0x09, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x50, 0x61, 0x74, 0x68, 0x22, 0x59, 0x0a, 0x16, - 0x4d, 0x65, 0x73, 0x68, 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x52, 0x65, 0x6c, - 0x61, 0x79, 0x50, 0x61, 0x74, 0x68, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x49, - 0x64, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x73, 0x73, 0x69, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x04, 0x72, 0x73, 0x73, 0x69, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x6e, 0x72, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x03, 0x73, 0x6e, 0x72, 0x2a, 0xb5, 0x01, 0x0a, 0x08, 0x43, 0x6f, 0x64, 0x65, - 0x52, 0x61, 0x74, 0x65, 0x12, 0x10, 0x0a, 0x0c, 0x43, 0x52, 0x5f, 0x55, 0x4e, 0x44, 0x45, 0x46, - 0x49, 0x4e, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x52, 0x5f, 0x34, 0x5f, 0x35, - 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x52, 0x5f, 0x34, 0x5f, 0x36, 0x10, 0x02, 0x12, 0x0a, - 0x0a, 0x06, 0x43, 0x52, 0x5f, 0x34, 0x5f, 0x37, 0x10, 0x03, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x52, - 0x5f, 0x34, 0x5f, 0x38, 0x10, 0x04, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x52, 0x5f, 0x33, 0x5f, 0x38, - 0x10, 0x05, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x52, 0x5f, 0x32, 0x5f, 0x36, 0x10, 0x06, 0x12, 0x0a, - 0x0a, 0x06, 0x43, 0x52, 0x5f, 0x31, 0x5f, 0x34, 0x10, 0x07, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x52, - 0x5f, 0x31, 0x5f, 0x36, 0x10, 0x08, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x52, 0x5f, 0x35, 0x5f, 0x36, - 0x10, 0x09, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x52, 0x5f, 0x4c, 0x49, 0x5f, 0x34, 0x5f, 0x35, 0x10, - 0x0a, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x52, 0x5f, 0x4c, 0x49, 0x5f, 0x34, 0x5f, 0x36, 0x10, 0x0b, - 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x52, 0x5f, 0x4c, 0x49, 0x5f, 0x34, 0x5f, 0x38, 0x10, 0x0c, 0x2a, - 0x3b, 0x0a, 0x0e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x54, 0x69, 0x6d, 0x69, 0x6e, - 0x67, 0x12, 0x0f, 0x0a, 0x0b, 0x49, 0x4d, 0x4d, 0x45, 0x44, 0x49, 0x41, 0x54, 0x45, 0x4c, 0x59, - 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x44, 0x45, 0x4c, 0x41, 0x59, 0x10, 0x01, 0x12, 0x0d, 0x0a, - 0x09, 0x47, 0x50, 0x53, 0x5f, 0x45, 0x50, 0x4f, 0x43, 0x48, 0x10, 0x02, 0x2a, 0x37, 0x0a, 0x11, - 0x46, 0x69, 0x6e, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x54, 0x79, 0x70, - 0x65, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x45, - 0x4e, 0x43, 0x52, 0x59, 0x50, 0x54, 0x45, 0x44, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x50, 0x4c, - 0x41, 0x49, 0x4e, 0x10, 0x02, 0x2a, 0x30, 0x0a, 0x09, 0x43, 0x52, 0x43, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x12, 0x0a, 0x0a, 0x06, 0x4e, 0x4f, 0x5f, 0x43, 0x52, 0x43, 0x10, 0x00, 0x12, 0x0b, - 0x0a, 0x07, 0x42, 0x41, 0x44, 0x5f, 0x43, 0x52, 0x43, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x43, - 0x52, 0x43, 0x5f, 0x4f, 0x4b, 0x10, 0x02, 0x2a, 0xd5, 0x01, 0x0a, 0x0b, 0x54, 0x78, 0x41, 0x63, - 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x0b, 0x0a, 0x07, 0x49, 0x47, 0x4e, 0x4f, 0x52, - 0x45, 0x44, 0x10, 0x00, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, - 0x54, 0x4f, 0x4f, 0x5f, 0x4c, 0x41, 0x54, 0x45, 0x10, 0x02, 0x12, 0x0d, 0x0a, 0x09, 0x54, 0x4f, - 0x4f, 0x5f, 0x45, 0x41, 0x52, 0x4c, 0x59, 0x10, 0x03, 0x12, 0x14, 0x0a, 0x10, 0x43, 0x4f, 0x4c, - 0x4c, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x10, 0x04, 0x12, - 0x14, 0x0a, 0x10, 0x43, 0x4f, 0x4c, 0x4c, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x42, 0x45, 0x41, - 0x43, 0x4f, 0x4e, 0x10, 0x05, 0x12, 0x0b, 0x0a, 0x07, 0x54, 0x58, 0x5f, 0x46, 0x52, 0x45, 0x51, - 0x10, 0x06, 0x12, 0x0c, 0x0a, 0x08, 0x54, 0x58, 0x5f, 0x50, 0x4f, 0x57, 0x45, 0x52, 0x10, 0x07, - 0x12, 0x10, 0x0a, 0x0c, 0x47, 0x50, 0x53, 0x5f, 0x55, 0x4e, 0x4c, 0x4f, 0x43, 0x4b, 0x45, 0x44, - 0x10, 0x08, 0x12, 0x0e, 0x0a, 0x0a, 0x51, 0x55, 0x45, 0x55, 0x45, 0x5f, 0x46, 0x55, 0x4c, 0x4c, - 0x10, 0x09, 0x12, 0x12, 0x0a, 0x0e, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x5f, 0x45, - 0x52, 0x52, 0x4f, 0x52, 0x10, 0x0a, 0x12, 0x17, 0x0a, 0x13, 0x44, 0x55, 0x54, 0x59, 0x5f, 0x43, - 0x59, 0x43, 0x4c, 0x45, 0x5f, 0x4f, 0x56, 0x45, 0x52, 0x46, 0x4c, 0x4f, 0x57, 0x10, 0x0b, 0x42, - 0xa0, 0x01, 0x0a, 0x14, 0x69, 0x6f, 0x2e, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, - 0x6b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x67, 0x77, 0x42, 0x0c, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, - 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2d, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, - 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, - 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, - 0x6f, 0x2f, 0x76, 0x34, 0x2f, 0x67, 0x77, 0xaa, 0x02, 0x12, 0x43, 0x68, 0x69, 0x72, 0x70, 0x73, - 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0xca, 0x02, 0x12, 0x43, - 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x5c, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, - 0x79, 0xe2, 0x02, 0x1e, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x5c, - 0x43, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x5c, 0x47, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x49, 0x4e, 0x45, 0x10, 0x01, 0x22, 0x54, 0x0a, 0x12, 0x4d, 0x65, 0x73, 0x68, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x12, 0x3e, 0x0a, 0x0a, 0x72, + 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x1f, 0x2e, 0x67, 0x77, 0x2e, 0x4d, 0x65, 0x73, 0x68, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x65, + 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x50, 0x61, 0x74, 0x68, + 0x52, 0x09, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x50, 0x61, 0x74, 0x68, 0x22, 0x5e, 0x0a, 0x1b, 0x4d, + 0x65, 0x73, 0x68, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, + 0x74, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x50, 0x61, 0x74, 0x68, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x65, + 0x6c, 0x61, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, + 0x6c, 0x61, 0x79, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x73, 0x73, 0x69, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x04, 0x72, 0x73, 0x73, 0x69, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x6e, 0x72, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x73, 0x6e, 0x72, 0x22, 0x4f, 0x0a, 0x14, 0x4d, + 0x65, 0x73, 0x68, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x72, 0x69, 0x65, 0x74, + 0x61, 0x72, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, + 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x55, 0x0a, 0x16, + 0x4d, 0x65, 0x73, 0x68, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x50, 0x72, 0x6f, 0x70, 0x72, + 0x69, 0x65, 0x74, 0x61, 0x72, 0x79, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, + 0x64, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x63, 0x6f, + 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x79, + 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x70, 0x61, 0x79, 0x6c, + 0x6f, 0x61, 0x64, 0x2a, 0xb5, 0x01, 0x0a, 0x08, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x61, 0x74, 0x65, + 0x12, 0x10, 0x0a, 0x0c, 0x43, 0x52, 0x5f, 0x55, 0x4e, 0x44, 0x45, 0x46, 0x49, 0x4e, 0x45, 0x44, + 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x52, 0x5f, 0x34, 0x5f, 0x35, 0x10, 0x01, 0x12, 0x0a, + 0x0a, 0x06, 0x43, 0x52, 0x5f, 0x34, 0x5f, 0x36, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x52, + 0x5f, 0x34, 0x5f, 0x37, 0x10, 0x03, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x52, 0x5f, 0x34, 0x5f, 0x38, + 0x10, 0x04, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x52, 0x5f, 0x33, 0x5f, 0x38, 0x10, 0x05, 0x12, 0x0a, + 0x0a, 0x06, 0x43, 0x52, 0x5f, 0x32, 0x5f, 0x36, 0x10, 0x06, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x52, + 0x5f, 0x31, 0x5f, 0x34, 0x10, 0x07, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x52, 0x5f, 0x31, 0x5f, 0x36, + 0x10, 0x08, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x52, 0x5f, 0x35, 0x5f, 0x36, 0x10, 0x09, 0x12, 0x0d, + 0x0a, 0x09, 0x43, 0x52, 0x5f, 0x4c, 0x49, 0x5f, 0x34, 0x5f, 0x35, 0x10, 0x0a, 0x12, 0x0d, 0x0a, + 0x09, 0x43, 0x52, 0x5f, 0x4c, 0x49, 0x5f, 0x34, 0x5f, 0x36, 0x10, 0x0b, 0x12, 0x0d, 0x0a, 0x09, + 0x43, 0x52, 0x5f, 0x4c, 0x49, 0x5f, 0x34, 0x5f, 0x38, 0x10, 0x0c, 0x2a, 0x3b, 0x0a, 0x0e, 0x44, + 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x54, 0x69, 0x6d, 0x69, 0x6e, 0x67, 0x12, 0x0f, 0x0a, + 0x0b, 0x49, 0x4d, 0x4d, 0x45, 0x44, 0x49, 0x41, 0x54, 0x45, 0x4c, 0x59, 0x10, 0x00, 0x12, 0x09, + 0x0a, 0x05, 0x44, 0x45, 0x4c, 0x41, 0x59, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x47, 0x50, 0x53, + 0x5f, 0x45, 0x50, 0x4f, 0x43, 0x48, 0x10, 0x02, 0x2a, 0x37, 0x0a, 0x11, 0x46, 0x69, 0x6e, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x54, 0x79, 0x70, 0x65, 0x12, 0x08, 0x0a, + 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x45, 0x4e, 0x43, 0x52, 0x59, + 0x50, 0x54, 0x45, 0x44, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x50, 0x4c, 0x41, 0x49, 0x4e, 0x10, + 0x02, 0x2a, 0x30, 0x0a, 0x09, 0x43, 0x52, 0x43, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x0a, + 0x0a, 0x06, 0x4e, 0x4f, 0x5f, 0x43, 0x52, 0x43, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x42, 0x41, + 0x44, 0x5f, 0x43, 0x52, 0x43, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x52, 0x43, 0x5f, 0x4f, + 0x4b, 0x10, 0x02, 0x2a, 0xd5, 0x01, 0x0a, 0x0b, 0x54, 0x78, 0x41, 0x63, 0x6b, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x12, 0x0b, 0x0a, 0x07, 0x49, 0x47, 0x4e, 0x4f, 0x52, 0x45, 0x44, 0x10, 0x00, + 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x54, 0x4f, 0x4f, 0x5f, + 0x4c, 0x41, 0x54, 0x45, 0x10, 0x02, 0x12, 0x0d, 0x0a, 0x09, 0x54, 0x4f, 0x4f, 0x5f, 0x45, 0x41, + 0x52, 0x4c, 0x59, 0x10, 0x03, 0x12, 0x14, 0x0a, 0x10, 0x43, 0x4f, 0x4c, 0x4c, 0x49, 0x53, 0x49, + 0x4f, 0x4e, 0x5f, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x10, 0x04, 0x12, 0x14, 0x0a, 0x10, 0x43, + 0x4f, 0x4c, 0x4c, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x10, + 0x05, 0x12, 0x0b, 0x0a, 0x07, 0x54, 0x58, 0x5f, 0x46, 0x52, 0x45, 0x51, 0x10, 0x06, 0x12, 0x0c, + 0x0a, 0x08, 0x54, 0x58, 0x5f, 0x50, 0x4f, 0x57, 0x45, 0x52, 0x10, 0x07, 0x12, 0x10, 0x0a, 0x0c, + 0x47, 0x50, 0x53, 0x5f, 0x55, 0x4e, 0x4c, 0x4f, 0x43, 0x4b, 0x45, 0x44, 0x10, 0x08, 0x12, 0x0e, + 0x0a, 0x0a, 0x51, 0x55, 0x45, 0x55, 0x45, 0x5f, 0x46, 0x55, 0x4c, 0x4c, 0x10, 0x09, 0x12, 0x12, + 0x0a, 0x0e, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, + 0x10, 0x0a, 0x12, 0x17, 0x0a, 0x13, 0x44, 0x55, 0x54, 0x59, 0x5f, 0x43, 0x59, 0x43, 0x4c, 0x45, + 0x5f, 0x4f, 0x56, 0x45, 0x52, 0x46, 0x4c, 0x4f, 0x57, 0x10, 0x0b, 0x42, 0xa0, 0x01, 0x0a, 0x14, + 0x69, 0x6f, 0x2e, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x67, 0x77, 0x42, 0x0c, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x50, 0x72, 0x6f, + 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2d, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x63, 0x68, 0x69, 0x72, + 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x34, + 0x2f, 0x67, 0x77, 0xaa, 0x02, 0x12, 0x43, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, + 0x2e, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0xca, 0x02, 0x12, 0x43, 0x68, 0x69, 0x72, 0x70, + 0x73, 0x74, 0x61, 0x63, 0x6b, 0x5c, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0xe2, 0x02, 0x1e, + 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x5c, 0x43, 0x68, 0x69, 0x72, + 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x5c, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -4263,145 +5113,172 @@ func file_gw_gw_proto_rawDescGZIP() []byte { } var file_gw_gw_proto_enumTypes = make([]protoimpl.EnumInfo, 6) -var file_gw_gw_proto_msgTypes = make([]protoimpl.MessageInfo, 44) +var file_gw_gw_proto_msgTypes = make([]protoimpl.MessageInfo, 56) var file_gw_gw_proto_goTypes = []any{ - (CodeRate)(0), // 0: gw.CodeRate - (DownlinkTiming)(0), // 1: gw.DownlinkTiming - (FineTimestampType)(0), // 2: gw.FineTimestampType - (CRCStatus)(0), // 3: gw.CRCStatus - (TxAckStatus)(0), // 4: gw.TxAckStatus - (ConnState_State)(0), // 5: gw.ConnState.State - (*Modulation)(nil), // 6: gw.Modulation - (*UplinkTxInfoLegacy)(nil), // 7: gw.UplinkTxInfoLegacy - (*UplinkTxInfo)(nil), // 8: gw.UplinkTxInfo - (*LoraModulationInfo)(nil), // 9: gw.LoraModulationInfo - (*FskModulationInfo)(nil), // 10: gw.FskModulationInfo - (*LrFhssModulationInfo)(nil), // 11: gw.LrFhssModulationInfo - (*EncryptedFineTimestamp)(nil), // 12: gw.EncryptedFineTimestamp - (*PlainFineTimestamp)(nil), // 13: gw.PlainFineTimestamp - (*GatewayStats)(nil), // 14: gw.GatewayStats - (*PerModulationCount)(nil), // 15: gw.PerModulationCount - (*DutyCycleStats)(nil), // 16: gw.DutyCycleStats - (*DutyCycleBand)(nil), // 17: gw.DutyCycleBand - (*UplinkRxInfoLegacy)(nil), // 18: gw.UplinkRxInfoLegacy - (*UplinkRxInfo)(nil), // 19: gw.UplinkRxInfo - (*DownlinkTxInfoLegacy)(nil), // 20: gw.DownlinkTxInfoLegacy - (*DownlinkTxInfo)(nil), // 21: gw.DownlinkTxInfo - (*Timing)(nil), // 22: gw.Timing - (*ImmediatelyTimingInfo)(nil), // 23: gw.ImmediatelyTimingInfo - (*DelayTimingInfo)(nil), // 24: gw.DelayTimingInfo - (*GPSEpochTimingInfo)(nil), // 25: gw.GPSEpochTimingInfo - (*UplinkFrame)(nil), // 26: gw.UplinkFrame - (*UplinkFrameSet)(nil), // 27: gw.UplinkFrameSet - (*DownlinkFrame)(nil), // 28: gw.DownlinkFrame - (*DownlinkFrameItem)(nil), // 29: gw.DownlinkFrameItem - (*DownlinkTxAck)(nil), // 30: gw.DownlinkTxAck - (*DownlinkTxAckItem)(nil), // 31: gw.DownlinkTxAckItem - (*GatewayConfiguration)(nil), // 32: gw.GatewayConfiguration - (*ChannelConfiguration)(nil), // 33: gw.ChannelConfiguration - (*LoraModulationConfig)(nil), // 34: gw.LoraModulationConfig - (*FskModulationConfig)(nil), // 35: gw.FskModulationConfig - (*GatewayCommandExecRequest)(nil), // 36: gw.GatewayCommandExecRequest - (*GatewayCommandExecResponse)(nil), // 37: gw.GatewayCommandExecResponse - (*RawPacketForwarderEvent)(nil), // 38: gw.RawPacketForwarderEvent - (*RawPacketForwarderCommand)(nil), // 39: gw.RawPacketForwarderCommand - (*ConnState)(nil), // 40: gw.ConnState - (*MeshHeartbeat)(nil), // 41: gw.MeshHeartbeat - (*MeshHeartbeatRelayPath)(nil), // 42: gw.MeshHeartbeatRelayPath - nil, // 43: gw.GatewayStats.MetadataEntry - nil, // 44: gw.GatewayStats.TxPacketsPerFrequencyEntry - nil, // 45: gw.GatewayStats.RxPacketsPerFrequencyEntry - nil, // 46: gw.GatewayStats.TxPacketsPerStatusEntry - nil, // 47: gw.UplinkRxInfoLegacy.MetadataEntry - nil, // 48: gw.UplinkRxInfo.MetadataEntry - nil, // 49: gw.GatewayCommandExecRequest.EnvironmentEntry - (common.Modulation)(0), // 50: common.Modulation - (*timestamppb.Timestamp)(nil), // 51: google.protobuf.Timestamp - (*common.Location)(nil), // 52: common.Location - (common.Regulation)(0), // 53: common.Regulation - (*durationpb.Duration)(nil), // 54: google.protobuf.Duration + (CodeRate)(0), // 0: gw.CodeRate + (DownlinkTiming)(0), // 1: gw.DownlinkTiming + (FineTimestampType)(0), // 2: gw.FineTimestampType + (CRCStatus)(0), // 3: gw.CRCStatus + (TxAckStatus)(0), // 4: gw.TxAckStatus + (ConnState_State)(0), // 5: gw.ConnState.State + (*Event)(nil), // 6: gw.Event + (*Command)(nil), // 7: gw.Command + (*MeshEvent)(nil), // 8: gw.MeshEvent + (*MeshEventItem)(nil), // 9: gw.MeshEventItem + (*MeshCommand)(nil), // 10: gw.MeshCommand + (*MeshCommandItem)(nil), // 11: gw.MeshCommandItem + (*Modulation)(nil), // 12: gw.Modulation + (*UplinkTxInfoLegacy)(nil), // 13: gw.UplinkTxInfoLegacy + (*UplinkTxInfo)(nil), // 14: gw.UplinkTxInfo + (*LoraModulationInfo)(nil), // 15: gw.LoraModulationInfo + (*FskModulationInfo)(nil), // 16: gw.FskModulationInfo + (*LrFhssModulationInfo)(nil), // 17: gw.LrFhssModulationInfo + (*EncryptedFineTimestamp)(nil), // 18: gw.EncryptedFineTimestamp + (*PlainFineTimestamp)(nil), // 19: gw.PlainFineTimestamp + (*GatewayStats)(nil), // 20: gw.GatewayStats + (*PerModulationCount)(nil), // 21: gw.PerModulationCount + (*DutyCycleStats)(nil), // 22: gw.DutyCycleStats + (*DutyCycleBand)(nil), // 23: gw.DutyCycleBand + (*UplinkRxInfoLegacy)(nil), // 24: gw.UplinkRxInfoLegacy + (*UplinkRxInfo)(nil), // 25: gw.UplinkRxInfo + (*DownlinkTxInfoLegacy)(nil), // 26: gw.DownlinkTxInfoLegacy + (*DownlinkTxInfo)(nil), // 27: gw.DownlinkTxInfo + (*Timing)(nil), // 28: gw.Timing + (*ImmediatelyTimingInfo)(nil), // 29: gw.ImmediatelyTimingInfo + (*DelayTimingInfo)(nil), // 30: gw.DelayTimingInfo + (*GPSEpochTimingInfo)(nil), // 31: gw.GPSEpochTimingInfo + (*UplinkFrame)(nil), // 32: gw.UplinkFrame + (*UplinkFrameSet)(nil), // 33: gw.UplinkFrameSet + (*DownlinkFrame)(nil), // 34: gw.DownlinkFrame + (*DownlinkFrameItem)(nil), // 35: gw.DownlinkFrameItem + (*DownlinkTxAck)(nil), // 36: gw.DownlinkTxAck + (*DownlinkTxAckItem)(nil), // 37: gw.DownlinkTxAckItem + (*GatewayConfiguration)(nil), // 38: gw.GatewayConfiguration + (*GetGatewayIdRequest)(nil), // 39: gw.GetGatewayIdRequest + (*GetGatewayIdResponse)(nil), // 40: gw.GetGatewayIdResponse + (*GetLocationRequest)(nil), // 41: gw.GetLocationRequest + (*GetLocationResponse)(nil), // 42: gw.GetLocationResponse + (*ChannelConfiguration)(nil), // 43: gw.ChannelConfiguration + (*LoraModulationConfig)(nil), // 44: gw.LoraModulationConfig + (*FskModulationConfig)(nil), // 45: gw.FskModulationConfig + (*GatewayCommandExecRequest)(nil), // 46: gw.GatewayCommandExecRequest + (*GatewayCommandExecResponse)(nil), // 47: gw.GatewayCommandExecResponse + (*RawPacketForwarderEvent)(nil), // 48: gw.RawPacketForwarderEvent + (*RawPacketForwarderCommand)(nil), // 49: gw.RawPacketForwarderCommand + (*ConnState)(nil), // 50: gw.ConnState + (*MeshEventHeartbeat)(nil), // 51: gw.MeshEventHeartbeat + (*MeshEventHeartbeatRelayPath)(nil), // 52: gw.MeshEventHeartbeatRelayPath + (*MeshEventProprietary)(nil), // 53: gw.MeshEventProprietary + (*MeshCommandProprietary)(nil), // 54: gw.MeshCommandProprietary + nil, // 55: gw.GatewayStats.MetadataEntry + nil, // 56: gw.GatewayStats.TxPacketsPerFrequencyEntry + nil, // 57: gw.GatewayStats.RxPacketsPerFrequencyEntry + nil, // 58: gw.GatewayStats.TxPacketsPerStatusEntry + nil, // 59: gw.UplinkRxInfoLegacy.MetadataEntry + nil, // 60: gw.UplinkRxInfo.MetadataEntry + nil, // 61: gw.GatewayCommandExecRequest.EnvironmentEntry + (*timestamppb.Timestamp)(nil), // 62: google.protobuf.Timestamp + (common.Modulation)(0), // 63: common.Modulation + (*common.Location)(nil), // 64: common.Location + (common.Regulation)(0), // 65: common.Regulation + (*durationpb.Duration)(nil), // 66: google.protobuf.Duration } var file_gw_gw_proto_depIdxs = []int32{ - 9, // 0: gw.Modulation.lora:type_name -> gw.LoraModulationInfo - 10, // 1: gw.Modulation.fsk:type_name -> gw.FskModulationInfo - 11, // 2: gw.Modulation.lr_fhss:type_name -> gw.LrFhssModulationInfo - 50, // 3: gw.UplinkTxInfoLegacy.modulation:type_name -> common.Modulation - 9, // 4: gw.UplinkTxInfoLegacy.lora_modulation_info:type_name -> gw.LoraModulationInfo - 10, // 5: gw.UplinkTxInfoLegacy.fsk_modulation_info:type_name -> gw.FskModulationInfo - 11, // 6: gw.UplinkTxInfoLegacy.lr_fhss_modulation_info:type_name -> gw.LrFhssModulationInfo - 6, // 7: gw.UplinkTxInfo.modulation:type_name -> gw.Modulation - 0, // 8: gw.LoraModulationInfo.code_rate:type_name -> gw.CodeRate - 0, // 9: gw.LrFhssModulationInfo.code_rate:type_name -> gw.CodeRate - 51, // 10: gw.PlainFineTimestamp.time:type_name -> google.protobuf.Timestamp - 51, // 11: gw.GatewayStats.time:type_name -> google.protobuf.Timestamp - 52, // 12: gw.GatewayStats.location:type_name -> common.Location - 43, // 13: gw.GatewayStats.metadata:type_name -> gw.GatewayStats.MetadataEntry - 44, // 14: gw.GatewayStats.tx_packets_per_frequency:type_name -> gw.GatewayStats.TxPacketsPerFrequencyEntry - 45, // 15: gw.GatewayStats.rx_packets_per_frequency:type_name -> gw.GatewayStats.RxPacketsPerFrequencyEntry - 15, // 16: gw.GatewayStats.tx_packets_per_modulation:type_name -> gw.PerModulationCount - 15, // 17: gw.GatewayStats.rx_packets_per_modulation:type_name -> gw.PerModulationCount - 46, // 18: gw.GatewayStats.tx_packets_per_status:type_name -> gw.GatewayStats.TxPacketsPerStatusEntry - 16, // 19: gw.GatewayStats.duty_cycle_stats:type_name -> gw.DutyCycleStats - 6, // 20: gw.PerModulationCount.modulation:type_name -> gw.Modulation - 53, // 21: gw.DutyCycleStats.regulation:type_name -> common.Regulation - 54, // 22: gw.DutyCycleStats.window:type_name -> google.protobuf.Duration - 17, // 23: gw.DutyCycleStats.bands:type_name -> gw.DutyCycleBand - 54, // 24: gw.DutyCycleBand.load_max:type_name -> google.protobuf.Duration - 54, // 25: gw.DutyCycleBand.load_tracked:type_name -> google.protobuf.Duration - 51, // 26: gw.UplinkRxInfoLegacy.time:type_name -> google.protobuf.Timestamp - 54, // 27: gw.UplinkRxInfoLegacy.time_since_gps_epoch:type_name -> google.protobuf.Duration - 52, // 28: gw.UplinkRxInfoLegacy.location:type_name -> common.Location - 2, // 29: gw.UplinkRxInfoLegacy.fine_timestamp_type:type_name -> gw.FineTimestampType - 12, // 30: gw.UplinkRxInfoLegacy.encrypted_fine_timestamp:type_name -> gw.EncryptedFineTimestamp - 13, // 31: gw.UplinkRxInfoLegacy.plain_fine_timestamp:type_name -> gw.PlainFineTimestamp - 3, // 32: gw.UplinkRxInfoLegacy.crc_status:type_name -> gw.CRCStatus - 47, // 33: gw.UplinkRxInfoLegacy.metadata:type_name -> gw.UplinkRxInfoLegacy.MetadataEntry - 51, // 34: gw.UplinkRxInfo.gw_time:type_name -> google.protobuf.Timestamp - 51, // 35: gw.UplinkRxInfo.ns_time:type_name -> google.protobuf.Timestamp - 54, // 36: gw.UplinkRxInfo.time_since_gps_epoch:type_name -> google.protobuf.Duration - 54, // 37: gw.UplinkRxInfo.fine_time_since_gps_epoch:type_name -> google.protobuf.Duration - 52, // 38: gw.UplinkRxInfo.location:type_name -> common.Location - 48, // 39: gw.UplinkRxInfo.metadata:type_name -> gw.UplinkRxInfo.MetadataEntry - 3, // 40: gw.UplinkRxInfo.crc_status:type_name -> gw.CRCStatus - 50, // 41: gw.DownlinkTxInfoLegacy.modulation:type_name -> common.Modulation - 9, // 42: gw.DownlinkTxInfoLegacy.lora_modulation_info:type_name -> gw.LoraModulationInfo - 10, // 43: gw.DownlinkTxInfoLegacy.fsk_modulation_info:type_name -> gw.FskModulationInfo - 1, // 44: gw.DownlinkTxInfoLegacy.timing:type_name -> gw.DownlinkTiming - 23, // 45: gw.DownlinkTxInfoLegacy.immediately_timing_info:type_name -> gw.ImmediatelyTimingInfo - 24, // 46: gw.DownlinkTxInfoLegacy.delay_timing_info:type_name -> gw.DelayTimingInfo - 25, // 47: gw.DownlinkTxInfoLegacy.gps_epoch_timing_info:type_name -> gw.GPSEpochTimingInfo - 6, // 48: gw.DownlinkTxInfo.modulation:type_name -> gw.Modulation - 22, // 49: gw.DownlinkTxInfo.timing:type_name -> gw.Timing - 23, // 50: gw.Timing.immediately:type_name -> gw.ImmediatelyTimingInfo - 24, // 51: gw.Timing.delay:type_name -> gw.DelayTimingInfo - 25, // 52: gw.Timing.gps_epoch:type_name -> gw.GPSEpochTimingInfo - 54, // 53: gw.DelayTimingInfo.delay:type_name -> google.protobuf.Duration - 54, // 54: gw.GPSEpochTimingInfo.time_since_gps_epoch:type_name -> google.protobuf.Duration - 7, // 55: gw.UplinkFrame.tx_info_legacy:type_name -> gw.UplinkTxInfoLegacy - 18, // 56: gw.UplinkFrame.rx_info_legacy:type_name -> gw.UplinkRxInfoLegacy - 8, // 57: gw.UplinkFrame.tx_info:type_name -> gw.UplinkTxInfo - 19, // 58: gw.UplinkFrame.rx_info:type_name -> gw.UplinkRxInfo - 8, // 59: gw.UplinkFrameSet.tx_info:type_name -> gw.UplinkTxInfo - 19, // 60: gw.UplinkFrameSet.rx_info:type_name -> gw.UplinkRxInfo - 29, // 61: gw.DownlinkFrame.items:type_name -> gw.DownlinkFrameItem - 20, // 62: gw.DownlinkFrameItem.tx_info_legacy:type_name -> gw.DownlinkTxInfoLegacy - 21, // 63: gw.DownlinkFrameItem.tx_info:type_name -> gw.DownlinkTxInfo - 31, // 64: gw.DownlinkTxAck.items:type_name -> gw.DownlinkTxAckItem - 4, // 65: gw.DownlinkTxAckItem.status:type_name -> gw.TxAckStatus - 33, // 66: gw.GatewayConfiguration.channels:type_name -> gw.ChannelConfiguration - 54, // 67: gw.GatewayConfiguration.stats_interval:type_name -> google.protobuf.Duration - 50, // 68: gw.ChannelConfiguration.modulation_legacy:type_name -> common.Modulation - 34, // 69: gw.ChannelConfiguration.lora_modulation_config:type_name -> gw.LoraModulationConfig - 35, // 70: gw.ChannelConfiguration.fsk_modulation_config:type_name -> gw.FskModulationConfig - 49, // 71: gw.GatewayCommandExecRequest.environment:type_name -> gw.GatewayCommandExecRequest.EnvironmentEntry - 5, // 72: gw.ConnState.state:type_name -> gw.ConnState.State - 51, // 73: gw.MeshHeartbeat.time:type_name -> google.protobuf.Timestamp - 42, // 74: gw.MeshHeartbeat.relay_path:type_name -> gw.MeshHeartbeatRelayPath - 75, // [75:75] is the sub-list for method output_type - 75, // [75:75] is the sub-list for method input_type - 75, // [75:75] is the sub-list for extension type_name - 75, // [75:75] is the sub-list for extension extendee - 0, // [0:75] is the sub-list for field type_name + 32, // 0: gw.Event.uplink_frame:type_name -> gw.UplinkFrame + 20, // 1: gw.Event.gateway_stats:type_name -> gw.GatewayStats + 8, // 2: gw.Event.mesh:type_name -> gw.MeshEvent + 34, // 3: gw.Command.send_downlink_frame:type_name -> gw.DownlinkFrame + 38, // 4: gw.Command.set_gateway_configuration:type_name -> gw.GatewayConfiguration + 39, // 5: gw.Command.get_gateway_id:type_name -> gw.GetGatewayIdRequest + 41, // 6: gw.Command.get_location:type_name -> gw.GetLocationRequest + 10, // 7: gw.Command.mesh:type_name -> gw.MeshCommand + 62, // 8: gw.MeshEvent.time:type_name -> google.protobuf.Timestamp + 9, // 9: gw.MeshEvent.events:type_name -> gw.MeshEventItem + 53, // 10: gw.MeshEventItem.proprietary:type_name -> gw.MeshEventProprietary + 51, // 11: gw.MeshEventItem.heartbeat:type_name -> gw.MeshEventHeartbeat + 11, // 12: gw.MeshCommand.commands:type_name -> gw.MeshCommandItem + 54, // 13: gw.MeshCommandItem.proprietary:type_name -> gw.MeshCommandProprietary + 15, // 14: gw.Modulation.lora:type_name -> gw.LoraModulationInfo + 16, // 15: gw.Modulation.fsk:type_name -> gw.FskModulationInfo + 17, // 16: gw.Modulation.lr_fhss:type_name -> gw.LrFhssModulationInfo + 63, // 17: gw.UplinkTxInfoLegacy.modulation:type_name -> common.Modulation + 15, // 18: gw.UplinkTxInfoLegacy.lora_modulation_info:type_name -> gw.LoraModulationInfo + 16, // 19: gw.UplinkTxInfoLegacy.fsk_modulation_info:type_name -> gw.FskModulationInfo + 17, // 20: gw.UplinkTxInfoLegacy.lr_fhss_modulation_info:type_name -> gw.LrFhssModulationInfo + 12, // 21: gw.UplinkTxInfo.modulation:type_name -> gw.Modulation + 0, // 22: gw.LoraModulationInfo.code_rate:type_name -> gw.CodeRate + 0, // 23: gw.LrFhssModulationInfo.code_rate:type_name -> gw.CodeRate + 62, // 24: gw.PlainFineTimestamp.time:type_name -> google.protobuf.Timestamp + 62, // 25: gw.GatewayStats.time:type_name -> google.protobuf.Timestamp + 64, // 26: gw.GatewayStats.location:type_name -> common.Location + 55, // 27: gw.GatewayStats.metadata:type_name -> gw.GatewayStats.MetadataEntry + 56, // 28: gw.GatewayStats.tx_packets_per_frequency:type_name -> gw.GatewayStats.TxPacketsPerFrequencyEntry + 57, // 29: gw.GatewayStats.rx_packets_per_frequency:type_name -> gw.GatewayStats.RxPacketsPerFrequencyEntry + 21, // 30: gw.GatewayStats.tx_packets_per_modulation:type_name -> gw.PerModulationCount + 21, // 31: gw.GatewayStats.rx_packets_per_modulation:type_name -> gw.PerModulationCount + 58, // 32: gw.GatewayStats.tx_packets_per_status:type_name -> gw.GatewayStats.TxPacketsPerStatusEntry + 22, // 33: gw.GatewayStats.duty_cycle_stats:type_name -> gw.DutyCycleStats + 12, // 34: gw.PerModulationCount.modulation:type_name -> gw.Modulation + 65, // 35: gw.DutyCycleStats.regulation:type_name -> common.Regulation + 66, // 36: gw.DutyCycleStats.window:type_name -> google.protobuf.Duration + 23, // 37: gw.DutyCycleStats.bands:type_name -> gw.DutyCycleBand + 66, // 38: gw.DutyCycleBand.load_max:type_name -> google.protobuf.Duration + 66, // 39: gw.DutyCycleBand.load_tracked:type_name -> google.protobuf.Duration + 62, // 40: gw.UplinkRxInfoLegacy.time:type_name -> google.protobuf.Timestamp + 66, // 41: gw.UplinkRxInfoLegacy.time_since_gps_epoch:type_name -> google.protobuf.Duration + 64, // 42: gw.UplinkRxInfoLegacy.location:type_name -> common.Location + 2, // 43: gw.UplinkRxInfoLegacy.fine_timestamp_type:type_name -> gw.FineTimestampType + 18, // 44: gw.UplinkRxInfoLegacy.encrypted_fine_timestamp:type_name -> gw.EncryptedFineTimestamp + 19, // 45: gw.UplinkRxInfoLegacy.plain_fine_timestamp:type_name -> gw.PlainFineTimestamp + 3, // 46: gw.UplinkRxInfoLegacy.crc_status:type_name -> gw.CRCStatus + 59, // 47: gw.UplinkRxInfoLegacy.metadata:type_name -> gw.UplinkRxInfoLegacy.MetadataEntry + 62, // 48: gw.UplinkRxInfo.gw_time:type_name -> google.protobuf.Timestamp + 62, // 49: gw.UplinkRxInfo.ns_time:type_name -> google.protobuf.Timestamp + 66, // 50: gw.UplinkRxInfo.time_since_gps_epoch:type_name -> google.protobuf.Duration + 66, // 51: gw.UplinkRxInfo.fine_time_since_gps_epoch:type_name -> google.protobuf.Duration + 64, // 52: gw.UplinkRxInfo.location:type_name -> common.Location + 60, // 53: gw.UplinkRxInfo.metadata:type_name -> gw.UplinkRxInfo.MetadataEntry + 3, // 54: gw.UplinkRxInfo.crc_status:type_name -> gw.CRCStatus + 63, // 55: gw.DownlinkTxInfoLegacy.modulation:type_name -> common.Modulation + 15, // 56: gw.DownlinkTxInfoLegacy.lora_modulation_info:type_name -> gw.LoraModulationInfo + 16, // 57: gw.DownlinkTxInfoLegacy.fsk_modulation_info:type_name -> gw.FskModulationInfo + 1, // 58: gw.DownlinkTxInfoLegacy.timing:type_name -> gw.DownlinkTiming + 29, // 59: gw.DownlinkTxInfoLegacy.immediately_timing_info:type_name -> gw.ImmediatelyTimingInfo + 30, // 60: gw.DownlinkTxInfoLegacy.delay_timing_info:type_name -> gw.DelayTimingInfo + 31, // 61: gw.DownlinkTxInfoLegacy.gps_epoch_timing_info:type_name -> gw.GPSEpochTimingInfo + 12, // 62: gw.DownlinkTxInfo.modulation:type_name -> gw.Modulation + 28, // 63: gw.DownlinkTxInfo.timing:type_name -> gw.Timing + 29, // 64: gw.Timing.immediately:type_name -> gw.ImmediatelyTimingInfo + 30, // 65: gw.Timing.delay:type_name -> gw.DelayTimingInfo + 31, // 66: gw.Timing.gps_epoch:type_name -> gw.GPSEpochTimingInfo + 66, // 67: gw.DelayTimingInfo.delay:type_name -> google.protobuf.Duration + 66, // 68: gw.GPSEpochTimingInfo.time_since_gps_epoch:type_name -> google.protobuf.Duration + 13, // 69: gw.UplinkFrame.tx_info_legacy:type_name -> gw.UplinkTxInfoLegacy + 24, // 70: gw.UplinkFrame.rx_info_legacy:type_name -> gw.UplinkRxInfoLegacy + 14, // 71: gw.UplinkFrame.tx_info:type_name -> gw.UplinkTxInfo + 25, // 72: gw.UplinkFrame.rx_info:type_name -> gw.UplinkRxInfo + 14, // 73: gw.UplinkFrameSet.tx_info:type_name -> gw.UplinkTxInfo + 25, // 74: gw.UplinkFrameSet.rx_info:type_name -> gw.UplinkRxInfo + 35, // 75: gw.DownlinkFrame.items:type_name -> gw.DownlinkFrameItem + 26, // 76: gw.DownlinkFrameItem.tx_info_legacy:type_name -> gw.DownlinkTxInfoLegacy + 27, // 77: gw.DownlinkFrameItem.tx_info:type_name -> gw.DownlinkTxInfo + 37, // 78: gw.DownlinkTxAck.items:type_name -> gw.DownlinkTxAckItem + 4, // 79: gw.DownlinkTxAckItem.status:type_name -> gw.TxAckStatus + 43, // 80: gw.GatewayConfiguration.channels:type_name -> gw.ChannelConfiguration + 66, // 81: gw.GatewayConfiguration.stats_interval:type_name -> google.protobuf.Duration + 64, // 82: gw.GetLocationResponse.location:type_name -> common.Location + 62, // 83: gw.GetLocationResponse.updated_at:type_name -> google.protobuf.Timestamp + 63, // 84: gw.ChannelConfiguration.modulation_legacy:type_name -> common.Modulation + 44, // 85: gw.ChannelConfiguration.lora_modulation_config:type_name -> gw.LoraModulationConfig + 45, // 86: gw.ChannelConfiguration.fsk_modulation_config:type_name -> gw.FskModulationConfig + 61, // 87: gw.GatewayCommandExecRequest.environment:type_name -> gw.GatewayCommandExecRequest.EnvironmentEntry + 5, // 88: gw.ConnState.state:type_name -> gw.ConnState.State + 52, // 89: gw.MeshEventHeartbeat.relay_path:type_name -> gw.MeshEventHeartbeatRelayPath + 90, // [90:90] is the sub-list for method output_type + 90, // [90:90] is the sub-list for method input_type + 90, // [90:90] is the sub-list for extension type_name + 90, // [90:90] is the sub-list for extension extendee + 0, // [0:90] is the sub-list for field type_name } func init() { file_gw_gw_proto_init() } @@ -4410,32 +5287,51 @@ func file_gw_gw_proto_init() { return } file_gw_gw_proto_msgTypes[0].OneofWrappers = []any{ + (*Event_UplinkFrame)(nil), + (*Event_GatewayStats)(nil), + (*Event_Mesh)(nil), + } + file_gw_gw_proto_msgTypes[1].OneofWrappers = []any{ + (*Command_SendDownlinkFrame)(nil), + (*Command_SetGatewayConfiguration)(nil), + (*Command_GetGatewayId)(nil), + (*Command_GetLocation)(nil), + (*Command_Mesh)(nil), + } + file_gw_gw_proto_msgTypes[3].OneofWrappers = []any{ + (*MeshEventItem_Proprietary)(nil), + (*MeshEventItem_Heartbeat)(nil), + } + file_gw_gw_proto_msgTypes[5].OneofWrappers = []any{ + (*MeshCommandItem_Proprietary)(nil), + } + file_gw_gw_proto_msgTypes[6].OneofWrappers = []any{ (*Modulation_Lora)(nil), (*Modulation_Fsk)(nil), (*Modulation_LrFhss)(nil), } - file_gw_gw_proto_msgTypes[1].OneofWrappers = []any{ + file_gw_gw_proto_msgTypes[7].OneofWrappers = []any{ (*UplinkTxInfoLegacy_LoraModulationInfo)(nil), (*UplinkTxInfoLegacy_FskModulationInfo)(nil), (*UplinkTxInfoLegacy_LrFhssModulationInfo)(nil), } - file_gw_gw_proto_msgTypes[12].OneofWrappers = []any{ + file_gw_gw_proto_msgTypes[18].OneofWrappers = []any{ (*UplinkRxInfoLegacy_EncryptedFineTimestamp)(nil), (*UplinkRxInfoLegacy_PlainFineTimestamp)(nil), } - file_gw_gw_proto_msgTypes[14].OneofWrappers = []any{ + file_gw_gw_proto_msgTypes[20].OneofWrappers = []any{ (*DownlinkTxInfoLegacy_LoraModulationInfo)(nil), (*DownlinkTxInfoLegacy_FskModulationInfo)(nil), (*DownlinkTxInfoLegacy_ImmediatelyTimingInfo)(nil), (*DownlinkTxInfoLegacy_DelayTimingInfo)(nil), (*DownlinkTxInfoLegacy_GpsEpochTimingInfo)(nil), } - file_gw_gw_proto_msgTypes[16].OneofWrappers = []any{ + file_gw_gw_proto_msgTypes[22].OneofWrappers = []any{ (*Timing_Immediately)(nil), (*Timing_Delay)(nil), (*Timing_GpsEpoch)(nil), } - file_gw_gw_proto_msgTypes[27].OneofWrappers = []any{ + file_gw_gw_proto_msgTypes[37].OneofWrappers = []any{ (*ChannelConfiguration_LoraModulationConfig)(nil), (*ChannelConfiguration_FskModulationConfig)(nil), } @@ -4445,7 +5341,7 @@ func file_gw_gw_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_gw_gw_proto_rawDesc, NumEnums: 6, - NumMessages: 44, + NumMessages: 56, NumExtensions: 0, NumServices: 0, },