From 69e3b672ac1e5a50206c088ccdeb5af3d0d11cd2 Mon Sep 17 00:00:00 2001 From: Orne Brocaar Date: Thu, 21 Jul 2022 15:28:09 +0100 Subject: [PATCH] Fix field types for GatewayStats and GatewayConfiguration. The gateway_id field now has type string and bandwidth is in Hz, which is consistent with the other messages. --- api/go/gw/gw.pb.go | 1042 ++++++++++--------- api/js/gw/gw_pb.d.ts | 160 +-- api/js/gw/gw_pb.js | 637 +++++++----- api/proto/gw/gw.proto | 77 +- api/python/proto/chirpstack-api/gw/gw.proto | 77 +- api/python/src/chirpstack_api/gw/gw_pb2.py | 164 +-- api/rust/Cargo.lock | 2 +- api/rust/proto/chirpstack/gw/gw.proto | 77 +- chirpstack/src/gateway/backend/mqtt.rs | 9 +- chirpstack/src/uplink/stats.rs | 34 +- 10 files changed, 1328 insertions(+), 951 deletions(-) diff --git a/api/go/gw/gw.pb.go b/api/go/gw/gw.pb.go index 66775904..0037db57 100644 --- a/api/go/gw/gw.pb.go +++ b/api/go/gw/gw.pb.go @@ -961,15 +961,16 @@ type GatewayStats struct { unknownFields protoimpl.UnknownFields // Gateway ID. - GatewayId []byte `protobuf:"bytes,1,opt,name=gateway_id,json=gatewayId,proto3" json:"gateway_id,omitempty"` - // Gateway IP. - Ip string `protobuf:"bytes,9,opt,name=ip,proto3" json:"ip,omitempty"` + // Deprecated: use gateway_id. + GatewayIdLegacy []byte `protobuf:"bytes,1,opt,name=gateway_id_legacy,json=gatewayIdLegacy,proto3" json:"gateway_id_legacy,omitempty"` + // Gateway ID. + GatewayId string `protobuf:"bytes,17,opt,name=gateway_id,json=gatewayId,proto3" json:"gateway_id,omitempty"` // Gateway time. Time *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=time,proto3" json:"time,omitempty"` // Gateway location. Location *common.Location `protobuf:"bytes,3,opt,name=location,proto3" json:"location,omitempty"` // Gateway configuration version (this maps to the config_version sent - // by LoRa Server to the gateway). + // by ChirpStack to the gateway). ConfigVersion string `protobuf:"bytes,4,opt,name=config_version,json=configVersion,proto3" json:"config_version,omitempty"` // Number of radio packets received. RxPacketsReceived uint32 `protobuf:"varint,5,opt,name=rx_packets_received,json=rxPacketsReceived,proto3" json:"rx_packets_received,omitempty"` @@ -981,9 +982,6 @@ type GatewayStats struct { TxPacketsEmitted uint32 `protobuf:"varint,8,opt,name=tx_packets_emitted,json=txPacketsEmitted,proto3" json:"tx_packets_emitted,omitempty"` // Additional gateway meta-data. MetaData map[string]string `protobuf:"bytes,10,rep,name=meta_data,json=metaData,proto3" json:"meta_data,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - // Stats ID (UUID). - // Unique identifier for the gateway stats. - StatsId []byte `protobuf:"bytes,11,opt,name=stats_id,json=statsId,proto3" json:"stats_id,omitempty"` // Tx packets per frequency. TxPacketsPerFrequency map[uint32]uint32 `protobuf:"bytes,12,rep,name=tx_packets_per_frequency,json=txPacketsPerFrequency,proto3" json:"tx_packets_per_frequency,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` // Rx packets per frequency. @@ -1028,16 +1026,16 @@ func (*GatewayStats) Descriptor() ([]byte, []int) { return file_gw_gw_proto_rawDescGZIP(), []int{8} } -func (x *GatewayStats) GetGatewayId() []byte { +func (x *GatewayStats) GetGatewayIdLegacy() []byte { if x != nil { - return x.GatewayId + return x.GatewayIdLegacy } return nil } -func (x *GatewayStats) GetIp() string { +func (x *GatewayStats) GetGatewayId() string { if x != nil { - return x.Ip + return x.GatewayId } return "" } @@ -1098,13 +1096,6 @@ func (x *GatewayStats) GetMetaData() map[string]string { return nil } -func (x *GatewayStats) GetStatsId() []byte { - if x != nil { - return x.StatsId - } - return nil -} - func (x *GatewayStats) GetTxPacketsPerFrequency() map[uint32]uint32 { if x != nil { return x.TxPacketsPerFrequency @@ -2563,7 +2554,10 @@ type GatewayConfiguration struct { unknownFields protoimpl.UnknownFields // Gateway ID. - GatewayId []byte `protobuf:"bytes,1,opt,name=gateway_id,json=gatewayId,proto3" json:"gateway_id,omitempty"` + // Deprecated: use gateway_id. + GatewayIdLegacy []byte `protobuf:"bytes,1,opt,name=gateway_id_legacy,json=gatewayIdLegacy,proto3" json:"gateway_id_legacy,omitempty"` + // Gateway ID. + GatewayId string `protobuf:"bytes,5,opt,name=gateway_id,json=gatewayId,proto3" json:"gateway_id,omitempty"` // Configuration version. Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"` // Channels. @@ -2604,11 +2598,18 @@ func (*GatewayConfiguration) Descriptor() ([]byte, []int) { return file_gw_gw_proto_rawDescGZIP(), []int{24} } -func (x *GatewayConfiguration) GetGatewayId() []byte { +func (x *GatewayConfiguration) GetGatewayIdLegacy() []byte { + if x != nil { + return x.GatewayIdLegacy + } + return nil +} + +func (x *GatewayConfiguration) GetGatewayId() string { if x != nil { return x.GatewayId } - return nil + return "" } func (x *GatewayConfiguration) GetVersion() string { @@ -2639,8 +2640,8 @@ type ChannelConfiguration struct { // Frequency (Hz). Frequency uint32 `protobuf:"varint,1,opt,name=frequency,proto3" json:"frequency,omitempty"` - // Channel modulation. - Modulation common.Modulation `protobuf:"varint,2,opt,name=modulation,proto3,enum=common.Modulation" json:"modulation,omitempty"` + // Modulation (deprecated). + ModulationLegacy common.Modulation `protobuf:"varint,2,opt,name=modulation_legacy,json=modulationLegacy,proto3,enum=common.Modulation" json:"modulation_legacy,omitempty"` // Types that are assignable to ModulationConfig: // *ChannelConfiguration_LoraModulationConfig // *ChannelConfiguration_FskModulationConfig @@ -2690,9 +2691,9 @@ func (x *ChannelConfiguration) GetFrequency() uint32 { return 0 } -func (x *ChannelConfiguration) GetModulation() common.Modulation { +func (x *ChannelConfiguration) GetModulationLegacy() common.Modulation { if x != nil { - return x.Modulation + return x.ModulationLegacy } return common.Modulation(0) } @@ -2704,14 +2705,14 @@ func (m *ChannelConfiguration) GetModulationConfig() isChannelConfiguration_Modu return nil } -func (x *ChannelConfiguration) GetLoraModulationConfig() *LoRaModulationConfig { +func (x *ChannelConfiguration) GetLoraModulationConfig() *LoraModulationConfig { if x, ok := x.GetModulationConfig().(*ChannelConfiguration_LoraModulationConfig); ok { return x.LoraModulationConfig } return nil } -func (x *ChannelConfiguration) GetFskModulationConfig() *FSKModulationConfig { +func (x *ChannelConfiguration) GetFskModulationConfig() *FskModulationConfig { if x, ok := x.GetModulationConfig().(*ChannelConfiguration_FskModulationConfig); ok { return x.FskModulationConfig } @@ -2738,31 +2739,34 @@ type isChannelConfiguration_ModulationConfig interface { type ChannelConfiguration_LoraModulationConfig struct { // LoRa modulation config. - LoraModulationConfig *LoRaModulationConfig `protobuf:"bytes,3,opt,name=lora_modulation_config,json=loraModulationConfig,proto3,oneof"` + LoraModulationConfig *LoraModulationConfig `protobuf:"bytes,3,opt,name=lora_modulation_config,json=loraModulationConfig,proto3,oneof"` } type ChannelConfiguration_FskModulationConfig struct { // FSK modulation config. - FskModulationConfig *FSKModulationConfig `protobuf:"bytes,4,opt,name=fsk_modulation_config,json=fskModulationConfig,proto3,oneof"` + FskModulationConfig *FskModulationConfig `protobuf:"bytes,4,opt,name=fsk_modulation_config,json=fskModulationConfig,proto3,oneof"` } func (*ChannelConfiguration_LoraModulationConfig) isChannelConfiguration_ModulationConfig() {} func (*ChannelConfiguration_FskModulationConfig) isChannelConfiguration_ModulationConfig() {} -type LoRaModulationConfig struct { +type LoraModulationConfig struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Bandwidth. - Bandwidth uint32 `protobuf:"varint,1,opt,name=bandwidth,proto3" json:"bandwidth,omitempty"` + // Bandwidth (kHz). + // Deprecated: use bandwidth. + BandwidthLegacy uint32 `protobuf:"varint,1,opt,name=bandwidth_legacy,json=bandwidthLegacy,proto3" json:"bandwidth_legacy,omitempty"` + // Bandwidth (Hz). + Bandwidth uint32 `protobuf:"varint,3,opt,name=bandwidth,proto3" json:"bandwidth,omitempty"` // Spreading-factors. SpreadingFactors []uint32 `protobuf:"varint,2,rep,packed,name=spreading_factors,json=spreadingFactors,proto3" json:"spreading_factors,omitempty"` } -func (x *LoRaModulationConfig) Reset() { - *x = LoRaModulationConfig{} +func (x *LoraModulationConfig) Reset() { + *x = LoraModulationConfig{} if protoimpl.UnsafeEnabled { mi := &file_gw_gw_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -2770,13 +2774,13 @@ func (x *LoRaModulationConfig) Reset() { } } -func (x *LoRaModulationConfig) String() string { +func (x *LoraModulationConfig) String() string { return protoimpl.X.MessageStringOf(x) } -func (*LoRaModulationConfig) ProtoMessage() {} +func (*LoraModulationConfig) ProtoMessage() {} -func (x *LoRaModulationConfig) ProtoReflect() protoreflect.Message { +func (x *LoraModulationConfig) ProtoReflect() protoreflect.Message { mi := &file_gw_gw_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -2788,38 +2792,48 @@ func (x *LoRaModulationConfig) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use LoRaModulationConfig.ProtoReflect.Descriptor instead. -func (*LoRaModulationConfig) Descriptor() ([]byte, []int) { +// Deprecated: Use LoraModulationConfig.ProtoReflect.Descriptor instead. +func (*LoraModulationConfig) Descriptor() ([]byte, []int) { return file_gw_gw_proto_rawDescGZIP(), []int{26} } -func (x *LoRaModulationConfig) GetBandwidth() uint32 { +func (x *LoraModulationConfig) GetBandwidthLegacy() uint32 { + if x != nil { + return x.BandwidthLegacy + } + return 0 +} + +func (x *LoraModulationConfig) GetBandwidth() uint32 { if x != nil { return x.Bandwidth } return 0 } -func (x *LoRaModulationConfig) GetSpreadingFactors() []uint32 { +func (x *LoraModulationConfig) GetSpreadingFactors() []uint32 { if x != nil { return x.SpreadingFactors } return nil } -type FSKModulationConfig struct { +type FskModulationConfig struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Bandwidth. - Bandwidth uint32 `protobuf:"varint,1,opt,name=bandwidth,proto3" json:"bandwidth,omitempty"` + // Bandwidth (kHz). + // Deprecated: use bandwidth. + BandwidthLegacy uint32 `protobuf:"varint,1,opt,name=bandwidth_legacy,json=bandwidthLegacy,proto3" json:"bandwidth_legacy,omitempty"` + // Bandwidth (Hz). + Bandwidth uint32 `protobuf:"varint,3,opt,name=bandwidth,proto3" json:"bandwidth,omitempty"` // Bitrate. Bitrate uint32 `protobuf:"varint,2,opt,name=bitrate,proto3" json:"bitrate,omitempty"` } -func (x *FSKModulationConfig) Reset() { - *x = FSKModulationConfig{} +func (x *FskModulationConfig) Reset() { + *x = FskModulationConfig{} if protoimpl.UnsafeEnabled { mi := &file_gw_gw_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -2827,13 +2841,13 @@ func (x *FSKModulationConfig) Reset() { } } -func (x *FSKModulationConfig) String() string { +func (x *FskModulationConfig) String() string { return protoimpl.X.MessageStringOf(x) } -func (*FSKModulationConfig) ProtoMessage() {} +func (*FskModulationConfig) ProtoMessage() {} -func (x *FSKModulationConfig) ProtoReflect() protoreflect.Message { +func (x *FskModulationConfig) ProtoReflect() protoreflect.Message { mi := &file_gw_gw_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -2845,19 +2859,26 @@ func (x *FSKModulationConfig) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use FSKModulationConfig.ProtoReflect.Descriptor instead. -func (*FSKModulationConfig) Descriptor() ([]byte, []int) { +// Deprecated: Use FskModulationConfig.ProtoReflect.Descriptor instead. +func (*FskModulationConfig) Descriptor() ([]byte, []int) { return file_gw_gw_proto_rawDescGZIP(), []int{27} } -func (x *FSKModulationConfig) GetBandwidth() uint32 { +func (x *FskModulationConfig) GetBandwidthLegacy() uint32 { + if x != nil { + return x.BandwidthLegacy + } + return 0 +} + +func (x *FskModulationConfig) GetBandwidth() uint32 { if x != nil { return x.Bandwidth } return 0 } -func (x *FSKModulationConfig) GetBitrate() uint32 { +func (x *FskModulationConfig) GetBitrate() uint32 { if x != nil { return x.Bitrate } @@ -2870,7 +2891,10 @@ type GatewayCommandExecRequest struct { unknownFields protoimpl.UnknownFields // Gateway ID. - GatewayId []byte `protobuf:"bytes,1,opt,name=gateway_id,json=gatewayId,proto3" json:"gateway_id,omitempty"` + // Deprecated: use gateway_id. + GatewayIdLegacy []byte `protobuf:"bytes,1,opt,name=gateway_id_legacy,json=gatewayIdLegacy,proto3" json:"gateway_id_legacy,omitempty"` + // Gateway ID. + GatewayId string `protobuf:"bytes,6,opt,name=gateway_id,json=gatewayId,proto3" json:"gateway_id,omitempty"` // Command to execute. // This command must be pre-configured in the LoRa Gateway Bridge configuration. Command string `protobuf:"bytes,2,opt,name=command,proto3" json:"command,omitempty"` @@ -2916,11 +2940,18 @@ func (*GatewayCommandExecRequest) Descriptor() ([]byte, []int) { return file_gw_gw_proto_rawDescGZIP(), []int{28} } -func (x *GatewayCommandExecRequest) GetGatewayId() []byte { +func (x *GatewayCommandExecRequest) GetGatewayIdLegacy() []byte { + if x != nil { + return x.GatewayIdLegacy + } + return nil +} + +func (x *GatewayCommandExecRequest) GetGatewayId() string { if x != nil { return x.GatewayId } - return nil + return "" } func (x *GatewayCommandExecRequest) GetCommand() string { @@ -2957,7 +2988,10 @@ type GatewayCommandExecResponse struct { unknownFields protoimpl.UnknownFields // Gateway ID. - GatewayId []byte `protobuf:"bytes,1,opt,name=gateway_id,json=gatewayId,proto3" json:"gateway_id,omitempty"` + // Deprecated: use gateway_id. + GatewayIdLegacy []byte `protobuf:"bytes,1,opt,name=gateway_id_legacy,json=gatewayIdLegacy,proto3" json:"gateway_id_legacy,omitempty"` + // Gateway ID. + GatewayId string `protobuf:"bytes,6,opt,name=gateway_id,json=gatewayId,proto3" json:"gateway_id,omitempty"` // Execution request ID (UUID). ExecId []byte `protobuf:"bytes,2,opt,name=exec_id,json=execId,proto3" json:"exec_id,omitempty"` // Standard output. @@ -3000,11 +3034,18 @@ func (*GatewayCommandExecResponse) Descriptor() ([]byte, []int) { return file_gw_gw_proto_rawDescGZIP(), []int{29} } -func (x *GatewayCommandExecResponse) GetGatewayId() []byte { +func (x *GatewayCommandExecResponse) GetGatewayIdLegacy() []byte { + if x != nil { + return x.GatewayIdLegacy + } + return nil +} + +func (x *GatewayCommandExecResponse) GetGatewayId() string { if x != nil { return x.GatewayId } - return nil + return "" } func (x *GatewayCommandExecResponse) GetExecId() []byte { @@ -3044,7 +3085,10 @@ type RawPacketForwarderEvent struct { unknownFields protoimpl.UnknownFields // Gateway ID. - GatewayId []byte `protobuf:"bytes,1,opt,name=gateway_id,json=gatewayId,proto3" json:"gateway_id,omitempty"` + // Deprecated: use gateway_id. + GatewayIdLegacy []byte `protobuf:"bytes,1,opt,name=gateway_id_legacy,json=gatewayIdLegacy,proto3" json:"gateway_id_legacy,omitempty"` + // Gateway ID. + GatewayId string `protobuf:"bytes,4,opt,name=gateway_id,json=gatewayId,proto3" json:"gateway_id,omitempty"` // Raw ID (UUID). RawId []byte `protobuf:"bytes,2,opt,name=raw_id,json=rawId,proto3" json:"raw_id,omitempty"` // Payload contains the raw payload. @@ -3083,11 +3127,18 @@ func (*RawPacketForwarderEvent) Descriptor() ([]byte, []int) { return file_gw_gw_proto_rawDescGZIP(), []int{30} } -func (x *RawPacketForwarderEvent) GetGatewayId() []byte { +func (x *RawPacketForwarderEvent) GetGatewayIdLegacy() []byte { + if x != nil { + return x.GatewayIdLegacy + } + return nil +} + +func (x *RawPacketForwarderEvent) GetGatewayId() string { if x != nil { return x.GatewayId } - return nil + return "" } func (x *RawPacketForwarderEvent) GetRawId() []byte { @@ -3113,7 +3164,10 @@ type RawPacketForwarderCommand struct { unknownFields protoimpl.UnknownFields // Gateway ID. - GatewayId []byte `protobuf:"bytes,1,opt,name=gateway_id,json=gatewayId,proto3" json:"gateway_id,omitempty"` + // Deprecated: use gateway_id. + GatewayIdLegacy []byte `protobuf:"bytes,1,opt,name=gateway_id_legacy,json=gatewayIdLegacy,proto3" json:"gateway_id_legacy,omitempty"` + // Gateway ID. + GatewayId string `protobuf:"bytes,4,opt,name=gateway_id,json=gatewayId,proto3" json:"gateway_id,omitempty"` // Raw ID (UUID). RawId []byte `protobuf:"bytes,2,opt,name=raw_id,json=rawId,proto3" json:"raw_id,omitempty"` // Payload contains the raw payload. @@ -3152,11 +3206,18 @@ func (*RawPacketForwarderCommand) Descriptor() ([]byte, []int) { return file_gw_gw_proto_rawDescGZIP(), []int{31} } -func (x *RawPacketForwarderCommand) GetGatewayId() []byte { +func (x *RawPacketForwarderCommand) GetGatewayIdLegacy() []byte { + if x != nil { + return x.GatewayIdLegacy + } + return nil +} + +func (x *RawPacketForwarderCommand) GetGatewayId() string { if x != nil { return x.GatewayId } - return nil + return "" } func (x *RawPacketForwarderCommand) GetRawId() []byte { @@ -3180,7 +3241,10 @@ type ConnState struct { unknownFields protoimpl.UnknownFields // Gateway ID. - GatewayId []byte `protobuf:"bytes,1,opt,name=gateway_id,json=gatewayId,proto3" json:"gateway_id,omitempty"` + // Deprecated: use gateway_id. + GatewayIdLegacy []byte `protobuf:"bytes,1,opt,name=gateway_id_legacy,json=gatewayIdLegacy,proto3" json:"gateway_id_legacy,omitempty"` + // Gateway ID. + GatewayId string `protobuf:"bytes,3,opt,name=gateway_id,json=gatewayId,proto3" json:"gateway_id,omitempty"` State ConnState_State `protobuf:"varint,2,opt,name=state,proto3,enum=gw.ConnState_State" json:"state,omitempty"` } @@ -3216,11 +3280,18 @@ func (*ConnState) Descriptor() ([]byte, []int) { return file_gw_gw_proto_rawDescGZIP(), []int{32} } -func (x *ConnState) GetGatewayId() []byte { +func (x *ConnState) GetGatewayIdLegacy() []byte { + if x != nil { + return x.GatewayIdLegacy + } + return nil +} + +func (x *ConnState) GetGatewayId() string { if x != nil { return x.GatewayId } - return nil + return "" } func (x *ConnState) GetState() ConnState_State { @@ -3321,409 +3392,432 @@ var file_gw_gw_proto_rawDesc = []byte{ 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, 0xc4, 0x09, - 0x0a, 0x0c, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x53, 0x74, 0x61, 0x74, 0x73, 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, 0x0e, 0x0a, - 0x02, 0x69, 0x70, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x70, 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, 0x3b, 0x0a, 0x09, 0x6d, 0x65, 0x74, 0x61, 0x5f, 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, 0x44, - 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x44, 0x61, - 0x74, 0x61, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x74, 0x61, 0x74, 0x73, 0x5f, 0x69, 0x64, 0x18, 0x0b, - 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x73, 0x74, 0x61, 0x74, 0x73, 0x49, 0x64, 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, 0x1a, 0x3b, 0x0a, 0x0d, - 0x4d, 0x65, 0x74, 0x61, 0x44, 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, 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, 0xee, 0x03, 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, 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, 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, 0x14, 0x0a, 0x05, 0x62, 0x6f, 0x61, - 0x72, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x12, - 0x18, 0x0a, 0x07, 0x61, 0x6e, 0x74, 0x65, 0x6e, 0x6e, 0x61, 0x18, 0x09, 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, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x22, 0xc5, 0x09, + 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, 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, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, - 0x78, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, - 0x74, 0x12, 0x33, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x0c, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x08, 0x6d, 0x65, - 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 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, 0xc7, 0x01, 0x0a, 0x14, 0x47, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 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, 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, 0xd6, 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, 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, 0x50, - 0x0a, 0x16, 0x6c, 0x6f, 0x72, 0x61, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, - 0x2e, 0x67, 0x77, 0x2e, 0x4c, 0x6f, 0x52, 0x61, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, 0x00, 0x52, 0x14, 0x6c, 0x6f, 0x72, 0x61, - 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x12, 0x4d, 0x0a, 0x15, 0x66, 0x73, 0x6b, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x17, 0x2e, 0x67, 0x77, 0x2e, 0x46, 0x53, 0x4b, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, 0x00, 0x52, 0x13, 0x66, 0x73, 0x6b, 0x4d, - 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, - 0x14, 0x0a, 0x05, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, - 0x62, 0x6f, 0x61, 0x72, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x6d, 0x6f, 0x64, 0x75, 0x6c, - 0x61, 0x74, 0x6f, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x64, 0x65, 0x6d, 0x6f, - 0x64, 0x75, 0x6c, 0x61, 0x74, 0x6f, 0x72, 0x42, 0x13, 0x0a, 0x11, 0x6d, 0x6f, 0x64, 0x75, 0x6c, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x61, 0x0a, 0x14, - 0x4c, 0x6f, 0x52, 0x61, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 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, 0x2b, 0x0a, 0x11, 0x73, 0x70, 0x72, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x5f, - 0x66, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x10, 0x73, - 0x70, 0x72, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x46, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x22, - 0x4d, 0x0a, 0x13, 0x46, 0x53, 0x4b, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 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, 0x18, 0x0a, 0x07, 0x62, 0x69, 0x74, 0x72, 0x61, 0x74, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x62, 0x69, 0x74, 0x72, 0x61, 0x74, 0x65, 0x22, 0x94, - 0x02, 0x0a, 0x19, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, - 0x64, 0x45, 0x78, 0x65, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 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, 0x18, 0x0a, 0x07, 0x63, - 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, - 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x45, 0x78, 0x65, 0x63, 0x49, 0x64, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x45, 0x78, 0x65, 0x63, 0x49, 0x64, 0x12, 0x14, 0x0a, - 0x05, 0x73, 0x74, 0x64, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x73, 0x74, - 0x64, 0x69, 0x6e, 0x12, 0x50, 0x0a, 0x0b, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, - 0x6e, 0x74, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x67, 0x77, 0x2e, 0x47, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x45, 0x78, 0x65, 0x63, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, - 0x65, 0x6e, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, - 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x1a, 0x3e, 0x0a, 0x10, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, - 0x6d, 0x65, 0x6e, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, + 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, 0x3b, 0x0a, 0x09, 0x6d, 0x65, 0x74, 0x61, 0x5f, 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, 0x44, 0x61, 0x74, 0x61, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x44, 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, 0x1a, 0x3b, 0x0a, + 0x0d, 0x4d, 0x65, 0x74, 0x61, 0x44, 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, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x9a, 0x01, 0x0a, 0x1a, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, - 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x45, 0x78, 0x65, 0x63, 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, 0x0c, 0x52, 0x09, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, - 0x79, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x65, 0x78, 0x65, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x65, 0x78, 0x65, 0x63, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, - 0x73, 0x74, 0x64, 0x6f, 0x75, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x73, 0x74, - 0x64, 0x6f, 0x75, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x64, 0x65, 0x72, 0x72, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x73, 0x74, 0x64, 0x65, 0x72, 0x72, 0x12, 0x14, 0x0a, 0x05, - 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, - 0x6f, 0x72, 0x22, 0x69, 0x0a, 0x17, 0x52, 0x61, 0x77, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x46, - 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x65, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 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, 0x15, 0x0a, 0x06, + 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, 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, 0xee, 0x03, 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, 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, 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, 0x14, 0x0a, 0x05, 0x62, 0x6f, + 0x61, 0x72, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x6f, 0x61, 0x72, 0x64, + 0x12, 0x18, 0x0a, 0x07, 0x61, 0x6e, 0x74, 0x65, 0x6e, 0x6e, 0x61, 0x18, 0x09, 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, 0x0a, 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, 0x0b, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, + 0x78, 0x74, 0x12, 0x33, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x0c, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x08, 0x6d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 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, 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, + 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x3f, 0x0a, 0x11, 0x6d, 0x6f, 0x64, 0x75, 0x6c, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 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, 0x10, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x12, 0x50, 0x0a, 0x16, 0x6c, 0x6f, 0x72, 0x61, + 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x67, 0x77, 0x2e, 0x4c, 0x6f, + 0x72, 0x61, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x48, 0x00, 0x52, 0x14, 0x6c, 0x6f, 0x72, 0x61, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x4d, 0x0a, 0x15, 0x66, 0x73, + 0x6b, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x77, 0x2e, 0x46, + 0x73, 0x6b, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x48, 0x00, 0x52, 0x13, 0x66, 0x73, 0x6b, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x14, 0x0a, 0x05, 0x62, 0x6f, 0x61, + 0x72, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x12, + 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x64, 0x65, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x6f, + 0x72, 0x42, 0x13, 0x0a, 0x11, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x8c, 0x01, 0x0a, 0x14, 0x4c, 0x6f, 0x72, 0x61, 0x4d, + 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, + 0x29, 0x0a, 0x10, 0x62, 0x61, 0x6e, 0x64, 0x77, 0x69, 0x64, 0x74, 0x68, 0x5f, 0x6c, 0x65, 0x67, + 0x61, 0x63, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x62, 0x61, 0x6e, 0x64, 0x77, + 0x69, 0x64, 0x74, 0x68, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x12, 0x1c, 0x0a, 0x09, 0x62, 0x61, + 0x6e, 0x64, 0x77, 0x69, 0x64, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x62, + 0x61, 0x6e, 0x64, 0x77, 0x69, 0x64, 0x74, 0x68, 0x12, 0x2b, 0x0a, 0x11, 0x73, 0x70, 0x72, 0x65, + 0x61, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x66, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x18, 0x02, 0x20, + 0x03, 0x28, 0x0d, 0x52, 0x10, 0x73, 0x70, 0x72, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x46, 0x61, + 0x63, 0x74, 0x6f, 0x72, 0x73, 0x22, 0x78, 0x0a, 0x13, 0x46, 0x73, 0x6b, 0x4d, 0x6f, 0x64, 0x75, + 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x29, 0x0a, 0x10, + 0x62, 0x61, 0x6e, 0x64, 0x77, 0x69, 0x64, 0x74, 0x68, 0x5f, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x62, 0x61, 0x6e, 0x64, 0x77, 0x69, 0x64, 0x74, + 0x68, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x12, 0x1c, 0x0a, 0x09, 0x62, 0x61, 0x6e, 0x64, 0x77, + 0x69, 0x64, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x62, 0x61, 0x6e, 0x64, + 0x77, 0x69, 0x64, 0x74, 0x68, 0x12, 0x18, 0x0a, 0x07, 0x62, 0x69, 0x74, 0x72, 0x61, 0x74, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x62, 0x69, 0x74, 0x72, 0x61, 0x74, 0x65, 0x22, + 0xc0, 0x02, 0x0a, 0x19, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x61, + 0x6e, 0x64, 0x45, 0x78, 0x65, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 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, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, + 0x61, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, + 0x6e, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x45, 0x78, 0x65, 0x63, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x06, 0x45, 0x78, 0x65, 0x63, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, + 0x64, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x73, 0x74, 0x64, 0x69, 0x6e, + 0x12, 0x50, 0x0a, 0x0b, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x18, + 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x67, 0x77, 0x2e, 0x47, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x45, 0x78, 0x65, 0x63, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x2e, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, + 0x6e, 0x74, 0x1a, 0x3e, 0x0a, 0x10, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, + 0x74, 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, 0xc6, 0x01, 0x0a, 0x1a, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x43, 0x6f, + 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x45, 0x78, 0x65, 0x63, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 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, 0x17, 0x0a, 0x07, + 0x65, 0x78, 0x65, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x65, + 0x78, 0x65, 0x63, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x64, 0x6f, 0x75, 0x74, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x73, 0x74, 0x64, 0x6f, 0x75, 0x74, 0x12, 0x16, 0x0a, + 0x06, 0x73, 0x74, 0x64, 0x65, 0x72, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x73, + 0x74, 0x64, 0x65, 0x72, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x95, 0x01, 0x0a, 0x17, + 0x52, 0x61, 0x77, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, + 0x65, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 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, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x72, 0x61, 0x77, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x05, 0x72, 0x61, 0x77, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x79, + 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x70, 0x61, 0x79, 0x6c, + 0x6f, 0x61, 0x64, 0x22, 0x97, 0x01, 0x0a, 0x19, 0x52, 0x61, 0x77, 0x50, 0x61, 0x63, 0x6b, 0x65, + 0x74, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, + 0x64, 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, 0x04, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x72, 0x61, 0x77, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x72, 0x61, 0x77, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x6b, 0x0a, - 0x19, 0x52, 0x61, 0x77, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, - 0x64, 0x65, 0x72, 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, 0x0c, 0x52, 0x09, - 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x72, 0x61, 0x77, - 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x72, 0x61, 0x77, 0x49, 0x64, - 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0c, 0x52, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x77, 0x0a, 0x09, 0x43, 0x6f, - 0x6e, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 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, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0xa3, 0x01, + 0x0a, 0x09, 0x43, 0x6f, 0x6e, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 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, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x49, 0x64, 0x12, 0x29, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x67, 0x77, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, @@ -3812,8 +3906,8 @@ var file_gw_gw_proto_goTypes = []interface{}{ (*DownlinkTxAckItem)(nil), // 29: gw.DownlinkTxAckItem (*GatewayConfiguration)(nil), // 30: gw.GatewayConfiguration (*ChannelConfiguration)(nil), // 31: gw.ChannelConfiguration - (*LoRaModulationConfig)(nil), // 32: gw.LoRaModulationConfig - (*FSKModulationConfig)(nil), // 33: gw.FSKModulationConfig + (*LoraModulationConfig)(nil), // 32: gw.LoraModulationConfig + (*FskModulationConfig)(nil), // 33: gw.FskModulationConfig (*GatewayCommandExecRequest)(nil), // 34: gw.GatewayCommandExecRequest (*GatewayCommandExecResponse)(nil), // 35: gw.GatewayCommandExecResponse (*RawPacketForwarderEvent)(nil), // 36: gw.RawPacketForwarderEvent @@ -3891,9 +3985,9 @@ var file_gw_gw_proto_depIdxs = []int32{ 4, // 56: gw.DownlinkTxAckItem.status:type_name -> gw.TxAckStatus 31, // 57: gw.GatewayConfiguration.channels:type_name -> gw.ChannelConfiguration 48, // 58: gw.GatewayConfiguration.stats_interval:type_name -> google.protobuf.Duration - 45, // 59: gw.ChannelConfiguration.modulation:type_name -> common.Modulation - 32, // 60: gw.ChannelConfiguration.lora_modulation_config:type_name -> gw.LoRaModulationConfig - 33, // 61: gw.ChannelConfiguration.fsk_modulation_config:type_name -> gw.FSKModulationConfig + 45, // 59: gw.ChannelConfiguration.modulation_legacy:type_name -> common.Modulation + 32, // 60: gw.ChannelConfiguration.lora_modulation_config:type_name -> gw.LoraModulationConfig + 33, // 61: gw.ChannelConfiguration.fsk_modulation_config:type_name -> gw.FskModulationConfig 44, // 62: gw.GatewayCommandExecRequest.environment:type_name -> gw.GatewayCommandExecRequest.EnvironmentEntry 5, // 63: gw.ConnState.state:type_name -> gw.ConnState.State 64, // [64:64] is the sub-list for method output_type @@ -4222,7 +4316,7 @@ func file_gw_gw_proto_init() { } } file_gw_gw_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LoRaModulationConfig); i { + switch v := v.(*LoraModulationConfig); i { case 0: return &v.state case 1: @@ -4234,7 +4328,7 @@ func file_gw_gw_proto_init() { } } file_gw_gw_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FSKModulationConfig); i { + switch v := v.(*FskModulationConfig); i { case 0: return &v.state case 1: diff --git a/api/js/gw/gw_pb.d.ts b/api/js/gw/gw_pb.d.ts index 35c4e964..bfa0623b 100644 --- a/api/js/gw/gw_pb.d.ts +++ b/api/js/gw/gw_pb.d.ts @@ -268,13 +268,13 @@ export namespace PlainFineTimestamp { } export class GatewayStats extends jspb.Message { - getGatewayId(): Uint8Array | string; - getGatewayId_asU8(): Uint8Array; - getGatewayId_asB64(): string; - setGatewayId(value: Uint8Array | string): void; + getGatewayIdLegacy(): Uint8Array | string; + getGatewayIdLegacy_asU8(): Uint8Array; + getGatewayIdLegacy_asB64(): string; + setGatewayIdLegacy(value: Uint8Array | string): void; - getIp(): string; - setIp(value: string): void; + getGatewayId(): string; + setGatewayId(value: string): void; hasTime(): boolean; clearTime(): void; @@ -303,11 +303,6 @@ export class GatewayStats extends jspb.Message { getMetaDataMap(): jspb.Map; clearMetaDataMap(): void; - getStatsId(): Uint8Array | string; - getStatsId_asU8(): Uint8Array; - getStatsId_asB64(): string; - setStatsId(value: Uint8Array | string): void; - getTxPacketsPerFrequencyMap(): jspb.Map; clearTxPacketsPerFrequencyMap(): void; getRxPacketsPerFrequencyMap(): jspb.Map; @@ -336,8 +331,8 @@ export class GatewayStats extends jspb.Message { export namespace GatewayStats { export type AsObject = { - gatewayId: Uint8Array | string, - ip: string, + gatewayIdLegacy: Uint8Array | string, + gatewayId: string, time?: google_protobuf_timestamp_pb.Timestamp.AsObject, location?: common_common_pb.Location.AsObject, configVersion: string, @@ -346,7 +341,6 @@ export namespace GatewayStats { txPacketsReceived: number, txPacketsEmitted: number, metaDataMap: Array<[string, string]>, - statsId: Uint8Array | string, txPacketsPerFrequencyMap: Array<[number, number]>, rxPacketsPerFrequencyMap: Array<[number, number]>, txPacketsPerModulationList: Array, @@ -1031,10 +1025,13 @@ export namespace DownlinkTxAckItem { } export class GatewayConfiguration extends jspb.Message { - getGatewayId(): Uint8Array | string; - getGatewayId_asU8(): Uint8Array; - getGatewayId_asB64(): string; - setGatewayId(value: Uint8Array | string): void; + getGatewayIdLegacy(): Uint8Array | string; + getGatewayIdLegacy_asU8(): Uint8Array; + getGatewayIdLegacy_asB64(): string; + setGatewayIdLegacy(value: Uint8Array | string): void; + + getGatewayId(): string; + setGatewayId(value: string): void; getVersion(): string; setVersion(value: string): void; @@ -1061,7 +1058,8 @@ export class GatewayConfiguration extends jspb.Message { export namespace GatewayConfiguration { export type AsObject = { - gatewayId: Uint8Array | string, + gatewayIdLegacy: Uint8Array | string, + gatewayId: string, version: string, channelsList: Array, statsInterval?: google_protobuf_duration_pb.Duration.AsObject, @@ -1072,18 +1070,18 @@ export class ChannelConfiguration extends jspb.Message { getFrequency(): number; setFrequency(value: number): void; - getModulation(): common_common_pb.ModulationMap[keyof common_common_pb.ModulationMap]; - setModulation(value: common_common_pb.ModulationMap[keyof common_common_pb.ModulationMap]): void; + getModulationLegacy(): common_common_pb.ModulationMap[keyof common_common_pb.ModulationMap]; + setModulationLegacy(value: common_common_pb.ModulationMap[keyof common_common_pb.ModulationMap]): void; hasLoraModulationConfig(): boolean; clearLoraModulationConfig(): void; - getLoraModulationConfig(): LoRaModulationConfig | undefined; - setLoraModulationConfig(value?: LoRaModulationConfig): void; + getLoraModulationConfig(): LoraModulationConfig | undefined; + setLoraModulationConfig(value?: LoraModulationConfig): void; hasFskModulationConfig(): boolean; clearFskModulationConfig(): void; - getFskModulationConfig(): FSKModulationConfig | undefined; - setFskModulationConfig(value?: FSKModulationConfig): void; + getFskModulationConfig(): FskModulationConfig | undefined; + setFskModulationConfig(value?: FskModulationConfig): void; getBoard(): number; setBoard(value: number): void; @@ -1105,9 +1103,9 @@ export class ChannelConfiguration extends jspb.Message { export namespace ChannelConfiguration { export type AsObject = { frequency: number, - modulation: common_common_pb.ModulationMap[keyof common_common_pb.ModulationMap], - loraModulationConfig?: LoRaModulationConfig.AsObject, - fskModulationConfig?: FSKModulationConfig.AsObject, + modulationLegacy: common_common_pb.ModulationMap[keyof common_common_pb.ModulationMap], + loraModulationConfig?: LoraModulationConfig.AsObject, + fskModulationConfig?: FskModulationConfig.AsObject, board: number, demodulator: number, } @@ -1119,7 +1117,10 @@ export namespace ChannelConfiguration { } } -export class LoRaModulationConfig extends jspb.Message { +export class LoraModulationConfig extends jspb.Message { + getBandwidthLegacy(): number; + setBandwidthLegacy(value: number): void; + getBandwidth(): number; setBandwidth(value: number): void; @@ -1129,23 +1130,27 @@ export class LoRaModulationConfig extends jspb.Message { addSpreadingFactors(value: number, index?: number): number; serializeBinary(): Uint8Array; - toObject(includeInstance?: boolean): LoRaModulationConfig.AsObject; - static toObject(includeInstance: boolean, msg: LoRaModulationConfig): LoRaModulationConfig.AsObject; + toObject(includeInstance?: boolean): LoraModulationConfig.AsObject; + static toObject(includeInstance: boolean, msg: LoraModulationConfig): LoraModulationConfig.AsObject; static extensions: {[key: number]: jspb.ExtensionFieldInfo}; static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; - static serializeBinaryToWriter(message: LoRaModulationConfig, writer: jspb.BinaryWriter): void; - static deserializeBinary(bytes: Uint8Array): LoRaModulationConfig; - static deserializeBinaryFromReader(message: LoRaModulationConfig, reader: jspb.BinaryReader): LoRaModulationConfig; + static serializeBinaryToWriter(message: LoraModulationConfig, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): LoraModulationConfig; + static deserializeBinaryFromReader(message: LoraModulationConfig, reader: jspb.BinaryReader): LoraModulationConfig; } -export namespace LoRaModulationConfig { +export namespace LoraModulationConfig { export type AsObject = { + bandwidthLegacy: number, bandwidth: number, spreadingFactorsList: Array, } } -export class FSKModulationConfig extends jspb.Message { +export class FskModulationConfig extends jspb.Message { + getBandwidthLegacy(): number; + setBandwidthLegacy(value: number): void; + getBandwidth(): number; setBandwidth(value: number): void; @@ -1153,27 +1158,31 @@ export class FSKModulationConfig extends jspb.Message { setBitrate(value: number): void; serializeBinary(): Uint8Array; - toObject(includeInstance?: boolean): FSKModulationConfig.AsObject; - static toObject(includeInstance: boolean, msg: FSKModulationConfig): FSKModulationConfig.AsObject; + toObject(includeInstance?: boolean): FskModulationConfig.AsObject; + static toObject(includeInstance: boolean, msg: FskModulationConfig): FskModulationConfig.AsObject; static extensions: {[key: number]: jspb.ExtensionFieldInfo}; static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; - static serializeBinaryToWriter(message: FSKModulationConfig, writer: jspb.BinaryWriter): void; - static deserializeBinary(bytes: Uint8Array): FSKModulationConfig; - static deserializeBinaryFromReader(message: FSKModulationConfig, reader: jspb.BinaryReader): FSKModulationConfig; + static serializeBinaryToWriter(message: FskModulationConfig, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): FskModulationConfig; + static deserializeBinaryFromReader(message: FskModulationConfig, reader: jspb.BinaryReader): FskModulationConfig; } -export namespace FSKModulationConfig { +export namespace FskModulationConfig { export type AsObject = { + bandwidthLegacy: number, bandwidth: number, bitrate: number, } } export class GatewayCommandExecRequest extends jspb.Message { - getGatewayId(): Uint8Array | string; - getGatewayId_asU8(): Uint8Array; - getGatewayId_asB64(): string; - setGatewayId(value: Uint8Array | string): void; + getGatewayIdLegacy(): Uint8Array | string; + getGatewayIdLegacy_asU8(): Uint8Array; + getGatewayIdLegacy_asB64(): string; + setGatewayIdLegacy(value: Uint8Array | string): void; + + getGatewayId(): string; + setGatewayId(value: string): void; getCommand(): string; setCommand(value: string): void; @@ -1202,7 +1211,8 @@ export class GatewayCommandExecRequest extends jspb.Message { export namespace GatewayCommandExecRequest { export type AsObject = { - gatewayId: Uint8Array | string, + gatewayIdLegacy: Uint8Array | string, + gatewayId: string, command: string, execid: Uint8Array | string, stdin: Uint8Array | string, @@ -1211,10 +1221,13 @@ export namespace GatewayCommandExecRequest { } export class GatewayCommandExecResponse extends jspb.Message { - getGatewayId(): Uint8Array | string; - getGatewayId_asU8(): Uint8Array; - getGatewayId_asB64(): string; - setGatewayId(value: Uint8Array | string): void; + getGatewayIdLegacy(): Uint8Array | string; + getGatewayIdLegacy_asU8(): Uint8Array; + getGatewayIdLegacy_asB64(): string; + setGatewayIdLegacy(value: Uint8Array | string): void; + + getGatewayId(): string; + setGatewayId(value: string): void; getExecId(): Uint8Array | string; getExecId_asU8(): Uint8Array; @@ -1246,7 +1259,8 @@ export class GatewayCommandExecResponse extends jspb.Message { export namespace GatewayCommandExecResponse { export type AsObject = { - gatewayId: Uint8Array | string, + gatewayIdLegacy: Uint8Array | string, + gatewayId: string, execId: Uint8Array | string, stdout: Uint8Array | string, stderr: Uint8Array | string, @@ -1255,10 +1269,13 @@ export namespace GatewayCommandExecResponse { } export class RawPacketForwarderEvent extends jspb.Message { - getGatewayId(): Uint8Array | string; - getGatewayId_asU8(): Uint8Array; - getGatewayId_asB64(): string; - setGatewayId(value: Uint8Array | string): void; + getGatewayIdLegacy(): Uint8Array | string; + getGatewayIdLegacy_asU8(): Uint8Array; + getGatewayIdLegacy_asB64(): string; + setGatewayIdLegacy(value: Uint8Array | string): void; + + getGatewayId(): string; + setGatewayId(value: string): void; getRawId(): Uint8Array | string; getRawId_asU8(): Uint8Array; @@ -1282,17 +1299,21 @@ export class RawPacketForwarderEvent extends jspb.Message { export namespace RawPacketForwarderEvent { export type AsObject = { - gatewayId: Uint8Array | string, + gatewayIdLegacy: Uint8Array | string, + gatewayId: string, rawId: Uint8Array | string, payload: Uint8Array | string, } } export class RawPacketForwarderCommand extends jspb.Message { - getGatewayId(): Uint8Array | string; - getGatewayId_asU8(): Uint8Array; - getGatewayId_asB64(): string; - setGatewayId(value: Uint8Array | string): void; + getGatewayIdLegacy(): Uint8Array | string; + getGatewayIdLegacy_asU8(): Uint8Array; + getGatewayIdLegacy_asB64(): string; + setGatewayIdLegacy(value: Uint8Array | string): void; + + getGatewayId(): string; + setGatewayId(value: string): void; getRawId(): Uint8Array | string; getRawId_asU8(): Uint8Array; @@ -1316,17 +1337,21 @@ export class RawPacketForwarderCommand extends jspb.Message { export namespace RawPacketForwarderCommand { export type AsObject = { - gatewayId: Uint8Array | string, + gatewayIdLegacy: Uint8Array | string, + gatewayId: string, rawId: Uint8Array | string, payload: Uint8Array | string, } } export class ConnState extends jspb.Message { - getGatewayId(): Uint8Array | string; - getGatewayId_asU8(): Uint8Array; - getGatewayId_asB64(): string; - setGatewayId(value: Uint8Array | string): void; + getGatewayIdLegacy(): Uint8Array | string; + getGatewayIdLegacy_asU8(): Uint8Array; + getGatewayIdLegacy_asB64(): string; + setGatewayIdLegacy(value: Uint8Array | string): void; + + getGatewayId(): string; + setGatewayId(value: string): void; getState(): ConnState.StateMap[keyof ConnState.StateMap]; setState(value: ConnState.StateMap[keyof ConnState.StateMap]): void; @@ -1343,7 +1368,8 @@ export class ConnState extends jspb.Message { export namespace ConnState { export type AsObject = { - gatewayId: Uint8Array | string, + gatewayIdLegacy: Uint8Array | string, + gatewayId: string, state: ConnState.StateMap[keyof ConnState.StateMap], } diff --git a/api/js/gw/gw_pb.js b/api/js/gw/gw_pb.js index a6771405..7aa27d4f 100644 --- a/api/js/gw/gw_pb.js +++ b/api/js/gw/gw_pb.js @@ -27,8 +27,8 @@ goog.exportSymbol('proto.gw.DownlinkTxAckItem', null, global); goog.exportSymbol('proto.gw.DownlinkTxInfo', null, global); goog.exportSymbol('proto.gw.DownlinkTxInfoLegacy', null, global); goog.exportSymbol('proto.gw.EncryptedFineTimestamp', null, global); -goog.exportSymbol('proto.gw.FSKModulationConfig', null, global); goog.exportSymbol('proto.gw.FineTimestampType', null, global); +goog.exportSymbol('proto.gw.FskModulationConfig', null, global); goog.exportSymbol('proto.gw.FskModulationInfo', null, global); goog.exportSymbol('proto.gw.GPSEpochTimingInfo', null, global); goog.exportSymbol('proto.gw.GatewayCommandExecRequest', null, global); @@ -36,7 +36,7 @@ goog.exportSymbol('proto.gw.GatewayCommandExecResponse', null, global); goog.exportSymbol('proto.gw.GatewayConfiguration', null, global); goog.exportSymbol('proto.gw.GatewayStats', null, global); goog.exportSymbol('proto.gw.ImmediatelyTimingInfo', null, global); -goog.exportSymbol('proto.gw.LoRaModulationConfig', null, global); +goog.exportSymbol('proto.gw.LoraModulationConfig', null, global); goog.exportSymbol('proto.gw.LoraModulationInfo', null, global); goog.exportSymbol('proto.gw.LrFhssModulationInfo', null, global); goog.exportSymbol('proto.gw.Modulation', null, global); @@ -2049,8 +2049,8 @@ proto.gw.GatewayStats.prototype.toObject = function(opt_includeInstance) { */ proto.gw.GatewayStats.toObject = function(includeInstance, msg) { var f, obj = { - gatewayId: msg.getGatewayId_asB64(), - ip: msg.getIp(), + gatewayIdLegacy: msg.getGatewayIdLegacy_asB64(), + gatewayId: msg.getGatewayId(), time: (f = msg.getTime()) && google_protobuf_timestamp_pb.Timestamp.toObject(includeInstance, f), location: (f = msg.getLocation()) && common_common_pb.Location.toObject(includeInstance, f), configVersion: msg.getConfigVersion(), @@ -2059,7 +2059,6 @@ proto.gw.GatewayStats.toObject = function(includeInstance, msg) { txPacketsReceived: msg.getTxPacketsReceived(), txPacketsEmitted: msg.getTxPacketsEmitted(), metaDataMap: (f = msg.getMetaDataMap(true)) ? f.toArray() : [], - statsId: msg.getStatsId_asB64(), txPacketsPerFrequencyMap: (f = msg.getTxPacketsPerFrequencyMap(true)) ? f.toArray() : [], rxPacketsPerFrequencyMap: (f = msg.getRxPacketsPerFrequencyMap(true)) ? f.toArray() : [], txPacketsPerModulationList: jspb.Message.toObjectList(msg.getTxPacketsPerModulationList(), @@ -2105,11 +2104,11 @@ proto.gw.GatewayStats.deserializeBinaryFromReader = function(msg, reader) { switch (field) { case 1: var value = /** @type {!Uint8Array} */ (reader.readBytes()); - msg.setGatewayId(value); + msg.setGatewayIdLegacy(value); break; - case 9: + case 17: var value = /** @type {string} */ (reader.readString()); - msg.setIp(value); + msg.setGatewayId(value); break; case 2: var value = new google_protobuf_timestamp_pb.Timestamp; @@ -2147,10 +2146,6 @@ proto.gw.GatewayStats.deserializeBinaryFromReader = function(msg, reader) { jspb.Map.deserializeBinary(message, reader, jspb.BinaryReader.prototype.readString, jspb.BinaryReader.prototype.readString); }); break; - case 11: - var value = /** @type {!Uint8Array} */ (reader.readBytes()); - msg.setStatsId(value); - break; case 12: var value = msg.getTxPacketsPerFrequencyMap(); reader.readMessage(value, function(message, reader) { @@ -2219,17 +2214,17 @@ proto.gw.GatewayStats.prototype.serializeBinary = function() { */ proto.gw.GatewayStats.prototype.serializeBinaryToWriter = function (writer) { var f = undefined; - f = this.getGatewayId_asU8(); + f = this.getGatewayIdLegacy_asU8(); if (f.length > 0) { writer.writeBytes( 1, f ); } - f = this.getIp(); + f = this.getGatewayId(); if (f.length > 0) { writer.writeString( - 9, + 17, f ); } @@ -2288,13 +2283,6 @@ proto.gw.GatewayStats.prototype.serializeBinaryToWriter = function (writer) { if (f && f.getLength() > 0) { f.serializeBinary(10, writer, jspb.BinaryWriter.prototype.writeString, jspb.BinaryWriter.prototype.writeString); } - f = this.getStatsId_asU8(); - if (f.length > 0) { - writer.writeBytes( - 11, - f - ); - } f = this.getTxPacketsPerFrequencyMap(true); if (f && f.getLength() > 0) { f.serializeBinary(12, writer, jspb.BinaryWriter.prototype.writeUint32, jspb.BinaryWriter.prototype.writeUint32); @@ -2336,56 +2324,56 @@ proto.gw.GatewayStats.prototype.cloneMessage = function() { /** - * optional bytes gateway_id = 1; + * optional bytes gateway_id_legacy = 1; * @return {!(string|Uint8Array)} */ -proto.gw.GatewayStats.prototype.getGatewayId = function() { +proto.gw.GatewayStats.prototype.getGatewayIdLegacy = function() { return /** @type {!(string|Uint8Array)} */ (jspb.Message.getFieldProto3(this, 1, "")); }; /** - * optional bytes gateway_id = 1; - * This is a type-conversion wrapper around `getGatewayId()` + * optional bytes gateway_id_legacy = 1; + * This is a type-conversion wrapper around `getGatewayIdLegacy()` * @return {string} */ -proto.gw.GatewayStats.prototype.getGatewayId_asB64 = function() { +proto.gw.GatewayStats.prototype.getGatewayIdLegacy_asB64 = function() { return /** @type {string} */ (jspb.Message.bytesAsB64( - this.getGatewayId())); + this.getGatewayIdLegacy())); }; /** - * optional bytes gateway_id = 1; + * optional bytes gateway_id_legacy = 1; * Note that Uint8Array is not supported on all browsers. * @see http://caniuse.com/Uint8Array - * This is a type-conversion wrapper around `getGatewayId()` + * This is a type-conversion wrapper around `getGatewayIdLegacy()` * @return {!Uint8Array} */ -proto.gw.GatewayStats.prototype.getGatewayId_asU8 = function() { +proto.gw.GatewayStats.prototype.getGatewayIdLegacy_asU8 = function() { return /** @type {!Uint8Array} */ (jspb.Message.bytesAsU8( - this.getGatewayId())); + this.getGatewayIdLegacy())); }; /** @param {!(string|Uint8Array)} value */ -proto.gw.GatewayStats.prototype.setGatewayId = function(value) { +proto.gw.GatewayStats.prototype.setGatewayIdLegacy = function(value) { jspb.Message.setField(this, 1, value); }; /** - * optional string ip = 9; + * optional string gateway_id = 17; * @return {string} */ -proto.gw.GatewayStats.prototype.getIp = function() { - return /** @type {string} */ (jspb.Message.getFieldProto3(this, 9, "")); +proto.gw.GatewayStats.prototype.getGatewayId = function() { + return /** @type {string} */ (jspb.Message.getFieldProto3(this, 17, "")); }; /** @param {string} value */ -proto.gw.GatewayStats.prototype.setIp = function(value) { - jspb.Message.setField(this, 9, value); +proto.gw.GatewayStats.prototype.setGatewayId = function(value) { + jspb.Message.setField(this, 17, value); }; @@ -2537,45 +2525,6 @@ proto.gw.GatewayStats.prototype.getMetaDataMap = function(opt_noLazyCreate) { }; -/** - * optional bytes stats_id = 11; - * @return {!(string|Uint8Array)} - */ -proto.gw.GatewayStats.prototype.getStatsId = function() { - return /** @type {!(string|Uint8Array)} */ (jspb.Message.getFieldProto3(this, 11, "")); -}; - - -/** - * optional bytes stats_id = 11; - * This is a type-conversion wrapper around `getStatsId()` - * @return {string} - */ -proto.gw.GatewayStats.prototype.getStatsId_asB64 = function() { - return /** @type {string} */ (jspb.Message.bytesAsB64( - this.getStatsId())); -}; - - -/** - * optional bytes stats_id = 11; - * Note that Uint8Array is not supported on all browsers. - * @see http://caniuse.com/Uint8Array - * This is a type-conversion wrapper around `getStatsId()` - * @return {!Uint8Array} - */ -proto.gw.GatewayStats.prototype.getStatsId_asU8 = function() { - return /** @type {!Uint8Array} */ (jspb.Message.bytesAsU8( - this.getStatsId())); -}; - - -/** @param {!(string|Uint8Array)} value */ -proto.gw.GatewayStats.prototype.setStatsId = function(value) { - jspb.Message.setField(this, 11, value); -}; - - /** * map tx_packets_per_frequency = 12; * @param {boolean=} opt_noLazyCreate Do not create the map if @@ -7797,7 +7746,8 @@ proto.gw.GatewayConfiguration.prototype.toObject = function(opt_includeInstance) */ proto.gw.GatewayConfiguration.toObject = function(includeInstance, msg) { var f, obj = { - gatewayId: msg.getGatewayId_asB64(), + gatewayIdLegacy: msg.getGatewayIdLegacy_asB64(), + gatewayId: msg.getGatewayId(), version: msg.getVersion(), channelsList: jspb.Message.toObjectList(msg.getChannelsList(), proto.gw.ChannelConfiguration.toObject, includeInstance), @@ -7840,6 +7790,10 @@ proto.gw.GatewayConfiguration.deserializeBinaryFromReader = function(msg, reader switch (field) { case 1: var value = /** @type {!Uint8Array} */ (reader.readBytes()); + msg.setGatewayIdLegacy(value); + break; + case 5: + var value = /** @type {string} */ (reader.readString()); msg.setGatewayId(value); break; case 2: @@ -7895,13 +7849,20 @@ proto.gw.GatewayConfiguration.prototype.serializeBinary = function() { */ proto.gw.GatewayConfiguration.prototype.serializeBinaryToWriter = function (writer) { var f = undefined; - f = this.getGatewayId_asU8(); + f = this.getGatewayIdLegacy_asU8(); if (f.length > 0) { writer.writeBytes( 1, f ); } + f = this.getGatewayId(); + if (f.length > 0) { + writer.writeString( + 5, + f + ); + } f = this.getVersion(); if (f.length > 0) { writer.writeString( @@ -7938,44 +7899,59 @@ proto.gw.GatewayConfiguration.prototype.cloneMessage = function() { /** - * optional bytes gateway_id = 1; + * optional bytes gateway_id_legacy = 1; * @return {!(string|Uint8Array)} */ -proto.gw.GatewayConfiguration.prototype.getGatewayId = function() { +proto.gw.GatewayConfiguration.prototype.getGatewayIdLegacy = function() { return /** @type {!(string|Uint8Array)} */ (jspb.Message.getFieldProto3(this, 1, "")); }; /** - * optional bytes gateway_id = 1; - * This is a type-conversion wrapper around `getGatewayId()` + * optional bytes gateway_id_legacy = 1; + * This is a type-conversion wrapper around `getGatewayIdLegacy()` * @return {string} */ -proto.gw.GatewayConfiguration.prototype.getGatewayId_asB64 = function() { +proto.gw.GatewayConfiguration.prototype.getGatewayIdLegacy_asB64 = function() { return /** @type {string} */ (jspb.Message.bytesAsB64( - this.getGatewayId())); + this.getGatewayIdLegacy())); }; /** - * optional bytes gateway_id = 1; + * optional bytes gateway_id_legacy = 1; * Note that Uint8Array is not supported on all browsers. * @see http://caniuse.com/Uint8Array - * This is a type-conversion wrapper around `getGatewayId()` + * This is a type-conversion wrapper around `getGatewayIdLegacy()` * @return {!Uint8Array} */ -proto.gw.GatewayConfiguration.prototype.getGatewayId_asU8 = function() { +proto.gw.GatewayConfiguration.prototype.getGatewayIdLegacy_asU8 = function() { return /** @type {!Uint8Array} */ (jspb.Message.bytesAsU8( - this.getGatewayId())); + this.getGatewayIdLegacy())); }; /** @param {!(string|Uint8Array)} value */ -proto.gw.GatewayConfiguration.prototype.setGatewayId = function(value) { +proto.gw.GatewayConfiguration.prototype.setGatewayIdLegacy = function(value) { jspb.Message.setField(this, 1, value); }; +/** + * optional string gateway_id = 5; + * @return {string} + */ +proto.gw.GatewayConfiguration.prototype.getGatewayId = function() { + return /** @type {string} */ (jspb.Message.getFieldProto3(this, 5, "")); +}; + + +/** @param {string} value */ +proto.gw.GatewayConfiguration.prototype.setGatewayId = function(value) { + jspb.Message.setField(this, 5, value); +}; + + /** * optional string version = 2; * @return {string} @@ -8117,9 +8093,9 @@ proto.gw.ChannelConfiguration.prototype.toObject = function(opt_includeInstance) proto.gw.ChannelConfiguration.toObject = function(includeInstance, msg) { var f, obj = { frequency: msg.getFrequency(), - modulation: msg.getModulation(), - loraModulationConfig: (f = msg.getLoraModulationConfig()) && proto.gw.LoRaModulationConfig.toObject(includeInstance, f), - fskModulationConfig: (f = msg.getFskModulationConfig()) && proto.gw.FSKModulationConfig.toObject(includeInstance, f), + modulationLegacy: msg.getModulationLegacy(), + loraModulationConfig: (f = msg.getLoraModulationConfig()) && proto.gw.LoraModulationConfig.toObject(includeInstance, f), + fskModulationConfig: (f = msg.getFskModulationConfig()) && proto.gw.FskModulationConfig.toObject(includeInstance, f), board: msg.getBoard(), demodulator: msg.getDemodulator() }; @@ -8164,16 +8140,16 @@ proto.gw.ChannelConfiguration.deserializeBinaryFromReader = function(msg, reader break; case 2: var value = /** @type {!proto.common.Modulation} */ (reader.readEnum()); - msg.setModulation(value); + msg.setModulationLegacy(value); break; case 3: - var value = new proto.gw.LoRaModulationConfig; - reader.readMessage(value,proto.gw.LoRaModulationConfig.deserializeBinaryFromReader); + var value = new proto.gw.LoraModulationConfig; + reader.readMessage(value,proto.gw.LoraModulationConfig.deserializeBinaryFromReader); msg.setLoraModulationConfig(value); break; case 4: - var value = new proto.gw.FSKModulationConfig; - reader.readMessage(value,proto.gw.FSKModulationConfig.deserializeBinaryFromReader); + var value = new proto.gw.FskModulationConfig; + reader.readMessage(value,proto.gw.FskModulationConfig.deserializeBinaryFromReader); msg.setFskModulationConfig(value); break; case 5: @@ -8229,7 +8205,7 @@ proto.gw.ChannelConfiguration.prototype.serializeBinaryToWriter = function (writ f ); } - f = this.getModulation(); + f = this.getModulationLegacy(); if (f !== 0.0) { writer.writeEnum( 2, @@ -8241,7 +8217,7 @@ proto.gw.ChannelConfiguration.prototype.serializeBinaryToWriter = function (writ writer.writeMessage( 3, f, - proto.gw.LoRaModulationConfig.serializeBinaryToWriter + proto.gw.LoraModulationConfig.serializeBinaryToWriter ); } f = this.getFskModulationConfig(); @@ -8249,7 +8225,7 @@ proto.gw.ChannelConfiguration.prototype.serializeBinaryToWriter = function (writ writer.writeMessage( 4, f, - proto.gw.FSKModulationConfig.serializeBinaryToWriter + proto.gw.FskModulationConfig.serializeBinaryToWriter ); } f = this.getBoard(); @@ -8294,31 +8270,31 @@ proto.gw.ChannelConfiguration.prototype.setFrequency = function(value) { /** - * optional common.Modulation modulation = 2; + * optional common.Modulation modulation_legacy = 2; * @return {!proto.common.Modulation} */ -proto.gw.ChannelConfiguration.prototype.getModulation = function() { +proto.gw.ChannelConfiguration.prototype.getModulationLegacy = function() { return /** @type {!proto.common.Modulation} */ (jspb.Message.getFieldProto3(this, 2, 0)); }; /** @param {!proto.common.Modulation} value */ -proto.gw.ChannelConfiguration.prototype.setModulation = function(value) { +proto.gw.ChannelConfiguration.prototype.setModulationLegacy = function(value) { jspb.Message.setField(this, 2, value); }; /** - * optional LoRaModulationConfig lora_modulation_config = 3; - * @return {proto.gw.LoRaModulationConfig} + * optional LoraModulationConfig lora_modulation_config = 3; + * @return {proto.gw.LoraModulationConfig} */ proto.gw.ChannelConfiguration.prototype.getLoraModulationConfig = function() { - return /** @type{proto.gw.LoRaModulationConfig} */ ( - jspb.Message.getWrapperField(this, proto.gw.LoRaModulationConfig, 3)); + return /** @type{proto.gw.LoraModulationConfig} */ ( + jspb.Message.getWrapperField(this, proto.gw.LoraModulationConfig, 3)); }; -/** @param {proto.gw.LoRaModulationConfig|undefined} value */ +/** @param {proto.gw.LoraModulationConfig|undefined} value */ proto.gw.ChannelConfiguration.prototype.setLoraModulationConfig = function(value) { jspb.Message.setOneofWrapperField(this, 3, proto.gw.ChannelConfiguration.oneofGroups_[0], value); }; @@ -8339,16 +8315,16 @@ proto.gw.ChannelConfiguration.prototype.hasLoraModulationConfig = function() { /** - * optional FSKModulationConfig fsk_modulation_config = 4; - * @return {proto.gw.FSKModulationConfig} + * optional FskModulationConfig fsk_modulation_config = 4; + * @return {proto.gw.FskModulationConfig} */ proto.gw.ChannelConfiguration.prototype.getFskModulationConfig = function() { - return /** @type{proto.gw.FSKModulationConfig} */ ( - jspb.Message.getWrapperField(this, proto.gw.FSKModulationConfig, 4)); + return /** @type{proto.gw.FskModulationConfig} */ ( + jspb.Message.getWrapperField(this, proto.gw.FskModulationConfig, 4)); }; -/** @param {proto.gw.FSKModulationConfig|undefined} value */ +/** @param {proto.gw.FskModulationConfig|undefined} value */ proto.gw.ChannelConfiguration.prototype.setFskModulationConfig = function(value) { jspb.Message.setOneofWrapperField(this, 4, proto.gw.ChannelConfiguration.oneofGroups_[0], value); }; @@ -8409,19 +8385,19 @@ proto.gw.ChannelConfiguration.prototype.setDemodulator = function(value) { * @extends {jspb.Message} * @constructor */ -proto.gw.LoRaModulationConfig = function(opt_data) { - jspb.Message.initialize(this, opt_data, 0, -1, proto.gw.LoRaModulationConfig.repeatedFields_, null); +proto.gw.LoraModulationConfig = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.gw.LoraModulationConfig.repeatedFields_, null); }; -goog.inherits(proto.gw.LoRaModulationConfig, jspb.Message); +goog.inherits(proto.gw.LoraModulationConfig, jspb.Message); if (goog.DEBUG && !COMPILED) { - proto.gw.LoRaModulationConfig.displayName = 'proto.gw.LoRaModulationConfig'; + proto.gw.LoraModulationConfig.displayName = 'proto.gw.LoraModulationConfig'; } /** * List of repeated fields within this message type. * @private {!Array} * @const */ -proto.gw.LoRaModulationConfig.repeatedFields_ = [2]; +proto.gw.LoraModulationConfig.repeatedFields_ = [2]; @@ -8436,8 +8412,8 @@ if (jspb.Message.GENERATE_TO_OBJECT) { * for transitional soy proto support: http://goto/soy-param-migration * @return {!Object} */ -proto.gw.LoRaModulationConfig.prototype.toObject = function(opt_includeInstance) { - return proto.gw.LoRaModulationConfig.toObject(opt_includeInstance, this); +proto.gw.LoraModulationConfig.prototype.toObject = function(opt_includeInstance) { + return proto.gw.LoraModulationConfig.toObject(opt_includeInstance, this); }; @@ -8446,11 +8422,12 @@ proto.gw.LoRaModulationConfig.prototype.toObject = function(opt_includeInstance) * @param {boolean|undefined} includeInstance Whether to include the JSPB * instance for transitional soy proto support: * http://goto/soy-param-migration - * @param {!proto.gw.LoRaModulationConfig} msg The msg instance to transform. + * @param {!proto.gw.LoraModulationConfig} msg The msg instance to transform. * @return {!Object} */ -proto.gw.LoRaModulationConfig.toObject = function(includeInstance, msg) { +proto.gw.LoraModulationConfig.toObject = function(includeInstance, msg) { var f, obj = { + bandwidthLegacy: msg.getBandwidthLegacy(), bandwidth: msg.getBandwidth(), spreadingFactorsList: jspb.Message.getField(msg, 2) }; @@ -8466,23 +8443,23 @@ proto.gw.LoRaModulationConfig.toObject = function(includeInstance, msg) { /** * Deserializes binary data (in protobuf wire format). * @param {jspb.ByteSource} bytes The bytes to deserialize. - * @return {!proto.gw.LoRaModulationConfig} + * @return {!proto.gw.LoraModulationConfig} */ -proto.gw.LoRaModulationConfig.deserializeBinary = function(bytes) { +proto.gw.LoraModulationConfig.deserializeBinary = function(bytes) { var reader = new jspb.BinaryReader(bytes); - var msg = new proto.gw.LoRaModulationConfig; - return proto.gw.LoRaModulationConfig.deserializeBinaryFromReader(msg, reader); + var msg = new proto.gw.LoraModulationConfig; + return proto.gw.LoraModulationConfig.deserializeBinaryFromReader(msg, reader); }; /** * Deserializes binary data (in protobuf wire format) from the * given reader into the given message object. - * @param {!proto.gw.LoRaModulationConfig} msg The message object to deserialize into. + * @param {!proto.gw.LoraModulationConfig} msg The message object to deserialize into. * @param {!jspb.BinaryReader} reader The BinaryReader to use. - * @return {!proto.gw.LoRaModulationConfig} + * @return {!proto.gw.LoraModulationConfig} */ -proto.gw.LoRaModulationConfig.deserializeBinaryFromReader = function(msg, reader) { +proto.gw.LoraModulationConfig.deserializeBinaryFromReader = function(msg, reader) { while (reader.nextField()) { if (reader.isEndGroup()) { break; @@ -8490,6 +8467,10 @@ proto.gw.LoRaModulationConfig.deserializeBinaryFromReader = function(msg, reader var field = reader.getFieldNumber(); switch (field) { case 1: + var value = /** @type {number} */ (reader.readUint32()); + msg.setBandwidthLegacy(value); + break; + case 3: var value = /** @type {number} */ (reader.readUint32()); msg.setBandwidth(value); break; @@ -8509,10 +8490,10 @@ proto.gw.LoRaModulationConfig.deserializeBinaryFromReader = function(msg, reader /** * Class method variant: serializes the given message to binary data * (in protobuf wire format), writing to the given BinaryWriter. - * @param {!proto.gw.LoRaModulationConfig} message + * @param {!proto.gw.LoraModulationConfig} message * @param {!jspb.BinaryWriter} writer */ -proto.gw.LoRaModulationConfig.serializeBinaryToWriter = function(message, writer) { +proto.gw.LoraModulationConfig.serializeBinaryToWriter = function(message, writer) { message.serializeBinaryToWriter(writer); }; @@ -8521,7 +8502,7 @@ proto.gw.LoRaModulationConfig.serializeBinaryToWriter = function(message, writer * Serializes the message to binary data (in protobuf wire format). * @return {!Uint8Array} */ -proto.gw.LoRaModulationConfig.prototype.serializeBinary = function() { +proto.gw.LoraModulationConfig.prototype.serializeBinary = function() { var writer = new jspb.BinaryWriter(); this.serializeBinaryToWriter(writer); return writer.getResultBuffer(); @@ -8533,15 +8514,22 @@ proto.gw.LoRaModulationConfig.prototype.serializeBinary = function() { * writing to the given BinaryWriter. * @param {!jspb.BinaryWriter} writer */ -proto.gw.LoRaModulationConfig.prototype.serializeBinaryToWriter = function (writer) { +proto.gw.LoraModulationConfig.prototype.serializeBinaryToWriter = function (writer) { var f = undefined; - f = this.getBandwidth(); + f = this.getBandwidthLegacy(); if (f !== 0) { writer.writeUint32( 1, f ); } + f = this.getBandwidth(); + if (f !== 0) { + writer.writeUint32( + 3, + f + ); + } f = this.getSpreadingFactorsList(); if (f.length > 0) { writer.writePackedUint32( @@ -8554,46 +8542,61 @@ proto.gw.LoRaModulationConfig.prototype.serializeBinaryToWriter = function (writ /** * Creates a deep clone of this proto. No data is shared with the original. - * @return {!proto.gw.LoRaModulationConfig} The clone. + * @return {!proto.gw.LoraModulationConfig} The clone. */ -proto.gw.LoRaModulationConfig.prototype.cloneMessage = function() { - return /** @type {!proto.gw.LoRaModulationConfig} */ (jspb.Message.cloneMessage(this)); +proto.gw.LoraModulationConfig.prototype.cloneMessage = function() { + return /** @type {!proto.gw.LoraModulationConfig} */ (jspb.Message.cloneMessage(this)); }; /** - * optional uint32 bandwidth = 1; + * optional uint32 bandwidth_legacy = 1; * @return {number} */ -proto.gw.LoRaModulationConfig.prototype.getBandwidth = function() { +proto.gw.LoraModulationConfig.prototype.getBandwidthLegacy = function() { return /** @type {number} */ (jspb.Message.getFieldProto3(this, 1, 0)); }; /** @param {number} value */ -proto.gw.LoRaModulationConfig.prototype.setBandwidth = function(value) { +proto.gw.LoraModulationConfig.prototype.setBandwidthLegacy = function(value) { jspb.Message.setField(this, 1, value); }; +/** + * optional uint32 bandwidth = 3; + * @return {number} + */ +proto.gw.LoraModulationConfig.prototype.getBandwidth = function() { + return /** @type {number} */ (jspb.Message.getFieldProto3(this, 3, 0)); +}; + + +/** @param {number} value */ +proto.gw.LoraModulationConfig.prototype.setBandwidth = function(value) { + jspb.Message.setField(this, 3, value); +}; + + /** * repeated uint32 spreading_factors = 2; * If you change this array by adding, removing or replacing elements, or if you * replace the array itself, then you must call the setter to update it. * @return {!Array.} */ -proto.gw.LoRaModulationConfig.prototype.getSpreadingFactorsList = function() { +proto.gw.LoraModulationConfig.prototype.getSpreadingFactorsList = function() { return /** @type {!Array.} */ (jspb.Message.getField(this, 2)); }; /** @param {Array.} value */ -proto.gw.LoRaModulationConfig.prototype.setSpreadingFactorsList = function(value) { +proto.gw.LoraModulationConfig.prototype.setSpreadingFactorsList = function(value) { jspb.Message.setField(this, 2, value || []); }; -proto.gw.LoRaModulationConfig.prototype.clearSpreadingFactorsList = function() { +proto.gw.LoraModulationConfig.prototype.clearSpreadingFactorsList = function() { jspb.Message.setField(this, 2, []); }; @@ -8609,12 +8612,12 @@ proto.gw.LoRaModulationConfig.prototype.clearSpreadingFactorsList = function() { * @extends {jspb.Message} * @constructor */ -proto.gw.FSKModulationConfig = function(opt_data) { +proto.gw.FskModulationConfig = function(opt_data) { jspb.Message.initialize(this, opt_data, 0, -1, null, null); }; -goog.inherits(proto.gw.FSKModulationConfig, jspb.Message); +goog.inherits(proto.gw.FskModulationConfig, jspb.Message); if (goog.DEBUG && !COMPILED) { - proto.gw.FSKModulationConfig.displayName = 'proto.gw.FSKModulationConfig'; + proto.gw.FskModulationConfig.displayName = 'proto.gw.FskModulationConfig'; } @@ -8629,8 +8632,8 @@ if (jspb.Message.GENERATE_TO_OBJECT) { * for transitional soy proto support: http://goto/soy-param-migration * @return {!Object} */ -proto.gw.FSKModulationConfig.prototype.toObject = function(opt_includeInstance) { - return proto.gw.FSKModulationConfig.toObject(opt_includeInstance, this); +proto.gw.FskModulationConfig.prototype.toObject = function(opt_includeInstance) { + return proto.gw.FskModulationConfig.toObject(opt_includeInstance, this); }; @@ -8639,11 +8642,12 @@ proto.gw.FSKModulationConfig.prototype.toObject = function(opt_includeInstance) * @param {boolean|undefined} includeInstance Whether to include the JSPB * instance for transitional soy proto support: * http://goto/soy-param-migration - * @param {!proto.gw.FSKModulationConfig} msg The msg instance to transform. + * @param {!proto.gw.FskModulationConfig} msg The msg instance to transform. * @return {!Object} */ -proto.gw.FSKModulationConfig.toObject = function(includeInstance, msg) { +proto.gw.FskModulationConfig.toObject = function(includeInstance, msg) { var f, obj = { + bandwidthLegacy: msg.getBandwidthLegacy(), bandwidth: msg.getBandwidth(), bitrate: msg.getBitrate() }; @@ -8659,23 +8663,23 @@ proto.gw.FSKModulationConfig.toObject = function(includeInstance, msg) { /** * Deserializes binary data (in protobuf wire format). * @param {jspb.ByteSource} bytes The bytes to deserialize. - * @return {!proto.gw.FSKModulationConfig} + * @return {!proto.gw.FskModulationConfig} */ -proto.gw.FSKModulationConfig.deserializeBinary = function(bytes) { +proto.gw.FskModulationConfig.deserializeBinary = function(bytes) { var reader = new jspb.BinaryReader(bytes); - var msg = new proto.gw.FSKModulationConfig; - return proto.gw.FSKModulationConfig.deserializeBinaryFromReader(msg, reader); + var msg = new proto.gw.FskModulationConfig; + return proto.gw.FskModulationConfig.deserializeBinaryFromReader(msg, reader); }; /** * Deserializes binary data (in protobuf wire format) from the * given reader into the given message object. - * @param {!proto.gw.FSKModulationConfig} msg The message object to deserialize into. + * @param {!proto.gw.FskModulationConfig} msg The message object to deserialize into. * @param {!jspb.BinaryReader} reader The BinaryReader to use. - * @return {!proto.gw.FSKModulationConfig} + * @return {!proto.gw.FskModulationConfig} */ -proto.gw.FSKModulationConfig.deserializeBinaryFromReader = function(msg, reader) { +proto.gw.FskModulationConfig.deserializeBinaryFromReader = function(msg, reader) { while (reader.nextField()) { if (reader.isEndGroup()) { break; @@ -8683,6 +8687,10 @@ proto.gw.FSKModulationConfig.deserializeBinaryFromReader = function(msg, reader) var field = reader.getFieldNumber(); switch (field) { case 1: + var value = /** @type {number} */ (reader.readUint32()); + msg.setBandwidthLegacy(value); + break; + case 3: var value = /** @type {number} */ (reader.readUint32()); msg.setBandwidth(value); break; @@ -8702,10 +8710,10 @@ proto.gw.FSKModulationConfig.deserializeBinaryFromReader = function(msg, reader) /** * Class method variant: serializes the given message to binary data * (in protobuf wire format), writing to the given BinaryWriter. - * @param {!proto.gw.FSKModulationConfig} message + * @param {!proto.gw.FskModulationConfig} message * @param {!jspb.BinaryWriter} writer */ -proto.gw.FSKModulationConfig.serializeBinaryToWriter = function(message, writer) { +proto.gw.FskModulationConfig.serializeBinaryToWriter = function(message, writer) { message.serializeBinaryToWriter(writer); }; @@ -8714,7 +8722,7 @@ proto.gw.FSKModulationConfig.serializeBinaryToWriter = function(message, writer) * Serializes the message to binary data (in protobuf wire format). * @return {!Uint8Array} */ -proto.gw.FSKModulationConfig.prototype.serializeBinary = function() { +proto.gw.FskModulationConfig.prototype.serializeBinary = function() { var writer = new jspb.BinaryWriter(); this.serializeBinaryToWriter(writer); return writer.getResultBuffer(); @@ -8726,15 +8734,22 @@ proto.gw.FSKModulationConfig.prototype.serializeBinary = function() { * writing to the given BinaryWriter. * @param {!jspb.BinaryWriter} writer */ -proto.gw.FSKModulationConfig.prototype.serializeBinaryToWriter = function (writer) { +proto.gw.FskModulationConfig.prototype.serializeBinaryToWriter = function (writer) { var f = undefined; - f = this.getBandwidth(); + f = this.getBandwidthLegacy(); if (f !== 0) { writer.writeUint32( 1, f ); } + f = this.getBandwidth(); + if (f !== 0) { + writer.writeUint32( + 3, + f + ); + } f = this.getBitrate(); if (f !== 0) { writer.writeUint32( @@ -8747,39 +8762,54 @@ proto.gw.FSKModulationConfig.prototype.serializeBinaryToWriter = function (write /** * Creates a deep clone of this proto. No data is shared with the original. - * @return {!proto.gw.FSKModulationConfig} The clone. + * @return {!proto.gw.FskModulationConfig} The clone. */ -proto.gw.FSKModulationConfig.prototype.cloneMessage = function() { - return /** @type {!proto.gw.FSKModulationConfig} */ (jspb.Message.cloneMessage(this)); +proto.gw.FskModulationConfig.prototype.cloneMessage = function() { + return /** @type {!proto.gw.FskModulationConfig} */ (jspb.Message.cloneMessage(this)); }; /** - * optional uint32 bandwidth = 1; + * optional uint32 bandwidth_legacy = 1; * @return {number} */ -proto.gw.FSKModulationConfig.prototype.getBandwidth = function() { +proto.gw.FskModulationConfig.prototype.getBandwidthLegacy = function() { return /** @type {number} */ (jspb.Message.getFieldProto3(this, 1, 0)); }; /** @param {number} value */ -proto.gw.FSKModulationConfig.prototype.setBandwidth = function(value) { +proto.gw.FskModulationConfig.prototype.setBandwidthLegacy = function(value) { jspb.Message.setField(this, 1, value); }; +/** + * optional uint32 bandwidth = 3; + * @return {number} + */ +proto.gw.FskModulationConfig.prototype.getBandwidth = function() { + return /** @type {number} */ (jspb.Message.getFieldProto3(this, 3, 0)); +}; + + +/** @param {number} value */ +proto.gw.FskModulationConfig.prototype.setBandwidth = function(value) { + jspb.Message.setField(this, 3, value); +}; + + /** * optional uint32 bitrate = 2; * @return {number} */ -proto.gw.FSKModulationConfig.prototype.getBitrate = function() { +proto.gw.FskModulationConfig.prototype.getBitrate = function() { return /** @type {number} */ (jspb.Message.getFieldProto3(this, 2, 0)); }; /** @param {number} value */ -proto.gw.FSKModulationConfig.prototype.setBitrate = function(value) { +proto.gw.FskModulationConfig.prototype.setBitrate = function(value) { jspb.Message.setField(this, 2, value); }; @@ -8830,7 +8860,8 @@ proto.gw.GatewayCommandExecRequest.prototype.toObject = function(opt_includeInst */ proto.gw.GatewayCommandExecRequest.toObject = function(includeInstance, msg) { var f, obj = { - gatewayId: msg.getGatewayId_asB64(), + gatewayIdLegacy: msg.getGatewayIdLegacy_asB64(), + gatewayId: msg.getGatewayId(), command: msg.getCommand(), execid: msg.getExecid_asB64(), stdin: msg.getStdin_asB64(), @@ -8873,6 +8904,10 @@ proto.gw.GatewayCommandExecRequest.deserializeBinaryFromReader = function(msg, r switch (field) { case 1: var value = /** @type {!Uint8Array} */ (reader.readBytes()); + msg.setGatewayIdLegacy(value); + break; + case 6: + var value = /** @type {string} */ (reader.readString()); msg.setGatewayId(value); break; case 2: @@ -8931,13 +8966,20 @@ proto.gw.GatewayCommandExecRequest.prototype.serializeBinary = function() { */ proto.gw.GatewayCommandExecRequest.prototype.serializeBinaryToWriter = function (writer) { var f = undefined; - f = this.getGatewayId_asU8(); + f = this.getGatewayIdLegacy_asU8(); if (f.length > 0) { writer.writeBytes( 1, f ); } + f = this.getGatewayId(); + if (f.length > 0) { + writer.writeString( + 6, + f + ); + } f = this.getCommand(); if (f.length > 0) { writer.writeString( @@ -8976,44 +9018,59 @@ proto.gw.GatewayCommandExecRequest.prototype.cloneMessage = function() { /** - * optional bytes gateway_id = 1; + * optional bytes gateway_id_legacy = 1; * @return {!(string|Uint8Array)} */ -proto.gw.GatewayCommandExecRequest.prototype.getGatewayId = function() { +proto.gw.GatewayCommandExecRequest.prototype.getGatewayIdLegacy = function() { return /** @type {!(string|Uint8Array)} */ (jspb.Message.getFieldProto3(this, 1, "")); }; /** - * optional bytes gateway_id = 1; - * This is a type-conversion wrapper around `getGatewayId()` + * optional bytes gateway_id_legacy = 1; + * This is a type-conversion wrapper around `getGatewayIdLegacy()` * @return {string} */ -proto.gw.GatewayCommandExecRequest.prototype.getGatewayId_asB64 = function() { +proto.gw.GatewayCommandExecRequest.prototype.getGatewayIdLegacy_asB64 = function() { return /** @type {string} */ (jspb.Message.bytesAsB64( - this.getGatewayId())); + this.getGatewayIdLegacy())); }; /** - * optional bytes gateway_id = 1; + * optional bytes gateway_id_legacy = 1; * Note that Uint8Array is not supported on all browsers. * @see http://caniuse.com/Uint8Array - * This is a type-conversion wrapper around `getGatewayId()` + * This is a type-conversion wrapper around `getGatewayIdLegacy()` * @return {!Uint8Array} */ -proto.gw.GatewayCommandExecRequest.prototype.getGatewayId_asU8 = function() { +proto.gw.GatewayCommandExecRequest.prototype.getGatewayIdLegacy_asU8 = function() { return /** @type {!Uint8Array} */ (jspb.Message.bytesAsU8( - this.getGatewayId())); + this.getGatewayIdLegacy())); }; /** @param {!(string|Uint8Array)} value */ -proto.gw.GatewayCommandExecRequest.prototype.setGatewayId = function(value) { +proto.gw.GatewayCommandExecRequest.prototype.setGatewayIdLegacy = function(value) { jspb.Message.setField(this, 1, value); }; +/** + * optional string gateway_id = 6; + * @return {string} + */ +proto.gw.GatewayCommandExecRequest.prototype.getGatewayId = function() { + return /** @type {string} */ (jspb.Message.getFieldProto3(this, 6, "")); +}; + + +/** @param {string} value */ +proto.gw.GatewayCommandExecRequest.prototype.setGatewayId = function(value) { + jspb.Message.setField(this, 6, value); +}; + + /** * optional string command = 2; * @return {string} @@ -9166,7 +9223,8 @@ proto.gw.GatewayCommandExecResponse.prototype.toObject = function(opt_includeIns */ proto.gw.GatewayCommandExecResponse.toObject = function(includeInstance, msg) { var f, obj = { - gatewayId: msg.getGatewayId_asB64(), + gatewayIdLegacy: msg.getGatewayIdLegacy_asB64(), + gatewayId: msg.getGatewayId(), execId: msg.getExecId_asB64(), stdout: msg.getStdout_asB64(), stderr: msg.getStderr_asB64(), @@ -9209,6 +9267,10 @@ proto.gw.GatewayCommandExecResponse.deserializeBinaryFromReader = function(msg, switch (field) { case 1: var value = /** @type {!Uint8Array} */ (reader.readBytes()); + msg.setGatewayIdLegacy(value); + break; + case 6: + var value = /** @type {string} */ (reader.readString()); msg.setGatewayId(value); break; case 2: @@ -9265,13 +9327,20 @@ proto.gw.GatewayCommandExecResponse.prototype.serializeBinary = function() { */ proto.gw.GatewayCommandExecResponse.prototype.serializeBinaryToWriter = function (writer) { var f = undefined; - f = this.getGatewayId_asU8(); + f = this.getGatewayIdLegacy_asU8(); if (f.length > 0) { writer.writeBytes( 1, f ); } + f = this.getGatewayId(); + if (f.length > 0) { + writer.writeString( + 6, + f + ); + } f = this.getExecId_asU8(); if (f.length > 0) { writer.writeBytes( @@ -9313,44 +9382,59 @@ proto.gw.GatewayCommandExecResponse.prototype.cloneMessage = function() { /** - * optional bytes gateway_id = 1; + * optional bytes gateway_id_legacy = 1; * @return {!(string|Uint8Array)} */ -proto.gw.GatewayCommandExecResponse.prototype.getGatewayId = function() { +proto.gw.GatewayCommandExecResponse.prototype.getGatewayIdLegacy = function() { return /** @type {!(string|Uint8Array)} */ (jspb.Message.getFieldProto3(this, 1, "")); }; /** - * optional bytes gateway_id = 1; - * This is a type-conversion wrapper around `getGatewayId()` + * optional bytes gateway_id_legacy = 1; + * This is a type-conversion wrapper around `getGatewayIdLegacy()` * @return {string} */ -proto.gw.GatewayCommandExecResponse.prototype.getGatewayId_asB64 = function() { +proto.gw.GatewayCommandExecResponse.prototype.getGatewayIdLegacy_asB64 = function() { return /** @type {string} */ (jspb.Message.bytesAsB64( - this.getGatewayId())); + this.getGatewayIdLegacy())); }; /** - * optional bytes gateway_id = 1; + * optional bytes gateway_id_legacy = 1; * Note that Uint8Array is not supported on all browsers. * @see http://caniuse.com/Uint8Array - * This is a type-conversion wrapper around `getGatewayId()` + * This is a type-conversion wrapper around `getGatewayIdLegacy()` * @return {!Uint8Array} */ -proto.gw.GatewayCommandExecResponse.prototype.getGatewayId_asU8 = function() { +proto.gw.GatewayCommandExecResponse.prototype.getGatewayIdLegacy_asU8 = function() { return /** @type {!Uint8Array} */ (jspb.Message.bytesAsU8( - this.getGatewayId())); + this.getGatewayIdLegacy())); }; /** @param {!(string|Uint8Array)} value */ -proto.gw.GatewayCommandExecResponse.prototype.setGatewayId = function(value) { +proto.gw.GatewayCommandExecResponse.prototype.setGatewayIdLegacy = function(value) { jspb.Message.setField(this, 1, value); }; +/** + * optional string gateway_id = 6; + * @return {string} + */ +proto.gw.GatewayCommandExecResponse.prototype.getGatewayId = function() { + return /** @type {string} */ (jspb.Message.getFieldProto3(this, 6, "")); +}; + + +/** @param {string} value */ +proto.gw.GatewayCommandExecResponse.prototype.setGatewayId = function(value) { + jspb.Message.setField(this, 6, value); +}; + + /** * optional bytes exec_id = 2; * @return {!(string|Uint8Array)} @@ -9529,7 +9613,8 @@ proto.gw.RawPacketForwarderEvent.prototype.toObject = function(opt_includeInstan */ proto.gw.RawPacketForwarderEvent.toObject = function(includeInstance, msg) { var f, obj = { - gatewayId: msg.getGatewayId_asB64(), + gatewayIdLegacy: msg.getGatewayIdLegacy_asB64(), + gatewayId: msg.getGatewayId(), rawId: msg.getRawId_asB64(), payload: msg.getPayload_asB64() }; @@ -9570,6 +9655,10 @@ proto.gw.RawPacketForwarderEvent.deserializeBinaryFromReader = function(msg, rea switch (field) { case 1: var value = /** @type {!Uint8Array} */ (reader.readBytes()); + msg.setGatewayIdLegacy(value); + break; + case 4: + var value = /** @type {string} */ (reader.readString()); msg.setGatewayId(value); break; case 2: @@ -9618,13 +9707,20 @@ proto.gw.RawPacketForwarderEvent.prototype.serializeBinary = function() { */ proto.gw.RawPacketForwarderEvent.prototype.serializeBinaryToWriter = function (writer) { var f = undefined; - f = this.getGatewayId_asU8(); + f = this.getGatewayIdLegacy_asU8(); if (f.length > 0) { writer.writeBytes( 1, f ); } + f = this.getGatewayId(); + if (f.length > 0) { + writer.writeString( + 4, + f + ); + } f = this.getRawId_asU8(); if (f.length > 0) { writer.writeBytes( @@ -9652,44 +9748,59 @@ proto.gw.RawPacketForwarderEvent.prototype.cloneMessage = function() { /** - * optional bytes gateway_id = 1; + * optional bytes gateway_id_legacy = 1; * @return {!(string|Uint8Array)} */ -proto.gw.RawPacketForwarderEvent.prototype.getGatewayId = function() { +proto.gw.RawPacketForwarderEvent.prototype.getGatewayIdLegacy = function() { return /** @type {!(string|Uint8Array)} */ (jspb.Message.getFieldProto3(this, 1, "")); }; /** - * optional bytes gateway_id = 1; - * This is a type-conversion wrapper around `getGatewayId()` + * optional bytes gateway_id_legacy = 1; + * This is a type-conversion wrapper around `getGatewayIdLegacy()` * @return {string} */ -proto.gw.RawPacketForwarderEvent.prototype.getGatewayId_asB64 = function() { +proto.gw.RawPacketForwarderEvent.prototype.getGatewayIdLegacy_asB64 = function() { return /** @type {string} */ (jspb.Message.bytesAsB64( - this.getGatewayId())); + this.getGatewayIdLegacy())); }; /** - * optional bytes gateway_id = 1; + * optional bytes gateway_id_legacy = 1; * Note that Uint8Array is not supported on all browsers. * @see http://caniuse.com/Uint8Array - * This is a type-conversion wrapper around `getGatewayId()` + * This is a type-conversion wrapper around `getGatewayIdLegacy()` * @return {!Uint8Array} */ -proto.gw.RawPacketForwarderEvent.prototype.getGatewayId_asU8 = function() { +proto.gw.RawPacketForwarderEvent.prototype.getGatewayIdLegacy_asU8 = function() { return /** @type {!Uint8Array} */ (jspb.Message.bytesAsU8( - this.getGatewayId())); + this.getGatewayIdLegacy())); }; /** @param {!(string|Uint8Array)} value */ -proto.gw.RawPacketForwarderEvent.prototype.setGatewayId = function(value) { +proto.gw.RawPacketForwarderEvent.prototype.setGatewayIdLegacy = function(value) { jspb.Message.setField(this, 1, value); }; +/** + * optional string gateway_id = 4; + * @return {string} + */ +proto.gw.RawPacketForwarderEvent.prototype.getGatewayId = function() { + return /** @type {string} */ (jspb.Message.getFieldProto3(this, 4, "")); +}; + + +/** @param {string} value */ +proto.gw.RawPacketForwarderEvent.prototype.setGatewayId = function(value) { + jspb.Message.setField(this, 4, value); +}; + + /** * optional bytes raw_id = 2; * @return {!(string|Uint8Array)} @@ -9814,7 +9925,8 @@ proto.gw.RawPacketForwarderCommand.prototype.toObject = function(opt_includeInst */ proto.gw.RawPacketForwarderCommand.toObject = function(includeInstance, msg) { var f, obj = { - gatewayId: msg.getGatewayId_asB64(), + gatewayIdLegacy: msg.getGatewayIdLegacy_asB64(), + gatewayId: msg.getGatewayId(), rawId: msg.getRawId_asB64(), payload: msg.getPayload_asB64() }; @@ -9855,6 +9967,10 @@ proto.gw.RawPacketForwarderCommand.deserializeBinaryFromReader = function(msg, r switch (field) { case 1: var value = /** @type {!Uint8Array} */ (reader.readBytes()); + msg.setGatewayIdLegacy(value); + break; + case 4: + var value = /** @type {string} */ (reader.readString()); msg.setGatewayId(value); break; case 2: @@ -9903,13 +10019,20 @@ proto.gw.RawPacketForwarderCommand.prototype.serializeBinary = function() { */ proto.gw.RawPacketForwarderCommand.prototype.serializeBinaryToWriter = function (writer) { var f = undefined; - f = this.getGatewayId_asU8(); + f = this.getGatewayIdLegacy_asU8(); if (f.length > 0) { writer.writeBytes( 1, f ); } + f = this.getGatewayId(); + if (f.length > 0) { + writer.writeString( + 4, + f + ); + } f = this.getRawId_asU8(); if (f.length > 0) { writer.writeBytes( @@ -9937,44 +10060,59 @@ proto.gw.RawPacketForwarderCommand.prototype.cloneMessage = function() { /** - * optional bytes gateway_id = 1; + * optional bytes gateway_id_legacy = 1; * @return {!(string|Uint8Array)} */ -proto.gw.RawPacketForwarderCommand.prototype.getGatewayId = function() { +proto.gw.RawPacketForwarderCommand.prototype.getGatewayIdLegacy = function() { return /** @type {!(string|Uint8Array)} */ (jspb.Message.getFieldProto3(this, 1, "")); }; /** - * optional bytes gateway_id = 1; - * This is a type-conversion wrapper around `getGatewayId()` + * optional bytes gateway_id_legacy = 1; + * This is a type-conversion wrapper around `getGatewayIdLegacy()` * @return {string} */ -proto.gw.RawPacketForwarderCommand.prototype.getGatewayId_asB64 = function() { +proto.gw.RawPacketForwarderCommand.prototype.getGatewayIdLegacy_asB64 = function() { return /** @type {string} */ (jspb.Message.bytesAsB64( - this.getGatewayId())); + this.getGatewayIdLegacy())); }; /** - * optional bytes gateway_id = 1; + * optional bytes gateway_id_legacy = 1; * Note that Uint8Array is not supported on all browsers. * @see http://caniuse.com/Uint8Array - * This is a type-conversion wrapper around `getGatewayId()` + * This is a type-conversion wrapper around `getGatewayIdLegacy()` * @return {!Uint8Array} */ -proto.gw.RawPacketForwarderCommand.prototype.getGatewayId_asU8 = function() { +proto.gw.RawPacketForwarderCommand.prototype.getGatewayIdLegacy_asU8 = function() { return /** @type {!Uint8Array} */ (jspb.Message.bytesAsU8( - this.getGatewayId())); + this.getGatewayIdLegacy())); }; /** @param {!(string|Uint8Array)} value */ -proto.gw.RawPacketForwarderCommand.prototype.setGatewayId = function(value) { +proto.gw.RawPacketForwarderCommand.prototype.setGatewayIdLegacy = function(value) { jspb.Message.setField(this, 1, value); }; +/** + * optional string gateway_id = 4; + * @return {string} + */ +proto.gw.RawPacketForwarderCommand.prototype.getGatewayId = function() { + return /** @type {string} */ (jspb.Message.getFieldProto3(this, 4, "")); +}; + + +/** @param {string} value */ +proto.gw.RawPacketForwarderCommand.prototype.setGatewayId = function(value) { + jspb.Message.setField(this, 4, value); +}; + + /** * optional bytes raw_id = 2; * @return {!(string|Uint8Array)} @@ -10099,7 +10237,8 @@ proto.gw.ConnState.prototype.toObject = function(opt_includeInstance) { */ proto.gw.ConnState.toObject = function(includeInstance, msg) { var f, obj = { - gatewayId: msg.getGatewayId_asB64(), + gatewayIdLegacy: msg.getGatewayIdLegacy_asB64(), + gatewayId: msg.getGatewayId(), state: msg.getState() }; @@ -10139,6 +10278,10 @@ proto.gw.ConnState.deserializeBinaryFromReader = function(msg, reader) { switch (field) { case 1: var value = /** @type {!Uint8Array} */ (reader.readBytes()); + msg.setGatewayIdLegacy(value); + break; + case 3: + var value = /** @type {string} */ (reader.readString()); msg.setGatewayId(value); break; case 2: @@ -10183,13 +10326,20 @@ proto.gw.ConnState.prototype.serializeBinary = function() { */ proto.gw.ConnState.prototype.serializeBinaryToWriter = function (writer) { var f = undefined; - f = this.getGatewayId_asU8(); + f = this.getGatewayIdLegacy_asU8(); if (f.length > 0) { writer.writeBytes( 1, f ); } + f = this.getGatewayId(); + if (f.length > 0) { + writer.writeString( + 3, + f + ); + } f = this.getState(); if (f !== 0.0) { writer.writeEnum( @@ -10210,44 +10360,59 @@ proto.gw.ConnState.prototype.cloneMessage = function() { /** - * optional bytes gateway_id = 1; + * optional bytes gateway_id_legacy = 1; * @return {!(string|Uint8Array)} */ -proto.gw.ConnState.prototype.getGatewayId = function() { +proto.gw.ConnState.prototype.getGatewayIdLegacy = function() { return /** @type {!(string|Uint8Array)} */ (jspb.Message.getFieldProto3(this, 1, "")); }; /** - * optional bytes gateway_id = 1; - * This is a type-conversion wrapper around `getGatewayId()` + * optional bytes gateway_id_legacy = 1; + * This is a type-conversion wrapper around `getGatewayIdLegacy()` * @return {string} */ -proto.gw.ConnState.prototype.getGatewayId_asB64 = function() { +proto.gw.ConnState.prototype.getGatewayIdLegacy_asB64 = function() { return /** @type {string} */ (jspb.Message.bytesAsB64( - this.getGatewayId())); + this.getGatewayIdLegacy())); }; /** - * optional bytes gateway_id = 1; + * optional bytes gateway_id_legacy = 1; * Note that Uint8Array is not supported on all browsers. * @see http://caniuse.com/Uint8Array - * This is a type-conversion wrapper around `getGatewayId()` + * This is a type-conversion wrapper around `getGatewayIdLegacy()` * @return {!Uint8Array} */ -proto.gw.ConnState.prototype.getGatewayId_asU8 = function() { +proto.gw.ConnState.prototype.getGatewayIdLegacy_asU8 = function() { return /** @type {!Uint8Array} */ (jspb.Message.bytesAsU8( - this.getGatewayId())); + this.getGatewayIdLegacy())); }; /** @param {!(string|Uint8Array)} value */ -proto.gw.ConnState.prototype.setGatewayId = function(value) { +proto.gw.ConnState.prototype.setGatewayIdLegacy = function(value) { jspb.Message.setField(this, 1, value); }; +/** + * optional string gateway_id = 3; + * @return {string} + */ +proto.gw.ConnState.prototype.getGatewayId = function() { + return /** @type {string} */ (jspb.Message.getFieldProto3(this, 3, "")); +}; + + +/** @param {string} value */ +proto.gw.ConnState.prototype.setGatewayId = function(value) { + jspb.Message.setField(this, 3, value); +}; + + /** * optional State state = 2; * @return {!proto.gw.ConnState.State} diff --git a/api/proto/gw/gw.proto b/api/proto/gw/gw.proto index 06692358..cab4aa39 100644 --- a/api/proto/gw/gw.proto +++ b/api/proto/gw/gw.proto @@ -183,10 +183,11 @@ message PlainFineTimestamp { message GatewayStats { // Gateway ID. - bytes gateway_id = 1; + // Deprecated: use gateway_id. + bytes gateway_id_legacy = 1; - // Gateway IP. - string ip = 9; + // Gateway ID. + string gateway_id = 17; // Gateway time. google.protobuf.Timestamp time = 2; @@ -195,7 +196,7 @@ message GatewayStats { common.Location location = 3; // Gateway configuration version (this maps to the config_version sent - // by LoRa Server to the gateway). + // by ChirpStack to the gateway). string config_version = 4; // Number of radio packets received. @@ -213,10 +214,6 @@ message GatewayStats { // Additional gateway meta-data. map meta_data = 10; - // Stats ID (UUID). - // Unique identifier for the gateway stats. - bytes stats_id = 11; - // Tx packets per frequency. map tx_packets_per_frequency = 12; @@ -528,7 +525,11 @@ message DownlinkTxAckItem { message GatewayConfiguration { // Gateway ID. - bytes gateway_id = 1; + // Deprecated: use gateway_id. + bytes gateway_id_legacy = 1; + + // Gateway ID. + string gateway_id = 5; // Configuration version. string version = 2; @@ -544,15 +545,15 @@ message ChannelConfiguration { // Frequency (Hz). uint32 frequency = 1; - // Channel modulation. - common.Modulation modulation = 2; + // Modulation (deprecated). + common.Modulation modulation_legacy = 2; oneof modulation_config { // LoRa modulation config. - LoRaModulationConfig lora_modulation_config = 3; + LoraModulationConfig lora_modulation_config = 3; // FSK modulation config. - FSKModulationConfig fsk_modulation_config = 4; + FskModulationConfig fsk_modulation_config = 4; } // Board index. @@ -562,17 +563,25 @@ message ChannelConfiguration { uint32 demodulator = 6; } -message LoRaModulationConfig { - // Bandwidth. - uint32 bandwidth = 1; +message LoraModulationConfig { + // Bandwidth (kHz). + // Deprecated: use bandwidth. + uint32 bandwidth_legacy = 1; + + // Bandwidth (Hz). + uint32 bandwidth = 3; // Spreading-factors. repeated uint32 spreading_factors = 2; } -message FSKModulationConfig { - // Bandwidth. - uint32 bandwidth = 1; +message FskModulationConfig { + // Bandwidth (kHz). + // Deprecated: use bandwidth. + uint32 bandwidth_legacy = 1; + + // Bandwidth (Hz). + uint32 bandwidth = 3; // Bitrate. uint32 bitrate = 2; @@ -580,7 +589,11 @@ message FSKModulationConfig { message GatewayCommandExecRequest { // Gateway ID. - bytes gateway_id = 1; + // Deprecated: use gateway_id. + bytes gateway_id_legacy = 1; + + // Gateway ID. + string gateway_id = 6; // Command to execute. // This command must be pre-configured in the LoRa Gateway Bridge configuration. @@ -600,7 +613,11 @@ message GatewayCommandExecRequest { message GatewayCommandExecResponse { // Gateway ID. - bytes gateway_id = 1; + // Deprecated: use gateway_id. + bytes gateway_id_legacy = 1; + + // Gateway ID. + string gateway_id = 6; // Execution request ID (UUID). bytes exec_id = 2; @@ -620,7 +637,11 @@ message GatewayCommandExecResponse { // integrated with the ChirpStack Gateway Bridge. message RawPacketForwarderEvent { // Gateway ID. - bytes gateway_id = 1; + // Deprecated: use gateway_id. + bytes gateway_id_legacy = 1; + + // Gateway ID. + string gateway_id = 4; // Raw ID (UUID). bytes raw_id = 2; @@ -634,7 +655,11 @@ message RawPacketForwarderEvent { // integrated with the ChirpStack Gateway Bridge. message RawPacketForwarderCommand { // Gateway ID. - bytes gateway_id = 1; + // Deprecated: use gateway_id. + bytes gateway_id_legacy = 1; + + // Gateway ID. + string gateway_id = 4; // Raw ID (UUID). bytes raw_id = 2; @@ -646,7 +671,11 @@ message RawPacketForwarderCommand { // ConnState contains the connection state of a gateway. message ConnState { // Gateway ID. - bytes gateway_id = 1; + // Deprecated: use gateway_id. + bytes gateway_id_legacy = 1; + + // Gateway ID. + string gateway_id = 3; enum State { OFFLINE = 0; diff --git a/api/python/proto/chirpstack-api/gw/gw.proto b/api/python/proto/chirpstack-api/gw/gw.proto index e0a0e971..ada669f2 100644 --- a/api/python/proto/chirpstack-api/gw/gw.proto +++ b/api/python/proto/chirpstack-api/gw/gw.proto @@ -183,10 +183,11 @@ message PlainFineTimestamp { message GatewayStats { // Gateway ID. - bytes gateway_id = 1; + // Deprecated: use gateway_id. + bytes gateway_id_legacy = 1; - // Gateway IP. - string ip = 9; + // Gateway ID. + string gateway_id = 17; // Gateway time. google.protobuf.Timestamp time = 2; @@ -195,7 +196,7 @@ message GatewayStats { common.Location location = 3; // Gateway configuration version (this maps to the config_version sent - // by LoRa Server to the gateway). + // by ChirpStack to the gateway). string config_version = 4; // Number of radio packets received. @@ -213,10 +214,6 @@ message GatewayStats { // Additional gateway meta-data. map meta_data = 10; - // Stats ID (UUID). - // Unique identifier for the gateway stats. - bytes stats_id = 11; - // Tx packets per frequency. map tx_packets_per_frequency = 12; @@ -528,7 +525,11 @@ message DownlinkTxAckItem { message GatewayConfiguration { // Gateway ID. - bytes gateway_id = 1; + // Deprecated: use gateway_id. + bytes gateway_id_legacy = 1; + + // Gateway ID. + string gateway_id = 5; // Configuration version. string version = 2; @@ -544,15 +545,15 @@ message ChannelConfiguration { // Frequency (Hz). uint32 frequency = 1; - // Channel modulation. - common.Modulation modulation = 2; + // Modulation (deprecated). + common.Modulation modulation_legacy = 2; oneof modulation_config { // LoRa modulation config. - LoRaModulationConfig lora_modulation_config = 3; + LoraModulationConfig lora_modulation_config = 3; // FSK modulation config. - FSKModulationConfig fsk_modulation_config = 4; + FskModulationConfig fsk_modulation_config = 4; } // Board index. @@ -562,17 +563,25 @@ message ChannelConfiguration { uint32 demodulator = 6; } -message LoRaModulationConfig { - // Bandwidth. - uint32 bandwidth = 1; +message LoraModulationConfig { + // Bandwidth (kHz). + // Deprecated: use bandwidth. + uint32 bandwidth_legacy = 1; + + // Bandwidth (Hz). + uint32 bandwidth = 3; // Spreading-factors. repeated uint32 spreading_factors = 2; } -message FSKModulationConfig { - // Bandwidth. - uint32 bandwidth = 1; +message FskModulationConfig { + // Bandwidth (kHz). + // Deprecated: use bandwidth. + uint32 bandwidth_legacy = 1; + + // Bandwidth (Hz). + uint32 bandwidth = 3; // Bitrate. uint32 bitrate = 2; @@ -580,7 +589,11 @@ message FSKModulationConfig { message GatewayCommandExecRequest { // Gateway ID. - bytes gateway_id = 1; + // Deprecated: use gateway_id. + bytes gateway_id_legacy = 1; + + // Gateway ID. + string gateway_id = 6; // Command to execute. // This command must be pre-configured in the LoRa Gateway Bridge configuration. @@ -600,7 +613,11 @@ message GatewayCommandExecRequest { message GatewayCommandExecResponse { // Gateway ID. - bytes gateway_id = 1; + // Deprecated: use gateway_id. + bytes gateway_id_legacy = 1; + + // Gateway ID. + string gateway_id = 6; // Execution request ID (UUID). bytes exec_id = 2; @@ -620,7 +637,11 @@ message GatewayCommandExecResponse { // integrated with the ChirpStack Gateway Bridge. message RawPacketForwarderEvent { // Gateway ID. - bytes gateway_id = 1; + // Deprecated: use gateway_id. + bytes gateway_id_legacy = 1; + + // Gateway ID. + string gateway_id = 4; // Raw ID (UUID). bytes raw_id = 2; @@ -634,7 +655,11 @@ message RawPacketForwarderEvent { // integrated with the ChirpStack Gateway Bridge. message RawPacketForwarderCommand { // Gateway ID. - bytes gateway_id = 1; + // Deprecated: use gateway_id. + bytes gateway_id_legacy = 1; + + // Gateway ID. + string gateway_id = 4; // Raw ID (UUID). bytes raw_id = 2; @@ -646,7 +671,11 @@ message RawPacketForwarderCommand { // ConnState contains the connection state of a gateway. message ConnState { // Gateway ID. - bytes gateway_id = 1; + // Deprecated: use gateway_id. + bytes gateway_id_legacy = 1; + + // Gateway ID. + string gateway_id = 3; enum State { OFFLINE = 0; diff --git a/api/python/src/chirpstack_api/gw/gw_pb2.py b/api/python/src/chirpstack_api/gw/gw_pb2.py index a6fbf519..ef4023fc 100644 --- a/api/python/src/chirpstack_api/gw/gw_pb2.py +++ b/api/python/src/chirpstack_api/gw/gw_pb2.py @@ -19,7 +19,7 @@ from google.protobuf import duration_pb2 as google_dot_protobuf_dot_duration__pb from google.protobuf import struct_pb2 as google_dot_protobuf_dot_struct__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1a\x63hirpstack-api/gw/gw.proto\x12\x02gw\x1a\"chirpstack-api/common/common.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1cgoogle/protobuf/struct.proto\"\x95\x01\n\nModulation\x12&\n\x04lora\x18\x03 \x01(\x0b\x32\x16.gw.LoraModulationInfoH\x00\x12$\n\x03\x66sk\x18\x04 \x01(\x0b\x32\x15.gw.FskModulationInfoH\x00\x12+\n\x07lr_fhss\x18\x05 \x01(\x0b\x32\x18.gw.LrFhssModulationInfoH\x00\x42\x0c\n\nparameters\"\x8d\x02\n\x12UplinkTxInfoLegacy\x12\x11\n\tfrequency\x18\x01 \x01(\r\x12&\n\nmodulation\x18\x02 \x01(\x0e\x32\x12.common.Modulation\x12\x36\n\x14lora_modulation_info\x18\x03 \x01(\x0b\x32\x16.gw.LoraModulationInfoH\x00\x12\x34\n\x13\x66sk_modulation_info\x18\x04 \x01(\x0b\x32\x15.gw.FskModulationInfoH\x00\x12;\n\x17lr_fhss_modulation_info\x18\x05 \x01(\x0b\x32\x18.gw.LrFhssModulationInfoH\x00\x42\x11\n\x0fmodulation_info\"E\n\x0cUplinkTxInfo\x12\x11\n\tfrequency\x18\x01 \x01(\r\x12\"\n\nmodulation\x18\x02 \x01(\x0b\x32\x0e.gw.Modulation\"\x9c\x01\n\x12LoraModulationInfo\x12\x11\n\tbandwidth\x18\x01 \x01(\r\x12\x18\n\x10spreading_factor\x18\x02 \x01(\r\x12\x18\n\x10\x63ode_rate_legacy\x18\x03 \x01(\t\x12\x1f\n\tcode_rate\x18\x05 \x01(\x0e\x32\x0c.gw.CodeRate\x12\x1e\n\x16polarization_inversion\x18\x04 \x01(\x08\"B\n\x11\x46skModulationInfo\x12\x1b\n\x13\x66requency_deviation\x18\x01 \x01(\r\x12\x10\n\x08\x64\x61tarate\x18\x02 \x01(\r\"^\n\x14LrFhssModulationInfo\x12\x1f\n\x17operating_channel_width\x18\x01 \x01(\r\x12\x11\n\tcode_rate\x18\x02 \x01(\t\x12\x12\n\ngrid_steps\x18\x03 \x01(\r\"V\n\x16\x45ncryptedFineTimestamp\x12\x15\n\raes_key_index\x18\x01 \x01(\r\x12\x14\n\x0c\x65ncrypted_ns\x18\x02 \x01(\x0c\x12\x0f\n\x07\x66pga_id\x18\x03 \x01(\x0c\">\n\x12PlainFineTimestamp\x12(\n\x04time\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\"\x94\x07\n\x0cGatewayStats\x12\x12\n\ngateway_id\x18\x01 \x01(\x0c\x12\n\n\x02ip\x18\t \x01(\t\x12(\n\x04time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\"\n\x08location\x18\x03 \x01(\x0b\x32\x10.common.Location\x12\x16\n\x0e\x63onfig_version\x18\x04 \x01(\t\x12\x1b\n\x13rx_packets_received\x18\x05 \x01(\r\x12\x1e\n\x16rx_packets_received_ok\x18\x06 \x01(\r\x12\x1b\n\x13tx_packets_received\x18\x07 \x01(\r\x12\x1a\n\x12tx_packets_emitted\x18\x08 \x01(\r\x12\x31\n\tmeta_data\x18\n \x03(\x0b\x32\x1e.gw.GatewayStats.MetaDataEntry\x12\x10\n\x08stats_id\x18\x0b \x01(\x0c\x12M\n\x18tx_packets_per_frequency\x18\x0c \x03(\x0b\x32+.gw.GatewayStats.TxPacketsPerFrequencyEntry\x12M\n\x18rx_packets_per_frequency\x18\r \x03(\x0b\x32+.gw.GatewayStats.RxPacketsPerFrequencyEntry\x12\x39\n\x19tx_packets_per_modulation\x18\x0e \x03(\x0b\x32\x16.gw.PerModulationCount\x12\x39\n\x19rx_packets_per_modulation\x18\x0f \x03(\x0b\x32\x16.gw.PerModulationCount\x12G\n\x15tx_packets_per_status\x18\x10 \x03(\x0b\x32(.gw.GatewayStats.TxPacketsPerStatusEntry\x1a/\n\rMetaDataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a<\n\x1aTxPacketsPerFrequencyEntry\x12\x0b\n\x03key\x18\x01 \x01(\r\x12\r\n\x05value\x18\x02 \x01(\r:\x02\x38\x01\x1a<\n\x1aRxPacketsPerFrequencyEntry\x12\x0b\n\x03key\x18\x01 \x01(\r\x12\r\n\x05value\x18\x02 \x01(\r:\x02\x38\x01\x1a\x39\n\x17TxPacketsPerStatusEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\r:\x02\x38\x01\"G\n\x12PerModulationCount\x12\"\n\nmodulation\x18\x01 \x01(\x0b\x32\x0e.gw.Modulation\x12\r\n\x05\x63ount\x18\x02 \x01(\r\"\x80\x05\n\x12UplinkRxInfoLegacy\x12\x12\n\ngateway_id\x18\x01 \x01(\x0c\x12(\n\x04time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x37\n\x14time_since_gps_epoch\x18\x03 \x01(\x0b\x32\x19.google.protobuf.Duration\x12\x0c\n\x04rssi\x18\x05 \x01(\x05\x12\x10\n\x08lora_snr\x18\x06 \x01(\x01\x12\x0f\n\x07\x63hannel\x18\x07 \x01(\r\x12\x10\n\x08rf_chain\x18\x08 \x01(\r\x12\r\n\x05\x62oard\x18\t \x01(\r\x12\x0f\n\x07\x61ntenna\x18\n \x01(\r\x12\"\n\x08location\x18\x0b \x01(\x0b\x32\x10.common.Location\x12\x32\n\x13\x66ine_timestamp_type\x18\x0c \x01(\x0e\x32\x15.gw.FineTimestampType\x12>\n\x18\x65ncrypted_fine_timestamp\x18\r \x01(\x0b\x32\x1a.gw.EncryptedFineTimestampH\x00\x12\x36\n\x14plain_fine_timestamp\x18\x0e \x01(\x0b\x32\x16.gw.PlainFineTimestampH\x00\x12\x0f\n\x07\x63ontext\x18\x0f \x01(\x0c\x12\x11\n\tuplink_id\x18\x10 \x01(\x0c\x12!\n\ncrc_status\x18\x11 \x01(\x0e\x32\r.gw.CRCStatus\x12\x36\n\x08metadata\x18\x12 \x03(\x0b\x32$.gw.UplinkRxInfoLegacy.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x42\x10\n\x0e\x66ine_timestamp\"\xf1\x02\n\x0cUplinkRxInfo\x12\x12\n\ngateway_id\x18\x01 \x01(\t\x12\x11\n\tuplink_id\x18\x02 \x01(\r\x12(\n\x04time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x37\n\x14time_since_gps_epoch\x18\x04 \x01(\x0b\x32\x19.google.protobuf.Duration\x12<\n\x19\x66ine_time_since_gps_epoch\x18\x05 \x01(\x0b\x32\x19.google.protobuf.Duration\x12\x0c\n\x04rssi\x18\x06 \x01(\x05\x12\x0b\n\x03snr\x18\x07 \x01(\x02\x12\r\n\x05\x62oard\x18\x08 \x01(\r\x12\x0f\n\x07\x61ntenna\x18\t \x01(\r\x12\"\n\x08location\x18\n \x01(\x0b\x32\x10.common.Location\x12\x0f\n\x07\x63ontext\x18\x0b \x01(\x0c\x12)\n\x08metadata\x18\x0c \x01(\x0b\x32\x17.google.protobuf.Struct\"\x82\x04\n\x14\x44ownlinkTxInfoLegacy\x12\x12\n\ngateway_id\x18\x01 \x01(\x0c\x12\x11\n\tfrequency\x18\x05 \x01(\r\x12\r\n\x05power\x18\x06 \x01(\x05\x12&\n\nmodulation\x18\x07 \x01(\x0e\x32\x12.common.Modulation\x12\x36\n\x14lora_modulation_info\x18\x08 \x01(\x0b\x32\x16.gw.LoraModulationInfoH\x00\x12\x34\n\x13\x66sk_modulation_info\x18\t \x01(\x0b\x32\x15.gw.FskModulationInfoH\x00\x12\r\n\x05\x62oard\x18\n \x01(\r\x12\x0f\n\x07\x61ntenna\x18\x0b \x01(\r\x12\"\n\x06timing\x18\x0c \x01(\x0e\x32\x12.gw.DownlinkTiming\x12<\n\x17immediately_timing_info\x18\r \x01(\x0b\x32\x19.gw.ImmediatelyTimingInfoH\x01\x12\x30\n\x11\x64\x65lay_timing_info\x18\x0e \x01(\x0b\x32\x13.gw.DelayTimingInfoH\x01\x12\x37\n\x15gps_epoch_timing_info\x18\x0f \x01(\x0b\x32\x16.gw.GPSEpochTimingInfoH\x01\x12\x0f\n\x07\x63ontext\x18\x10 \x01(\x0c\x42\x11\n\x0fmodulation_infoB\r\n\x0btiming_info\"\xa3\x01\n\x0e\x44ownlinkTxInfo\x12\x11\n\tfrequency\x18\x01 \x01(\r\x12\r\n\x05power\x18\x02 \x01(\x05\x12\"\n\nmodulation\x18\x03 \x01(\x0b\x32\x0e.gw.Modulation\x12\r\n\x05\x62oard\x18\x04 \x01(\r\x12\x0f\n\x07\x61ntenna\x18\x05 \x01(\r\x12\x1a\n\x06timing\x18\x06 \x01(\x0b\x32\n.gw.Timing\x12\x0f\n\x07\x63ontext\x18\x07 \x01(\x0c\"\x9b\x01\n\x06Timing\x12\x30\n\x0bimmediately\x18\x01 \x01(\x0b\x32\x19.gw.ImmediatelyTimingInfoH\x00\x12$\n\x05\x64\x65lay\x18\x02 \x01(\x0b\x32\x13.gw.DelayTimingInfoH\x00\x12+\n\tgps_epoch\x18\x03 \x01(\x0b\x32\x16.gw.GPSEpochTimingInfoH\x00\x42\x0c\n\nparameters\"\x17\n\x15ImmediatelyTimingInfo\";\n\x0f\x44\x65layTimingInfo\x12(\n\x05\x64\x65lay\x18\x01 \x01(\x0b\x32\x19.google.protobuf.Duration\"M\n\x12GPSEpochTimingInfo\x12\x37\n\x14time_since_gps_epoch\x18\x01 \x01(\x0b\x32\x19.google.protobuf.Duration\"\xc8\x01\n\x0bUplinkFrame\x12\x13\n\x0bphy_payload\x18\x01 \x01(\x0c\x12.\n\x0etx_info_legacy\x18\x02 \x01(\x0b\x32\x16.gw.UplinkTxInfoLegacy\x12.\n\x0erx_info_legacy\x18\x03 \x01(\x0b\x32\x16.gw.UplinkRxInfoLegacy\x12!\n\x07tx_info\x18\x04 \x01(\x0b\x32\x10.gw.UplinkTxInfo\x12!\n\x07rx_info\x18\x05 \x01(\x0b\x32\x10.gw.UplinkRxInfo\"k\n\x0eUplinkFrameSet\x12\x13\n\x0bphy_payload\x18\x01 \x01(\x0c\x12!\n\x07tx_info\x18\x02 \x01(\x0b\x32\x10.gw.UplinkTxInfo\x12!\n\x07rx_info\x18\x03 \x03(\x0b\x32\x10.gw.UplinkRxInfo\"\x95\x01\n\rDownlinkFrame\x12\x13\n\x0b\x64ownlink_id\x18\x03 \x01(\r\x12\x1a\n\x12\x64ownlink_id_legacy\x18\x04 \x01(\x0c\x12$\n\x05items\x18\x05 \x03(\x0b\x32\x15.gw.DownlinkFrameItem\x12\x19\n\x11gateway_id_legacy\x18\x06 \x01(\x0c\x12\x12\n\ngateway_id\x18\x07 \x01(\t\"\x7f\n\x11\x44ownlinkFrameItem\x12\x13\n\x0bphy_payload\x18\x01 \x01(\x0c\x12\x30\n\x0etx_info_legacy\x18\x02 \x01(\x0b\x32\x18.gw.DownlinkTxInfoLegacy\x12#\n\x07tx_info\x18\x03 \x01(\x0b\x32\x12.gw.DownlinkTxInfo\"\x95\x01\n\rDownlinkTxAck\x12\x19\n\x11gateway_id_legacy\x18\x01 \x01(\x0c\x12\x12\n\ngateway_id\x18\x06 \x01(\t\x12\x13\n\x0b\x64ownlink_id\x18\x02 \x01(\r\x12\x1a\n\x12\x64ownlink_id_legacy\x18\x04 \x01(\x0c\x12$\n\x05items\x18\x05 \x03(\x0b\x32\x15.gw.DownlinkTxAckItem\"4\n\x11\x44ownlinkTxAckItem\x12\x1f\n\x06status\x18\x01 \x01(\x0e\x32\x0f.gw.TxAckStatus\"\x9a\x01\n\x14GatewayConfiguration\x12\x12\n\ngateway_id\x18\x01 \x01(\x0c\x12\x0f\n\x07version\x18\x02 \x01(\t\x12*\n\x08\x63hannels\x18\x03 \x03(\x0b\x32\x18.gw.ChannelConfiguration\x12\x31\n\x0estats_interval\x18\x04 \x01(\x0b\x32\x19.google.protobuf.Duration\"\x80\x02\n\x14\x43hannelConfiguration\x12\x11\n\tfrequency\x18\x01 \x01(\r\x12&\n\nmodulation\x18\x02 \x01(\x0e\x32\x12.common.Modulation\x12:\n\x16lora_modulation_config\x18\x03 \x01(\x0b\x32\x18.gw.LoRaModulationConfigH\x00\x12\x38\n\x15\x66sk_modulation_config\x18\x04 \x01(\x0b\x32\x17.gw.FSKModulationConfigH\x00\x12\r\n\x05\x62oard\x18\x05 \x01(\r\x12\x13\n\x0b\x64\x65modulator\x18\x06 \x01(\rB\x13\n\x11modulation_config\"D\n\x14LoRaModulationConfig\x12\x11\n\tbandwidth\x18\x01 \x01(\r\x12\x19\n\x11spreading_factors\x18\x02 \x03(\r\"9\n\x13\x46SKModulationConfig\x12\x11\n\tbandwidth\x18\x01 \x01(\r\x12\x0f\n\x07\x62itrate\x18\x02 \x01(\r\"\xd8\x01\n\x19GatewayCommandExecRequest\x12\x12\n\ngateway_id\x18\x01 \x01(\x0c\x12\x0f\n\x07\x63ommand\x18\x02 \x01(\t\x12\x0e\n\x06\x45xecId\x18\x03 \x01(\x0c\x12\r\n\x05stdin\x18\x04 \x01(\x0c\x12\x43\n\x0b\x65nvironment\x18\x05 \x03(\x0b\x32..gw.GatewayCommandExecRequest.EnvironmentEntry\x1a\x32\n\x10\x45nvironmentEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"p\n\x1aGatewayCommandExecResponse\x12\x12\n\ngateway_id\x18\x01 \x01(\x0c\x12\x0f\n\x07\x65xec_id\x18\x02 \x01(\x0c\x12\x0e\n\x06stdout\x18\x03 \x01(\x0c\x12\x0e\n\x06stderr\x18\x04 \x01(\x0c\x12\r\n\x05\x65rror\x18\x05 \x01(\t\"N\n\x17RawPacketForwarderEvent\x12\x12\n\ngateway_id\x18\x01 \x01(\x0c\x12\x0e\n\x06raw_id\x18\x02 \x01(\x0c\x12\x0f\n\x07payload\x18\x03 \x01(\x0c\"P\n\x19RawPacketForwarderCommand\x12\x12\n\ngateway_id\x18\x01 \x01(\x0c\x12\x0e\n\x06raw_id\x18\x02 \x01(\x0c\x12\x0f\n\x07payload\x18\x03 \x01(\x0c\"e\n\tConnState\x12\x12\n\ngateway_id\x18\x01 \x01(\x0c\x12\"\n\x05state\x18\x02 \x01(\x0e\x32\x13.gw.ConnState.State\" \n\x05State\x12\x0b\n\x07OFFLINE\x10\x00\x12\n\n\x06ONLINE\x10\x01*L\n\x08\x43odeRate\x12\x10\n\x0c\x43R_UNDEFINED\x10\x00\x12\n\n\x06\x43R_4_5\x10\x01\x12\n\n\x06\x43R_4_6\x10\x02\x12\n\n\x06\x43R_4_7\x10\x03\x12\n\n\x06\x43R_4_8\x10\x04*;\n\x0e\x44ownlinkTiming\x12\x0f\n\x0bIMMEDIATELY\x10\x00\x12\t\n\x05\x44\x45LAY\x10\x01\x12\r\n\tGPS_EPOCH\x10\x02*7\n\x11\x46ineTimestampType\x12\x08\n\x04NONE\x10\x00\x12\r\n\tENCRYPTED\x10\x01\x12\t\n\x05PLAIN\x10\x02*0\n\tCRCStatus\x12\n\n\x06NO_CRC\x10\x00\x12\x0b\n\x07\x42\x41\x44_CRC\x10\x01\x12\n\n\x06\x43RC_OK\x10\x02*\xbc\x01\n\x0bTxAckStatus\x12\x0b\n\x07IGNORED\x10\x00\x12\x06\n\x02OK\x10\x01\x12\x0c\n\x08TOO_LATE\x10\x02\x12\r\n\tTOO_EARLY\x10\x03\x12\x14\n\x10\x43OLLISION_PACKET\x10\x04\x12\x14\n\x10\x43OLLISION_BEACON\x10\x05\x12\x0b\n\x07TX_FREQ\x10\x06\x12\x0c\n\x08TX_POWER\x10\x07\x12\x10\n\x0cGPS_UNLOCKED\x10\x08\x12\x0e\n\nQUEUE_FULL\x10\t\x12\x12\n\x0eINTERNAL_ERROR\x10\nBU\n\x14io.chirpstack.api.gwB\x0cGatewayProtoP\x01Z-github.com/chirpstack/chirpstack/api/go/v4/gwb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1a\x63hirpstack-api/gw/gw.proto\x12\x02gw\x1a\"chirpstack-api/common/common.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1cgoogle/protobuf/struct.proto\"\x95\x01\n\nModulation\x12&\n\x04lora\x18\x03 \x01(\x0b\x32\x16.gw.LoraModulationInfoH\x00\x12$\n\x03\x66sk\x18\x04 \x01(\x0b\x32\x15.gw.FskModulationInfoH\x00\x12+\n\x07lr_fhss\x18\x05 \x01(\x0b\x32\x18.gw.LrFhssModulationInfoH\x00\x42\x0c\n\nparameters\"\x8d\x02\n\x12UplinkTxInfoLegacy\x12\x11\n\tfrequency\x18\x01 \x01(\r\x12&\n\nmodulation\x18\x02 \x01(\x0e\x32\x12.common.Modulation\x12\x36\n\x14lora_modulation_info\x18\x03 \x01(\x0b\x32\x16.gw.LoraModulationInfoH\x00\x12\x34\n\x13\x66sk_modulation_info\x18\x04 \x01(\x0b\x32\x15.gw.FskModulationInfoH\x00\x12;\n\x17lr_fhss_modulation_info\x18\x05 \x01(\x0b\x32\x18.gw.LrFhssModulationInfoH\x00\x42\x11\n\x0fmodulation_info\"E\n\x0cUplinkTxInfo\x12\x11\n\tfrequency\x18\x01 \x01(\r\x12\"\n\nmodulation\x18\x02 \x01(\x0b\x32\x0e.gw.Modulation\"\x9c\x01\n\x12LoraModulationInfo\x12\x11\n\tbandwidth\x18\x01 \x01(\r\x12\x18\n\x10spreading_factor\x18\x02 \x01(\r\x12\x18\n\x10\x63ode_rate_legacy\x18\x03 \x01(\t\x12\x1f\n\tcode_rate\x18\x05 \x01(\x0e\x32\x0c.gw.CodeRate\x12\x1e\n\x16polarization_inversion\x18\x04 \x01(\x08\"B\n\x11\x46skModulationInfo\x12\x1b\n\x13\x66requency_deviation\x18\x01 \x01(\r\x12\x10\n\x08\x64\x61tarate\x18\x02 \x01(\r\"^\n\x14LrFhssModulationInfo\x12\x1f\n\x17operating_channel_width\x18\x01 \x01(\r\x12\x11\n\tcode_rate\x18\x02 \x01(\t\x12\x12\n\ngrid_steps\x18\x03 \x01(\r\"V\n\x16\x45ncryptedFineTimestamp\x12\x15\n\raes_key_index\x18\x01 \x01(\r\x12\x14\n\x0c\x65ncrypted_ns\x18\x02 \x01(\x0c\x12\x0f\n\x07\x66pga_id\x18\x03 \x01(\x0c\">\n\x12PlainFineTimestamp\x12(\n\x04time\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\"\x91\x07\n\x0cGatewayStats\x12\x19\n\x11gateway_id_legacy\x18\x01 \x01(\x0c\x12\x12\n\ngateway_id\x18\x11 \x01(\t\x12(\n\x04time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\"\n\x08location\x18\x03 \x01(\x0b\x32\x10.common.Location\x12\x16\n\x0e\x63onfig_version\x18\x04 \x01(\t\x12\x1b\n\x13rx_packets_received\x18\x05 \x01(\r\x12\x1e\n\x16rx_packets_received_ok\x18\x06 \x01(\r\x12\x1b\n\x13tx_packets_received\x18\x07 \x01(\r\x12\x1a\n\x12tx_packets_emitted\x18\x08 \x01(\r\x12\x31\n\tmeta_data\x18\n \x03(\x0b\x32\x1e.gw.GatewayStats.MetaDataEntry\x12M\n\x18tx_packets_per_frequency\x18\x0c \x03(\x0b\x32+.gw.GatewayStats.TxPacketsPerFrequencyEntry\x12M\n\x18rx_packets_per_frequency\x18\r \x03(\x0b\x32+.gw.GatewayStats.RxPacketsPerFrequencyEntry\x12\x39\n\x19tx_packets_per_modulation\x18\x0e \x03(\x0b\x32\x16.gw.PerModulationCount\x12\x39\n\x19rx_packets_per_modulation\x18\x0f \x03(\x0b\x32\x16.gw.PerModulationCount\x12G\n\x15tx_packets_per_status\x18\x10 \x03(\x0b\x32(.gw.GatewayStats.TxPacketsPerStatusEntry\x1a/\n\rMetaDataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a<\n\x1aTxPacketsPerFrequencyEntry\x12\x0b\n\x03key\x18\x01 \x01(\r\x12\r\n\x05value\x18\x02 \x01(\r:\x02\x38\x01\x1a<\n\x1aRxPacketsPerFrequencyEntry\x12\x0b\n\x03key\x18\x01 \x01(\r\x12\r\n\x05value\x18\x02 \x01(\r:\x02\x38\x01\x1a\x39\n\x17TxPacketsPerStatusEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\r:\x02\x38\x01\"G\n\x12PerModulationCount\x12\"\n\nmodulation\x18\x01 \x01(\x0b\x32\x0e.gw.Modulation\x12\r\n\x05\x63ount\x18\x02 \x01(\r\"\x80\x05\n\x12UplinkRxInfoLegacy\x12\x12\n\ngateway_id\x18\x01 \x01(\x0c\x12(\n\x04time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x37\n\x14time_since_gps_epoch\x18\x03 \x01(\x0b\x32\x19.google.protobuf.Duration\x12\x0c\n\x04rssi\x18\x05 \x01(\x05\x12\x10\n\x08lora_snr\x18\x06 \x01(\x01\x12\x0f\n\x07\x63hannel\x18\x07 \x01(\r\x12\x10\n\x08rf_chain\x18\x08 \x01(\r\x12\r\n\x05\x62oard\x18\t \x01(\r\x12\x0f\n\x07\x61ntenna\x18\n \x01(\r\x12\"\n\x08location\x18\x0b \x01(\x0b\x32\x10.common.Location\x12\x32\n\x13\x66ine_timestamp_type\x18\x0c \x01(\x0e\x32\x15.gw.FineTimestampType\x12>\n\x18\x65ncrypted_fine_timestamp\x18\r \x01(\x0b\x32\x1a.gw.EncryptedFineTimestampH\x00\x12\x36\n\x14plain_fine_timestamp\x18\x0e \x01(\x0b\x32\x16.gw.PlainFineTimestampH\x00\x12\x0f\n\x07\x63ontext\x18\x0f \x01(\x0c\x12\x11\n\tuplink_id\x18\x10 \x01(\x0c\x12!\n\ncrc_status\x18\x11 \x01(\x0e\x32\r.gw.CRCStatus\x12\x36\n\x08metadata\x18\x12 \x03(\x0b\x32$.gw.UplinkRxInfoLegacy.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x42\x10\n\x0e\x66ine_timestamp\"\xf1\x02\n\x0cUplinkRxInfo\x12\x12\n\ngateway_id\x18\x01 \x01(\t\x12\x11\n\tuplink_id\x18\x02 \x01(\r\x12(\n\x04time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x37\n\x14time_since_gps_epoch\x18\x04 \x01(\x0b\x32\x19.google.protobuf.Duration\x12<\n\x19\x66ine_time_since_gps_epoch\x18\x05 \x01(\x0b\x32\x19.google.protobuf.Duration\x12\x0c\n\x04rssi\x18\x06 \x01(\x05\x12\x0b\n\x03snr\x18\x07 \x01(\x02\x12\r\n\x05\x62oard\x18\x08 \x01(\r\x12\x0f\n\x07\x61ntenna\x18\t \x01(\r\x12\"\n\x08location\x18\n \x01(\x0b\x32\x10.common.Location\x12\x0f\n\x07\x63ontext\x18\x0b \x01(\x0c\x12)\n\x08metadata\x18\x0c \x01(\x0b\x32\x17.google.protobuf.Struct\"\x82\x04\n\x14\x44ownlinkTxInfoLegacy\x12\x12\n\ngateway_id\x18\x01 \x01(\x0c\x12\x11\n\tfrequency\x18\x05 \x01(\r\x12\r\n\x05power\x18\x06 \x01(\x05\x12&\n\nmodulation\x18\x07 \x01(\x0e\x32\x12.common.Modulation\x12\x36\n\x14lora_modulation_info\x18\x08 \x01(\x0b\x32\x16.gw.LoraModulationInfoH\x00\x12\x34\n\x13\x66sk_modulation_info\x18\t \x01(\x0b\x32\x15.gw.FskModulationInfoH\x00\x12\r\n\x05\x62oard\x18\n \x01(\r\x12\x0f\n\x07\x61ntenna\x18\x0b \x01(\r\x12\"\n\x06timing\x18\x0c \x01(\x0e\x32\x12.gw.DownlinkTiming\x12<\n\x17immediately_timing_info\x18\r \x01(\x0b\x32\x19.gw.ImmediatelyTimingInfoH\x01\x12\x30\n\x11\x64\x65lay_timing_info\x18\x0e \x01(\x0b\x32\x13.gw.DelayTimingInfoH\x01\x12\x37\n\x15gps_epoch_timing_info\x18\x0f \x01(\x0b\x32\x16.gw.GPSEpochTimingInfoH\x01\x12\x0f\n\x07\x63ontext\x18\x10 \x01(\x0c\x42\x11\n\x0fmodulation_infoB\r\n\x0btiming_info\"\xa3\x01\n\x0e\x44ownlinkTxInfo\x12\x11\n\tfrequency\x18\x01 \x01(\r\x12\r\n\x05power\x18\x02 \x01(\x05\x12\"\n\nmodulation\x18\x03 \x01(\x0b\x32\x0e.gw.Modulation\x12\r\n\x05\x62oard\x18\x04 \x01(\r\x12\x0f\n\x07\x61ntenna\x18\x05 \x01(\r\x12\x1a\n\x06timing\x18\x06 \x01(\x0b\x32\n.gw.Timing\x12\x0f\n\x07\x63ontext\x18\x07 \x01(\x0c\"\x9b\x01\n\x06Timing\x12\x30\n\x0bimmediately\x18\x01 \x01(\x0b\x32\x19.gw.ImmediatelyTimingInfoH\x00\x12$\n\x05\x64\x65lay\x18\x02 \x01(\x0b\x32\x13.gw.DelayTimingInfoH\x00\x12+\n\tgps_epoch\x18\x03 \x01(\x0b\x32\x16.gw.GPSEpochTimingInfoH\x00\x42\x0c\n\nparameters\"\x17\n\x15ImmediatelyTimingInfo\";\n\x0f\x44\x65layTimingInfo\x12(\n\x05\x64\x65lay\x18\x01 \x01(\x0b\x32\x19.google.protobuf.Duration\"M\n\x12GPSEpochTimingInfo\x12\x37\n\x14time_since_gps_epoch\x18\x01 \x01(\x0b\x32\x19.google.protobuf.Duration\"\xc8\x01\n\x0bUplinkFrame\x12\x13\n\x0bphy_payload\x18\x01 \x01(\x0c\x12.\n\x0etx_info_legacy\x18\x02 \x01(\x0b\x32\x16.gw.UplinkTxInfoLegacy\x12.\n\x0erx_info_legacy\x18\x03 \x01(\x0b\x32\x16.gw.UplinkRxInfoLegacy\x12!\n\x07tx_info\x18\x04 \x01(\x0b\x32\x10.gw.UplinkTxInfo\x12!\n\x07rx_info\x18\x05 \x01(\x0b\x32\x10.gw.UplinkRxInfo\"k\n\x0eUplinkFrameSet\x12\x13\n\x0bphy_payload\x18\x01 \x01(\x0c\x12!\n\x07tx_info\x18\x02 \x01(\x0b\x32\x10.gw.UplinkTxInfo\x12!\n\x07rx_info\x18\x03 \x03(\x0b\x32\x10.gw.UplinkRxInfo\"\x95\x01\n\rDownlinkFrame\x12\x13\n\x0b\x64ownlink_id\x18\x03 \x01(\r\x12\x1a\n\x12\x64ownlink_id_legacy\x18\x04 \x01(\x0c\x12$\n\x05items\x18\x05 \x03(\x0b\x32\x15.gw.DownlinkFrameItem\x12\x19\n\x11gateway_id_legacy\x18\x06 \x01(\x0c\x12\x12\n\ngateway_id\x18\x07 \x01(\t\"\x7f\n\x11\x44ownlinkFrameItem\x12\x13\n\x0bphy_payload\x18\x01 \x01(\x0c\x12\x30\n\x0etx_info_legacy\x18\x02 \x01(\x0b\x32\x18.gw.DownlinkTxInfoLegacy\x12#\n\x07tx_info\x18\x03 \x01(\x0b\x32\x12.gw.DownlinkTxInfo\"\x95\x01\n\rDownlinkTxAck\x12\x19\n\x11gateway_id_legacy\x18\x01 \x01(\x0c\x12\x12\n\ngateway_id\x18\x06 \x01(\t\x12\x13\n\x0b\x64ownlink_id\x18\x02 \x01(\r\x12\x1a\n\x12\x64ownlink_id_legacy\x18\x04 \x01(\x0c\x12$\n\x05items\x18\x05 \x03(\x0b\x32\x15.gw.DownlinkTxAckItem\"4\n\x11\x44ownlinkTxAckItem\x12\x1f\n\x06status\x18\x01 \x01(\x0e\x32\x0f.gw.TxAckStatus\"\xb5\x01\n\x14GatewayConfiguration\x12\x19\n\x11gateway_id_legacy\x18\x01 \x01(\x0c\x12\x12\n\ngateway_id\x18\x05 \x01(\t\x12\x0f\n\x07version\x18\x02 \x01(\t\x12*\n\x08\x63hannels\x18\x03 \x03(\x0b\x32\x18.gw.ChannelConfiguration\x12\x31\n\x0estats_interval\x18\x04 \x01(\x0b\x32\x19.google.protobuf.Duration\"\x87\x02\n\x14\x43hannelConfiguration\x12\x11\n\tfrequency\x18\x01 \x01(\r\x12-\n\x11modulation_legacy\x18\x02 \x01(\x0e\x32\x12.common.Modulation\x12:\n\x16lora_modulation_config\x18\x03 \x01(\x0b\x32\x18.gw.LoraModulationConfigH\x00\x12\x38\n\x15\x66sk_modulation_config\x18\x04 \x01(\x0b\x32\x17.gw.FskModulationConfigH\x00\x12\r\n\x05\x62oard\x18\x05 \x01(\r\x12\x13\n\x0b\x64\x65modulator\x18\x06 \x01(\rB\x13\n\x11modulation_config\"^\n\x14LoraModulationConfig\x12\x18\n\x10\x62\x61ndwidth_legacy\x18\x01 \x01(\r\x12\x11\n\tbandwidth\x18\x03 \x01(\r\x12\x19\n\x11spreading_factors\x18\x02 \x03(\r\"S\n\x13\x46skModulationConfig\x12\x18\n\x10\x62\x61ndwidth_legacy\x18\x01 \x01(\r\x12\x11\n\tbandwidth\x18\x03 \x01(\r\x12\x0f\n\x07\x62itrate\x18\x02 \x01(\r\"\xf3\x01\n\x19GatewayCommandExecRequest\x12\x19\n\x11gateway_id_legacy\x18\x01 \x01(\x0c\x12\x12\n\ngateway_id\x18\x06 \x01(\t\x12\x0f\n\x07\x63ommand\x18\x02 \x01(\t\x12\x0e\n\x06\x45xecId\x18\x03 \x01(\x0c\x12\r\n\x05stdin\x18\x04 \x01(\x0c\x12\x43\n\x0b\x65nvironment\x18\x05 \x03(\x0b\x32..gw.GatewayCommandExecRequest.EnvironmentEntry\x1a\x32\n\x10\x45nvironmentEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\x8b\x01\n\x1aGatewayCommandExecResponse\x12\x19\n\x11gateway_id_legacy\x18\x01 \x01(\x0c\x12\x12\n\ngateway_id\x18\x06 \x01(\t\x12\x0f\n\x07\x65xec_id\x18\x02 \x01(\x0c\x12\x0e\n\x06stdout\x18\x03 \x01(\x0c\x12\x0e\n\x06stderr\x18\x04 \x01(\x0c\x12\r\n\x05\x65rror\x18\x05 \x01(\t\"i\n\x17RawPacketForwarderEvent\x12\x19\n\x11gateway_id_legacy\x18\x01 \x01(\x0c\x12\x12\n\ngateway_id\x18\x04 \x01(\t\x12\x0e\n\x06raw_id\x18\x02 \x01(\x0c\x12\x0f\n\x07payload\x18\x03 \x01(\x0c\"k\n\x19RawPacketForwarderCommand\x12\x19\n\x11gateway_id_legacy\x18\x01 \x01(\x0c\x12\x12\n\ngateway_id\x18\x04 \x01(\t\x12\x0e\n\x06raw_id\x18\x02 \x01(\x0c\x12\x0f\n\x07payload\x18\x03 \x01(\x0c\"\x80\x01\n\tConnState\x12\x19\n\x11gateway_id_legacy\x18\x01 \x01(\x0c\x12\x12\n\ngateway_id\x18\x03 \x01(\t\x12\"\n\x05state\x18\x02 \x01(\x0e\x32\x13.gw.ConnState.State\" \n\x05State\x12\x0b\n\x07OFFLINE\x10\x00\x12\n\n\x06ONLINE\x10\x01*L\n\x08\x43odeRate\x12\x10\n\x0c\x43R_UNDEFINED\x10\x00\x12\n\n\x06\x43R_4_5\x10\x01\x12\n\n\x06\x43R_4_6\x10\x02\x12\n\n\x06\x43R_4_7\x10\x03\x12\n\n\x06\x43R_4_8\x10\x04*;\n\x0e\x44ownlinkTiming\x12\x0f\n\x0bIMMEDIATELY\x10\x00\x12\t\n\x05\x44\x45LAY\x10\x01\x12\r\n\tGPS_EPOCH\x10\x02*7\n\x11\x46ineTimestampType\x12\x08\n\x04NONE\x10\x00\x12\r\n\tENCRYPTED\x10\x01\x12\t\n\x05PLAIN\x10\x02*0\n\tCRCStatus\x12\n\n\x06NO_CRC\x10\x00\x12\x0b\n\x07\x42\x41\x44_CRC\x10\x01\x12\n\n\x06\x43RC_OK\x10\x02*\xbc\x01\n\x0bTxAckStatus\x12\x0b\n\x07IGNORED\x10\x00\x12\x06\n\x02OK\x10\x01\x12\x0c\n\x08TOO_LATE\x10\x02\x12\r\n\tTOO_EARLY\x10\x03\x12\x14\n\x10\x43OLLISION_PACKET\x10\x04\x12\x14\n\x10\x43OLLISION_BEACON\x10\x05\x12\x0b\n\x07TX_FREQ\x10\x06\x12\x0c\n\x08TX_POWER\x10\x07\x12\x10\n\x0cGPS_UNLOCKED\x10\x08\x12\x0e\n\nQUEUE_FULL\x10\t\x12\x12\n\x0eINTERNAL_ERROR\x10\nBU\n\x14io.chirpstack.api.gwB\x0cGatewayProtoP\x01Z-github.com/chirpstack/chirpstack/api/go/v4/gwb\x06proto3') _CODERATE = DESCRIPTOR.enum_types_by_name['CodeRate'] CodeRate = enum_type_wrapper.EnumTypeWrapper(_CODERATE) @@ -89,8 +89,8 @@ _DOWNLINKTXACK = DESCRIPTOR.message_types_by_name['DownlinkTxAck'] _DOWNLINKTXACKITEM = DESCRIPTOR.message_types_by_name['DownlinkTxAckItem'] _GATEWAYCONFIGURATION = DESCRIPTOR.message_types_by_name['GatewayConfiguration'] _CHANNELCONFIGURATION = DESCRIPTOR.message_types_by_name['ChannelConfiguration'] -_LORAMODULATIONCONFIG = DESCRIPTOR.message_types_by_name['LoRaModulationConfig'] -_FSKMODULATIONCONFIG = DESCRIPTOR.message_types_by_name['FSKModulationConfig'] +_LORAMODULATIONCONFIG = DESCRIPTOR.message_types_by_name['LoraModulationConfig'] +_FSKMODULATIONCONFIG = DESCRIPTOR.message_types_by_name['FskModulationConfig'] _GATEWAYCOMMANDEXECREQUEST = DESCRIPTOR.message_types_by_name['GatewayCommandExecRequest'] _GATEWAYCOMMANDEXECREQUEST_ENVIRONMENTENTRY = _GATEWAYCOMMANDEXECREQUEST.nested_types_by_name['EnvironmentEntry'] _GATEWAYCOMMANDEXECRESPONSE = DESCRIPTOR.message_types_by_name['GatewayCommandExecResponse'] @@ -320,19 +320,19 @@ ChannelConfiguration = _reflection.GeneratedProtocolMessageType('ChannelConfigur }) _sym_db.RegisterMessage(ChannelConfiguration) -LoRaModulationConfig = _reflection.GeneratedProtocolMessageType('LoRaModulationConfig', (_message.Message,), { +LoraModulationConfig = _reflection.GeneratedProtocolMessageType('LoraModulationConfig', (_message.Message,), { 'DESCRIPTOR' : _LORAMODULATIONCONFIG, '__module__' : 'chirpstack_api.gw.gw_pb2' - # @@protoc_insertion_point(class_scope:gw.LoRaModulationConfig) + # @@protoc_insertion_point(class_scope:gw.LoraModulationConfig) }) -_sym_db.RegisterMessage(LoRaModulationConfig) +_sym_db.RegisterMessage(LoraModulationConfig) -FSKModulationConfig = _reflection.GeneratedProtocolMessageType('FSKModulationConfig', (_message.Message,), { +FskModulationConfig = _reflection.GeneratedProtocolMessageType('FskModulationConfig', (_message.Message,), { 'DESCRIPTOR' : _FSKMODULATIONCONFIG, '__module__' : 'chirpstack_api.gw.gw_pb2' - # @@protoc_insertion_point(class_scope:gw.FSKModulationConfig) + # @@protoc_insertion_point(class_scope:gw.FskModulationConfig) }) -_sym_db.RegisterMessage(FSKModulationConfig) +_sym_db.RegisterMessage(FskModulationConfig) GatewayCommandExecRequest = _reflection.GeneratedProtocolMessageType('GatewayCommandExecRequest', (_message.Message,), { @@ -393,16 +393,16 @@ if _descriptor._USE_C_DESCRIPTORS == False: _UPLINKRXINFOLEGACY_METADATAENTRY._serialized_options = b'8\001' _GATEWAYCOMMANDEXECREQUEST_ENVIRONMENTENTRY._options = None _GATEWAYCOMMANDEXECREQUEST_ENVIRONMENTENTRY._serialized_options = b'8\001' - _CODERATE._serialized_start=6090 - _CODERATE._serialized_end=6166 - _DOWNLINKTIMING._serialized_start=6168 - _DOWNLINKTIMING._serialized_end=6227 - _FINETIMESTAMPTYPE._serialized_start=6229 - _FINETIMESTAMPTYPE._serialized_end=6284 - _CRCSTATUS._serialized_start=6286 - _CRCSTATUS._serialized_end=6334 - _TXACKSTATUS._serialized_start=6337 - _TXACKSTATUS._serialized_end=6525 + _CODERATE._serialized_start=6310 + _CODERATE._serialized_end=6386 + _DOWNLINKTIMING._serialized_start=6388 + _DOWNLINKTIMING._serialized_end=6447 + _FINETIMESTAMPTYPE._serialized_start=6449 + _FINETIMESTAMPTYPE._serialized_end=6504 + _CRCSTATUS._serialized_start=6506 + _CRCSTATUS._serialized_end=6554 + _TXACKSTATUS._serialized_start=6557 + _TXACKSTATUS._serialized_end=6745 _MODULATION._serialized_start=166 _MODULATION._serialized_end=315 _UPLINKTXINFOLEGACY._serialized_start=318 @@ -420,67 +420,67 @@ if _descriptor._USE_C_DESCRIPTORS == False: _PLAINFINETIMESTAMP._serialized_start=1071 _PLAINFINETIMESTAMP._serialized_end=1133 _GATEWAYSTATS._serialized_start=1136 - _GATEWAYSTATS._serialized_end=2052 - _GATEWAYSTATS_METADATAENTRY._serialized_start=1822 - _GATEWAYSTATS_METADATAENTRY._serialized_end=1869 - _GATEWAYSTATS_TXPACKETSPERFREQUENCYENTRY._serialized_start=1871 - _GATEWAYSTATS_TXPACKETSPERFREQUENCYENTRY._serialized_end=1931 - _GATEWAYSTATS_RXPACKETSPERFREQUENCYENTRY._serialized_start=1933 - _GATEWAYSTATS_RXPACKETSPERFREQUENCYENTRY._serialized_end=1993 - _GATEWAYSTATS_TXPACKETSPERSTATUSENTRY._serialized_start=1995 - _GATEWAYSTATS_TXPACKETSPERSTATUSENTRY._serialized_end=2052 - _PERMODULATIONCOUNT._serialized_start=2054 - _PERMODULATIONCOUNT._serialized_end=2125 - _UPLINKRXINFOLEGACY._serialized_start=2128 - _UPLINKRXINFOLEGACY._serialized_end=2768 - _UPLINKRXINFOLEGACY_METADATAENTRY._serialized_start=2703 - _UPLINKRXINFOLEGACY_METADATAENTRY._serialized_end=2750 - _UPLINKRXINFO._serialized_start=2771 - _UPLINKRXINFO._serialized_end=3140 - _DOWNLINKTXINFOLEGACY._serialized_start=3143 - _DOWNLINKTXINFOLEGACY._serialized_end=3657 - _DOWNLINKTXINFO._serialized_start=3660 - _DOWNLINKTXINFO._serialized_end=3823 - _TIMING._serialized_start=3826 - _TIMING._serialized_end=3981 - _IMMEDIATELYTIMINGINFO._serialized_start=3983 - _IMMEDIATELYTIMINGINFO._serialized_end=4006 - _DELAYTIMINGINFO._serialized_start=4008 - _DELAYTIMINGINFO._serialized_end=4067 - _GPSEPOCHTIMINGINFO._serialized_start=4069 - _GPSEPOCHTIMINGINFO._serialized_end=4146 - _UPLINKFRAME._serialized_start=4149 - _UPLINKFRAME._serialized_end=4349 - _UPLINKFRAMESET._serialized_start=4351 - _UPLINKFRAMESET._serialized_end=4458 - _DOWNLINKFRAME._serialized_start=4461 - _DOWNLINKFRAME._serialized_end=4610 - _DOWNLINKFRAMEITEM._serialized_start=4612 - _DOWNLINKFRAMEITEM._serialized_end=4739 - _DOWNLINKTXACK._serialized_start=4742 - _DOWNLINKTXACK._serialized_end=4891 - _DOWNLINKTXACKITEM._serialized_start=4893 - _DOWNLINKTXACKITEM._serialized_end=4945 - _GATEWAYCONFIGURATION._serialized_start=4948 - _GATEWAYCONFIGURATION._serialized_end=5102 - _CHANNELCONFIGURATION._serialized_start=5105 - _CHANNELCONFIGURATION._serialized_end=5361 - _LORAMODULATIONCONFIG._serialized_start=5363 - _LORAMODULATIONCONFIG._serialized_end=5431 - _FSKMODULATIONCONFIG._serialized_start=5433 - _FSKMODULATIONCONFIG._serialized_end=5490 - _GATEWAYCOMMANDEXECREQUEST._serialized_start=5493 - _GATEWAYCOMMANDEXECREQUEST._serialized_end=5709 - _GATEWAYCOMMANDEXECREQUEST_ENVIRONMENTENTRY._serialized_start=5659 - _GATEWAYCOMMANDEXECREQUEST_ENVIRONMENTENTRY._serialized_end=5709 - _GATEWAYCOMMANDEXECRESPONSE._serialized_start=5711 - _GATEWAYCOMMANDEXECRESPONSE._serialized_end=5823 - _RAWPACKETFORWARDEREVENT._serialized_start=5825 - _RAWPACKETFORWARDEREVENT._serialized_end=5903 - _RAWPACKETFORWARDERCOMMAND._serialized_start=5905 - _RAWPACKETFORWARDERCOMMAND._serialized_end=5985 - _CONNSTATE._serialized_start=5987 - _CONNSTATE._serialized_end=6088 - _CONNSTATE_STATE._serialized_start=6056 - _CONNSTATE_STATE._serialized_end=6088 + _GATEWAYSTATS._serialized_end=2049 + _GATEWAYSTATS_METADATAENTRY._serialized_start=1819 + _GATEWAYSTATS_METADATAENTRY._serialized_end=1866 + _GATEWAYSTATS_TXPACKETSPERFREQUENCYENTRY._serialized_start=1868 + _GATEWAYSTATS_TXPACKETSPERFREQUENCYENTRY._serialized_end=1928 + _GATEWAYSTATS_RXPACKETSPERFREQUENCYENTRY._serialized_start=1930 + _GATEWAYSTATS_RXPACKETSPERFREQUENCYENTRY._serialized_end=1990 + _GATEWAYSTATS_TXPACKETSPERSTATUSENTRY._serialized_start=1992 + _GATEWAYSTATS_TXPACKETSPERSTATUSENTRY._serialized_end=2049 + _PERMODULATIONCOUNT._serialized_start=2051 + _PERMODULATIONCOUNT._serialized_end=2122 + _UPLINKRXINFOLEGACY._serialized_start=2125 + _UPLINKRXINFOLEGACY._serialized_end=2765 + _UPLINKRXINFOLEGACY_METADATAENTRY._serialized_start=2700 + _UPLINKRXINFOLEGACY_METADATAENTRY._serialized_end=2747 + _UPLINKRXINFO._serialized_start=2768 + _UPLINKRXINFO._serialized_end=3137 + _DOWNLINKTXINFOLEGACY._serialized_start=3140 + _DOWNLINKTXINFOLEGACY._serialized_end=3654 + _DOWNLINKTXINFO._serialized_start=3657 + _DOWNLINKTXINFO._serialized_end=3820 + _TIMING._serialized_start=3823 + _TIMING._serialized_end=3978 + _IMMEDIATELYTIMINGINFO._serialized_start=3980 + _IMMEDIATELYTIMINGINFO._serialized_end=4003 + _DELAYTIMINGINFO._serialized_start=4005 + _DELAYTIMINGINFO._serialized_end=4064 + _GPSEPOCHTIMINGINFO._serialized_start=4066 + _GPSEPOCHTIMINGINFO._serialized_end=4143 + _UPLINKFRAME._serialized_start=4146 + _UPLINKFRAME._serialized_end=4346 + _UPLINKFRAMESET._serialized_start=4348 + _UPLINKFRAMESET._serialized_end=4455 + _DOWNLINKFRAME._serialized_start=4458 + _DOWNLINKFRAME._serialized_end=4607 + _DOWNLINKFRAMEITEM._serialized_start=4609 + _DOWNLINKFRAMEITEM._serialized_end=4736 + _DOWNLINKTXACK._serialized_start=4739 + _DOWNLINKTXACK._serialized_end=4888 + _DOWNLINKTXACKITEM._serialized_start=4890 + _DOWNLINKTXACKITEM._serialized_end=4942 + _GATEWAYCONFIGURATION._serialized_start=4945 + _GATEWAYCONFIGURATION._serialized_end=5126 + _CHANNELCONFIGURATION._serialized_start=5129 + _CHANNELCONFIGURATION._serialized_end=5392 + _LORAMODULATIONCONFIG._serialized_start=5394 + _LORAMODULATIONCONFIG._serialized_end=5488 + _FSKMODULATIONCONFIG._serialized_start=5490 + _FSKMODULATIONCONFIG._serialized_end=5573 + _GATEWAYCOMMANDEXECREQUEST._serialized_start=5576 + _GATEWAYCOMMANDEXECREQUEST._serialized_end=5819 + _GATEWAYCOMMANDEXECREQUEST_ENVIRONMENTENTRY._serialized_start=5769 + _GATEWAYCOMMANDEXECREQUEST_ENVIRONMENTENTRY._serialized_end=5819 + _GATEWAYCOMMANDEXECRESPONSE._serialized_start=5822 + _GATEWAYCOMMANDEXECRESPONSE._serialized_end=5961 + _RAWPACKETFORWARDEREVENT._serialized_start=5963 + _RAWPACKETFORWARDEREVENT._serialized_end=6068 + _RAWPACKETFORWARDERCOMMAND._serialized_start=6070 + _RAWPACKETFORWARDERCOMMAND._serialized_end=6177 + _CONNSTATE._serialized_start=6180 + _CONNSTATE._serialized_end=6308 + _CONNSTATE_STATE._serialized_start=6276 + _CONNSTATE_STATE._serialized_end=6308 # @@protoc_insertion_point(module_scope) diff --git a/api/rust/Cargo.lock b/api/rust/Cargo.lock index 32cb0782..c53398a1 100644 --- a/api/rust/Cargo.lock +++ b/api/rust/Cargo.lock @@ -121,7 +121,7 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "chirpstack_api" -version = "4.0.0-test.7" +version = "4.0.0-test.10" dependencies = [ "hex", "pbjson", diff --git a/api/rust/proto/chirpstack/gw/gw.proto b/api/rust/proto/chirpstack/gw/gw.proto index 06692358..cab4aa39 100644 --- a/api/rust/proto/chirpstack/gw/gw.proto +++ b/api/rust/proto/chirpstack/gw/gw.proto @@ -183,10 +183,11 @@ message PlainFineTimestamp { message GatewayStats { // Gateway ID. - bytes gateway_id = 1; + // Deprecated: use gateway_id. + bytes gateway_id_legacy = 1; - // Gateway IP. - string ip = 9; + // Gateway ID. + string gateway_id = 17; // Gateway time. google.protobuf.Timestamp time = 2; @@ -195,7 +196,7 @@ message GatewayStats { common.Location location = 3; // Gateway configuration version (this maps to the config_version sent - // by LoRa Server to the gateway). + // by ChirpStack to the gateway). string config_version = 4; // Number of radio packets received. @@ -213,10 +214,6 @@ message GatewayStats { // Additional gateway meta-data. map meta_data = 10; - // Stats ID (UUID). - // Unique identifier for the gateway stats. - bytes stats_id = 11; - // Tx packets per frequency. map tx_packets_per_frequency = 12; @@ -528,7 +525,11 @@ message DownlinkTxAckItem { message GatewayConfiguration { // Gateway ID. - bytes gateway_id = 1; + // Deprecated: use gateway_id. + bytes gateway_id_legacy = 1; + + // Gateway ID. + string gateway_id = 5; // Configuration version. string version = 2; @@ -544,15 +545,15 @@ message ChannelConfiguration { // Frequency (Hz). uint32 frequency = 1; - // Channel modulation. - common.Modulation modulation = 2; + // Modulation (deprecated). + common.Modulation modulation_legacy = 2; oneof modulation_config { // LoRa modulation config. - LoRaModulationConfig lora_modulation_config = 3; + LoraModulationConfig lora_modulation_config = 3; // FSK modulation config. - FSKModulationConfig fsk_modulation_config = 4; + FskModulationConfig fsk_modulation_config = 4; } // Board index. @@ -562,17 +563,25 @@ message ChannelConfiguration { uint32 demodulator = 6; } -message LoRaModulationConfig { - // Bandwidth. - uint32 bandwidth = 1; +message LoraModulationConfig { + // Bandwidth (kHz). + // Deprecated: use bandwidth. + uint32 bandwidth_legacy = 1; + + // Bandwidth (Hz). + uint32 bandwidth = 3; // Spreading-factors. repeated uint32 spreading_factors = 2; } -message FSKModulationConfig { - // Bandwidth. - uint32 bandwidth = 1; +message FskModulationConfig { + // Bandwidth (kHz). + // Deprecated: use bandwidth. + uint32 bandwidth_legacy = 1; + + // Bandwidth (Hz). + uint32 bandwidth = 3; // Bitrate. uint32 bitrate = 2; @@ -580,7 +589,11 @@ message FSKModulationConfig { message GatewayCommandExecRequest { // Gateway ID. - bytes gateway_id = 1; + // Deprecated: use gateway_id. + bytes gateway_id_legacy = 1; + + // Gateway ID. + string gateway_id = 6; // Command to execute. // This command must be pre-configured in the LoRa Gateway Bridge configuration. @@ -600,7 +613,11 @@ message GatewayCommandExecRequest { message GatewayCommandExecResponse { // Gateway ID. - bytes gateway_id = 1; + // Deprecated: use gateway_id. + bytes gateway_id_legacy = 1; + + // Gateway ID. + string gateway_id = 6; // Execution request ID (UUID). bytes exec_id = 2; @@ -620,7 +637,11 @@ message GatewayCommandExecResponse { // integrated with the ChirpStack Gateway Bridge. message RawPacketForwarderEvent { // Gateway ID. - bytes gateway_id = 1; + // Deprecated: use gateway_id. + bytes gateway_id_legacy = 1; + + // Gateway ID. + string gateway_id = 4; // Raw ID (UUID). bytes raw_id = 2; @@ -634,7 +655,11 @@ message RawPacketForwarderEvent { // integrated with the ChirpStack Gateway Bridge. message RawPacketForwarderCommand { // Gateway ID. - bytes gateway_id = 1; + // Deprecated: use gateway_id. + bytes gateway_id_legacy = 1; + + // Gateway ID. + string gateway_id = 4; // Raw ID (UUID). bytes raw_id = 2; @@ -646,7 +671,11 @@ message RawPacketForwarderCommand { // ConnState contains the connection state of a gateway. message ConnState { // Gateway ID. - bytes gateway_id = 1; + // Deprecated: use gateway_id. + bytes gateway_id_legacy = 1; + + // Gateway ID. + string gateway_id = 3; enum State { OFFLINE = 0; diff --git a/chirpstack/src/gateway/backend/mqtt.rs b/chirpstack/src/gateway/backend/mqtt.rs index 37a5de9b..2d0ff491 100644 --- a/chirpstack/src/gateway/backend/mqtt.rs +++ b/chirpstack/src/gateway/backend/mqtt.rs @@ -13,13 +13,11 @@ use prost::Message; use serde::Serialize; use tracing::{error, info, trace}; +use super::GatewayBackend; use crate::config::GatewayBackendMqtt; use crate::monitoring::prometheus; use crate::{downlink, uplink}; use lrwn::region::CommonName; -use lrwn::EUI64; - -use super::GatewayBackend; #[derive(Clone, Hash, PartialEq, Eq, Encode)] struct EventLabels { @@ -216,11 +214,10 @@ impl GatewayBackend for MqttBackend<'_> { command: "config".to_string(), }) .inc(); - let gateway_id = EUI64::from_slice(&gw_conf.gateway_id)?; - let topic = self.get_command_topic(&gateway_id.to_string(), "config")?; + let topic = self.get_command_topic(&gw_conf.gateway_id, "config")?; let b = gw_conf.encode_to_vec(); - info!(gateway_id = %gateway_id, topic = %topic, "Sending gateway configuration"); + info!(gateway_id = %gw_conf.gateway_id, topic = %topic, "Sending gateway configuration"); let msg = mqtt::Message::new(topic, b, self.qos as i32); self.client.publish(msg).await?; trace!("Message sent"); diff --git a/chirpstack/src/uplink/stats.rs b/chirpstack/src/uplink/stats.rs index 9d67c1cb..478d0c78 100644 --- a/chirpstack/src/uplink/stats.rs +++ b/chirpstack/src/uplink/stats.rs @@ -1,11 +1,11 @@ use std::collections::hash_map::DefaultHasher; use std::collections::HashMap; use std::hash::{Hash, Hasher}; +use std::str::FromStr; use anyhow::{Context, Result}; use chrono::{DateTime, Local}; use tracing::{error, info, span, trace, Instrument, Level}; -use uuid::Uuid; use crate::gateway::backend as gateway_backend; use crate::storage::{gateway, metrics}; @@ -14,7 +14,6 @@ use chirpstack_api::{common, gw}; use lrwn::EUI64; pub struct Stats { - id: Uuid, gateway_id: EUI64, stats: gw::GatewayStats, gateway: Option, @@ -22,22 +21,28 @@ pub struct Stats { impl Stats { pub async fn handle(s: gw::GatewayStats) { - let id = match Uuid::from_slice(&s.stats_id) { + let gateway_id = match if !s.gateway_id.is_empty() { + EUI64::from_str(&s.gateway_id) + } else { + EUI64::from_slice(&s.gateway_id_legacy) + } { Ok(v) => v, - Err(_) => Uuid::nil(), + Err(e) => { + error!(error = %e, "Decode stats gateway_id error"); + return; + } }; - let span = span!(Level::INFO, "stats", stats_id = %id); + let span = span!(Level::INFO, "stats", gateway_id = %gateway_id); - if let Err(e) = Stats::_handle(id, s).instrument(span).await { + if let Err(e) = Stats::_handle(gateway_id, s).instrument(span).await { error!(error = %e, "Handle gateway stats error"); } } - async fn _handle(id: Uuid, s: gw::GatewayStats) -> Result<()> { + async fn _handle(gateway_id: EUI64, s: gw::GatewayStats) -> Result<()> { let mut ctx = Stats { - id, - gateway_id: EUI64::from_slice(&s.gateway_id)?, + gateway_id: gateway_id, stats: s, gateway: None, }; @@ -180,13 +185,14 @@ impl Stats { let gw_conf = gw::GatewayConfiguration { gateway_id: self.stats.gateway_id.clone(), + gateway_id_legacy: self.stats.gateway_id_legacy.clone(), version: hash, channels: gateway_conf .channels .iter() .map(|c| gw::ChannelConfiguration { frequency: c.frequency, - modulation: match c.modulation { + modulation_legacy: match c.modulation { config::GatewayChannelModulation::LORA => common::Modulation::Lora, config::GatewayChannelModulation::FSK => common::Modulation::Fsk, } @@ -194,8 +200,9 @@ impl Stats { modulation_config: Some(match c.modulation { config::GatewayChannelModulation::LORA => { gw::channel_configuration::ModulationConfig::LoraModulationConfig( - gw::LoRaModulationConfig { - bandwidth: c.bandwidth / 1000, + gw::LoraModulationConfig { + bandwidth_legacy: c.bandwidth / 1000, + bandwidth: c.bandwidth, spreading_factors: c.spreading_factors.clone(), }, ) @@ -203,7 +210,8 @@ impl Stats { config::GatewayChannelModulation::FSK => { gw::channel_configuration::ModulationConfig::FskModulationConfig( gw::FskModulationConfig { - bandwidth: c.bandwidth / 1000, + bandwidth_legacy: c.bandwidth / 1000, + bandwidth: c.bandwidth, bitrate: c.datarate, }, )