// Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.28.0 // protoc v3.18.1 // source: gw/gw.proto package gw import ( common "github.com/chirpstack/chirpstack/api/go/v4/common" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" durationpb "google.golang.org/protobuf/types/known/durationpb" timestamppb "google.golang.org/protobuf/types/known/timestamppb" reflect "reflect" sync "sync" ) const ( // Verify that this generated code is sufficiently up-to-date. _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) // Verify that runtime/protoimpl is sufficiently up-to-date. _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) type DownlinkTiming int32 const ( // Send the downlink immediately. DownlinkTiming_IMMEDIATELY DownlinkTiming = 0 // Send downlink at the given delay (based on provided context). DownlinkTiming_DELAY DownlinkTiming = 1 // Send at given GPS epoch value. DownlinkTiming_GPS_EPOCH DownlinkTiming = 2 ) // Enum value maps for DownlinkTiming. var ( DownlinkTiming_name = map[int32]string{ 0: "IMMEDIATELY", 1: "DELAY", 2: "GPS_EPOCH", } DownlinkTiming_value = map[string]int32{ "IMMEDIATELY": 0, "DELAY": 1, "GPS_EPOCH": 2, } ) func (x DownlinkTiming) Enum() *DownlinkTiming { p := new(DownlinkTiming) *p = x return p } func (x DownlinkTiming) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (DownlinkTiming) Descriptor() protoreflect.EnumDescriptor { return file_gw_gw_proto_enumTypes[0].Descriptor() } func (DownlinkTiming) Type() protoreflect.EnumType { return &file_gw_gw_proto_enumTypes[0] } func (x DownlinkTiming) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use DownlinkTiming.Descriptor instead. func (DownlinkTiming) EnumDescriptor() ([]byte, []int) { return file_gw_gw_proto_rawDescGZIP(), []int{0} } type FineTimestampType int32 const ( // No fine-timestamp available. FineTimestampType_NONE FineTimestampType = 0 // Encrypted fine-timestamp. FineTimestampType_ENCRYPTED FineTimestampType = 1 // Plain fine-timestamp. FineTimestampType_PLAIN FineTimestampType = 2 ) // Enum value maps for FineTimestampType. var ( FineTimestampType_name = map[int32]string{ 0: "NONE", 1: "ENCRYPTED", 2: "PLAIN", } FineTimestampType_value = map[string]int32{ "NONE": 0, "ENCRYPTED": 1, "PLAIN": 2, } ) func (x FineTimestampType) Enum() *FineTimestampType { p := new(FineTimestampType) *p = x return p } func (x FineTimestampType) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (FineTimestampType) Descriptor() protoreflect.EnumDescriptor { return file_gw_gw_proto_enumTypes[1].Descriptor() } func (FineTimestampType) Type() protoreflect.EnumType { return &file_gw_gw_proto_enumTypes[1] } func (x FineTimestampType) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use FineTimestampType.Descriptor instead. func (FineTimestampType) EnumDescriptor() ([]byte, []int) { return file_gw_gw_proto_rawDescGZIP(), []int{1} } type CRCStatus int32 const ( // No CRC. CRCStatus_NO_CRC CRCStatus = 0 // Bad CRC. CRCStatus_BAD_CRC CRCStatus = 1 // CRC OK. CRCStatus_CRC_OK CRCStatus = 2 ) // Enum value maps for CRCStatus. var ( CRCStatus_name = map[int32]string{ 0: "NO_CRC", 1: "BAD_CRC", 2: "CRC_OK", } CRCStatus_value = map[string]int32{ "NO_CRC": 0, "BAD_CRC": 1, "CRC_OK": 2, } ) func (x CRCStatus) Enum() *CRCStatus { p := new(CRCStatus) *p = x return p } func (x CRCStatus) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (CRCStatus) Descriptor() protoreflect.EnumDescriptor { return file_gw_gw_proto_enumTypes[2].Descriptor() } func (CRCStatus) Type() protoreflect.EnumType { return &file_gw_gw_proto_enumTypes[2] } func (x CRCStatus) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use CRCStatus.Descriptor instead. func (CRCStatus) EnumDescriptor() ([]byte, []int) { return file_gw_gw_proto_rawDescGZIP(), []int{2} } type TxAckStatus int32 const ( // Ignored (when a previous item was already emitted). TxAckStatus_IGNORED TxAckStatus = 0 // Packet has been programmed for downlink. TxAckStatus_OK TxAckStatus = 1 // Rejected because it was already too late to program this packet for downlink. TxAckStatus_TOO_LATE TxAckStatus = 2 // Rejected because downlink packet timestamp is too much in advance. TxAckStatus_TOO_EARLY TxAckStatus = 3 // Rejected because there was already a packet programmed in requested timeframe. TxAckStatus_COLLISION_PACKET TxAckStatus = 4 // Rejected because there was already a beacon planned in requested timeframe. TxAckStatus_COLLISION_BEACON TxAckStatus = 5 // Rejected because requested frequency is not supported by TX RF chain. TxAckStatus_TX_FREQ TxAckStatus = 6 // Rejected because requested power is not supported by gateway. TxAckStatus_TX_POWER TxAckStatus = 7 // Rejected because GPS is unlocked, so GPS timestamp cannot be used. TxAckStatus_GPS_UNLOCKED TxAckStatus = 8 // Downlink queue is full. TxAckStatus_QUEUE_FULL TxAckStatus = 9 // Internal error. TxAckStatus_INTERNAL_ERROR TxAckStatus = 10 ) // Enum value maps for TxAckStatus. var ( TxAckStatus_name = map[int32]string{ 0: "IGNORED", 1: "OK", 2: "TOO_LATE", 3: "TOO_EARLY", 4: "COLLISION_PACKET", 5: "COLLISION_BEACON", 6: "TX_FREQ", 7: "TX_POWER", 8: "GPS_UNLOCKED", 9: "QUEUE_FULL", 10: "INTERNAL_ERROR", } TxAckStatus_value = map[string]int32{ "IGNORED": 0, "OK": 1, "TOO_LATE": 2, "TOO_EARLY": 3, "COLLISION_PACKET": 4, "COLLISION_BEACON": 5, "TX_FREQ": 6, "TX_POWER": 7, "GPS_UNLOCKED": 8, "QUEUE_FULL": 9, "INTERNAL_ERROR": 10, } ) func (x TxAckStatus) Enum() *TxAckStatus { p := new(TxAckStatus) *p = x return p } func (x TxAckStatus) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (TxAckStatus) Descriptor() protoreflect.EnumDescriptor { return file_gw_gw_proto_enumTypes[3].Descriptor() } func (TxAckStatus) Type() protoreflect.EnumType { return &file_gw_gw_proto_enumTypes[3] } func (x TxAckStatus) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use TxAckStatus.Descriptor instead. func (TxAckStatus) EnumDescriptor() ([]byte, []int) { return file_gw_gw_proto_rawDescGZIP(), []int{3} } type ConnState_State int32 const ( ConnState_OFFLINE ConnState_State = 0 ConnState_ONLINE ConnState_State = 1 ) // Enum value maps for ConnState_State. var ( ConnState_State_name = map[int32]string{ 0: "OFFLINE", 1: "ONLINE", } ConnState_State_value = map[string]int32{ "OFFLINE": 0, "ONLINE": 1, } ) func (x ConnState_State) Enum() *ConnState_State { p := new(ConnState_State) *p = x return p } func (x ConnState_State) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (ConnState_State) Descriptor() protoreflect.EnumDescriptor { return file_gw_gw_proto_enumTypes[4].Descriptor() } func (ConnState_State) Type() protoreflect.EnumType { return &file_gw_gw_proto_enumTypes[4] } func (x ConnState_State) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use ConnState_State.Descriptor instead. func (ConnState_State) EnumDescriptor() ([]byte, []int) { return file_gw_gw_proto_rawDescGZIP(), []int{28, 0} } type Modulation struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Types that are assignable to Parameters: // *Modulation_Lora // *Modulation_Fsk // *Modulation_LrFhss Parameters isModulation_Parameters `protobuf_oneof:"parameters"` } func (x *Modulation) Reset() { *x = Modulation{} if protoimpl.UnsafeEnabled { mi := &file_gw_gw_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Modulation) String() string { return protoimpl.X.MessageStringOf(x) } func (*Modulation) ProtoMessage() {} func (x *Modulation) ProtoReflect() protoreflect.Message { mi := &file_gw_gw_proto_msgTypes[0] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use Modulation.ProtoReflect.Descriptor instead. func (*Modulation) Descriptor() ([]byte, []int) { return file_gw_gw_proto_rawDescGZIP(), []int{0} } func (m *Modulation) GetParameters() isModulation_Parameters { if m != nil { return m.Parameters } return nil } func (x *Modulation) GetLora() *LoRaModulationInfo { if x, ok := x.GetParameters().(*Modulation_Lora); ok { return x.Lora } return nil } func (x *Modulation) GetFsk() *FSKModulationInfo { if x, ok := x.GetParameters().(*Modulation_Fsk); ok { return x.Fsk } return nil } func (x *Modulation) GetLrFhss() *LRFHSSModulationInfo { if x, ok := x.GetParameters().(*Modulation_LrFhss); ok { return x.LrFhss } return nil } type isModulation_Parameters interface { isModulation_Parameters() } type Modulation_Lora struct { // LoRa modulation information. Lora *LoRaModulationInfo `protobuf:"bytes,3,opt,name=lora,json=loRa,proto3,oneof"` } type Modulation_Fsk struct { // FSK modulation information. Fsk *FSKModulationInfo `protobuf:"bytes,4,opt,name=fsk,proto3,oneof"` } type Modulation_LrFhss struct { // LR-FHSS modulation information. LrFhss *LRFHSSModulationInfo `protobuf:"bytes,5,opt,name=lr_fhss,json=lrFHSS,proto3,oneof"` } func (*Modulation_Lora) isModulation_Parameters() {} func (*Modulation_Fsk) isModulation_Parameters() {} func (*Modulation_LrFhss) isModulation_Parameters() {} type UplinkTXInfo struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Frequency (Hz). Frequency uint32 `protobuf:"varint,1,opt,name=frequency,proto3" json:"frequency,omitempty"` // Modulation. Modulation common.Modulation `protobuf:"varint,2,opt,name=modulation,proto3,enum=common.Modulation" json:"modulation,omitempty"` // Types that are assignable to ModulationInfo: // *UplinkTXInfo_LoraModulationInfo // *UplinkTXInfo_FskModulationInfo // *UplinkTXInfo_LrFhssModulationInfo ModulationInfo isUplinkTXInfo_ModulationInfo `protobuf_oneof:"modulation_info"` } func (x *UplinkTXInfo) Reset() { *x = UplinkTXInfo{} if protoimpl.UnsafeEnabled { mi := &file_gw_gw_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *UplinkTXInfo) String() string { return protoimpl.X.MessageStringOf(x) } func (*UplinkTXInfo) ProtoMessage() {} func (x *UplinkTXInfo) ProtoReflect() protoreflect.Message { mi := &file_gw_gw_proto_msgTypes[1] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use UplinkTXInfo.ProtoReflect.Descriptor instead. func (*UplinkTXInfo) Descriptor() ([]byte, []int) { return file_gw_gw_proto_rawDescGZIP(), []int{1} } func (x *UplinkTXInfo) GetFrequency() uint32 { if x != nil { return x.Frequency } return 0 } func (x *UplinkTXInfo) GetModulation() common.Modulation { if x != nil { return x.Modulation } return common.Modulation(0) } func (m *UplinkTXInfo) GetModulationInfo() isUplinkTXInfo_ModulationInfo { if m != nil { return m.ModulationInfo } return nil } func (x *UplinkTXInfo) GetLoraModulationInfo() *LoRaModulationInfo { if x, ok := x.GetModulationInfo().(*UplinkTXInfo_LoraModulationInfo); ok { return x.LoraModulationInfo } return nil } func (x *UplinkTXInfo) GetFskModulationInfo() *FSKModulationInfo { if x, ok := x.GetModulationInfo().(*UplinkTXInfo_FskModulationInfo); ok { return x.FskModulationInfo } return nil } func (x *UplinkTXInfo) GetLrFhssModulationInfo() *LRFHSSModulationInfo { if x, ok := x.GetModulationInfo().(*UplinkTXInfo_LrFhssModulationInfo); ok { return x.LrFhssModulationInfo } return nil } type isUplinkTXInfo_ModulationInfo interface { isUplinkTXInfo_ModulationInfo() } type UplinkTXInfo_LoraModulationInfo struct { // LoRa modulation information. LoraModulationInfo *LoRaModulationInfo `protobuf:"bytes,3,opt,name=lora_modulation_info,json=loRaModulationInfo,proto3,oneof"` } type UplinkTXInfo_FskModulationInfo struct { // FSK modulation information. FskModulationInfo *FSKModulationInfo `protobuf:"bytes,4,opt,name=fsk_modulation_info,json=fskModulationInfo,proto3,oneof"` } type UplinkTXInfo_LrFhssModulationInfo struct { // LR-FHSS modulation information. LrFhssModulationInfo *LRFHSSModulationInfo `protobuf:"bytes,5,opt,name=lr_fhss_modulation_info,json=lrFHSSModulationInfo,proto3,oneof"` } func (*UplinkTXInfo_LoraModulationInfo) isUplinkTXInfo_ModulationInfo() {} func (*UplinkTXInfo_FskModulationInfo) isUplinkTXInfo_ModulationInfo() {} func (*UplinkTXInfo_LrFhssModulationInfo) isUplinkTXInfo_ModulationInfo() {} type LoRaModulationInfo struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Bandwidth. Bandwidth uint32 `protobuf:"varint,1,opt,name=bandwidth,proto3" json:"bandwidth,omitempty"` // Speading-factor. SpreadingFactor uint32 `protobuf:"varint,2,opt,name=spreading_factor,json=spreadingFactor,proto3" json:"spreading_factor,omitempty"` // Code-rate. CodeRate string `protobuf:"bytes,3,opt,name=code_rate,json=codeRate,proto3" json:"code_rate,omitempty"` // Polarization inversion. PolarizationInversion bool `protobuf:"varint,4,opt,name=polarization_inversion,json=polarizationInversion,proto3" json:"polarization_inversion,omitempty"` } func (x *LoRaModulationInfo) Reset() { *x = LoRaModulationInfo{} if protoimpl.UnsafeEnabled { mi := &file_gw_gw_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *LoRaModulationInfo) String() string { return protoimpl.X.MessageStringOf(x) } func (*LoRaModulationInfo) ProtoMessage() {} func (x *LoRaModulationInfo) ProtoReflect() protoreflect.Message { mi := &file_gw_gw_proto_msgTypes[2] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use LoRaModulationInfo.ProtoReflect.Descriptor instead. func (*LoRaModulationInfo) Descriptor() ([]byte, []int) { return file_gw_gw_proto_rawDescGZIP(), []int{2} } func (x *LoRaModulationInfo) GetBandwidth() uint32 { if x != nil { return x.Bandwidth } return 0 } func (x *LoRaModulationInfo) GetSpreadingFactor() uint32 { if x != nil { return x.SpreadingFactor } return 0 } func (x *LoRaModulationInfo) GetCodeRate() string { if x != nil { return x.CodeRate } return "" } func (x *LoRaModulationInfo) GetPolarizationInversion() bool { if x != nil { return x.PolarizationInversion } return false } type FSKModulationInfo struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Frequency deviation. FrequencyDeviation uint32 `protobuf:"varint,1,opt,name=frequency_deviation,json=frequencyDeviation,proto3" json:"frequency_deviation,omitempty"` // FSK datarate (bits / sec). Datarate uint32 `protobuf:"varint,2,opt,name=datarate,proto3" json:"datarate,omitempty"` } func (x *FSKModulationInfo) Reset() { *x = FSKModulationInfo{} if protoimpl.UnsafeEnabled { mi := &file_gw_gw_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *FSKModulationInfo) String() string { return protoimpl.X.MessageStringOf(x) } func (*FSKModulationInfo) ProtoMessage() {} func (x *FSKModulationInfo) ProtoReflect() protoreflect.Message { mi := &file_gw_gw_proto_msgTypes[3] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use FSKModulationInfo.ProtoReflect.Descriptor instead. func (*FSKModulationInfo) Descriptor() ([]byte, []int) { return file_gw_gw_proto_rawDescGZIP(), []int{3} } func (x *FSKModulationInfo) GetFrequencyDeviation() uint32 { if x != nil { return x.FrequencyDeviation } return 0 } func (x *FSKModulationInfo) GetDatarate() uint32 { if x != nil { return x.Datarate } return 0 } type LRFHSSModulationInfo struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Operating channel width (OCW) in Hz. OperatingChannelWidth uint32 `protobuf:"varint,1,opt,name=operating_channel_width,json=operatingChannelWidth,proto3" json:"operating_channel_width,omitempty"` // Code-rate. CodeRate string `protobuf:"bytes,2,opt,name=code_rate,json=codeRate,proto3" json:"code_rate,omitempty"` // Hopping grid number of steps. GridSteps uint32 `protobuf:"varint,3,opt,name=grid_steps,json=gridSteps,proto3" json:"grid_steps,omitempty"` } func (x *LRFHSSModulationInfo) Reset() { *x = LRFHSSModulationInfo{} if protoimpl.UnsafeEnabled { mi := &file_gw_gw_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *LRFHSSModulationInfo) String() string { return protoimpl.X.MessageStringOf(x) } func (*LRFHSSModulationInfo) ProtoMessage() {} func (x *LRFHSSModulationInfo) ProtoReflect() protoreflect.Message { mi := &file_gw_gw_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use LRFHSSModulationInfo.ProtoReflect.Descriptor instead. func (*LRFHSSModulationInfo) Descriptor() ([]byte, []int) { return file_gw_gw_proto_rawDescGZIP(), []int{4} } func (x *LRFHSSModulationInfo) GetOperatingChannelWidth() uint32 { if x != nil { return x.OperatingChannelWidth } return 0 } func (x *LRFHSSModulationInfo) GetCodeRate() string { if x != nil { return x.CodeRate } return "" } func (x *LRFHSSModulationInfo) GetGridSteps() uint32 { if x != nil { return x.GridSteps } return 0 } type EncryptedFineTimestamp struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // AES key index used for encrypting the fine timestamp. AesKeyIndex uint32 `protobuf:"varint,1,opt,name=aes_key_index,json=aesKeyIndex,proto3" json:"aes_key_index,omitempty"` // Encrypted 'main' fine-timestamp (ns precision part of the timestamp). EncryptedNs []byte `protobuf:"bytes,2,opt,name=encrypted_ns,json=encryptedNS,proto3" json:"encrypted_ns,omitempty"` // FPGA ID. FpgaId []byte `protobuf:"bytes,3,opt,name=fpga_id,json=fpgaID,proto3" json:"fpga_id,omitempty"` } func (x *EncryptedFineTimestamp) Reset() { *x = EncryptedFineTimestamp{} if protoimpl.UnsafeEnabled { mi := &file_gw_gw_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *EncryptedFineTimestamp) String() string { return protoimpl.X.MessageStringOf(x) } func (*EncryptedFineTimestamp) ProtoMessage() {} func (x *EncryptedFineTimestamp) ProtoReflect() protoreflect.Message { mi := &file_gw_gw_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use EncryptedFineTimestamp.ProtoReflect.Descriptor instead. func (*EncryptedFineTimestamp) Descriptor() ([]byte, []int) { return file_gw_gw_proto_rawDescGZIP(), []int{5} } func (x *EncryptedFineTimestamp) GetAesKeyIndex() uint32 { if x != nil { return x.AesKeyIndex } return 0 } func (x *EncryptedFineTimestamp) GetEncryptedNs() []byte { if x != nil { return x.EncryptedNs } return nil } func (x *EncryptedFineTimestamp) GetFpgaId() []byte { if x != nil { return x.FpgaId } return nil } type PlainFineTimestamp struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Full timestamp. Time *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=time,proto3" json:"time,omitempty"` } func (x *PlainFineTimestamp) Reset() { *x = PlainFineTimestamp{} if protoimpl.UnsafeEnabled { mi := &file_gw_gw_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *PlainFineTimestamp) String() string { return protoimpl.X.MessageStringOf(x) } func (*PlainFineTimestamp) ProtoMessage() {} func (x *PlainFineTimestamp) ProtoReflect() protoreflect.Message { mi := &file_gw_gw_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use PlainFineTimestamp.ProtoReflect.Descriptor instead. func (*PlainFineTimestamp) Descriptor() ([]byte, []int) { return file_gw_gw_proto_rawDescGZIP(), []int{6} } func (x *PlainFineTimestamp) GetTime() *timestamppb.Timestamp { if x != nil { return x.Time } return nil } type GatewayStats struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache 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"` // 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). 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"` // Number of radio packets received with valid PHY CRC. RxPacketsReceivedOk uint32 `protobuf:"varint,6,opt,name=rx_packets_received_ok,json=rxPacketsReceivedOK,proto3" json:"rx_packets_received_ok,omitempty"` // Number of downlink packets received for transmission. TxPacketsReceived uint32 `protobuf:"varint,7,opt,name=tx_packets_received,json=txPacketsReceived,proto3" json:"tx_packets_received,omitempty"` // Number of downlink packets emitted. 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. RxPacketsPerFrequency map[uint32]uint32 `protobuf:"bytes,13,rep,name=rx_packets_per_frequency,json=rxPacketsPerFrequency,proto3" json:"rx_packets_per_frequency,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` // Tx packets per modulation parameters. TxPacketsPerModulation []*PerModulationCount `protobuf:"bytes,14,rep,name=tx_packets_per_modulation,json=txPacketsPerModulation,proto3" json:"tx_packets_per_modulation,omitempty"` // Rx packets per modulation parameters. RxPacketsPerModulation []*PerModulationCount `protobuf:"bytes,15,rep,name=rx_packets_per_modulation,json=rxPacketsPerModulation,proto3" json:"rx_packets_per_modulation,omitempty"` // Tx packets per status. TxPacketsPerStatus map[string]uint32 `protobuf:"bytes,16,rep,name=tx_packets_per_status,json=txPacketsPerStatus,proto3" json:"tx_packets_per_status,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` } func (x *GatewayStats) Reset() { *x = GatewayStats{} if protoimpl.UnsafeEnabled { mi := &file_gw_gw_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *GatewayStats) String() string { return protoimpl.X.MessageStringOf(x) } func (*GatewayStats) ProtoMessage() {} func (x *GatewayStats) ProtoReflect() protoreflect.Message { mi := &file_gw_gw_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use GatewayStats.ProtoReflect.Descriptor instead. func (*GatewayStats) Descriptor() ([]byte, []int) { return file_gw_gw_proto_rawDescGZIP(), []int{7} } func (x *GatewayStats) GetGatewayId() []byte { if x != nil { return x.GatewayId } return nil } func (x *GatewayStats) GetIp() string { if x != nil { return x.Ip } return "" } func (x *GatewayStats) GetTime() *timestamppb.Timestamp { if x != nil { return x.Time } return nil } func (x *GatewayStats) GetLocation() *common.Location { if x != nil { return x.Location } return nil } func (x *GatewayStats) GetConfigVersion() string { if x != nil { return x.ConfigVersion } return "" } func (x *GatewayStats) GetRxPacketsReceived() uint32 { if x != nil { return x.RxPacketsReceived } return 0 } func (x *GatewayStats) GetRxPacketsReceivedOk() uint32 { if x != nil { return x.RxPacketsReceivedOk } return 0 } func (x *GatewayStats) GetTxPacketsReceived() uint32 { if x != nil { return x.TxPacketsReceived } return 0 } func (x *GatewayStats) GetTxPacketsEmitted() uint32 { if x != nil { return x.TxPacketsEmitted } return 0 } func (x *GatewayStats) GetMetaData() map[string]string { if x != nil { return x.MetaData } 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 } return nil } func (x *GatewayStats) GetRxPacketsPerFrequency() map[uint32]uint32 { if x != nil { return x.RxPacketsPerFrequency } return nil } func (x *GatewayStats) GetTxPacketsPerModulation() []*PerModulationCount { if x != nil { return x.TxPacketsPerModulation } return nil } func (x *GatewayStats) GetRxPacketsPerModulation() []*PerModulationCount { if x != nil { return x.RxPacketsPerModulation } return nil } func (x *GatewayStats) GetTxPacketsPerStatus() map[string]uint32 { if x != nil { return x.TxPacketsPerStatus } return nil } type PerModulationCount struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Modulation. Modulation *Modulation `protobuf:"bytes,1,opt,name=modulation,proto3" json:"modulation,omitempty"` // Count. Count uint32 `protobuf:"varint,2,opt,name=count,proto3" json:"count,omitempty"` } func (x *PerModulationCount) Reset() { *x = PerModulationCount{} if protoimpl.UnsafeEnabled { mi := &file_gw_gw_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *PerModulationCount) String() string { return protoimpl.X.MessageStringOf(x) } func (*PerModulationCount) ProtoMessage() {} func (x *PerModulationCount) ProtoReflect() protoreflect.Message { mi := &file_gw_gw_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use PerModulationCount.ProtoReflect.Descriptor instead. func (*PerModulationCount) Descriptor() ([]byte, []int) { return file_gw_gw_proto_rawDescGZIP(), []int{8} } func (x *PerModulationCount) GetModulation() *Modulation { if x != nil { return x.Modulation } return nil } func (x *PerModulationCount) GetCount() uint32 { if x != nil { return x.Count } return 0 } type UplinkRXInfo struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Gateway ID. GatewayId []byte `protobuf:"bytes,1,opt,name=gateway_id,json=gatewayID,proto3" json:"gateway_id,omitempty"` // RX time (only set when the gateway has a GPS module). Time *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=time,proto3" json:"time,omitempty"` // RX time since GPS epoch (only set when the gateway has a GPS module). TimeSinceGpsEpoch *durationpb.Duration `protobuf:"bytes,3,opt,name=time_since_gps_epoch,json=timeSinceGPSEpoch,proto3" json:"time_since_gps_epoch,omitempty"` // RSSI. Rssi int32 `protobuf:"varint,5,opt,name=rssi,proto3" json:"rssi,omitempty"` // LoRa SNR. LoraSnr float64 `protobuf:"fixed64,6,opt,name=lora_snr,json=loRaSNR,proto3" json:"lora_snr,omitempty"` // Channel. Channel uint32 `protobuf:"varint,7,opt,name=channel,proto3" json:"channel,omitempty"` // RF Chain. RfChain uint32 `protobuf:"varint,8,opt,name=rf_chain,json=rfChain,proto3" json:"rf_chain,omitempty"` // Board. Board uint32 `protobuf:"varint,9,opt,name=board,proto3" json:"board,omitempty"` // Antenna. Antenna uint32 `protobuf:"varint,10,opt,name=antenna,proto3" json:"antenna,omitempty"` // Location. Location *common.Location `protobuf:"bytes,11,opt,name=location,proto3" json:"location,omitempty"` // Fine-timestamp type. FineTimestampType FineTimestampType `protobuf:"varint,12,opt,name=fine_timestamp_type,json=fineTimestampType,proto3,enum=gw.FineTimestampType" json:"fine_timestamp_type,omitempty"` // Fine-timestamp data. // // Types that are assignable to FineTimestamp: // *UplinkRXInfo_EncryptedFineTimestamp // *UplinkRXInfo_PlainFineTimestamp FineTimestamp isUplinkRXInfo_FineTimestamp `protobuf_oneof:"fine_timestamp"` // Gateway specific context. Context []byte `protobuf:"bytes,15,opt,name=context,proto3" json:"context,omitempty"` // Uplink ID (UUID bytes). // Unique and random ID which can be used to correlate the uplink across multiple logs. UplinkId []byte `protobuf:"bytes,16,opt,name=uplink_id,json=uplinkID,proto3" json:"uplink_id,omitempty"` // CRC status. CrcStatus CRCStatus `protobuf:"varint,17,opt,name=crc_status,json=crcStatus,proto3,enum=gw.CRCStatus" json:"crc_status,omitempty"` // Optional meta-data map. Metadata map[string]string `protobuf:"bytes,18,rep,name=metadata,proto3" json:"metadata,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` } func (x *UplinkRXInfo) Reset() { *x = UplinkRXInfo{} if protoimpl.UnsafeEnabled { mi := &file_gw_gw_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *UplinkRXInfo) String() string { return protoimpl.X.MessageStringOf(x) } func (*UplinkRXInfo) ProtoMessage() {} func (x *UplinkRXInfo) ProtoReflect() protoreflect.Message { mi := &file_gw_gw_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use UplinkRXInfo.ProtoReflect.Descriptor instead. func (*UplinkRXInfo) Descriptor() ([]byte, []int) { return file_gw_gw_proto_rawDescGZIP(), []int{9} } func (x *UplinkRXInfo) GetGatewayId() []byte { if x != nil { return x.GatewayId } return nil } func (x *UplinkRXInfo) GetTime() *timestamppb.Timestamp { if x != nil { return x.Time } return nil } func (x *UplinkRXInfo) GetTimeSinceGpsEpoch() *durationpb.Duration { if x != nil { return x.TimeSinceGpsEpoch } return nil } func (x *UplinkRXInfo) GetRssi() int32 { if x != nil { return x.Rssi } return 0 } func (x *UplinkRXInfo) GetLoraSnr() float64 { if x != nil { return x.LoraSnr } return 0 } func (x *UplinkRXInfo) GetChannel() uint32 { if x != nil { return x.Channel } return 0 } func (x *UplinkRXInfo) GetRfChain() uint32 { if x != nil { return x.RfChain } return 0 } func (x *UplinkRXInfo) GetBoard() uint32 { if x != nil { return x.Board } return 0 } func (x *UplinkRXInfo) GetAntenna() uint32 { if x != nil { return x.Antenna } return 0 } func (x *UplinkRXInfo) GetLocation() *common.Location { if x != nil { return x.Location } return nil } func (x *UplinkRXInfo) GetFineTimestampType() FineTimestampType { if x != nil { return x.FineTimestampType } return FineTimestampType_NONE } func (m *UplinkRXInfo) GetFineTimestamp() isUplinkRXInfo_FineTimestamp { if m != nil { return m.FineTimestamp } return nil } func (x *UplinkRXInfo) GetEncryptedFineTimestamp() *EncryptedFineTimestamp { if x, ok := x.GetFineTimestamp().(*UplinkRXInfo_EncryptedFineTimestamp); ok { return x.EncryptedFineTimestamp } return nil } func (x *UplinkRXInfo) GetPlainFineTimestamp() *PlainFineTimestamp { if x, ok := x.GetFineTimestamp().(*UplinkRXInfo_PlainFineTimestamp); ok { return x.PlainFineTimestamp } return nil } func (x *UplinkRXInfo) GetContext() []byte { if x != nil { return x.Context } return nil } func (x *UplinkRXInfo) GetUplinkId() []byte { if x != nil { return x.UplinkId } return nil } func (x *UplinkRXInfo) GetCrcStatus() CRCStatus { if x != nil { return x.CrcStatus } return CRCStatus_NO_CRC } func (x *UplinkRXInfo) GetMetadata() map[string]string { if x != nil { return x.Metadata } return nil } type isUplinkRXInfo_FineTimestamp interface { isUplinkRXInfo_FineTimestamp() } type UplinkRXInfo_EncryptedFineTimestamp struct { // Encrypted fine-timestamp data. EncryptedFineTimestamp *EncryptedFineTimestamp `protobuf:"bytes,13,opt,name=encrypted_fine_timestamp,json=encryptedFineTimestamp,proto3,oneof"` } type UplinkRXInfo_PlainFineTimestamp struct { // Plain fine-timestamp data. PlainFineTimestamp *PlainFineTimestamp `protobuf:"bytes,14,opt,name=plain_fine_timestamp,json=plainFineTimestamp,proto3,oneof"` } func (*UplinkRXInfo_EncryptedFineTimestamp) isUplinkRXInfo_FineTimestamp() {} func (*UplinkRXInfo_PlainFineTimestamp) isUplinkRXInfo_FineTimestamp() {} type DownlinkTXInfo struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Gateway ID. // Deprecated: replaced by gateway_id in DownlinkFrame. GatewayId []byte `protobuf:"bytes,1,opt,name=gateway_id,json=gatewayID,proto3" json:"gateway_id,omitempty"` // TX frequency (in Hz). Frequency uint32 `protobuf:"varint,5,opt,name=frequency,proto3" json:"frequency,omitempty"` // TX power (in dBm). Power int32 `protobuf:"varint,6,opt,name=power,proto3" json:"power,omitempty"` // Modulation. Modulation common.Modulation `protobuf:"varint,7,opt,name=modulation,proto3,enum=common.Modulation" json:"modulation,omitempty"` // Types that are assignable to ModulationInfo: // *DownlinkTXInfo_LoraModulationInfo // *DownlinkTXInfo_FskModulationInfo ModulationInfo isDownlinkTXInfo_ModulationInfo `protobuf_oneof:"modulation_info"` // The board identifier for emitting the frame. Board uint32 `protobuf:"varint,10,opt,name=board,proto3" json:"board,omitempty"` // The antenna identifier for emitting the frame. Antenna uint32 `protobuf:"varint,11,opt,name=antenna,proto3" json:"antenna,omitempty"` // Timing defines the downlink timing to use. Timing DownlinkTiming `protobuf:"varint,12,opt,name=timing,proto3,enum=gw.DownlinkTiming" json:"timing,omitempty"` // Types that are assignable to TimingInfo: // *DownlinkTXInfo_ImmediatelyTimingInfo // *DownlinkTXInfo_DelayTimingInfo // *DownlinkTXInfo_GpsEpochTimingInfo TimingInfo isDownlinkTXInfo_TimingInfo `protobuf_oneof:"timing_info"` // Gateway specific context. // In case of a Class-A downlink, this contains a copy of the uplink context. Context []byte `protobuf:"bytes,16,opt,name=context,proto3" json:"context,omitempty"` } func (x *DownlinkTXInfo) Reset() { *x = DownlinkTXInfo{} if protoimpl.UnsafeEnabled { mi := &file_gw_gw_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *DownlinkTXInfo) String() string { return protoimpl.X.MessageStringOf(x) } func (*DownlinkTXInfo) ProtoMessage() {} func (x *DownlinkTXInfo) ProtoReflect() protoreflect.Message { mi := &file_gw_gw_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use DownlinkTXInfo.ProtoReflect.Descriptor instead. func (*DownlinkTXInfo) Descriptor() ([]byte, []int) { return file_gw_gw_proto_rawDescGZIP(), []int{10} } func (x *DownlinkTXInfo) GetGatewayId() []byte { if x != nil { return x.GatewayId } return nil } func (x *DownlinkTXInfo) GetFrequency() uint32 { if x != nil { return x.Frequency } return 0 } func (x *DownlinkTXInfo) GetPower() int32 { if x != nil { return x.Power } return 0 } func (x *DownlinkTXInfo) GetModulation() common.Modulation { if x != nil { return x.Modulation } return common.Modulation(0) } func (m *DownlinkTXInfo) GetModulationInfo() isDownlinkTXInfo_ModulationInfo { if m != nil { return m.ModulationInfo } return nil } func (x *DownlinkTXInfo) GetLoraModulationInfo() *LoRaModulationInfo { if x, ok := x.GetModulationInfo().(*DownlinkTXInfo_LoraModulationInfo); ok { return x.LoraModulationInfo } return nil } func (x *DownlinkTXInfo) GetFskModulationInfo() *FSKModulationInfo { if x, ok := x.GetModulationInfo().(*DownlinkTXInfo_FskModulationInfo); ok { return x.FskModulationInfo } return nil } func (x *DownlinkTXInfo) GetBoard() uint32 { if x != nil { return x.Board } return 0 } func (x *DownlinkTXInfo) GetAntenna() uint32 { if x != nil { return x.Antenna } return 0 } func (x *DownlinkTXInfo) GetTiming() DownlinkTiming { if x != nil { return x.Timing } return DownlinkTiming_IMMEDIATELY } func (m *DownlinkTXInfo) GetTimingInfo() isDownlinkTXInfo_TimingInfo { if m != nil { return m.TimingInfo } return nil } func (x *DownlinkTXInfo) GetImmediatelyTimingInfo() *ImmediatelyTimingInfo { if x, ok := x.GetTimingInfo().(*DownlinkTXInfo_ImmediatelyTimingInfo); ok { return x.ImmediatelyTimingInfo } return nil } func (x *DownlinkTXInfo) GetDelayTimingInfo() *DelayTimingInfo { if x, ok := x.GetTimingInfo().(*DownlinkTXInfo_DelayTimingInfo); ok { return x.DelayTimingInfo } return nil } func (x *DownlinkTXInfo) GetGpsEpochTimingInfo() *GPSEpochTimingInfo { if x, ok := x.GetTimingInfo().(*DownlinkTXInfo_GpsEpochTimingInfo); ok { return x.GpsEpochTimingInfo } return nil } func (x *DownlinkTXInfo) GetContext() []byte { if x != nil { return x.Context } return nil } type isDownlinkTXInfo_ModulationInfo interface { isDownlinkTXInfo_ModulationInfo() } type DownlinkTXInfo_LoraModulationInfo struct { // LoRa modulation information. LoraModulationInfo *LoRaModulationInfo `protobuf:"bytes,8,opt,name=lora_modulation_info,json=loRaModulationInfo,proto3,oneof"` } type DownlinkTXInfo_FskModulationInfo struct { // FSK modulation information. FskModulationInfo *FSKModulationInfo `protobuf:"bytes,9,opt,name=fsk_modulation_info,json=fskModulationInfo,proto3,oneof"` } func (*DownlinkTXInfo_LoraModulationInfo) isDownlinkTXInfo_ModulationInfo() {} func (*DownlinkTXInfo_FskModulationInfo) isDownlinkTXInfo_ModulationInfo() {} type isDownlinkTXInfo_TimingInfo interface { isDownlinkTXInfo_TimingInfo() } type DownlinkTXInfo_ImmediatelyTimingInfo struct { // Immediately timing information. ImmediatelyTimingInfo *ImmediatelyTimingInfo `protobuf:"bytes,13,opt,name=immediately_timing_info,json=immediatelyTimingInfo,proto3,oneof"` } type DownlinkTXInfo_DelayTimingInfo struct { // Context based delay timing information. DelayTimingInfo *DelayTimingInfo `protobuf:"bytes,14,opt,name=delay_timing_info,json=delayTimingInfo,proto3,oneof"` } type DownlinkTXInfo_GpsEpochTimingInfo struct { // GPS Epoch timing information. GpsEpochTimingInfo *GPSEpochTimingInfo `protobuf:"bytes,15,opt,name=gps_epoch_timing_info,json=gpsEpochTimingInfo,proto3,oneof"` } func (*DownlinkTXInfo_ImmediatelyTimingInfo) isDownlinkTXInfo_TimingInfo() {} func (*DownlinkTXInfo_DelayTimingInfo) isDownlinkTXInfo_TimingInfo() {} func (*DownlinkTXInfo_GpsEpochTimingInfo) isDownlinkTXInfo_TimingInfo() {} type ImmediatelyTimingInfo struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields } func (x *ImmediatelyTimingInfo) Reset() { *x = ImmediatelyTimingInfo{} if protoimpl.UnsafeEnabled { mi := &file_gw_gw_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *ImmediatelyTimingInfo) String() string { return protoimpl.X.MessageStringOf(x) } func (*ImmediatelyTimingInfo) ProtoMessage() {} func (x *ImmediatelyTimingInfo) ProtoReflect() protoreflect.Message { mi := &file_gw_gw_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use ImmediatelyTimingInfo.ProtoReflect.Descriptor instead. func (*ImmediatelyTimingInfo) Descriptor() ([]byte, []int) { return file_gw_gw_proto_rawDescGZIP(), []int{11} } type DelayTimingInfo struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Delay (duration). // The delay will be added to the gateway internal timing, provided by the context object. Delay *durationpb.Duration `protobuf:"bytes,1,opt,name=delay,proto3" json:"delay,omitempty"` } func (x *DelayTimingInfo) Reset() { *x = DelayTimingInfo{} if protoimpl.UnsafeEnabled { mi := &file_gw_gw_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *DelayTimingInfo) String() string { return protoimpl.X.MessageStringOf(x) } func (*DelayTimingInfo) ProtoMessage() {} func (x *DelayTimingInfo) ProtoReflect() protoreflect.Message { mi := &file_gw_gw_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use DelayTimingInfo.ProtoReflect.Descriptor instead. func (*DelayTimingInfo) Descriptor() ([]byte, []int) { return file_gw_gw_proto_rawDescGZIP(), []int{12} } func (x *DelayTimingInfo) GetDelay() *durationpb.Duration { if x != nil { return x.Delay } return nil } type GPSEpochTimingInfo struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Duration since GPS Epoch. TimeSinceGpsEpoch *durationpb.Duration `protobuf:"bytes,1,opt,name=time_since_gps_epoch,json=timeSinceGPSEpoch,proto3" json:"time_since_gps_epoch,omitempty"` } func (x *GPSEpochTimingInfo) Reset() { *x = GPSEpochTimingInfo{} if protoimpl.UnsafeEnabled { mi := &file_gw_gw_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *GPSEpochTimingInfo) String() string { return protoimpl.X.MessageStringOf(x) } func (*GPSEpochTimingInfo) ProtoMessage() {} func (x *GPSEpochTimingInfo) ProtoReflect() protoreflect.Message { mi := &file_gw_gw_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use GPSEpochTimingInfo.ProtoReflect.Descriptor instead. func (*GPSEpochTimingInfo) Descriptor() ([]byte, []int) { return file_gw_gw_proto_rawDescGZIP(), []int{13} } func (x *GPSEpochTimingInfo) GetTimeSinceGpsEpoch() *durationpb.Duration { if x != nil { return x.TimeSinceGpsEpoch } return nil } type UplinkFrame struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // PHYPayload. PhyPayload []byte `protobuf:"bytes,1,opt,name=phy_payload,json=phyPayload,proto3" json:"phy_payload,omitempty"` // TX meta-data. TxInfo *UplinkTXInfo `protobuf:"bytes,2,opt,name=tx_info,json=txInfo,proto3" json:"tx_info,omitempty"` // RX meta-data. RxInfo *UplinkRXInfo `protobuf:"bytes,3,opt,name=rx_info,json=rxInfo,proto3" json:"rx_info,omitempty"` } func (x *UplinkFrame) Reset() { *x = UplinkFrame{} if protoimpl.UnsafeEnabled { mi := &file_gw_gw_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *UplinkFrame) String() string { return protoimpl.X.MessageStringOf(x) } func (*UplinkFrame) ProtoMessage() {} func (x *UplinkFrame) ProtoReflect() protoreflect.Message { mi := &file_gw_gw_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use UplinkFrame.ProtoReflect.Descriptor instead. func (*UplinkFrame) Descriptor() ([]byte, []int) { return file_gw_gw_proto_rawDescGZIP(), []int{14} } func (x *UplinkFrame) GetPhyPayload() []byte { if x != nil { return x.PhyPayload } return nil } func (x *UplinkFrame) GetTxInfo() *UplinkTXInfo { if x != nil { return x.TxInfo } return nil } func (x *UplinkFrame) GetRxInfo() *UplinkRXInfo { if x != nil { return x.RxInfo } return nil } type UplinkFrameSet struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // PHYPayload. PhyPayload []byte `protobuf:"bytes,1,opt,name=phy_payload,json=phyPayload,proto3" json:"phy_payload,omitempty"` // TX meta-data. TxInfo *UplinkTXInfo `protobuf:"bytes,2,opt,name=tx_info,json=txInfo,proto3" json:"tx_info,omitempty"` // RX meta-data set. RxInfo []*UplinkRXInfo `protobuf:"bytes,3,rep,name=rx_info,json=rxInfo,proto3" json:"rx_info,omitempty"` } func (x *UplinkFrameSet) Reset() { *x = UplinkFrameSet{} if protoimpl.UnsafeEnabled { mi := &file_gw_gw_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *UplinkFrameSet) String() string { return protoimpl.X.MessageStringOf(x) } func (*UplinkFrameSet) ProtoMessage() {} func (x *UplinkFrameSet) ProtoReflect() protoreflect.Message { mi := &file_gw_gw_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use UplinkFrameSet.ProtoReflect.Descriptor instead. func (*UplinkFrameSet) Descriptor() ([]byte, []int) { return file_gw_gw_proto_rawDescGZIP(), []int{15} } func (x *UplinkFrameSet) GetPhyPayload() []byte { if x != nil { return x.PhyPayload } return nil } func (x *UplinkFrameSet) GetTxInfo() *UplinkTXInfo { if x != nil { return x.TxInfo } return nil } func (x *UplinkFrameSet) GetRxInfo() []*UplinkRXInfo { if x != nil { return x.RxInfo } return nil } type DownlinkFrame struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // PHYPayload. // Deprecated: replaced by items. PhyPayload []byte `protobuf:"bytes,1,opt,name=phy_payload,json=phyPayload,proto3" json:"phy_payload,omitempty"` // TX meta-data. // Deprecated: replaced by items. TxInfo *DownlinkTXInfo `protobuf:"bytes,2,opt,name=tx_info,json=txInfo,proto3" json:"tx_info,omitempty"` // Token (uint16 value). // Deprecated: replaced by downlink_id. Token uint32 `protobuf:"varint,3,opt,name=token,proto3" json:"token,omitempty"` // Downlink ID (UUID). DownlinkId []byte `protobuf:"bytes,4,opt,name=downlink_id,json=downlinkID,proto3" json:"downlink_id,omitempty"` // Downlink frame items. // This makes it possible to send multiple downlink opportunities to the // gateway at once (e.g. RX1 and RX2 in LoRaWAN). The first item has the // highest priority, the last the lowest. The gateway will emit at most // one item. Items []*DownlinkFrameItem `protobuf:"bytes,5,rep,name=items,proto3" json:"items,omitempty"` // Gateway ID. GatewayId []byte `protobuf:"bytes,6,opt,name=gateway_id,json=gatewayID,proto3" json:"gateway_id,omitempty"` } func (x *DownlinkFrame) Reset() { *x = DownlinkFrame{} if protoimpl.UnsafeEnabled { mi := &file_gw_gw_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *DownlinkFrame) String() string { return protoimpl.X.MessageStringOf(x) } func (*DownlinkFrame) ProtoMessage() {} func (x *DownlinkFrame) ProtoReflect() protoreflect.Message { mi := &file_gw_gw_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use DownlinkFrame.ProtoReflect.Descriptor instead. func (*DownlinkFrame) Descriptor() ([]byte, []int) { return file_gw_gw_proto_rawDescGZIP(), []int{16} } func (x *DownlinkFrame) GetPhyPayload() []byte { if x != nil { return x.PhyPayload } return nil } func (x *DownlinkFrame) GetTxInfo() *DownlinkTXInfo { if x != nil { return x.TxInfo } return nil } func (x *DownlinkFrame) GetToken() uint32 { if x != nil { return x.Token } return 0 } func (x *DownlinkFrame) GetDownlinkId() []byte { if x != nil { return x.DownlinkId } return nil } func (x *DownlinkFrame) GetItems() []*DownlinkFrameItem { if x != nil { return x.Items } return nil } func (x *DownlinkFrame) GetGatewayId() []byte { if x != nil { return x.GatewayId } return nil } type DownlinkFrameItem struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // PHYPayload. PhyPayload []byte `protobuf:"bytes,1,opt,name=phy_payload,json=phyPayload,proto3" json:"phy_payload,omitempty"` // TX meta-data. TxInfo *DownlinkTXInfo `protobuf:"bytes,2,opt,name=tx_info,json=txInfo,proto3" json:"tx_info,omitempty"` } func (x *DownlinkFrameItem) Reset() { *x = DownlinkFrameItem{} if protoimpl.UnsafeEnabled { mi := &file_gw_gw_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *DownlinkFrameItem) String() string { return protoimpl.X.MessageStringOf(x) } func (*DownlinkFrameItem) ProtoMessage() {} func (x *DownlinkFrameItem) ProtoReflect() protoreflect.Message { mi := &file_gw_gw_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use DownlinkFrameItem.ProtoReflect.Descriptor instead. func (*DownlinkFrameItem) Descriptor() ([]byte, []int) { return file_gw_gw_proto_rawDescGZIP(), []int{17} } func (x *DownlinkFrameItem) GetPhyPayload() []byte { if x != nil { return x.PhyPayload } return nil } func (x *DownlinkFrameItem) GetTxInfo() *DownlinkTXInfo { if x != nil { return x.TxInfo } return nil } type DownlinkTXAck struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Gateway ID. GatewayId []byte `protobuf:"bytes,1,opt,name=gateway_id,json=gatewayID,proto3" json:"gateway_id,omitempty"` // Token (uint16 value). // Deprecated: replaced by downlink_id. Token uint32 `protobuf:"varint,2,opt,name=token,proto3" json:"token,omitempty"` // Error. // Deprecated: replaced by items. Error string `protobuf:"bytes,3,opt,name=error,proto3" json:"error,omitempty"` // Downlink ID (UUID). DownlinkId []byte `protobuf:"bytes,4,opt,name=downlink_id,json=downlinkID,proto3" json:"downlink_id,omitempty"` // Downlink frame items. // This list has the same length as the request and indicates which // downlink frame has been emitted of the requested list (or why it failed). // Note that at most one item has a positive acknowledgement. Items []*DownlinkTXAckItem `protobuf:"bytes,5,rep,name=items,proto3" json:"items,omitempty"` } func (x *DownlinkTXAck) Reset() { *x = DownlinkTXAck{} if protoimpl.UnsafeEnabled { mi := &file_gw_gw_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *DownlinkTXAck) String() string { return protoimpl.X.MessageStringOf(x) } func (*DownlinkTXAck) ProtoMessage() {} func (x *DownlinkTXAck) ProtoReflect() protoreflect.Message { mi := &file_gw_gw_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use DownlinkTXAck.ProtoReflect.Descriptor instead. func (*DownlinkTXAck) Descriptor() ([]byte, []int) { return file_gw_gw_proto_rawDescGZIP(), []int{18} } func (x *DownlinkTXAck) GetGatewayId() []byte { if x != nil { return x.GatewayId } return nil } func (x *DownlinkTXAck) GetToken() uint32 { if x != nil { return x.Token } return 0 } func (x *DownlinkTXAck) GetError() string { if x != nil { return x.Error } return "" } func (x *DownlinkTXAck) GetDownlinkId() []byte { if x != nil { return x.DownlinkId } return nil } func (x *DownlinkTXAck) GetItems() []*DownlinkTXAckItem { if x != nil { return x.Items } return nil } type DownlinkTXAckItem struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The Ack status of this item. Status TxAckStatus `protobuf:"varint,1,opt,name=status,proto3,enum=gw.TxAckStatus" json:"status,omitempty"` } func (x *DownlinkTXAckItem) Reset() { *x = DownlinkTXAckItem{} if protoimpl.UnsafeEnabled { mi := &file_gw_gw_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *DownlinkTXAckItem) String() string { return protoimpl.X.MessageStringOf(x) } func (*DownlinkTXAckItem) ProtoMessage() {} func (x *DownlinkTXAckItem) ProtoReflect() protoreflect.Message { mi := &file_gw_gw_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use DownlinkTXAckItem.ProtoReflect.Descriptor instead. func (*DownlinkTXAckItem) Descriptor() ([]byte, []int) { return file_gw_gw_proto_rawDescGZIP(), []int{19} } func (x *DownlinkTXAckItem) GetStatus() TxAckStatus { if x != nil { return x.Status } return TxAckStatus_IGNORED } type GatewayConfiguration struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Gateway ID. GatewayId []byte `protobuf:"bytes,1,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. Channels []*ChannelConfiguration `protobuf:"bytes,3,rep,name=channels,proto3" json:"channels,omitempty"` // Stats interval. StatsInterval *durationpb.Duration `protobuf:"bytes,4,opt,name=stats_interval,json=statsInterval,proto3" json:"stats_interval,omitempty"` } func (x *GatewayConfiguration) Reset() { *x = GatewayConfiguration{} if protoimpl.UnsafeEnabled { mi := &file_gw_gw_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *GatewayConfiguration) String() string { return protoimpl.X.MessageStringOf(x) } func (*GatewayConfiguration) ProtoMessage() {} func (x *GatewayConfiguration) ProtoReflect() protoreflect.Message { mi := &file_gw_gw_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use GatewayConfiguration.ProtoReflect.Descriptor instead. func (*GatewayConfiguration) Descriptor() ([]byte, []int) { return file_gw_gw_proto_rawDescGZIP(), []int{20} } func (x *GatewayConfiguration) GetGatewayId() []byte { if x != nil { return x.GatewayId } return nil } func (x *GatewayConfiguration) GetVersion() string { if x != nil { return x.Version } return "" } func (x *GatewayConfiguration) GetChannels() []*ChannelConfiguration { if x != nil { return x.Channels } return nil } func (x *GatewayConfiguration) GetStatsInterval() *durationpb.Duration { if x != nil { return x.StatsInterval } return nil } type ChannelConfiguration struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // 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"` // Types that are assignable to ModulationConfig: // *ChannelConfiguration_LoraModulationConfig // *ChannelConfiguration_FskModulationConfig ModulationConfig isChannelConfiguration_ModulationConfig `protobuf_oneof:"modulation_config"` // Board index. Board uint32 `protobuf:"varint,5,opt,name=board,proto3" json:"board,omitempty"` // Demodulator index (of the given board). Demodulator uint32 `protobuf:"varint,6,opt,name=demodulator,proto3" json:"demodulator,omitempty"` } func (x *ChannelConfiguration) Reset() { *x = ChannelConfiguration{} if protoimpl.UnsafeEnabled { mi := &file_gw_gw_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *ChannelConfiguration) String() string { return protoimpl.X.MessageStringOf(x) } func (*ChannelConfiguration) ProtoMessage() {} func (x *ChannelConfiguration) ProtoReflect() protoreflect.Message { mi := &file_gw_gw_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use ChannelConfiguration.ProtoReflect.Descriptor instead. func (*ChannelConfiguration) Descriptor() ([]byte, []int) { return file_gw_gw_proto_rawDescGZIP(), []int{21} } func (x *ChannelConfiguration) GetFrequency() uint32 { if x != nil { return x.Frequency } return 0 } func (x *ChannelConfiguration) GetModulation() common.Modulation { if x != nil { return x.Modulation } return common.Modulation(0) } func (m *ChannelConfiguration) GetModulationConfig() isChannelConfiguration_ModulationConfig { if m != nil { return m.ModulationConfig } return nil } func (x *ChannelConfiguration) GetLoraModulationConfig() *LoRaModulationConfig { if x, ok := x.GetModulationConfig().(*ChannelConfiguration_LoraModulationConfig); ok { return x.LoraModulationConfig } return nil } func (x *ChannelConfiguration) GetFskModulationConfig() *FSKModulationConfig { if x, ok := x.GetModulationConfig().(*ChannelConfiguration_FskModulationConfig); ok { return x.FskModulationConfig } return nil } func (x *ChannelConfiguration) GetBoard() uint32 { if x != nil { return x.Board } return 0 } func (x *ChannelConfiguration) GetDemodulator() uint32 { if x != nil { return x.Demodulator } return 0 } type isChannelConfiguration_ModulationConfig interface { isChannelConfiguration_ModulationConfig() } type ChannelConfiguration_LoraModulationConfig struct { // LoRa modulation config. 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"` } func (*ChannelConfiguration_LoraModulationConfig) isChannelConfiguration_ModulationConfig() {} func (*ChannelConfiguration_FskModulationConfig) isChannelConfiguration_ModulationConfig() {} 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"` // 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{} if protoimpl.UnsafeEnabled { mi := &file_gw_gw_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *LoRaModulationConfig) String() string { return protoimpl.X.MessageStringOf(x) } func (*LoRaModulationConfig) ProtoMessage() {} func (x *LoRaModulationConfig) ProtoReflect() protoreflect.Message { mi := &file_gw_gw_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use LoRaModulationConfig.ProtoReflect.Descriptor instead. func (*LoRaModulationConfig) Descriptor() ([]byte, []int) { return file_gw_gw_proto_rawDescGZIP(), []int{22} } func (x *LoRaModulationConfig) GetBandwidth() uint32 { if x != nil { return x.Bandwidth } return 0 } func (x *LoRaModulationConfig) GetSpreadingFactors() []uint32 { if x != nil { return x.SpreadingFactors } return nil } 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"` // Bitrate. Bitrate uint32 `protobuf:"varint,2,opt,name=bitrate,proto3" json:"bitrate,omitempty"` } func (x *FSKModulationConfig) Reset() { *x = FSKModulationConfig{} if protoimpl.UnsafeEnabled { mi := &file_gw_gw_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *FSKModulationConfig) String() string { return protoimpl.X.MessageStringOf(x) } func (*FSKModulationConfig) ProtoMessage() {} func (x *FSKModulationConfig) ProtoReflect() protoreflect.Message { mi := &file_gw_gw_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use FSKModulationConfig.ProtoReflect.Descriptor instead. func (*FSKModulationConfig) Descriptor() ([]byte, []int) { return file_gw_gw_proto_rawDescGZIP(), []int{23} } func (x *FSKModulationConfig) GetBandwidth() uint32 { if x != nil { return x.Bandwidth } return 0 } func (x *FSKModulationConfig) GetBitrate() uint32 { if x != nil { return x.Bitrate } return 0 } type GatewayCommandExecRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Gateway ID. GatewayId []byte `protobuf:"bytes,1,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"` // Execution request ID (UUID). // The same token will be returned when the execution of the command has // completed. ExecId []byte `protobuf:"bytes,3,opt,name=ExecId,json=execID,proto3" json:"ExecId,omitempty"` // Standard input. Stdin []byte `protobuf:"bytes,4,opt,name=stdin,proto3" json:"stdin,omitempty"` // Environment variables. Environment map[string]string `protobuf:"bytes,5,rep,name=environment,proto3" json:"environment,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` } func (x *GatewayCommandExecRequest) Reset() { *x = GatewayCommandExecRequest{} if protoimpl.UnsafeEnabled { mi := &file_gw_gw_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *GatewayCommandExecRequest) String() string { return protoimpl.X.MessageStringOf(x) } func (*GatewayCommandExecRequest) ProtoMessage() {} func (x *GatewayCommandExecRequest) ProtoReflect() protoreflect.Message { mi := &file_gw_gw_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use GatewayCommandExecRequest.ProtoReflect.Descriptor instead. func (*GatewayCommandExecRequest) Descriptor() ([]byte, []int) { return file_gw_gw_proto_rawDescGZIP(), []int{24} } func (x *GatewayCommandExecRequest) GetGatewayId() []byte { if x != nil { return x.GatewayId } return nil } func (x *GatewayCommandExecRequest) GetCommand() string { if x != nil { return x.Command } return "" } func (x *GatewayCommandExecRequest) GetExecId() []byte { if x != nil { return x.ExecId } return nil } func (x *GatewayCommandExecRequest) GetStdin() []byte { if x != nil { return x.Stdin } return nil } func (x *GatewayCommandExecRequest) GetEnvironment() map[string]string { if x != nil { return x.Environment } return nil } type GatewayCommandExecResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Gateway ID. GatewayId []byte `protobuf:"bytes,1,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. Stdout []byte `protobuf:"bytes,3,opt,name=stdout,proto3" json:"stdout,omitempty"` // Standard error. Stderr []byte `protobuf:"bytes,4,opt,name=stderr,proto3" json:"stderr,omitempty"` // Error message. Error string `protobuf:"bytes,5,opt,name=error,proto3" json:"error,omitempty"` } func (x *GatewayCommandExecResponse) Reset() { *x = GatewayCommandExecResponse{} if protoimpl.UnsafeEnabled { mi := &file_gw_gw_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *GatewayCommandExecResponse) String() string { return protoimpl.X.MessageStringOf(x) } func (*GatewayCommandExecResponse) ProtoMessage() {} func (x *GatewayCommandExecResponse) ProtoReflect() protoreflect.Message { mi := &file_gw_gw_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use GatewayCommandExecResponse.ProtoReflect.Descriptor instead. func (*GatewayCommandExecResponse) Descriptor() ([]byte, []int) { return file_gw_gw_proto_rawDescGZIP(), []int{25} } func (x *GatewayCommandExecResponse) GetGatewayId() []byte { if x != nil { return x.GatewayId } return nil } func (x *GatewayCommandExecResponse) GetExecId() []byte { if x != nil { return x.ExecId } return nil } func (x *GatewayCommandExecResponse) GetStdout() []byte { if x != nil { return x.Stdout } return nil } func (x *GatewayCommandExecResponse) GetStderr() []byte { if x != nil { return x.Stderr } return nil } func (x *GatewayCommandExecResponse) GetError() string { if x != nil { return x.Error } return "" } // RawPacketForwarderEvent contains a raw packet-forwarder event. // It can be used to access packet-forwarder features that are not (fully) // integrated with the ChirpStack Gateway Bridge. type RawPacketForwarderEvent struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Gateway ID. GatewayId []byte `protobuf:"bytes,1,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. Payload []byte `protobuf:"bytes,3,opt,name=payload,proto3" json:"payload,omitempty"` } func (x *RawPacketForwarderEvent) Reset() { *x = RawPacketForwarderEvent{} if protoimpl.UnsafeEnabled { mi := &file_gw_gw_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *RawPacketForwarderEvent) String() string { return protoimpl.X.MessageStringOf(x) } func (*RawPacketForwarderEvent) ProtoMessage() {} func (x *RawPacketForwarderEvent) ProtoReflect() protoreflect.Message { mi := &file_gw_gw_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use RawPacketForwarderEvent.ProtoReflect.Descriptor instead. func (*RawPacketForwarderEvent) Descriptor() ([]byte, []int) { return file_gw_gw_proto_rawDescGZIP(), []int{26} } func (x *RawPacketForwarderEvent) GetGatewayId() []byte { if x != nil { return x.GatewayId } return nil } func (x *RawPacketForwarderEvent) GetRawId() []byte { if x != nil { return x.RawId } return nil } func (x *RawPacketForwarderEvent) GetPayload() []byte { if x != nil { return x.Payload } return nil } // RawPacketForwarderEvent contains a raw packet-forwarder command. // It can be used to access packet-forwarder features that are not (fully) // integrated with the ChirpStack Gateway Bridge. type RawPacketForwarderCommand struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Gateway ID. GatewayId []byte `protobuf:"bytes,1,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. Payload []byte `protobuf:"bytes,3,opt,name=payload,proto3" json:"payload,omitempty"` } func (x *RawPacketForwarderCommand) Reset() { *x = RawPacketForwarderCommand{} if protoimpl.UnsafeEnabled { mi := &file_gw_gw_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *RawPacketForwarderCommand) String() string { return protoimpl.X.MessageStringOf(x) } func (*RawPacketForwarderCommand) ProtoMessage() {} func (x *RawPacketForwarderCommand) ProtoReflect() protoreflect.Message { mi := &file_gw_gw_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use RawPacketForwarderCommand.ProtoReflect.Descriptor instead. func (*RawPacketForwarderCommand) Descriptor() ([]byte, []int) { return file_gw_gw_proto_rawDescGZIP(), []int{27} } func (x *RawPacketForwarderCommand) GetGatewayId() []byte { if x != nil { return x.GatewayId } return nil } func (x *RawPacketForwarderCommand) GetRawId() []byte { if x != nil { return x.RawId } return nil } func (x *RawPacketForwarderCommand) GetPayload() []byte { if x != nil { return x.Payload } return nil } // ConnState contains the connection state of a gateway. type ConnState struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Gateway ID. GatewayId []byte `protobuf:"bytes,1,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"` } func (x *ConnState) Reset() { *x = ConnState{} if protoimpl.UnsafeEnabled { mi := &file_gw_gw_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *ConnState) String() string { return protoimpl.X.MessageStringOf(x) } func (*ConnState) ProtoMessage() {} func (x *ConnState) ProtoReflect() protoreflect.Message { mi := &file_gw_gw_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use ConnState.ProtoReflect.Descriptor instead. func (*ConnState) Descriptor() ([]byte, []int) { return file_gw_gw_proto_rawDescGZIP(), []int{28} } func (x *ConnState) GetGatewayId() []byte { if x != nil { return x.GatewayId } return nil } func (x *ConnState) GetState() ConnState_State { if x != nil { return x.State } return ConnState_OFFLINE } var File_gw_gw_proto protoreflect.FileDescriptor var file_gw_gw_proto_rawDesc = []byte{ 0x0a, 0x0b, 0x67, 0x77, 0x2f, 0x67, 0x77, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x02, 0x67, 0x77, 0x1a, 0x13, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xa8, 0x01, 0x0a, 0x0a, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2c, 0x0a, 0x04, 0x6c, 0x6f, 0x72, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x77, 0x2e, 0x4c, 0x6f, 0x52, 0x61, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x48, 0x00, 0x52, 0x04, 0x6c, 0x6f, 0x52, 0x61, 0x12, 0x29, 0x0a, 0x03, 0x66, 0x73, 0x6b, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x67, 0x77, 0x2e, 0x46, 0x53, 0x4b, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x48, 0x00, 0x52, 0x03, 0x66, 0x73, 0x6b, 0x12, 0x33, 0x0a, 0x07, 0x6c, 0x72, 0x5f, 0x66, 0x68, 0x73, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x67, 0x77, 0x2e, 0x4c, 0x52, 0x46, 0x48, 0x53, 0x53, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x48, 0x00, 0x52, 0x06, 0x6c, 0x72, 0x46, 0x48, 0x53, 0x53, 0x42, 0x0c, 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x22, 0xdb, 0x02, 0x0a, 0x0c, 0x55, 0x70, 0x6c, 0x69, 0x6e, 0x6b, 0x54, 0x58, 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, 0x32, 0x0a, 0x0a, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x12, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4a, 0x0a, 0x14, 0x6c, 0x6f, 0x72, 0x61, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x77, 0x2e, 0x4c, 0x6f, 0x52, 0x61, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x48, 0x00, 0x52, 0x12, 0x6c, 0x6f, 0x52, 0x61, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x47, 0x0a, 0x13, 0x66, 0x73, 0x6b, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x67, 0x77, 0x2e, 0x46, 0x53, 0x4b, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x48, 0x00, 0x52, 0x11, 0x66, 0x73, 0x6b, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x51, 0x0a, 0x17, 0x6c, 0x72, 0x5f, 0x66, 0x68, 0x73, 0x73, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x67, 0x77, 0x2e, 0x4c, 0x52, 0x46, 0x48, 0x53, 0x53, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x48, 0x00, 0x52, 0x14, 0x6c, 0x72, 0x46, 0x48, 0x53, 0x53, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x11, 0x0a, 0x0f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x22, 0xb1, 0x01, 0x0a, 0x12, 0x4c, 0x6f, 0x52, 0x61, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1c, 0x0a, 0x09, 0x62, 0x61, 0x6e, 0x64, 0x77, 0x69, 0x64, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x62, 0x61, 0x6e, 0x64, 0x77, 0x69, 0x64, 0x74, 0x68, 0x12, 0x29, 0x0a, 0x10, 0x73, 0x70, 0x72, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x66, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x73, 0x70, 0x72, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x46, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, 0x64, 0x65, 0x52, 0x61, 0x74, 0x65, 0x12, 0x35, 0x0a, 0x16, 0x70, 0x6f, 0x6c, 0x61, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x70, 0x6f, 0x6c, 0x61, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x60, 0x0a, 0x11, 0x46, 0x53, 0x4b, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2f, 0x0a, 0x13, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x64, 0x65, 0x76, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x12, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x44, 0x65, 0x76, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x72, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x72, 0x61, 0x74, 0x65, 0x22, 0x8a, 0x01, 0x0a, 0x14, 0x4c, 0x52, 0x46, 0x48, 0x53, 0x53, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x36, 0x0a, 0x17, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x77, 0x69, 0x64, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x15, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x57, 0x69, 0x64, 0x74, 0x68, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, 0x64, 0x65, 0x52, 0x61, 0x74, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x72, 0x69, 0x64, 0x5f, 0x73, 0x74, 0x65, 0x70, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x67, 0x72, 0x69, 0x64, 0x53, 0x74, 0x65, 0x70, 0x73, 0x22, 0x78, 0x0a, 0x16, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x46, 0x69, 0x6e, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x22, 0x0a, 0x0d, 0x61, 0x65, 0x73, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x61, 0x65, 0x73, 0x4b, 0x65, 0x79, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x5f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x4e, 0x53, 0x12, 0x17, 0x0a, 0x07, 0x66, 0x70, 0x67, 0x61, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x66, 0x70, 0x67, 0x61, 0x49, 0x44, 0x22, 0x44, 0x0a, 0x12, 0x50, 0x6c, 0x61, 0x69, 0x6e, 0x46, 0x69, 0x6e, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x2e, 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x22, 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, 0x44, 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, 0x4b, 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, 0x44, 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, 0xc6, 0x06, 0x0a, 0x0c, 0x55, 0x70, 0x6c, 0x69, 0x6e, 0x6b, 0x52, 0x58, 0x49, 0x6e, 0x66, 0x6f, 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, 0x44, 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, 0x50, 0x53, 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, 0x52, 0x61, 0x53, 0x4e, 0x52, 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, 0x44, 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, 0x3a, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x12, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x67, 0x77, 0x2e, 0x55, 0x70, 0x6c, 0x69, 0x6e, 0x6b, 0x52, 0x58, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 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, 0xa9, 0x05, 0x0a, 0x0e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x54, 0x58, 0x49, 0x6e, 0x66, 0x6f, 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, 0x44, 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, 0x52, 0x61, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x48, 0x00, 0x52, 0x12, 0x6c, 0x6f, 0x52, 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, 0x53, 0x4b, 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, 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, 0x50, 0x53, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x22, 0x84, 0x01, 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, 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, 0x58, 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, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x67, 0x77, 0x2e, 0x55, 0x70, 0x6c, 0x69, 0x6e, 0x6b, 0x52, 0x58, 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, 0x58, 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, 0x58, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x72, 0x78, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0xe0, 0x01, 0x0a, 0x0d, 0x44, 0x6f, 0x77, 0x6e, 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, 0x2b, 0x0a, 0x07, 0x74, 0x78, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x77, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x54, 0x58, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x74, 0x78, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x49, 0x44, 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, 0x1d, 0x0a, 0x0a, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x49, 0x44, 0x22, 0x61, 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, 0x2b, 0x0a, 0x07, 0x74, 0x78, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x77, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x54, 0x58, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x74, 0x78, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0xa8, 0x01, 0x0a, 0x0d, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x54, 0x58, 0x41, 0x63, 0x6b, 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, 0x44, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x49, 0x44, 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, 0x58, 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, 0x58, 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, 0x44, 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, 0x52, 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, 0x44, 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, 0x65, 0x78, 0x65, 0x63, 0x49, 0x44, 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, 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, 0x44, 0x12, 0x17, 0x0a, 0x07, 0x65, 0x78, 0x65, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x65, 0x78, 0x65, 0x63, 0x49, 0x44, 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, 0x44, 0x12, 0x15, 0x0a, 0x06, 0x72, 0x61, 0x77, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x72, 0x61, 0x77, 0x49, 0x44, 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, 0x44, 0x12, 0x15, 0x0a, 0x06, 0x72, 0x61, 0x77, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x72, 0x61, 0x77, 0x49, 0x44, 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, 0x65, 0x77, 0x61, 0x79, 0x49, 0x44, 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, 0x65, 0x22, 0x20, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x4f, 0x46, 0x46, 0x4c, 0x49, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x4f, 0x4e, 0x4c, 0x49, 0x4e, 0x45, 0x10, 0x01, 0x2a, 0x3b, 0x0a, 0x0e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x54, 0x69, 0x6d, 0x69, 0x6e, 0x67, 0x12, 0x0f, 0x0a, 0x0b, 0x49, 0x4d, 0x4d, 0x45, 0x44, 0x49, 0x41, 0x54, 0x45, 0x4c, 0x59, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x44, 0x45, 0x4c, 0x41, 0x59, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x47, 0x50, 0x53, 0x5f, 0x45, 0x50, 0x4f, 0x43, 0x48, 0x10, 0x02, 0x2a, 0x37, 0x0a, 0x11, 0x46, 0x69, 0x6e, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x54, 0x79, 0x70, 0x65, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x45, 0x4e, 0x43, 0x52, 0x59, 0x50, 0x54, 0x45, 0x44, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x50, 0x4c, 0x41, 0x49, 0x4e, 0x10, 0x02, 0x2a, 0x30, 0x0a, 0x09, 0x43, 0x52, 0x43, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x0a, 0x0a, 0x06, 0x4e, 0x4f, 0x5f, 0x43, 0x52, 0x43, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x42, 0x41, 0x44, 0x5f, 0x43, 0x52, 0x43, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x52, 0x43, 0x5f, 0x4f, 0x4b, 0x10, 0x02, 0x2a, 0xbc, 0x01, 0x0a, 0x0b, 0x54, 0x78, 0x41, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x0b, 0x0a, 0x07, 0x49, 0x47, 0x4e, 0x4f, 0x52, 0x45, 0x44, 0x10, 0x00, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x54, 0x4f, 0x4f, 0x5f, 0x4c, 0x41, 0x54, 0x45, 0x10, 0x02, 0x12, 0x0d, 0x0a, 0x09, 0x54, 0x4f, 0x4f, 0x5f, 0x45, 0x41, 0x52, 0x4c, 0x59, 0x10, 0x03, 0x12, 0x14, 0x0a, 0x10, 0x43, 0x4f, 0x4c, 0x4c, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x10, 0x04, 0x12, 0x14, 0x0a, 0x10, 0x43, 0x4f, 0x4c, 0x4c, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x10, 0x05, 0x12, 0x0b, 0x0a, 0x07, 0x54, 0x58, 0x5f, 0x46, 0x52, 0x45, 0x51, 0x10, 0x06, 0x12, 0x0c, 0x0a, 0x08, 0x54, 0x58, 0x5f, 0x50, 0x4f, 0x57, 0x45, 0x52, 0x10, 0x07, 0x12, 0x10, 0x0a, 0x0c, 0x47, 0x50, 0x53, 0x5f, 0x55, 0x4e, 0x4c, 0x4f, 0x43, 0x4b, 0x45, 0x44, 0x10, 0x08, 0x12, 0x0e, 0x0a, 0x0a, 0x51, 0x55, 0x45, 0x55, 0x45, 0x5f, 0x46, 0x55, 0x4c, 0x4c, 0x10, 0x09, 0x12, 0x12, 0x0a, 0x0e, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x0a, 0x42, 0x55, 0x0a, 0x14, 0x69, 0x6f, 0x2e, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x67, 0x77, 0x42, 0x0c, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2d, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2d, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x34, 0x2f, 0x67, 0x77, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( file_gw_gw_proto_rawDescOnce sync.Once file_gw_gw_proto_rawDescData = file_gw_gw_proto_rawDesc ) func file_gw_gw_proto_rawDescGZIP() []byte { file_gw_gw_proto_rawDescOnce.Do(func() { file_gw_gw_proto_rawDescData = protoimpl.X.CompressGZIP(file_gw_gw_proto_rawDescData) }) return file_gw_gw_proto_rawDescData } var file_gw_gw_proto_enumTypes = make([]protoimpl.EnumInfo, 5) var file_gw_gw_proto_msgTypes = make([]protoimpl.MessageInfo, 35) var file_gw_gw_proto_goTypes = []interface{}{ (DownlinkTiming)(0), // 0: gw.DownlinkTiming (FineTimestampType)(0), // 1: gw.FineTimestampType (CRCStatus)(0), // 2: gw.CRCStatus (TxAckStatus)(0), // 3: gw.TxAckStatus (ConnState_State)(0), // 4: gw.ConnState.State (*Modulation)(nil), // 5: gw.Modulation (*UplinkTXInfo)(nil), // 6: gw.UplinkTXInfo (*LoRaModulationInfo)(nil), // 7: gw.LoRaModulationInfo (*FSKModulationInfo)(nil), // 8: gw.FSKModulationInfo (*LRFHSSModulationInfo)(nil), // 9: gw.LRFHSSModulationInfo (*EncryptedFineTimestamp)(nil), // 10: gw.EncryptedFineTimestamp (*PlainFineTimestamp)(nil), // 11: gw.PlainFineTimestamp (*GatewayStats)(nil), // 12: gw.GatewayStats (*PerModulationCount)(nil), // 13: gw.PerModulationCount (*UplinkRXInfo)(nil), // 14: gw.UplinkRXInfo (*DownlinkTXInfo)(nil), // 15: gw.DownlinkTXInfo (*ImmediatelyTimingInfo)(nil), // 16: gw.ImmediatelyTimingInfo (*DelayTimingInfo)(nil), // 17: gw.DelayTimingInfo (*GPSEpochTimingInfo)(nil), // 18: gw.GPSEpochTimingInfo (*UplinkFrame)(nil), // 19: gw.UplinkFrame (*UplinkFrameSet)(nil), // 20: gw.UplinkFrameSet (*DownlinkFrame)(nil), // 21: gw.DownlinkFrame (*DownlinkFrameItem)(nil), // 22: gw.DownlinkFrameItem (*DownlinkTXAck)(nil), // 23: gw.DownlinkTXAck (*DownlinkTXAckItem)(nil), // 24: gw.DownlinkTXAckItem (*GatewayConfiguration)(nil), // 25: gw.GatewayConfiguration (*ChannelConfiguration)(nil), // 26: gw.ChannelConfiguration (*LoRaModulationConfig)(nil), // 27: gw.LoRaModulationConfig (*FSKModulationConfig)(nil), // 28: gw.FSKModulationConfig (*GatewayCommandExecRequest)(nil), // 29: gw.GatewayCommandExecRequest (*GatewayCommandExecResponse)(nil), // 30: gw.GatewayCommandExecResponse (*RawPacketForwarderEvent)(nil), // 31: gw.RawPacketForwarderEvent (*RawPacketForwarderCommand)(nil), // 32: gw.RawPacketForwarderCommand (*ConnState)(nil), // 33: gw.ConnState nil, // 34: gw.GatewayStats.MetaDataEntry nil, // 35: gw.GatewayStats.TxPacketsPerFrequencyEntry nil, // 36: gw.GatewayStats.RxPacketsPerFrequencyEntry nil, // 37: gw.GatewayStats.TxPacketsPerStatusEntry nil, // 38: gw.UplinkRXInfo.MetadataEntry nil, // 39: gw.GatewayCommandExecRequest.EnvironmentEntry (common.Modulation)(0), // 40: common.Modulation (*timestamppb.Timestamp)(nil), // 41: google.protobuf.Timestamp (*common.Location)(nil), // 42: common.Location (*durationpb.Duration)(nil), // 43: google.protobuf.Duration } var file_gw_gw_proto_depIdxs = []int32{ 7, // 0: gw.Modulation.lora:type_name -> gw.LoRaModulationInfo 8, // 1: gw.Modulation.fsk:type_name -> gw.FSKModulationInfo 9, // 2: gw.Modulation.lr_fhss:type_name -> gw.LRFHSSModulationInfo 40, // 3: gw.UplinkTXInfo.modulation:type_name -> common.Modulation 7, // 4: gw.UplinkTXInfo.lora_modulation_info:type_name -> gw.LoRaModulationInfo 8, // 5: gw.UplinkTXInfo.fsk_modulation_info:type_name -> gw.FSKModulationInfo 9, // 6: gw.UplinkTXInfo.lr_fhss_modulation_info:type_name -> gw.LRFHSSModulationInfo 41, // 7: gw.PlainFineTimestamp.time:type_name -> google.protobuf.Timestamp 41, // 8: gw.GatewayStats.time:type_name -> google.protobuf.Timestamp 42, // 9: gw.GatewayStats.location:type_name -> common.Location 34, // 10: gw.GatewayStats.meta_data:type_name -> gw.GatewayStats.MetaDataEntry 35, // 11: gw.GatewayStats.tx_packets_per_frequency:type_name -> gw.GatewayStats.TxPacketsPerFrequencyEntry 36, // 12: gw.GatewayStats.rx_packets_per_frequency:type_name -> gw.GatewayStats.RxPacketsPerFrequencyEntry 13, // 13: gw.GatewayStats.tx_packets_per_modulation:type_name -> gw.PerModulationCount 13, // 14: gw.GatewayStats.rx_packets_per_modulation:type_name -> gw.PerModulationCount 37, // 15: gw.GatewayStats.tx_packets_per_status:type_name -> gw.GatewayStats.TxPacketsPerStatusEntry 5, // 16: gw.PerModulationCount.modulation:type_name -> gw.Modulation 41, // 17: gw.UplinkRXInfo.time:type_name -> google.protobuf.Timestamp 43, // 18: gw.UplinkRXInfo.time_since_gps_epoch:type_name -> google.protobuf.Duration 42, // 19: gw.UplinkRXInfo.location:type_name -> common.Location 1, // 20: gw.UplinkRXInfo.fine_timestamp_type:type_name -> gw.FineTimestampType 10, // 21: gw.UplinkRXInfo.encrypted_fine_timestamp:type_name -> gw.EncryptedFineTimestamp 11, // 22: gw.UplinkRXInfo.plain_fine_timestamp:type_name -> gw.PlainFineTimestamp 2, // 23: gw.UplinkRXInfo.crc_status:type_name -> gw.CRCStatus 38, // 24: gw.UplinkRXInfo.metadata:type_name -> gw.UplinkRXInfo.MetadataEntry 40, // 25: gw.DownlinkTXInfo.modulation:type_name -> common.Modulation 7, // 26: gw.DownlinkTXInfo.lora_modulation_info:type_name -> gw.LoRaModulationInfo 8, // 27: gw.DownlinkTXInfo.fsk_modulation_info:type_name -> gw.FSKModulationInfo 0, // 28: gw.DownlinkTXInfo.timing:type_name -> gw.DownlinkTiming 16, // 29: gw.DownlinkTXInfo.immediately_timing_info:type_name -> gw.ImmediatelyTimingInfo 17, // 30: gw.DownlinkTXInfo.delay_timing_info:type_name -> gw.DelayTimingInfo 18, // 31: gw.DownlinkTXInfo.gps_epoch_timing_info:type_name -> gw.GPSEpochTimingInfo 43, // 32: gw.DelayTimingInfo.delay:type_name -> google.protobuf.Duration 43, // 33: gw.GPSEpochTimingInfo.time_since_gps_epoch:type_name -> google.protobuf.Duration 6, // 34: gw.UplinkFrame.tx_info:type_name -> gw.UplinkTXInfo 14, // 35: gw.UplinkFrame.rx_info:type_name -> gw.UplinkRXInfo 6, // 36: gw.UplinkFrameSet.tx_info:type_name -> gw.UplinkTXInfo 14, // 37: gw.UplinkFrameSet.rx_info:type_name -> gw.UplinkRXInfo 15, // 38: gw.DownlinkFrame.tx_info:type_name -> gw.DownlinkTXInfo 22, // 39: gw.DownlinkFrame.items:type_name -> gw.DownlinkFrameItem 15, // 40: gw.DownlinkFrameItem.tx_info:type_name -> gw.DownlinkTXInfo 24, // 41: gw.DownlinkTXAck.items:type_name -> gw.DownlinkTXAckItem 3, // 42: gw.DownlinkTXAckItem.status:type_name -> gw.TxAckStatus 26, // 43: gw.GatewayConfiguration.channels:type_name -> gw.ChannelConfiguration 43, // 44: gw.GatewayConfiguration.stats_interval:type_name -> google.protobuf.Duration 40, // 45: gw.ChannelConfiguration.modulation:type_name -> common.Modulation 27, // 46: gw.ChannelConfiguration.lora_modulation_config:type_name -> gw.LoRaModulationConfig 28, // 47: gw.ChannelConfiguration.fsk_modulation_config:type_name -> gw.FSKModulationConfig 39, // 48: gw.GatewayCommandExecRequest.environment:type_name -> gw.GatewayCommandExecRequest.EnvironmentEntry 4, // 49: gw.ConnState.state:type_name -> gw.ConnState.State 50, // [50:50] is the sub-list for method output_type 50, // [50:50] is the sub-list for method input_type 50, // [50:50] is the sub-list for extension type_name 50, // [50:50] is the sub-list for extension extendee 0, // [0:50] is the sub-list for field type_name } func init() { file_gw_gw_proto_init() } func file_gw_gw_proto_init() { if File_gw_gw_proto != nil { return } if !protoimpl.UnsafeEnabled { file_gw_gw_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Modulation); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_gw_gw_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UplinkTXInfo); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_gw_gw_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*LoRaModulationInfo); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_gw_gw_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*FSKModulationInfo); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_gw_gw_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*LRFHSSModulationInfo); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_gw_gw_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*EncryptedFineTimestamp); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_gw_gw_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PlainFineTimestamp); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_gw_gw_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GatewayStats); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_gw_gw_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PerModulationCount); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_gw_gw_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UplinkRXInfo); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_gw_gw_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DownlinkTXInfo); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_gw_gw_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ImmediatelyTimingInfo); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_gw_gw_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DelayTimingInfo); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_gw_gw_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GPSEpochTimingInfo); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_gw_gw_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UplinkFrame); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_gw_gw_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UplinkFrameSet); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_gw_gw_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DownlinkFrame); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_gw_gw_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DownlinkFrameItem); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_gw_gw_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DownlinkTXAck); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_gw_gw_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DownlinkTXAckItem); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_gw_gw_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GatewayConfiguration); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_gw_gw_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ChannelConfiguration); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_gw_gw_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*LoRaModulationConfig); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_gw_gw_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*FSKModulationConfig); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_gw_gw_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GatewayCommandExecRequest); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_gw_gw_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GatewayCommandExecResponse); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_gw_gw_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*RawPacketForwarderEvent); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_gw_gw_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*RawPacketForwarderCommand); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_gw_gw_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ConnState); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } } file_gw_gw_proto_msgTypes[0].OneofWrappers = []interface{}{ (*Modulation_Lora)(nil), (*Modulation_Fsk)(nil), (*Modulation_LrFhss)(nil), } file_gw_gw_proto_msgTypes[1].OneofWrappers = []interface{}{ (*UplinkTXInfo_LoraModulationInfo)(nil), (*UplinkTXInfo_FskModulationInfo)(nil), (*UplinkTXInfo_LrFhssModulationInfo)(nil), } file_gw_gw_proto_msgTypes[9].OneofWrappers = []interface{}{ (*UplinkRXInfo_EncryptedFineTimestamp)(nil), (*UplinkRXInfo_PlainFineTimestamp)(nil), } file_gw_gw_proto_msgTypes[10].OneofWrappers = []interface{}{ (*DownlinkTXInfo_LoraModulationInfo)(nil), (*DownlinkTXInfo_FskModulationInfo)(nil), (*DownlinkTXInfo_ImmediatelyTimingInfo)(nil), (*DownlinkTXInfo_DelayTimingInfo)(nil), (*DownlinkTXInfo_GpsEpochTimingInfo)(nil), } file_gw_gw_proto_msgTypes[21].OneofWrappers = []interface{}{ (*ChannelConfiguration_LoraModulationConfig)(nil), (*ChannelConfiguration_FskModulationConfig)(nil), } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_gw_gw_proto_rawDesc, NumEnums: 5, NumMessages: 35, NumExtensions: 0, NumServices: 0, }, GoTypes: file_gw_gw_proto_goTypes, DependencyIndexes: file_gw_gw_proto_depIdxs, EnumInfos: file_gw_gw_proto_enumTypes, MessageInfos: file_gw_gw_proto_msgTypes, }.Build() File_gw_gw_proto = out.File file_gw_gw_proto_rawDesc = nil file_gw_gw_proto_goTypes = nil file_gw_gw_proto_depIdxs = nil }