diff --git a/CHANGELOG.md b/CHANGELOG.md index f5754130f5..c53399688c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,8 @@ For details about compatibility between different releases, see the **Commitment ### Added +- Fine grained NbTrans overrides for the dynamic ADR mode. See the `--mac-settings.adr.mode.dynamic.overrides.data-rate-[index].min-nb-trans` and `--mac-settings.adr.mode.dynamic.overrides.data-rate-[index].max-nb-trans` family of parameters. + ### Changed ### Deprecated diff --git a/api/ttn/lorawan/v3/api.md b/api/ttn/lorawan/v3/api.md index b0955178a5..bb2ff7629b 100644 --- a/api/ttn/lorawan/v3/api.md +++ b/api/ttn/lorawan/v3/api.md @@ -239,6 +239,8 @@ - [Message `ADRSettings.DynamicMode.ChannelSteeringSettings`](#ttn.lorawan.v3.ADRSettings.DynamicMode.ChannelSteeringSettings) - [Message `ADRSettings.DynamicMode.ChannelSteeringSettings.DisabledMode`](#ttn.lorawan.v3.ADRSettings.DynamicMode.ChannelSteeringSettings.DisabledMode) - [Message `ADRSettings.DynamicMode.ChannelSteeringSettings.LoRaNarrowMode`](#ttn.lorawan.v3.ADRSettings.DynamicMode.ChannelSteeringSettings.LoRaNarrowMode) + - [Message `ADRSettings.DynamicMode.Overrides`](#ttn.lorawan.v3.ADRSettings.DynamicMode.Overrides) + - [Message `ADRSettings.DynamicMode.PerDataRateIndexOverride`](#ttn.lorawan.v3.ADRSettings.DynamicMode.PerDataRateIndexOverride) - [Message `ADRSettings.StaticMode`](#ttn.lorawan.v3.ADRSettings.StaticMode) - [Message `BatchDeleteEndDevicesRequest`](#ttn.lorawan.v3.BatchDeleteEndDevicesRequest) - [Message `BatchGetEndDevicesRequest`](#ttn.lorawan.v3.BatchGetEndDevicesRequest) @@ -3710,6 +3712,7 @@ Configuration options for dynamic ADR. | `min_nb_trans` | [`google.protobuf.UInt32Value`](#google.protobuf.UInt32Value) | | Minimum number of retransmissions. If unset, the default value from Network Server configuration will be used. | | `max_nb_trans` | [`google.protobuf.UInt32Value`](#google.protobuf.UInt32Value) | | Maximum number of retransmissions. If unset, the default value from Network Server configuration will be used. | | `channel_steering` | [`ADRSettings.DynamicMode.ChannelSteeringSettings`](#ttn.lorawan.v3.ADRSettings.DynamicMode.ChannelSteeringSettings) | | | +| `overrides` | [`ADRSettings.DynamicMode.Overrides`](#ttn.lorawan.v3.ADRSettings.DynamicMode.Overrides) | | | #### Field Rules @@ -3740,6 +3743,45 @@ Configuration options for LoRa narrow channels steering. The narrow mode attempts to steer the end device towards using the LoRa modulated, 125kHz bandwidth channels. +### Message `ADRSettings.DynamicMode.Overrides` + +EXPERIMENTAL: Configuration overrides. + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `data_rate_0` | [`ADRSettings.DynamicMode.PerDataRateIndexOverride`](#ttn.lorawan.v3.ADRSettings.DynamicMode.PerDataRateIndexOverride) | | | +| `data_rate_1` | [`ADRSettings.DynamicMode.PerDataRateIndexOverride`](#ttn.lorawan.v3.ADRSettings.DynamicMode.PerDataRateIndexOverride) | | | +| `data_rate_2` | [`ADRSettings.DynamicMode.PerDataRateIndexOverride`](#ttn.lorawan.v3.ADRSettings.DynamicMode.PerDataRateIndexOverride) | | | +| `data_rate_3` | [`ADRSettings.DynamicMode.PerDataRateIndexOverride`](#ttn.lorawan.v3.ADRSettings.DynamicMode.PerDataRateIndexOverride) | | | +| `data_rate_4` | [`ADRSettings.DynamicMode.PerDataRateIndexOverride`](#ttn.lorawan.v3.ADRSettings.DynamicMode.PerDataRateIndexOverride) | | | +| `data_rate_5` | [`ADRSettings.DynamicMode.PerDataRateIndexOverride`](#ttn.lorawan.v3.ADRSettings.DynamicMode.PerDataRateIndexOverride) | | | +| `data_rate_6` | [`ADRSettings.DynamicMode.PerDataRateIndexOverride`](#ttn.lorawan.v3.ADRSettings.DynamicMode.PerDataRateIndexOverride) | | | +| `data_rate_7` | [`ADRSettings.DynamicMode.PerDataRateIndexOverride`](#ttn.lorawan.v3.ADRSettings.DynamicMode.PerDataRateIndexOverride) | | | +| `data_rate_8` | [`ADRSettings.DynamicMode.PerDataRateIndexOverride`](#ttn.lorawan.v3.ADRSettings.DynamicMode.PerDataRateIndexOverride) | | | +| `data_rate_9` | [`ADRSettings.DynamicMode.PerDataRateIndexOverride`](#ttn.lorawan.v3.ADRSettings.DynamicMode.PerDataRateIndexOverride) | | | +| `data_rate_10` | [`ADRSettings.DynamicMode.PerDataRateIndexOverride`](#ttn.lorawan.v3.ADRSettings.DynamicMode.PerDataRateIndexOverride) | | | +| `data_rate_11` | [`ADRSettings.DynamicMode.PerDataRateIndexOverride`](#ttn.lorawan.v3.ADRSettings.DynamicMode.PerDataRateIndexOverride) | | | +| `data_rate_12` | [`ADRSettings.DynamicMode.PerDataRateIndexOverride`](#ttn.lorawan.v3.ADRSettings.DynamicMode.PerDataRateIndexOverride) | | | +| `data_rate_13` | [`ADRSettings.DynamicMode.PerDataRateIndexOverride`](#ttn.lorawan.v3.ADRSettings.DynamicMode.PerDataRateIndexOverride) | | | +| `data_rate_14` | [`ADRSettings.DynamicMode.PerDataRateIndexOverride`](#ttn.lorawan.v3.ADRSettings.DynamicMode.PerDataRateIndexOverride) | | | +| `data_rate_15` | [`ADRSettings.DynamicMode.PerDataRateIndexOverride`](#ttn.lorawan.v3.ADRSettings.DynamicMode.PerDataRateIndexOverride) | | | + +### Message `ADRSettings.DynamicMode.PerDataRateIndexOverride` + +EXPERIMENTAL: Data rate index override settings. + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `min_nb_trans` | [`google.protobuf.UInt32Value`](#google.protobuf.UInt32Value) | | Minimum number of retransmissions. If unset, the default value from Network Server configuration will be used. | +| `max_nb_trans` | [`google.protobuf.UInt32Value`](#google.protobuf.UInt32Value) | | Maximum number of retransmissions. If unset, the default value from Network Server configuration will be used. | + +#### Field Rules + +| Field | Validations | +| ----- | ----------- | +| `min_nb_trans` |
`uint32.lte`: `3`
`uint32.gte`: `1`
| +| `max_nb_trans` |`uint32.lte`: `3`
`uint32.gte`: `1`
| + ### Message `ADRSettings.StaticMode` Configuration options for static ADR. diff --git a/api/ttn/lorawan/v3/api.swagger.json b/api/ttn/lorawan/v3/api.swagger.json index 6f44936803..c50c48fbfd 100644 --- a/api/ttn/lorawan/v3/api.swagger.json +++ b/api/ttn/lorawan/v3/api.swagger.json @@ -14218,6 +14218,9 @@ }, "channel_steering": { "$ref": "#/definitions/DynamicModeChannelSteeringSettings" + }, + "overrides": { + "$ref": "#/definitions/DynamicModeOverrides" } }, "description": "Configuration options for dynamic ADR." @@ -15002,6 +15005,76 @@ "type": "object", "description": "Configuration options for cases in which ADR is not supposed to steer the end device\nto another set of channels." }, + "DynamicModeOverrides": { + "type": "object", + "properties": { + "data_rate_0": { + "$ref": "#/definitions/DynamicModePerDataRateIndexOverride" + }, + "data_rate_1": { + "$ref": "#/definitions/DynamicModePerDataRateIndexOverride" + }, + "data_rate_2": { + "$ref": "#/definitions/DynamicModePerDataRateIndexOverride" + }, + "data_rate_3": { + "$ref": "#/definitions/DynamicModePerDataRateIndexOverride" + }, + "data_rate_4": { + "$ref": "#/definitions/DynamicModePerDataRateIndexOverride" + }, + "data_rate_5": { + "$ref": "#/definitions/DynamicModePerDataRateIndexOverride" + }, + "data_rate_6": { + "$ref": "#/definitions/DynamicModePerDataRateIndexOverride" + }, + "data_rate_7": { + "$ref": "#/definitions/DynamicModePerDataRateIndexOverride" + }, + "data_rate_8": { + "$ref": "#/definitions/DynamicModePerDataRateIndexOverride" + }, + "data_rate_9": { + "$ref": "#/definitions/DynamicModePerDataRateIndexOverride" + }, + "data_rate_10": { + "$ref": "#/definitions/DynamicModePerDataRateIndexOverride" + }, + "data_rate_11": { + "$ref": "#/definitions/DynamicModePerDataRateIndexOverride" + }, + "data_rate_12": { + "$ref": "#/definitions/DynamicModePerDataRateIndexOverride" + }, + "data_rate_13": { + "$ref": "#/definitions/DynamicModePerDataRateIndexOverride" + }, + "data_rate_14": { + "$ref": "#/definitions/DynamicModePerDataRateIndexOverride" + }, + "data_rate_15": { + "$ref": "#/definitions/DynamicModePerDataRateIndexOverride" + } + }, + "description": "EXPERIMENTAL: Configuration overrides." + }, + "DynamicModePerDataRateIndexOverride": { + "type": "object", + "properties": { + "min_nb_trans": { + "type": "integer", + "format": "int64", + "description": "Minimum number of retransmissions.\nIf unset, the default value from Network Server configuration will be used." + }, + "max_nb_trans": { + "type": "integer", + "format": "int64", + "description": "Maximum number of retransmissions.\nIf unset, the default value from Network Server configuration will be used." + } + }, + "description": "EXPERIMENTAL: Data rate index override settings." + }, "EndDeviceClaimingServerAuthorizeApplicationBody": { "type": "object", "properties": { diff --git a/api/ttn/lorawan/v3/end_device.proto b/api/ttn/lorawan/v3/end_device.proto index 753be02baa..840e62565a 100644 --- a/api/ttn/lorawan/v3/end_device.proto +++ b/api/ttn/lorawan/v3/end_device.proto @@ -493,6 +493,56 @@ message ADRSettings { } ChannelSteeringSettings channel_steering = 8; + + // EXPERIMENTAL: Data rate index override settings. + message PerDataRateIndexOverride { + option (thethings.flags.message) = { + select: true, + set: true + }; + reserved 1; + reserved "min_tx_power_index"; + reserved 2; + reserved "max_tx_power_index"; + // Minimum number of retransmissions. + // If unset, the default value from Network Server configuration will be used. + google.protobuf.UInt32Value min_nb_trans = 3 [(validate.rules).uint32 = { + gte: 1, + lte: 3 + }]; + // Maximum number of retransmissions. + // If unset, the default value from Network Server configuration will be used. + google.protobuf.UInt32Value max_nb_trans = 4 [(validate.rules).uint32 = { + gte: 1, + lte: 3 + }]; + } + + // EXPERIMENTAL: Configuration overrides. + message Overrides { + option (thethings.flags.message) = { + select: true, + set: true + }; + PerDataRateIndexOverride data_rate_0 = 1; + PerDataRateIndexOverride data_rate_1 = 2; + PerDataRateIndexOverride data_rate_2 = 3; + PerDataRateIndexOverride data_rate_3 = 4; + PerDataRateIndexOverride data_rate_4 = 5; + PerDataRateIndexOverride data_rate_5 = 6; + PerDataRateIndexOverride data_rate_6 = 7; + PerDataRateIndexOverride data_rate_7 = 8; + PerDataRateIndexOverride data_rate_8 = 9; + PerDataRateIndexOverride data_rate_9 = 10; + PerDataRateIndexOverride data_rate_10 = 11; + PerDataRateIndexOverride data_rate_11 = 12; + PerDataRateIndexOverride data_rate_12 = 13; + PerDataRateIndexOverride data_rate_13 = 14; + PerDataRateIndexOverride data_rate_14 = 15; + PerDataRateIndexOverride data_rate_15 = 16; + } + + Overrides overrides = 9; } // Configuration options for cases in which ADR is to be disabled diff --git a/pkg/networkserver/grpc_deviceregistry.go b/pkg/networkserver/grpc_deviceregistry.go index 1052fae03f..756ca39e4c 100644 --- a/pkg/networkserver/grpc_deviceregistry.go +++ b/pkg/networkserver/grpc_deviceregistry.go @@ -1149,6 +1149,55 @@ var ( "mac_settings.adr.mode.dynamic.min_data_rate_index", "mac_settings.adr.mode.dynamic.min_nb_trans", "mac_settings.adr.mode.dynamic.min_tx_power_index", + "mac_settings.adr.mode.dynamic.overrides.data_rate_0.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_0.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_0", + "mac_settings.adr.mode.dynamic.overrides.data_rate_1.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_1.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_1", + "mac_settings.adr.mode.dynamic.overrides.data_rate_10.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_10.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_10", + "mac_settings.adr.mode.dynamic.overrides.data_rate_11.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_11.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_11", + "mac_settings.adr.mode.dynamic.overrides.data_rate_12.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_12.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_12", + "mac_settings.adr.mode.dynamic.overrides.data_rate_13.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_13.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_13", + "mac_settings.adr.mode.dynamic.overrides.data_rate_14.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_14.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_14", + "mac_settings.adr.mode.dynamic.overrides.data_rate_15.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_15.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_15", + "mac_settings.adr.mode.dynamic.overrides.data_rate_2.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_2.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_2", + "mac_settings.adr.mode.dynamic.overrides.data_rate_3.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_3.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_3", + "mac_settings.adr.mode.dynamic.overrides.data_rate_4.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_4.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_4", + "mac_settings.adr.mode.dynamic.overrides.data_rate_5.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_5.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_5", + "mac_settings.adr.mode.dynamic.overrides.data_rate_6.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_6.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_6", + "mac_settings.adr.mode.dynamic.overrides.data_rate_7.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_7.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_7", + "mac_settings.adr.mode.dynamic.overrides.data_rate_8.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_8.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_8", + "mac_settings.adr.mode.dynamic.overrides.data_rate_9.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_9.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_9", + "mac_settings.adr.mode.dynamic.overrides", "mac_settings.adr.mode.dynamic", "mac_settings.adr.mode.static.data_rate_index", "mac_settings.adr.mode.static.nb_trans", @@ -1170,6 +1219,38 @@ var ( "mac_settings.adr.mode.dynamic.min_data_rate_index.value", "mac_settings.adr.mode.dynamic.min_nb_trans", "mac_settings.adr.mode.dynamic.min_tx_power_index", + "mac_settings.adr.mode.dynamic.overrides.data_rate_0.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_0.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_1.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_1.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_10.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_10.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_11.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_11.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_12.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_12.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_13.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_13.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_14.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_14.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_15.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_15.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_2.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_2.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_3.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_3.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_4.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_4.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_5.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_5.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_6.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_6.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_7.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_7.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_8.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_8.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_9.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_9.min_nb_trans", "mac_settings.adr.mode.dynamic", } ) @@ -1426,27 +1507,12 @@ func (ns *NetworkServer) Set(ctx context.Context, req *ttnpb.SetEndDeviceRequest if st.HasSetField( "frequency_plan_id", "lorawan_phy_version", - "mac_settings.adr.mode.disabled", - "mac_settings.adr.mode.dynamic.channel_steering.mode.disabled", - "mac_settings.adr.mode.dynamic.channel_steering.mode.lora_narrow", - "mac_settings.adr.mode.dynamic.channel_steering.mode", - "mac_settings.adr.mode.dynamic.channel_steering", - "mac_settings.adr.mode.dynamic.margin", "mac_settings.adr.mode.dynamic.max_data_rate_index.value", - "mac_settings.adr.mode.dynamic.max_data_rate_index", - "mac_settings.adr.mode.dynamic.max_nb_trans", "mac_settings.adr.mode.dynamic.max_tx_power_index", "mac_settings.adr.mode.dynamic.min_data_rate_index.value", - "mac_settings.adr.mode.dynamic.min_data_rate_index", - "mac_settings.adr.mode.dynamic.min_nb_trans", "mac_settings.adr.mode.dynamic.min_tx_power_index", - "mac_settings.adr.mode.dynamic", "mac_settings.adr.mode.static.data_rate_index", - "mac_settings.adr.mode.static.nb_trans", "mac_settings.adr.mode.static.tx_power_index", - "mac_settings.adr.mode.static", - "mac_settings.adr.mode", - "mac_settings.adr", "mac_settings.desired_ping_slot_data_rate_index.value", "mac_settings.desired_relay.mode.served.second_channel.data_rate_index", "mac_settings.desired_relay.mode.serving.default_channel_index", @@ -2496,6 +2562,15 @@ func (ns *NetworkServer) Set(ctx context.Context, req *ttnpb.SetEndDeviceRequest return false, "mac_settings.adr.mode.dynamic.max_nb_trans" } } + for drIdx := ttnpb.DataRateIndex_DATA_RATE_0; drIdx <= ttnpb.DataRateIndex_DATA_RATE_15; drIdx++ { + baseField := fmt.Sprintf("mac_settings.adr.mode.dynamic.overrides.data_rate_%d.", drIdx) + min := mac.DataRateIndexOverridesOf(m[baseField+"min_nb_trans"].GetMacSettings().GetAdr().GetDynamic().GetOverrides(), drIdx).GetMinNbTrans() // nolint: lll + max := mac.DataRateIndexOverridesOf(m[baseField+"max_nb_trans"].GetMacSettings().GetAdr().GetDynamic().GetOverrides(), drIdx).GetMaxNbTrans() // nolint: lll + + if min != nil && max != nil && max.Value < min.Value { + return false, baseField + "max_nb_trans" + } + } return true, "" }, "mac_settings.adr.mode.dynamic.max_data_rate_index.value", @@ -2504,6 +2579,38 @@ func (ns *NetworkServer) Set(ctx context.Context, req *ttnpb.SetEndDeviceRequest "mac_settings.adr.mode.dynamic.min_data_rate_index.value", "mac_settings.adr.mode.dynamic.min_nb_trans", "mac_settings.adr.mode.dynamic.min_tx_power_index", + "mac_settings.adr.mode.dynamic.overrides.data_rate_0.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_0.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_1.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_1.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_10.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_10.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_11.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_11.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_12.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_12.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_13.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_13.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_14.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_14.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_15.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_15.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_2.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_2.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_3.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_3.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_4.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_4.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_5.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_5.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_6.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_6.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_7.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_7.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_8.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_8.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_9.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_9.min_nb_trans", ); err != nil { return nil, err } diff --git a/pkg/networkserver/mac/adr.go b/pkg/networkserver/mac/adr.go index 1c471901fa..b82297a877 100644 --- a/pkg/networkserver/mac/adr.go +++ b/pkg/networkserver/mac/adr.go @@ -22,6 +22,7 @@ import ( "go.thethings.network/lorawan-stack/v3/pkg/log" "go.thethings.network/lorawan-stack/v3/pkg/networkserver/internal" "go.thethings.network/lorawan-stack/v3/pkg/ttnpb" + "google.golang.org/protobuf/types/known/wrapperspb" ) var demodulationFloor = map[uint32]map[uint32]float32{ @@ -368,10 +369,64 @@ func clampTxPowerRange( } } -func clampNbTrans(dev *ttnpb.EndDevice, defaults *ttnpb.MACSettings, nbTrans uint32) uint32 { +// DataRateIndexOverridesOf returns the per-data rate index overrides of the given dynamic ADR settings. +func DataRateIndexOverridesOf( + overrides *ttnpb.ADRSettings_DynamicMode_Overrides, drIdx ttnpb.DataRateIndex, +) *ttnpb.ADRSettings_DynamicMode_PerDataRateIndexOverride { + switch drIdx { + case ttnpb.DataRateIndex_DATA_RATE_0: + return overrides.GetDataRate_0() + case ttnpb.DataRateIndex_DATA_RATE_1: + return overrides.GetDataRate_1() + case ttnpb.DataRateIndex_DATA_RATE_2: + return overrides.GetDataRate_2() + case ttnpb.DataRateIndex_DATA_RATE_3: + return overrides.GetDataRate_3() + case ttnpb.DataRateIndex_DATA_RATE_4: + return overrides.GetDataRate_4() + case ttnpb.DataRateIndex_DATA_RATE_5: + return overrides.GetDataRate_5() + case ttnpb.DataRateIndex_DATA_RATE_6: + return overrides.GetDataRate_6() + case ttnpb.DataRateIndex_DATA_RATE_7: + return overrides.GetDataRate_7() + case ttnpb.DataRateIndex_DATA_RATE_8: + return overrides.GetDataRate_8() + case ttnpb.DataRateIndex_DATA_RATE_9: + return overrides.GetDataRate_9() + case ttnpb.DataRateIndex_DATA_RATE_10: + return overrides.GetDataRate_10() + case ttnpb.DataRateIndex_DATA_RATE_11: + return overrides.GetDataRate_11() + case ttnpb.DataRateIndex_DATA_RATE_12: + return overrides.GetDataRate_12() + case ttnpb.DataRateIndex_DATA_RATE_13: + return overrides.GetDataRate_13() + case ttnpb.DataRateIndex_DATA_RATE_14: + return overrides.GetDataRate_14() + case ttnpb.DataRateIndex_DATA_RATE_15: + return overrides.GetDataRate_15() + default: + panic("unreachable") + } +} + +func nbTransRange( + dynamicSettings *ttnpb.ADRSettings_DynamicMode, dataRateIndex ttnpb.DataRateIndex, +) (min, max *wrapperspb.UInt32Value) { + overrides := DataRateIndexOverridesOf(dynamicSettings.Overrides, dataRateIndex) + if overrides == nil { + return dynamicSettings.MinNbTrans, dynamicSettings.MaxNbTrans + } + return overrides.MinNbTrans, overrides.MaxNbTrans +} + +func clampNbTrans( + dev *ttnpb.EndDevice, defaults *ttnpb.MACSettings, nbTrans uint32, dataRateIndex ttnpb.DataRateIndex, +) uint32 { clamp := func(dynamicSettings *ttnpb.ADRSettings_DynamicMode) uint32 { nbTrans := nbTrans - minSetting, maxSetting := dynamicSettings.MinNbTrans, dynamicSettings.MaxNbTrans + minSetting, maxSetting := nbTransRange(dynamicSettings, dataRateIndex) if minSetting != nil && minSetting.Value > nbTrans { nbTrans = minSetting.Value } @@ -601,7 +656,7 @@ func adrAdaptNbTrans( ) { macState := dev.MacState currentParameters, desiredParameters := macState.CurrentParameters, macState.DesiredParameters - nbTrans := clampNbTrans(dev, defaults, currentParameters.AdrNbTrans) + nbTrans := clampNbTrans(dev, defaults, currentParameters.AdrNbTrans, desiredParameters.AdrDataRateIndex) if len(adrUplinks) >= OptimalADRUplinkCount/2 { switch r := adrLossRate(adrUplinks...); { case r < 0.05: @@ -613,7 +668,7 @@ func adrAdaptNbTrans( nbTrans = maxNbTrans } } - desiredParameters.AdrNbTrans = clampNbTrans(dev, defaults, nbTrans) + desiredParameters.AdrNbTrans = clampNbTrans(dev, defaults, nbTrans, desiredParameters.AdrDataRateIndex) } func adaptDataRate(ctx context.Context, dev *ttnpb.EndDevice, phy *band.Band, defaults *ttnpb.MACSettings) error { diff --git a/pkg/networkserver/mac/adr_test.go b/pkg/networkserver/mac/adr_test.go index 971507598e..5acc758a0e 100644 --- a/pkg/networkserver/mac/adr_test.go +++ b/pkg/networkserver/mac/adr_test.go @@ -1253,7 +1253,8 @@ func TestClampNbTrans(t *testing.T) { Device *ttnpb.EndDevice Defaults *ttnpb.MACSettings - InputNbTrans uint32 + InputNbTrans uint32 + DataRateIndex ttnpb.DataRateIndex ExpectedNbTrans uint32 }{ @@ -1420,6 +1421,64 @@ func TestClampNbTrans(t *testing.T) { ExpectedNbTrans: 12, }, + { + Name: "maximum override; left of provided value", + + Device: &ttnpb.EndDevice{ + MacSettings: &ttnpb.MACSettings{ + Adr: &ttnpb.ADRSettings{ + Mode: &ttnpb.ADRSettings_Dynamic{ + Dynamic: &ttnpb.ADRSettings_DynamicMode{ + MaxNbTrans: &wrapperspb.UInt32Value{ + Value: 3, + }, + Overrides: &ttnpb.ADRSettings_DynamicMode_Overrides{ + DataRate_1: &ttnpb.ADRSettings_DynamicMode_PerDataRateIndexOverride{ + MaxNbTrans: &wrapperspb.UInt32Value{ + Value: 2, + }, + }, + }, + }, + }, + }, + }, + }, + + InputNbTrans: 3, + DataRateIndex: ttnpb.DataRateIndex_DATA_RATE_1, + + ExpectedNbTrans: 2, + }, + { + Name: "maximum override; right of provided value", + + Device: &ttnpb.EndDevice{ + MacSettings: &ttnpb.MACSettings{ + Adr: &ttnpb.ADRSettings{ + Mode: &ttnpb.ADRSettings_Dynamic{ + Dynamic: &ttnpb.ADRSettings_DynamicMode{ + MaxNbTrans: &wrapperspb.UInt32Value{ + Value: 1, + }, + Overrides: &ttnpb.ADRSettings_DynamicMode_Overrides{ + DataRate_1: &ttnpb.ADRSettings_DynamicMode_PerDataRateIndexOverride{ + MaxNbTrans: &wrapperspb.UInt32Value{ + Value: 2, + }, + }, + }, + }, + }, + }, + }, + }, + + InputNbTrans: 2, + DataRateIndex: ttnpb.DataRateIndex_DATA_RATE_1, + + ExpectedNbTrans: 2, + }, } { tc := tc t.Run(tc.Name, func(t *testing.T) { @@ -1427,7 +1486,7 @@ func TestClampNbTrans(t *testing.T) { a := assertions.New(t) - value := ClampNbTrans(tc.Device, tc.Defaults, tc.InputNbTrans) + value := ClampNbTrans(tc.Device, tc.Defaults, tc.InputNbTrans, tc.DataRateIndex) a.So(value, should.Equal, tc.ExpectedNbTrans) }) } diff --git a/pkg/ttnpb/end_device.go b/pkg/ttnpb/end_device.go index b409326c4f..438451b0b7 100644 --- a/pkg/ttnpb/end_device.go +++ b/pkg/ttnpb/end_device.go @@ -489,6 +489,126 @@ func (v *ADRSettings_DynamicMode_ChannelSteeringSettings) FieldIsZero(p string) panic(fmt.Sprintf("unknown path '%s'", p)) } +// FieldIsZero returns whether path p is zero. +func (v *ADRSettings_DynamicMode_PerDataRateIndexOverride) FieldIsZero(p string) bool { + if v == nil { + return true + } + switch p { + case "min_nb_trans": + return v.MinNbTrans == nil + case "max_nb_trans": + return v.MaxNbTrans == nil + } + panic(fmt.Sprintf("unknown path '%s'", p)) +} + +// FieldIsZero returns whether path p is zero. +func (v *ADRSettings_DynamicMode_Overrides) FieldIsZero(p string) bool { + if v == nil { + return true + } + switch p { + case "data_rate_0": + return v.DataRate_0 == nil + case "data_rate_0.min_nb_trans": + return v.DataRate_0.FieldIsZero("min_nb_trans") + case "data_rate_0.max_nb_trans": + return v.DataRate_0.FieldIsZero("max_nb_trans") + case "data_rate_1": + return v.DataRate_1 == nil + case "data_rate_1.min_nb_trans": + return v.DataRate_1.FieldIsZero("min_nb_trans") + case "data_rate_1.max_nb_trans": + return v.DataRate_1.FieldIsZero("max_nb_trans") + case "data_rate_2": + return v.DataRate_2 == nil + case "data_rate_2.min_nb_trans": + return v.DataRate_2.FieldIsZero("min_nb_trans") + case "data_rate_2.max_nb_trans": + return v.DataRate_2.FieldIsZero("max_nb_trans") + case "data_rate_3": + return v.DataRate_3 == nil + case "data_rate_3.min_nb_trans": + return v.DataRate_3.FieldIsZero("min_nb_trans") + case "data_rate_3.max_nb_trans": + return v.DataRate_3.FieldIsZero("max_nb_trans") + case "data_rate_4": + return v.DataRate_4 == nil + case "data_rate_4.min_nb_trans": + return v.DataRate_4.FieldIsZero("min_nb_trans") + case "data_rate_4.max_nb_trans": + return v.DataRate_4.FieldIsZero("max_nb_trans") + case "data_rate_5": + return v.DataRate_5 == nil + case "data_rate_5.min_nb_trans": + return v.DataRate_5.FieldIsZero("min_nb_trans") + case "data_rate_5.max_nb_trans": + return v.DataRate_5.FieldIsZero("max_nb_trans") + case "data_rate_6": + return v.DataRate_6 == nil + case "data_rate_6.min_nb_trans": + return v.DataRate_6.FieldIsZero("min_nb_trans") + case "data_rate_6.max_nb_trans": + return v.DataRate_6.FieldIsZero("max_nb_trans") + case "data_rate_7": + return v.DataRate_7 == nil + case "data_rate_7.min_nb_trans": + return v.DataRate_7.FieldIsZero("min_nb_trans") + case "data_rate_7.max_nb_trans": + return v.DataRate_7.FieldIsZero("max_nb_trans") + case "data_rate_8": + return v.DataRate_8 == nil + case "data_rate_8.min_nb_trans": + return v.DataRate_8.FieldIsZero("min_nb_trans") + case "data_rate_8.max_nb_trans": + return v.DataRate_8.FieldIsZero("max_nb_trans") + case "data_rate_9": + return v.DataRate_9 == nil + case "data_rate_9.min_nb_trans": + return v.DataRate_9.FieldIsZero("min_nb_trans") + case "data_rate_9.max_nb_trans": + return v.DataRate_9.FieldIsZero("max_nb_trans") + case "data_rate_10": + return v.DataRate_10 == nil + case "data_rate_10.min_nb_trans": + return v.DataRate_10.FieldIsZero("min_nb_trans") + case "data_rate_10.max_nb_trans": + return v.DataRate_10.FieldIsZero("max_nb_trans") + case "data_rate_11": + return v.DataRate_11 == nil + case "data_rate_11.min_nb_trans": + return v.DataRate_11.FieldIsZero("min_nb_trans") + case "data_rate_11.max_nb_trans": + return v.DataRate_11.FieldIsZero("max_nb_trans") + case "data_rate_12": + return v.DataRate_12 == nil + case "data_rate_12.min_nb_trans": + return v.DataRate_12.FieldIsZero("min_nb_trans") + case "data_rate_12.max_nb_trans": + return v.DataRate_12.FieldIsZero("max_nb_trans") + case "data_rate_13": + return v.DataRate_13 == nil + case "data_rate_13.min_nb_trans": + return v.DataRate_13.FieldIsZero("min_nb_trans") + case "data_rate_13.max_nb_trans": + return v.DataRate_13.FieldIsZero("max_nb_trans") + case "data_rate_14": + return v.DataRate_14 == nil + case "data_rate_14.min_nb_trans": + return v.DataRate_14.FieldIsZero("min_nb_trans") + case "data_rate_14.max_nb_trans": + return v.DataRate_14.FieldIsZero("max_nb_trans") + case "data_rate_15": + return v.DataRate_15 == nil + case "data_rate_15.min_nb_trans": + return v.DataRate_15.FieldIsZero("min_nb_trans") + case "data_rate_15.max_nb_trans": + return v.DataRate_15.FieldIsZero("max_nb_trans") + } + panic(fmt.Sprintf("unknown path '%s'", p)) +} + // FieldIsZero returns whether path p is zero. func (v *ADRSettings_DynamicMode) FieldIsZero(p string) bool { if v == nil { @@ -521,6 +641,104 @@ func (v *ADRSettings_DynamicMode) FieldIsZero(p string) bool { return v.MinNbTrans == nil case "max_nb_trans": return v.MaxNbTrans == nil + case "overrides": + return v.Overrides == nil + case "overrides.data_rate_0": + return v.Overrides.FieldIsZero("data_rate_0") + case "overrides.data_rate_0.min_nb_trans": + return v.Overrides.FieldIsZero("data_rate_0.min_nb_trans") + case "overrides.data_rate_0.max_nb_trans": + return v.Overrides.FieldIsZero("data_rate_0.max_nb_trans") + case "overrides.data_rate_1": + return v.Overrides.FieldIsZero("data_rate_1") + case "overrides.data_rate_1.min_nb_trans": + return v.Overrides.FieldIsZero("data_rate_1.min_nb_trans") + case "overrides.data_rate_1.max_nb_trans": + return v.Overrides.FieldIsZero("data_rate_1.max_nb_trans") + case "overrides.data_rate_2": + return v.Overrides.FieldIsZero("data_rate_2") + case "overrides.data_rate_2.min_nb_trans": + return v.Overrides.FieldIsZero("data_rate_2.min_nb_trans") + case "overrides.data_rate_2.max_nb_trans": + return v.Overrides.FieldIsZero("data_rate_2.max_nb_trans") + case "overrides.data_rate_3": + return v.Overrides.FieldIsZero("data_rate_3") + case "overrides.data_rate_3.min_nb_trans": + return v.Overrides.FieldIsZero("data_rate_3.min_nb_trans") + case "overrides.data_rate_3.max_nb_trans": + return v.Overrides.FieldIsZero("data_rate_3.max_nb_trans") + case "overrides.data_rate_4": + return v.Overrides.FieldIsZero("data_rate_4") + case "overrides.data_rate_4.min_nb_trans": + return v.Overrides.FieldIsZero("data_rate_4.min_nb_trans") + case "overrides.data_rate_4.max_nb_trans": + return v.Overrides.FieldIsZero("data_rate_4.max_nb_trans") + case "overrides.data_rate_5": + return v.Overrides.FieldIsZero("data_rate_5") + case "overrides.data_rate_5.min_nb_trans": + return v.Overrides.FieldIsZero("data_rate_5.min_nb_trans") + case "overrides.data_rate_5.max_nb_trans": + return v.Overrides.FieldIsZero("data_rate_5.max_nb_trans") + case "overrides.data_rate_6": + return v.Overrides.FieldIsZero("data_rate_6") + case "overrides.data_rate_6.min_nb_trans": + return v.Overrides.FieldIsZero("data_rate_6.min_nb_trans") + case "overrides.data_rate_6.max_nb_trans": + return v.Overrides.FieldIsZero("data_rate_6.max_nb_trans") + case "overrides.data_rate_7": + return v.Overrides.FieldIsZero("data_rate_7") + case "overrides.data_rate_7.min_nb_trans": + return v.Overrides.FieldIsZero("data_rate_7.min_nb_trans") + case "overrides.data_rate_7.max_nb_trans": + return v.Overrides.FieldIsZero("data_rate_7.max_nb_trans") + case "overrides.data_rate_8": + return v.Overrides.FieldIsZero("data_rate_8") + case "overrides.data_rate_8.min_nb_trans": + return v.Overrides.FieldIsZero("data_rate_8.min_nb_trans") + case "overrides.data_rate_8.max_nb_trans": + return v.Overrides.FieldIsZero("data_rate_8.max_nb_trans") + case "overrides.data_rate_9": + return v.Overrides.FieldIsZero("data_rate_9") + case "overrides.data_rate_9.min_nb_trans": + return v.Overrides.FieldIsZero("data_rate_9.min_nb_trans") + case "overrides.data_rate_9.max_nb_trans": + return v.Overrides.FieldIsZero("data_rate_9.max_nb_trans") + case "overrides.data_rate_10": + return v.Overrides.FieldIsZero("data_rate_10") + case "overrides.data_rate_10.min_nb_trans": + return v.Overrides.FieldIsZero("data_rate_10.min_nb_trans") + case "overrides.data_rate_10.max_nb_trans": + return v.Overrides.FieldIsZero("data_rate_10.max_nb_trans") + case "overrides.data_rate_11": + return v.Overrides.FieldIsZero("data_rate_11") + case "overrides.data_rate_11.min_nb_trans": + return v.Overrides.FieldIsZero("data_rate_11.min_nb_trans") + case "overrides.data_rate_11.max_nb_trans": + return v.Overrides.FieldIsZero("data_rate_11.max_nb_trans") + case "overrides.data_rate_12": + return v.Overrides.FieldIsZero("data_rate_12") + case "overrides.data_rate_12.min_nb_trans": + return v.Overrides.FieldIsZero("data_rate_12.min_nb_trans") + case "overrides.data_rate_12.max_nb_trans": + return v.Overrides.FieldIsZero("data_rate_12.max_nb_trans") + case "overrides.data_rate_13": + return v.Overrides.FieldIsZero("data_rate_13") + case "overrides.data_rate_13.min_nb_trans": + return v.Overrides.FieldIsZero("data_rate_13.min_nb_trans") + case "overrides.data_rate_13.max_nb_trans": + return v.Overrides.FieldIsZero("data_rate_13.max_nb_trans") + case "overrides.data_rate_14": + return v.Overrides.FieldIsZero("data_rate_14") + case "overrides.data_rate_14.min_nb_trans": + return v.Overrides.FieldIsZero("data_rate_14.min_nb_trans") + case "overrides.data_rate_14.max_nb_trans": + return v.Overrides.FieldIsZero("data_rate_14.max_nb_trans") + case "overrides.data_rate_15": + return v.Overrides.FieldIsZero("data_rate_15") + case "overrides.data_rate_15.min_nb_trans": + return v.Overrides.FieldIsZero("data_rate_15.min_nb_trans") + case "overrides.data_rate_15.max_nb_trans": + return v.Overrides.FieldIsZero("data_rate_15.max_nb_trans") } panic(fmt.Sprintf("unknown path '%s'", p)) } @@ -569,6 +787,104 @@ func (v *ADRSettings) FieldIsZero(p string) bool { return v.GetDynamic().FieldIsZero("min_nb_trans") case "mode.dynamic.max_nb_trans": return v.GetDynamic().FieldIsZero("max_nb_trans") + case "mode.dynamic.overrides": + return v.GetDynamic().FieldIsZero("overrides") + case "mode.dynamic.overrides.data_rate_0": + return v.GetDynamic().FieldIsZero("overrides.data_rate_0") + case "mode.dynamic.overrides.data_rate_0.min_nb_trans": + return v.GetDynamic().FieldIsZero("overrides.data_rate_0.min_nb_trans") + case "mode.dynamic.overrides.data_rate_0.max_nb_trans": + return v.GetDynamic().FieldIsZero("overrides.data_rate_0.max_nb_trans") + case "mode.dynamic.overrides.data_rate_1": + return v.GetDynamic().FieldIsZero("overrides.data_rate_1") + case "mode.dynamic.overrides.data_rate_1.min_nb_trans": + return v.GetDynamic().FieldIsZero("overrides.data_rate_1.min_nb_trans") + case "mode.dynamic.overrides.data_rate_1.max_nb_trans": + return v.GetDynamic().FieldIsZero("overrides.data_rate_1.max_nb_trans") + case "mode.dynamic.overrides.data_rate_2": + return v.GetDynamic().FieldIsZero("overrides.data_rate_2") + case "mode.dynamic.overrides.data_rate_2.min_nb_trans": + return v.GetDynamic().FieldIsZero("overrides.data_rate_2.min_nb_trans") + case "mode.dynamic.overrides.data_rate_2.max_nb_trans": + return v.GetDynamic().FieldIsZero("overrides.data_rate_2.max_nb_trans") + case "mode.dynamic.overrides.data_rate_3": + return v.GetDynamic().FieldIsZero("overrides.data_rate_3") + case "mode.dynamic.overrides.data_rate_3.min_nb_trans": + return v.GetDynamic().FieldIsZero("overrides.data_rate_3.min_nb_trans") + case "mode.dynamic.overrides.data_rate_3.max_nb_trans": + return v.GetDynamic().FieldIsZero("overrides.data_rate_3.max_nb_trans") + case "mode.dynamic.overrides.data_rate_4": + return v.GetDynamic().FieldIsZero("overrides.data_rate_4") + case "mode.dynamic.overrides.data_rate_4.min_nb_trans": + return v.GetDynamic().FieldIsZero("overrides.data_rate_4.min_nb_trans") + case "mode.dynamic.overrides.data_rate_4.max_nb_trans": + return v.GetDynamic().FieldIsZero("overrides.data_rate_4.max_nb_trans") + case "mode.dynamic.overrides.data_rate_5": + return v.GetDynamic().FieldIsZero("overrides.data_rate_0") + case "mode.dynamic.overrides.data_rate_5.min_nb_trans": + return v.GetDynamic().FieldIsZero("overrides.data_rate_5.min_nb_trans") + case "mode.dynamic.overrides.data_rate_5.max_nb_trans": + return v.GetDynamic().FieldIsZero("overrides.data_rate_5.max_nb_trans") + case "mode.dynamic.overrides.data_rate_6": + return v.GetDynamic().FieldIsZero("overrides.data_rate_6") + case "mode.dynamic.overrides.data_rate_6.min_nb_trans": + return v.GetDynamic().FieldIsZero("overrides.data_rate_6.min_nb_trans") + case "mode.dynamic.overrides.data_rate_6.max_nb_trans": + return v.GetDynamic().FieldIsZero("overrides.data_rate_6.max_nb_trans") + case "mode.dynamic.overrides.data_rate_7": + return v.GetDynamic().FieldIsZero("overrides.data_rate_7") + case "mode.dynamic.overrides.data_rate_7.min_nb_trans": + return v.GetDynamic().FieldIsZero("overrides.data_rate_7.min_nb_trans") + case "mode.dynamic.overrides.data_rate_7.max_nb_trans": + return v.GetDynamic().FieldIsZero("overrides.data_rate_7.max_nb_trans") + case "mode.dynamic.overrides.data_rate_8": + return v.GetDynamic().FieldIsZero("overrides.data_rate_8") + case "mode.dynamic.overrides.data_rate_8.min_nb_trans": + return v.GetDynamic().FieldIsZero("overrides.data_rate_8.min_nb_trans") + case "mode.dynamic.overrides.data_rate_8.max_nb_trans": + return v.GetDynamic().FieldIsZero("overrides.data_rate_8.max_nb_trans") + case "mode.dynamic.overrides.data_rate_9": + return v.GetDynamic().FieldIsZero("overrides.data_rate_9") + case "mode.dynamic.overrides.data_rate_9.min_nb_trans": + return v.GetDynamic().FieldIsZero("overrides.data_rate_9.min_nb_trans") + case "mode.dynamic.overrides.data_rate_9.max_nb_trans": + return v.GetDynamic().FieldIsZero("overrides.data_rate_9.max_nb_trans") + case "mode.dynamic.overrides.data_rate_10": + return v.GetDynamic().FieldIsZero("overrides.data_rate_10") + case "mode.dynamic.overrides.data_rate_10.min_nb_trans": + return v.GetDynamic().FieldIsZero("overrides.data_rate_10.min_nb_trans") + case "mode.dynamic.overrides.data_rate_10.max_nb_trans": + return v.GetDynamic().FieldIsZero("overrides.data_rate_10.max_nb_trans") + case "mode.dynamic.overrides.data_rate_11": + return v.GetDynamic().FieldIsZero("overrides.data_rate_11") + case "mode.dynamic.overrides.data_rate_11.min_nb_trans": + return v.GetDynamic().FieldIsZero("overrides.data_rate_11.min_nb_trans") + case "mode.dynamic.overrides.data_rate_11.max_nb_trans": + return v.GetDynamic().FieldIsZero("overrides.data_rate_11.max_nb_trans") + case "mode.dynamic.overrides.data_rate_12": + return v.GetDynamic().FieldIsZero("overrides.data_rate_12") + case "mode.dynamic.overrides.data_rate_12.min_nb_trans": + return v.GetDynamic().FieldIsZero("overrides.data_rate_12.min_nb_trans") + case "mode.dynamic.overrides.data_rate_12.max_nb_trans": + return v.GetDynamic().FieldIsZero("overrides.data_rate_12.max_nb_trans") + case "mode.dynamic.overrides.data_rate_13": + return v.GetDynamic().FieldIsZero("overrides.data_rate_13") + case "mode.dynamic.overrides.data_rate_13.min_nb_trans": + return v.GetDynamic().FieldIsZero("overrides.data_rate_13.min_nb_trans") + case "mode.dynamic.overrides.data_rate_13.max_nb_trans": + return v.GetDynamic().FieldIsZero("overrides.data_rate_13.max_nb_trans") + case "mode.dynamic.overrides.data_rate_14": + return v.GetDynamic().FieldIsZero("overrides.data_rate_14") + case "mode.dynamic.overrides.data_rate_14.min_nb_trans": + return v.GetDynamic().FieldIsZero("overrides.data_rate_14.min_nb_trans") + case "mode.dynamic.overrides.data_rate_14.max_nb_trans": + return v.GetDynamic().FieldIsZero("overrides.data_rate_14.max_nb_trans") + case "mode.dynamic.overrides.data_rate_15": + return v.GetDynamic().FieldIsZero("overrides.data_rate_15") + case "mode.dynamic.overrides.data_rate_15.min_nb_trans": + return v.GetDynamic().FieldIsZero("overrides.data_rate_15.min_nb_trans") + case "mode.dynamic.overrides.data_rate_15.max_nb_trans": + return v.GetDynamic().FieldIsZero("overrides.data_rate_15.max_nb_trans") case "mode.disabled": return v.GetDisabled() == nil } @@ -621,6 +937,104 @@ func (v *MACSettings) FieldIsZero(p string) bool { return v.Adr.FieldIsZero("mode.dynamic.min_nb_trans") case "adr.mode.dynamic.max_nb_trans": return v.Adr.FieldIsZero("mode.dynamic.max_nb_trans") + case "adr.mode.dynamic.overrides": + return v.Adr.FieldIsZero("mode.dynamic.overrides") + case "adr.mode.dynamic.overrides.data_rate_0": + return v.Adr.FieldIsZero("mode.dynamic.overrides.data_rate_0") + case "adr.mode.dynamic.overrides.data_rate_0.min_nb_trans": + return v.Adr.FieldIsZero("mode.dynamic.overrides.data_rate_0.min_nb_trans") + case "adr.mode.dynamic.overrides.data_rate_0.max_nb_trans": + return v.Adr.FieldIsZero("mode.dynamic.overrides.data_rate_0.max_nb_trans") + case "adr.mode.dynamic.overrides.data_rate_1": + return v.Adr.FieldIsZero("mode.dynamic.overrides.data_rate_1") + case "adr.mode.dynamic.overrides.data_rate_1.min_nb_trans": + return v.Adr.FieldIsZero("mode.dynamic.overrides.data_rate_1.min_nb_trans") + case "adr.mode.dynamic.overrides.data_rate_1.max_nb_trans": + return v.Adr.FieldIsZero("mode.dynamic.overrides.data_rate_1.max_nb_trans") + case "adr.mode.dynamic.overrides.data_rate_2": + return v.Adr.FieldIsZero("mode.dynamic.overrides.data_rate_2") + case "adr.mode.dynamic.overrides.data_rate_2.min_nb_trans": + return v.Adr.FieldIsZero("mode.dynamic.overrides.data_rate_2.min_nb_trans") + case "adr.mode.dynamic.overrides.data_rate_2.max_nb_trans": + return v.Adr.FieldIsZero("mode.dynamic.overrides.data_rate_2.max_nb_trans") + case "adr.mode.dynamic.overrides.data_rate_3": + return v.Adr.FieldIsZero("mode.dynamic.overrides.data_rate_3") + case "adr.mode.dynamic.overrides.data_rate_3.min_nb_trans": + return v.Adr.FieldIsZero("mode.dynamic.overrides.data_rate_3.min_nb_trans") + case "adr.mode.dynamic.overrides.data_rate_3.max_nb_trans": + return v.Adr.FieldIsZero("mode.dynamic.overrides.data_rate_3.max_nb_trans") + case "adr.mode.dynamic.overrides.data_rate_4": + return v.Adr.FieldIsZero("mode.dynamic.overrides.data_rate_4") + case "adr.mode.dynamic.overrides.data_rate_4.min_nb_trans": + return v.Adr.FieldIsZero("mode.dynamic.overrides.data_rate_4.min_nb_trans") + case "adr.mode.dynamic.overrides.data_rate_4.max_nb_trans": + return v.Adr.FieldIsZero("mode.dynamic.overrides.data_rate_4.max_nb_trans") + case "adr.mode.dynamic.overrides.data_rate_5": + return v.Adr.FieldIsZero("mode.dynamic.overrides.data_rate_5") + case "adr.mode.dynamic.overrides.data_rate_5.min_nb_trans": + return v.Adr.FieldIsZero("mode.dynamic.overrides.data_rate_5.min_nb_trans") + case "adr.mode.dynamic.overrides.data_rate_5.max_nb_trans": + return v.Adr.FieldIsZero("mode.dynamic.overrides.data_rate_5.max_nb_trans") + case "adr.mode.dynamic.overrides.data_rate_6": + return v.Adr.FieldIsZero("mode.dynamic.overrides.data_rate_6") + case "adr.mode.dynamic.overrides.data_rate_6.min_nb_trans": + return v.Adr.FieldIsZero("mode.dynamic.overrides.data_rate_6.min_nb_trans") + case "adr.mode.dynamic.overrides.data_rate_6.max_nb_trans": + return v.Adr.FieldIsZero("mode.dynamic.overrides.data_rate_6.max_nb_trans") + case "adr.mode.dynamic.overrides.data_rate_7": + return v.Adr.FieldIsZero("mode.dynamic.overrides.data_rate_7") + case "adr.mode.dynamic.overrides.data_rate_7.min_nb_trans": + return v.Adr.FieldIsZero("mode.dynamic.overrides.data_rate_7.min_nb_trans") + case "adr.mode.dynamic.overrides.data_rate_7.max_nb_trans": + return v.Adr.FieldIsZero("mode.dynamic.overrides.data_rate_7.max_nb_trans") + case "adr.mode.dynamic.overrides.data_rate_8": + return v.Adr.FieldIsZero("mode.dynamic.overrides.data_rate_8") + case "adr.mode.dynamic.overrides.data_rate_8.min_nb_trans": + return v.Adr.FieldIsZero("mode.dynamic.overrides.data_rate_8.min_nb_trans") + case "adr.mode.dynamic.overrides.data_rate_8.max_nb_trans": + return v.Adr.FieldIsZero("mode.dynamic.overrides.data_rate_8.max_nb_trans") + case "adr.mode.dynamic.overrides.data_rate_9": + return v.Adr.FieldIsZero("mode.dynamic.overrides.data_rate_9") + case "adr.mode.dynamic.overrides.data_rate_9.min_nb_trans": + return v.Adr.FieldIsZero("mode.dynamic.overrides.data_rate_9.min_nb_trans") + case "adr.mode.dynamic.overrides.data_rate_9.max_nb_trans": + return v.Adr.FieldIsZero("mode.dynamic.overrides.data_rate_9.max_nb_trans") + case "adr.mode.dynamic.overrides.data_rate_10": + return v.Adr.FieldIsZero("mode.dynamic.overrides.data_rate_10") + case "adr.mode.dynamic.overrides.data_rate_10.min_nb_trans": + return v.Adr.FieldIsZero("mode.dynamic.overrides.data_rate_10.min_nb_trans") + case "adr.mode.dynamic.overrides.data_rate_10.max_nb_trans": + return v.Adr.FieldIsZero("mode.dynamic.overrides.data_rate_10.max_nb_trans") + case "adr.mode.dynamic.overrides.data_rate_11": + return v.Adr.FieldIsZero("mode.dynamic.overrides.data_rate_11") + case "adr.mode.dynamic.overrides.data_rate_11.min_nb_trans": + return v.Adr.FieldIsZero("mode.dynamic.overrides.data_rate_11.min_nb_trans") + case "adr.mode.dynamic.overrides.data_rate_11.max_nb_trans": + return v.Adr.FieldIsZero("mode.dynamic.overrides.data_rate_11.max_nb_trans") + case "adr.mode.dynamic.overrides.data_rate_12": + return v.Adr.FieldIsZero("mode.dynamic.overrides.data_rate_12") + case "adr.mode.dynamic.overrides.data_rate_12.min_nb_trans": + return v.Adr.FieldIsZero("mode.dynamic.overrides.data_rate_12.min_nb_trans") + case "adr.mode.dynamic.overrides.data_rate_12.max_nb_trans": + return v.Adr.FieldIsZero("mode.dynamic.overrides.data_rate_12.max_nb_trans") + case "adr.mode.dynamic.overrides.data_rate_13": + return v.Adr.FieldIsZero("mode.dynamic.overrides.data_rate_13") + case "adr.mode.dynamic.overrides.data_rate_13.min_nb_trans": + return v.Adr.FieldIsZero("mode.dynamic.overrides.data_rate_13.min_nb_trans") + case "adr.mode.dynamic.overrides.data_rate_13.max_nb_trans": + return v.Adr.FieldIsZero("mode.dynamic.overrides.data_rate_13.max_nb_trans") + case "adr.mode.dynamic.overrides.data_rate_14": + return v.Adr.FieldIsZero("mode.dynamic.overrides.data_rate_14") + case "adr.mode.dynamic.overrides.data_rate_14.min_nb_trans": + return v.Adr.FieldIsZero("mode.dynamic.overrides.data_rate_14.min_nb_trans") + case "adr.mode.dynamic.overrides.data_rate_14.max_nb_trans": + return v.Adr.FieldIsZero("mode.dynamic.overrides.data_rate_14.max_nb_trans") + case "adr.mode.dynamic.overrides.data_rate_15": + return v.Adr.FieldIsZero("mode.dynamic.overrides.data_rate_15") + case "adr.mode.dynamic.overrides.data_rate_15.min_nb_trans": + return v.Adr.FieldIsZero("mode.dynamic.overrides.data_rate_15.min_nb_trans") + case "adr.mode.dynamic.overrides.data_rate_15.max_nb_trans": + return v.Adr.FieldIsZero("mode.dynamic.overrides.data_rate_15.max_nb_trans") case "adr.mode.disabled": return v.Adr.FieldIsZero("mode.disabled") case "adr_margin": @@ -1879,6 +2293,104 @@ func (v *EndDevice) FieldIsZero(p string) bool { return v.MacSettings.FieldIsZero("adr.mode.dynamic.min_nb_trans") case "mac_settings.adr.mode.dynamic.max_nb_trans": return v.MacSettings.FieldIsZero("adr.mode.dynamic.max_nb_trans") + case "mac_settings.adr.mode.dynamic.overrides": + return v.MacSettings.FieldIsZero("adr.mode.dynamic.overrides") + case "mac_settings.adr.mode.dynamic.overrides.data_rate_0": + return v.MacSettings.FieldIsZero("adr.mode.dynamic.overrides.data_rate_0") + case "mac_settings.adr.mode.dynamic.overrides.data_rate_0.min_nb_trans": + return v.MacSettings.FieldIsZero("adr.mode.dynamic.overrides.data_rate_0.min_nb_trans") + case "mac_settings.adr.mode.dynamic.overrides.data_rate_0.max_nb_trans": + return v.MacSettings.FieldIsZero("adr.mode.dynamic.overrides.data_rate_0.max_nb_trans") + case "mac_settings.adr.mode.dynamic.overrides.data_rate_1": + return v.MacSettings.FieldIsZero("adr.mode.dynamic.overrides.data_rate_1") + case "mac_settings.adr.mode.dynamic.overrides.data_rate_1.min_nb_trans": + return v.MacSettings.FieldIsZero("adr.mode.dynamic.overrides.data_rate_1.min_nb_trans") + case "mac_settings.adr.mode.dynamic.overrides.data_rate_1.max_nb_trans": + return v.MacSettings.FieldIsZero("adr.mode.dynamic.overrides.data_rate_1.max_nb_trans") + case "mac_settings.adr.mode.dynamic.overrides.data_rate_2": + return v.MacSettings.FieldIsZero("adr.mode.dynamic.overrides.data_rate_2") + case "mac_settings.adr.mode.dynamic.overrides.data_rate_2.min_nb_trans": + return v.MacSettings.FieldIsZero("adr.mode.dynamic.overrides.data_rate_2.min_nb_trans") + case "mac_settings.adr.mode.dynamic.overrides.data_rate_2.max_nb_trans": + return v.MacSettings.FieldIsZero("adr.mode.dynamic.overrides.data_rate_2.max_nb_trans") + case "mac_settings.adr.mode.dynamic.overrides.data_rate_3": + return v.MacSettings.FieldIsZero("adr.mode.dynamic.overrides.data_rate_3") + case "mac_settings.adr.mode.dynamic.overrides.data_rate_3.min_nb_trans": + return v.MacSettings.FieldIsZero("adr.mode.dynamic.overrides.data_rate_3.min_nb_trans") + case "mac_settings.adr.mode.dynamic.overrides.data_rate_3.max_nb_trans": + return v.MacSettings.FieldIsZero("adr.mode.dynamic.overrides.data_rate_3.max_nb_trans") + case "mac_settings.adr.mode.dynamic.overrides.data_rate_4": + return v.MacSettings.FieldIsZero("adr.mode.dynamic.overrides.data_rate_4") + case "mac_settings.adr.mode.dynamic.overrides.data_rate_4.min_nb_trans": + return v.MacSettings.FieldIsZero("adr.mode.dynamic.overrides.data_rate_4.min_nb_trans") + case "mac_settings.adr.mode.dynamic.overrides.data_rate_4.max_nb_trans": + return v.MacSettings.FieldIsZero("adr.mode.dynamic.overrides.data_rate_4.max_nb_trans") + case "mac_settings.adr.mode.dynamic.overrides.data_rate_5": + return v.MacSettings.FieldIsZero("adr.mode.dynamic.overrides.data_rate_5") + case "mac_settings.adr.mode.dynamic.overrides.data_rate_5.min_nb_trans": + return v.MacSettings.FieldIsZero("adr.mode.dynamic.overrides.data_rate_5.min_nb_trans") + case "mac_settings.adr.mode.dynamic.overrides.data_rate_5.max_nb_trans": + return v.MacSettings.FieldIsZero("adr.mode.dynamic.overrides.data_rate_5.max_nb_trans") + case "mac_settings.adr.mode.dynamic.overrides.data_rate_6": + return v.MacSettings.FieldIsZero("adr.mode.dynamic.overrides.data_rate_6") + case "mac_settings.adr.mode.dynamic.overrides.data_rate_6.min_nb_trans": + return v.MacSettings.FieldIsZero("adr.mode.dynamic.overrides.data_rate_6.min_nb_trans") + case "mac_settings.adr.mode.dynamic.overrides.data_rate_6.max_nb_trans": + return v.MacSettings.FieldIsZero("adr.mode.dynamic.overrides.data_rate_6.max_nb_trans") + case "mac_settings.adr.mode.dynamic.overrides.data_rate_7": + return v.MacSettings.FieldIsZero("adr.mode.dynamic.overrides.data_rate_7") + case "mac_settings.adr.mode.dynamic.overrides.data_rate_7.min_nb_trans": + return v.MacSettings.FieldIsZero("adr.mode.dynamic.overrides.data_rate_7.min_nb_trans") + case "mac_settings.adr.mode.dynamic.overrides.data_rate_7.max_nb_trans": + return v.MacSettings.FieldIsZero("adr.mode.dynamic.overrides.data_rate_7.max_nb_trans") + case "mac_settings.adr.mode.dynamic.overrides.data_rate_8": + return v.MacSettings.FieldIsZero("adr.mode.dynamic.overrides.data_rate_8") + case "mac_settings.adr.mode.dynamic.overrides.data_rate_8.min_nb_trans": + return v.MacSettings.FieldIsZero("adr.mode.dynamic.overrides.data_rate_8.min_nb_trans") + case "mac_settings.adr.mode.dynamic.overrides.data_rate_8.max_nb_trans": + return v.MacSettings.FieldIsZero("adr.mode.dynamic.overrides.data_rate_8.max_nb_trans") + case "mac_settings.adr.mode.dynamic.overrides.data_rate_9": + return v.MacSettings.FieldIsZero("adr.mode.dynamic.overrides.data_rate_9") + case "mac_settings.adr.mode.dynamic.overrides.data_rate_9.min_nb_trans": + return v.MacSettings.FieldIsZero("adr.mode.dynamic.overrides.data_rate_9.min_nb_trans") + case "mac_settings.adr.mode.dynamic.overrides.data_rate_9.max_nb_trans": + return v.MacSettings.FieldIsZero("adr.mode.dynamic.overrides.data_rate_9.max_nb_trans") + case "mac_settings.adr.mode.dynamic.overrides.data_rate_10": + return v.MacSettings.FieldIsZero("adr.mode.dynamic.overrides.data_rate_10") + case "mac_settings.adr.mode.dynamic.overrides.data_rate_10.min_nb_trans": + return v.MacSettings.FieldIsZero("adr.mode.dynamic.overrides.data_rate_10.min_nb_trans") + case "mac_settings.adr.mode.dynamic.overrides.data_rate_10.max_nb_trans": + return v.MacSettings.FieldIsZero("adr.mode.dynamic.overrides.data_rate_10.max_nb_trans") + case "mac_settings.adr.mode.dynamic.overrides.data_rate_11": + return v.MacSettings.FieldIsZero("adr.mode.dynamic.overrides.data_rate_11") + case "mac_settings.adr.mode.dynamic.overrides.data_rate_11.min_nb_trans": + return v.MacSettings.FieldIsZero("adr.mode.dynamic.overrides.data_rate_11.min_nb_trans") + case "mac_settings.adr.mode.dynamic.overrides.data_rate_11.max_nb_trans": + return v.MacSettings.FieldIsZero("adr.mode.dynamic.overrides.data_rate_11.max_nb_trans") + case "mac_settings.adr.mode.dynamic.overrides.data_rate_12": + return v.MacSettings.FieldIsZero("adr.mode.dynamic.overrides.data_rate_12") + case "mac_settings.adr.mode.dynamic.overrides.data_rate_12.min_nb_trans": + return v.MacSettings.FieldIsZero("adr.mode.dynamic.overrides.data_rate_12.min_nb_trans") + case "mac_settings.adr.mode.dynamic.overrides.data_rate_12.max_nb_trans": + return v.MacSettings.FieldIsZero("adr.mode.dynamic.overrides.data_rate_12.max_nb_trans") + case "mac_settings.adr.mode.dynamic.overrides.data_rate_13": + return v.MacSettings.FieldIsZero("adr.mode.dynamic.overrides.data_rate_13") + case "mac_settings.adr.mode.dynamic.overrides.data_rate_13.min_nb_trans": + return v.MacSettings.FieldIsZero("adr.mode.dynamic.overrides.data_rate_13.min_nb_trans") + case "mac_settings.adr.mode.dynamic.overrides.data_rate_13.max_nb_trans": + return v.MacSettings.FieldIsZero("adr.mode.dynamic.overrides.data_rate_13.max_nb_trans") + case "mac_settings.adr.mode.dynamic.overrides.data_rate_14": + return v.MacSettings.FieldIsZero("adr.mode.dynamic.overrides.data_rate_14") + case "mac_settings.adr.mode.dynamic.overrides.data_rate_14.min_nb_trans": + return v.MacSettings.FieldIsZero("adr.mode.dynamic.overrides.data_rate_14.min_nb_trans") + case "mac_settings.adr.mode.dynamic.overrides.data_rate_14.max_nb_trans": + return v.MacSettings.FieldIsZero("adr.mode.dynamic.overrides.data_rate_14.max_nb_trans") + case "mac_settings.adr.mode.dynamic.overrides.data_rate_15": + return v.MacSettings.FieldIsZero("adr.mode.dynamic.overrides.data_rate_15") + case "mac_settings.adr.mode.dynamic.overrides.data_rate_15.min_nb_trans": + return v.MacSettings.FieldIsZero("adr.mode.dynamic.overrides.data_rate_15.min_nb_trans") + case "mac_settings.adr.mode.dynamic.overrides.data_rate_15.max_nb_trans": + return v.MacSettings.FieldIsZero("adr.mode.dynamic.overrides.data_rate_15.max_nb_trans") case "mac_settings.adr.mode.disabled": return v.MacSettings.FieldIsZero("adr.mode.disabled") case "mac_settings.adr_margin": diff --git a/pkg/ttnpb/end_device.pb.go b/pkg/ttnpb/end_device.pb.go index 832bb2be55..7281030d1b 100644 --- a/pkg/ttnpb/end_device.pb.go +++ b/pkg/ttnpb/end_device.pb.go @@ -3940,6 +3940,7 @@ type ADRSettings_DynamicMode struct { // If unset, the default value from Network Server configuration will be used. MaxNbTrans *wrapperspb.UInt32Value `protobuf:"bytes,7,opt,name=max_nb_trans,json=maxNbTrans,proto3" json:"max_nb_trans,omitempty"` ChannelSteering *ADRSettings_DynamicMode_ChannelSteeringSettings `protobuf:"bytes,8,opt,name=channel_steering,json=channelSteering,proto3" json:"channel_steering,omitempty"` + Overrides *ADRSettings_DynamicMode_Overrides `protobuf:"bytes,9,opt,name=overrides,proto3" json:"overrides,omitempty"` } func (x *ADRSettings_DynamicMode) Reset() { @@ -4030,6 +4031,13 @@ func (x *ADRSettings_DynamicMode) GetChannelSteering() *ADRSettings_DynamicMode_ return nil } +func (x *ADRSettings_DynamicMode) GetOverrides() *ADRSettings_DynamicMode_Overrides { + if x != nil { + return x.Overrides + } + return nil +} + // Configuration options for cases in which ADR is to be disabled // completely. type ADRSettings_DisabledMode struct { @@ -4153,6 +4161,234 @@ func (*ADRSettings_DynamicMode_ChannelSteeringSettings_LoraNarrow) isADRSettings func (*ADRSettings_DynamicMode_ChannelSteeringSettings_Disabled) isADRSettings_DynamicMode_ChannelSteeringSettings_Mode() { } +// EXPERIMENTAL: Data rate index override settings. +type ADRSettings_DynamicMode_PerDataRateIndexOverride struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Minimum number of retransmissions. + // If unset, the default value from Network Server configuration will be used. + MinNbTrans *wrapperspb.UInt32Value `protobuf:"bytes,3,opt,name=min_nb_trans,json=minNbTrans,proto3" json:"min_nb_trans,omitempty"` + // Maximum number of retransmissions. + // If unset, the default value from Network Server configuration will be used. + MaxNbTrans *wrapperspb.UInt32Value `protobuf:"bytes,4,opt,name=max_nb_trans,json=maxNbTrans,proto3" json:"max_nb_trans,omitempty"` +} + +func (x *ADRSettings_DynamicMode_PerDataRateIndexOverride) Reset() { + *x = ADRSettings_DynamicMode_PerDataRateIndexOverride{} + if protoimpl.UnsafeEnabled { + mi := &file_ttn_lorawan_v3_end_device_proto_msgTypes[38] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ADRSettings_DynamicMode_PerDataRateIndexOverride) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ADRSettings_DynamicMode_PerDataRateIndexOverride) ProtoMessage() {} + +func (x *ADRSettings_DynamicMode_PerDataRateIndexOverride) ProtoReflect() protoreflect.Message { + mi := &file_ttn_lorawan_v3_end_device_proto_msgTypes[38] + 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 ADRSettings_DynamicMode_PerDataRateIndexOverride.ProtoReflect.Descriptor instead. +func (*ADRSettings_DynamicMode_PerDataRateIndexOverride) Descriptor() ([]byte, []int) { + return file_ttn_lorawan_v3_end_device_proto_rawDescGZIP(), []int{12, 1, 1} +} + +func (x *ADRSettings_DynamicMode_PerDataRateIndexOverride) GetMinNbTrans() *wrapperspb.UInt32Value { + if x != nil { + return x.MinNbTrans + } + return nil +} + +func (x *ADRSettings_DynamicMode_PerDataRateIndexOverride) GetMaxNbTrans() *wrapperspb.UInt32Value { + if x != nil { + return x.MaxNbTrans + } + return nil +} + +// EXPERIMENTAL: Configuration overrides. +type ADRSettings_DynamicMode_Overrides struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + DataRate_0 *ADRSettings_DynamicMode_PerDataRateIndexOverride `protobuf:"bytes,1,opt,name=data_rate_0,json=dataRate0,proto3" json:"data_rate_0,omitempty"` + DataRate_1 *ADRSettings_DynamicMode_PerDataRateIndexOverride `protobuf:"bytes,2,opt,name=data_rate_1,json=dataRate1,proto3" json:"data_rate_1,omitempty"` + DataRate_2 *ADRSettings_DynamicMode_PerDataRateIndexOverride `protobuf:"bytes,3,opt,name=data_rate_2,json=dataRate2,proto3" json:"data_rate_2,omitempty"` + DataRate_3 *ADRSettings_DynamicMode_PerDataRateIndexOverride `protobuf:"bytes,4,opt,name=data_rate_3,json=dataRate3,proto3" json:"data_rate_3,omitempty"` + DataRate_4 *ADRSettings_DynamicMode_PerDataRateIndexOverride `protobuf:"bytes,5,opt,name=data_rate_4,json=dataRate4,proto3" json:"data_rate_4,omitempty"` + DataRate_5 *ADRSettings_DynamicMode_PerDataRateIndexOverride `protobuf:"bytes,6,opt,name=data_rate_5,json=dataRate5,proto3" json:"data_rate_5,omitempty"` + DataRate_6 *ADRSettings_DynamicMode_PerDataRateIndexOverride `protobuf:"bytes,7,opt,name=data_rate_6,json=dataRate6,proto3" json:"data_rate_6,omitempty"` + DataRate_7 *ADRSettings_DynamicMode_PerDataRateIndexOverride `protobuf:"bytes,8,opt,name=data_rate_7,json=dataRate7,proto3" json:"data_rate_7,omitempty"` + DataRate_8 *ADRSettings_DynamicMode_PerDataRateIndexOverride `protobuf:"bytes,9,opt,name=data_rate_8,json=dataRate8,proto3" json:"data_rate_8,omitempty"` + DataRate_9 *ADRSettings_DynamicMode_PerDataRateIndexOverride `protobuf:"bytes,10,opt,name=data_rate_9,json=dataRate9,proto3" json:"data_rate_9,omitempty"` + DataRate_10 *ADRSettings_DynamicMode_PerDataRateIndexOverride `protobuf:"bytes,11,opt,name=data_rate_10,json=dataRate10,proto3" json:"data_rate_10,omitempty"` + DataRate_11 *ADRSettings_DynamicMode_PerDataRateIndexOverride `protobuf:"bytes,12,opt,name=data_rate_11,json=dataRate11,proto3" json:"data_rate_11,omitempty"` + DataRate_12 *ADRSettings_DynamicMode_PerDataRateIndexOverride `protobuf:"bytes,13,opt,name=data_rate_12,json=dataRate12,proto3" json:"data_rate_12,omitempty"` + DataRate_13 *ADRSettings_DynamicMode_PerDataRateIndexOverride `protobuf:"bytes,14,opt,name=data_rate_13,json=dataRate13,proto3" json:"data_rate_13,omitempty"` + DataRate_14 *ADRSettings_DynamicMode_PerDataRateIndexOverride `protobuf:"bytes,15,opt,name=data_rate_14,json=dataRate14,proto3" json:"data_rate_14,omitempty"` + DataRate_15 *ADRSettings_DynamicMode_PerDataRateIndexOverride `protobuf:"bytes,16,opt,name=data_rate_15,json=dataRate15,proto3" json:"data_rate_15,omitempty"` +} + +func (x *ADRSettings_DynamicMode_Overrides) Reset() { + *x = ADRSettings_DynamicMode_Overrides{} + if protoimpl.UnsafeEnabled { + mi := &file_ttn_lorawan_v3_end_device_proto_msgTypes[39] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ADRSettings_DynamicMode_Overrides) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ADRSettings_DynamicMode_Overrides) ProtoMessage() {} + +func (x *ADRSettings_DynamicMode_Overrides) ProtoReflect() protoreflect.Message { + mi := &file_ttn_lorawan_v3_end_device_proto_msgTypes[39] + 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 ADRSettings_DynamicMode_Overrides.ProtoReflect.Descriptor instead. +func (*ADRSettings_DynamicMode_Overrides) Descriptor() ([]byte, []int) { + return file_ttn_lorawan_v3_end_device_proto_rawDescGZIP(), []int{12, 1, 2} +} + +func (x *ADRSettings_DynamicMode_Overrides) GetDataRate_0() *ADRSettings_DynamicMode_PerDataRateIndexOverride { + if x != nil { + return x.DataRate_0 + } + return nil +} + +func (x *ADRSettings_DynamicMode_Overrides) GetDataRate_1() *ADRSettings_DynamicMode_PerDataRateIndexOverride { + if x != nil { + return x.DataRate_1 + } + return nil +} + +func (x *ADRSettings_DynamicMode_Overrides) GetDataRate_2() *ADRSettings_DynamicMode_PerDataRateIndexOverride { + if x != nil { + return x.DataRate_2 + } + return nil +} + +func (x *ADRSettings_DynamicMode_Overrides) GetDataRate_3() *ADRSettings_DynamicMode_PerDataRateIndexOverride { + if x != nil { + return x.DataRate_3 + } + return nil +} + +func (x *ADRSettings_DynamicMode_Overrides) GetDataRate_4() *ADRSettings_DynamicMode_PerDataRateIndexOverride { + if x != nil { + return x.DataRate_4 + } + return nil +} + +func (x *ADRSettings_DynamicMode_Overrides) GetDataRate_5() *ADRSettings_DynamicMode_PerDataRateIndexOverride { + if x != nil { + return x.DataRate_5 + } + return nil +} + +func (x *ADRSettings_DynamicMode_Overrides) GetDataRate_6() *ADRSettings_DynamicMode_PerDataRateIndexOverride { + if x != nil { + return x.DataRate_6 + } + return nil +} + +func (x *ADRSettings_DynamicMode_Overrides) GetDataRate_7() *ADRSettings_DynamicMode_PerDataRateIndexOverride { + if x != nil { + return x.DataRate_7 + } + return nil +} + +func (x *ADRSettings_DynamicMode_Overrides) GetDataRate_8() *ADRSettings_DynamicMode_PerDataRateIndexOverride { + if x != nil { + return x.DataRate_8 + } + return nil +} + +func (x *ADRSettings_DynamicMode_Overrides) GetDataRate_9() *ADRSettings_DynamicMode_PerDataRateIndexOverride { + if x != nil { + return x.DataRate_9 + } + return nil +} + +func (x *ADRSettings_DynamicMode_Overrides) GetDataRate_10() *ADRSettings_DynamicMode_PerDataRateIndexOverride { + if x != nil { + return x.DataRate_10 + } + return nil +} + +func (x *ADRSettings_DynamicMode_Overrides) GetDataRate_11() *ADRSettings_DynamicMode_PerDataRateIndexOverride { + if x != nil { + return x.DataRate_11 + } + return nil +} + +func (x *ADRSettings_DynamicMode_Overrides) GetDataRate_12() *ADRSettings_DynamicMode_PerDataRateIndexOverride { + if x != nil { + return x.DataRate_12 + } + return nil +} + +func (x *ADRSettings_DynamicMode_Overrides) GetDataRate_13() *ADRSettings_DynamicMode_PerDataRateIndexOverride { + if x != nil { + return x.DataRate_13 + } + return nil +} + +func (x *ADRSettings_DynamicMode_Overrides) GetDataRate_14() *ADRSettings_DynamicMode_PerDataRateIndexOverride { + if x != nil { + return x.DataRate_14 + } + return nil +} + +func (x *ADRSettings_DynamicMode_Overrides) GetDataRate_15() *ADRSettings_DynamicMode_PerDataRateIndexOverride { + if x != nil { + return x.DataRate_15 + } + return nil +} + // Configuration options for LoRa narrow channels steering. // The narrow mode attempts to steer the end device towards // using the LoRa modulated, 125kHz bandwidth channels. @@ -4165,7 +4401,7 @@ type ADRSettings_DynamicMode_ChannelSteeringSettings_LoRaNarrowMode struct { func (x *ADRSettings_DynamicMode_ChannelSteeringSettings_LoRaNarrowMode) Reset() { *x = ADRSettings_DynamicMode_ChannelSteeringSettings_LoRaNarrowMode{} if protoimpl.UnsafeEnabled { - mi := &file_ttn_lorawan_v3_end_device_proto_msgTypes[38] + mi := &file_ttn_lorawan_v3_end_device_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4178,7 +4414,7 @@ func (x *ADRSettings_DynamicMode_ChannelSteeringSettings_LoRaNarrowMode) String( func (*ADRSettings_DynamicMode_ChannelSteeringSettings_LoRaNarrowMode) ProtoMessage() {} func (x *ADRSettings_DynamicMode_ChannelSteeringSettings_LoRaNarrowMode) ProtoReflect() protoreflect.Message { - mi := &file_ttn_lorawan_v3_end_device_proto_msgTypes[38] + mi := &file_ttn_lorawan_v3_end_device_proto_msgTypes[40] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4205,7 +4441,7 @@ type ADRSettings_DynamicMode_ChannelSteeringSettings_DisabledMode struct { func (x *ADRSettings_DynamicMode_ChannelSteeringSettings_DisabledMode) Reset() { *x = ADRSettings_DynamicMode_ChannelSteeringSettings_DisabledMode{} if protoimpl.UnsafeEnabled { - mi := &file_ttn_lorawan_v3_end_device_proto_msgTypes[39] + mi := &file_ttn_lorawan_v3_end_device_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4218,7 +4454,7 @@ func (x *ADRSettings_DynamicMode_ChannelSteeringSettings_DisabledMode) String() func (*ADRSettings_DynamicMode_ChannelSteeringSettings_DisabledMode) ProtoMessage() {} func (x *ADRSettings_DynamicMode_ChannelSteeringSettings_DisabledMode) ProtoReflect() protoreflect.Message { - mi := &file_ttn_lorawan_v3_end_device_proto_msgTypes[39] + mi := &file_ttn_lorawan_v3_end_device_proto_msgTypes[41] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4247,7 +4483,7 @@ type MACState_JoinRequest struct { func (x *MACState_JoinRequest) Reset() { *x = MACState_JoinRequest{} if protoimpl.UnsafeEnabled { - mi := &file_ttn_lorawan_v3_end_device_proto_msgTypes[40] + mi := &file_ttn_lorawan_v3_end_device_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4260,7 +4496,7 @@ func (x *MACState_JoinRequest) String() string { func (*MACState_JoinRequest) ProtoMessage() {} func (x *MACState_JoinRequest) ProtoReflect() protoreflect.Message { - mi := &file_ttn_lorawan_v3_end_device_proto_msgTypes[40] + mi := &file_ttn_lorawan_v3_end_device_proto_msgTypes[42] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4315,7 +4551,7 @@ type MACState_JoinAccept struct { func (x *MACState_JoinAccept) Reset() { *x = MACState_JoinAccept{} if protoimpl.UnsafeEnabled { - mi := &file_ttn_lorawan_v3_end_device_proto_msgTypes[41] + mi := &file_ttn_lorawan_v3_end_device_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4328,7 +4564,7 @@ func (x *MACState_JoinAccept) String() string { func (*MACState_JoinAccept) ProtoMessage() {} func (x *MACState_JoinAccept) ProtoReflect() protoreflect.Message { - mi := &file_ttn_lorawan_v3_end_device_proto_msgTypes[41] + mi := &file_ttn_lorawan_v3_end_device_proto_msgTypes[43] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4404,7 +4640,7 @@ type MACState_UplinkMessage struct { func (x *MACState_UplinkMessage) Reset() { *x = MACState_UplinkMessage{} if protoimpl.UnsafeEnabled { - mi := &file_ttn_lorawan_v3_end_device_proto_msgTypes[42] + mi := &file_ttn_lorawan_v3_end_device_proto_msgTypes[44] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4417,7 +4653,7 @@ func (x *MACState_UplinkMessage) String() string { func (*MACState_UplinkMessage) ProtoMessage() {} func (x *MACState_UplinkMessage) ProtoReflect() protoreflect.Message { - mi := &file_ttn_lorawan_v3_end_device_proto_msgTypes[42] + mi := &file_ttn_lorawan_v3_end_device_proto_msgTypes[44] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4489,7 +4725,7 @@ type MACState_DownlinkMessage struct { func (x *MACState_DownlinkMessage) Reset() { *x = MACState_DownlinkMessage{} if protoimpl.UnsafeEnabled { - mi := &file_ttn_lorawan_v3_end_device_proto_msgTypes[43] + mi := &file_ttn_lorawan_v3_end_device_proto_msgTypes[45] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4502,7 +4738,7 @@ func (x *MACState_DownlinkMessage) String() string { func (*MACState_DownlinkMessage) ProtoMessage() {} func (x *MACState_DownlinkMessage) ProtoReflect() protoreflect.Message { - mi := &file_ttn_lorawan_v3_end_device_proto_msgTypes[43] + mi := &file_ttn_lorawan_v3_end_device_proto_msgTypes[45] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4544,7 +4780,7 @@ type MACState_DataRateRange struct { func (x *MACState_DataRateRange) Reset() { *x = MACState_DataRateRange{} if protoimpl.UnsafeEnabled { - mi := &file_ttn_lorawan_v3_end_device_proto_msgTypes[44] + mi := &file_ttn_lorawan_v3_end_device_proto_msgTypes[46] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4557,7 +4793,7 @@ func (x *MACState_DataRateRange) String() string { func (*MACState_DataRateRange) ProtoMessage() {} func (x *MACState_DataRateRange) ProtoReflect() protoreflect.Message { - mi := &file_ttn_lorawan_v3_end_device_proto_msgTypes[44] + mi := &file_ttn_lorawan_v3_end_device_proto_msgTypes[46] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4598,7 +4834,7 @@ type MACState_DataRateRanges struct { func (x *MACState_DataRateRanges) Reset() { *x = MACState_DataRateRanges{} if protoimpl.UnsafeEnabled { - mi := &file_ttn_lorawan_v3_end_device_proto_msgTypes[45] + mi := &file_ttn_lorawan_v3_end_device_proto_msgTypes[47] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4611,7 +4847,7 @@ func (x *MACState_DataRateRanges) String() string { func (*MACState_DataRateRanges) ProtoMessage() {} func (x *MACState_DataRateRanges) ProtoReflect() protoreflect.Message { - mi := &file_ttn_lorawan_v3_end_device_proto_msgTypes[45] + mi := &file_ttn_lorawan_v3_end_device_proto_msgTypes[47] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4645,7 +4881,7 @@ type MACState_UplinkMessage_TxSettings struct { func (x *MACState_UplinkMessage_TxSettings) Reset() { *x = MACState_UplinkMessage_TxSettings{} if protoimpl.UnsafeEnabled { - mi := &file_ttn_lorawan_v3_end_device_proto_msgTypes[47] + mi := &file_ttn_lorawan_v3_end_device_proto_msgTypes[49] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4658,7 +4894,7 @@ func (x *MACState_UplinkMessage_TxSettings) String() string { func (*MACState_UplinkMessage_TxSettings) ProtoMessage() {} func (x *MACState_UplinkMessage_TxSettings) ProtoReflect() protoreflect.Message { - mi := &file_ttn_lorawan_v3_end_device_proto_msgTypes[47] + mi := &file_ttn_lorawan_v3_end_device_proto_msgTypes[49] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4698,7 +4934,7 @@ type MACState_UplinkMessage_RxMetadata struct { func (x *MACState_UplinkMessage_RxMetadata) Reset() { *x = MACState_UplinkMessage_RxMetadata{} if protoimpl.UnsafeEnabled { - mi := &file_ttn_lorawan_v3_end_device_proto_msgTypes[48] + mi := &file_ttn_lorawan_v3_end_device_proto_msgTypes[50] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4711,7 +4947,7 @@ func (x *MACState_UplinkMessage_RxMetadata) String() string { func (*MACState_UplinkMessage_RxMetadata) ProtoMessage() {} func (x *MACState_UplinkMessage_RxMetadata) ProtoReflect() protoreflect.Message { - mi := &file_ttn_lorawan_v3_end_device_proto_msgTypes[48] + mi := &file_ttn_lorawan_v3_end_device_proto_msgTypes[50] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4785,7 +5021,7 @@ type MACState_UplinkMessage_RxMetadata_PacketBrokerMetadata struct { func (x *MACState_UplinkMessage_RxMetadata_PacketBrokerMetadata) Reset() { *x = MACState_UplinkMessage_RxMetadata_PacketBrokerMetadata{} if protoimpl.UnsafeEnabled { - mi := &file_ttn_lorawan_v3_end_device_proto_msgTypes[49] + mi := &file_ttn_lorawan_v3_end_device_proto_msgTypes[51] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4798,7 +5034,7 @@ func (x *MACState_UplinkMessage_RxMetadata_PacketBrokerMetadata) String() string func (*MACState_UplinkMessage_RxMetadata_PacketBrokerMetadata) ProtoMessage() {} func (x *MACState_UplinkMessage_RxMetadata_PacketBrokerMetadata) ProtoReflect() protoreflect.Message { - mi := &file_ttn_lorawan_v3_end_device_proto_msgTypes[49] + mi := &file_ttn_lorawan_v3_end_device_proto_msgTypes[51] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4823,7 +5059,7 @@ type MACState_UplinkMessage_RxMetadata_RelayMetadata struct { func (x *MACState_UplinkMessage_RxMetadata_RelayMetadata) Reset() { *x = MACState_UplinkMessage_RxMetadata_RelayMetadata{} if protoimpl.UnsafeEnabled { - mi := &file_ttn_lorawan_v3_end_device_proto_msgTypes[50] + mi := &file_ttn_lorawan_v3_end_device_proto_msgTypes[52] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4836,7 +5072,7 @@ func (x *MACState_UplinkMessage_RxMetadata_RelayMetadata) String() string { func (*MACState_UplinkMessage_RxMetadata_RelayMetadata) ProtoMessage() {} func (x *MACState_UplinkMessage_RxMetadata_RelayMetadata) ProtoReflect() protoreflect.Message { - mi := &file_ttn_lorawan_v3_end_device_proto_msgTypes[50] + mi := &file_ttn_lorawan_v3_end_device_proto_msgTypes[52] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4864,7 +5100,7 @@ type MACState_DownlinkMessage_Message struct { func (x *MACState_DownlinkMessage_Message) Reset() { *x = MACState_DownlinkMessage_Message{} if protoimpl.UnsafeEnabled { - mi := &file_ttn_lorawan_v3_end_device_proto_msgTypes[51] + mi := &file_ttn_lorawan_v3_end_device_proto_msgTypes[53] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4877,7 +5113,7 @@ func (x *MACState_DownlinkMessage_Message) String() string { func (*MACState_DownlinkMessage_Message) ProtoMessage() {} func (x *MACState_DownlinkMessage_Message) ProtoReflect() protoreflect.Message { - mi := &file_ttn_lorawan_v3_end_device_proto_msgTypes[51] + mi := &file_ttn_lorawan_v3_end_device_proto_msgTypes[53] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4918,7 +5154,7 @@ type MACState_DownlinkMessage_Message_MHDR struct { func (x *MACState_DownlinkMessage_Message_MHDR) Reset() { *x = MACState_DownlinkMessage_Message_MHDR{} if protoimpl.UnsafeEnabled { - mi := &file_ttn_lorawan_v3_end_device_proto_msgTypes[52] + mi := &file_ttn_lorawan_v3_end_device_proto_msgTypes[54] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4931,7 +5167,7 @@ func (x *MACState_DownlinkMessage_Message_MHDR) String() string { func (*MACState_DownlinkMessage_Message_MHDR) ProtoMessage() {} func (x *MACState_DownlinkMessage_Message_MHDR) ProtoReflect() protoreflect.Message { - mi := &file_ttn_lorawan_v3_end_device_proto_msgTypes[52] + mi := &file_ttn_lorawan_v3_end_device_proto_msgTypes[54] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4966,7 +5202,7 @@ type MACState_DownlinkMessage_Message_MACPayload struct { func (x *MACState_DownlinkMessage_Message_MACPayload) Reset() { *x = MACState_DownlinkMessage_Message_MACPayload{} if protoimpl.UnsafeEnabled { - mi := &file_ttn_lorawan_v3_end_device_proto_msgTypes[53] + mi := &file_ttn_lorawan_v3_end_device_proto_msgTypes[55] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4979,7 +5215,7 @@ func (x *MACState_DownlinkMessage_Message_MACPayload) String() string { func (*MACState_DownlinkMessage_Message_MACPayload) ProtoMessage() {} func (x *MACState_DownlinkMessage_Message_MACPayload) ProtoReflect() protoreflect.Message { - mi := &file_ttn_lorawan_v3_end_device_proto_msgTypes[53] + mi := &file_ttn_lorawan_v3_end_device_proto_msgTypes[55] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5021,7 +5257,7 @@ type BatchUpdateEndDeviceLastSeenRequest_EndDeviceLastSeenUpdate struct { func (x *BatchUpdateEndDeviceLastSeenRequest_EndDeviceLastSeenUpdate) Reset() { *x = BatchUpdateEndDeviceLastSeenRequest_EndDeviceLastSeenUpdate{} if protoimpl.UnsafeEnabled { - mi := &file_ttn_lorawan_v3_end_device_proto_msgTypes[56] + mi := &file_ttn_lorawan_v3_end_device_proto_msgTypes[58] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5034,7 +5270,7 @@ func (x *BatchUpdateEndDeviceLastSeenRequest_EndDeviceLastSeenUpdate) String() s func (*BatchUpdateEndDeviceLastSeenRequest_EndDeviceLastSeenUpdate) ProtoMessage() {} func (x *BatchUpdateEndDeviceLastSeenRequest_EndDeviceLastSeenUpdate) ProtoReflect() protoreflect.Message { - mi := &file_ttn_lorawan_v3_end_device_proto_msgTypes[56] + mi := &file_ttn_lorawan_v3_end_device_proto_msgTypes[58] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5513,7 +5749,7 @@ var file_ttn_lorawan_v3_end_device_proto_rawDesc = []byte{ 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x74, 0x65, 0x72, 0x73, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x11, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, - 0x74, 0x65, 0x72, 0x73, 0x22, 0xad, 0x0b, 0x0a, 0x0b, 0x41, 0x44, 0x52, 0x53, 0x65, 0x74, 0x74, + 0x74, 0x65, 0x72, 0x73, 0x22, 0xb3, 0x1a, 0x0a, 0x0b, 0x41, 0x44, 0x52, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x40, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x41, 0x44, 0x52, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, @@ -5539,7 +5775,7 @@ var file_ttn_lorawan_v3_end_device_proto_rawDesc = []byte{ 0x65, 0x78, 0x12, 0x24, 0x0a, 0x08, 0x6e, 0x62, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x09, 0xfa, 0x42, 0x06, 0x2a, 0x04, 0x18, 0x0f, 0x28, 0x01, 0x52, 0x07, 0x6e, 0x62, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x3a, 0x08, 0xf2, 0xaa, 0x19, 0x04, 0x08, 0x01, - 0x10, 0x01, 0x1a, 0xe1, 0x07, 0x0a, 0x0b, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x4d, 0x6f, + 0x10, 0x01, 0x1a, 0xe7, 0x16, 0x0a, 0x0b, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x33, 0x0a, 0x06, 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, @@ -5580,693 +5816,1036 @@ var file_ttn_lorawan_v3_end_device_proto_rawDesc = []byte{ 0x67, 0x73, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x4d, 0x6f, 0x64, 0x65, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x53, 0x74, 0x65, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x0f, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x53, - 0x74, 0x65, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x1a, 0xc2, 0x02, 0x0a, 0x17, 0x43, 0x68, 0x61, 0x6e, - 0x6e, 0x65, 0x6c, 0x53, 0x74, 0x65, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x74, 0x74, 0x69, - 0x6e, 0x67, 0x73, 0x12, 0x71, 0x0a, 0x0b, 0x6c, 0x6f, 0x72, 0x61, 0x5f, 0x6e, 0x61, 0x72, 0x72, - 0x6f, 0x77, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x4e, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, - 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x41, 0x44, 0x52, 0x53, 0x65, 0x74, - 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x4d, 0x6f, 0x64, - 0x65, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x53, 0x74, 0x65, 0x65, 0x72, 0x69, 0x6e, - 0x67, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x4c, 0x6f, 0x52, 0x61, 0x4e, 0x61, - 0x72, 0x72, 0x6f, 0x77, 0x4d, 0x6f, 0x64, 0x65, 0x48, 0x00, 0x52, 0x0a, 0x6c, 0x6f, 0x72, 0x61, - 0x4e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x12, 0x6a, 0x0a, 0x08, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, - 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x4c, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, - 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x41, 0x44, 0x52, 0x53, 0x65, 0x74, - 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x4d, 0x6f, 0x64, - 0x65, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x53, 0x74, 0x65, 0x65, 0x72, 0x69, 0x6e, - 0x67, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, - 0x65, 0x64, 0x4d, 0x6f, 0x64, 0x65, 0x48, 0x00, 0x52, 0x08, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, - 0x65, 0x64, 0x1a, 0x1a, 0x0a, 0x0e, 0x4c, 0x6f, 0x52, 0x61, 0x4e, 0x61, 0x72, 0x72, 0x6f, 0x77, - 0x4d, 0x6f, 0x64, 0x65, 0x3a, 0x08, 0xf2, 0xaa, 0x19, 0x04, 0x08, 0x01, 0x10, 0x01, 0x1a, 0x18, - 0x0a, 0x0c, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x4d, 0x6f, 0x64, 0x65, 0x3a, 0x08, - 0xf2, 0xaa, 0x19, 0x04, 0x08, 0x01, 0x10, 0x01, 0x3a, 0x0a, 0xf2, 0xaa, 0x19, 0x06, 0x08, 0x01, - 0x10, 0x01, 0x20, 0x01, 0x42, 0x06, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x3a, 0x08, 0xf2, 0xaa, - 0x19, 0x04, 0x08, 0x01, 0x10, 0x01, 0x1a, 0x18, 0x0a, 0x0c, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, - 0x65, 0x64, 0x4d, 0x6f, 0x64, 0x65, 0x3a, 0x08, 0xf2, 0xaa, 0x19, 0x04, 0x08, 0x01, 0x10, 0x01, - 0x3a, 0x0a, 0xf2, 0xaa, 0x19, 0x06, 0x08, 0x01, 0x10, 0x01, 0x20, 0x01, 0x42, 0x06, 0x0a, 0x04, - 0x6d, 0x6f, 0x64, 0x65, 0x22, 0xeb, 0x16, 0x0a, 0x0b, 0x4d, 0x41, 0x43, 0x53, 0x65, 0x74, 0x74, - 0x69, 0x6e, 0x67, 0x73, 0x12, 0x41, 0x0a, 0x0f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x5f, 0x62, 0x5f, - 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 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, 0x0d, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x42, - 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x57, 0x0a, 0x15, 0x70, 0x69, 0x6e, 0x67, 0x5f, - 0x73, 0x6c, 0x6f, 0x74, 0x5f, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x69, 0x63, 0x69, 0x74, 0x79, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, - 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x53, 0x6c, 0x6f, 0x74, - 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x13, 0x70, 0x69, 0x6e, - 0x67, 0x53, 0x6c, 0x6f, 0x74, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x69, 0x63, 0x69, 0x74, 0x79, - 0x12, 0x5c, 0x0a, 0x19, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x5f, 0x64, 0x61, - 0x74, 0x61, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, - 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x64, - 0x65, 0x78, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x15, 0x70, 0x69, 0x6e, 0x67, 0x53, 0x6c, 0x6f, - 0x74, 0x44, 0x61, 0x74, 0x61, 0x52, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x56, - 0x0a, 0x13, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x5f, 0x66, 0x72, 0x65, 0x71, - 0x75, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x74, 0x74, - 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x5a, 0x65, 0x72, - 0x6f, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x52, 0x11, 0x70, 0x69, 0x6e, 0x67, 0x53, 0x6c, 0x6f, 0x74, 0x46, 0x72, 0x65, - 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x51, 0x0a, 0x10, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, - 0x5f, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x26, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, - 0x33, 0x2e, 0x5a, 0x65, 0x72, 0x6f, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x72, 0x65, 0x71, 0x75, 0x65, - 0x6e, 0x63, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, - 0x46, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x41, 0x0a, 0x0f, 0x63, 0x6c, 0x61, - 0x73, 0x73, 0x5f, 0x63, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x63, - 0x6c, 0x61, 0x73, 0x73, 0x43, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x39, 0x0a, 0x09, - 0x72, 0x78, 0x31, 0x5f, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1c, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, - 0x2e, 0x52, 0x78, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x08, 0x72, - 0x78, 0x31, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x12, 0x54, 0x0a, 0x14, 0x72, 0x78, 0x31, 0x5f, 0x64, - 0x61, 0x74, 0x61, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, - 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x61, 0x74, 0x65, 0x4f, - 0x66, 0x66, 0x73, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x11, 0x72, 0x78, 0x31, 0x44, - 0x61, 0x74, 0x61, 0x52, 0x61, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x51, 0x0a, - 0x13, 0x72, 0x78, 0x32, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x69, - 0x6e, 0x64, 0x65, 0x78, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x74, 0x74, 0x6e, - 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x44, 0x61, 0x74, 0x61, - 0x52, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x10, - 0x72, 0x78, 0x32, 0x44, 0x61, 0x74, 0x61, 0x52, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, - 0x12, 0x43, 0x0a, 0x0d, 0x72, 0x78, 0x32, 0x5f, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, - 0x79, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, - 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x46, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, - 0x63, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, 0x72, 0x78, 0x32, 0x46, 0x72, 0x65, 0x71, - 0x75, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x46, 0x0a, 0x1a, 0x66, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x79, - 0x5f, 0x70, 0x72, 0x65, 0x73, 0x65, 0x74, 0x5f, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, - 0x69, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x04, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x92, 0x01, - 0x02, 0x10, 0x60, 0x52, 0x18, 0x66, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x50, 0x72, 0x65, 0x73, - 0x65, 0x74, 0x46, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x12, 0x4e, 0x0a, - 0x0e, 0x6d, 0x61, 0x78, 0x5f, 0x64, 0x75, 0x74, 0x79, 0x5f, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x18, - 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, - 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, - 0x64, 0x44, 0x75, 0x74, 0x79, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, - 0x0c, 0x6d, 0x61, 0x78, 0x44, 0x75, 0x74, 0x79, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x12, 0x4b, 0x0a, - 0x15, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x5f, 0x33, 0x32, 0x5f, 0x62, 0x69, 0x74, - 0x5f, 0x66, 0x5f, 0x63, 0x6e, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x74, - 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x42, 0x6f, - 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x11, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, - 0x73, 0x33, 0x32, 0x42, 0x69, 0x74, 0x46, 0x43, 0x6e, 0x74, 0x12, 0x36, 0x0a, 0x07, 0x75, 0x73, - 0x65, 0x5f, 0x61, 0x64, 0x72, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x74, 0x74, - 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x42, 0x6f, 0x6f, - 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x02, 0x18, 0x01, 0x52, 0x06, 0x75, 0x73, 0x65, 0x41, - 0x64, 0x72, 0x12, 0x3e, 0x0a, 0x0a, 0x61, 0x64, 0x72, 0x5f, 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, - 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x42, 0x02, 0x18, 0x01, 0x52, 0x09, 0x61, 0x64, 0x72, 0x4d, 0x61, 0x72, 0x67, - 0x69, 0x6e, 0x12, 0x3b, 0x0a, 0x0c, 0x72, 0x65, 0x73, 0x65, 0x74, 0x73, 0x5f, 0x66, 0x5f, 0x63, - 0x6e, 0x74, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, - 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x52, 0x0a, 0x72, 0x65, 0x73, 0x65, 0x74, 0x73, 0x46, 0x43, 0x6e, 0x74, 0x12, - 0x51, 0x0a, 0x17, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x70, - 0x65, 0x72, 0x69, 0x6f, 0x64, 0x69, 0x63, 0x69, 0x74, 0x79, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x15, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x54, 0x69, 0x6d, 0x65, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x69, 0x63, 0x69, - 0x74, 0x79, 0x12, 0x56, 0x0a, 0x18, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x5f, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x69, 0x63, 0x69, 0x74, 0x79, 0x18, 0x11, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x52, 0x16, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x50, - 0x65, 0x72, 0x69, 0x6f, 0x64, 0x69, 0x63, 0x69, 0x74, 0x79, 0x12, 0x48, 0x0a, 0x11, 0x64, 0x65, - 0x73, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x72, 0x78, 0x31, 0x5f, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x18, - 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, - 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x52, 0x78, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x52, 0x0f, 0x64, 0x65, 0x73, 0x69, 0x72, 0x65, 0x64, 0x52, 0x78, 0x31, 0x44, - 0x65, 0x6c, 0x61, 0x79, 0x12, 0x63, 0x0a, 0x1c, 0x64, 0x65, 0x73, 0x69, 0x72, 0x65, 0x64, 0x5f, - 0x72, 0x78, 0x31, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x6f, 0x66, - 0x66, 0x73, 0x65, 0x74, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x74, 0x74, 0x6e, - 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x44, 0x61, 0x74, 0x61, - 0x52, 0x61, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, - 0x18, 0x64, 0x65, 0x73, 0x69, 0x72, 0x65, 0x64, 0x52, 0x78, 0x31, 0x44, 0x61, 0x74, 0x61, 0x52, - 0x61, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x60, 0x0a, 0x1b, 0x64, 0x65, 0x73, - 0x69, 0x72, 0x65, 0x64, 0x5f, 0x72, 0x78, 0x32, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x72, 0x61, - 0x74, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, - 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, - 0x44, 0x61, 0x74, 0x61, 0x52, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x52, 0x17, 0x64, 0x65, 0x73, 0x69, 0x72, 0x65, 0x64, 0x52, 0x78, 0x32, 0x44, 0x61, - 0x74, 0x61, 0x52, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x52, 0x0a, 0x15, 0x64, - 0x65, 0x73, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x72, 0x78, 0x32, 0x5f, 0x66, 0x72, 0x65, 0x71, 0x75, - 0x65, 0x6e, 0x63, 0x79, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x74, 0x74, 0x6e, - 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x46, 0x72, 0x65, 0x71, - 0x75, 0x65, 0x6e, 0x63, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x13, 0x64, 0x65, 0x73, 0x69, - 0x72, 0x65, 0x64, 0x52, 0x78, 0x32, 0x46, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x12, - 0x5d, 0x0a, 0x16, 0x64, 0x65, 0x73, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x6d, 0x61, 0x78, 0x5f, 0x64, - 0x75, 0x74, 0x79, 0x5f, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x28, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, - 0x2e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x64, 0x44, 0x75, 0x74, 0x79, 0x43, - 0x79, 0x63, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x13, 0x64, 0x65, 0x73, 0x69, 0x72, - 0x65, 0x64, 0x4d, 0x61, 0x78, 0x44, 0x75, 0x74, 0x79, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x12, 0x6c, - 0x0a, 0x1e, 0x64, 0x65, 0x73, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x61, 0x64, 0x72, 0x5f, 0x61, 0x63, - 0x6b, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x5f, 0x65, 0x78, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, - 0x18, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, - 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x41, 0x44, 0x52, 0x41, 0x63, 0x6b, 0x4c, 0x69, - 0x6d, 0x69, 0x74, 0x45, 0x78, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x52, 0x1a, 0x64, 0x65, 0x73, 0x69, 0x72, 0x65, 0x64, 0x41, 0x64, 0x72, 0x41, 0x63, 0x6b, 0x4c, - 0x69, 0x6d, 0x69, 0x74, 0x45, 0x78, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x12, 0x6c, 0x0a, 0x1e, - 0x64, 0x65, 0x73, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x61, 0x64, 0x72, 0x5f, 0x61, 0x63, 0x6b, 0x5f, - 0x64, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x65, 0x78, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x18, 0x18, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, - 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x41, 0x44, 0x52, 0x41, 0x63, 0x6b, 0x44, 0x65, 0x6c, 0x61, - 0x79, 0x45, 0x78, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x1a, - 0x64, 0x65, 0x73, 0x69, 0x72, 0x65, 0x64, 0x41, 0x64, 0x72, 0x41, 0x63, 0x6b, 0x44, 0x65, 0x6c, - 0x61, 0x79, 0x45, 0x78, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x12, 0x6b, 0x0a, 0x21, 0x64, 0x65, - 0x73, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x5f, - 0x64, 0x61, 0x74, 0x61, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, - 0x1b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, - 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x61, 0x74, 0x65, 0x49, - 0x6e, 0x64, 0x65, 0x78, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x1c, 0x64, 0x65, 0x73, 0x69, 0x72, - 0x65, 0x64, 0x50, 0x69, 0x6e, 0x67, 0x53, 0x6c, 0x6f, 0x74, 0x44, 0x61, 0x74, 0x61, 0x52, 0x61, - 0x74, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x65, 0x0a, 0x1b, 0x64, 0x65, 0x73, 0x69, 0x72, - 0x65, 0x64, 0x5f, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x5f, 0x66, 0x72, 0x65, - 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x74, - 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x5a, 0x65, - 0x72, 0x6f, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x52, 0x18, 0x64, 0x65, 0x73, 0x69, 0x72, 0x65, 0x64, 0x50, 0x69, 0x6e, - 0x67, 0x53, 0x6c, 0x6f, 0x74, 0x46, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x60, - 0x0a, 0x18, 0x64, 0x65, 0x73, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, - 0x5f, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x26, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, - 0x33, 0x2e, 0x5a, 0x65, 0x72, 0x6f, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x72, 0x65, 0x71, 0x75, 0x65, - 0x6e, 0x63, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x16, 0x64, 0x65, 0x73, 0x69, 0x72, 0x65, - 0x64, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x46, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, - 0x12, 0x49, 0x0a, 0x10, 0x64, 0x65, 0x73, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x6d, 0x61, 0x78, 0x5f, - 0x65, 0x69, 0x72, 0x70, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x74, 0x74, 0x6e, - 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x44, 0x65, 0x76, 0x69, - 0x63, 0x65, 0x45, 0x49, 0x52, 0x50, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0e, 0x64, 0x65, 0x73, - 0x69, 0x72, 0x65, 0x64, 0x4d, 0x61, 0x78, 0x45, 0x69, 0x72, 0x70, 0x12, 0x57, 0x0a, 0x1b, 0x63, - 0x6c, 0x61, 0x73, 0x73, 0x5f, 0x62, 0x5f, 0x63, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, - 0x6b, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, 0x1f, 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, 0x17, 0x63, 0x6c, 0x61, - 0x73, 0x73, 0x42, 0x43, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x49, 0x6e, 0x74, 0x65, - 0x72, 0x76, 0x61, 0x6c, 0x12, 0x45, 0x0a, 0x11, 0x75, 0x70, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x64, - 0x77, 0x65, 0x6c, 0x6c, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x20, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x19, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, - 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0f, 0x75, 0x70, 0x6c, 0x69, - 0x6e, 0x6b, 0x44, 0x77, 0x65, 0x6c, 0x6c, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x49, 0x0a, 0x13, 0x64, - 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x64, 0x77, 0x65, 0x6c, 0x6c, 0x5f, 0x74, 0x69, - 0x6d, 0x65, 0x18, 0x21, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, - 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x52, 0x11, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x44, 0x77, 0x65, - 0x6c, 0x6c, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x2d, 0x0a, 0x03, 0x61, 0x64, 0x72, 0x18, 0x22, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, + 0x74, 0x65, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x4f, 0x0a, 0x09, 0x6f, 0x76, 0x65, 0x72, 0x72, + 0x69, 0x64, 0x65, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x74, 0x74, 0x6e, + 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x41, 0x44, 0x52, 0x53, + 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x4d, + 0x6f, 0x64, 0x65, 0x2e, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x73, 0x52, 0x09, 0x6f, + 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x73, 0x1a, 0xc2, 0x02, 0x0a, 0x17, 0x43, 0x68, 0x61, + 0x6e, 0x6e, 0x65, 0x6c, 0x53, 0x74, 0x65, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x74, 0x74, + 0x69, 0x6e, 0x67, 0x73, 0x12, 0x71, 0x0a, 0x0b, 0x6c, 0x6f, 0x72, 0x61, 0x5f, 0x6e, 0x61, 0x72, + 0x72, 0x6f, 0x77, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x4e, 0x2e, 0x74, 0x74, 0x6e, 0x2e, + 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x41, 0x44, 0x52, 0x53, 0x65, + 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x4d, 0x6f, + 0x64, 0x65, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x53, 0x74, 0x65, 0x65, 0x72, 0x69, + 0x6e, 0x67, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x4c, 0x6f, 0x52, 0x61, 0x4e, + 0x61, 0x72, 0x72, 0x6f, 0x77, 0x4d, 0x6f, 0x64, 0x65, 0x48, 0x00, 0x52, 0x0a, 0x6c, 0x6f, 0x72, + 0x61, 0x4e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x12, 0x6a, 0x0a, 0x08, 0x64, 0x69, 0x73, 0x61, 0x62, + 0x6c, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x4c, 0x2e, 0x74, 0x74, 0x6e, 0x2e, + 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x41, 0x44, 0x52, 0x53, 0x65, + 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x4d, 0x6f, + 0x64, 0x65, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x53, 0x74, 0x65, 0x65, 0x72, 0x69, + 0x6e, 0x67, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x44, 0x69, 0x73, 0x61, 0x62, + 0x6c, 0x65, 0x64, 0x4d, 0x6f, 0x64, 0x65, 0x48, 0x00, 0x52, 0x08, 0x64, 0x69, 0x73, 0x61, 0x62, + 0x6c, 0x65, 0x64, 0x1a, 0x1a, 0x0a, 0x0e, 0x4c, 0x6f, 0x52, 0x61, 0x4e, 0x61, 0x72, 0x72, 0x6f, + 0x77, 0x4d, 0x6f, 0x64, 0x65, 0x3a, 0x08, 0xf2, 0xaa, 0x19, 0x04, 0x08, 0x01, 0x10, 0x01, 0x1a, + 0x18, 0x0a, 0x0c, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x4d, 0x6f, 0x64, 0x65, 0x3a, + 0x08, 0xf2, 0xaa, 0x19, 0x04, 0x08, 0x01, 0x10, 0x01, 0x3a, 0x0a, 0xf2, 0xaa, 0x19, 0x06, 0x08, + 0x01, 0x10, 0x01, 0x20, 0x01, 0x42, 0x06, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x1a, 0xee, 0x01, + 0x0a, 0x18, 0x50, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x64, + 0x65, 0x78, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x12, 0x49, 0x0a, 0x0c, 0x6d, 0x69, + 0x6e, 0x5f, 0x6e, 0x62, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x09, + 0xfa, 0x42, 0x06, 0x2a, 0x04, 0x18, 0x03, 0x28, 0x01, 0x52, 0x0a, 0x6d, 0x69, 0x6e, 0x4e, 0x62, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x12, 0x49, 0x0a, 0x0c, 0x6d, 0x61, 0x78, 0x5f, 0x6e, 0x62, 0x5f, + 0x74, 0x72, 0x61, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, + 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x09, 0xfa, 0x42, 0x06, 0x2a, 0x04, + 0x18, 0x03, 0x28, 0x01, 0x52, 0x0a, 0x6d, 0x61, 0x78, 0x4e, 0x62, 0x54, 0x72, 0x61, 0x6e, 0x73, + 0x3a, 0x08, 0xf2, 0xaa, 0x19, 0x04, 0x08, 0x01, 0x10, 0x01, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, + 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x52, 0x12, 0x6d, 0x69, 0x6e, 0x5f, 0x74, 0x78, 0x5f, 0x70, + 0x6f, 0x77, 0x65, 0x72, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x12, 0x6d, 0x61, 0x78, 0x5f, + 0x74, 0x78, 0x5f, 0x70, 0x6f, 0x77, 0x65, 0x72, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x1a, 0xc1, + 0x0c, 0x0a, 0x09, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x73, 0x12, 0x60, 0x0a, 0x0b, + 0x64, 0x61, 0x74, 0x61, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x30, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x40, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, + 0x76, 0x33, 0x2e, 0x41, 0x44, 0x52, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x44, + 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x4d, 0x6f, 0x64, 0x65, 0x2e, 0x50, 0x65, 0x72, 0x44, 0x61, + 0x74, 0x61, 0x52, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x4f, 0x76, 0x65, 0x72, 0x72, + 0x69, 0x64, 0x65, 0x52, 0x09, 0x64, 0x61, 0x74, 0x61, 0x52, 0x61, 0x74, 0x65, 0x30, 0x12, 0x60, + 0x0a, 0x0b, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x31, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, + 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x41, 0x44, 0x52, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, + 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x4d, 0x6f, 0x64, 0x65, 0x2e, 0x50, 0x65, 0x72, + 0x44, 0x61, 0x74, 0x61, 0x52, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x4f, 0x76, 0x65, + 0x72, 0x72, 0x69, 0x64, 0x65, 0x52, 0x09, 0x64, 0x61, 0x74, 0x61, 0x52, 0x61, 0x74, 0x65, 0x31, + 0x12, 0x60, 0x0a, 0x0b, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x32, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, + 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x41, 0x44, 0x52, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, + 0x67, 0x73, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x4d, 0x6f, 0x64, 0x65, 0x2e, 0x50, + 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x4f, + 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x52, 0x09, 0x64, 0x61, 0x74, 0x61, 0x52, 0x61, 0x74, + 0x65, 0x32, 0x12, 0x60, 0x0a, 0x0b, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x5f, + 0x33, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, + 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x41, 0x44, 0x52, 0x53, 0x65, 0x74, 0x74, + 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x4d, 0x6f, 0x64, 0x65, + 0x2e, 0x50, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x64, 0x65, + 0x78, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x52, 0x09, 0x64, 0x61, 0x74, 0x61, 0x52, + 0x61, 0x74, 0x65, 0x33, 0x12, 0x60, 0x0a, 0x0b, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x72, 0x61, 0x74, + 0x65, 0x5f, 0x34, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x74, 0x74, 0x6e, 0x2e, + 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x41, 0x44, 0x52, 0x53, 0x65, + 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x4d, 0x6f, + 0x64, 0x65, 0x2e, 0x50, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, 0x61, 0x74, 0x65, 0x49, 0x6e, + 0x64, 0x65, 0x78, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x52, 0x09, 0x64, 0x61, 0x74, + 0x61, 0x52, 0x61, 0x74, 0x65, 0x34, 0x12, 0x60, 0x0a, 0x0b, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x72, + 0x61, 0x74, 0x65, 0x5f, 0x35, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x74, 0x74, + 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x41, 0x44, 0x52, + 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, + 0x4d, 0x6f, 0x64, 0x65, 0x2e, 0x50, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, 0x61, 0x74, 0x65, + 0x49, 0x6e, 0x64, 0x65, 0x78, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x52, 0x09, 0x64, + 0x61, 0x74, 0x61, 0x52, 0x61, 0x74, 0x65, 0x35, 0x12, 0x60, 0x0a, 0x0b, 0x64, 0x61, 0x74, 0x61, + 0x5f, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x36, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, + 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x41, + 0x44, 0x52, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, + 0x69, 0x63, 0x4d, 0x6f, 0x64, 0x65, 0x2e, 0x50, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, 0x61, + 0x74, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x52, + 0x09, 0x64, 0x61, 0x74, 0x61, 0x52, 0x61, 0x74, 0x65, 0x36, 0x12, 0x60, 0x0a, 0x0b, 0x64, 0x61, + 0x74, 0x61, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x37, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x40, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, + 0x2e, 0x41, 0x44, 0x52, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x44, 0x79, 0x6e, + 0x61, 0x6d, 0x69, 0x63, 0x4d, 0x6f, 0x64, 0x65, 0x2e, 0x50, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, + 0x52, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, + 0x65, 0x52, 0x09, 0x64, 0x61, 0x74, 0x61, 0x52, 0x61, 0x74, 0x65, 0x37, 0x12, 0x60, 0x0a, 0x0b, + 0x64, 0x61, 0x74, 0x61, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x38, 0x18, 0x09, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x40, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, + 0x76, 0x33, 0x2e, 0x41, 0x44, 0x52, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x44, + 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x4d, 0x6f, 0x64, 0x65, 0x2e, 0x50, 0x65, 0x72, 0x44, 0x61, + 0x74, 0x61, 0x52, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x4f, 0x76, 0x65, 0x72, 0x72, + 0x69, 0x64, 0x65, 0x52, 0x09, 0x64, 0x61, 0x74, 0x61, 0x52, 0x61, 0x74, 0x65, 0x38, 0x12, 0x60, + 0x0a, 0x0b, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x39, 0x18, 0x0a, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x41, 0x44, 0x52, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, - 0x52, 0x03, 0x61, 0x64, 0x72, 0x12, 0x48, 0x0a, 0x12, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, - 0x65, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x73, 0x18, 0x23, 0x20, 0x01, 0x28, + 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x4d, 0x6f, 0x64, 0x65, 0x2e, 0x50, 0x65, 0x72, + 0x44, 0x61, 0x74, 0x61, 0x52, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x4f, 0x76, 0x65, + 0x72, 0x72, 0x69, 0x64, 0x65, 0x52, 0x09, 0x64, 0x61, 0x74, 0x61, 0x52, 0x61, 0x74, 0x65, 0x39, + 0x12, 0x62, 0x0a, 0x0c, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x31, 0x30, + 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, + 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x41, 0x44, 0x52, 0x53, 0x65, 0x74, 0x74, 0x69, + 0x6e, 0x67, 0x73, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x4d, 0x6f, 0x64, 0x65, 0x2e, + 0x50, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, + 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x52, 0x0a, 0x64, 0x61, 0x74, 0x61, 0x52, 0x61, + 0x74, 0x65, 0x31, 0x30, 0x12, 0x62, 0x0a, 0x0c, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x72, 0x61, 0x74, + 0x65, 0x5f, 0x31, 0x31, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x74, 0x74, 0x6e, + 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x41, 0x44, 0x52, 0x53, + 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x4d, + 0x6f, 0x64, 0x65, 0x2e, 0x50, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, 0x61, 0x74, 0x65, 0x49, + 0x6e, 0x64, 0x65, 0x78, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x52, 0x0a, 0x64, 0x61, + 0x74, 0x61, 0x52, 0x61, 0x74, 0x65, 0x31, 0x31, 0x12, 0x62, 0x0a, 0x0c, 0x64, 0x61, 0x74, 0x61, + 0x5f, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x31, 0x32, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, + 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, + 0x41, 0x44, 0x52, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x44, 0x79, 0x6e, 0x61, + 0x6d, 0x69, 0x63, 0x4d, 0x6f, 0x64, 0x65, 0x2e, 0x50, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, + 0x61, 0x74, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, + 0x52, 0x0a, 0x64, 0x61, 0x74, 0x61, 0x52, 0x61, 0x74, 0x65, 0x31, 0x32, 0x12, 0x62, 0x0a, 0x0c, + 0x64, 0x61, 0x74, 0x61, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x31, 0x33, 0x18, 0x0e, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, + 0x2e, 0x76, 0x33, 0x2e, 0x41, 0x44, 0x52, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, + 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x4d, 0x6f, 0x64, 0x65, 0x2e, 0x50, 0x65, 0x72, 0x44, + 0x61, 0x74, 0x61, 0x52, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x4f, 0x76, 0x65, 0x72, + 0x72, 0x69, 0x64, 0x65, 0x52, 0x0a, 0x64, 0x61, 0x74, 0x61, 0x52, 0x61, 0x74, 0x65, 0x31, 0x33, + 0x12, 0x62, 0x0a, 0x0c, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x31, 0x34, + 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, + 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x41, 0x44, 0x52, 0x53, 0x65, 0x74, 0x74, 0x69, + 0x6e, 0x67, 0x73, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x4d, 0x6f, 0x64, 0x65, 0x2e, + 0x50, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, + 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x52, 0x0a, 0x64, 0x61, 0x74, 0x61, 0x52, 0x61, + 0x74, 0x65, 0x31, 0x34, 0x12, 0x62, 0x0a, 0x0c, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x72, 0x61, 0x74, + 0x65, 0x5f, 0x31, 0x35, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x74, 0x74, 0x6e, + 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x41, 0x44, 0x52, 0x53, + 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x4d, + 0x6f, 0x64, 0x65, 0x2e, 0x50, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, 0x61, 0x74, 0x65, 0x49, + 0x6e, 0x64, 0x65, 0x78, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x52, 0x0a, 0x64, 0x61, + 0x74, 0x61, 0x52, 0x61, 0x74, 0x65, 0x31, 0x35, 0x3a, 0x08, 0xf2, 0xaa, 0x19, 0x04, 0x08, 0x01, + 0x10, 0x01, 0x3a, 0x08, 0xf2, 0xaa, 0x19, 0x04, 0x08, 0x01, 0x10, 0x01, 0x1a, 0x18, 0x0a, 0x0c, + 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x4d, 0x6f, 0x64, 0x65, 0x3a, 0x08, 0xf2, 0xaa, + 0x19, 0x04, 0x08, 0x01, 0x10, 0x01, 0x3a, 0x0a, 0xf2, 0xaa, 0x19, 0x06, 0x08, 0x01, 0x10, 0x01, + 0x20, 0x01, 0x42, 0x06, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x22, 0xeb, 0x16, 0x0a, 0x0b, 0x4d, + 0x41, 0x43, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x41, 0x0a, 0x0f, 0x63, 0x6c, + 0x61, 0x73, 0x73, 0x5f, 0x62, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 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, 0x0d, + 0x63, 0x6c, 0x61, 0x73, 0x73, 0x42, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x57, 0x0a, + 0x15, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x5f, 0x70, 0x65, 0x72, 0x69, 0x6f, + 0x64, 0x69, 0x63, 0x69, 0x74, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x74, + 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x50, 0x69, + 0x6e, 0x67, 0x53, 0x6c, 0x6f, 0x74, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x52, 0x13, 0x70, 0x69, 0x6e, 0x67, 0x53, 0x6c, 0x6f, 0x74, 0x50, 0x65, 0x72, 0x69, 0x6f, + 0x64, 0x69, 0x63, 0x69, 0x74, 0x79, 0x12, 0x5c, 0x0a, 0x19, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x73, + 0x6c, 0x6f, 0x74, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x6e, + 0x64, 0x65, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x74, 0x74, 0x6e, 0x2e, + 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x52, + 0x61, 0x74, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x15, 0x70, + 0x69, 0x6e, 0x67, 0x53, 0x6c, 0x6f, 0x74, 0x44, 0x61, 0x74, 0x61, 0x52, 0x61, 0x74, 0x65, 0x49, + 0x6e, 0x64, 0x65, 0x78, 0x12, 0x56, 0x0a, 0x13, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x6c, 0x6f, + 0x74, 0x5f, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x26, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, + 0x76, 0x33, 0x2e, 0x5a, 0x65, 0x72, 0x6f, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x72, 0x65, 0x71, 0x75, + 0x65, 0x6e, 0x63, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x11, 0x70, 0x69, 0x6e, 0x67, 0x53, + 0x6c, 0x6f, 0x74, 0x46, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x51, 0x0a, 0x10, + 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, + 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, + 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x5a, 0x65, 0x72, 0x6f, 0x61, 0x62, 0x6c, 0x65, + 0x46, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0f, + 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x46, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x12, + 0x41, 0x0a, 0x0f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x5f, 0x63, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, + 0x75, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x43, 0x54, 0x69, 0x6d, 0x65, 0x6f, + 0x75, 0x74, 0x12, 0x39, 0x0a, 0x09, 0x72, 0x78, 0x31, 0x5f, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, + 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x52, 0x78, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x52, 0x08, 0x72, 0x78, 0x31, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x12, 0x54, 0x0a, + 0x14, 0x72, 0x78, 0x31, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x6f, + 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x74, 0x74, + 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x44, 0x61, 0x74, + 0x61, 0x52, 0x61, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x52, 0x11, 0x72, 0x78, 0x31, 0x44, 0x61, 0x74, 0x61, 0x52, 0x61, 0x74, 0x65, 0x4f, 0x66, 0x66, + 0x73, 0x65, 0x74, 0x12, 0x51, 0x0a, 0x13, 0x72, 0x78, 0x32, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5f, + 0x72, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x22, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, + 0x33, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x52, 0x10, 0x72, 0x78, 0x32, 0x44, 0x61, 0x74, 0x61, 0x52, 0x61, 0x74, + 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x43, 0x0a, 0x0d, 0x72, 0x78, 0x32, 0x5f, 0x66, 0x72, + 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, + 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x46, + 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, 0x72, + 0x78, 0x32, 0x46, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x46, 0x0a, 0x1a, 0x66, + 0x61, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x5f, 0x70, 0x72, 0x65, 0x73, 0x65, 0x74, 0x5f, 0x66, 0x72, + 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x04, 0x42, + 0x08, 0xfa, 0x42, 0x05, 0x92, 0x01, 0x02, 0x10, 0x60, 0x52, 0x18, 0x66, 0x61, 0x63, 0x74, 0x6f, + 0x72, 0x79, 0x50, 0x72, 0x65, 0x73, 0x65, 0x74, 0x46, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, + 0x69, 0x65, 0x73, 0x12, 0x4e, 0x0a, 0x0e, 0x6d, 0x61, 0x78, 0x5f, 0x64, 0x75, 0x74, 0x79, 0x5f, + 0x63, 0x79, 0x63, 0x6c, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x74, 0x74, + 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x41, 0x67, 0x67, + 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x64, 0x44, 0x75, 0x74, 0x79, 0x43, 0x79, 0x63, 0x6c, 0x65, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, 0x6d, 0x61, 0x78, 0x44, 0x75, 0x74, 0x79, 0x43, 0x79, + 0x63, 0x6c, 0x65, 0x12, 0x4b, 0x0a, 0x15, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x5f, + 0x33, 0x32, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x66, 0x5f, 0x63, 0x6e, 0x74, 0x18, 0x0c, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, + 0x2e, 0x76, 0x33, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x11, 0x73, + 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x33, 0x32, 0x42, 0x69, 0x74, 0x46, 0x43, 0x6e, 0x74, + 0x12, 0x36, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x5f, 0x61, 0x64, 0x72, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, - 0x76, 0x33, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x11, 0x73, 0x63, - 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x73, 0x12, - 0x33, 0x0a, 0x05, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x18, 0x24, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, + 0x76, 0x33, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x02, 0x18, 0x01, + 0x52, 0x06, 0x75, 0x73, 0x65, 0x41, 0x64, 0x72, 0x12, 0x3e, 0x0a, 0x0a, 0x61, 0x64, 0x72, 0x5f, + 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, + 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x02, 0x18, 0x01, 0x52, 0x09, 0x61, + 0x64, 0x72, 0x4d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x12, 0x3b, 0x0a, 0x0c, 0x72, 0x65, 0x73, 0x65, + 0x74, 0x73, 0x5f, 0x66, 0x5f, 0x63, 0x6e, 0x74, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, - 0x52, 0x65, 0x6c, 0x61, 0x79, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x05, 0x72, - 0x65, 0x6c, 0x61, 0x79, 0x12, 0x42, 0x0a, 0x0d, 0x64, 0x65, 0x73, 0x69, 0x72, 0x65, 0x64, 0x5f, - 0x72, 0x65, 0x6c, 0x61, 0x79, 0x18, 0x25, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x74, 0x74, - 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x52, 0x65, 0x6c, - 0x61, 0x79, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x0c, 0x64, 0x65, 0x73, 0x69, - 0x72, 0x65, 0x64, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x3a, 0x08, 0xf2, 0xaa, 0x19, 0x04, 0x08, 0x01, - 0x10, 0x01, 0x22, 0xef, 0x29, 0x0a, 0x08, 0x4d, 0x41, 0x43, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, - 0x56, 0x0a, 0x12, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, - 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x74, 0x74, + 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0a, 0x72, 0x65, 0x73, 0x65, 0x74, + 0x73, 0x46, 0x43, 0x6e, 0x74, 0x12, 0x51, 0x0a, 0x17, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, + 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x69, 0x63, 0x69, 0x74, 0x79, + 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x15, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x54, 0x69, 0x6d, 0x65, 0x50, 0x65, 0x72, + 0x69, 0x6f, 0x64, 0x69, 0x63, 0x69, 0x74, 0x79, 0x12, 0x56, 0x0a, 0x18, 0x73, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x69, + 0x63, 0x69, 0x74, 0x79, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, + 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x16, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x69, 0x63, 0x69, 0x74, 0x79, + 0x12, 0x48, 0x0a, 0x11, 0x64, 0x65, 0x73, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x72, 0x78, 0x31, 0x5f, + 0x64, 0x65, 0x6c, 0x61, 0x79, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x74, 0x74, + 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x52, 0x78, 0x44, + 0x65, 0x6c, 0x61, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0f, 0x64, 0x65, 0x73, 0x69, 0x72, + 0x65, 0x64, 0x52, 0x78, 0x31, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x12, 0x63, 0x0a, 0x1c, 0x64, 0x65, + 0x73, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x72, 0x78, 0x31, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x72, + 0x61, 0x74, 0x65, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x23, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, + 0x33, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x61, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x18, 0x64, 0x65, 0x73, 0x69, 0x72, 0x65, 0x64, 0x52, 0x78, + 0x31, 0x44, 0x61, 0x74, 0x61, 0x52, 0x61, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, + 0x60, 0x0a, 0x1b, 0x64, 0x65, 0x73, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x72, 0x78, 0x32, 0x5f, 0x64, + 0x61, 0x74, 0x61, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x14, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, + 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x61, 0x74, 0x65, 0x49, 0x6e, + 0x64, 0x65, 0x78, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x17, 0x64, 0x65, 0x73, 0x69, 0x72, 0x65, + 0x64, 0x52, 0x78, 0x32, 0x44, 0x61, 0x74, 0x61, 0x52, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x64, 0x65, + 0x78, 0x12, 0x52, 0x0a, 0x15, 0x64, 0x65, 0x73, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x72, 0x78, 0x32, + 0x5f, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1e, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, + 0x33, 0x2e, 0x46, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x52, 0x13, 0x64, 0x65, 0x73, 0x69, 0x72, 0x65, 0x64, 0x52, 0x78, 0x32, 0x46, 0x72, 0x65, 0x71, + 0x75, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x5d, 0x0a, 0x16, 0x64, 0x65, 0x73, 0x69, 0x72, 0x65, 0x64, + 0x5f, 0x6d, 0x61, 0x78, 0x5f, 0x64, 0x75, 0x74, 0x79, 0x5f, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x18, + 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, + 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, + 0x64, 0x44, 0x75, 0x74, 0x79, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, + 0x13, 0x64, 0x65, 0x73, 0x69, 0x72, 0x65, 0x64, 0x4d, 0x61, 0x78, 0x44, 0x75, 0x74, 0x79, 0x43, + 0x79, 0x63, 0x6c, 0x65, 0x12, 0x6c, 0x0a, 0x1e, 0x64, 0x65, 0x73, 0x69, 0x72, 0x65, 0x64, 0x5f, + 0x61, 0x64, 0x72, 0x5f, 0x61, 0x63, 0x6b, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x5f, 0x65, 0x78, + 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x74, + 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x41, 0x44, + 0x52, 0x41, 0x63, 0x6b, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x45, 0x78, 0x70, 0x6f, 0x6e, 0x65, 0x6e, + 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x1a, 0x64, 0x65, 0x73, 0x69, 0x72, 0x65, 0x64, 0x41, + 0x64, 0x72, 0x41, 0x63, 0x6b, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x45, 0x78, 0x70, 0x6f, 0x6e, 0x65, + 0x6e, 0x74, 0x12, 0x6c, 0x0a, 0x1e, 0x64, 0x65, 0x73, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x61, 0x64, + 0x72, 0x5f, 0x61, 0x63, 0x6b, 0x5f, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x65, 0x78, 0x70, 0x6f, + 0x6e, 0x65, 0x6e, 0x74, 0x18, 0x18, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x74, 0x74, 0x6e, + 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x41, 0x44, 0x52, 0x41, + 0x63, 0x6b, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x45, 0x78, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x52, 0x1a, 0x64, 0x65, 0x73, 0x69, 0x72, 0x65, 0x64, 0x41, 0x64, 0x72, + 0x41, 0x63, 0x6b, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x45, 0x78, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, + 0x12, 0x6b, 0x0a, 0x21, 0x64, 0x65, 0x73, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x70, 0x69, 0x6e, 0x67, + 0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x5f, + 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x74, 0x74, + 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x44, 0x61, 0x74, + 0x61, 0x52, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, + 0x1c, 0x64, 0x65, 0x73, 0x69, 0x72, 0x65, 0x64, 0x50, 0x69, 0x6e, 0x67, 0x53, 0x6c, 0x6f, 0x74, + 0x44, 0x61, 0x74, 0x61, 0x52, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x65, 0x0a, + 0x1b, 0x64, 0x65, 0x73, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x6c, + 0x6f, 0x74, 0x5f, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x1c, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, + 0x2e, 0x76, 0x33, 0x2e, 0x5a, 0x65, 0x72, 0x6f, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x72, 0x65, 0x71, + 0x75, 0x65, 0x6e, 0x63, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x18, 0x64, 0x65, 0x73, 0x69, + 0x72, 0x65, 0x64, 0x50, 0x69, 0x6e, 0x67, 0x53, 0x6c, 0x6f, 0x74, 0x46, 0x72, 0x65, 0x71, 0x75, + 0x65, 0x6e, 0x63, 0x79, 0x12, 0x60, 0x0a, 0x18, 0x64, 0x65, 0x73, 0x69, 0x72, 0x65, 0x64, 0x5f, + 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, + 0x18, 0x1d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, + 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x5a, 0x65, 0x72, 0x6f, 0x61, 0x62, 0x6c, 0x65, + 0x46, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x16, + 0x64, 0x65, 0x73, 0x69, 0x72, 0x65, 0x64, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x46, 0x72, 0x65, + 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x49, 0x0a, 0x10, 0x64, 0x65, 0x73, 0x69, 0x72, 0x65, + 0x64, 0x5f, 0x6d, 0x61, 0x78, 0x5f, 0x65, 0x69, 0x72, 0x70, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1f, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, + 0x33, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x45, 0x49, 0x52, 0x50, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x52, 0x0e, 0x64, 0x65, 0x73, 0x69, 0x72, 0x65, 0x64, 0x4d, 0x61, 0x78, 0x45, 0x69, 0x72, + 0x70, 0x12, 0x57, 0x0a, 0x1b, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x5f, 0x62, 0x5f, 0x63, 0x5f, 0x64, + 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, + 0x18, 0x1f, 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, 0x17, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x42, 0x43, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x69, + 0x6e, 0x6b, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x12, 0x45, 0x0a, 0x11, 0x75, 0x70, + 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x64, 0x77, 0x65, 0x6c, 0x6c, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, + 0x20, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, + 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x52, 0x0f, 0x75, 0x70, 0x6c, 0x69, 0x6e, 0x6b, 0x44, 0x77, 0x65, 0x6c, 0x6c, 0x54, 0x69, 0x6d, + 0x65, 0x12, 0x49, 0x0a, 0x13, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x64, 0x77, + 0x65, 0x6c, 0x6c, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x21, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, + 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, + 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x11, 0x64, 0x6f, 0x77, 0x6e, 0x6c, + 0x69, 0x6e, 0x6b, 0x44, 0x77, 0x65, 0x6c, 0x6c, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x2d, 0x0a, 0x03, + 0x61, 0x64, 0x72, 0x18, 0x22, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x74, 0x74, 0x6e, 0x2e, + 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x41, 0x44, 0x52, 0x53, 0x65, + 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x03, 0x61, 0x64, 0x72, 0x12, 0x48, 0x0a, 0x12, 0x73, + 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, + 0x73, 0x18, 0x23, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, + 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x52, 0x11, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x44, 0x6f, 0x77, 0x6e, + 0x6c, 0x69, 0x6e, 0x6b, 0x73, 0x12, 0x33, 0x0a, 0x05, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x18, 0x24, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, + 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x53, 0x65, 0x74, 0x74, 0x69, + 0x6e, 0x67, 0x73, 0x52, 0x05, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x12, 0x42, 0x0a, 0x0d, 0x64, 0x65, + 0x73, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x18, 0x25, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1d, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, + 0x76, 0x33, 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, + 0x52, 0x0c, 0x64, 0x65, 0x73, 0x69, 0x72, 0x65, 0x64, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x3a, 0x08, + 0xf2, 0xaa, 0x19, 0x04, 0x08, 0x01, 0x10, 0x01, 0x22, 0xef, 0x29, 0x0a, 0x08, 0x4d, 0x41, 0x43, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x56, 0x0a, 0x12, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, + 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1d, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, + 0x76, 0x33, 0x2e, 0x4d, 0x41, 0x43, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, + 0x42, 0x08, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x11, 0x63, 0x75, 0x72, 0x72, + 0x65, 0x6e, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x56, 0x0a, + 0x12, 0x64, 0x65, 0x73, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, + 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x74, 0x74, 0x6e, 0x2e, + 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x4d, 0x41, 0x43, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, + 0x10, 0x01, 0x52, 0x11, 0x64, 0x65, 0x73, 0x69, 0x72, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, + 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x42, 0x0a, 0x0c, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, + 0x63, 0x6c, 0x61, 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x74, 0x74, + 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x6c, 0x61, + 0x73, 0x73, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x82, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0b, 0x64, 0x65, + 0x76, 0x69, 0x63, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x12, 0x4d, 0x0a, 0x0f, 0x6c, 0x6f, 0x72, + 0x61, 0x77, 0x61, 0x6e, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, + 0x2e, 0x76, 0x33, 0x2e, 0x4d, 0x41, 0x43, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x08, + 0xfa, 0x42, 0x05, 0x82, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, + 0x6e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x57, 0x0a, 0x1a, 0x6c, 0x61, 0x73, 0x74, + 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x6c, + 0x69, 0x6e, 0x6b, 0x5f, 0x61, 0x74, 0x18, 0x05, 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, 0x17, 0x6c, 0x61, 0x73, 0x74, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x41, + 0x74, 0x12, 0x35, 0x0a, 0x18, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x64, 0x65, 0x76, 0x5f, 0x73, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x5f, 0x66, 0x5f, 0x63, 0x6e, 0x74, 0x5f, 0x75, 0x70, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x13, 0x6c, 0x61, 0x73, 0x74, 0x44, 0x65, 0x76, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x46, 0x43, 0x6e, 0x74, 0x55, 0x70, 0x12, 0x57, 0x0a, 0x15, 0x70, 0x69, 0x6e, 0x67, + 0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x5f, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x69, 0x63, 0x69, 0x74, + 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, + 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x53, 0x6c, 0x6f, + 0x74, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x13, 0x70, 0x69, + 0x6e, 0x67, 0x53, 0x6c, 0x6f, 0x74, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x69, 0x63, 0x69, 0x74, + 0x79, 0x12, 0x65, 0x0a, 0x1c, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x61, 0x70, 0x70, + 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, + 0x6b, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, + 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x52, 0x1a, 0x70, 0x65, + 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x12, 0x45, 0x0a, 0x10, 0x71, 0x75, 0x65, 0x75, + 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x18, 0x09, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, + 0x2e, 0x76, 0x33, 0x2e, 0x4d, 0x41, 0x43, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x0f, + 0x71, 0x75, 0x65, 0x75, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x12, + 0x45, 0x0a, 0x10, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x74, 0x74, 0x6e, 0x2e, + 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x4d, 0x41, 0x43, 0x43, 0x6f, + 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x0f, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x12, 0x51, 0x0a, 0x12, 0x71, 0x75, 0x65, 0x75, 0x65, 0x64, + 0x5f, 0x6a, 0x6f, 0x69, 0x6e, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x18, 0x0b, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, + 0x2e, 0x76, 0x33, 0x2e, 0x4d, 0x41, 0x43, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x4a, 0x6f, 0x69, + 0x6e, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x52, 0x10, 0x71, 0x75, 0x65, 0x75, 0x65, 0x64, 0x4a, + 0x6f, 0x69, 0x6e, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x12, 0x56, 0x0a, 0x14, 0x70, 0x65, 0x6e, + 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x6a, 0x6f, 0x69, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, + 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x4d, 0x41, 0x43, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x2e, 0x4a, 0x6f, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x12, 0x70, + 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x4a, 0x6f, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x30, 0x0a, 0x14, 0x72, 0x78, 0x5f, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x73, 0x5f, + 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x12, 0x72, 0x78, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x73, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, + 0x62, 0x6c, 0x65, 0x12, 0x4d, 0x0a, 0x0e, 0x72, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x5f, 0x75, 0x70, + 0x6c, 0x69, 0x6e, 0x6b, 0x73, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x4d, 0x41, 0x43, - 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x8a, - 0x01, 0x02, 0x10, 0x01, 0x52, 0x11, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x50, 0x61, 0x72, - 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x56, 0x0a, 0x12, 0x64, 0x65, 0x73, 0x69, 0x72, - 0x65, 0x64, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, - 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x4d, 0x41, 0x43, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, - 0x72, 0x73, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x11, 0x64, 0x65, - 0x73, 0x69, 0x72, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, - 0x42, 0x0a, 0x0c, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, - 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x42, 0x08, 0xfa, 0x42, - 0x05, 0x82, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0b, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6c, - 0x61, 0x73, 0x73, 0x12, 0x4d, 0x0a, 0x0f, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x5f, 0x76, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x74, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x55, 0x70, 0x6c, 0x69, 0x6e, 0x6b, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x52, 0x0d, 0x72, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x55, 0x70, 0x6c, 0x69, 0x6e, + 0x6b, 0x73, 0x12, 0x53, 0x0a, 0x10, 0x72, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x5f, 0x64, 0x6f, 0x77, + 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x73, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x4d, 0x41, - 0x43, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x82, 0x01, 0x02, - 0x10, 0x01, 0x52, 0x0e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x56, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x12, 0x57, 0x0a, 0x1a, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x72, 0x6d, 0x65, 0x64, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x61, 0x74, - 0x18, 0x05, 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, 0x17, 0x6c, 0x61, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, - 0x64, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x41, 0x74, 0x12, 0x35, 0x0a, 0x18, 0x6c, - 0x61, 0x73, 0x74, 0x5f, 0x64, 0x65, 0x76, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, 0x66, - 0x5f, 0x63, 0x6e, 0x74, 0x5f, 0x75, 0x70, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x13, 0x6c, - 0x61, 0x73, 0x74, 0x44, 0x65, 0x76, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x46, 0x43, 0x6e, 0x74, - 0x55, 0x70, 0x12, 0x57, 0x0a, 0x15, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x5f, - 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x69, 0x63, 0x69, 0x74, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x23, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, - 0x76, 0x33, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x53, 0x6c, 0x6f, 0x74, 0x50, 0x65, 0x72, 0x69, 0x6f, - 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x13, 0x70, 0x69, 0x6e, 0x67, 0x53, 0x6c, 0x6f, 0x74, - 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x69, 0x63, 0x69, 0x74, 0x79, 0x12, 0x65, 0x0a, 0x1c, 0x70, - 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x18, 0x08, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x23, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, - 0x76, 0x33, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x6f, - 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x52, 0x1a, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x41, - 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x69, - 0x6e, 0x6b, 0x12, 0x45, 0x0a, 0x10, 0x71, 0x75, 0x65, 0x75, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x74, - 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x4d, 0x41, - 0x43, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x0f, 0x71, 0x75, 0x65, 0x75, 0x65, 0x64, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x12, 0x45, 0x0a, 0x10, 0x70, 0x65, 0x6e, - 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x18, 0x0a, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, - 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x4d, 0x41, 0x43, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, - 0x0f, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, - 0x12, 0x51, 0x0a, 0x12, 0x71, 0x75, 0x65, 0x75, 0x65, 0x64, 0x5f, 0x6a, 0x6f, 0x69, 0x6e, 0x5f, - 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x74, - 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x4d, 0x41, - 0x43, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x4a, 0x6f, 0x69, 0x6e, 0x41, 0x63, 0x63, 0x65, 0x70, - 0x74, 0x52, 0x10, 0x71, 0x75, 0x65, 0x75, 0x65, 0x64, 0x4a, 0x6f, 0x69, 0x6e, 0x41, 0x63, 0x63, - 0x65, 0x70, 0x74, 0x12, 0x56, 0x0a, 0x14, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x6a, - 0x6f, 0x69, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x24, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, - 0x76, 0x33, 0x2e, 0x4d, 0x41, 0x43, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x4a, 0x6f, 0x69, 0x6e, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x12, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, - 0x4a, 0x6f, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x30, 0x0a, 0x14, 0x72, - 0x78, 0x5f, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x73, 0x5f, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, - 0x62, 0x6c, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x72, 0x78, 0x57, 0x69, 0x6e, - 0x64, 0x6f, 0x77, 0x73, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x4d, 0x0a, - 0x0e, 0x72, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x5f, 0x75, 0x70, 0x6c, 0x69, 0x6e, 0x6b, 0x73, 0x18, - 0x0e, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, - 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x4d, 0x41, 0x43, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, - 0x55, 0x70, 0x6c, 0x69, 0x6e, 0x6b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x0d, 0x72, - 0x65, 0x63, 0x65, 0x6e, 0x74, 0x55, 0x70, 0x6c, 0x69, 0x6e, 0x6b, 0x73, 0x12, 0x53, 0x0a, 0x10, - 0x72, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x73, - 0x18, 0x0f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, - 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x4d, 0x41, 0x43, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x52, 0x0f, 0x72, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, - 0x73, 0x12, 0x66, 0x0a, 0x22, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, - 0x6b, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x64, 0x6f, 0x77, 0x6e, - 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x61, 0x74, 0x18, 0x10, 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, 0x1e, 0x6c, 0x61, 0x73, 0x74, 0x4e, - 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, 0x65, 0x64, 0x44, - 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x41, 0x74, 0x12, 0x72, 0x0a, 0x1e, 0x72, 0x65, 0x6a, - 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x64, 0x72, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x72, - 0x61, 0x74, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x65, 0x73, 0x18, 0x11, 0x20, 0x03, 0x28, - 0x0e, 0x32, 0x1d, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, - 0x76, 0x33, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, - 0x42, 0x0f, 0xfa, 0x42, 0x0c, 0x92, 0x01, 0x09, 0x10, 0x0f, 0x22, 0x05, 0x82, 0x01, 0x02, 0x10, - 0x01, 0x52, 0x1a, 0x72, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x65, 0x64, 0x41, 0x64, 0x72, 0x44, 0x61, - 0x74, 0x61, 0x52, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x65, 0x73, 0x12, 0x50, 0x0a, - 0x1d, 0x72, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x64, 0x72, 0x5f, 0x74, 0x78, - 0x5f, 0x70, 0x6f, 0x77, 0x65, 0x72, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x65, 0x73, 0x18, 0x12, - 0x20, 0x03, 0x28, 0x0d, 0x42, 0x0e, 0xfa, 0x42, 0x0b, 0x92, 0x01, 0x08, 0x10, 0x0f, 0x22, 0x04, - 0x2a, 0x02, 0x18, 0x0f, 0x52, 0x19, 0x72, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x65, 0x64, 0x41, 0x64, - 0x72, 0x54, 0x78, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x65, 0x73, 0x12, - 0x41, 0x0a, 0x14, 0x72, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x72, 0x65, 0x71, - 0x75, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x18, 0x13, 0x20, 0x03, 0x28, 0x04, 0x42, 0x0e, 0xfa, - 0x42, 0x0b, 0x92, 0x01, 0x08, 0x22, 0x06, 0x32, 0x04, 0x28, 0xa0, 0x8d, 0x06, 0x52, 0x13, 0x72, - 0x65, 0x6a, 0x65, 0x63, 0x74, 0x65, 0x64, 0x46, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x69, - 0x65, 0x73, 0x12, 0x44, 0x0a, 0x10, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x6c, - 0x69, 0x6e, 0x6b, 0x5f, 0x61, 0x74, 0x18, 0x14, 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, 0x0e, 0x6c, 0x61, 0x73, 0x74, 0x44, 0x6f, - 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x41, 0x74, 0x12, 0x6f, 0x0a, 0x19, 0x72, 0x65, 0x6a, 0x65, - 0x63, 0x74, 0x65, 0x64, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x72, - 0x61, 0x6e, 0x67, 0x65, 0x73, 0x18, 0x15, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x74, 0x74, + 0x43, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x0f, 0x72, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x44, 0x6f, + 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x73, 0x12, 0x66, 0x0a, 0x22, 0x6c, 0x61, 0x73, 0x74, 0x5f, + 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, 0x65, + 0x64, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x61, 0x74, 0x18, 0x10, 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, + 0x1e, 0x6c, 0x61, 0x73, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x69, 0x74, + 0x69, 0x61, 0x74, 0x65, 0x64, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x41, 0x74, 0x12, + 0x72, 0x0a, 0x1e, 0x72, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x64, 0x72, 0x5f, + 0x64, 0x61, 0x74, 0x61, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x65, + 0x73, 0x18, 0x11, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, + 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x61, 0x74, + 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x42, 0x0f, 0xfa, 0x42, 0x0c, 0x92, 0x01, 0x09, 0x10, 0x0f, + 0x22, 0x05, 0x82, 0x01, 0x02, 0x10, 0x01, 0x52, 0x1a, 0x72, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x65, + 0x64, 0x41, 0x64, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x64, 0x65, + 0x78, 0x65, 0x73, 0x12, 0x50, 0x0a, 0x1d, 0x72, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, + 0x61, 0x64, 0x72, 0x5f, 0x74, 0x78, 0x5f, 0x70, 0x6f, 0x77, 0x65, 0x72, 0x5f, 0x69, 0x6e, 0x64, + 0x65, 0x78, 0x65, 0x73, 0x18, 0x12, 0x20, 0x03, 0x28, 0x0d, 0x42, 0x0e, 0xfa, 0x42, 0x0b, 0x92, + 0x01, 0x08, 0x10, 0x0f, 0x22, 0x04, 0x2a, 0x02, 0x18, 0x0f, 0x52, 0x19, 0x72, 0x65, 0x6a, 0x65, + 0x63, 0x74, 0x65, 0x64, 0x41, 0x64, 0x72, 0x54, 0x78, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x49, 0x6e, + 0x64, 0x65, 0x78, 0x65, 0x73, 0x12, 0x41, 0x0a, 0x14, 0x72, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x65, + 0x64, 0x5f, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x18, 0x13, 0x20, + 0x03, 0x28, 0x04, 0x42, 0x0e, 0xfa, 0x42, 0x0b, 0x92, 0x01, 0x08, 0x22, 0x06, 0x32, 0x04, 0x28, + 0xa0, 0x8d, 0x06, 0x52, 0x13, 0x72, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x65, 0x64, 0x46, 0x72, 0x65, + 0x71, 0x75, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x12, 0x44, 0x0a, 0x10, 0x6c, 0x61, 0x73, 0x74, + 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x61, 0x74, 0x18, 0x14, 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, 0x0e, + 0x6c, 0x61, 0x73, 0x74, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x41, 0x74, 0x12, 0x6f, + 0x0a, 0x19, 0x72, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5f, + 0x72, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x18, 0x15, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x34, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, + 0x76, 0x33, 0x2e, 0x4d, 0x41, 0x43, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x52, 0x65, 0x6a, 0x65, + 0x63, 0x74, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x52, 0x61, 0x74, 0x65, 0x52, 0x61, 0x6e, 0x67, + 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x16, 0x72, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x65, + 0x64, 0x44, 0x61, 0x74, 0x61, 0x52, 0x61, 0x74, 0x65, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x12, + 0x35, 0x0a, 0x18, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x61, 0x64, 0x72, 0x5f, 0x63, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x5f, 0x66, 0x5f, 0x63, 0x6e, 0x74, 0x5f, 0x75, 0x70, 0x18, 0x16, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x13, 0x6c, 0x61, 0x73, 0x74, 0x41, 0x64, 0x72, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x46, 0x43, 0x6e, 0x74, 0x55, 0x70, 0x12, 0x69, 0x0a, 0x1e, 0x72, 0x65, 0x63, 0x65, 0x6e, 0x74, + 0x5f, 0x6d, 0x61, 0x63, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x18, 0x17, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x24, + 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, + 0x4d, 0x41, 0x43, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x66, 0x69, 0x65, 0x72, 0x52, 0x1b, 0x72, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x4d, 0x61, 0x63, 0x43, + 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, + 0x73, 0x12, 0x5d, 0x0a, 0x16, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x65, 0x6c, + 0x61, 0x79, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x18, 0x18, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x27, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, + 0x76, 0x33, 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x44, + 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x71, 0x52, 0x14, 0x70, 0x65, 0x6e, 0x64, + 0x69, 0x6e, 0x67, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, + 0x1a, 0x83, 0x02, 0x0a, 0x0b, 0x4a, 0x6f, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x51, 0x0a, 0x11, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x73, 0x65, 0x74, + 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x74, 0x74, + 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x44, 0x4c, 0x53, + 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, + 0x01, 0x52, 0x10, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x53, 0x65, 0x74, 0x74, 0x69, + 0x6e, 0x67, 0x73, 0x12, 0x3c, 0x0a, 0x08, 0x72, 0x78, 0x5f, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, + 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x52, 0x78, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x42, 0x08, + 0xfa, 0x42, 0x05, 0x82, 0x01, 0x02, 0x10, 0x01, 0x52, 0x07, 0x72, 0x78, 0x44, 0x65, 0x6c, 0x61, + 0x79, 0x12, 0x2f, 0x0a, 0x07, 0x63, 0x66, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, + 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x46, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x06, 0x63, 0x66, 0x4c, 0x69, + 0x73, 0x74, 0x3a, 0x08, 0xf2, 0xaa, 0x19, 0x04, 0x08, 0x01, 0x10, 0x01, 0x4a, 0x04, 0x08, 0x01, + 0x10, 0x02, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x4a, 0x04, + 0x08, 0x04, 0x10, 0x05, 0x4a, 0x04, 0x08, 0x05, 0x10, 0x06, 0x4a, 0x04, 0x08, 0x09, 0x10, 0x0a, + 0x4a, 0x04, 0x08, 0x0a, 0x10, 0x0b, 0x1a, 0xd1, 0x07, 0x0a, 0x0a, 0x4a, 0x6f, 0x69, 0x6e, 0x41, + 0x63, 0x63, 0x65, 0x70, 0x74, 0x12, 0x23, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x09, 0xfa, 0x42, 0x06, 0x7a, 0x04, 0x10, 0x11, 0x18, + 0x21, 0x52, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x48, 0x0a, 0x07, 0x72, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x4d, 0x41, 0x43, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x65, 0x64, 0x44, 0x61, - 0x74, 0x61, 0x52, 0x61, 0x74, 0x65, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x52, 0x16, 0x72, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x52, - 0x61, 0x74, 0x65, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x12, 0x35, 0x0a, 0x18, 0x6c, 0x61, 0x73, - 0x74, 0x5f, 0x61, 0x64, 0x72, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x66, 0x5f, 0x63, - 0x6e, 0x74, 0x5f, 0x75, 0x70, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x13, 0x6c, 0x61, 0x73, - 0x74, 0x41, 0x64, 0x72, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x46, 0x43, 0x6e, 0x74, 0x55, 0x70, - 0x12, 0x69, 0x0a, 0x1e, 0x72, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x5f, 0x6d, 0x61, 0x63, 0x5f, 0x63, - 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, - 0x72, 0x73, 0x18, 0x17, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x24, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, - 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x4d, 0x41, 0x43, 0x43, 0x6f, 0x6d, - 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x1b, - 0x72, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x4d, 0x61, 0x63, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, - 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x12, 0x5d, 0x0a, 0x16, 0x70, - 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x64, 0x6f, 0x77, - 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x18, 0x18, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x74, 0x74, - 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x52, 0x65, 0x6c, - 0x61, 0x79, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, - 0x6b, 0x52, 0x65, 0x71, 0x52, 0x14, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x6c, - 0x61, 0x79, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x1a, 0x83, 0x02, 0x0a, 0x0b, 0x4a, - 0x6f, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x51, 0x0a, 0x11, 0x64, 0x6f, - 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, - 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x44, 0x4c, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, - 0x73, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x10, 0x64, 0x6f, 0x77, - 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3c, 0x0a, - 0x08, 0x72, 0x78, 0x5f, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x17, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, - 0x2e, 0x52, 0x78, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x82, 0x01, 0x02, - 0x10, 0x01, 0x52, 0x07, 0x72, 0x78, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x12, 0x2f, 0x0a, 0x07, 0x63, - 0x66, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x74, - 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x46, - 0x4c, 0x69, 0x73, 0x74, 0x52, 0x06, 0x63, 0x66, 0x4c, 0x69, 0x73, 0x74, 0x3a, 0x08, 0xf2, 0xaa, - 0x19, 0x04, 0x08, 0x01, 0x10, 0x01, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x4a, 0x04, 0x08, 0x02, - 0x10, 0x03, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05, 0x4a, 0x04, - 0x08, 0x05, 0x10, 0x06, 0x4a, 0x04, 0x08, 0x09, 0x10, 0x0a, 0x4a, 0x04, 0x08, 0x0a, 0x10, 0x0b, - 0x1a, 0xd1, 0x07, 0x0a, 0x0a, 0x4a, 0x6f, 0x69, 0x6e, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x12, - 0x23, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, - 0x42, 0x09, 0xfa, 0x42, 0x06, 0x7a, 0x04, 0x10, 0x11, 0x18, 0x21, 0x52, 0x07, 0x70, 0x61, 0x79, - 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x48, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, - 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x4d, 0x41, 0x43, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, - 0x4a, 0x6f, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x42, 0x08, 0xfa, 0x42, 0x05, - 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x39, - 0x0a, 0x04, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x74, - 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x53, 0x65, - 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x73, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x8a, 0x01, - 0x02, 0x10, 0x01, 0x52, 0x04, 0x6b, 0x65, 0x79, 0x73, 0x12, 0x35, 0x0a, 0x0f, 0x63, 0x6f, 0x72, - 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x04, 0x20, 0x03, - 0x28, 0x09, 0x42, 0x0c, 0xfa, 0x42, 0x09, 0x92, 0x01, 0x06, 0x22, 0x04, 0x72, 0x02, 0x18, 0x64, - 0x52, 0x0e, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, - 0x12, 0xed, 0x02, 0x0a, 0x08, 0x64, 0x65, 0x76, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x0c, 0x42, 0xd1, 0x02, 0x92, 0x41, 0x19, 0x4a, 0x0a, 0x22, 0x32, 0x36, 0x30, 0x30, - 0x41, 0x42, 0x43, 0x44, 0x22, 0x9a, 0x02, 0x01, 0x07, 0xa2, 0x02, 0x06, 0x73, 0x74, 0x72, 0x69, - 0x6e, 0x67, 0xfa, 0x42, 0x06, 0x7a, 0x04, 0x68, 0x04, 0x70, 0x01, 0xea, 0xaa, 0x19, 0x82, 0x01, - 0x0a, 0x3f, 0x67, 0x6f, 0x2e, 0x74, 0x68, 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x6e, - 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2d, 0x73, - 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x76, 0x33, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x74, 0x79, 0x70, 0x65, - 0x73, 0x2e, 0x4d, 0x61, 0x72, 0x73, 0x68, 0x61, 0x6c, 0x48, 0x45, 0x58, 0x42, 0x79, 0x74, 0x65, - 0x73, 0x12, 0x3f, 0x67, 0x6f, 0x2e, 0x74, 0x68, 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x2e, - 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2d, - 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x76, 0x33, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x74, 0x79, 0x70, - 0x65, 0x73, 0x2e, 0x55, 0x6e, 0x6d, 0x61, 0x72, 0x73, 0x68, 0x61, 0x6c, 0x34, 0x42, 0x79, 0x74, - 0x65, 0x73, 0xf2, 0xaa, 0x19, 0xa0, 0x01, 0x1a, 0x4e, 0x67, 0x6f, 0x2e, 0x74, 0x68, 0x65, 0x74, - 0x68, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6c, 0x6f, - 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2d, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x76, 0x33, 0x2f, 0x63, - 0x6d, 0x64, 0x2f, 0x74, 0x74, 0x6e, 0x2d, 0x6c, 0x77, 0x2d, 0x63, 0x6c, 0x69, 0x2f, 0x63, 0x75, - 0x73, 0x74, 0x6f, 0x6d, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x2e, 0x4e, 0x65, 0x77, 0x34, 0x42, 0x79, - 0x74, 0x65, 0x73, 0x46, 0x6c, 0x61, 0x67, 0x22, 0x4e, 0x67, 0x6f, 0x2e, 0x74, 0x68, 0x65, 0x74, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x4a, 0x6f, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x07, 0x72, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x39, 0x0a, 0x04, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, + 0x2e, 0x76, 0x33, 0x2e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x73, 0x42, + 0x08, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x04, 0x6b, 0x65, 0x79, 0x73, 0x12, + 0x35, 0x0a, 0x0f, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, + 0x64, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x42, 0x0c, 0xfa, 0x42, 0x09, 0x92, 0x01, 0x06, + 0x22, 0x04, 0x72, 0x02, 0x18, 0x64, 0x52, 0x0e, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x6c, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x12, 0xed, 0x02, 0x0a, 0x08, 0x64, 0x65, 0x76, 0x5f, 0x61, + 0x64, 0x64, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x42, 0xd1, 0x02, 0x92, 0x41, 0x19, 0x4a, + 0x0a, 0x22, 0x32, 0x36, 0x30, 0x30, 0x41, 0x42, 0x43, 0x44, 0x22, 0x9a, 0x02, 0x01, 0x07, 0xa2, + 0x02, 0x06, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0xfa, 0x42, 0x06, 0x7a, 0x04, 0x68, 0x04, 0x70, + 0x01, 0xea, 0xaa, 0x19, 0x82, 0x01, 0x0a, 0x3f, 0x67, 0x6f, 0x2e, 0x74, 0x68, 0x65, 0x74, 0x68, + 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6c, 0x6f, 0x72, + 0x61, 0x77, 0x61, 0x6e, 0x2d, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x76, 0x33, 0x2f, 0x70, 0x6b, + 0x67, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x72, 0x73, 0x68, 0x61, 0x6c, 0x48, + 0x45, 0x58, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x3f, 0x67, 0x6f, 0x2e, 0x74, 0x68, 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6c, 0x6f, - 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2d, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x76, 0x33, 0x2f, 0x63, - 0x6d, 0x64, 0x2f, 0x74, 0x74, 0x6e, 0x2d, 0x6c, 0x77, 0x2d, 0x63, 0x6c, 0x69, 0x2f, 0x63, 0x75, - 0x73, 0x74, 0x6f, 0x6d, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x78, 0x61, - 0x63, 0x74, 0x42, 0x79, 0x74, 0x65, 0x73, 0x52, 0x07, 0x64, 0x65, 0x76, 0x41, 0x64, 0x64, 0x72, - 0x12, 0xe7, 0x02, 0x0a, 0x06, 0x6e, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x0c, 0x42, 0xcf, 0x02, 0x92, 0x41, 0x17, 0x4a, 0x08, 0x22, 0x30, 0x30, 0x30, 0x30, 0x31, 0x33, - 0x22, 0x9a, 0x02, 0x01, 0x07, 0xa2, 0x02, 0x06, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0xfa, 0x42, - 0x06, 0x7a, 0x04, 0x68, 0x03, 0x70, 0x01, 0xea, 0xaa, 0x19, 0x82, 0x01, 0x0a, 0x3f, 0x67, 0x6f, - 0x2e, 0x74, 0x68, 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, - 0x72, 0x6b, 0x2f, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2d, 0x73, 0x74, 0x61, 0x63, 0x6b, - 0x2f, 0x76, 0x33, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, - 0x72, 0x73, 0x68, 0x61, 0x6c, 0x48, 0x45, 0x58, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x3f, 0x67, + 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2d, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x76, 0x33, 0x2f, 0x70, + 0x6b, 0x67, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x55, 0x6e, 0x6d, 0x61, 0x72, 0x73, 0x68, + 0x61, 0x6c, 0x34, 0x42, 0x79, 0x74, 0x65, 0x73, 0xf2, 0xaa, 0x19, 0xa0, 0x01, 0x1a, 0x4e, 0x67, 0x6f, 0x2e, 0x74, 0x68, 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2d, 0x73, 0x74, 0x61, 0x63, - 0x6b, 0x2f, 0x76, 0x33, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x55, - 0x6e, 0x6d, 0x61, 0x72, 0x73, 0x68, 0x61, 0x6c, 0x33, 0x42, 0x79, 0x74, 0x65, 0x73, 0xf2, 0xaa, - 0x19, 0xa0, 0x01, 0x1a, 0x4e, 0x67, 0x6f, 0x2e, 0x74, 0x68, 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, - 0x73, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, - 0x6e, 0x2d, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x76, 0x33, 0x2f, 0x63, 0x6d, 0x64, 0x2f, 0x74, - 0x74, 0x6e, 0x2d, 0x6c, 0x77, 0x2d, 0x63, 0x6c, 0x69, 0x2f, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, - 0x66, 0x6c, 0x61, 0x67, 0x73, 0x2e, 0x4e, 0x65, 0x77, 0x33, 0x42, 0x79, 0x74, 0x65, 0x73, 0x46, - 0x6c, 0x61, 0x67, 0x22, 0x4e, 0x67, 0x6f, 0x2e, 0x74, 0x68, 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, + 0x6b, 0x2f, 0x76, 0x33, 0x2f, 0x63, 0x6d, 0x64, 0x2f, 0x74, 0x74, 0x6e, 0x2d, 0x6c, 0x77, 0x2d, + 0x63, 0x6c, 0x69, 0x2f, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x2e, + 0x4e, 0x65, 0x77, 0x34, 0x42, 0x79, 0x74, 0x65, 0x73, 0x46, 0x6c, 0x61, 0x67, 0x22, 0x4e, 0x67, + 0x6f, 0x2e, 0x74, 0x68, 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x6e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x2f, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2d, 0x73, 0x74, 0x61, 0x63, + 0x6b, 0x2f, 0x76, 0x33, 0x2f, 0x63, 0x6d, 0x64, 0x2f, 0x74, 0x74, 0x6e, 0x2d, 0x6c, 0x77, 0x2d, + 0x63, 0x6c, 0x69, 0x2f, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x2e, + 0x47, 0x65, 0x74, 0x45, 0x78, 0x61, 0x63, 0x74, 0x42, 0x79, 0x74, 0x65, 0x73, 0x52, 0x07, 0x64, + 0x65, 0x76, 0x41, 0x64, 0x64, 0x72, 0x12, 0xe7, 0x02, 0x0a, 0x06, 0x6e, 0x65, 0x74, 0x5f, 0x69, + 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x42, 0xcf, 0x02, 0x92, 0x41, 0x17, 0x4a, 0x08, 0x22, + 0x30, 0x30, 0x30, 0x30, 0x31, 0x33, 0x22, 0x9a, 0x02, 0x01, 0x07, 0xa2, 0x02, 0x06, 0x73, 0x74, + 0x72, 0x69, 0x6e, 0x67, 0xfa, 0x42, 0x06, 0x7a, 0x04, 0x68, 0x03, 0x70, 0x01, 0xea, 0xaa, 0x19, + 0x82, 0x01, 0x0a, 0x3f, 0x67, 0x6f, 0x2e, 0x74, 0x68, 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x73, + 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, + 0x2d, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x76, 0x33, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x74, 0x79, + 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x72, 0x73, 0x68, 0x61, 0x6c, 0x48, 0x45, 0x58, 0x42, 0x79, + 0x74, 0x65, 0x73, 0x12, 0x3f, 0x67, 0x6f, 0x2e, 0x74, 0x68, 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, - 0x6e, 0x2d, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x76, 0x33, 0x2f, 0x63, 0x6d, 0x64, 0x2f, 0x74, - 0x74, 0x6e, 0x2d, 0x6c, 0x77, 0x2d, 0x63, 0x6c, 0x69, 0x2f, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, - 0x66, 0x6c, 0x61, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x78, 0x61, 0x63, 0x74, 0x42, 0x79, - 0x74, 0x65, 0x73, 0x52, 0x05, 0x6e, 0x65, 0x74, 0x49, 0x64, 0x3a, 0x08, 0xf2, 0xaa, 0x19, 0x04, - 0x08, 0x01, 0x10, 0x01, 0x1a, 0xf3, 0x08, 0x0a, 0x0d, 0x55, 0x70, 0x6c, 0x69, 0x6e, 0x6b, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3b, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, - 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x42, 0x08, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x07, 0x70, 0x61, 0x79, 0x6c, - 0x6f, 0x61, 0x64, 0x12, 0x57, 0x0a, 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, + 0x6e, 0x2d, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x76, 0x33, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x74, + 0x79, 0x70, 0x65, 0x73, 0x2e, 0x55, 0x6e, 0x6d, 0x61, 0x72, 0x73, 0x68, 0x61, 0x6c, 0x33, 0x42, + 0x79, 0x74, 0x65, 0x73, 0xf2, 0xaa, 0x19, 0xa0, 0x01, 0x1a, 0x4e, 0x67, 0x6f, 0x2e, 0x74, 0x68, + 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, + 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2d, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x76, 0x33, + 0x2f, 0x63, 0x6d, 0x64, 0x2f, 0x74, 0x74, 0x6e, 0x2d, 0x6c, 0x77, 0x2d, 0x63, 0x6c, 0x69, 0x2f, + 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x2e, 0x4e, 0x65, 0x77, 0x33, + 0x42, 0x79, 0x74, 0x65, 0x73, 0x46, 0x6c, 0x61, 0x67, 0x22, 0x4e, 0x67, 0x6f, 0x2e, 0x74, 0x68, + 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, + 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2d, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x76, 0x33, + 0x2f, 0x63, 0x6d, 0x64, 0x2f, 0x74, 0x74, 0x6e, 0x2d, 0x6c, 0x77, 0x2d, 0x63, 0x6c, 0x69, 0x2f, + 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x45, + 0x78, 0x61, 0x63, 0x74, 0x42, 0x79, 0x74, 0x65, 0x73, 0x52, 0x05, 0x6e, 0x65, 0x74, 0x49, 0x64, + 0x3a, 0x08, 0xf2, 0xaa, 0x19, 0x04, 0x08, 0x01, 0x10, 0x01, 0x1a, 0xf3, 0x08, 0x0a, 0x0d, 0x55, + 0x70, 0x6c, 0x69, 0x6e, 0x6b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3b, 0x0a, 0x07, + 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, + 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, + 0x52, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x57, 0x0a, 0x08, 0x73, 0x65, 0x74, + 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x74, 0x74, + 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x4d, 0x41, 0x43, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x55, 0x70, 0x6c, 0x69, 0x6e, 0x6b, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x2e, 0x54, 0x78, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x42, 0x08, + 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, + 0x67, 0x73, 0x12, 0x52, 0x0a, 0x0b, 0x72, 0x78, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, + 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x4d, 0x41, 0x43, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x2e, 0x55, 0x70, 0x6c, 0x69, 0x6e, 0x6b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, + 0x52, 0x78, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x0a, 0x72, 0x78, 0x4d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x3b, 0x0a, 0x0b, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, + 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, + 0x64, 0x41, 0x74, 0x12, 0x35, 0x0a, 0x0f, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x42, 0x0c, 0xfa, 0x42, + 0x09, 0x92, 0x01, 0x06, 0x22, 0x04, 0x72, 0x02, 0x18, 0x64, 0x52, 0x0e, 0x63, 0x6f, 0x72, 0x72, + 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x12, 0x3a, 0x0a, 0x14, 0x64, 0x65, + 0x76, 0x69, 0x63, 0x65, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x69, 0x6e, 0x64, + 0x65, 0x78, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x2a, 0x03, 0x18, + 0xff, 0x01, 0x52, 0x12, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, + 0x6c, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x1a, 0x53, 0x0a, 0x0a, 0x54, 0x78, 0x53, 0x65, 0x74, 0x74, + 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3f, 0x0a, 0x09, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x72, 0x61, 0x74, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, + 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x61, 0x74, + 0x65, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x64, 0x61, 0x74, + 0x61, 0x52, 0x61, 0x74, 0x65, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x0a, 0x1a, 0xda, 0x04, 0x0a, 0x0a, + 0x52, 0x78, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x4d, 0x0a, 0x0b, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x22, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, + 0x2e, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, + 0x65, 0x72, 0x73, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0a, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x49, 0x64, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x68, 0x61, + 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x72, 0x73, 0x73, 0x69, 0x18, 0x09, 0x20, 0x01, 0x28, 0x02, 0x52, + 0x0b, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x52, 0x73, 0x73, 0x69, 0x12, 0x10, 0x0a, 0x03, + 0x73, 0x6e, 0x72, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x02, 0x52, 0x03, 0x73, 0x6e, 0x72, 0x12, 0x6a, + 0x0a, 0x18, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x5f, + 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x26, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, + 0x33, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x50, 0x61, 0x74, 0x68, 0x43, 0x6f, + 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x82, 0x01, 0x02, + 0x10, 0x01, 0x52, 0x16, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x50, 0x61, 0x74, 0x68, + 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x75, 0x70, + 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0c, + 0x52, 0x0b, 0x75, 0x70, 0x6c, 0x69, 0x6e, 0x6b, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x6b, 0x0a, + 0x0d, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x62, 0x72, 0x6f, 0x6b, 0x65, 0x72, 0x18, 0x12, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x46, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, + 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x4d, 0x41, 0x43, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x55, + 0x70, 0x6c, 0x69, 0x6e, 0x6b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x52, 0x78, 0x4d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x42, 0x72, + 0x6f, 0x6b, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x0c, 0x70, 0x61, + 0x63, 0x6b, 0x65, 0x74, 0x42, 0x72, 0x6f, 0x6b, 0x65, 0x72, 0x12, 0x55, 0x0a, 0x05, 0x72, 0x65, + 0x6c, 0x61, 0x79, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x74, 0x74, 0x6e, 0x2e, + 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x4d, 0x41, 0x43, 0x53, 0x74, + 0x61, 0x74, 0x65, 0x2e, 0x55, 0x70, 0x6c, 0x69, 0x6e, 0x6b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x2e, 0x52, 0x78, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x6c, + 0x61, 0x79, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x05, 0x72, 0x65, 0x6c, 0x61, + 0x79, 0x1a, 0x1c, 0x0a, 0x14, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x42, 0x72, 0x6f, 0x6b, 0x65, + 0x72, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x0b, 0x1a, + 0x15, 0x0a, 0x0d, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0x4a, 0x04, 0x08, 0x01, 0x10, 0x04, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x09, 0x4a, 0x04, 0x08, 0x0a, + 0x10, 0x0b, 0x4a, 0x04, 0x08, 0x0c, 0x10, 0x0d, 0x4a, 0x04, 0x08, 0x0d, 0x10, 0x0e, 0x4a, 0x04, + 0x08, 0x10, 0x10, 0x11, 0x4a, 0x04, 0x08, 0x11, 0x10, 0x12, 0x4a, 0x04, 0x08, 0x13, 0x10, 0x14, + 0x4a, 0x04, 0x08, 0x14, 0x10, 0x15, 0x4a, 0x04, 0x08, 0x15, 0x10, 0x16, 0x4a, 0x04, 0x08, 0x16, + 0x10, 0x17, 0x4a, 0x04, 0x08, 0x63, 0x10, 0x64, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x4a, 0x04, + 0x08, 0x03, 0x10, 0x04, 0x4a, 0x04, 0x08, 0x08, 0x10, 0x09, 0x4a, 0x04, 0x08, 0x0a, 0x10, 0x0b, + 0x1a, 0x97, 0x04, 0x0a, 0x0f, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x12, 0x4a, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x4d, 0x41, 0x43, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, - 0x55, 0x70, 0x6c, 0x69, 0x6e, 0x6b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x54, 0x78, - 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, - 0x10, 0x01, 0x52, 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x52, 0x0a, 0x0b, - 0x72, 0x78, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x31, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, - 0x76, 0x33, 0x2e, 0x4d, 0x41, 0x43, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x55, 0x70, 0x6c, 0x69, - 0x6e, 0x6b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x52, 0x78, 0x4d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x52, 0x0a, 0x72, 0x78, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, - 0x12, 0x3b, 0x0a, 0x0b, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, - 0x70, 0x52, 0x0a, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x41, 0x74, 0x12, 0x35, 0x0a, - 0x0f, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x73, - 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x42, 0x0c, 0xfa, 0x42, 0x09, 0x92, 0x01, 0x06, 0x22, 0x04, - 0x72, 0x02, 0x18, 0x64, 0x52, 0x0e, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x49, 0x64, 0x73, 0x12, 0x3a, 0x0a, 0x14, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x63, - 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x09, 0x20, 0x01, - 0x28, 0x0d, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x2a, 0x03, 0x18, 0xff, 0x01, 0x52, 0x12, 0x64, 0x65, - 0x76, 0x69, 0x63, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x6e, 0x64, 0x65, 0x78, - 0x1a, 0x53, 0x0a, 0x0a, 0x54, 0x78, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3f, - 0x0a, 0x09, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x18, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, - 0x76, 0x33, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x61, 0x74, 0x65, 0x42, 0x08, 0xfa, 0x42, 0x05, - 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x52, 0x61, 0x74, 0x65, 0x4a, - 0x04, 0x08, 0x02, 0x10, 0x0a, 0x1a, 0xda, 0x04, 0x0a, 0x0a, 0x52, 0x78, 0x4d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x12, 0x4d, 0x0a, 0x0b, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, - 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x74, 0x74, 0x6e, 0x2e, - 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x47, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x42, 0x08, 0xfa, - 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0a, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, - 0x49, 0x64, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x72, - 0x73, 0x73, 0x69, 0x18, 0x09, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0b, 0x63, 0x68, 0x61, 0x6e, 0x6e, - 0x65, 0x6c, 0x52, 0x73, 0x73, 0x69, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x6e, 0x72, 0x18, 0x0b, 0x20, - 0x01, 0x28, 0x02, 0x52, 0x03, 0x73, 0x6e, 0x72, 0x12, 0x6a, 0x0a, 0x18, 0x64, 0x6f, 0x77, 0x6e, - 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, - 0x61, 0x69, 0x6e, 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x26, 0x2e, 0x74, 0x74, 0x6e, - 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x44, 0x6f, 0x77, 0x6e, - 0x6c, 0x69, 0x6e, 0x6b, 0x50, 0x61, 0x74, 0x68, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, - 0x6e, 0x74, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x82, 0x01, 0x02, 0x10, 0x01, 0x52, 0x16, 0x64, 0x6f, - 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x50, 0x61, 0x74, 0x68, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x72, - 0x61, 0x69, 0x6e, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x75, 0x70, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x74, - 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x75, 0x70, 0x6c, 0x69, - 0x6e, 0x6b, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x6b, 0x0a, 0x0d, 0x70, 0x61, 0x63, 0x6b, 0x65, - 0x74, 0x5f, 0x62, 0x72, 0x6f, 0x6b, 0x65, 0x72, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x46, + 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, + 0x12, 0x35, 0x0a, 0x0f, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, + 0x69, 0x64, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x42, 0x0c, 0xfa, 0x42, 0x09, 0x92, 0x01, + 0x06, 0x22, 0x04, 0x72, 0x02, 0x18, 0x64, 0x52, 0x0e, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x6c, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x1a, 0xee, 0x02, 0x0a, 0x07, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x12, 0x54, 0x0a, 0x05, 0x6d, 0x5f, 0x68, 0x64, 0x72, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, + 0x2e, 0x76, 0x33, 0x2e, 0x4d, 0x41, 0x43, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x44, 0x6f, 0x77, + 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x48, 0x44, 0x52, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x8a, 0x01, + 0x02, 0x10, 0x01, 0x52, 0x04, 0x6d, 0x48, 0x64, 0x72, 0x12, 0x5c, 0x0a, 0x0b, 0x6d, 0x61, 0x63, + 0x5f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, - 0x4d, 0x41, 0x43, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x55, 0x70, 0x6c, 0x69, 0x6e, 0x6b, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x52, 0x78, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x42, 0x72, 0x6f, 0x6b, 0x65, 0x72, 0x4d, 0x65, - 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x0c, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x42, 0x72, - 0x6f, 0x6b, 0x65, 0x72, 0x12, 0x55, 0x0a, 0x05, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x18, 0x17, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, - 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x4d, 0x41, 0x43, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x55, 0x70, - 0x6c, 0x69, 0x6e, 0x6b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x52, 0x78, 0x4d, 0x65, - 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x4d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x52, 0x05, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x1a, 0x1c, 0x0a, 0x14, 0x50, - 0x61, 0x63, 0x6b, 0x65, 0x74, 0x42, 0x72, 0x6f, 0x6b, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x0b, 0x1a, 0x15, 0x0a, 0x0d, 0x52, 0x65, 0x6c, - 0x61, 0x79, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x04, - 0x4a, 0x04, 0x08, 0x02, 0x10, 0x09, 0x4a, 0x04, 0x08, 0x0a, 0x10, 0x0b, 0x4a, 0x04, 0x08, 0x0c, - 0x10, 0x0d, 0x4a, 0x04, 0x08, 0x0d, 0x10, 0x0e, 0x4a, 0x04, 0x08, 0x10, 0x10, 0x11, 0x4a, 0x04, - 0x08, 0x11, 0x10, 0x12, 0x4a, 0x04, 0x08, 0x13, 0x10, 0x14, 0x4a, 0x04, 0x08, 0x14, 0x10, 0x15, - 0x4a, 0x04, 0x08, 0x15, 0x10, 0x16, 0x4a, 0x04, 0x08, 0x16, 0x10, 0x17, 0x4a, 0x04, 0x08, 0x63, - 0x10, 0x64, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x4a, 0x04, - 0x08, 0x08, 0x10, 0x09, 0x4a, 0x04, 0x08, 0x0a, 0x10, 0x0b, 0x1a, 0x97, 0x04, 0x0a, 0x0f, 0x44, - 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x4a, - 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x30, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, - 0x2e, 0x4d, 0x41, 0x43, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x69, - 0x6e, 0x6b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x52, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x35, 0x0a, 0x0f, 0x63, 0x6f, - 0x72, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x06, 0x20, - 0x03, 0x28, 0x09, 0x42, 0x0c, 0xfa, 0x42, 0x09, 0x92, 0x01, 0x06, 0x22, 0x04, 0x72, 0x02, 0x18, - 0x64, 0x52, 0x0e, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, - 0x73, 0x1a, 0xee, 0x02, 0x0a, 0x07, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x54, 0x0a, - 0x05, 0x6d, 0x5f, 0x68, 0x64, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x74, + 0x4d, 0x41, 0x43, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, + 0x6b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x2e, 0x4d, 0x41, 0x43, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x0a, 0x6d, 0x61, 0x63, + 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x1a, 0x44, 0x0a, 0x04, 0x4d, 0x48, 0x44, 0x52, 0x12, + 0x36, 0x0a, 0x06, 0x6d, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x15, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, + 0x2e, 0x4d, 0x54, 0x79, 0x70, 0x65, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x82, 0x01, 0x02, 0x10, 0x01, + 0x52, 0x05, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x1a, 0x5d, 0x0a, + 0x0a, 0x4d, 0x41, 0x43, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x1f, 0x0a, 0x06, 0x66, + 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x08, 0xfa, 0x42, 0x05, + 0x2a, 0x03, 0x18, 0xff, 0x01, 0x52, 0x05, 0x66, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x1c, 0x0a, 0x0a, + 0x66, 0x75, 0x6c, 0x6c, 0x5f, 0x66, 0x5f, 0x63, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x08, 0x66, 0x75, 0x6c, 0x6c, 0x46, 0x43, 0x6e, 0x74, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, + 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05, 0x4a, 0x04, 0x08, 0x02, + 0x10, 0x03, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x08, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x4a, 0x04, + 0x08, 0x03, 0x10, 0x06, 0x4a, 0x04, 0x08, 0x07, 0x10, 0x08, 0x1a, 0xc9, 0x01, 0x0a, 0x0d, 0x44, + 0x61, 0x74, 0x61, 0x52, 0x61, 0x74, 0x65, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x56, 0x0a, 0x13, + 0x6d, 0x69, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x6e, + 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x74, 0x74, 0x6e, 0x2e, + 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x52, + 0x61, 0x74, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x82, 0x01, 0x02, + 0x10, 0x01, 0x52, 0x10, 0x6d, 0x69, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x61, 0x74, 0x65, 0x49, + 0x6e, 0x64, 0x65, 0x78, 0x12, 0x56, 0x0a, 0x13, 0x6d, 0x61, 0x78, 0x5f, 0x64, 0x61, 0x74, 0x61, + 0x5f, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x1d, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, + 0x76, 0x33, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, + 0x42, 0x08, 0xfa, 0x42, 0x05, 0x82, 0x01, 0x02, 0x10, 0x01, 0x52, 0x10, 0x6d, 0x61, 0x78, 0x44, + 0x61, 0x74, 0x61, 0x52, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x3a, 0x08, 0xf2, 0xaa, + 0x19, 0x04, 0x08, 0x01, 0x10, 0x01, 0x1a, 0x64, 0x0a, 0x0e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x61, + 0x74, 0x65, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x12, 0x48, 0x0a, 0x06, 0x72, 0x61, 0x6e, 0x67, + 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, + 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x4d, 0x41, 0x43, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x61, 0x74, 0x65, 0x52, 0x61, 0x6e, 0x67, 0x65, + 0x42, 0x08, 0xfa, 0x42, 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x06, 0x72, 0x61, 0x6e, 0x67, + 0x65, 0x73, 0x3a, 0x08, 0xf2, 0xaa, 0x19, 0x04, 0x08, 0x01, 0x10, 0x01, 0x1a, 0x72, 0x0a, 0x1b, + 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x52, 0x61, 0x74, 0x65, + 0x52, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, + 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x3d, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x4d, 0x41, - 0x43, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, - 0x48, 0x44, 0x52, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x04, 0x6d, - 0x48, 0x64, 0x72, 0x12, 0x5c, 0x0a, 0x0b, 0x6d, 0x61, 0x63, 0x5f, 0x70, 0x61, 0x79, 0x6c, 0x6f, - 0x61, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, + 0x43, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x61, 0x74, 0x65, 0x52, + 0x61, 0x6e, 0x67, 0x65, 0x73, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, + 0x3a, 0x08, 0xf2, 0xaa, 0x19, 0x04, 0x08, 0x01, 0x10, 0x01, 0x22, 0xcb, 0x01, 0x0a, 0x1b, 0x45, + 0x6e, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1a, 0xfa, 0x42, 0x17, 0x72, 0x15, + 0x32, 0x13, 0x5e, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x31, + 0x2c, 0x33, 0x32, 0x7d, 0x24, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x0a, + 0x76, 0x61, 0x6c, 0x69, 0x64, 0x5f, 0x66, 0x72, 0x6f, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x76, 0x61, + 0x6c, 0x69, 0x64, 0x46, 0x72, 0x6f, 0x6d, 0x12, 0x35, 0x0a, 0x08, 0x76, 0x61, 0x6c, 0x69, 0x64, + 0x5f, 0x74, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x07, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x54, 0x6f, 0x3a, 0x08, + 0xf2, 0xaa, 0x19, 0x04, 0x08, 0x01, 0x10, 0x01, 0x22, 0xd7, 0x21, 0x0a, 0x09, 0x45, 0x6e, 0x64, + 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x12, 0x48, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, + 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x45, 0x6e, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x42, 0x10, 0xfa, 0x42, 0x05, 0x8a, 0x01, + 0x02, 0x10, 0x01, 0xf2, 0xaa, 0x19, 0x04, 0x08, 0x00, 0x28, 0x01, 0x52, 0x03, 0x69, 0x64, 0x73, + 0x12, 0x43, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x42, 0x08, 0xf2, 0xaa, 0x19, 0x04, 0x08, 0x00, 0x10, 0x00, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x43, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, + 0x5f, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x08, 0xf2, 0xaa, 0x19, 0x04, 0x08, 0x00, 0x10, 0x00, 0x52, + 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1b, 0x0a, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x18, + 0x32, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2a, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, + 0x05, 0x72, 0x03, 0x18, 0xd0, 0x0f, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x80, 0x01, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, + 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, + 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x45, 0x6e, 0x64, 0x44, 0x65, 0x76, + 0x69, 0x63, 0x65, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x42, 0x35, 0xfa, 0x42, 0x32, 0x9a, 0x01, 0x2f, 0x10, 0x0a, 0x22, 0x24, 0x72, + 0x22, 0x18, 0x24, 0x32, 0x1e, 0x5e, 0x5b, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5d, 0x28, 0x3f, + 0x3a, 0x5b, 0x2d, 0x5d, 0x3f, 0x5b, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5d, 0x29, 0x7b, 0x32, + 0x2c, 0x7d, 0x24, 0x2a, 0x05, 0x72, 0x03, 0x18, 0xc8, 0x01, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x72, + 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x12, 0x4c, 0x0a, 0x0b, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x74, 0x74, + 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x45, 0x6e, 0x64, + 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x52, 0x0a, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x49, 0x64, 0x73, 0x12, 0x35, 0x0a, 0x12, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, + 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x18, 0x40, 0x52, 0x10, 0x73, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x49, 0x64, 0x12, 0xc5, 0x01, 0x0a, 0x16, + 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x61, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x42, 0x8e, 0x01, 0xfa, + 0x42, 0x8a, 0x01, 0x72, 0x87, 0x01, 0x32, 0x84, 0x01, 0x5e, 0x28, 0x3f, 0x3a, 0x28, 0x3f, 0x3a, + 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x7c, 0x5b, 0x61, 0x2d, 0x7a, + 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, + 0x39, 0x5c, 0x2d, 0x5d, 0x2a, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, + 0x29, 0x5c, 0x2e, 0x29, 0x2a, 0x28, 0x3f, 0x3a, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, + 0x2d, 0x39, 0x5d, 0x7c, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5d, 0x5b, + 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5c, 0x2d, 0x5d, 0x2a, 0x5b, 0x41, 0x2d, + 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5d, 0x29, 0x28, 0x3f, 0x3a, 0x3a, 0x5b, 0x30, 0x2d, + 0x39, 0x5d, 0x7b, 0x31, 0x2c, 0x35, 0x7d, 0x29, 0x3f, 0x24, 0x7c, 0x5e, 0x24, 0x52, 0x14, 0x6e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x12, 0x41, 0x0a, 0x18, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x6b, 0x65, 0x6b, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, + 0x2f, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x10, 0x52, + 0x15, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4b, 0x65, + 0x6b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0xcd, 0x01, 0x0a, 0x1a, 0x61, 0x70, 0x70, 0x6c, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x61, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x42, 0x8e, 0x01, 0xfa, 0x42, + 0x8a, 0x01, 0x72, 0x87, 0x01, 0x32, 0x84, 0x01, 0x5e, 0x28, 0x3f, 0x3a, 0x28, 0x3f, 0x3a, 0x5b, + 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x7c, 0x5b, 0x61, 0x2d, 0x7a, 0x41, + 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, + 0x5c, 0x2d, 0x5d, 0x2a, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x29, + 0x5c, 0x2e, 0x29, 0x2a, 0x28, 0x3f, 0x3a, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, + 0x39, 0x5d, 0x7c, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5d, 0x5b, 0x41, + 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5c, 0x2d, 0x5d, 0x2a, 0x5b, 0x41, 0x2d, 0x5a, + 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5d, 0x29, 0x28, 0x3f, 0x3a, 0x3a, 0x5b, 0x30, 0x2d, 0x39, + 0x5d, 0x7b, 0x31, 0x2c, 0x35, 0x7d, 0x29, 0x3f, 0x24, 0x7c, 0x5e, 0x24, 0x52, 0x18, 0x61, 0x70, + 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x41, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x49, 0x0a, 0x1c, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x6b, 0x65, 0x6b, + 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x30, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, + 0x05, 0x72, 0x03, 0x18, 0x80, 0x10, 0x52, 0x19, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4b, 0x65, 0x6b, 0x4c, 0x61, 0x62, 0x65, + 0x6c, 0x12, 0x3b, 0x0a, 0x15, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x31, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x18, 0x64, 0x52, 0x13, 0x61, 0x70, 0x70, 0x6c, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x64, 0x12, 0xbf, + 0x01, 0x0a, 0x13, 0x6a, 0x6f, 0x69, 0x6e, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x61, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x42, 0x8e, 0x01, 0xfa, + 0x42, 0x8a, 0x01, 0x72, 0x87, 0x01, 0x32, 0x84, 0x01, 0x5e, 0x28, 0x3f, 0x3a, 0x28, 0x3f, 0x3a, + 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x7c, 0x5b, 0x61, 0x2d, 0x7a, + 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, + 0x39, 0x5c, 0x2d, 0x5d, 0x2a, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, + 0x29, 0x5c, 0x2e, 0x29, 0x2a, 0x28, 0x3f, 0x3a, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, + 0x2d, 0x39, 0x5d, 0x7c, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5d, 0x5b, + 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5c, 0x2d, 0x5d, 0x2a, 0x5b, 0x41, 0x2d, + 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5d, 0x29, 0x28, 0x3f, 0x3a, 0x3a, 0x5b, 0x30, 0x2d, + 0x39, 0x5d, 0x7b, 0x31, 0x2c, 0x35, 0x7d, 0x29, 0x3f, 0x24, 0x7c, 0x5e, 0x24, 0x52, 0x11, 0x6a, + 0x6f, 0x69, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x12, 0x74, 0x0a, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0c, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, + 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x45, 0x6e, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x4c, + 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x2c, 0xfa, + 0x42, 0x29, 0x9a, 0x01, 0x26, 0x22, 0x24, 0x72, 0x22, 0x18, 0x24, 0x32, 0x1e, 0x5e, 0x5b, 0x61, + 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5d, 0x28, 0x3f, 0x3a, 0x5b, 0x2d, 0x5d, 0x3f, 0x5b, 0x61, 0x2d, + 0x7a, 0x30, 0x2d, 0x39, 0x5d, 0x29, 0x7b, 0x32, 0x2c, 0x7d, 0x24, 0x52, 0x09, 0x6c, 0x6f, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x31, 0x0a, 0x07, 0x70, 0x69, 0x63, 0x74, 0x75, 0x72, + 0x65, 0x18, 0x32, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, + 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x50, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, + 0x52, 0x07, 0x70, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x73, 0x75, 0x70, + 0x70, 0x6f, 0x72, 0x74, 0x73, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x5f, 0x62, 0x18, 0x0d, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x0e, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x43, 0x6c, 0x61, + 0x73, 0x73, 0x42, 0x12, 0x28, 0x0a, 0x10, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x5f, + 0x63, 0x6c, 0x61, 0x73, 0x73, 0x5f, 0x63, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x73, + 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x43, 0x12, 0x4d, 0x0a, + 0x0f, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, + 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x4d, 0x41, 0x43, 0x56, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x82, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0e, 0x6c, 0x6f, + 0x72, 0x61, 0x77, 0x61, 0x6e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x54, 0x0a, 0x13, + 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x5f, 0x70, 0x68, 0x79, 0x5f, 0x76, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x74, 0x74, 0x6e, 0x2e, + 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x50, 0x48, 0x59, 0x56, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x82, 0x01, 0x02, 0x10, 0x01, 0x52, + 0x11, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x50, 0x68, 0x79, 0x56, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x12, 0x33, 0x0a, 0x11, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x5f, + 0x70, 0x6c, 0x61, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, + 0x42, 0x04, 0x72, 0x02, 0x18, 0x40, 0x52, 0x0f, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, + 0x79, 0x50, 0x6c, 0x61, 0x6e, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x6d, 0x69, 0x6e, 0x5f, 0x66, + 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x12, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, + 0x6d, 0x69, 0x6e, 0x46, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x23, 0x0a, 0x0d, + 0x6d, 0x61, 0x78, 0x5f, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x13, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x0c, 0x6d, 0x61, 0x78, 0x46, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, + 0x79, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x5f, 0x6a, 0x6f, + 0x69, 0x6e, 0x18, 0x14, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, + 0x74, 0x73, 0x4a, 0x6f, 0x69, 0x6e, 0x12, 0x2c, 0x0a, 0x12, 0x72, 0x65, 0x73, 0x65, 0x74, 0x73, + 0x5f, 0x6a, 0x6f, 0x69, 0x6e, 0x5f, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x15, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x10, 0x72, 0x65, 0x73, 0x65, 0x74, 0x73, 0x4a, 0x6f, 0x69, 0x6e, 0x4e, 0x6f, + 0x6e, 0x63, 0x65, 0x73, 0x12, 0x35, 0x0a, 0x09, 0x72, 0x6f, 0x6f, 0x74, 0x5f, 0x6b, 0x65, 0x79, + 0x73, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, + 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x52, 0x6f, 0x6f, 0x74, 0x4b, 0x65, 0x79, + 0x73, 0x52, 0x08, 0x72, 0x6f, 0x6f, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x12, 0xe7, 0x02, 0x0a, 0x06, + 0x6e, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0c, 0x42, 0xcf, 0x02, 0x92, + 0x41, 0x17, 0x4a, 0x08, 0x22, 0x30, 0x30, 0x30, 0x30, 0x31, 0x33, 0x22, 0x9a, 0x02, 0x01, 0x07, + 0xa2, 0x02, 0x06, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0xfa, 0x42, 0x06, 0x7a, 0x04, 0x68, 0x03, + 0x70, 0x01, 0xea, 0xaa, 0x19, 0x82, 0x01, 0x0a, 0x3f, 0x67, 0x6f, 0x2e, 0x74, 0x68, 0x65, 0x74, + 0x68, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6c, 0x6f, + 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2d, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x76, 0x33, 0x2f, 0x70, + 0x6b, 0x67, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x72, 0x73, 0x68, 0x61, 0x6c, + 0x48, 0x45, 0x58, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x3f, 0x67, 0x6f, 0x2e, 0x74, 0x68, 0x65, + 0x74, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6c, + 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2d, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x76, 0x33, 0x2f, + 0x70, 0x6b, 0x67, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x55, 0x6e, 0x6d, 0x61, 0x72, 0x73, + 0x68, 0x61, 0x6c, 0x33, 0x42, 0x79, 0x74, 0x65, 0x73, 0xf2, 0xaa, 0x19, 0xa0, 0x01, 0x1a, 0x4e, + 0x67, 0x6f, 0x2e, 0x74, 0x68, 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x6e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2d, 0x73, 0x74, 0x61, + 0x63, 0x6b, 0x2f, 0x76, 0x33, 0x2f, 0x63, 0x6d, 0x64, 0x2f, 0x74, 0x74, 0x6e, 0x2d, 0x6c, 0x77, + 0x2d, 0x63, 0x6c, 0x69, 0x2f, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x66, 0x6c, 0x61, 0x67, 0x73, + 0x2e, 0x4e, 0x65, 0x77, 0x33, 0x42, 0x79, 0x74, 0x65, 0x73, 0x46, 0x6c, 0x61, 0x67, 0x22, 0x4e, + 0x67, 0x6f, 0x2e, 0x74, 0x68, 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x6e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2d, 0x73, 0x74, 0x61, + 0x63, 0x6b, 0x2f, 0x76, 0x33, 0x2f, 0x63, 0x6d, 0x64, 0x2f, 0x74, 0x74, 0x6e, 0x2d, 0x6c, 0x77, + 0x2d, 0x63, 0x6c, 0x69, 0x2f, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x66, 0x6c, 0x61, 0x67, 0x73, + 0x2e, 0x47, 0x65, 0x74, 0x45, 0x78, 0x61, 0x63, 0x74, 0x42, 0x79, 0x74, 0x65, 0x73, 0x52, 0x05, + 0x6e, 0x65, 0x74, 0x49, 0x64, 0x12, 0x3e, 0x0a, 0x0c, 0x6d, 0x61, 0x63, 0x5f, 0x73, 0x65, 0x74, + 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x18, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x74, 0x74, + 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x4d, 0x41, 0x43, + 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x0b, 0x6d, 0x61, 0x63, 0x53, 0x65, 0x74, + 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x35, 0x0a, 0x09, 0x6d, 0x61, 0x63, 0x5f, 0x73, 0x74, 0x61, + 0x74, 0x65, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x4d, 0x41, 0x43, 0x53, 0x74, 0x61, - 0x74, 0x65, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x41, 0x43, 0x50, 0x61, - 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x0a, 0x6d, 0x61, 0x63, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, - 0x64, 0x1a, 0x44, 0x0a, 0x04, 0x4d, 0x48, 0x44, 0x52, 0x12, 0x36, 0x0a, 0x06, 0x6d, 0x5f, 0x74, - 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x74, 0x74, 0x6e, 0x2e, - 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x4d, 0x54, 0x79, 0x70, 0x65, - 0x42, 0x08, 0xfa, 0x42, 0x05, 0x82, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6d, 0x54, 0x79, 0x70, - 0x65, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x1a, 0x5d, 0x0a, 0x0a, 0x4d, 0x41, 0x43, 0x50, 0x61, - 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x1f, 0x0a, 0x06, 0x66, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x2a, 0x03, 0x18, 0xff, 0x01, 0x52, - 0x05, 0x66, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x1c, 0x0a, 0x0a, 0x66, 0x75, 0x6c, 0x6c, 0x5f, 0x66, - 0x5f, 0x63, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x66, 0x75, 0x6c, 0x6c, - 0x46, 0x43, 0x6e, 0x74, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, - 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x4a, 0x04, 0x08, 0x04, - 0x10, 0x08, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x06, 0x4a, 0x04, - 0x08, 0x07, 0x10, 0x08, 0x1a, 0xc9, 0x01, 0x0a, 0x0d, 0x44, 0x61, 0x74, 0x61, 0x52, 0x61, 0x74, - 0x65, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x56, 0x0a, 0x13, 0x6d, 0x69, 0x6e, 0x5f, 0x64, 0x61, - 0x74, 0x61, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, - 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x64, - 0x65, 0x78, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x82, 0x01, 0x02, 0x10, 0x01, 0x52, 0x10, 0x6d, 0x69, - 0x6e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x56, - 0x0a, 0x13, 0x6d, 0x61, 0x78, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x5f, - 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x74, 0x74, - 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x44, 0x61, 0x74, - 0x61, 0x52, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x82, - 0x01, 0x02, 0x10, 0x01, 0x52, 0x10, 0x6d, 0x61, 0x78, 0x44, 0x61, 0x74, 0x61, 0x52, 0x61, 0x74, - 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x3a, 0x08, 0xf2, 0xaa, 0x19, 0x04, 0x08, 0x01, 0x10, 0x01, - 0x1a, 0x64, 0x0a, 0x0e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x61, 0x74, 0x65, 0x52, 0x61, 0x6e, 0x67, - 0x65, 0x73, 0x12, 0x48, 0x0a, 0x06, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, - 0x2e, 0x76, 0x33, 0x2e, 0x4d, 0x41, 0x43, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x44, 0x61, 0x74, - 0x61, 0x52, 0x61, 0x74, 0x65, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x92, - 0x01, 0x02, 0x08, 0x01, 0x52, 0x06, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x3a, 0x08, 0xf2, 0xaa, - 0x19, 0x04, 0x08, 0x01, 0x10, 0x01, 0x1a, 0x72, 0x0a, 0x1b, 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, - 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x52, 0x61, 0x74, 0x65, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x73, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x3d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, - 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x4d, 0x41, 0x43, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x2e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x61, 0x74, 0x65, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x3a, 0x08, 0xf2, 0xaa, 0x19, 0x04, - 0x08, 0x01, 0x10, 0x01, 0x22, 0xcb, 0x01, 0x0a, 0x1b, 0x45, 0x6e, 0x64, 0x44, 0x65, 0x76, 0x69, - 0x63, 0x65, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x43, 0x6f, 0x64, 0x65, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x1a, 0xfa, 0x42, 0x17, 0x72, 0x15, 0x32, 0x13, 0x5e, 0x5b, 0x61, 0x2d, - 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x31, 0x2c, 0x33, 0x32, 0x7d, 0x24, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x0a, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x5f, - 0x66, 0x72, 0x6f, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x46, 0x72, 0x6f, - 0x6d, 0x12, 0x35, 0x0a, 0x08, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x5f, 0x74, 0x6f, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, - 0x07, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x54, 0x6f, 0x3a, 0x08, 0xf2, 0xaa, 0x19, 0x04, 0x08, 0x01, - 0x10, 0x01, 0x22, 0xd7, 0x21, 0x0a, 0x09, 0x45, 0x6e, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, - 0x12, 0x48, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, - 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x45, - 0x6e, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, - 0x65, 0x72, 0x73, 0x42, 0x10, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0xf2, 0xaa, 0x19, - 0x04, 0x08, 0x00, 0x28, 0x01, 0x52, 0x03, 0x69, 0x64, 0x73, 0x12, 0x43, 0x0a, 0x0a, 0x63, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, + 0x74, 0x65, 0x52, 0x08, 0x6d, 0x61, 0x63, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x44, 0x0a, 0x11, + 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x6d, 0x61, 0x63, 0x5f, 0x73, 0x74, 0x61, 0x74, + 0x65, 0x18, 0x2c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, + 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x4d, 0x41, 0x43, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x52, 0x0f, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x4d, 0x61, 0x63, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x12, 0x31, 0x0a, 0x07, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x1a, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, + 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x73, 0x65, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x40, 0x0a, 0x0f, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, + 0x5f, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, + 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, + 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, + 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x24, 0x0a, 0x0e, 0x6c, 0x61, 0x73, 0x74, 0x5f, + 0x64, 0x65, 0x76, 0x5f, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x0c, 0x6c, 0x61, 0x73, 0x74, 0x44, 0x65, 0x76, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x12, 0x26, 0x0a, + 0x0f, 0x75, 0x73, 0x65, 0x64, 0x5f, 0x64, 0x65, 0x76, 0x5f, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x73, + 0x18, 0x1d, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x0d, 0x75, 0x73, 0x65, 0x64, 0x44, 0x65, 0x76, 0x4e, + 0x6f, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x6a, 0x6f, + 0x69, 0x6e, 0x5f, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, + 0x6c, 0x61, 0x73, 0x74, 0x4a, 0x6f, 0x69, 0x6e, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x12, 0x25, 0x0a, + 0x0f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x72, 0x6a, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x30, + 0x18, 0x1f, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x6c, 0x61, 0x73, 0x74, 0x52, 0x6a, 0x43, 0x6f, + 0x75, 0x6e, 0x74, 0x30, 0x12, 0x25, 0x0a, 0x0f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x72, 0x6a, 0x5f, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x31, 0x18, 0x20, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x6c, + 0x61, 0x73, 0x74, 0x52, 0x6a, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x31, 0x12, 0x58, 0x0a, 0x1b, 0x6c, + 0x61, 0x73, 0x74, 0x5f, 0x64, 0x65, 0x76, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, 0x72, + 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x21, 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, 0x17, 0x6c, 0x61, + 0x73, 0x74, 0x44, 0x65, 0x76, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x63, 0x65, 0x69, + 0x76, 0x65, 0x64, 0x41, 0x74, 0x12, 0x4b, 0x0a, 0x0b, 0x70, 0x6f, 0x77, 0x65, 0x72, 0x5f, 0x73, + 0x74, 0x61, 0x74, 0x65, 0x18, 0x22, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x74, 0x74, 0x6e, + 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x50, 0x6f, 0x77, 0x65, + 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x42, 0x0e, 0xfa, 0x42, 0x05, 0x82, 0x01, 0x02, 0x10, 0x01, + 0xf2, 0xaa, 0x19, 0x02, 0x10, 0x00, 0x52, 0x0a, 0x70, 0x6f, 0x77, 0x65, 0x72, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x12, 0x5b, 0x0a, 0x12, 0x62, 0x61, 0x74, 0x74, 0x65, 0x72, 0x79, 0x5f, 0x70, 0x65, + 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x18, 0x23, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 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, 0x42, 0x08, 0xf2, 0xaa, 0x19, 0x04, - 0x08, 0x00, 0x10, 0x00, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, - 0x43, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, - 0x08, 0xf2, 0xaa, 0x19, 0x04, 0x08, 0x00, 0x10, 0x00, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x64, 0x41, 0x74, 0x12, 0x1b, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x18, 0x32, 0x52, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x12, 0x2a, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0xd0, 0x0f, - 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x80, 0x01, - 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, - 0x2e, 0x76, 0x33, 0x2e, 0x45, 0x6e, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x41, 0x74, - 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x35, 0xfa, - 0x42, 0x32, 0x9a, 0x01, 0x2f, 0x10, 0x0a, 0x22, 0x24, 0x72, 0x22, 0x18, 0x24, 0x32, 0x1e, 0x5e, - 0x5b, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5d, 0x28, 0x3f, 0x3a, 0x5b, 0x2d, 0x5d, 0x3f, 0x5b, - 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5d, 0x29, 0x7b, 0x32, 0x2c, 0x7d, 0x24, 0x2a, 0x05, 0x72, - 0x03, 0x18, 0xc8, 0x01, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, - 0x12, 0x4c, 0x0a, 0x0b, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x73, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, - 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x45, 0x6e, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, - 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, - 0x72, 0x73, 0x52, 0x0a, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x12, 0x35, - 0x0a, 0x12, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, - 0x65, 0x5f, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, - 0x02, 0x18, 0x40, 0x52, 0x10, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, - 0x69, 0x6c, 0x65, 0x49, 0x64, 0x12, 0xc5, 0x01, 0x0a, 0x16, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, - 0x6b, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, - 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x42, 0x8e, 0x01, 0xfa, 0x42, 0x8a, 0x01, 0x72, 0x87, 0x01, - 0x32, 0x84, 0x01, 0x5e, 0x28, 0x3f, 0x3a, 0x28, 0x3f, 0x3a, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, - 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x7c, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, - 0x5d, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5c, 0x2d, 0x5d, 0x2a, 0x5b, - 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x29, 0x5c, 0x2e, 0x29, 0x2a, 0x28, - 0x3f, 0x3a, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5d, 0x7c, 0x5b, 0x41, - 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5d, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, - 0x30, 0x2d, 0x39, 0x5c, 0x2d, 0x5d, 0x2a, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, - 0x39, 0x5d, 0x29, 0x28, 0x3f, 0x3a, 0x3a, 0x5b, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x31, 0x2c, 0x35, - 0x7d, 0x29, 0x3f, 0x24, 0x7c, 0x5e, 0x24, 0x52, 0x14, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, - 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x41, 0x0a, - 0x18, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, - 0x6b, 0x65, 0x6b, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x2f, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x10, 0x52, 0x15, 0x6e, 0x65, 0x74, 0x77, 0x6f, - 0x72, 0x6b, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4b, 0x65, 0x6b, 0x4c, 0x61, 0x62, 0x65, 0x6c, - 0x12, 0xcd, 0x01, 0x0a, 0x1a, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, - 0x0a, 0x20, 0x01, 0x28, 0x09, 0x42, 0x8e, 0x01, 0xfa, 0x42, 0x8a, 0x01, 0x72, 0x87, 0x01, 0x32, - 0x84, 0x01, 0x5e, 0x28, 0x3f, 0x3a, 0x28, 0x3f, 0x3a, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, - 0x30, 0x2d, 0x39, 0x5d, 0x7c, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, - 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5c, 0x2d, 0x5d, 0x2a, 0x5b, 0x61, - 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x29, 0x5c, 0x2e, 0x29, 0x2a, 0x28, 0x3f, - 0x3a, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5d, 0x7c, 0x5b, 0x41, 0x2d, - 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5d, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, - 0x2d, 0x39, 0x5c, 0x2d, 0x5d, 0x2a, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, - 0x5d, 0x29, 0x28, 0x3f, 0x3a, 0x3a, 0x5b, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x31, 0x2c, 0x35, 0x7d, - 0x29, 0x3f, 0x24, 0x7c, 0x5e, 0x24, 0x52, 0x18, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, - 0x12, 0x49, 0x0a, 0x1c, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x6b, 0x65, 0x6b, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, - 0x18, 0x30, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0x80, 0x10, - 0x52, 0x19, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x4b, 0x65, 0x6b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x3b, 0x0a, 0x15, 0x61, - 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x5f, 0x69, 0x64, 0x18, 0x31, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, - 0x02, 0x18, 0x64, 0x52, 0x13, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x64, 0x12, 0xbf, 0x01, 0x0a, 0x13, 0x6a, 0x6f, 0x69, - 0x6e, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, - 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x42, 0x8e, 0x01, 0xfa, 0x42, 0x8a, 0x01, 0x72, 0x87, 0x01, - 0x32, 0x84, 0x01, 0x5e, 0x28, 0x3f, 0x3a, 0x28, 0x3f, 0x3a, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, - 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x7c, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, - 0x5d, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5c, 0x2d, 0x5d, 0x2a, 0x5b, - 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x29, 0x5c, 0x2e, 0x29, 0x2a, 0x28, - 0x3f, 0x3a, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5d, 0x7c, 0x5b, 0x41, - 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5d, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, - 0x30, 0x2d, 0x39, 0x5c, 0x2d, 0x5d, 0x2a, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, - 0x39, 0x5d, 0x29, 0x28, 0x3f, 0x3a, 0x3a, 0x5b, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x31, 0x2c, 0x35, - 0x7d, 0x29, 0x3f, 0x24, 0x7c, 0x5e, 0x24, 0x52, 0x11, 0x6a, 0x6f, 0x69, 0x6e, 0x53, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x74, 0x0a, 0x09, 0x6c, 0x6f, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, - 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x45, - 0x6e, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x2c, 0xfa, 0x42, 0x29, 0x9a, 0x01, 0x26, 0x22, - 0x24, 0x72, 0x22, 0x18, 0x24, 0x32, 0x1e, 0x5e, 0x5b, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5d, - 0x28, 0x3f, 0x3a, 0x5b, 0x2d, 0x5d, 0x3f, 0x5b, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5d, 0x29, - 0x7b, 0x32, 0x2c, 0x7d, 0x24, 0x52, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x12, 0x31, 0x0a, 0x07, 0x70, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x18, 0x32, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, - 0x76, 0x33, 0x2e, 0x50, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x52, 0x07, 0x70, 0x69, 0x63, 0x74, - 0x75, 0x72, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x5f, - 0x63, 0x6c, 0x61, 0x73, 0x73, 0x5f, 0x62, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x73, - 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x42, 0x12, 0x28, 0x0a, - 0x10, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x5f, - 0x63, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, - 0x73, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x43, 0x12, 0x4d, 0x0a, 0x0f, 0x6c, 0x6f, 0x72, 0x61, 0x77, - 0x61, 0x6e, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x1a, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, - 0x33, 0x2e, 0x4d, 0x41, 0x43, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x08, 0xfa, 0x42, - 0x05, 0x82, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x56, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x54, 0x0a, 0x13, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, - 0x6e, 0x5f, 0x70, 0x68, 0x79, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x10, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, - 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x50, 0x48, 0x59, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x42, - 0x08, 0xfa, 0x42, 0x05, 0x82, 0x01, 0x02, 0x10, 0x01, 0x52, 0x11, 0x6c, 0x6f, 0x72, 0x61, 0x77, - 0x61, 0x6e, 0x50, 0x68, 0x79, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x33, 0x0a, 0x11, - 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x70, 0x6c, 0x61, 0x6e, 0x5f, 0x69, - 0x64, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x18, 0x40, - 0x52, 0x0f, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x50, 0x6c, 0x61, 0x6e, 0x49, - 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x6d, 0x69, 0x6e, 0x5f, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, - 0x63, 0x79, 0x18, 0x12, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x6d, 0x69, 0x6e, 0x46, 0x72, 0x65, - 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x23, 0x0a, 0x0d, 0x6d, 0x61, 0x78, 0x5f, 0x66, 0x72, - 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x13, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x6d, - 0x61, 0x78, 0x46, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x23, 0x0a, 0x0d, 0x73, - 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x5f, 0x6a, 0x6f, 0x69, 0x6e, 0x18, 0x14, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x0c, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x4a, 0x6f, 0x69, 0x6e, - 0x12, 0x2c, 0x0a, 0x12, 0x72, 0x65, 0x73, 0x65, 0x74, 0x73, 0x5f, 0x6a, 0x6f, 0x69, 0x6e, 0x5f, - 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x15, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x72, 0x65, - 0x73, 0x65, 0x74, 0x73, 0x4a, 0x6f, 0x69, 0x6e, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x35, - 0x0a, 0x09, 0x72, 0x6f, 0x6f, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x16, 0x20, 0x01, 0x28, + 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x0f, 0xfa, 0x42, 0x0c, + 0x0a, 0x0a, 0x1d, 0x00, 0x00, 0x80, 0x3f, 0x2d, 0x00, 0x00, 0x00, 0x00, 0x52, 0x11, 0x62, 0x61, + 0x74, 0x74, 0x65, 0x72, 0x79, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x12, + 0x27, 0x0a, 0x0f, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x6d, 0x61, 0x72, 0x67, + 0x69, 0x6e, 0x18, 0x24, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x69, + 0x6e, 0x6b, 0x4d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x12, 0x65, 0x0a, 0x1c, 0x71, 0x75, 0x65, 0x75, + 0x65, 0x64, 0x5f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, + 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x73, 0x18, 0x28, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, + 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, + 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, + 0x69, 0x6e, 0x6b, 0x52, 0x1a, 0x71, 0x75, 0x65, 0x75, 0x65, 0x64, 0x41, 0x70, 0x70, 0x6c, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x73, 0x12, + 0x48, 0x0a, 0x0a, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x74, 0x65, 0x72, 0x73, 0x18, 0x29, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, + 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x50, 0x61, 0x79, 0x6c, + 0x6f, 0x61, 0x64, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x74, 0x65, 0x72, 0x73, 0x52, 0x0a, 0x66, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x74, 0x65, 0x72, 0x73, 0x12, 0x51, 0x0a, 0x0e, 0x70, 0x72, 0x6f, + 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x2a, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x2a, 0xfa, 0x42, 0x27, 0x72, 0x25, 0x18, 0x24, 0x32, 0x21, 0x5e, 0x5b, 0x61, 0x2d, + 0x7a, 0x30, 0x2d, 0x39, 0x5d, 0x28, 0x3f, 0x3a, 0x5b, 0x2d, 0x5d, 0x3f, 0x5b, 0x61, 0x2d, 0x7a, + 0x30, 0x2d, 0x39, 0x5d, 0x29, 0x7b, 0x32, 0x2c, 0x7d, 0x24, 0x7c, 0x5e, 0x24, 0x52, 0x0d, 0x70, + 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x49, 0x64, 0x12, 0x44, 0x0a, 0x11, + 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x61, 0x74, + 0x61, 0x18, 0x2b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, + 0x52, 0x10, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x44, 0x61, + 0x74, 0x61, 0x12, 0x1c, 0x0a, 0x09, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x18, + 0x2d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, + 0x12, 0x67, 0x0a, 0x19, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, + 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x2e, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, + 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x45, 0x6e, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x41, 0x75, + 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x64, 0x65, + 0x52, 0x17, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x2e, 0x0a, 0x13, 0x73, 0x6b, 0x69, + 0x70, 0x5f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, + 0x18, 0x33, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x73, 0x6b, 0x69, 0x70, 0x50, 0x61, 0x79, 0x6c, + 0x6f, 0x61, 0x64, 0x43, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x12, 0x5b, 0x0a, 0x1c, 0x73, 0x6b, 0x69, + 0x70, 0x5f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, + 0x5f, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x18, 0x34, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x19, 0x73, 0x6b, 0x69, + 0x70, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x43, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x4f, 0x76, + 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x12, 0x3d, 0x0a, 0x0c, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, + 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x35, 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, 0x0b, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, + 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x3c, 0x0a, 0x0c, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x65, + 0x65, 0x6e, 0x5f, 0x61, 0x74, 0x18, 0x36, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x65, 0x65, + 0x6e, 0x41, 0x74, 0x12, 0x4f, 0x0a, 0x0d, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x5f, 0x6e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x18, 0x37, 0x20, 0x01, 0x28, 0x09, 0x42, 0x2a, 0xfa, 0x42, 0x27, 0x72, + 0x25, 0x18, 0x24, 0x32, 0x1e, 0x5e, 0x5b, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5d, 0x28, 0x3f, + 0x3a, 0x5b, 0x2d, 0x5d, 0x3f, 0x5b, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5d, 0x29, 0x7b, 0x32, + 0x2c, 0x7d, 0x24, 0xd0, 0x01, 0x01, 0x52, 0x0c, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x4e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x12, 0x69, 0x0a, 0x19, 0x6c, 0x6f, 0x72, 0x61, 0x5f, 0x61, 0x6c, 0x6c, + 0x69, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x69, 0x64, + 0x73, 0x18, 0x38, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, + 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x4c, 0x6f, 0x52, 0x61, 0x41, 0x6c, 0x6c, + 0x69, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x49, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x52, 0x16, 0x6c, 0x6f, 0x72, 0x61, 0x41, 0x6c, 0x6c, + 0x69, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x49, 0x64, 0x73, 0x1a, + 0x3d, 0x0a, 0x0f, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x56, + 0x0a, 0x0e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 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, 0x2e, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, - 0x76, 0x33, 0x2e, 0x52, 0x6f, 0x6f, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x08, 0x72, 0x6f, 0x6f, - 0x74, 0x4b, 0x65, 0x79, 0x73, 0x12, 0xe7, 0x02, 0x0a, 0x06, 0x6e, 0x65, 0x74, 0x5f, 0x69, 0x64, - 0x18, 0x17, 0x20, 0x01, 0x28, 0x0c, 0x42, 0xcf, 0x02, 0x92, 0x41, 0x17, 0x4a, 0x08, 0x22, 0x30, - 0x30, 0x30, 0x30, 0x31, 0x33, 0x22, 0x9a, 0x02, 0x01, 0x07, 0xa2, 0x02, 0x06, 0x73, 0x74, 0x72, - 0x69, 0x6e, 0x67, 0xfa, 0x42, 0x06, 0x7a, 0x04, 0x68, 0x03, 0x70, 0x01, 0xea, 0xaa, 0x19, 0x82, + 0x76, 0x33, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x3a, 0x08, 0xf2, 0xaa, 0x19, 0x04, 0x08, 0x01, 0x10, 0x01, + 0x4a, 0x04, 0x08, 0x25, 0x10, 0x26, 0x4a, 0x04, 0x08, 0x26, 0x10, 0x27, 0x4a, 0x04, 0x08, 0x27, + 0x10, 0x28, 0x22, 0x48, 0x0a, 0x0a, 0x45, 0x6e, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, + 0x12, 0x3a, 0x0a, 0x0b, 0x65, 0x6e, 0x64, 0x5f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, + 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x45, 0x6e, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, + 0x52, 0x0a, 0x65, 0x6e, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x22, 0xf2, 0x01, 0x0a, + 0x0d, 0x44, 0x65, 0x76, 0x41, 0x64, 0x64, 0x72, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0xc8, + 0x01, 0x0a, 0x08, 0x64, 0x65, 0x76, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0c, 0x42, 0xac, 0x01, 0x92, 0x41, 0x19, 0x4a, 0x0a, 0x22, 0x32, 0x36, 0x30, 0x30, 0x41, 0x42, + 0x43, 0x44, 0x22, 0x9a, 0x02, 0x01, 0x07, 0xa2, 0x02, 0x06, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, + 0xfa, 0x42, 0x06, 0x7a, 0x04, 0x68, 0x04, 0x70, 0x01, 0xea, 0xaa, 0x19, 0x82, 0x01, 0x0a, 0x3f, + 0x67, 0x6f, 0x2e, 0x74, 0x68, 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x6e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2d, 0x73, 0x74, 0x61, + 0x63, 0x6b, 0x2f, 0x76, 0x33, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, + 0x4d, 0x61, 0x72, 0x73, 0x68, 0x61, 0x6c, 0x48, 0x45, 0x58, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, + 0x3f, 0x67, 0x6f, 0x2e, 0x74, 0x68, 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x6e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2d, 0x73, 0x74, + 0x61, 0x63, 0x6b, 0x2f, 0x76, 0x33, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, + 0x2e, 0x55, 0x6e, 0x6d, 0x61, 0x72, 0x73, 0x68, 0x61, 0x6c, 0x34, 0x42, 0x79, 0x74, 0x65, 0x73, + 0x52, 0x07, 0x64, 0x65, 0x76, 0x41, 0x64, 0x64, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x65, 0x6e, + 0x67, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, + 0x68, 0x22, 0x5c, 0x0a, 0x16, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x64, 0x44, 0x65, + 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x42, 0x0a, 0x0a, 0x65, + 0x6e, 0x64, 0x5f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x19, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, + 0x2e, 0x45, 0x6e, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x8a, + 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x65, 0x6e, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x22, + 0x97, 0x01, 0x0a, 0x16, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x64, 0x44, 0x65, 0x76, + 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x42, 0x0a, 0x0a, 0x65, 0x6e, + 0x64, 0x5f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, + 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, + 0x45, 0x6e, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x8a, 0x01, + 0x02, 0x10, 0x01, 0x52, 0x09, 0x65, 0x6e, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x12, 0x39, + 0x0a, 0x0a, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 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, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x09, + 0x66, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x22, 0xa8, 0x02, 0x0a, 0x23, 0x42, 0x61, + 0x74, 0x63, 0x68, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x64, 0x44, 0x65, 0x76, 0x69, + 0x63, 0x65, 0x4c, 0x61, 0x73, 0x74, 0x53, 0x65, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x65, 0x0a, 0x07, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x4b, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, + 0x2e, 0x76, 0x33, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, + 0x6e, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x61, 0x73, 0x74, 0x53, 0x65, 0x65, 0x6e, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x45, 0x6e, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, + 0x65, 0x4c, 0x61, 0x73, 0x74, 0x53, 0x65, 0x65, 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, + 0x07, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x1a, 0x99, 0x01, 0x0a, 0x17, 0x45, 0x6e, 0x64, + 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x61, 0x73, 0x74, 0x53, 0x65, 0x65, 0x6e, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x12, 0x40, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x24, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, + 0x76, 0x33, 0x2e, 0x45, 0x6e, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, + 0x01, 0x52, 0x03, 0x69, 0x64, 0x73, 0x12, 0x3c, 0x0a, 0x0c, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x73, + 0x65, 0x65, 0x6e, 0x5f, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x65, + 0x65, 0x6e, 0x41, 0x74, 0x22, 0xa6, 0x01, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x64, 0x44, + 0x65, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x54, 0x0a, 0x0e, + 0x65, 0x6e, 0x64, 0x5f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, + 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x45, 0x6e, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x8a, + 0x01, 0x02, 0x10, 0x01, 0x52, 0x0c, 0x65, 0x6e, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, + 0x64, 0x73, 0x12, 0x39, 0x0a, 0x0a, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, + 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, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, + 0x73, 0x6b, 0x52, 0x09, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x22, 0xcb, 0x03, + 0x0a, 0x25, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x46, 0x6f, 0x72, 0x45, 0x55, 0x49, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0xd0, 0x01, 0x0a, 0x08, 0x6a, 0x6f, 0x69, 0x6e, + 0x5f, 0x65, 0x75, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0xb4, 0x01, 0x92, 0x41, 0x21, + 0x4a, 0x12, 0x22, 0x37, 0x30, 0x42, 0x33, 0x44, 0x35, 0x37, 0x45, 0x44, 0x30, 0x30, 0x30, 0x41, + 0x42, 0x43, 0x44, 0x22, 0x9a, 0x02, 0x01, 0x07, 0xa2, 0x02, 0x06, 0x73, 0x74, 0x72, 0x69, 0x6e, + 0x67, 0xfa, 0x42, 0x06, 0x7a, 0x04, 0x68, 0x08, 0x70, 0x01, 0xea, 0xaa, 0x19, 0x82, 0x01, 0x0a, + 0x3f, 0x67, 0x6f, 0x2e, 0x74, 0x68, 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x6e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2d, 0x73, 0x74, + 0x61, 0x63, 0x6b, 0x2f, 0x76, 0x33, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, + 0x2e, 0x4d, 0x61, 0x72, 0x73, 0x68, 0x61, 0x6c, 0x48, 0x45, 0x58, 0x42, 0x79, 0x74, 0x65, 0x73, + 0x12, 0x3f, 0x67, 0x6f, 0x2e, 0x74, 0x68, 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x6e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2d, 0x73, + 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x76, 0x33, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x74, 0x79, 0x70, 0x65, + 0x73, 0x2e, 0x55, 0x6e, 0x6d, 0x61, 0x72, 0x73, 0x68, 0x61, 0x6c, 0x38, 0x42, 0x79, 0x74, 0x65, + 0x73, 0x52, 0x07, 0x6a, 0x6f, 0x69, 0x6e, 0x45, 0x75, 0x69, 0x12, 0xce, 0x01, 0x0a, 0x07, 0x64, + 0x65, 0x76, 0x5f, 0x65, 0x75, 0x69, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x42, 0xb4, 0x01, 0x92, + 0x41, 0x21, 0x4a, 0x12, 0x22, 0x37, 0x30, 0x42, 0x33, 0x44, 0x35, 0x37, 0x45, 0x44, 0x30, 0x30, + 0x30, 0x41, 0x42, 0x43, 0x44, 0x22, 0x9a, 0x02, 0x01, 0x07, 0xa2, 0x02, 0x06, 0x73, 0x74, 0x72, + 0x69, 0x6e, 0x67, 0xfa, 0x42, 0x06, 0x7a, 0x04, 0x68, 0x08, 0x70, 0x01, 0xea, 0xaa, 0x19, 0x82, 0x01, 0x0a, 0x3f, 0x67, 0x6f, 0x2e, 0x74, 0x68, 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2d, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x76, 0x33, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x74, 0x79, 0x70, @@ -6274,278 +6853,35 @@ var file_ttn_lorawan_v3_end_device_proto_rawDesc = []byte{ 0x65, 0x73, 0x12, 0x3f, 0x67, 0x6f, 0x2e, 0x74, 0x68, 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2d, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x76, 0x33, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x74, 0x79, - 0x70, 0x65, 0x73, 0x2e, 0x55, 0x6e, 0x6d, 0x61, 0x72, 0x73, 0x68, 0x61, 0x6c, 0x33, 0x42, 0x79, - 0x74, 0x65, 0x73, 0xf2, 0xaa, 0x19, 0xa0, 0x01, 0x1a, 0x4e, 0x67, 0x6f, 0x2e, 0x74, 0x68, 0x65, - 0x74, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6c, - 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2d, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x76, 0x33, 0x2f, - 0x63, 0x6d, 0x64, 0x2f, 0x74, 0x74, 0x6e, 0x2d, 0x6c, 0x77, 0x2d, 0x63, 0x6c, 0x69, 0x2f, 0x63, - 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x2e, 0x4e, 0x65, 0x77, 0x33, 0x42, - 0x79, 0x74, 0x65, 0x73, 0x46, 0x6c, 0x61, 0x67, 0x22, 0x4e, 0x67, 0x6f, 0x2e, 0x74, 0x68, 0x65, - 0x74, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6c, - 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2d, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x76, 0x33, 0x2f, - 0x63, 0x6d, 0x64, 0x2f, 0x74, 0x74, 0x6e, 0x2d, 0x6c, 0x77, 0x2d, 0x63, 0x6c, 0x69, 0x2f, 0x63, - 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x78, - 0x61, 0x63, 0x74, 0x42, 0x79, 0x74, 0x65, 0x73, 0x52, 0x05, 0x6e, 0x65, 0x74, 0x49, 0x64, 0x12, - 0x3e, 0x0a, 0x0c, 0x6d, 0x61, 0x63, 0x5f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, - 0x18, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, - 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x4d, 0x41, 0x43, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, - 0x67, 0x73, 0x52, 0x0b, 0x6d, 0x61, 0x63, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, - 0x35, 0x0a, 0x09, 0x6d, 0x61, 0x63, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x19, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, - 0x2e, 0x76, 0x33, 0x2e, 0x4d, 0x41, 0x43, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x08, 0x6d, 0x61, - 0x63, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x44, 0x0a, 0x11, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, - 0x67, 0x5f, 0x6d, 0x61, 0x63, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x2c, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x18, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, - 0x76, 0x33, 0x2e, 0x4d, 0x41, 0x43, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0f, 0x70, 0x65, 0x6e, - 0x64, 0x69, 0x6e, 0x67, 0x4d, 0x61, 0x63, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x31, 0x0a, 0x07, - 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, - 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x53, - 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, - 0x40, 0x0a, 0x0f, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x65, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, - 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x52, 0x0e, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x12, 0x24, 0x0a, 0x0e, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x64, 0x65, 0x76, 0x5f, 0x6e, 0x6f, - 0x6e, 0x63, 0x65, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x6c, 0x61, 0x73, 0x74, 0x44, - 0x65, 0x76, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x12, 0x26, 0x0a, 0x0f, 0x75, 0x73, 0x65, 0x64, 0x5f, - 0x64, 0x65, 0x76, 0x5f, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x1d, 0x20, 0x03, 0x28, 0x0d, - 0x52, 0x0d, 0x75, 0x73, 0x65, 0x64, 0x44, 0x65, 0x76, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x73, 0x12, - 0x26, 0x0a, 0x0f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x6a, 0x6f, 0x69, 0x6e, 0x5f, 0x6e, 0x6f, 0x6e, - 0x63, 0x65, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x6c, 0x61, 0x73, 0x74, 0x4a, 0x6f, - 0x69, 0x6e, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x12, 0x25, 0x0a, 0x0f, 0x6c, 0x61, 0x73, 0x74, 0x5f, - 0x72, 0x6a, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x30, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x0c, 0x6c, 0x61, 0x73, 0x74, 0x52, 0x6a, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x30, 0x12, 0x25, - 0x0a, 0x0f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x72, 0x6a, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, - 0x31, 0x18, 0x20, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x6c, 0x61, 0x73, 0x74, 0x52, 0x6a, 0x43, - 0x6f, 0x75, 0x6e, 0x74, 0x31, 0x12, 0x58, 0x0a, 0x1b, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x64, 0x65, - 0x76, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, - 0x64, 0x5f, 0x61, 0x74, 0x18, 0x21, 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, 0x17, 0x6c, 0x61, 0x73, 0x74, 0x44, 0x65, 0x76, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x41, 0x74, 0x12, - 0x4b, 0x0a, 0x0b, 0x70, 0x6f, 0x77, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x22, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, - 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x42, 0x0e, 0xfa, 0x42, 0x05, 0x82, 0x01, 0x02, 0x10, 0x01, 0xf2, 0xaa, 0x19, 0x02, 0x10, 0x00, - 0x52, 0x0a, 0x70, 0x6f, 0x77, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x5b, 0x0a, 0x12, - 0x62, 0x61, 0x74, 0x74, 0x65, 0x72, 0x79, 0x5f, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, - 0x67, 0x65, 0x18, 0x23, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x0f, 0xfa, 0x42, 0x0c, 0x0a, 0x0a, 0x1d, 0x00, 0x00, 0x80, - 0x3f, 0x2d, 0x00, 0x00, 0x00, 0x00, 0x52, 0x11, 0x62, 0x61, 0x74, 0x74, 0x65, 0x72, 0x79, 0x50, - 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x64, 0x6f, 0x77, - 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x18, 0x24, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x0e, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x4d, 0x61, 0x72, 0x67, - 0x69, 0x6e, 0x12, 0x65, 0x0a, 0x1c, 0x71, 0x75, 0x65, 0x75, 0x65, 0x64, 0x5f, 0x61, 0x70, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, - 0x6b, 0x73, 0x18, 0x28, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, - 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x52, 0x1a, 0x71, - 0x75, 0x65, 0x75, 0x65, 0x64, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x73, 0x12, 0x48, 0x0a, 0x0a, 0x66, 0x6f, 0x72, - 0x6d, 0x61, 0x74, 0x74, 0x65, 0x72, 0x73, 0x18, 0x29, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, - 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x46, 0x6f, 0x72, - 0x6d, 0x61, 0x74, 0x74, 0x65, 0x72, 0x73, 0x52, 0x0a, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x74, - 0x65, 0x72, 0x73, 0x12, 0x51, 0x0a, 0x0e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x2a, 0x20, 0x01, 0x28, 0x09, 0x42, 0x2a, 0xfa, 0x42, 0x27, - 0x72, 0x25, 0x18, 0x24, 0x32, 0x21, 0x5e, 0x5b, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5d, 0x28, - 0x3f, 0x3a, 0x5b, 0x2d, 0x5d, 0x3f, 0x5b, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5d, 0x29, 0x7b, - 0x32, 0x2c, 0x7d, 0x24, 0x7c, 0x5e, 0x24, 0x52, 0x0d, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x65, 0x72, 0x49, 0x64, 0x12, 0x44, 0x0a, 0x11, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x2b, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x10, 0x70, 0x72, 0x6f, 0x76, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1c, 0x0a, 0x09, - 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x18, 0x2d, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x09, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x12, 0x67, 0x0a, 0x19, 0x63, 0x6c, - 0x61, 0x69, 0x6d, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x2e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, - 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x45, - 0x6e, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x17, 0x63, 0x6c, 0x61, 0x69, - 0x6d, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, - 0x6f, 0x64, 0x65, 0x12, 0x2e, 0x0a, 0x13, 0x73, 0x6b, 0x69, 0x70, 0x5f, 0x70, 0x61, 0x79, 0x6c, - 0x6f, 0x61, 0x64, 0x5f, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x18, 0x33, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x11, 0x73, 0x6b, 0x69, 0x70, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x43, 0x72, 0x79, - 0x70, 0x74, 0x6f, 0x12, 0x5b, 0x0a, 0x1c, 0x73, 0x6b, 0x69, 0x70, 0x5f, 0x70, 0x61, 0x79, 0x6c, - 0x6f, 0x61, 0x64, 0x5f, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x5f, 0x6f, 0x76, 0x65, 0x72, 0x72, - 0x69, 0x64, 0x65, 0x18, 0x34, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x19, 0x73, 0x6b, 0x69, 0x70, 0x50, 0x61, 0x79, 0x6c, 0x6f, - 0x61, 0x64, 0x43, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, - 0x12, 0x3d, 0x0a, 0x0c, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, - 0x18, 0x35, 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, 0x0b, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, - 0x3c, 0x0a, 0x0c, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x65, 0x65, 0x6e, 0x5f, 0x61, 0x74, 0x18, - 0x36, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, - 0x70, 0x52, 0x0a, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x65, 0x65, 0x6e, 0x41, 0x74, 0x12, 0x4f, 0x0a, - 0x0d, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x37, - 0x20, 0x01, 0x28, 0x09, 0x42, 0x2a, 0xfa, 0x42, 0x27, 0x72, 0x25, 0x18, 0x24, 0x32, 0x1e, 0x5e, - 0x5b, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5d, 0x28, 0x3f, 0x3a, 0x5b, 0x2d, 0x5d, 0x3f, 0x5b, - 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5d, 0x29, 0x7b, 0x32, 0x2c, 0x7d, 0x24, 0xd0, 0x01, 0x01, - 0x52, 0x0c, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x69, - 0x0a, 0x19, 0x6c, 0x6f, 0x72, 0x61, 0x5f, 0x61, 0x6c, 0x6c, 0x69, 0x61, 0x6e, 0x63, 0x65, 0x5f, - 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x38, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x2e, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, - 0x76, 0x33, 0x2e, 0x4c, 0x6f, 0x52, 0x61, 0x41, 0x6c, 0x6c, 0x69, 0x61, 0x6e, 0x63, 0x65, 0x50, - 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, - 0x73, 0x52, 0x16, 0x6c, 0x6f, 0x72, 0x61, 0x41, 0x6c, 0x6c, 0x69, 0x61, 0x6e, 0x63, 0x65, 0x50, - 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x49, 0x64, 0x73, 0x1a, 0x3d, 0x0a, 0x0f, 0x41, 0x74, 0x74, - 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x56, 0x0a, 0x0e, 0x4c, 0x6f, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 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, 0x2e, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x74, 0x74, - 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x4c, 0x6f, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, - 0x3a, 0x08, 0xf2, 0xaa, 0x19, 0x04, 0x08, 0x01, 0x10, 0x01, 0x4a, 0x04, 0x08, 0x25, 0x10, 0x26, - 0x4a, 0x04, 0x08, 0x26, 0x10, 0x27, 0x4a, 0x04, 0x08, 0x27, 0x10, 0x28, 0x22, 0x48, 0x0a, 0x0a, - 0x45, 0x6e, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x3a, 0x0a, 0x0b, 0x65, 0x6e, - 0x64, 0x5f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x19, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, - 0x2e, 0x45, 0x6e, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x52, 0x0a, 0x65, 0x6e, 0x64, 0x44, - 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x22, 0xf2, 0x01, 0x0a, 0x0d, 0x44, 0x65, 0x76, 0x41, 0x64, - 0x64, 0x72, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0xc8, 0x01, 0x0a, 0x08, 0x64, 0x65, 0x76, - 0x5f, 0x61, 0x64, 0x64, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0xac, 0x01, 0x92, 0x41, - 0x19, 0x4a, 0x0a, 0x22, 0x32, 0x36, 0x30, 0x30, 0x41, 0x42, 0x43, 0x44, 0x22, 0x9a, 0x02, 0x01, - 0x07, 0xa2, 0x02, 0x06, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0xfa, 0x42, 0x06, 0x7a, 0x04, 0x68, - 0x04, 0x70, 0x01, 0xea, 0xaa, 0x19, 0x82, 0x01, 0x0a, 0x3f, 0x67, 0x6f, 0x2e, 0x74, 0x68, 0x65, - 0x74, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6c, - 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2d, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x76, 0x33, 0x2f, - 0x70, 0x6b, 0x67, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x72, 0x73, 0x68, 0x61, - 0x6c, 0x48, 0x45, 0x58, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x3f, 0x67, 0x6f, 0x2e, 0x74, 0x68, - 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, - 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2d, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x76, 0x33, - 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x55, 0x6e, 0x6d, 0x61, 0x72, - 0x73, 0x68, 0x61, 0x6c, 0x34, 0x42, 0x79, 0x74, 0x65, 0x73, 0x52, 0x07, 0x64, 0x65, 0x76, 0x41, - 0x64, 0x64, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x5c, 0x0a, 0x16, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x42, 0x0a, 0x0a, 0x65, 0x6e, 0x64, 0x5f, 0x64, 0x65, 0x76, - 0x69, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x74, 0x74, 0x6e, 0x2e, - 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x45, 0x6e, 0x64, 0x44, 0x65, - 0x76, 0x69, 0x63, 0x65, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, - 0x65, 0x6e, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x22, 0x97, 0x01, 0x0a, 0x16, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x42, 0x0a, 0x0a, 0x65, 0x6e, 0x64, 0x5f, 0x64, 0x65, 0x76, 0x69, - 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, - 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x45, 0x6e, 0x64, 0x44, 0x65, 0x76, - 0x69, 0x63, 0x65, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x65, - 0x6e, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x12, 0x39, 0x0a, 0x0a, 0x66, 0x69, 0x65, 0x6c, - 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 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, 0x46, - 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x09, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x4d, - 0x61, 0x73, 0x6b, 0x22, 0xa8, 0x02, 0x0a, 0x23, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x45, 0x6e, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x61, 0x73, 0x74, - 0x53, 0x65, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x65, 0x0a, 0x07, 0x75, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x4b, 0x2e, 0x74, - 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x42, 0x61, - 0x74, 0x63, 0x68, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x64, 0x44, 0x65, 0x76, 0x69, - 0x63, 0x65, 0x4c, 0x61, 0x73, 0x74, 0x53, 0x65, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x2e, 0x45, 0x6e, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x61, 0x73, 0x74, 0x53, - 0x65, 0x65, 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x07, 0x75, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x73, 0x1a, 0x99, 0x01, 0x0a, 0x17, 0x45, 0x6e, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, - 0x4c, 0x61, 0x73, 0x74, 0x53, 0x65, 0x65, 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x40, - 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x74, 0x74, - 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x45, 0x6e, 0x64, - 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, - 0x73, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x03, 0x69, 0x64, 0x73, - 0x12, 0x3c, 0x0a, 0x0c, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x65, 0x65, 0x6e, 0x5f, 0x61, 0x74, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x52, 0x0a, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x65, 0x65, 0x6e, 0x41, 0x74, 0x22, 0xa6, - 0x01, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x54, 0x0a, 0x0e, 0x65, 0x6e, 0x64, 0x5f, 0x64, 0x65, - 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, + 0x70, 0x65, 0x73, 0x2e, 0x55, 0x6e, 0x6d, 0x61, 0x72, 0x73, 0x68, 0x61, 0x6c, 0x38, 0x42, 0x79, + 0x74, 0x65, 0x73, 0x52, 0x06, 0x64, 0x65, 0x76, 0x45, 0x75, 0x69, 0x22, 0x97, 0x03, 0x0a, 0x15, + 0x4c, 0x69, 0x73, 0x74, 0x45, 0x6e, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4f, 0x0a, 0x0f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, - 0x45, 0x6e, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, - 0x69, 0x65, 0x72, 0x73, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0c, - 0x65, 0x6e, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x73, 0x12, 0x39, 0x0a, 0x0a, - 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 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, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x09, 0x66, 0x69, - 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x22, 0xcb, 0x03, 0x0a, 0x25, 0x47, 0x65, 0x74, 0x45, - 0x6e, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, - 0x65, 0x72, 0x73, 0x46, 0x6f, 0x72, 0x45, 0x55, 0x49, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0xd0, 0x01, 0x0a, 0x08, 0x6a, 0x6f, 0x69, 0x6e, 0x5f, 0x65, 0x75, 0x69, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0c, 0x42, 0xb4, 0x01, 0x92, 0x41, 0x21, 0x4a, 0x12, 0x22, 0x37, 0x30, 0x42, - 0x33, 0x44, 0x35, 0x37, 0x45, 0x44, 0x30, 0x30, 0x30, 0x41, 0x42, 0x43, 0x44, 0x22, 0x9a, 0x02, - 0x01, 0x07, 0xa2, 0x02, 0x06, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0xfa, 0x42, 0x06, 0x7a, 0x04, - 0x68, 0x08, 0x70, 0x01, 0xea, 0xaa, 0x19, 0x82, 0x01, 0x0a, 0x3f, 0x67, 0x6f, 0x2e, 0x74, 0x68, - 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, - 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2d, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x76, 0x33, - 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x72, 0x73, 0x68, - 0x61, 0x6c, 0x48, 0x45, 0x58, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x3f, 0x67, 0x6f, 0x2e, 0x74, - 0x68, 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, - 0x2f, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2d, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x76, - 0x33, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x55, 0x6e, 0x6d, 0x61, - 0x72, 0x73, 0x68, 0x61, 0x6c, 0x38, 0x42, 0x79, 0x74, 0x65, 0x73, 0x52, 0x07, 0x6a, 0x6f, 0x69, - 0x6e, 0x45, 0x75, 0x69, 0x12, 0xce, 0x01, 0x0a, 0x07, 0x64, 0x65, 0x76, 0x5f, 0x65, 0x75, 0x69, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x42, 0xb4, 0x01, 0x92, 0x41, 0x21, 0x4a, 0x12, 0x22, 0x37, - 0x30, 0x42, 0x33, 0x44, 0x35, 0x37, 0x45, 0x44, 0x30, 0x30, 0x30, 0x41, 0x42, 0x43, 0x44, 0x22, - 0x9a, 0x02, 0x01, 0x07, 0xa2, 0x02, 0x06, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0xfa, 0x42, 0x06, - 0x7a, 0x04, 0x68, 0x08, 0x70, 0x01, 0xea, 0xaa, 0x19, 0x82, 0x01, 0x0a, 0x3f, 0x67, 0x6f, 0x2e, - 0x74, 0x68, 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, - 0x6b, 0x2f, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2d, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, - 0x76, 0x33, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x72, - 0x73, 0x68, 0x61, 0x6c, 0x48, 0x45, 0x58, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x3f, 0x67, 0x6f, - 0x2e, 0x74, 0x68, 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, - 0x72, 0x6b, 0x2f, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2d, 0x73, 0x74, 0x61, 0x63, 0x6b, - 0x2f, 0x76, 0x33, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x55, 0x6e, - 0x6d, 0x61, 0x72, 0x73, 0x68, 0x61, 0x6c, 0x38, 0x42, 0x79, 0x74, 0x65, 0x73, 0x52, 0x06, 0x64, - 0x65, 0x76, 0x45, 0x75, 0x69, 0x22, 0x97, 0x03, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x6e, - 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x4f, 0x0a, 0x0f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, - 0x64, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, - 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, - 0x52, 0x0e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, - 0x12, 0x39, 0x0a, 0x0a, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 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, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, - 0x52, 0x09, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x12, 0xbd, 0x01, 0x0a, 0x05, - 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0xa6, 0x01, 0xfa, 0x42, - 0xa2, 0x01, 0x72, 0x9f, 0x01, 0x52, 0x00, 0x52, 0x09, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, - 0x69, 0x64, 0x52, 0x0a, 0x2d, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x52, 0x08, - 0x6a, 0x6f, 0x69, 0x6e, 0x5f, 0x65, 0x75, 0x69, 0x52, 0x09, 0x2d, 0x6a, 0x6f, 0x69, 0x6e, 0x5f, - 0x65, 0x75, 0x69, 0x52, 0x07, 0x64, 0x65, 0x76, 0x5f, 0x65, 0x75, 0x69, 0x52, 0x08, 0x2d, 0x64, - 0x65, 0x76, 0x5f, 0x65, 0x75, 0x69, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x52, 0x05, 0x2d, 0x6e, - 0x61, 0x6d, 0x65, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x0c, 0x2d, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, - 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x52, 0x0b, 0x2d, 0x63, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x52, 0x0c, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x65, - 0x65, 0x6e, 0x5f, 0x61, 0x74, 0x52, 0x0d, 0x2d, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x65, 0x65, - 0x6e, 0x5f, 0x61, 0x74, 0x52, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x1e, 0x0a, 0x05, 0x6c, - 0x69, 0x6d, 0x69, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x2a, - 0x03, 0x18, 0xe8, 0x07, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x70, - 0x61, 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x70, 0x61, 0x67, 0x65, 0x22, - 0x94, 0x01, 0x0a, 0x13, 0x53, 0x65, 0x74, 0x45, 0x6e, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x42, 0x0a, 0x0a, 0x65, 0x6e, 0x64, 0x5f, 0x64, - 0x65, 0x76, 0x69, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x74, 0x74, - 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x45, 0x6e, 0x64, - 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, - 0x52, 0x09, 0x65, 0x6e, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x12, 0x39, 0x0a, 0x0a, 0x66, - 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 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, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x09, 0x66, 0x69, 0x65, - 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x22, 0xae, 0x01, 0x0a, 0x1b, 0x52, 0x65, 0x73, 0x65, 0x74, - 0x41, 0x6e, 0x64, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x54, 0x0a, 0x0e, 0x65, 0x6e, 0x64, 0x5f, 0x64, 0x65, - 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, - 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, - 0x45, 0x6e, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, - 0x69, 0x65, 0x72, 0x73, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0c, - 0x65, 0x6e, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x73, 0x12, 0x39, 0x0a, 0x0a, - 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 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, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x09, 0x66, 0x69, - 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x22, 0xbc, 0x01, 0x0a, 0x11, 0x45, 0x6e, 0x64, 0x44, - 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x42, 0x0a, + 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x52, 0x0e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x12, 0x39, 0x0a, 0x0a, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, + 0x6d, 0x61, 0x73, 0x6b, 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, 0x46, 0x69, 0x65, + 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x09, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, + 0x6b, 0x12, 0xbd, 0x01, 0x0a, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x42, 0xa6, 0x01, 0xfa, 0x42, 0xa2, 0x01, 0x72, 0x9f, 0x01, 0x52, 0x00, 0x52, 0x09, 0x64, + 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x52, 0x0a, 0x2d, 0x64, 0x65, 0x76, 0x69, 0x63, + 0x65, 0x5f, 0x69, 0x64, 0x52, 0x08, 0x6a, 0x6f, 0x69, 0x6e, 0x5f, 0x65, 0x75, 0x69, 0x52, 0x09, + 0x2d, 0x6a, 0x6f, 0x69, 0x6e, 0x5f, 0x65, 0x75, 0x69, 0x52, 0x07, 0x64, 0x65, 0x76, 0x5f, 0x65, + 0x75, 0x69, 0x52, 0x08, 0x2d, 0x64, 0x65, 0x76, 0x5f, 0x65, 0x75, 0x69, 0x52, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x52, 0x05, 0x2d, 0x6e, 0x61, 0x6d, 0x65, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x2d, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, + 0x52, 0x0b, 0x2d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x52, 0x0c, 0x6c, + 0x61, 0x73, 0x74, 0x5f, 0x73, 0x65, 0x65, 0x6e, 0x5f, 0x61, 0x74, 0x52, 0x0d, 0x2d, 0x6c, 0x61, + 0x73, 0x74, 0x5f, 0x73, 0x65, 0x65, 0x6e, 0x5f, 0x61, 0x74, 0x52, 0x05, 0x6f, 0x72, 0x64, 0x65, + 0x72, 0x12, 0x1e, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, + 0x42, 0x08, 0xfa, 0x42, 0x05, 0x2a, 0x03, 0x18, 0xe8, 0x07, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, + 0x74, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x04, 0x70, 0x61, 0x67, 0x65, 0x22, 0x94, 0x01, 0x0a, 0x13, 0x53, 0x65, 0x74, 0x45, 0x6e, 0x64, + 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x42, 0x0a, 0x0a, 0x65, 0x6e, 0x64, 0x5f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x45, 0x6e, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x42, 0x08, 0xfa, 0x42, @@ -6553,53 +6889,86 @@ var file_ttn_lorawan_v3_end_device_proto_rawDesc = []byte{ 0x65, 0x12, 0x39, 0x0a, 0x0a, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 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, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, - 0x6b, 0x52, 0x09, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x12, 0x28, 0x0a, 0x0b, - 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x18, 0x64, 0x52, 0x0a, 0x6d, 0x61, 0x70, 0x70, - 0x69, 0x6e, 0x67, 0x4b, 0x65, 0x79, 0x22, 0xb8, 0x01, 0x0a, 0x17, 0x45, 0x6e, 0x64, 0x44, 0x65, - 0x76, 0x69, 0x63, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x46, 0x6f, 0x72, 0x6d, - 0x61, 0x74, 0x12, 0x1b, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x18, 0x64, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, - 0x2a, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0xc8, 0x01, 0x52, 0x0b, - 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x54, 0x0a, 0x0f, 0x66, - 0x69, 0x6c, 0x65, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, - 0x20, 0x03, 0x28, 0x09, 0x42, 0x2b, 0xfa, 0x42, 0x28, 0x92, 0x01, 0x25, 0x10, 0x64, 0x18, 0x01, - 0x22, 0x1f, 0x72, 0x1d, 0x32, 0x1b, 0x5e, 0x28, 0x3f, 0x3a, 0x5c, 0x2e, 0x5b, 0x61, 0x2d, 0x7a, - 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x31, 0x2c, 0x31, 0x36, 0x7d, 0x29, 0x7b, 0x31, 0x2c, 0x32, 0x7d, - 0x24, 0x52, 0x0e, 0x66, 0x69, 0x6c, 0x65, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, - 0x73, 0x22, 0xfe, 0x01, 0x0a, 0x18, 0x45, 0x6e, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x12, 0x7d, - 0x0a, 0x07, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x35, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, - 0x2e, 0x45, 0x6e, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x2e, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, - 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x2c, 0xfa, 0x42, 0x29, 0x9a, 0x01, 0x26, 0x22, 0x24, - 0x72, 0x22, 0x18, 0x24, 0x32, 0x1e, 0x5e, 0x5b, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5d, 0x28, - 0x3f, 0x3a, 0x5b, 0x2d, 0x5d, 0x3f, 0x5b, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5d, 0x29, 0x7b, - 0x32, 0x2c, 0x7d, 0x24, 0x52, 0x07, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x1a, 0x63, 0x0a, - 0x0c, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 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, - 0x3d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, - 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, - 0x45, 0x6e, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, - 0x38, 0x01, 0x22, 0xdd, 0x01, 0x0a, 0x1f, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x45, 0x6e, - 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x44, 0x0a, 0x09, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x27, 0xfa, 0x42, 0x24, 0x72, 0x22, - 0x18, 0x24, 0x32, 0x1e, 0x5e, 0x5b, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5d, 0x28, 0x3f, 0x3a, - 0x5b, 0x2d, 0x5d, 0x3f, 0x5b, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5d, 0x29, 0x7b, 0x32, 0x2c, - 0x7d, 0x24, 0x52, 0x08, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, - 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, - 0x12, 0x60, 0x0a, 0x16, 0x65, 0x6e, 0x64, 0x5f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x76, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x2b, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, - 0x33, 0x2e, 0x45, 0x6e, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x52, 0x13, 0x65, - 0x6e, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, - 0x64, 0x73, 0x22, 0xca, 0x01, 0x0a, 0x1c, 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x45, 0x6e, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x6b, 0x52, 0x09, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x22, 0xae, 0x01, 0x0a, + 0x1b, 0x52, 0x65, 0x73, 0x65, 0x74, 0x41, 0x6e, 0x64, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x64, 0x44, + 0x65, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x54, 0x0a, 0x0e, + 0x65, 0x6e, 0x64, 0x5f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, + 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x45, 0x6e, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x8a, + 0x01, 0x02, 0x10, 0x01, 0x52, 0x0c, 0x65, 0x6e, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, + 0x64, 0x73, 0x12, 0x39, 0x0a, 0x0a, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, + 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, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, + 0x73, 0x6b, 0x52, 0x09, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x22, 0xbc, 0x01, + 0x0a, 0x11, 0x45, 0x6e, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x12, 0x42, 0x0a, 0x0a, 0x65, 0x6e, 0x64, 0x5f, 0x64, 0x65, 0x76, 0x69, 0x63, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, + 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x45, 0x6e, 0x64, 0x44, 0x65, 0x76, 0x69, + 0x63, 0x65, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x65, 0x6e, + 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x12, 0x39, 0x0a, 0x0a, 0x66, 0x69, 0x65, 0x6c, 0x64, + 0x5f, 0x6d, 0x61, 0x73, 0x6b, 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, 0x46, 0x69, + 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x09, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, + 0x73, 0x6b, 0x12, 0x28, 0x0a, 0x0b, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x6b, 0x65, + 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x18, 0x64, + 0x52, 0x0a, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x4b, 0x65, 0x79, 0x22, 0xb8, 0x01, 0x0a, + 0x17, 0x45, 0x6e, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x1b, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x18, 0x64, 0x52, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2a, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, + 0x03, 0x18, 0xc8, 0x01, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x54, 0x0a, 0x0f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, + 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x42, 0x2b, 0xfa, 0x42, 0x28, 0x92, + 0x01, 0x25, 0x10, 0x64, 0x18, 0x01, 0x22, 0x1f, 0x72, 0x1d, 0x32, 0x1b, 0x5e, 0x28, 0x3f, 0x3a, + 0x5c, 0x2e, 0x5b, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x31, 0x2c, 0x31, 0x36, 0x7d, + 0x29, 0x7b, 0x31, 0x2c, 0x32, 0x7d, 0x24, 0x52, 0x0e, 0x66, 0x69, 0x6c, 0x65, 0x45, 0x78, 0x74, + 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xfe, 0x01, 0x0a, 0x18, 0x45, 0x6e, 0x64, 0x44, + 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x46, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x73, 0x12, 0x7d, 0x0a, 0x07, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, + 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x45, 0x6e, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, + 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x2e, + 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x2c, 0xfa, 0x42, + 0x29, 0x9a, 0x01, 0x26, 0x22, 0x24, 0x72, 0x22, 0x18, 0x24, 0x32, 0x1e, 0x5e, 0x5b, 0x61, 0x2d, + 0x7a, 0x30, 0x2d, 0x39, 0x5d, 0x28, 0x3f, 0x3a, 0x5b, 0x2d, 0x5d, 0x3f, 0x5b, 0x61, 0x2d, 0x7a, + 0x30, 0x2d, 0x39, 0x5d, 0x29, 0x7b, 0x32, 0x2c, 0x7d, 0x24, 0x52, 0x07, 0x66, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x73, 0x1a, 0x63, 0x0a, 0x0c, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 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, 0x3d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, + 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x45, 0x6e, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xdd, 0x01, 0x0a, 0x1f, 0x43, 0x6f, 0x6e, + 0x76, 0x65, 0x72, 0x74, 0x45, 0x6e, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x44, 0x0a, 0x09, + 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x27, 0xfa, 0x42, 0x24, 0x72, 0x22, 0x18, 0x24, 0x32, 0x1e, 0x5e, 0x5b, 0x61, 0x2d, 0x7a, 0x30, + 0x2d, 0x39, 0x5d, 0x28, 0x3f, 0x3a, 0x5b, 0x2d, 0x5d, 0x3f, 0x5b, 0x61, 0x2d, 0x7a, 0x30, 0x2d, + 0x39, 0x5d, 0x29, 0x7b, 0x32, 0x2c, 0x7d, 0x24, 0x52, 0x08, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, + 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, + 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x60, 0x0a, 0x16, 0x65, 0x6e, 0x64, 0x5f, 0x64, 0x65, + 0x76, 0x69, 0x63, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x73, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, + 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x45, 0x6e, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, + 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, + 0x65, 0x72, 0x73, 0x52, 0x13, 0x65, 0x6e, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x56, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x22, 0xca, 0x01, 0x0a, 0x1c, 0x42, 0x61, 0x74, + 0x63, 0x68, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x45, 0x6e, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, + 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x59, 0x0a, 0x0f, 0x61, 0x70, 0x70, + 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, + 0x2e, 0x76, 0x33, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x8a, + 0x01, 0x02, 0x10, 0x01, 0x52, 0x0e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x49, 0x64, 0x73, 0x12, 0x4f, 0x0a, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, + 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x42, 0x30, 0xfa, 0x42, 0x2d, 0x92, 0x01, 0x2a, + 0x08, 0x01, 0x10, 0x14, 0x22, 0x24, 0x72, 0x22, 0x18, 0x24, 0x32, 0x1e, 0x5e, 0x5b, 0x61, 0x2d, + 0x7a, 0x30, 0x2d, 0x39, 0x5d, 0x28, 0x3f, 0x3a, 0x5b, 0x2d, 0x5d, 0x3f, 0x5b, 0x61, 0x2d, 0x7a, + 0x30, 0x2d, 0x39, 0x5d, 0x29, 0x7b, 0x32, 0x2c, 0x7d, 0x24, 0x52, 0x09, 0x64, 0x65, 0x76, 0x69, + 0x63, 0x65, 0x49, 0x64, 0x73, 0x22, 0xa8, 0x02, 0x0a, 0x19, 0x42, 0x61, 0x74, 0x63, 0x68, 0x47, + 0x65, 0x74, 0x45, 0x6e, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x59, 0x0a, 0x0f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x41, 0x70, @@ -6610,35 +6979,23 @@ var file_ttn_lorawan_v3_end_device_proto_rawDesc = []byte{ 0x28, 0x09, 0x42, 0x30, 0xfa, 0x42, 0x2d, 0x92, 0x01, 0x2a, 0x08, 0x01, 0x10, 0x14, 0x22, 0x24, 0x72, 0x22, 0x18, 0x24, 0x32, 0x1e, 0x5e, 0x5b, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5d, 0x28, 0x3f, 0x3a, 0x5b, 0x2d, 0x5d, 0x3f, 0x5b, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5d, 0x29, 0x7b, - 0x32, 0x2c, 0x7d, 0x24, 0x52, 0x09, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x73, 0x22, - 0xa8, 0x02, 0x0a, 0x19, 0x42, 0x61, 0x74, 0x63, 0x68, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x64, 0x44, - 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x59, 0x0a, - 0x0f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x73, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x74, 0x74, 0x6e, 0x2e, 0x6c, 0x6f, 0x72, - 0x61, 0x77, 0x61, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x42, 0x08, - 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x12, 0x4f, 0x0a, 0x0a, 0x64, 0x65, 0x76, 0x69, - 0x63, 0x65, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x42, 0x30, 0xfa, 0x42, - 0x2d, 0x92, 0x01, 0x2a, 0x08, 0x01, 0x10, 0x14, 0x22, 0x24, 0x72, 0x22, 0x18, 0x24, 0x32, 0x1e, - 0x5e, 0x5b, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5d, 0x28, 0x3f, 0x3a, 0x5b, 0x2d, 0x5d, 0x3f, - 0x5b, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5d, 0x29, 0x7b, 0x32, 0x2c, 0x7d, 0x24, 0x52, 0x09, - 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x73, 0x12, 0x39, 0x0a, 0x0a, 0x66, 0x69, 0x65, - 0x6c, 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x09, 0x66, 0x69, 0x65, 0x6c, 0x64, - 0x4d, 0x61, 0x73, 0x6b, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05, 0x4a, 0x04, 0x08, 0x05, 0x10, 0x06, - 0x4a, 0x04, 0x08, 0x06, 0x10, 0x07, 0x52, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x05, 0x6c, - 0x69, 0x6d, 0x69, 0x74, 0x52, 0x04, 0x70, 0x61, 0x67, 0x65, 0x2a, 0x55, 0x0a, 0x0a, 0x50, 0x6f, - 0x77, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x11, 0x0a, 0x0d, 0x50, 0x4f, 0x57, 0x45, - 0x52, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x50, - 0x4f, 0x57, 0x45, 0x52, 0x5f, 0x42, 0x41, 0x54, 0x54, 0x45, 0x52, 0x59, 0x10, 0x01, 0x12, 0x12, - 0x0a, 0x0e, 0x50, 0x4f, 0x57, 0x45, 0x52, 0x5f, 0x45, 0x58, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, - 0x10, 0x02, 0x1a, 0x0d, 0xea, 0xaa, 0x19, 0x09, 0x18, 0x01, 0x2a, 0x05, 0x50, 0x4f, 0x57, 0x45, - 0x52, 0x42, 0x31, 0x5a, 0x2f, 0x67, 0x6f, 0x2e, 0x74, 0x68, 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, - 0x73, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, - 0x6e, 0x2d, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x76, 0x33, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x74, - 0x74, 0x6e, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x32, 0x2c, 0x7d, 0x24, 0x52, 0x09, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x73, 0x12, + 0x39, 0x0a, 0x0a, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, + 0x09, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05, + 0x4a, 0x04, 0x08, 0x05, 0x10, 0x06, 0x4a, 0x04, 0x08, 0x06, 0x10, 0x07, 0x52, 0x05, 0x6f, 0x72, + 0x64, 0x65, 0x72, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x04, 0x70, 0x61, 0x67, 0x65, + 0x2a, 0x55, 0x0a, 0x0a, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x11, + 0x0a, 0x0d, 0x50, 0x4f, 0x57, 0x45, 0x52, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, + 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x50, 0x4f, 0x57, 0x45, 0x52, 0x5f, 0x42, 0x41, 0x54, 0x54, 0x45, + 0x52, 0x59, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x50, 0x4f, 0x57, 0x45, 0x52, 0x5f, 0x45, 0x58, + 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x10, 0x02, 0x1a, 0x0d, 0xea, 0xaa, 0x19, 0x09, 0x18, 0x01, + 0x2a, 0x05, 0x50, 0x4f, 0x57, 0x45, 0x52, 0x42, 0x31, 0x5a, 0x2f, 0x67, 0x6f, 0x2e, 0x74, 0x68, + 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, + 0x6c, 0x6f, 0x72, 0x61, 0x77, 0x61, 0x6e, 0x2d, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x76, 0x33, + 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x74, 0x74, 0x6e, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x33, } var ( @@ -6654,206 +7011,208 @@ func file_ttn_lorawan_v3_end_device_proto_rawDescGZIP() []byte { } var file_ttn_lorawan_v3_end_device_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_ttn_lorawan_v3_end_device_proto_msgTypes = make([]protoimpl.MessageInfo, 58) +var file_ttn_lorawan_v3_end_device_proto_msgTypes = make([]protoimpl.MessageInfo, 60) var file_ttn_lorawan_v3_end_device_proto_goTypes = []interface{}{ - (PowerState)(0), // 0: ttn.lorawan.v3.PowerState - (*Session)(nil), // 1: ttn.lorawan.v3.Session - (*BoolValue)(nil), // 2: ttn.lorawan.v3.BoolValue - (*ServingRelayForwardingLimits)(nil), // 3: ttn.lorawan.v3.ServingRelayForwardingLimits - (*RelayUplinkForwardingRule)(nil), // 4: ttn.lorawan.v3.RelayUplinkForwardingRule - (*ServingRelayParameters)(nil), // 5: ttn.lorawan.v3.ServingRelayParameters - (*ServedRelayParameters)(nil), // 6: ttn.lorawan.v3.ServedRelayParameters - (*RelayParameters)(nil), // 7: ttn.lorawan.v3.RelayParameters - (*ServingRelaySettings)(nil), // 8: ttn.lorawan.v3.ServingRelaySettings - (*ServedRelaySettings)(nil), // 9: ttn.lorawan.v3.ServedRelaySettings - (*RelaySettings)(nil), // 10: ttn.lorawan.v3.RelaySettings - (*MACParameters)(nil), // 11: ttn.lorawan.v3.MACParameters - (*EndDeviceVersion)(nil), // 12: ttn.lorawan.v3.EndDeviceVersion - (*ADRSettings)(nil), // 13: ttn.lorawan.v3.ADRSettings - (*MACSettings)(nil), // 14: ttn.lorawan.v3.MACSettings - (*MACState)(nil), // 15: ttn.lorawan.v3.MACState - (*EndDeviceAuthenticationCode)(nil), // 16: ttn.lorawan.v3.EndDeviceAuthenticationCode - (*EndDevice)(nil), // 17: ttn.lorawan.v3.EndDevice - (*EndDevices)(nil), // 18: ttn.lorawan.v3.EndDevices - (*DevAddrPrefix)(nil), // 19: ttn.lorawan.v3.DevAddrPrefix - (*CreateEndDeviceRequest)(nil), // 20: ttn.lorawan.v3.CreateEndDeviceRequest - (*UpdateEndDeviceRequest)(nil), // 21: ttn.lorawan.v3.UpdateEndDeviceRequest - (*BatchUpdateEndDeviceLastSeenRequest)(nil), // 22: ttn.lorawan.v3.BatchUpdateEndDeviceLastSeenRequest - (*GetEndDeviceRequest)(nil), // 23: ttn.lorawan.v3.GetEndDeviceRequest - (*GetEndDeviceIdentifiersForEUIsRequest)(nil), // 24: ttn.lorawan.v3.GetEndDeviceIdentifiersForEUIsRequest - (*ListEndDevicesRequest)(nil), // 25: ttn.lorawan.v3.ListEndDevicesRequest - (*SetEndDeviceRequest)(nil), // 26: ttn.lorawan.v3.SetEndDeviceRequest - (*ResetAndGetEndDeviceRequest)(nil), // 27: ttn.lorawan.v3.ResetAndGetEndDeviceRequest - (*EndDeviceTemplate)(nil), // 28: ttn.lorawan.v3.EndDeviceTemplate - (*EndDeviceTemplateFormat)(nil), // 29: ttn.lorawan.v3.EndDeviceTemplateFormat - (*EndDeviceTemplateFormats)(nil), // 30: ttn.lorawan.v3.EndDeviceTemplateFormats - (*ConvertEndDeviceTemplateRequest)(nil), // 31: ttn.lorawan.v3.ConvertEndDeviceTemplateRequest - (*BatchDeleteEndDevicesRequest)(nil), // 32: ttn.lorawan.v3.BatchDeleteEndDevicesRequest - (*BatchGetEndDevicesRequest)(nil), // 33: ttn.lorawan.v3.BatchGetEndDevicesRequest - (*MACParameters_Channel)(nil), // 34: ttn.lorawan.v3.MACParameters.Channel - (*ADRSettings_StaticMode)(nil), // 35: ttn.lorawan.v3.ADRSettings.StaticMode - (*ADRSettings_DynamicMode)(nil), // 36: ttn.lorawan.v3.ADRSettings.DynamicMode - (*ADRSettings_DisabledMode)(nil), // 37: ttn.lorawan.v3.ADRSettings.DisabledMode - (*ADRSettings_DynamicMode_ChannelSteeringSettings)(nil), // 38: ttn.lorawan.v3.ADRSettings.DynamicMode.ChannelSteeringSettings - (*ADRSettings_DynamicMode_ChannelSteeringSettings_LoRaNarrowMode)(nil), // 39: ttn.lorawan.v3.ADRSettings.DynamicMode.ChannelSteeringSettings.LoRaNarrowMode - (*ADRSettings_DynamicMode_ChannelSteeringSettings_DisabledMode)(nil), // 40: ttn.lorawan.v3.ADRSettings.DynamicMode.ChannelSteeringSettings.DisabledMode - (*MACState_JoinRequest)(nil), // 41: ttn.lorawan.v3.MACState.JoinRequest - (*MACState_JoinAccept)(nil), // 42: ttn.lorawan.v3.MACState.JoinAccept - (*MACState_UplinkMessage)(nil), // 43: ttn.lorawan.v3.MACState.UplinkMessage - (*MACState_DownlinkMessage)(nil), // 44: ttn.lorawan.v3.MACState.DownlinkMessage - (*MACState_DataRateRange)(nil), // 45: ttn.lorawan.v3.MACState.DataRateRange - (*MACState_DataRateRanges)(nil), // 46: ttn.lorawan.v3.MACState.DataRateRanges - nil, // 47: ttn.lorawan.v3.MACState.RejectedDataRateRangesEntry - (*MACState_UplinkMessage_TxSettings)(nil), // 48: ttn.lorawan.v3.MACState.UplinkMessage.TxSettings - (*MACState_UplinkMessage_RxMetadata)(nil), // 49: ttn.lorawan.v3.MACState.UplinkMessage.RxMetadata - (*MACState_UplinkMessage_RxMetadata_PacketBrokerMetadata)(nil), // 50: ttn.lorawan.v3.MACState.UplinkMessage.RxMetadata.PacketBrokerMetadata - (*MACState_UplinkMessage_RxMetadata_RelayMetadata)(nil), // 51: ttn.lorawan.v3.MACState.UplinkMessage.RxMetadata.RelayMetadata - (*MACState_DownlinkMessage_Message)(nil), // 52: ttn.lorawan.v3.MACState.DownlinkMessage.Message - (*MACState_DownlinkMessage_Message_MHDR)(nil), // 53: ttn.lorawan.v3.MACState.DownlinkMessage.Message.MHDR - (*MACState_DownlinkMessage_Message_MACPayload)(nil), // 54: ttn.lorawan.v3.MACState.DownlinkMessage.Message.MACPayload - nil, // 55: ttn.lorawan.v3.EndDevice.AttributesEntry - nil, // 56: ttn.lorawan.v3.EndDevice.LocationsEntry - (*BatchUpdateEndDeviceLastSeenRequest_EndDeviceLastSeenUpdate)(nil), // 57: ttn.lorawan.v3.BatchUpdateEndDeviceLastSeenRequest.EndDeviceLastSeenUpdate - nil, // 58: ttn.lorawan.v3.EndDeviceTemplateFormats.FormatsEntry - (*SessionKeys)(nil), // 59: ttn.lorawan.v3.SessionKeys - (*timestamppb.Timestamp)(nil), // 60: google.protobuf.Timestamp - (*ApplicationDownlink)(nil), // 61: ttn.lorawan.v3.ApplicationDownlink - (RelayResetLimitCounter)(0), // 62: ttn.lorawan.v3.RelayResetLimitCounter - (*RelayForwardLimits)(nil), // 63: ttn.lorawan.v3.RelayForwardLimits - (*RelayUplinkForwardLimits)(nil), // 64: ttn.lorawan.v3.RelayUplinkForwardLimits - (*RelaySecondChannel)(nil), // 65: ttn.lorawan.v3.RelaySecondChannel - (RelayCADPeriodicity)(0), // 66: ttn.lorawan.v3.RelayCADPeriodicity - (*RelayEndDeviceAlwaysMode)(nil), // 67: ttn.lorawan.v3.RelayEndDeviceAlwaysMode - (*RelayEndDeviceDynamicMode)(nil), // 68: ttn.lorawan.v3.RelayEndDeviceDynamicMode - (*RelayEndDeviceControlledMode)(nil), // 69: ttn.lorawan.v3.RelayEndDeviceControlledMode - (*wrapperspb.UInt32Value)(nil), // 70: google.protobuf.UInt32Value - (DataRateIndex)(0), // 71: ttn.lorawan.v3.DataRateIndex - (RxDelay)(0), // 72: ttn.lorawan.v3.RxDelay - (DataRateOffset)(0), // 73: ttn.lorawan.v3.DataRateOffset - (AggregatedDutyCycle)(0), // 74: ttn.lorawan.v3.AggregatedDutyCycle - (RejoinTimeExponent)(0), // 75: ttn.lorawan.v3.RejoinTimeExponent - (RejoinCountExponent)(0), // 76: ttn.lorawan.v3.RejoinCountExponent - (*ADRAckLimitExponentValue)(nil), // 77: ttn.lorawan.v3.ADRAckLimitExponentValue - (*ADRAckDelayExponentValue)(nil), // 78: ttn.lorawan.v3.ADRAckDelayExponentValue - (*DataRateIndexValue)(nil), // 79: ttn.lorawan.v3.DataRateIndexValue - (*EndDeviceVersionIdentifiers)(nil), // 80: ttn.lorawan.v3.EndDeviceVersionIdentifiers - (MACVersion)(0), // 81: ttn.lorawan.v3.MACVersion - (PHYVersion)(0), // 82: ttn.lorawan.v3.PHYVersion - (*MessagePayloadFormatters)(nil), // 83: ttn.lorawan.v3.MessagePayloadFormatters - (*durationpb.Duration)(nil), // 84: google.protobuf.Duration - (*PingSlotPeriodValue)(nil), // 85: ttn.lorawan.v3.PingSlotPeriodValue - (*ZeroableFrequencyValue)(nil), // 86: ttn.lorawan.v3.ZeroableFrequencyValue - (*RxDelayValue)(nil), // 87: ttn.lorawan.v3.RxDelayValue - (*DataRateOffsetValue)(nil), // 88: ttn.lorawan.v3.DataRateOffsetValue - (*FrequencyValue)(nil), // 89: ttn.lorawan.v3.FrequencyValue - (*AggregatedDutyCycleValue)(nil), // 90: ttn.lorawan.v3.AggregatedDutyCycleValue - (*wrapperspb.FloatValue)(nil), // 91: google.protobuf.FloatValue - (*DeviceEIRPValue)(nil), // 92: ttn.lorawan.v3.DeviceEIRPValue - (Class)(0), // 93: ttn.lorawan.v3.Class - (*MACCommand)(nil), // 94: ttn.lorawan.v3.MACCommand - (MACCommandIdentifier)(0), // 95: ttn.lorawan.v3.MACCommandIdentifier - (*RelayForwardDownlinkReq)(nil), // 96: ttn.lorawan.v3.RelayForwardDownlinkReq - (*EndDeviceIdentifiers)(nil), // 97: ttn.lorawan.v3.EndDeviceIdentifiers - (*Picture)(nil), // 98: ttn.lorawan.v3.Picture - (*RootKeys)(nil), // 99: ttn.lorawan.v3.RootKeys - (*structpb.Struct)(nil), // 100: google.protobuf.Struct - (*wrapperspb.BoolValue)(nil), // 101: google.protobuf.BoolValue - (*LoRaAllianceProfileIdentifiers)(nil), // 102: ttn.lorawan.v3.LoRaAllianceProfileIdentifiers - (*fieldmaskpb.FieldMask)(nil), // 103: google.protobuf.FieldMask - (*ApplicationIdentifiers)(nil), // 104: ttn.lorawan.v3.ApplicationIdentifiers - (*DLSettings)(nil), // 105: ttn.lorawan.v3.DLSettings - (*CFList)(nil), // 106: ttn.lorawan.v3.CFList - (*Message)(nil), // 107: ttn.lorawan.v3.Message - (*DataRate)(nil), // 108: ttn.lorawan.v3.DataRate - (*GatewayIdentifiers)(nil), // 109: ttn.lorawan.v3.GatewayIdentifiers - (DownlinkPathConstraint)(0), // 110: ttn.lorawan.v3.DownlinkPathConstraint - (MType)(0), // 111: ttn.lorawan.v3.MType - (*Location)(nil), // 112: ttn.lorawan.v3.Location + (PowerState)(0), // 0: ttn.lorawan.v3.PowerState + (*Session)(nil), // 1: ttn.lorawan.v3.Session + (*BoolValue)(nil), // 2: ttn.lorawan.v3.BoolValue + (*ServingRelayForwardingLimits)(nil), // 3: ttn.lorawan.v3.ServingRelayForwardingLimits + (*RelayUplinkForwardingRule)(nil), // 4: ttn.lorawan.v3.RelayUplinkForwardingRule + (*ServingRelayParameters)(nil), // 5: ttn.lorawan.v3.ServingRelayParameters + (*ServedRelayParameters)(nil), // 6: ttn.lorawan.v3.ServedRelayParameters + (*RelayParameters)(nil), // 7: ttn.lorawan.v3.RelayParameters + (*ServingRelaySettings)(nil), // 8: ttn.lorawan.v3.ServingRelaySettings + (*ServedRelaySettings)(nil), // 9: ttn.lorawan.v3.ServedRelaySettings + (*RelaySettings)(nil), // 10: ttn.lorawan.v3.RelaySettings + (*MACParameters)(nil), // 11: ttn.lorawan.v3.MACParameters + (*EndDeviceVersion)(nil), // 12: ttn.lorawan.v3.EndDeviceVersion + (*ADRSettings)(nil), // 13: ttn.lorawan.v3.ADRSettings + (*MACSettings)(nil), // 14: ttn.lorawan.v3.MACSettings + (*MACState)(nil), // 15: ttn.lorawan.v3.MACState + (*EndDeviceAuthenticationCode)(nil), // 16: ttn.lorawan.v3.EndDeviceAuthenticationCode + (*EndDevice)(nil), // 17: ttn.lorawan.v3.EndDevice + (*EndDevices)(nil), // 18: ttn.lorawan.v3.EndDevices + (*DevAddrPrefix)(nil), // 19: ttn.lorawan.v3.DevAddrPrefix + (*CreateEndDeviceRequest)(nil), // 20: ttn.lorawan.v3.CreateEndDeviceRequest + (*UpdateEndDeviceRequest)(nil), // 21: ttn.lorawan.v3.UpdateEndDeviceRequest + (*BatchUpdateEndDeviceLastSeenRequest)(nil), // 22: ttn.lorawan.v3.BatchUpdateEndDeviceLastSeenRequest + (*GetEndDeviceRequest)(nil), // 23: ttn.lorawan.v3.GetEndDeviceRequest + (*GetEndDeviceIdentifiersForEUIsRequest)(nil), // 24: ttn.lorawan.v3.GetEndDeviceIdentifiersForEUIsRequest + (*ListEndDevicesRequest)(nil), // 25: ttn.lorawan.v3.ListEndDevicesRequest + (*SetEndDeviceRequest)(nil), // 26: ttn.lorawan.v3.SetEndDeviceRequest + (*ResetAndGetEndDeviceRequest)(nil), // 27: ttn.lorawan.v3.ResetAndGetEndDeviceRequest + (*EndDeviceTemplate)(nil), // 28: ttn.lorawan.v3.EndDeviceTemplate + (*EndDeviceTemplateFormat)(nil), // 29: ttn.lorawan.v3.EndDeviceTemplateFormat + (*EndDeviceTemplateFormats)(nil), // 30: ttn.lorawan.v3.EndDeviceTemplateFormats + (*ConvertEndDeviceTemplateRequest)(nil), // 31: ttn.lorawan.v3.ConvertEndDeviceTemplateRequest + (*BatchDeleteEndDevicesRequest)(nil), // 32: ttn.lorawan.v3.BatchDeleteEndDevicesRequest + (*BatchGetEndDevicesRequest)(nil), // 33: ttn.lorawan.v3.BatchGetEndDevicesRequest + (*MACParameters_Channel)(nil), // 34: ttn.lorawan.v3.MACParameters.Channel + (*ADRSettings_StaticMode)(nil), // 35: ttn.lorawan.v3.ADRSettings.StaticMode + (*ADRSettings_DynamicMode)(nil), // 36: ttn.lorawan.v3.ADRSettings.DynamicMode + (*ADRSettings_DisabledMode)(nil), // 37: ttn.lorawan.v3.ADRSettings.DisabledMode + (*ADRSettings_DynamicMode_ChannelSteeringSettings)(nil), // 38: ttn.lorawan.v3.ADRSettings.DynamicMode.ChannelSteeringSettings + (*ADRSettings_DynamicMode_PerDataRateIndexOverride)(nil), // 39: ttn.lorawan.v3.ADRSettings.DynamicMode.PerDataRateIndexOverride + (*ADRSettings_DynamicMode_Overrides)(nil), // 40: ttn.lorawan.v3.ADRSettings.DynamicMode.Overrides + (*ADRSettings_DynamicMode_ChannelSteeringSettings_LoRaNarrowMode)(nil), // 41: ttn.lorawan.v3.ADRSettings.DynamicMode.ChannelSteeringSettings.LoRaNarrowMode + (*ADRSettings_DynamicMode_ChannelSteeringSettings_DisabledMode)(nil), // 42: ttn.lorawan.v3.ADRSettings.DynamicMode.ChannelSteeringSettings.DisabledMode + (*MACState_JoinRequest)(nil), // 43: ttn.lorawan.v3.MACState.JoinRequest + (*MACState_JoinAccept)(nil), // 44: ttn.lorawan.v3.MACState.JoinAccept + (*MACState_UplinkMessage)(nil), // 45: ttn.lorawan.v3.MACState.UplinkMessage + (*MACState_DownlinkMessage)(nil), // 46: ttn.lorawan.v3.MACState.DownlinkMessage + (*MACState_DataRateRange)(nil), // 47: ttn.lorawan.v3.MACState.DataRateRange + (*MACState_DataRateRanges)(nil), // 48: ttn.lorawan.v3.MACState.DataRateRanges + nil, // 49: ttn.lorawan.v3.MACState.RejectedDataRateRangesEntry + (*MACState_UplinkMessage_TxSettings)(nil), // 50: ttn.lorawan.v3.MACState.UplinkMessage.TxSettings + (*MACState_UplinkMessage_RxMetadata)(nil), // 51: ttn.lorawan.v3.MACState.UplinkMessage.RxMetadata + (*MACState_UplinkMessage_RxMetadata_PacketBrokerMetadata)(nil), // 52: ttn.lorawan.v3.MACState.UplinkMessage.RxMetadata.PacketBrokerMetadata + (*MACState_UplinkMessage_RxMetadata_RelayMetadata)(nil), // 53: ttn.lorawan.v3.MACState.UplinkMessage.RxMetadata.RelayMetadata + (*MACState_DownlinkMessage_Message)(nil), // 54: ttn.lorawan.v3.MACState.DownlinkMessage.Message + (*MACState_DownlinkMessage_Message_MHDR)(nil), // 55: ttn.lorawan.v3.MACState.DownlinkMessage.Message.MHDR + (*MACState_DownlinkMessage_Message_MACPayload)(nil), // 56: ttn.lorawan.v3.MACState.DownlinkMessage.Message.MACPayload + nil, // 57: ttn.lorawan.v3.EndDevice.AttributesEntry + nil, // 58: ttn.lorawan.v3.EndDevice.LocationsEntry + (*BatchUpdateEndDeviceLastSeenRequest_EndDeviceLastSeenUpdate)(nil), // 59: ttn.lorawan.v3.BatchUpdateEndDeviceLastSeenRequest.EndDeviceLastSeenUpdate + nil, // 60: ttn.lorawan.v3.EndDeviceTemplateFormats.FormatsEntry + (*SessionKeys)(nil), // 61: ttn.lorawan.v3.SessionKeys + (*timestamppb.Timestamp)(nil), // 62: google.protobuf.Timestamp + (*ApplicationDownlink)(nil), // 63: ttn.lorawan.v3.ApplicationDownlink + (RelayResetLimitCounter)(0), // 64: ttn.lorawan.v3.RelayResetLimitCounter + (*RelayForwardLimits)(nil), // 65: ttn.lorawan.v3.RelayForwardLimits + (*RelayUplinkForwardLimits)(nil), // 66: ttn.lorawan.v3.RelayUplinkForwardLimits + (*RelaySecondChannel)(nil), // 67: ttn.lorawan.v3.RelaySecondChannel + (RelayCADPeriodicity)(0), // 68: ttn.lorawan.v3.RelayCADPeriodicity + (*RelayEndDeviceAlwaysMode)(nil), // 69: ttn.lorawan.v3.RelayEndDeviceAlwaysMode + (*RelayEndDeviceDynamicMode)(nil), // 70: ttn.lorawan.v3.RelayEndDeviceDynamicMode + (*RelayEndDeviceControlledMode)(nil), // 71: ttn.lorawan.v3.RelayEndDeviceControlledMode + (*wrapperspb.UInt32Value)(nil), // 72: google.protobuf.UInt32Value + (DataRateIndex)(0), // 73: ttn.lorawan.v3.DataRateIndex + (RxDelay)(0), // 74: ttn.lorawan.v3.RxDelay + (DataRateOffset)(0), // 75: ttn.lorawan.v3.DataRateOffset + (AggregatedDutyCycle)(0), // 76: ttn.lorawan.v3.AggregatedDutyCycle + (RejoinTimeExponent)(0), // 77: ttn.lorawan.v3.RejoinTimeExponent + (RejoinCountExponent)(0), // 78: ttn.lorawan.v3.RejoinCountExponent + (*ADRAckLimitExponentValue)(nil), // 79: ttn.lorawan.v3.ADRAckLimitExponentValue + (*ADRAckDelayExponentValue)(nil), // 80: ttn.lorawan.v3.ADRAckDelayExponentValue + (*DataRateIndexValue)(nil), // 81: ttn.lorawan.v3.DataRateIndexValue + (*EndDeviceVersionIdentifiers)(nil), // 82: ttn.lorawan.v3.EndDeviceVersionIdentifiers + (MACVersion)(0), // 83: ttn.lorawan.v3.MACVersion + (PHYVersion)(0), // 84: ttn.lorawan.v3.PHYVersion + (*MessagePayloadFormatters)(nil), // 85: ttn.lorawan.v3.MessagePayloadFormatters + (*durationpb.Duration)(nil), // 86: google.protobuf.Duration + (*PingSlotPeriodValue)(nil), // 87: ttn.lorawan.v3.PingSlotPeriodValue + (*ZeroableFrequencyValue)(nil), // 88: ttn.lorawan.v3.ZeroableFrequencyValue + (*RxDelayValue)(nil), // 89: ttn.lorawan.v3.RxDelayValue + (*DataRateOffsetValue)(nil), // 90: ttn.lorawan.v3.DataRateOffsetValue + (*FrequencyValue)(nil), // 91: ttn.lorawan.v3.FrequencyValue + (*AggregatedDutyCycleValue)(nil), // 92: ttn.lorawan.v3.AggregatedDutyCycleValue + (*wrapperspb.FloatValue)(nil), // 93: google.protobuf.FloatValue + (*DeviceEIRPValue)(nil), // 94: ttn.lorawan.v3.DeviceEIRPValue + (Class)(0), // 95: ttn.lorawan.v3.Class + (*MACCommand)(nil), // 96: ttn.lorawan.v3.MACCommand + (MACCommandIdentifier)(0), // 97: ttn.lorawan.v3.MACCommandIdentifier + (*RelayForwardDownlinkReq)(nil), // 98: ttn.lorawan.v3.RelayForwardDownlinkReq + (*EndDeviceIdentifiers)(nil), // 99: ttn.lorawan.v3.EndDeviceIdentifiers + (*Picture)(nil), // 100: ttn.lorawan.v3.Picture + (*RootKeys)(nil), // 101: ttn.lorawan.v3.RootKeys + (*structpb.Struct)(nil), // 102: google.protobuf.Struct + (*wrapperspb.BoolValue)(nil), // 103: google.protobuf.BoolValue + (*LoRaAllianceProfileIdentifiers)(nil), // 104: ttn.lorawan.v3.LoRaAllianceProfileIdentifiers + (*fieldmaskpb.FieldMask)(nil), // 105: google.protobuf.FieldMask + (*ApplicationIdentifiers)(nil), // 106: ttn.lorawan.v3.ApplicationIdentifiers + (*DLSettings)(nil), // 107: ttn.lorawan.v3.DLSettings + (*CFList)(nil), // 108: ttn.lorawan.v3.CFList + (*Message)(nil), // 109: ttn.lorawan.v3.Message + (*DataRate)(nil), // 110: ttn.lorawan.v3.DataRate + (*GatewayIdentifiers)(nil), // 111: ttn.lorawan.v3.GatewayIdentifiers + (DownlinkPathConstraint)(0), // 112: ttn.lorawan.v3.DownlinkPathConstraint + (MType)(0), // 113: ttn.lorawan.v3.MType + (*Location)(nil), // 114: ttn.lorawan.v3.Location } var file_ttn_lorawan_v3_end_device_proto_depIdxs = []int32{ - 59, // 0: ttn.lorawan.v3.Session.keys:type_name -> ttn.lorawan.v3.SessionKeys - 60, // 1: ttn.lorawan.v3.Session.started_at:type_name -> google.protobuf.Timestamp - 61, // 2: ttn.lorawan.v3.Session.queued_application_downlinks:type_name -> ttn.lorawan.v3.ApplicationDownlink - 62, // 3: ttn.lorawan.v3.ServingRelayForwardingLimits.reset_behavior:type_name -> ttn.lorawan.v3.RelayResetLimitCounter - 63, // 4: ttn.lorawan.v3.ServingRelayForwardingLimits.join_requests:type_name -> ttn.lorawan.v3.RelayForwardLimits - 63, // 5: ttn.lorawan.v3.ServingRelayForwardingLimits.notifications:type_name -> ttn.lorawan.v3.RelayForwardLimits - 63, // 6: ttn.lorawan.v3.ServingRelayForwardingLimits.uplink_messages:type_name -> ttn.lorawan.v3.RelayForwardLimits - 63, // 7: ttn.lorawan.v3.ServingRelayForwardingLimits.overall:type_name -> ttn.lorawan.v3.RelayForwardLimits - 64, // 8: ttn.lorawan.v3.RelayUplinkForwardingRule.limits:type_name -> ttn.lorawan.v3.RelayUplinkForwardLimits - 65, // 9: ttn.lorawan.v3.ServingRelayParameters.second_channel:type_name -> ttn.lorawan.v3.RelaySecondChannel - 66, // 10: ttn.lorawan.v3.ServingRelayParameters.cad_periodicity:type_name -> ttn.lorawan.v3.RelayCADPeriodicity + 61, // 0: ttn.lorawan.v3.Session.keys:type_name -> ttn.lorawan.v3.SessionKeys + 62, // 1: ttn.lorawan.v3.Session.started_at:type_name -> google.protobuf.Timestamp + 63, // 2: ttn.lorawan.v3.Session.queued_application_downlinks:type_name -> ttn.lorawan.v3.ApplicationDownlink + 64, // 3: ttn.lorawan.v3.ServingRelayForwardingLimits.reset_behavior:type_name -> ttn.lorawan.v3.RelayResetLimitCounter + 65, // 4: ttn.lorawan.v3.ServingRelayForwardingLimits.join_requests:type_name -> ttn.lorawan.v3.RelayForwardLimits + 65, // 5: ttn.lorawan.v3.ServingRelayForwardingLimits.notifications:type_name -> ttn.lorawan.v3.RelayForwardLimits + 65, // 6: ttn.lorawan.v3.ServingRelayForwardingLimits.uplink_messages:type_name -> ttn.lorawan.v3.RelayForwardLimits + 65, // 7: ttn.lorawan.v3.ServingRelayForwardingLimits.overall:type_name -> ttn.lorawan.v3.RelayForwardLimits + 66, // 8: ttn.lorawan.v3.RelayUplinkForwardingRule.limits:type_name -> ttn.lorawan.v3.RelayUplinkForwardLimits + 67, // 9: ttn.lorawan.v3.ServingRelayParameters.second_channel:type_name -> ttn.lorawan.v3.RelaySecondChannel + 68, // 10: ttn.lorawan.v3.ServingRelayParameters.cad_periodicity:type_name -> ttn.lorawan.v3.RelayCADPeriodicity 4, // 11: ttn.lorawan.v3.ServingRelayParameters.uplink_forwarding_rules:type_name -> ttn.lorawan.v3.RelayUplinkForwardingRule 3, // 12: ttn.lorawan.v3.ServingRelayParameters.limits:type_name -> ttn.lorawan.v3.ServingRelayForwardingLimits - 67, // 13: ttn.lorawan.v3.ServedRelayParameters.always:type_name -> ttn.lorawan.v3.RelayEndDeviceAlwaysMode - 68, // 14: ttn.lorawan.v3.ServedRelayParameters.dynamic:type_name -> ttn.lorawan.v3.RelayEndDeviceDynamicMode - 69, // 15: ttn.lorawan.v3.ServedRelayParameters.end_device_controlled:type_name -> ttn.lorawan.v3.RelayEndDeviceControlledMode - 65, // 16: ttn.lorawan.v3.ServedRelayParameters.second_channel:type_name -> ttn.lorawan.v3.RelaySecondChannel + 69, // 13: ttn.lorawan.v3.ServedRelayParameters.always:type_name -> ttn.lorawan.v3.RelayEndDeviceAlwaysMode + 70, // 14: ttn.lorawan.v3.ServedRelayParameters.dynamic:type_name -> ttn.lorawan.v3.RelayEndDeviceDynamicMode + 71, // 15: ttn.lorawan.v3.ServedRelayParameters.end_device_controlled:type_name -> ttn.lorawan.v3.RelayEndDeviceControlledMode + 67, // 16: ttn.lorawan.v3.ServedRelayParameters.second_channel:type_name -> ttn.lorawan.v3.RelaySecondChannel 5, // 17: ttn.lorawan.v3.RelayParameters.serving:type_name -> ttn.lorawan.v3.ServingRelayParameters 6, // 18: ttn.lorawan.v3.RelayParameters.served:type_name -> ttn.lorawan.v3.ServedRelayParameters - 65, // 19: ttn.lorawan.v3.ServingRelaySettings.second_channel:type_name -> ttn.lorawan.v3.RelaySecondChannel - 70, // 20: ttn.lorawan.v3.ServingRelaySettings.default_channel_index:type_name -> google.protobuf.UInt32Value - 66, // 21: ttn.lorawan.v3.ServingRelaySettings.cad_periodicity:type_name -> ttn.lorawan.v3.RelayCADPeriodicity + 67, // 19: ttn.lorawan.v3.ServingRelaySettings.second_channel:type_name -> ttn.lorawan.v3.RelaySecondChannel + 72, // 20: ttn.lorawan.v3.ServingRelaySettings.default_channel_index:type_name -> google.protobuf.UInt32Value + 68, // 21: ttn.lorawan.v3.ServingRelaySettings.cad_periodicity:type_name -> ttn.lorawan.v3.RelayCADPeriodicity 4, // 22: ttn.lorawan.v3.ServingRelaySettings.uplink_forwarding_rules:type_name -> ttn.lorawan.v3.RelayUplinkForwardingRule 3, // 23: ttn.lorawan.v3.ServingRelaySettings.limits:type_name -> ttn.lorawan.v3.ServingRelayForwardingLimits - 67, // 24: ttn.lorawan.v3.ServedRelaySettings.always:type_name -> ttn.lorawan.v3.RelayEndDeviceAlwaysMode - 68, // 25: ttn.lorawan.v3.ServedRelaySettings.dynamic:type_name -> ttn.lorawan.v3.RelayEndDeviceDynamicMode - 69, // 26: ttn.lorawan.v3.ServedRelaySettings.end_device_controlled:type_name -> ttn.lorawan.v3.RelayEndDeviceControlledMode - 70, // 27: ttn.lorawan.v3.ServedRelaySettings.backoff:type_name -> google.protobuf.UInt32Value - 65, // 28: ttn.lorawan.v3.ServedRelaySettings.second_channel:type_name -> ttn.lorawan.v3.RelaySecondChannel + 69, // 24: ttn.lorawan.v3.ServedRelaySettings.always:type_name -> ttn.lorawan.v3.RelayEndDeviceAlwaysMode + 70, // 25: ttn.lorawan.v3.ServedRelaySettings.dynamic:type_name -> ttn.lorawan.v3.RelayEndDeviceDynamicMode + 71, // 26: ttn.lorawan.v3.ServedRelaySettings.end_device_controlled:type_name -> ttn.lorawan.v3.RelayEndDeviceControlledMode + 72, // 27: ttn.lorawan.v3.ServedRelaySettings.backoff:type_name -> google.protobuf.UInt32Value + 67, // 28: ttn.lorawan.v3.ServedRelaySettings.second_channel:type_name -> ttn.lorawan.v3.RelaySecondChannel 8, // 29: ttn.lorawan.v3.RelaySettings.serving:type_name -> ttn.lorawan.v3.ServingRelaySettings 9, // 30: ttn.lorawan.v3.RelaySettings.served:type_name -> ttn.lorawan.v3.ServedRelaySettings - 71, // 31: ttn.lorawan.v3.MACParameters.adr_data_rate_index:type_name -> ttn.lorawan.v3.DataRateIndex - 72, // 32: ttn.lorawan.v3.MACParameters.rx1_delay:type_name -> ttn.lorawan.v3.RxDelay - 73, // 33: ttn.lorawan.v3.MACParameters.rx1_data_rate_offset:type_name -> ttn.lorawan.v3.DataRateOffset - 71, // 34: ttn.lorawan.v3.MACParameters.rx2_data_rate_index:type_name -> ttn.lorawan.v3.DataRateIndex - 74, // 35: ttn.lorawan.v3.MACParameters.max_duty_cycle:type_name -> ttn.lorawan.v3.AggregatedDutyCycle - 75, // 36: ttn.lorawan.v3.MACParameters.rejoin_time_periodicity:type_name -> ttn.lorawan.v3.RejoinTimeExponent - 76, // 37: ttn.lorawan.v3.MACParameters.rejoin_count_periodicity:type_name -> ttn.lorawan.v3.RejoinCountExponent - 71, // 38: ttn.lorawan.v3.MACParameters.ping_slot_data_rate_index:type_name -> ttn.lorawan.v3.DataRateIndex + 73, // 31: ttn.lorawan.v3.MACParameters.adr_data_rate_index:type_name -> ttn.lorawan.v3.DataRateIndex + 74, // 32: ttn.lorawan.v3.MACParameters.rx1_delay:type_name -> ttn.lorawan.v3.RxDelay + 75, // 33: ttn.lorawan.v3.MACParameters.rx1_data_rate_offset:type_name -> ttn.lorawan.v3.DataRateOffset + 73, // 34: ttn.lorawan.v3.MACParameters.rx2_data_rate_index:type_name -> ttn.lorawan.v3.DataRateIndex + 76, // 35: ttn.lorawan.v3.MACParameters.max_duty_cycle:type_name -> ttn.lorawan.v3.AggregatedDutyCycle + 77, // 36: ttn.lorawan.v3.MACParameters.rejoin_time_periodicity:type_name -> ttn.lorawan.v3.RejoinTimeExponent + 78, // 37: ttn.lorawan.v3.MACParameters.rejoin_count_periodicity:type_name -> ttn.lorawan.v3.RejoinCountExponent + 73, // 38: ttn.lorawan.v3.MACParameters.ping_slot_data_rate_index:type_name -> ttn.lorawan.v3.DataRateIndex 34, // 39: ttn.lorawan.v3.MACParameters.channels:type_name -> ttn.lorawan.v3.MACParameters.Channel 2, // 40: ttn.lorawan.v3.MACParameters.uplink_dwell_time:type_name -> ttn.lorawan.v3.BoolValue 2, // 41: ttn.lorawan.v3.MACParameters.downlink_dwell_time:type_name -> ttn.lorawan.v3.BoolValue - 77, // 42: ttn.lorawan.v3.MACParameters.adr_ack_limit_exponent:type_name -> ttn.lorawan.v3.ADRAckLimitExponentValue - 78, // 43: ttn.lorawan.v3.MACParameters.adr_ack_delay_exponent:type_name -> ttn.lorawan.v3.ADRAckDelayExponentValue - 79, // 44: ttn.lorawan.v3.MACParameters.ping_slot_data_rate_index_value:type_name -> ttn.lorawan.v3.DataRateIndexValue + 79, // 42: ttn.lorawan.v3.MACParameters.adr_ack_limit_exponent:type_name -> ttn.lorawan.v3.ADRAckLimitExponentValue + 80, // 43: ttn.lorawan.v3.MACParameters.adr_ack_delay_exponent:type_name -> ttn.lorawan.v3.ADRAckDelayExponentValue + 81, // 44: ttn.lorawan.v3.MACParameters.ping_slot_data_rate_index_value:type_name -> ttn.lorawan.v3.DataRateIndexValue 7, // 45: ttn.lorawan.v3.MACParameters.relay:type_name -> ttn.lorawan.v3.RelayParameters - 80, // 46: ttn.lorawan.v3.EndDeviceVersion.ids:type_name -> ttn.lorawan.v3.EndDeviceVersionIdentifiers - 81, // 47: ttn.lorawan.v3.EndDeviceVersion.lorawan_version:type_name -> ttn.lorawan.v3.MACVersion - 82, // 48: ttn.lorawan.v3.EndDeviceVersion.lorawan_phy_version:type_name -> ttn.lorawan.v3.PHYVersion + 82, // 46: ttn.lorawan.v3.EndDeviceVersion.ids:type_name -> ttn.lorawan.v3.EndDeviceVersionIdentifiers + 83, // 47: ttn.lorawan.v3.EndDeviceVersion.lorawan_version:type_name -> ttn.lorawan.v3.MACVersion + 84, // 48: ttn.lorawan.v3.EndDeviceVersion.lorawan_phy_version:type_name -> ttn.lorawan.v3.PHYVersion 14, // 49: ttn.lorawan.v3.EndDeviceVersion.default_mac_settings:type_name -> ttn.lorawan.v3.MACSettings - 83, // 50: ttn.lorawan.v3.EndDeviceVersion.default_formatters:type_name -> ttn.lorawan.v3.MessagePayloadFormatters + 85, // 50: ttn.lorawan.v3.EndDeviceVersion.default_formatters:type_name -> ttn.lorawan.v3.MessagePayloadFormatters 35, // 51: ttn.lorawan.v3.ADRSettings.static:type_name -> ttn.lorawan.v3.ADRSettings.StaticMode 36, // 52: ttn.lorawan.v3.ADRSettings.dynamic:type_name -> ttn.lorawan.v3.ADRSettings.DynamicMode 37, // 53: ttn.lorawan.v3.ADRSettings.disabled:type_name -> ttn.lorawan.v3.ADRSettings.DisabledMode - 84, // 54: ttn.lorawan.v3.MACSettings.class_b_timeout:type_name -> google.protobuf.Duration - 85, // 55: ttn.lorawan.v3.MACSettings.ping_slot_periodicity:type_name -> ttn.lorawan.v3.PingSlotPeriodValue - 79, // 56: ttn.lorawan.v3.MACSettings.ping_slot_data_rate_index:type_name -> ttn.lorawan.v3.DataRateIndexValue - 86, // 57: ttn.lorawan.v3.MACSettings.ping_slot_frequency:type_name -> ttn.lorawan.v3.ZeroableFrequencyValue - 86, // 58: ttn.lorawan.v3.MACSettings.beacon_frequency:type_name -> ttn.lorawan.v3.ZeroableFrequencyValue - 84, // 59: ttn.lorawan.v3.MACSettings.class_c_timeout:type_name -> google.protobuf.Duration - 87, // 60: ttn.lorawan.v3.MACSettings.rx1_delay:type_name -> ttn.lorawan.v3.RxDelayValue - 88, // 61: ttn.lorawan.v3.MACSettings.rx1_data_rate_offset:type_name -> ttn.lorawan.v3.DataRateOffsetValue - 79, // 62: ttn.lorawan.v3.MACSettings.rx2_data_rate_index:type_name -> ttn.lorawan.v3.DataRateIndexValue - 89, // 63: ttn.lorawan.v3.MACSettings.rx2_frequency:type_name -> ttn.lorawan.v3.FrequencyValue - 90, // 64: ttn.lorawan.v3.MACSettings.max_duty_cycle:type_name -> ttn.lorawan.v3.AggregatedDutyCycleValue + 86, // 54: ttn.lorawan.v3.MACSettings.class_b_timeout:type_name -> google.protobuf.Duration + 87, // 55: ttn.lorawan.v3.MACSettings.ping_slot_periodicity:type_name -> ttn.lorawan.v3.PingSlotPeriodValue + 81, // 56: ttn.lorawan.v3.MACSettings.ping_slot_data_rate_index:type_name -> ttn.lorawan.v3.DataRateIndexValue + 88, // 57: ttn.lorawan.v3.MACSettings.ping_slot_frequency:type_name -> ttn.lorawan.v3.ZeroableFrequencyValue + 88, // 58: ttn.lorawan.v3.MACSettings.beacon_frequency:type_name -> ttn.lorawan.v3.ZeroableFrequencyValue + 86, // 59: ttn.lorawan.v3.MACSettings.class_c_timeout:type_name -> google.protobuf.Duration + 89, // 60: ttn.lorawan.v3.MACSettings.rx1_delay:type_name -> ttn.lorawan.v3.RxDelayValue + 90, // 61: ttn.lorawan.v3.MACSettings.rx1_data_rate_offset:type_name -> ttn.lorawan.v3.DataRateOffsetValue + 81, // 62: ttn.lorawan.v3.MACSettings.rx2_data_rate_index:type_name -> ttn.lorawan.v3.DataRateIndexValue + 91, // 63: ttn.lorawan.v3.MACSettings.rx2_frequency:type_name -> ttn.lorawan.v3.FrequencyValue + 92, // 64: ttn.lorawan.v3.MACSettings.max_duty_cycle:type_name -> ttn.lorawan.v3.AggregatedDutyCycleValue 2, // 65: ttn.lorawan.v3.MACSettings.supports_32_bit_f_cnt:type_name -> ttn.lorawan.v3.BoolValue 2, // 66: ttn.lorawan.v3.MACSettings.use_adr:type_name -> ttn.lorawan.v3.BoolValue - 91, // 67: ttn.lorawan.v3.MACSettings.adr_margin:type_name -> google.protobuf.FloatValue + 93, // 67: ttn.lorawan.v3.MACSettings.adr_margin:type_name -> google.protobuf.FloatValue 2, // 68: ttn.lorawan.v3.MACSettings.resets_f_cnt:type_name -> ttn.lorawan.v3.BoolValue - 84, // 69: ttn.lorawan.v3.MACSettings.status_time_periodicity:type_name -> google.protobuf.Duration - 70, // 70: ttn.lorawan.v3.MACSettings.status_count_periodicity:type_name -> google.protobuf.UInt32Value - 87, // 71: ttn.lorawan.v3.MACSettings.desired_rx1_delay:type_name -> ttn.lorawan.v3.RxDelayValue - 88, // 72: ttn.lorawan.v3.MACSettings.desired_rx1_data_rate_offset:type_name -> ttn.lorawan.v3.DataRateOffsetValue - 79, // 73: ttn.lorawan.v3.MACSettings.desired_rx2_data_rate_index:type_name -> ttn.lorawan.v3.DataRateIndexValue - 89, // 74: ttn.lorawan.v3.MACSettings.desired_rx2_frequency:type_name -> ttn.lorawan.v3.FrequencyValue - 90, // 75: ttn.lorawan.v3.MACSettings.desired_max_duty_cycle:type_name -> ttn.lorawan.v3.AggregatedDutyCycleValue - 77, // 76: ttn.lorawan.v3.MACSettings.desired_adr_ack_limit_exponent:type_name -> ttn.lorawan.v3.ADRAckLimitExponentValue - 78, // 77: ttn.lorawan.v3.MACSettings.desired_adr_ack_delay_exponent:type_name -> ttn.lorawan.v3.ADRAckDelayExponentValue - 79, // 78: ttn.lorawan.v3.MACSettings.desired_ping_slot_data_rate_index:type_name -> ttn.lorawan.v3.DataRateIndexValue - 86, // 79: ttn.lorawan.v3.MACSettings.desired_ping_slot_frequency:type_name -> ttn.lorawan.v3.ZeroableFrequencyValue - 86, // 80: ttn.lorawan.v3.MACSettings.desired_beacon_frequency:type_name -> ttn.lorawan.v3.ZeroableFrequencyValue - 92, // 81: ttn.lorawan.v3.MACSettings.desired_max_eirp:type_name -> ttn.lorawan.v3.DeviceEIRPValue - 84, // 82: ttn.lorawan.v3.MACSettings.class_b_c_downlink_interval:type_name -> google.protobuf.Duration + 86, // 69: ttn.lorawan.v3.MACSettings.status_time_periodicity:type_name -> google.protobuf.Duration + 72, // 70: ttn.lorawan.v3.MACSettings.status_count_periodicity:type_name -> google.protobuf.UInt32Value + 89, // 71: ttn.lorawan.v3.MACSettings.desired_rx1_delay:type_name -> ttn.lorawan.v3.RxDelayValue + 90, // 72: ttn.lorawan.v3.MACSettings.desired_rx1_data_rate_offset:type_name -> ttn.lorawan.v3.DataRateOffsetValue + 81, // 73: ttn.lorawan.v3.MACSettings.desired_rx2_data_rate_index:type_name -> ttn.lorawan.v3.DataRateIndexValue + 91, // 74: ttn.lorawan.v3.MACSettings.desired_rx2_frequency:type_name -> ttn.lorawan.v3.FrequencyValue + 92, // 75: ttn.lorawan.v3.MACSettings.desired_max_duty_cycle:type_name -> ttn.lorawan.v3.AggregatedDutyCycleValue + 79, // 76: ttn.lorawan.v3.MACSettings.desired_adr_ack_limit_exponent:type_name -> ttn.lorawan.v3.ADRAckLimitExponentValue + 80, // 77: ttn.lorawan.v3.MACSettings.desired_adr_ack_delay_exponent:type_name -> ttn.lorawan.v3.ADRAckDelayExponentValue + 81, // 78: ttn.lorawan.v3.MACSettings.desired_ping_slot_data_rate_index:type_name -> ttn.lorawan.v3.DataRateIndexValue + 88, // 79: ttn.lorawan.v3.MACSettings.desired_ping_slot_frequency:type_name -> ttn.lorawan.v3.ZeroableFrequencyValue + 88, // 80: ttn.lorawan.v3.MACSettings.desired_beacon_frequency:type_name -> ttn.lorawan.v3.ZeroableFrequencyValue + 94, // 81: ttn.lorawan.v3.MACSettings.desired_max_eirp:type_name -> ttn.lorawan.v3.DeviceEIRPValue + 86, // 82: ttn.lorawan.v3.MACSettings.class_b_c_downlink_interval:type_name -> google.protobuf.Duration 2, // 83: ttn.lorawan.v3.MACSettings.uplink_dwell_time:type_name -> ttn.lorawan.v3.BoolValue 2, // 84: ttn.lorawan.v3.MACSettings.downlink_dwell_time:type_name -> ttn.lorawan.v3.BoolValue 13, // 85: ttn.lorawan.v3.MACSettings.adr:type_name -> ttn.lorawan.v3.ADRSettings @@ -6862,115 +7221,134 @@ var file_ttn_lorawan_v3_end_device_proto_depIdxs = []int32{ 10, // 88: ttn.lorawan.v3.MACSettings.desired_relay:type_name -> ttn.lorawan.v3.RelaySettings 11, // 89: ttn.lorawan.v3.MACState.current_parameters:type_name -> ttn.lorawan.v3.MACParameters 11, // 90: ttn.lorawan.v3.MACState.desired_parameters:type_name -> ttn.lorawan.v3.MACParameters - 93, // 91: ttn.lorawan.v3.MACState.device_class:type_name -> ttn.lorawan.v3.Class - 81, // 92: ttn.lorawan.v3.MACState.lorawan_version:type_name -> ttn.lorawan.v3.MACVersion - 60, // 93: ttn.lorawan.v3.MACState.last_confirmed_downlink_at:type_name -> google.protobuf.Timestamp - 85, // 94: ttn.lorawan.v3.MACState.ping_slot_periodicity:type_name -> ttn.lorawan.v3.PingSlotPeriodValue - 61, // 95: ttn.lorawan.v3.MACState.pending_application_downlink:type_name -> ttn.lorawan.v3.ApplicationDownlink - 94, // 96: ttn.lorawan.v3.MACState.queued_responses:type_name -> ttn.lorawan.v3.MACCommand - 94, // 97: ttn.lorawan.v3.MACState.pending_requests:type_name -> ttn.lorawan.v3.MACCommand - 42, // 98: ttn.lorawan.v3.MACState.queued_join_accept:type_name -> ttn.lorawan.v3.MACState.JoinAccept - 41, // 99: ttn.lorawan.v3.MACState.pending_join_request:type_name -> ttn.lorawan.v3.MACState.JoinRequest - 43, // 100: ttn.lorawan.v3.MACState.recent_uplinks:type_name -> ttn.lorawan.v3.MACState.UplinkMessage - 44, // 101: ttn.lorawan.v3.MACState.recent_downlinks:type_name -> ttn.lorawan.v3.MACState.DownlinkMessage - 60, // 102: ttn.lorawan.v3.MACState.last_network_initiated_downlink_at:type_name -> google.protobuf.Timestamp - 71, // 103: ttn.lorawan.v3.MACState.rejected_adr_data_rate_indexes:type_name -> ttn.lorawan.v3.DataRateIndex - 60, // 104: ttn.lorawan.v3.MACState.last_downlink_at:type_name -> google.protobuf.Timestamp - 47, // 105: ttn.lorawan.v3.MACState.rejected_data_rate_ranges:type_name -> ttn.lorawan.v3.MACState.RejectedDataRateRangesEntry - 95, // 106: ttn.lorawan.v3.MACState.recent_mac_command_identifiers:type_name -> ttn.lorawan.v3.MACCommandIdentifier - 96, // 107: ttn.lorawan.v3.MACState.pending_relay_downlink:type_name -> ttn.lorawan.v3.RelayForwardDownlinkReq - 60, // 108: ttn.lorawan.v3.EndDeviceAuthenticationCode.valid_from:type_name -> google.protobuf.Timestamp - 60, // 109: ttn.lorawan.v3.EndDeviceAuthenticationCode.valid_to:type_name -> google.protobuf.Timestamp - 97, // 110: ttn.lorawan.v3.EndDevice.ids:type_name -> ttn.lorawan.v3.EndDeviceIdentifiers - 60, // 111: ttn.lorawan.v3.EndDevice.created_at:type_name -> google.protobuf.Timestamp - 60, // 112: ttn.lorawan.v3.EndDevice.updated_at:type_name -> google.protobuf.Timestamp - 55, // 113: ttn.lorawan.v3.EndDevice.attributes:type_name -> ttn.lorawan.v3.EndDevice.AttributesEntry - 80, // 114: ttn.lorawan.v3.EndDevice.version_ids:type_name -> ttn.lorawan.v3.EndDeviceVersionIdentifiers - 56, // 115: ttn.lorawan.v3.EndDevice.locations:type_name -> ttn.lorawan.v3.EndDevice.LocationsEntry - 98, // 116: ttn.lorawan.v3.EndDevice.picture:type_name -> ttn.lorawan.v3.Picture - 81, // 117: ttn.lorawan.v3.EndDevice.lorawan_version:type_name -> ttn.lorawan.v3.MACVersion - 82, // 118: ttn.lorawan.v3.EndDevice.lorawan_phy_version:type_name -> ttn.lorawan.v3.PHYVersion - 99, // 119: ttn.lorawan.v3.EndDevice.root_keys:type_name -> ttn.lorawan.v3.RootKeys + 95, // 91: ttn.lorawan.v3.MACState.device_class:type_name -> ttn.lorawan.v3.Class + 83, // 92: ttn.lorawan.v3.MACState.lorawan_version:type_name -> ttn.lorawan.v3.MACVersion + 62, // 93: ttn.lorawan.v3.MACState.last_confirmed_downlink_at:type_name -> google.protobuf.Timestamp + 87, // 94: ttn.lorawan.v3.MACState.ping_slot_periodicity:type_name -> ttn.lorawan.v3.PingSlotPeriodValue + 63, // 95: ttn.lorawan.v3.MACState.pending_application_downlink:type_name -> ttn.lorawan.v3.ApplicationDownlink + 96, // 96: ttn.lorawan.v3.MACState.queued_responses:type_name -> ttn.lorawan.v3.MACCommand + 96, // 97: ttn.lorawan.v3.MACState.pending_requests:type_name -> ttn.lorawan.v3.MACCommand + 44, // 98: ttn.lorawan.v3.MACState.queued_join_accept:type_name -> ttn.lorawan.v3.MACState.JoinAccept + 43, // 99: ttn.lorawan.v3.MACState.pending_join_request:type_name -> ttn.lorawan.v3.MACState.JoinRequest + 45, // 100: ttn.lorawan.v3.MACState.recent_uplinks:type_name -> ttn.lorawan.v3.MACState.UplinkMessage + 46, // 101: ttn.lorawan.v3.MACState.recent_downlinks:type_name -> ttn.lorawan.v3.MACState.DownlinkMessage + 62, // 102: ttn.lorawan.v3.MACState.last_network_initiated_downlink_at:type_name -> google.protobuf.Timestamp + 73, // 103: ttn.lorawan.v3.MACState.rejected_adr_data_rate_indexes:type_name -> ttn.lorawan.v3.DataRateIndex + 62, // 104: ttn.lorawan.v3.MACState.last_downlink_at:type_name -> google.protobuf.Timestamp + 49, // 105: ttn.lorawan.v3.MACState.rejected_data_rate_ranges:type_name -> ttn.lorawan.v3.MACState.RejectedDataRateRangesEntry + 97, // 106: ttn.lorawan.v3.MACState.recent_mac_command_identifiers:type_name -> ttn.lorawan.v3.MACCommandIdentifier + 98, // 107: ttn.lorawan.v3.MACState.pending_relay_downlink:type_name -> ttn.lorawan.v3.RelayForwardDownlinkReq + 62, // 108: ttn.lorawan.v3.EndDeviceAuthenticationCode.valid_from:type_name -> google.protobuf.Timestamp + 62, // 109: ttn.lorawan.v3.EndDeviceAuthenticationCode.valid_to:type_name -> google.protobuf.Timestamp + 99, // 110: ttn.lorawan.v3.EndDevice.ids:type_name -> ttn.lorawan.v3.EndDeviceIdentifiers + 62, // 111: ttn.lorawan.v3.EndDevice.created_at:type_name -> google.protobuf.Timestamp + 62, // 112: ttn.lorawan.v3.EndDevice.updated_at:type_name -> google.protobuf.Timestamp + 57, // 113: ttn.lorawan.v3.EndDevice.attributes:type_name -> ttn.lorawan.v3.EndDevice.AttributesEntry + 82, // 114: ttn.lorawan.v3.EndDevice.version_ids:type_name -> ttn.lorawan.v3.EndDeviceVersionIdentifiers + 58, // 115: ttn.lorawan.v3.EndDevice.locations:type_name -> ttn.lorawan.v3.EndDevice.LocationsEntry + 100, // 116: ttn.lorawan.v3.EndDevice.picture:type_name -> ttn.lorawan.v3.Picture + 83, // 117: ttn.lorawan.v3.EndDevice.lorawan_version:type_name -> ttn.lorawan.v3.MACVersion + 84, // 118: ttn.lorawan.v3.EndDevice.lorawan_phy_version:type_name -> ttn.lorawan.v3.PHYVersion + 101, // 119: ttn.lorawan.v3.EndDevice.root_keys:type_name -> ttn.lorawan.v3.RootKeys 14, // 120: ttn.lorawan.v3.EndDevice.mac_settings:type_name -> ttn.lorawan.v3.MACSettings 15, // 121: ttn.lorawan.v3.EndDevice.mac_state:type_name -> ttn.lorawan.v3.MACState 15, // 122: ttn.lorawan.v3.EndDevice.pending_mac_state:type_name -> ttn.lorawan.v3.MACState 1, // 123: ttn.lorawan.v3.EndDevice.session:type_name -> ttn.lorawan.v3.Session 1, // 124: ttn.lorawan.v3.EndDevice.pending_session:type_name -> ttn.lorawan.v3.Session - 60, // 125: ttn.lorawan.v3.EndDevice.last_dev_status_received_at:type_name -> google.protobuf.Timestamp + 62, // 125: ttn.lorawan.v3.EndDevice.last_dev_status_received_at:type_name -> google.protobuf.Timestamp 0, // 126: ttn.lorawan.v3.EndDevice.power_state:type_name -> ttn.lorawan.v3.PowerState - 91, // 127: ttn.lorawan.v3.EndDevice.battery_percentage:type_name -> google.protobuf.FloatValue - 61, // 128: ttn.lorawan.v3.EndDevice.queued_application_downlinks:type_name -> ttn.lorawan.v3.ApplicationDownlink - 83, // 129: ttn.lorawan.v3.EndDevice.formatters:type_name -> ttn.lorawan.v3.MessagePayloadFormatters - 100, // 130: ttn.lorawan.v3.EndDevice.provisioning_data:type_name -> google.protobuf.Struct + 93, // 127: ttn.lorawan.v3.EndDevice.battery_percentage:type_name -> google.protobuf.FloatValue + 63, // 128: ttn.lorawan.v3.EndDevice.queued_application_downlinks:type_name -> ttn.lorawan.v3.ApplicationDownlink + 85, // 129: ttn.lorawan.v3.EndDevice.formatters:type_name -> ttn.lorawan.v3.MessagePayloadFormatters + 102, // 130: ttn.lorawan.v3.EndDevice.provisioning_data:type_name -> google.protobuf.Struct 16, // 131: ttn.lorawan.v3.EndDevice.claim_authentication_code:type_name -> ttn.lorawan.v3.EndDeviceAuthenticationCode - 101, // 132: ttn.lorawan.v3.EndDevice.skip_payload_crypto_override:type_name -> google.protobuf.BoolValue - 60, // 133: ttn.lorawan.v3.EndDevice.activated_at:type_name -> google.protobuf.Timestamp - 60, // 134: ttn.lorawan.v3.EndDevice.last_seen_at:type_name -> google.protobuf.Timestamp - 102, // 135: ttn.lorawan.v3.EndDevice.lora_alliance_profile_ids:type_name -> ttn.lorawan.v3.LoRaAllianceProfileIdentifiers + 103, // 132: ttn.lorawan.v3.EndDevice.skip_payload_crypto_override:type_name -> google.protobuf.BoolValue + 62, // 133: ttn.lorawan.v3.EndDevice.activated_at:type_name -> google.protobuf.Timestamp + 62, // 134: ttn.lorawan.v3.EndDevice.last_seen_at:type_name -> google.protobuf.Timestamp + 104, // 135: ttn.lorawan.v3.EndDevice.lora_alliance_profile_ids:type_name -> ttn.lorawan.v3.LoRaAllianceProfileIdentifiers 17, // 136: ttn.lorawan.v3.EndDevices.end_devices:type_name -> ttn.lorawan.v3.EndDevice 17, // 137: ttn.lorawan.v3.CreateEndDeviceRequest.end_device:type_name -> ttn.lorawan.v3.EndDevice 17, // 138: ttn.lorawan.v3.UpdateEndDeviceRequest.end_device:type_name -> ttn.lorawan.v3.EndDevice - 103, // 139: ttn.lorawan.v3.UpdateEndDeviceRequest.field_mask:type_name -> google.protobuf.FieldMask - 57, // 140: ttn.lorawan.v3.BatchUpdateEndDeviceLastSeenRequest.updates:type_name -> ttn.lorawan.v3.BatchUpdateEndDeviceLastSeenRequest.EndDeviceLastSeenUpdate - 97, // 141: ttn.lorawan.v3.GetEndDeviceRequest.end_device_ids:type_name -> ttn.lorawan.v3.EndDeviceIdentifiers - 103, // 142: ttn.lorawan.v3.GetEndDeviceRequest.field_mask:type_name -> google.protobuf.FieldMask - 104, // 143: ttn.lorawan.v3.ListEndDevicesRequest.application_ids:type_name -> ttn.lorawan.v3.ApplicationIdentifiers - 103, // 144: ttn.lorawan.v3.ListEndDevicesRequest.field_mask:type_name -> google.protobuf.FieldMask + 105, // 139: ttn.lorawan.v3.UpdateEndDeviceRequest.field_mask:type_name -> google.protobuf.FieldMask + 59, // 140: ttn.lorawan.v3.BatchUpdateEndDeviceLastSeenRequest.updates:type_name -> ttn.lorawan.v3.BatchUpdateEndDeviceLastSeenRequest.EndDeviceLastSeenUpdate + 99, // 141: ttn.lorawan.v3.GetEndDeviceRequest.end_device_ids:type_name -> ttn.lorawan.v3.EndDeviceIdentifiers + 105, // 142: ttn.lorawan.v3.GetEndDeviceRequest.field_mask:type_name -> google.protobuf.FieldMask + 106, // 143: ttn.lorawan.v3.ListEndDevicesRequest.application_ids:type_name -> ttn.lorawan.v3.ApplicationIdentifiers + 105, // 144: ttn.lorawan.v3.ListEndDevicesRequest.field_mask:type_name -> google.protobuf.FieldMask 17, // 145: ttn.lorawan.v3.SetEndDeviceRequest.end_device:type_name -> ttn.lorawan.v3.EndDevice - 103, // 146: ttn.lorawan.v3.SetEndDeviceRequest.field_mask:type_name -> google.protobuf.FieldMask - 97, // 147: ttn.lorawan.v3.ResetAndGetEndDeviceRequest.end_device_ids:type_name -> ttn.lorawan.v3.EndDeviceIdentifiers - 103, // 148: ttn.lorawan.v3.ResetAndGetEndDeviceRequest.field_mask:type_name -> google.protobuf.FieldMask + 105, // 146: ttn.lorawan.v3.SetEndDeviceRequest.field_mask:type_name -> google.protobuf.FieldMask + 99, // 147: ttn.lorawan.v3.ResetAndGetEndDeviceRequest.end_device_ids:type_name -> ttn.lorawan.v3.EndDeviceIdentifiers + 105, // 148: ttn.lorawan.v3.ResetAndGetEndDeviceRequest.field_mask:type_name -> google.protobuf.FieldMask 17, // 149: ttn.lorawan.v3.EndDeviceTemplate.end_device:type_name -> ttn.lorawan.v3.EndDevice - 103, // 150: ttn.lorawan.v3.EndDeviceTemplate.field_mask:type_name -> google.protobuf.FieldMask - 58, // 151: ttn.lorawan.v3.EndDeviceTemplateFormats.formats:type_name -> ttn.lorawan.v3.EndDeviceTemplateFormats.FormatsEntry - 80, // 152: ttn.lorawan.v3.ConvertEndDeviceTemplateRequest.end_device_version_ids:type_name -> ttn.lorawan.v3.EndDeviceVersionIdentifiers - 104, // 153: ttn.lorawan.v3.BatchDeleteEndDevicesRequest.application_ids:type_name -> ttn.lorawan.v3.ApplicationIdentifiers - 104, // 154: ttn.lorawan.v3.BatchGetEndDevicesRequest.application_ids:type_name -> ttn.lorawan.v3.ApplicationIdentifiers - 103, // 155: ttn.lorawan.v3.BatchGetEndDevicesRequest.field_mask:type_name -> google.protobuf.FieldMask - 71, // 156: ttn.lorawan.v3.MACParameters.Channel.min_data_rate_index:type_name -> ttn.lorawan.v3.DataRateIndex - 71, // 157: ttn.lorawan.v3.MACParameters.Channel.max_data_rate_index:type_name -> ttn.lorawan.v3.DataRateIndex - 71, // 158: ttn.lorawan.v3.ADRSettings.StaticMode.data_rate_index:type_name -> ttn.lorawan.v3.DataRateIndex - 91, // 159: ttn.lorawan.v3.ADRSettings.DynamicMode.margin:type_name -> google.protobuf.FloatValue - 79, // 160: ttn.lorawan.v3.ADRSettings.DynamicMode.min_data_rate_index:type_name -> ttn.lorawan.v3.DataRateIndexValue - 79, // 161: ttn.lorawan.v3.ADRSettings.DynamicMode.max_data_rate_index:type_name -> ttn.lorawan.v3.DataRateIndexValue - 70, // 162: ttn.lorawan.v3.ADRSettings.DynamicMode.min_tx_power_index:type_name -> google.protobuf.UInt32Value - 70, // 163: ttn.lorawan.v3.ADRSettings.DynamicMode.max_tx_power_index:type_name -> google.protobuf.UInt32Value - 70, // 164: ttn.lorawan.v3.ADRSettings.DynamicMode.min_nb_trans:type_name -> google.protobuf.UInt32Value - 70, // 165: ttn.lorawan.v3.ADRSettings.DynamicMode.max_nb_trans:type_name -> google.protobuf.UInt32Value + 105, // 150: ttn.lorawan.v3.EndDeviceTemplate.field_mask:type_name -> google.protobuf.FieldMask + 60, // 151: ttn.lorawan.v3.EndDeviceTemplateFormats.formats:type_name -> ttn.lorawan.v3.EndDeviceTemplateFormats.FormatsEntry + 82, // 152: ttn.lorawan.v3.ConvertEndDeviceTemplateRequest.end_device_version_ids:type_name -> ttn.lorawan.v3.EndDeviceVersionIdentifiers + 106, // 153: ttn.lorawan.v3.BatchDeleteEndDevicesRequest.application_ids:type_name -> ttn.lorawan.v3.ApplicationIdentifiers + 106, // 154: ttn.lorawan.v3.BatchGetEndDevicesRequest.application_ids:type_name -> ttn.lorawan.v3.ApplicationIdentifiers + 105, // 155: ttn.lorawan.v3.BatchGetEndDevicesRequest.field_mask:type_name -> google.protobuf.FieldMask + 73, // 156: ttn.lorawan.v3.MACParameters.Channel.min_data_rate_index:type_name -> ttn.lorawan.v3.DataRateIndex + 73, // 157: ttn.lorawan.v3.MACParameters.Channel.max_data_rate_index:type_name -> ttn.lorawan.v3.DataRateIndex + 73, // 158: ttn.lorawan.v3.ADRSettings.StaticMode.data_rate_index:type_name -> ttn.lorawan.v3.DataRateIndex + 93, // 159: ttn.lorawan.v3.ADRSettings.DynamicMode.margin:type_name -> google.protobuf.FloatValue + 81, // 160: ttn.lorawan.v3.ADRSettings.DynamicMode.min_data_rate_index:type_name -> ttn.lorawan.v3.DataRateIndexValue + 81, // 161: ttn.lorawan.v3.ADRSettings.DynamicMode.max_data_rate_index:type_name -> ttn.lorawan.v3.DataRateIndexValue + 72, // 162: ttn.lorawan.v3.ADRSettings.DynamicMode.min_tx_power_index:type_name -> google.protobuf.UInt32Value + 72, // 163: ttn.lorawan.v3.ADRSettings.DynamicMode.max_tx_power_index:type_name -> google.protobuf.UInt32Value + 72, // 164: ttn.lorawan.v3.ADRSettings.DynamicMode.min_nb_trans:type_name -> google.protobuf.UInt32Value + 72, // 165: ttn.lorawan.v3.ADRSettings.DynamicMode.max_nb_trans:type_name -> google.protobuf.UInt32Value 38, // 166: ttn.lorawan.v3.ADRSettings.DynamicMode.channel_steering:type_name -> ttn.lorawan.v3.ADRSettings.DynamicMode.ChannelSteeringSettings - 39, // 167: ttn.lorawan.v3.ADRSettings.DynamicMode.ChannelSteeringSettings.lora_narrow:type_name -> ttn.lorawan.v3.ADRSettings.DynamicMode.ChannelSteeringSettings.LoRaNarrowMode - 40, // 168: ttn.lorawan.v3.ADRSettings.DynamicMode.ChannelSteeringSettings.disabled:type_name -> ttn.lorawan.v3.ADRSettings.DynamicMode.ChannelSteeringSettings.DisabledMode - 105, // 169: ttn.lorawan.v3.MACState.JoinRequest.downlink_settings:type_name -> ttn.lorawan.v3.DLSettings - 72, // 170: ttn.lorawan.v3.MACState.JoinRequest.rx_delay:type_name -> ttn.lorawan.v3.RxDelay - 106, // 171: ttn.lorawan.v3.MACState.JoinRequest.cf_list:type_name -> ttn.lorawan.v3.CFList - 41, // 172: ttn.lorawan.v3.MACState.JoinAccept.request:type_name -> ttn.lorawan.v3.MACState.JoinRequest - 59, // 173: ttn.lorawan.v3.MACState.JoinAccept.keys:type_name -> ttn.lorawan.v3.SessionKeys - 107, // 174: ttn.lorawan.v3.MACState.UplinkMessage.payload:type_name -> ttn.lorawan.v3.Message - 48, // 175: ttn.lorawan.v3.MACState.UplinkMessage.settings:type_name -> ttn.lorawan.v3.MACState.UplinkMessage.TxSettings - 49, // 176: ttn.lorawan.v3.MACState.UplinkMessage.rx_metadata:type_name -> ttn.lorawan.v3.MACState.UplinkMessage.RxMetadata - 60, // 177: ttn.lorawan.v3.MACState.UplinkMessage.received_at:type_name -> google.protobuf.Timestamp - 52, // 178: ttn.lorawan.v3.MACState.DownlinkMessage.payload:type_name -> ttn.lorawan.v3.MACState.DownlinkMessage.Message - 71, // 179: ttn.lorawan.v3.MACState.DataRateRange.min_data_rate_index:type_name -> ttn.lorawan.v3.DataRateIndex - 71, // 180: ttn.lorawan.v3.MACState.DataRateRange.max_data_rate_index:type_name -> ttn.lorawan.v3.DataRateIndex - 45, // 181: ttn.lorawan.v3.MACState.DataRateRanges.ranges:type_name -> ttn.lorawan.v3.MACState.DataRateRange - 46, // 182: ttn.lorawan.v3.MACState.RejectedDataRateRangesEntry.value:type_name -> ttn.lorawan.v3.MACState.DataRateRanges - 108, // 183: ttn.lorawan.v3.MACState.UplinkMessage.TxSettings.data_rate:type_name -> ttn.lorawan.v3.DataRate - 109, // 184: ttn.lorawan.v3.MACState.UplinkMessage.RxMetadata.gateway_ids:type_name -> ttn.lorawan.v3.GatewayIdentifiers - 110, // 185: ttn.lorawan.v3.MACState.UplinkMessage.RxMetadata.downlink_path_constraint:type_name -> ttn.lorawan.v3.DownlinkPathConstraint - 50, // 186: ttn.lorawan.v3.MACState.UplinkMessage.RxMetadata.packet_broker:type_name -> ttn.lorawan.v3.MACState.UplinkMessage.RxMetadata.PacketBrokerMetadata - 51, // 187: ttn.lorawan.v3.MACState.UplinkMessage.RxMetadata.relay:type_name -> ttn.lorawan.v3.MACState.UplinkMessage.RxMetadata.RelayMetadata - 53, // 188: ttn.lorawan.v3.MACState.DownlinkMessage.Message.m_hdr:type_name -> ttn.lorawan.v3.MACState.DownlinkMessage.Message.MHDR - 54, // 189: ttn.lorawan.v3.MACState.DownlinkMessage.Message.mac_payload:type_name -> ttn.lorawan.v3.MACState.DownlinkMessage.Message.MACPayload - 111, // 190: ttn.lorawan.v3.MACState.DownlinkMessage.Message.MHDR.m_type:type_name -> ttn.lorawan.v3.MType - 112, // 191: ttn.lorawan.v3.EndDevice.LocationsEntry.value:type_name -> ttn.lorawan.v3.Location - 97, // 192: ttn.lorawan.v3.BatchUpdateEndDeviceLastSeenRequest.EndDeviceLastSeenUpdate.ids:type_name -> ttn.lorawan.v3.EndDeviceIdentifiers - 60, // 193: ttn.lorawan.v3.BatchUpdateEndDeviceLastSeenRequest.EndDeviceLastSeenUpdate.last_seen_at:type_name -> google.protobuf.Timestamp - 29, // 194: ttn.lorawan.v3.EndDeviceTemplateFormats.FormatsEntry.value:type_name -> ttn.lorawan.v3.EndDeviceTemplateFormat - 195, // [195:195] is the sub-list for method output_type - 195, // [195:195] is the sub-list for method input_type - 195, // [195:195] is the sub-list for extension type_name - 195, // [195:195] is the sub-list for extension extendee - 0, // [0:195] is the sub-list for field type_name + 40, // 167: ttn.lorawan.v3.ADRSettings.DynamicMode.overrides:type_name -> ttn.lorawan.v3.ADRSettings.DynamicMode.Overrides + 41, // 168: ttn.lorawan.v3.ADRSettings.DynamicMode.ChannelSteeringSettings.lora_narrow:type_name -> ttn.lorawan.v3.ADRSettings.DynamicMode.ChannelSteeringSettings.LoRaNarrowMode + 42, // 169: ttn.lorawan.v3.ADRSettings.DynamicMode.ChannelSteeringSettings.disabled:type_name -> ttn.lorawan.v3.ADRSettings.DynamicMode.ChannelSteeringSettings.DisabledMode + 72, // 170: ttn.lorawan.v3.ADRSettings.DynamicMode.PerDataRateIndexOverride.min_nb_trans:type_name -> google.protobuf.UInt32Value + 72, // 171: ttn.lorawan.v3.ADRSettings.DynamicMode.PerDataRateIndexOverride.max_nb_trans:type_name -> google.protobuf.UInt32Value + 39, // 172: ttn.lorawan.v3.ADRSettings.DynamicMode.Overrides.data_rate_0:type_name -> ttn.lorawan.v3.ADRSettings.DynamicMode.PerDataRateIndexOverride + 39, // 173: ttn.lorawan.v3.ADRSettings.DynamicMode.Overrides.data_rate_1:type_name -> ttn.lorawan.v3.ADRSettings.DynamicMode.PerDataRateIndexOverride + 39, // 174: ttn.lorawan.v3.ADRSettings.DynamicMode.Overrides.data_rate_2:type_name -> ttn.lorawan.v3.ADRSettings.DynamicMode.PerDataRateIndexOverride + 39, // 175: ttn.lorawan.v3.ADRSettings.DynamicMode.Overrides.data_rate_3:type_name -> ttn.lorawan.v3.ADRSettings.DynamicMode.PerDataRateIndexOverride + 39, // 176: ttn.lorawan.v3.ADRSettings.DynamicMode.Overrides.data_rate_4:type_name -> ttn.lorawan.v3.ADRSettings.DynamicMode.PerDataRateIndexOverride + 39, // 177: ttn.lorawan.v3.ADRSettings.DynamicMode.Overrides.data_rate_5:type_name -> ttn.lorawan.v3.ADRSettings.DynamicMode.PerDataRateIndexOverride + 39, // 178: ttn.lorawan.v3.ADRSettings.DynamicMode.Overrides.data_rate_6:type_name -> ttn.lorawan.v3.ADRSettings.DynamicMode.PerDataRateIndexOverride + 39, // 179: ttn.lorawan.v3.ADRSettings.DynamicMode.Overrides.data_rate_7:type_name -> ttn.lorawan.v3.ADRSettings.DynamicMode.PerDataRateIndexOverride + 39, // 180: ttn.lorawan.v3.ADRSettings.DynamicMode.Overrides.data_rate_8:type_name -> ttn.lorawan.v3.ADRSettings.DynamicMode.PerDataRateIndexOverride + 39, // 181: ttn.lorawan.v3.ADRSettings.DynamicMode.Overrides.data_rate_9:type_name -> ttn.lorawan.v3.ADRSettings.DynamicMode.PerDataRateIndexOverride + 39, // 182: ttn.lorawan.v3.ADRSettings.DynamicMode.Overrides.data_rate_10:type_name -> ttn.lorawan.v3.ADRSettings.DynamicMode.PerDataRateIndexOverride + 39, // 183: ttn.lorawan.v3.ADRSettings.DynamicMode.Overrides.data_rate_11:type_name -> ttn.lorawan.v3.ADRSettings.DynamicMode.PerDataRateIndexOverride + 39, // 184: ttn.lorawan.v3.ADRSettings.DynamicMode.Overrides.data_rate_12:type_name -> ttn.lorawan.v3.ADRSettings.DynamicMode.PerDataRateIndexOverride + 39, // 185: ttn.lorawan.v3.ADRSettings.DynamicMode.Overrides.data_rate_13:type_name -> ttn.lorawan.v3.ADRSettings.DynamicMode.PerDataRateIndexOverride + 39, // 186: ttn.lorawan.v3.ADRSettings.DynamicMode.Overrides.data_rate_14:type_name -> ttn.lorawan.v3.ADRSettings.DynamicMode.PerDataRateIndexOverride + 39, // 187: ttn.lorawan.v3.ADRSettings.DynamicMode.Overrides.data_rate_15:type_name -> ttn.lorawan.v3.ADRSettings.DynamicMode.PerDataRateIndexOverride + 107, // 188: ttn.lorawan.v3.MACState.JoinRequest.downlink_settings:type_name -> ttn.lorawan.v3.DLSettings + 74, // 189: ttn.lorawan.v3.MACState.JoinRequest.rx_delay:type_name -> ttn.lorawan.v3.RxDelay + 108, // 190: ttn.lorawan.v3.MACState.JoinRequest.cf_list:type_name -> ttn.lorawan.v3.CFList + 43, // 191: ttn.lorawan.v3.MACState.JoinAccept.request:type_name -> ttn.lorawan.v3.MACState.JoinRequest + 61, // 192: ttn.lorawan.v3.MACState.JoinAccept.keys:type_name -> ttn.lorawan.v3.SessionKeys + 109, // 193: ttn.lorawan.v3.MACState.UplinkMessage.payload:type_name -> ttn.lorawan.v3.Message + 50, // 194: ttn.lorawan.v3.MACState.UplinkMessage.settings:type_name -> ttn.lorawan.v3.MACState.UplinkMessage.TxSettings + 51, // 195: ttn.lorawan.v3.MACState.UplinkMessage.rx_metadata:type_name -> ttn.lorawan.v3.MACState.UplinkMessage.RxMetadata + 62, // 196: ttn.lorawan.v3.MACState.UplinkMessage.received_at:type_name -> google.protobuf.Timestamp + 54, // 197: ttn.lorawan.v3.MACState.DownlinkMessage.payload:type_name -> ttn.lorawan.v3.MACState.DownlinkMessage.Message + 73, // 198: ttn.lorawan.v3.MACState.DataRateRange.min_data_rate_index:type_name -> ttn.lorawan.v3.DataRateIndex + 73, // 199: ttn.lorawan.v3.MACState.DataRateRange.max_data_rate_index:type_name -> ttn.lorawan.v3.DataRateIndex + 47, // 200: ttn.lorawan.v3.MACState.DataRateRanges.ranges:type_name -> ttn.lorawan.v3.MACState.DataRateRange + 48, // 201: ttn.lorawan.v3.MACState.RejectedDataRateRangesEntry.value:type_name -> ttn.lorawan.v3.MACState.DataRateRanges + 110, // 202: ttn.lorawan.v3.MACState.UplinkMessage.TxSettings.data_rate:type_name -> ttn.lorawan.v3.DataRate + 111, // 203: ttn.lorawan.v3.MACState.UplinkMessage.RxMetadata.gateway_ids:type_name -> ttn.lorawan.v3.GatewayIdentifiers + 112, // 204: ttn.lorawan.v3.MACState.UplinkMessage.RxMetadata.downlink_path_constraint:type_name -> ttn.lorawan.v3.DownlinkPathConstraint + 52, // 205: ttn.lorawan.v3.MACState.UplinkMessage.RxMetadata.packet_broker:type_name -> ttn.lorawan.v3.MACState.UplinkMessage.RxMetadata.PacketBrokerMetadata + 53, // 206: ttn.lorawan.v3.MACState.UplinkMessage.RxMetadata.relay:type_name -> ttn.lorawan.v3.MACState.UplinkMessage.RxMetadata.RelayMetadata + 55, // 207: ttn.lorawan.v3.MACState.DownlinkMessage.Message.m_hdr:type_name -> ttn.lorawan.v3.MACState.DownlinkMessage.Message.MHDR + 56, // 208: ttn.lorawan.v3.MACState.DownlinkMessage.Message.mac_payload:type_name -> ttn.lorawan.v3.MACState.DownlinkMessage.Message.MACPayload + 113, // 209: ttn.lorawan.v3.MACState.DownlinkMessage.Message.MHDR.m_type:type_name -> ttn.lorawan.v3.MType + 114, // 210: ttn.lorawan.v3.EndDevice.LocationsEntry.value:type_name -> ttn.lorawan.v3.Location + 99, // 211: ttn.lorawan.v3.BatchUpdateEndDeviceLastSeenRequest.EndDeviceLastSeenUpdate.ids:type_name -> ttn.lorawan.v3.EndDeviceIdentifiers + 62, // 212: ttn.lorawan.v3.BatchUpdateEndDeviceLastSeenRequest.EndDeviceLastSeenUpdate.last_seen_at:type_name -> google.protobuf.Timestamp + 29, // 213: ttn.lorawan.v3.EndDeviceTemplateFormats.FormatsEntry.value:type_name -> ttn.lorawan.v3.EndDeviceTemplateFormat + 214, // [214:214] is the sub-list for method output_type + 214, // [214:214] is the sub-list for method input_type + 214, // [214:214] is the sub-list for extension type_name + 214, // [214:214] is the sub-list for extension extendee + 0, // [0:214] is the sub-list for field type_name } func init() { file_ttn_lorawan_v3_end_device_proto_init() } @@ -7443,7 +7821,7 @@ func file_ttn_lorawan_v3_end_device_proto_init() { } } file_ttn_lorawan_v3_end_device_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ADRSettings_DynamicMode_ChannelSteeringSettings_LoRaNarrowMode); i { + switch v := v.(*ADRSettings_DynamicMode_PerDataRateIndexOverride); i { case 0: return &v.state case 1: @@ -7455,7 +7833,7 @@ func file_ttn_lorawan_v3_end_device_proto_init() { } } file_ttn_lorawan_v3_end_device_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ADRSettings_DynamicMode_ChannelSteeringSettings_DisabledMode); i { + switch v := v.(*ADRSettings_DynamicMode_Overrides); i { case 0: return &v.state case 1: @@ -7467,7 +7845,7 @@ func file_ttn_lorawan_v3_end_device_proto_init() { } } file_ttn_lorawan_v3_end_device_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MACState_JoinRequest); i { + switch v := v.(*ADRSettings_DynamicMode_ChannelSteeringSettings_LoRaNarrowMode); i { case 0: return &v.state case 1: @@ -7479,7 +7857,7 @@ func file_ttn_lorawan_v3_end_device_proto_init() { } } file_ttn_lorawan_v3_end_device_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MACState_JoinAccept); i { + switch v := v.(*ADRSettings_DynamicMode_ChannelSteeringSettings_DisabledMode); i { case 0: return &v.state case 1: @@ -7491,7 +7869,7 @@ func file_ttn_lorawan_v3_end_device_proto_init() { } } file_ttn_lorawan_v3_end_device_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MACState_UplinkMessage); i { + switch v := v.(*MACState_JoinRequest); i { case 0: return &v.state case 1: @@ -7503,7 +7881,7 @@ func file_ttn_lorawan_v3_end_device_proto_init() { } } file_ttn_lorawan_v3_end_device_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MACState_DownlinkMessage); i { + switch v := v.(*MACState_JoinAccept); i { case 0: return &v.state case 1: @@ -7515,7 +7893,7 @@ func file_ttn_lorawan_v3_end_device_proto_init() { } } file_ttn_lorawan_v3_end_device_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MACState_DataRateRange); i { + switch v := v.(*MACState_UplinkMessage); i { case 0: return &v.state case 1: @@ -7527,7 +7905,19 @@ func file_ttn_lorawan_v3_end_device_proto_init() { } } file_ttn_lorawan_v3_end_device_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MACState_DataRateRanges); i { + switch v := v.(*MACState_DownlinkMessage); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_ttn_lorawan_v3_end_device_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MACState_DataRateRange); i { case 0: return &v.state case 1: @@ -7539,6 +7929,18 @@ func file_ttn_lorawan_v3_end_device_proto_init() { } } file_ttn_lorawan_v3_end_device_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MACState_DataRateRanges); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_ttn_lorawan_v3_end_device_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*MACState_UplinkMessage_TxSettings); i { case 0: return &v.state @@ -7550,7 +7952,7 @@ func file_ttn_lorawan_v3_end_device_proto_init() { return nil } } - file_ttn_lorawan_v3_end_device_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} { + file_ttn_lorawan_v3_end_device_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*MACState_UplinkMessage_RxMetadata); i { case 0: return &v.state @@ -7562,7 +7964,7 @@ func file_ttn_lorawan_v3_end_device_proto_init() { return nil } } - file_ttn_lorawan_v3_end_device_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} { + file_ttn_lorawan_v3_end_device_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*MACState_UplinkMessage_RxMetadata_PacketBrokerMetadata); i { case 0: return &v.state @@ -7574,7 +7976,7 @@ func file_ttn_lorawan_v3_end_device_proto_init() { return nil } } - file_ttn_lorawan_v3_end_device_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} { + file_ttn_lorawan_v3_end_device_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*MACState_UplinkMessage_RxMetadata_RelayMetadata); i { case 0: return &v.state @@ -7586,7 +7988,7 @@ func file_ttn_lorawan_v3_end_device_proto_init() { return nil } } - file_ttn_lorawan_v3_end_device_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} { + file_ttn_lorawan_v3_end_device_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*MACState_DownlinkMessage_Message); i { case 0: return &v.state @@ -7598,7 +8000,7 @@ func file_ttn_lorawan_v3_end_device_proto_init() { return nil } } - file_ttn_lorawan_v3_end_device_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} { + file_ttn_lorawan_v3_end_device_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*MACState_DownlinkMessage_Message_MHDR); i { case 0: return &v.state @@ -7610,7 +8012,7 @@ func file_ttn_lorawan_v3_end_device_proto_init() { return nil } } - file_ttn_lorawan_v3_end_device_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} { + file_ttn_lorawan_v3_end_device_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*MACState_DownlinkMessage_Message_MACPayload); i { case 0: return &v.state @@ -7622,7 +8024,7 @@ func file_ttn_lorawan_v3_end_device_proto_init() { return nil } } - file_ttn_lorawan_v3_end_device_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} { + file_ttn_lorawan_v3_end_device_proto_msgTypes[58].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*BatchUpdateEndDeviceLastSeenRequest_EndDeviceLastSeenUpdate); i { case 0: return &v.state @@ -7668,7 +8070,7 @@ func file_ttn_lorawan_v3_end_device_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_ttn_lorawan_v3_end_device_proto_rawDesc, NumEnums: 1, - NumMessages: 58, + NumMessages: 60, NumExtensions: 0, NumServices: 0, }, diff --git a/pkg/ttnpb/end_device.pb.paths.fm.go b/pkg/ttnpb/end_device.pb.paths.fm.go index d8d4343759..d16c4fb1a0 100644 --- a/pkg/ttnpb/end_device.pb.paths.fm.go +++ b/pkg/ttnpb/end_device.pb.paths.fm.go @@ -384,6 +384,55 @@ var EndDeviceVersionFieldPathsNested = []string{ "default_mac_settings.adr.mode.dynamic.min_data_rate_index.value", "default_mac_settings.adr.mode.dynamic.min_nb_trans", "default_mac_settings.adr.mode.dynamic.min_tx_power_index", + "default_mac_settings.adr.mode.dynamic.overrides", + "default_mac_settings.adr.mode.dynamic.overrides.data_rate_0", + "default_mac_settings.adr.mode.dynamic.overrides.data_rate_0.max_nb_trans", + "default_mac_settings.adr.mode.dynamic.overrides.data_rate_0.min_nb_trans", + "default_mac_settings.adr.mode.dynamic.overrides.data_rate_1", + "default_mac_settings.adr.mode.dynamic.overrides.data_rate_1.max_nb_trans", + "default_mac_settings.adr.mode.dynamic.overrides.data_rate_1.min_nb_trans", + "default_mac_settings.adr.mode.dynamic.overrides.data_rate_10", + "default_mac_settings.adr.mode.dynamic.overrides.data_rate_10.max_nb_trans", + "default_mac_settings.adr.mode.dynamic.overrides.data_rate_10.min_nb_trans", + "default_mac_settings.adr.mode.dynamic.overrides.data_rate_11", + "default_mac_settings.adr.mode.dynamic.overrides.data_rate_11.max_nb_trans", + "default_mac_settings.adr.mode.dynamic.overrides.data_rate_11.min_nb_trans", + "default_mac_settings.adr.mode.dynamic.overrides.data_rate_12", + "default_mac_settings.adr.mode.dynamic.overrides.data_rate_12.max_nb_trans", + "default_mac_settings.adr.mode.dynamic.overrides.data_rate_12.min_nb_trans", + "default_mac_settings.adr.mode.dynamic.overrides.data_rate_13", + "default_mac_settings.adr.mode.dynamic.overrides.data_rate_13.max_nb_trans", + "default_mac_settings.adr.mode.dynamic.overrides.data_rate_13.min_nb_trans", + "default_mac_settings.adr.mode.dynamic.overrides.data_rate_14", + "default_mac_settings.adr.mode.dynamic.overrides.data_rate_14.max_nb_trans", + "default_mac_settings.adr.mode.dynamic.overrides.data_rate_14.min_nb_trans", + "default_mac_settings.adr.mode.dynamic.overrides.data_rate_15", + "default_mac_settings.adr.mode.dynamic.overrides.data_rate_15.max_nb_trans", + "default_mac_settings.adr.mode.dynamic.overrides.data_rate_15.min_nb_trans", + "default_mac_settings.adr.mode.dynamic.overrides.data_rate_2", + "default_mac_settings.adr.mode.dynamic.overrides.data_rate_2.max_nb_trans", + "default_mac_settings.adr.mode.dynamic.overrides.data_rate_2.min_nb_trans", + "default_mac_settings.adr.mode.dynamic.overrides.data_rate_3", + "default_mac_settings.adr.mode.dynamic.overrides.data_rate_3.max_nb_trans", + "default_mac_settings.adr.mode.dynamic.overrides.data_rate_3.min_nb_trans", + "default_mac_settings.adr.mode.dynamic.overrides.data_rate_4", + "default_mac_settings.adr.mode.dynamic.overrides.data_rate_4.max_nb_trans", + "default_mac_settings.adr.mode.dynamic.overrides.data_rate_4.min_nb_trans", + "default_mac_settings.adr.mode.dynamic.overrides.data_rate_5", + "default_mac_settings.adr.mode.dynamic.overrides.data_rate_5.max_nb_trans", + "default_mac_settings.adr.mode.dynamic.overrides.data_rate_5.min_nb_trans", + "default_mac_settings.adr.mode.dynamic.overrides.data_rate_6", + "default_mac_settings.adr.mode.dynamic.overrides.data_rate_6.max_nb_trans", + "default_mac_settings.adr.mode.dynamic.overrides.data_rate_6.min_nb_trans", + "default_mac_settings.adr.mode.dynamic.overrides.data_rate_7", + "default_mac_settings.adr.mode.dynamic.overrides.data_rate_7.max_nb_trans", + "default_mac_settings.adr.mode.dynamic.overrides.data_rate_7.min_nb_trans", + "default_mac_settings.adr.mode.dynamic.overrides.data_rate_8", + "default_mac_settings.adr.mode.dynamic.overrides.data_rate_8.max_nb_trans", + "default_mac_settings.adr.mode.dynamic.overrides.data_rate_8.min_nb_trans", + "default_mac_settings.adr.mode.dynamic.overrides.data_rate_9", + "default_mac_settings.adr.mode.dynamic.overrides.data_rate_9.max_nb_trans", + "default_mac_settings.adr.mode.dynamic.overrides.data_rate_9.min_nb_trans", "default_mac_settings.adr.mode.static", "default_mac_settings.adr.mode.static.data_rate_index", "default_mac_settings.adr.mode.static.nb_trans", @@ -569,6 +618,55 @@ var ADRSettingsFieldPathsNested = []string{ "mode.dynamic.min_data_rate_index.value", "mode.dynamic.min_nb_trans", "mode.dynamic.min_tx_power_index", + "mode.dynamic.overrides", + "mode.dynamic.overrides.data_rate_0", + "mode.dynamic.overrides.data_rate_0.max_nb_trans", + "mode.dynamic.overrides.data_rate_0.min_nb_trans", + "mode.dynamic.overrides.data_rate_1", + "mode.dynamic.overrides.data_rate_1.max_nb_trans", + "mode.dynamic.overrides.data_rate_1.min_nb_trans", + "mode.dynamic.overrides.data_rate_10", + "mode.dynamic.overrides.data_rate_10.max_nb_trans", + "mode.dynamic.overrides.data_rate_10.min_nb_trans", + "mode.dynamic.overrides.data_rate_11", + "mode.dynamic.overrides.data_rate_11.max_nb_trans", + "mode.dynamic.overrides.data_rate_11.min_nb_trans", + "mode.dynamic.overrides.data_rate_12", + "mode.dynamic.overrides.data_rate_12.max_nb_trans", + "mode.dynamic.overrides.data_rate_12.min_nb_trans", + "mode.dynamic.overrides.data_rate_13", + "mode.dynamic.overrides.data_rate_13.max_nb_trans", + "mode.dynamic.overrides.data_rate_13.min_nb_trans", + "mode.dynamic.overrides.data_rate_14", + "mode.dynamic.overrides.data_rate_14.max_nb_trans", + "mode.dynamic.overrides.data_rate_14.min_nb_trans", + "mode.dynamic.overrides.data_rate_15", + "mode.dynamic.overrides.data_rate_15.max_nb_trans", + "mode.dynamic.overrides.data_rate_15.min_nb_trans", + "mode.dynamic.overrides.data_rate_2", + "mode.dynamic.overrides.data_rate_2.max_nb_trans", + "mode.dynamic.overrides.data_rate_2.min_nb_trans", + "mode.dynamic.overrides.data_rate_3", + "mode.dynamic.overrides.data_rate_3.max_nb_trans", + "mode.dynamic.overrides.data_rate_3.min_nb_trans", + "mode.dynamic.overrides.data_rate_4", + "mode.dynamic.overrides.data_rate_4.max_nb_trans", + "mode.dynamic.overrides.data_rate_4.min_nb_trans", + "mode.dynamic.overrides.data_rate_5", + "mode.dynamic.overrides.data_rate_5.max_nb_trans", + "mode.dynamic.overrides.data_rate_5.min_nb_trans", + "mode.dynamic.overrides.data_rate_6", + "mode.dynamic.overrides.data_rate_6.max_nb_trans", + "mode.dynamic.overrides.data_rate_6.min_nb_trans", + "mode.dynamic.overrides.data_rate_7", + "mode.dynamic.overrides.data_rate_7.max_nb_trans", + "mode.dynamic.overrides.data_rate_7.min_nb_trans", + "mode.dynamic.overrides.data_rate_8", + "mode.dynamic.overrides.data_rate_8.max_nb_trans", + "mode.dynamic.overrides.data_rate_8.min_nb_trans", + "mode.dynamic.overrides.data_rate_9", + "mode.dynamic.overrides.data_rate_9.max_nb_trans", + "mode.dynamic.overrides.data_rate_9.min_nb_trans", "mode.static", "mode.static.data_rate_index", "mode.static.nb_trans", @@ -596,6 +694,55 @@ var MACSettingsFieldPathsNested = []string{ "adr.mode.dynamic.min_data_rate_index.value", "adr.mode.dynamic.min_nb_trans", "adr.mode.dynamic.min_tx_power_index", + "adr.mode.dynamic.overrides", + "adr.mode.dynamic.overrides.data_rate_0", + "adr.mode.dynamic.overrides.data_rate_0.max_nb_trans", + "adr.mode.dynamic.overrides.data_rate_0.min_nb_trans", + "adr.mode.dynamic.overrides.data_rate_1", + "adr.mode.dynamic.overrides.data_rate_1.max_nb_trans", + "adr.mode.dynamic.overrides.data_rate_1.min_nb_trans", + "adr.mode.dynamic.overrides.data_rate_10", + "adr.mode.dynamic.overrides.data_rate_10.max_nb_trans", + "adr.mode.dynamic.overrides.data_rate_10.min_nb_trans", + "adr.mode.dynamic.overrides.data_rate_11", + "adr.mode.dynamic.overrides.data_rate_11.max_nb_trans", + "adr.mode.dynamic.overrides.data_rate_11.min_nb_trans", + "adr.mode.dynamic.overrides.data_rate_12", + "adr.mode.dynamic.overrides.data_rate_12.max_nb_trans", + "adr.mode.dynamic.overrides.data_rate_12.min_nb_trans", + "adr.mode.dynamic.overrides.data_rate_13", + "adr.mode.dynamic.overrides.data_rate_13.max_nb_trans", + "adr.mode.dynamic.overrides.data_rate_13.min_nb_trans", + "adr.mode.dynamic.overrides.data_rate_14", + "adr.mode.dynamic.overrides.data_rate_14.max_nb_trans", + "adr.mode.dynamic.overrides.data_rate_14.min_nb_trans", + "adr.mode.dynamic.overrides.data_rate_15", + "adr.mode.dynamic.overrides.data_rate_15.max_nb_trans", + "adr.mode.dynamic.overrides.data_rate_15.min_nb_trans", + "adr.mode.dynamic.overrides.data_rate_2", + "adr.mode.dynamic.overrides.data_rate_2.max_nb_trans", + "adr.mode.dynamic.overrides.data_rate_2.min_nb_trans", + "adr.mode.dynamic.overrides.data_rate_3", + "adr.mode.dynamic.overrides.data_rate_3.max_nb_trans", + "adr.mode.dynamic.overrides.data_rate_3.min_nb_trans", + "adr.mode.dynamic.overrides.data_rate_4", + "adr.mode.dynamic.overrides.data_rate_4.max_nb_trans", + "adr.mode.dynamic.overrides.data_rate_4.min_nb_trans", + "adr.mode.dynamic.overrides.data_rate_5", + "adr.mode.dynamic.overrides.data_rate_5.max_nb_trans", + "adr.mode.dynamic.overrides.data_rate_5.min_nb_trans", + "adr.mode.dynamic.overrides.data_rate_6", + "adr.mode.dynamic.overrides.data_rate_6.max_nb_trans", + "adr.mode.dynamic.overrides.data_rate_6.min_nb_trans", + "adr.mode.dynamic.overrides.data_rate_7", + "adr.mode.dynamic.overrides.data_rate_7.max_nb_trans", + "adr.mode.dynamic.overrides.data_rate_7.min_nb_trans", + "adr.mode.dynamic.overrides.data_rate_8", + "adr.mode.dynamic.overrides.data_rate_8.max_nb_trans", + "adr.mode.dynamic.overrides.data_rate_8.min_nb_trans", + "adr.mode.dynamic.overrides.data_rate_9", + "adr.mode.dynamic.overrides.data_rate_9.max_nb_trans", + "adr.mode.dynamic.overrides.data_rate_9.min_nb_trans", "adr.mode.static", "adr.mode.static.data_rate_index", "adr.mode.static.nb_trans", @@ -1077,6 +1224,55 @@ var EndDeviceFieldPathsNested = []string{ "mac_settings.adr.mode.dynamic.min_data_rate_index.value", "mac_settings.adr.mode.dynamic.min_nb_trans", "mac_settings.adr.mode.dynamic.min_tx_power_index", + "mac_settings.adr.mode.dynamic.overrides", + "mac_settings.adr.mode.dynamic.overrides.data_rate_0", + "mac_settings.adr.mode.dynamic.overrides.data_rate_0.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_0.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_1", + "mac_settings.adr.mode.dynamic.overrides.data_rate_1.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_1.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_10", + "mac_settings.adr.mode.dynamic.overrides.data_rate_10.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_10.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_11", + "mac_settings.adr.mode.dynamic.overrides.data_rate_11.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_11.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_12", + "mac_settings.adr.mode.dynamic.overrides.data_rate_12.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_12.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_13", + "mac_settings.adr.mode.dynamic.overrides.data_rate_13.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_13.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_14", + "mac_settings.adr.mode.dynamic.overrides.data_rate_14.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_14.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_15", + "mac_settings.adr.mode.dynamic.overrides.data_rate_15.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_15.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_2", + "mac_settings.adr.mode.dynamic.overrides.data_rate_2.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_2.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_3", + "mac_settings.adr.mode.dynamic.overrides.data_rate_3.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_3.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_4", + "mac_settings.adr.mode.dynamic.overrides.data_rate_4.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_4.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_5", + "mac_settings.adr.mode.dynamic.overrides.data_rate_5.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_5.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_6", + "mac_settings.adr.mode.dynamic.overrides.data_rate_6.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_6.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_7", + "mac_settings.adr.mode.dynamic.overrides.data_rate_7.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_7.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_8", + "mac_settings.adr.mode.dynamic.overrides.data_rate_8.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_8.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_9", + "mac_settings.adr.mode.dynamic.overrides.data_rate_9.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_9.min_nb_trans", "mac_settings.adr.mode.static", "mac_settings.adr.mode.static.data_rate_index", "mac_settings.adr.mode.static.nb_trans", @@ -1856,6 +2052,55 @@ var CreateEndDeviceRequestFieldPathsNested = []string{ "end_device.mac_settings.adr.mode.dynamic.min_data_rate_index.value", "end_device.mac_settings.adr.mode.dynamic.min_nb_trans", "end_device.mac_settings.adr.mode.dynamic.min_tx_power_index", + "end_device.mac_settings.adr.mode.dynamic.overrides", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_0", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_0.max_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_0.min_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_1", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_1.max_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_1.min_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_10", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_10.max_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_10.min_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_11", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_11.max_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_11.min_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_12", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_12.max_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_12.min_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_13", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_13.max_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_13.min_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_14", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_14.max_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_14.min_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_15", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_15.max_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_15.min_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_2", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_2.max_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_2.min_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_3", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_3.max_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_3.min_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_4", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_4.max_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_4.min_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_5", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_5.max_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_5.min_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_6", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_6.max_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_6.min_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_7", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_7.max_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_7.min_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_8", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_8.max_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_8.min_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_9", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_9.max_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_9.min_nb_trans", "end_device.mac_settings.adr.mode.static", "end_device.mac_settings.adr.mode.static.data_rate_index", "end_device.mac_settings.adr.mode.static.nb_trans", @@ -2567,6 +2812,55 @@ var UpdateEndDeviceRequestFieldPathsNested = []string{ "end_device.mac_settings.adr.mode.dynamic.min_data_rate_index.value", "end_device.mac_settings.adr.mode.dynamic.min_nb_trans", "end_device.mac_settings.adr.mode.dynamic.min_tx_power_index", + "end_device.mac_settings.adr.mode.dynamic.overrides", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_0", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_0.max_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_0.min_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_1", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_1.max_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_1.min_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_10", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_10.max_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_10.min_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_11", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_11.max_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_11.min_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_12", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_12.max_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_12.min_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_13", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_13.max_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_13.min_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_14", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_14.max_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_14.min_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_15", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_15.max_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_15.min_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_2", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_2.max_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_2.min_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_3", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_3.max_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_3.min_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_4", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_4.max_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_4.min_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_5", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_5.max_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_5.min_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_6", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_6.max_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_6.min_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_7", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_7.max_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_7.min_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_8", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_8.max_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_8.min_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_9", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_9.max_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_9.min_nb_trans", "end_device.mac_settings.adr.mode.static", "end_device.mac_settings.adr.mode.static.data_rate_index", "end_device.mac_settings.adr.mode.static.nb_trans", @@ -3327,6 +3621,55 @@ var SetEndDeviceRequestFieldPathsNested = []string{ "end_device.mac_settings.adr.mode.dynamic.min_data_rate_index.value", "end_device.mac_settings.adr.mode.dynamic.min_nb_trans", "end_device.mac_settings.adr.mode.dynamic.min_tx_power_index", + "end_device.mac_settings.adr.mode.dynamic.overrides", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_0", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_0.max_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_0.min_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_1", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_1.max_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_1.min_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_10", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_10.max_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_10.min_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_11", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_11.max_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_11.min_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_12", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_12.max_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_12.min_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_13", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_13.max_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_13.min_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_14", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_14.max_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_14.min_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_15", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_15.max_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_15.min_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_2", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_2.max_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_2.min_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_3", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_3.max_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_3.min_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_4", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_4.max_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_4.min_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_5", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_5.max_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_5.min_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_6", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_6.max_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_6.min_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_7", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_7.max_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_7.min_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_8", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_8.max_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_8.min_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_9", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_9.max_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_9.min_nb_trans", "end_device.mac_settings.adr.mode.static", "end_device.mac_settings.adr.mode.static.data_rate_index", "end_device.mac_settings.adr.mode.static.nb_trans", @@ -4055,6 +4398,55 @@ var EndDeviceTemplateFieldPathsNested = []string{ "end_device.mac_settings.adr.mode.dynamic.min_data_rate_index.value", "end_device.mac_settings.adr.mode.dynamic.min_nb_trans", "end_device.mac_settings.adr.mode.dynamic.min_tx_power_index", + "end_device.mac_settings.adr.mode.dynamic.overrides", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_0", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_0.max_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_0.min_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_1", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_1.max_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_1.min_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_10", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_10.max_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_10.min_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_11", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_11.max_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_11.min_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_12", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_12.max_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_12.min_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_13", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_13.max_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_13.min_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_14", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_14.max_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_14.min_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_15", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_15.max_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_15.min_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_2", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_2.max_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_2.min_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_3", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_3.max_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_3.min_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_4", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_4.max_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_4.min_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_5", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_5.max_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_5.min_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_6", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_6.max_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_6.min_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_7", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_7.max_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_7.min_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_8", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_8.max_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_8.min_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_9", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_9.max_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_9.min_nb_trans", "end_device.mac_settings.adr.mode.static", "end_device.mac_settings.adr.mode.static.data_rate_index", "end_device.mac_settings.adr.mode.static.nb_trans", @@ -4807,6 +5199,55 @@ var ADRSettings_DynamicModeFieldPathsNested = []string{ "min_data_rate_index.value", "min_nb_trans", "min_tx_power_index", + "overrides", + "overrides.data_rate_0", + "overrides.data_rate_0.max_nb_trans", + "overrides.data_rate_0.min_nb_trans", + "overrides.data_rate_1", + "overrides.data_rate_1.max_nb_trans", + "overrides.data_rate_1.min_nb_trans", + "overrides.data_rate_10", + "overrides.data_rate_10.max_nb_trans", + "overrides.data_rate_10.min_nb_trans", + "overrides.data_rate_11", + "overrides.data_rate_11.max_nb_trans", + "overrides.data_rate_11.min_nb_trans", + "overrides.data_rate_12", + "overrides.data_rate_12.max_nb_trans", + "overrides.data_rate_12.min_nb_trans", + "overrides.data_rate_13", + "overrides.data_rate_13.max_nb_trans", + "overrides.data_rate_13.min_nb_trans", + "overrides.data_rate_14", + "overrides.data_rate_14.max_nb_trans", + "overrides.data_rate_14.min_nb_trans", + "overrides.data_rate_15", + "overrides.data_rate_15.max_nb_trans", + "overrides.data_rate_15.min_nb_trans", + "overrides.data_rate_2", + "overrides.data_rate_2.max_nb_trans", + "overrides.data_rate_2.min_nb_trans", + "overrides.data_rate_3", + "overrides.data_rate_3.max_nb_trans", + "overrides.data_rate_3.min_nb_trans", + "overrides.data_rate_4", + "overrides.data_rate_4.max_nb_trans", + "overrides.data_rate_4.min_nb_trans", + "overrides.data_rate_5", + "overrides.data_rate_5.max_nb_trans", + "overrides.data_rate_5.min_nb_trans", + "overrides.data_rate_6", + "overrides.data_rate_6.max_nb_trans", + "overrides.data_rate_6.min_nb_trans", + "overrides.data_rate_7", + "overrides.data_rate_7.max_nb_trans", + "overrides.data_rate_7.min_nb_trans", + "overrides.data_rate_8", + "overrides.data_rate_8.max_nb_trans", + "overrides.data_rate_8.min_nb_trans", + "overrides.data_rate_9", + "overrides.data_rate_9.max_nb_trans", + "overrides.data_rate_9.min_nb_trans", } var ADRSettings_DynamicModeFieldPathsTopLevel = []string{ @@ -4818,6 +5259,7 @@ var ADRSettings_DynamicModeFieldPathsTopLevel = []string{ "min_data_rate_index", "min_nb_trans", "min_tx_power_index", + "overrides", } var ADRSettings_DisabledModeFieldPathsNested []string var ADRSettings_DisabledModeFieldPathsTopLevel []string @@ -4830,6 +5272,84 @@ var ADRSettings_DynamicMode_ChannelSteeringSettingsFieldPathsNested = []string{ var ADRSettings_DynamicMode_ChannelSteeringSettingsFieldPathsTopLevel = []string{ "mode", } +var ADRSettings_DynamicMode_PerDataRateIndexOverrideFieldPathsNested = []string{ + "max_nb_trans", + "min_nb_trans", +} + +var ADRSettings_DynamicMode_PerDataRateIndexOverrideFieldPathsTopLevel = []string{ + "max_nb_trans", + "min_nb_trans", +} +var ADRSettings_DynamicMode_OverridesFieldPathsNested = []string{ + "data_rate_0", + "data_rate_0.max_nb_trans", + "data_rate_0.min_nb_trans", + "data_rate_1", + "data_rate_1.max_nb_trans", + "data_rate_1.min_nb_trans", + "data_rate_10", + "data_rate_10.max_nb_trans", + "data_rate_10.min_nb_trans", + "data_rate_11", + "data_rate_11.max_nb_trans", + "data_rate_11.min_nb_trans", + "data_rate_12", + "data_rate_12.max_nb_trans", + "data_rate_12.min_nb_trans", + "data_rate_13", + "data_rate_13.max_nb_trans", + "data_rate_13.min_nb_trans", + "data_rate_14", + "data_rate_14.max_nb_trans", + "data_rate_14.min_nb_trans", + "data_rate_15", + "data_rate_15.max_nb_trans", + "data_rate_15.min_nb_trans", + "data_rate_2", + "data_rate_2.max_nb_trans", + "data_rate_2.min_nb_trans", + "data_rate_3", + "data_rate_3.max_nb_trans", + "data_rate_3.min_nb_trans", + "data_rate_4", + "data_rate_4.max_nb_trans", + "data_rate_4.min_nb_trans", + "data_rate_5", + "data_rate_5.max_nb_trans", + "data_rate_5.min_nb_trans", + "data_rate_6", + "data_rate_6.max_nb_trans", + "data_rate_6.min_nb_trans", + "data_rate_7", + "data_rate_7.max_nb_trans", + "data_rate_7.min_nb_trans", + "data_rate_8", + "data_rate_8.max_nb_trans", + "data_rate_8.min_nb_trans", + "data_rate_9", + "data_rate_9.max_nb_trans", + "data_rate_9.min_nb_trans", +} + +var ADRSettings_DynamicMode_OverridesFieldPathsTopLevel = []string{ + "data_rate_0", + "data_rate_1", + "data_rate_10", + "data_rate_11", + "data_rate_12", + "data_rate_13", + "data_rate_14", + "data_rate_15", + "data_rate_2", + "data_rate_3", + "data_rate_4", + "data_rate_5", + "data_rate_6", + "data_rate_7", + "data_rate_8", + "data_rate_9", +} var ADRSettings_DynamicMode_ChannelSteeringSettings_LoRaNarrowModeFieldPathsNested []string var ADRSettings_DynamicMode_ChannelSteeringSettings_LoRaNarrowModeFieldPathsTopLevel []string var ADRSettings_DynamicMode_ChannelSteeringSettings_DisabledModeFieldPathsNested []string diff --git a/pkg/ttnpb/end_device.pb.setters.fm.go b/pkg/ttnpb/end_device.pb.setters.fm.go index 7aa528229b..a0ef6a8ca6 100644 --- a/pkg/ttnpb/end_device.pb.setters.fm.go +++ b/pkg/ttnpb/end_device.pb.setters.fm.go @@ -4478,6 +4478,31 @@ func (dst *ADRSettings_DynamicMode) SetFields(src *ADRSettings_DynamicMode, path dst.ChannelSteering = nil } } + case "overrides": + if len(subs) > 0 { + var newDst, newSrc *ADRSettings_DynamicMode_Overrides + if (src == nil || src.Overrides == nil) && dst.Overrides == nil { + continue + } + if src != nil { + newSrc = src.Overrides + } + if dst.Overrides != nil { + newDst = dst.Overrides + } else { + newDst = &ADRSettings_DynamicMode_Overrides{} + dst.Overrides = newDst + } + if err := newDst.SetFields(newSrc, subs...); err != nil { + return err + } + } else { + if src != nil { + dst.Overrides = src.Overrides + } else { + dst.Overrides = nil + } + } default: return fmt.Errorf("invalid field: '%s'", name) @@ -4597,6 +4622,446 @@ func (dst *ADRSettings_DynamicMode_ChannelSteeringSettings) SetFields(src *ADRSe return nil } +func (dst *ADRSettings_DynamicMode_PerDataRateIndexOverride) SetFields(src *ADRSettings_DynamicMode_PerDataRateIndexOverride, paths ...string) error { + for name, subs := range _processPaths(paths) { + switch name { + case "min_nb_trans": + if len(subs) > 0 { + return fmt.Errorf("'min_nb_trans' has no subfields, but %s were specified", subs) + } + if src != nil { + dst.MinNbTrans = src.MinNbTrans + } else { + dst.MinNbTrans = nil + } + case "max_nb_trans": + if len(subs) > 0 { + return fmt.Errorf("'max_nb_trans' has no subfields, but %s were specified", subs) + } + if src != nil { + dst.MaxNbTrans = src.MaxNbTrans + } else { + dst.MaxNbTrans = nil + } + + default: + return fmt.Errorf("invalid field: '%s'", name) + } + } + return nil +} + +func (dst *ADRSettings_DynamicMode_Overrides) SetFields(src *ADRSettings_DynamicMode_Overrides, paths ...string) error { + for name, subs := range _processPaths(paths) { + switch name { + case "data_rate_0": + if len(subs) > 0 { + var newDst, newSrc *ADRSettings_DynamicMode_PerDataRateIndexOverride + if (src == nil || src.DataRate_0 == nil) && dst.DataRate_0 == nil { + continue + } + if src != nil { + newSrc = src.DataRate_0 + } + if dst.DataRate_0 != nil { + newDst = dst.DataRate_0 + } else { + newDst = &ADRSettings_DynamicMode_PerDataRateIndexOverride{} + dst.DataRate_0 = newDst + } + if err := newDst.SetFields(newSrc, subs...); err != nil { + return err + } + } else { + if src != nil { + dst.DataRate_0 = src.DataRate_0 + } else { + dst.DataRate_0 = nil + } + } + case "data_rate_1": + if len(subs) > 0 { + var newDst, newSrc *ADRSettings_DynamicMode_PerDataRateIndexOverride + if (src == nil || src.DataRate_1 == nil) && dst.DataRate_1 == nil { + continue + } + if src != nil { + newSrc = src.DataRate_1 + } + if dst.DataRate_1 != nil { + newDst = dst.DataRate_1 + } else { + newDst = &ADRSettings_DynamicMode_PerDataRateIndexOverride{} + dst.DataRate_1 = newDst + } + if err := newDst.SetFields(newSrc, subs...); err != nil { + return err + } + } else { + if src != nil { + dst.DataRate_1 = src.DataRate_1 + } else { + dst.DataRate_1 = nil + } + } + case "data_rate_2": + if len(subs) > 0 { + var newDst, newSrc *ADRSettings_DynamicMode_PerDataRateIndexOverride + if (src == nil || src.DataRate_2 == nil) && dst.DataRate_2 == nil { + continue + } + if src != nil { + newSrc = src.DataRate_2 + } + if dst.DataRate_2 != nil { + newDst = dst.DataRate_2 + } else { + newDst = &ADRSettings_DynamicMode_PerDataRateIndexOverride{} + dst.DataRate_2 = newDst + } + if err := newDst.SetFields(newSrc, subs...); err != nil { + return err + } + } else { + if src != nil { + dst.DataRate_2 = src.DataRate_2 + } else { + dst.DataRate_2 = nil + } + } + case "data_rate_3": + if len(subs) > 0 { + var newDst, newSrc *ADRSettings_DynamicMode_PerDataRateIndexOverride + if (src == nil || src.DataRate_3 == nil) && dst.DataRate_3 == nil { + continue + } + if src != nil { + newSrc = src.DataRate_3 + } + if dst.DataRate_3 != nil { + newDst = dst.DataRate_3 + } else { + newDst = &ADRSettings_DynamicMode_PerDataRateIndexOverride{} + dst.DataRate_3 = newDst + } + if err := newDst.SetFields(newSrc, subs...); err != nil { + return err + } + } else { + if src != nil { + dst.DataRate_3 = src.DataRate_3 + } else { + dst.DataRate_3 = nil + } + } + case "data_rate_4": + if len(subs) > 0 { + var newDst, newSrc *ADRSettings_DynamicMode_PerDataRateIndexOverride + if (src == nil || src.DataRate_4 == nil) && dst.DataRate_4 == nil { + continue + } + if src != nil { + newSrc = src.DataRate_4 + } + if dst.DataRate_4 != nil { + newDst = dst.DataRate_4 + } else { + newDst = &ADRSettings_DynamicMode_PerDataRateIndexOverride{} + dst.DataRate_4 = newDst + } + if err := newDst.SetFields(newSrc, subs...); err != nil { + return err + } + } else { + if src != nil { + dst.DataRate_4 = src.DataRate_4 + } else { + dst.DataRate_4 = nil + } + } + case "data_rate_5": + if len(subs) > 0 { + var newDst, newSrc *ADRSettings_DynamicMode_PerDataRateIndexOverride + if (src == nil || src.DataRate_5 == nil) && dst.DataRate_5 == nil { + continue + } + if src != nil { + newSrc = src.DataRate_5 + } + if dst.DataRate_5 != nil { + newDst = dst.DataRate_5 + } else { + newDst = &ADRSettings_DynamicMode_PerDataRateIndexOverride{} + dst.DataRate_5 = newDst + } + if err := newDst.SetFields(newSrc, subs...); err != nil { + return err + } + } else { + if src != nil { + dst.DataRate_5 = src.DataRate_5 + } else { + dst.DataRate_5 = nil + } + } + case "data_rate_6": + if len(subs) > 0 { + var newDst, newSrc *ADRSettings_DynamicMode_PerDataRateIndexOverride + if (src == nil || src.DataRate_6 == nil) && dst.DataRate_6 == nil { + continue + } + if src != nil { + newSrc = src.DataRate_6 + } + if dst.DataRate_6 != nil { + newDst = dst.DataRate_6 + } else { + newDst = &ADRSettings_DynamicMode_PerDataRateIndexOverride{} + dst.DataRate_6 = newDst + } + if err := newDst.SetFields(newSrc, subs...); err != nil { + return err + } + } else { + if src != nil { + dst.DataRate_6 = src.DataRate_6 + } else { + dst.DataRate_6 = nil + } + } + case "data_rate_7": + if len(subs) > 0 { + var newDst, newSrc *ADRSettings_DynamicMode_PerDataRateIndexOverride + if (src == nil || src.DataRate_7 == nil) && dst.DataRate_7 == nil { + continue + } + if src != nil { + newSrc = src.DataRate_7 + } + if dst.DataRate_7 != nil { + newDst = dst.DataRate_7 + } else { + newDst = &ADRSettings_DynamicMode_PerDataRateIndexOverride{} + dst.DataRate_7 = newDst + } + if err := newDst.SetFields(newSrc, subs...); err != nil { + return err + } + } else { + if src != nil { + dst.DataRate_7 = src.DataRate_7 + } else { + dst.DataRate_7 = nil + } + } + case "data_rate_8": + if len(subs) > 0 { + var newDst, newSrc *ADRSettings_DynamicMode_PerDataRateIndexOverride + if (src == nil || src.DataRate_8 == nil) && dst.DataRate_8 == nil { + continue + } + if src != nil { + newSrc = src.DataRate_8 + } + if dst.DataRate_8 != nil { + newDst = dst.DataRate_8 + } else { + newDst = &ADRSettings_DynamicMode_PerDataRateIndexOverride{} + dst.DataRate_8 = newDst + } + if err := newDst.SetFields(newSrc, subs...); err != nil { + return err + } + } else { + if src != nil { + dst.DataRate_8 = src.DataRate_8 + } else { + dst.DataRate_8 = nil + } + } + case "data_rate_9": + if len(subs) > 0 { + var newDst, newSrc *ADRSettings_DynamicMode_PerDataRateIndexOverride + if (src == nil || src.DataRate_9 == nil) && dst.DataRate_9 == nil { + continue + } + if src != nil { + newSrc = src.DataRate_9 + } + if dst.DataRate_9 != nil { + newDst = dst.DataRate_9 + } else { + newDst = &ADRSettings_DynamicMode_PerDataRateIndexOverride{} + dst.DataRate_9 = newDst + } + if err := newDst.SetFields(newSrc, subs...); err != nil { + return err + } + } else { + if src != nil { + dst.DataRate_9 = src.DataRate_9 + } else { + dst.DataRate_9 = nil + } + } + case "data_rate_10": + if len(subs) > 0 { + var newDst, newSrc *ADRSettings_DynamicMode_PerDataRateIndexOverride + if (src == nil || src.DataRate_10 == nil) && dst.DataRate_10 == nil { + continue + } + if src != nil { + newSrc = src.DataRate_10 + } + if dst.DataRate_10 != nil { + newDst = dst.DataRate_10 + } else { + newDst = &ADRSettings_DynamicMode_PerDataRateIndexOverride{} + dst.DataRate_10 = newDst + } + if err := newDst.SetFields(newSrc, subs...); err != nil { + return err + } + } else { + if src != nil { + dst.DataRate_10 = src.DataRate_10 + } else { + dst.DataRate_10 = nil + } + } + case "data_rate_11": + if len(subs) > 0 { + var newDst, newSrc *ADRSettings_DynamicMode_PerDataRateIndexOverride + if (src == nil || src.DataRate_11 == nil) && dst.DataRate_11 == nil { + continue + } + if src != nil { + newSrc = src.DataRate_11 + } + if dst.DataRate_11 != nil { + newDst = dst.DataRate_11 + } else { + newDst = &ADRSettings_DynamicMode_PerDataRateIndexOverride{} + dst.DataRate_11 = newDst + } + if err := newDst.SetFields(newSrc, subs...); err != nil { + return err + } + } else { + if src != nil { + dst.DataRate_11 = src.DataRate_11 + } else { + dst.DataRate_11 = nil + } + } + case "data_rate_12": + if len(subs) > 0 { + var newDst, newSrc *ADRSettings_DynamicMode_PerDataRateIndexOverride + if (src == nil || src.DataRate_12 == nil) && dst.DataRate_12 == nil { + continue + } + if src != nil { + newSrc = src.DataRate_12 + } + if dst.DataRate_12 != nil { + newDst = dst.DataRate_12 + } else { + newDst = &ADRSettings_DynamicMode_PerDataRateIndexOverride{} + dst.DataRate_12 = newDst + } + if err := newDst.SetFields(newSrc, subs...); err != nil { + return err + } + } else { + if src != nil { + dst.DataRate_12 = src.DataRate_12 + } else { + dst.DataRate_12 = nil + } + } + case "data_rate_13": + if len(subs) > 0 { + var newDst, newSrc *ADRSettings_DynamicMode_PerDataRateIndexOverride + if (src == nil || src.DataRate_13 == nil) && dst.DataRate_13 == nil { + continue + } + if src != nil { + newSrc = src.DataRate_13 + } + if dst.DataRate_13 != nil { + newDst = dst.DataRate_13 + } else { + newDst = &ADRSettings_DynamicMode_PerDataRateIndexOverride{} + dst.DataRate_13 = newDst + } + if err := newDst.SetFields(newSrc, subs...); err != nil { + return err + } + } else { + if src != nil { + dst.DataRate_13 = src.DataRate_13 + } else { + dst.DataRate_13 = nil + } + } + case "data_rate_14": + if len(subs) > 0 { + var newDst, newSrc *ADRSettings_DynamicMode_PerDataRateIndexOverride + if (src == nil || src.DataRate_14 == nil) && dst.DataRate_14 == nil { + continue + } + if src != nil { + newSrc = src.DataRate_14 + } + if dst.DataRate_14 != nil { + newDst = dst.DataRate_14 + } else { + newDst = &ADRSettings_DynamicMode_PerDataRateIndexOverride{} + dst.DataRate_14 = newDst + } + if err := newDst.SetFields(newSrc, subs...); err != nil { + return err + } + } else { + if src != nil { + dst.DataRate_14 = src.DataRate_14 + } else { + dst.DataRate_14 = nil + } + } + case "data_rate_15": + if len(subs) > 0 { + var newDst, newSrc *ADRSettings_DynamicMode_PerDataRateIndexOverride + if (src == nil || src.DataRate_15 == nil) && dst.DataRate_15 == nil { + continue + } + if src != nil { + newSrc = src.DataRate_15 + } + if dst.DataRate_15 != nil { + newDst = dst.DataRate_15 + } else { + newDst = &ADRSettings_DynamicMode_PerDataRateIndexOverride{} + dst.DataRate_15 = newDst + } + if err := newDst.SetFields(newSrc, subs...); err != nil { + return err + } + } else { + if src != nil { + dst.DataRate_15 = src.DataRate_15 + } else { + dst.DataRate_15 = nil + } + } + + default: + return fmt.Errorf("invalid field: '%s'", name) + } + } + return nil +} + func (dst *ADRSettings_DynamicMode_ChannelSteeringSettings_LoRaNarrowMode) SetFields(src *ADRSettings_DynamicMode_ChannelSteeringSettings_LoRaNarrowMode, paths ...string) error { if len(paths) != 0 { return fmt.Errorf("message ADRSettings_DynamicMode_ChannelSteeringSettings_LoRaNarrowMode has no fields, but paths %s were specified", paths) diff --git a/pkg/ttnpb/end_device.pb.validate.go b/pkg/ttnpb/end_device.pb.validate.go index f0bfe4868d..0b0cf3048c 100644 --- a/pkg/ttnpb/end_device.pb.validate.go +++ b/pkg/ttnpb/end_device.pb.validate.go @@ -5860,6 +5860,18 @@ func (m *ADRSettings_DynamicMode) ValidateFields(paths ...string) error { } } + case "overrides": + + if v, ok := interface{}(m.GetOverrides()).(interface{ ValidateFields(...string) error }); ok { + if err := v.ValidateFields(subs...); err != nil { + return ADRSettings_DynamicModeValidationError{ + field: "overrides", + reason: "embedded message failed validation", + cause: err, + } + } + } + default: return ADRSettings_DynamicModeValidationError{ field: name, @@ -6124,6 +6136,396 @@ var _ interface { ErrorName() string } = ADRSettings_DynamicMode_ChannelSteeringSettingsValidationError{} +// ValidateFields checks the field values on +// ADRSettings_DynamicMode_PerDataRateIndexOverride with the rules defined in +// the proto definition for this message. If any rules are violated, an error +// is returned. +func (m *ADRSettings_DynamicMode_PerDataRateIndexOverride) ValidateFields(paths ...string) error { + if m == nil { + return nil + } + + if len(paths) == 0 { + paths = ADRSettings_DynamicMode_PerDataRateIndexOverrideFieldPathsNested + } + + for name, subs := range _processPaths(append(paths[:0:0], paths...)) { + _ = subs + switch name { + case "min_nb_trans": + + if wrapper := m.GetMinNbTrans(); wrapper != nil { + + if val := wrapper.GetValue(); val < 1 || val > 3 { + return ADRSettings_DynamicMode_PerDataRateIndexOverrideValidationError{ + field: "min_nb_trans", + reason: "value must be inside range [1, 3]", + } + } + + } + + case "max_nb_trans": + + if wrapper := m.GetMaxNbTrans(); wrapper != nil { + + if val := wrapper.GetValue(); val < 1 || val > 3 { + return ADRSettings_DynamicMode_PerDataRateIndexOverrideValidationError{ + field: "max_nb_trans", + reason: "value must be inside range [1, 3]", + } + } + + } + + default: + return ADRSettings_DynamicMode_PerDataRateIndexOverrideValidationError{ + field: name, + reason: "invalid field path", + } + } + } + return nil +} + +// ADRSettings_DynamicMode_PerDataRateIndexOverrideValidationError is the +// validation error returned by +// ADRSettings_DynamicMode_PerDataRateIndexOverride.ValidateFields if the +// designated constraints aren't met. +type ADRSettings_DynamicMode_PerDataRateIndexOverrideValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ADRSettings_DynamicMode_PerDataRateIndexOverrideValidationError) Field() string { + return e.field +} + +// Reason function returns reason value. +func (e ADRSettings_DynamicMode_PerDataRateIndexOverrideValidationError) Reason() string { + return e.reason +} + +// Cause function returns cause value. +func (e ADRSettings_DynamicMode_PerDataRateIndexOverrideValidationError) Cause() error { + return e.cause +} + +// Key function returns key value. +func (e ADRSettings_DynamicMode_PerDataRateIndexOverrideValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ADRSettings_DynamicMode_PerDataRateIndexOverrideValidationError) ErrorName() string { + return "ADRSettings_DynamicMode_PerDataRateIndexOverrideValidationError" +} + +// Error satisfies the builtin error interface +func (e ADRSettings_DynamicMode_PerDataRateIndexOverrideValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sADRSettings_DynamicMode_PerDataRateIndexOverride.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ADRSettings_DynamicMode_PerDataRateIndexOverrideValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ADRSettings_DynamicMode_PerDataRateIndexOverrideValidationError{} + +// ValidateFields checks the field values on ADRSettings_DynamicMode_Overrides +// with the rules defined in the proto definition for this message. If any +// rules are violated, an error is returned. +func (m *ADRSettings_DynamicMode_Overrides) ValidateFields(paths ...string) error { + if m == nil { + return nil + } + + if len(paths) == 0 { + paths = ADRSettings_DynamicMode_OverridesFieldPathsNested + } + + for name, subs := range _processPaths(append(paths[:0:0], paths...)) { + _ = subs + switch name { + case "data_rate_0": + + if v, ok := interface{}(m.GetDataRate_0()).(interface{ ValidateFields(...string) error }); ok { + if err := v.ValidateFields(subs...); err != nil { + return ADRSettings_DynamicMode_OverridesValidationError{ + field: "data_rate_0", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case "data_rate_1": + + if v, ok := interface{}(m.GetDataRate_1()).(interface{ ValidateFields(...string) error }); ok { + if err := v.ValidateFields(subs...); err != nil { + return ADRSettings_DynamicMode_OverridesValidationError{ + field: "data_rate_1", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case "data_rate_2": + + if v, ok := interface{}(m.GetDataRate_2()).(interface{ ValidateFields(...string) error }); ok { + if err := v.ValidateFields(subs...); err != nil { + return ADRSettings_DynamicMode_OverridesValidationError{ + field: "data_rate_2", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case "data_rate_3": + + if v, ok := interface{}(m.GetDataRate_3()).(interface{ ValidateFields(...string) error }); ok { + if err := v.ValidateFields(subs...); err != nil { + return ADRSettings_DynamicMode_OverridesValidationError{ + field: "data_rate_3", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case "data_rate_4": + + if v, ok := interface{}(m.GetDataRate_4()).(interface{ ValidateFields(...string) error }); ok { + if err := v.ValidateFields(subs...); err != nil { + return ADRSettings_DynamicMode_OverridesValidationError{ + field: "data_rate_4", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case "data_rate_5": + + if v, ok := interface{}(m.GetDataRate_5()).(interface{ ValidateFields(...string) error }); ok { + if err := v.ValidateFields(subs...); err != nil { + return ADRSettings_DynamicMode_OverridesValidationError{ + field: "data_rate_5", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case "data_rate_6": + + if v, ok := interface{}(m.GetDataRate_6()).(interface{ ValidateFields(...string) error }); ok { + if err := v.ValidateFields(subs...); err != nil { + return ADRSettings_DynamicMode_OverridesValidationError{ + field: "data_rate_6", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case "data_rate_7": + + if v, ok := interface{}(m.GetDataRate_7()).(interface{ ValidateFields(...string) error }); ok { + if err := v.ValidateFields(subs...); err != nil { + return ADRSettings_DynamicMode_OverridesValidationError{ + field: "data_rate_7", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case "data_rate_8": + + if v, ok := interface{}(m.GetDataRate_8()).(interface{ ValidateFields(...string) error }); ok { + if err := v.ValidateFields(subs...); err != nil { + return ADRSettings_DynamicMode_OverridesValidationError{ + field: "data_rate_8", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case "data_rate_9": + + if v, ok := interface{}(m.GetDataRate_9()).(interface{ ValidateFields(...string) error }); ok { + if err := v.ValidateFields(subs...); err != nil { + return ADRSettings_DynamicMode_OverridesValidationError{ + field: "data_rate_9", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case "data_rate_10": + + if v, ok := interface{}(m.GetDataRate_10()).(interface{ ValidateFields(...string) error }); ok { + if err := v.ValidateFields(subs...); err != nil { + return ADRSettings_DynamicMode_OverridesValidationError{ + field: "data_rate_10", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case "data_rate_11": + + if v, ok := interface{}(m.GetDataRate_11()).(interface{ ValidateFields(...string) error }); ok { + if err := v.ValidateFields(subs...); err != nil { + return ADRSettings_DynamicMode_OverridesValidationError{ + field: "data_rate_11", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case "data_rate_12": + + if v, ok := interface{}(m.GetDataRate_12()).(interface{ ValidateFields(...string) error }); ok { + if err := v.ValidateFields(subs...); err != nil { + return ADRSettings_DynamicMode_OverridesValidationError{ + field: "data_rate_12", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case "data_rate_13": + + if v, ok := interface{}(m.GetDataRate_13()).(interface{ ValidateFields(...string) error }); ok { + if err := v.ValidateFields(subs...); err != nil { + return ADRSettings_DynamicMode_OverridesValidationError{ + field: "data_rate_13", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case "data_rate_14": + + if v, ok := interface{}(m.GetDataRate_14()).(interface{ ValidateFields(...string) error }); ok { + if err := v.ValidateFields(subs...); err != nil { + return ADRSettings_DynamicMode_OverridesValidationError{ + field: "data_rate_14", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case "data_rate_15": + + if v, ok := interface{}(m.GetDataRate_15()).(interface{ ValidateFields(...string) error }); ok { + if err := v.ValidateFields(subs...); err != nil { + return ADRSettings_DynamicMode_OverridesValidationError{ + field: "data_rate_15", + reason: "embedded message failed validation", + cause: err, + } + } + } + + default: + return ADRSettings_DynamicMode_OverridesValidationError{ + field: name, + reason: "invalid field path", + } + } + } + return nil +} + +// ADRSettings_DynamicMode_OverridesValidationError is the validation error +// returned by ADRSettings_DynamicMode_Overrides.ValidateFields if the +// designated constraints aren't met. +type ADRSettings_DynamicMode_OverridesValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ADRSettings_DynamicMode_OverridesValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ADRSettings_DynamicMode_OverridesValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ADRSettings_DynamicMode_OverridesValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ADRSettings_DynamicMode_OverridesValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ADRSettings_DynamicMode_OverridesValidationError) ErrorName() string { + return "ADRSettings_DynamicMode_OverridesValidationError" +} + +// Error satisfies the builtin error interface +func (e ADRSettings_DynamicMode_OverridesValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sADRSettings_DynamicMode_Overrides.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ADRSettings_DynamicMode_OverridesValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ADRSettings_DynamicMode_OverridesValidationError{} + // ValidateFields checks the field values on // ADRSettings_DynamicMode_ChannelSteeringSettings_LoRaNarrowMode with the // rules defined in the proto definition for this message. If any rules are diff --git a/pkg/ttnpb/end_device_flags.pb.go b/pkg/ttnpb/end_device_flags.pb.go index 6819ef0d6e..49b02f3f19 100644 --- a/pkg/ttnpb/end_device_flags.pb.go +++ b/pkg/ttnpb/end_device_flags.pb.go @@ -1710,6 +1710,436 @@ func (m *ADRSettings_DynamicMode_ChannelSteeringSettings) SetFromFlags(flags *pf return paths, nil } +// AddSelectFlagsForADRSettings_DynamicMode_PerDataRateIndexOverride adds flags to select fields in ADRSettings_DynamicMode_PerDataRateIndexOverride. +func AddSelectFlagsForADRSettings_DynamicMode_PerDataRateIndexOverride(flags *pflag.FlagSet, prefix string, hidden bool) { + flags.AddFlag(flagsplugin.NewBoolFlag(flagsplugin.Prefix("min-nb-trans", prefix), flagsplugin.SelectDesc(flagsplugin.Prefix("min-nb-trans", prefix), false), flagsplugin.WithHidden(hidden))) + flags.AddFlag(flagsplugin.NewBoolFlag(flagsplugin.Prefix("max-nb-trans", prefix), flagsplugin.SelectDesc(flagsplugin.Prefix("max-nb-trans", prefix), false), flagsplugin.WithHidden(hidden))) +} + +// SelectFromFlags outputs the fieldmask paths forADRSettings_DynamicMode_PerDataRateIndexOverride message from select flags. +func PathsFromSelectFlagsForADRSettings_DynamicMode_PerDataRateIndexOverride(flags *pflag.FlagSet, prefix string) (paths []string, err error) { + if val, selected, err := flagsplugin.GetBool(flags, flagsplugin.Prefix("min_nb_trans", prefix)); err != nil { + return nil, err + } else if selected && val { + paths = append(paths, flagsplugin.Prefix("min_nb_trans", prefix)) + } + if val, selected, err := flagsplugin.GetBool(flags, flagsplugin.Prefix("max_nb_trans", prefix)); err != nil { + return nil, err + } else if selected && val { + paths = append(paths, flagsplugin.Prefix("max_nb_trans", prefix)) + } + return paths, nil +} + +// AddSetFlagsForADRSettings_DynamicMode_PerDataRateIndexOverride adds flags to select fields in ADRSettings_DynamicMode_PerDataRateIndexOverride. +func AddSetFlagsForADRSettings_DynamicMode_PerDataRateIndexOverride(flags *pflag.FlagSet, prefix string, hidden bool) { + flags.AddFlag(flagsplugin.NewUint32Flag(flagsplugin.Prefix("min-nb-trans", prefix), "", flagsplugin.WithHidden(hidden))) + flags.AddFlag(flagsplugin.NewUint32Flag(flagsplugin.Prefix("max-nb-trans", prefix), "", flagsplugin.WithHidden(hidden))) +} + +// SetFromFlags sets the ADRSettings_DynamicMode_PerDataRateIndexOverride message from flags. +func (m *ADRSettings_DynamicMode_PerDataRateIndexOverride) SetFromFlags(flags *pflag.FlagSet, prefix string) (paths []string, err error) { + if val, changed, err := flagsplugin.GetUint32(flags, flagsplugin.Prefix("min_nb_trans", prefix)); err != nil { + return nil, err + } else if changed { + m.MinNbTrans = &wrapperspb.UInt32Value{Value: val} + paths = append(paths, flagsplugin.Prefix("min_nb_trans", prefix)) + } + if val, changed, err := flagsplugin.GetUint32(flags, flagsplugin.Prefix("max_nb_trans", prefix)); err != nil { + return nil, err + } else if changed { + m.MaxNbTrans = &wrapperspb.UInt32Value{Value: val} + paths = append(paths, flagsplugin.Prefix("max_nb_trans", prefix)) + } + return paths, nil +} + +// AddSelectFlagsForADRSettings_DynamicMode_Overrides adds flags to select fields in ADRSettings_DynamicMode_Overrides. +func AddSelectFlagsForADRSettings_DynamicMode_Overrides(flags *pflag.FlagSet, prefix string, hidden bool) { + flags.AddFlag(flagsplugin.NewBoolFlag(flagsplugin.Prefix("data-rate-0", prefix), flagsplugin.SelectDesc(flagsplugin.Prefix("data-rate-0", prefix), true), flagsplugin.WithHidden(hidden))) + AddSelectFlagsForADRSettings_DynamicMode_PerDataRateIndexOverride(flags, flagsplugin.Prefix("data-rate-0", prefix), hidden) + flags.AddFlag(flagsplugin.NewBoolFlag(flagsplugin.Prefix("data-rate-1", prefix), flagsplugin.SelectDesc(flagsplugin.Prefix("data-rate-1", prefix), true), flagsplugin.WithHidden(hidden))) + AddSelectFlagsForADRSettings_DynamicMode_PerDataRateIndexOverride(flags, flagsplugin.Prefix("data-rate-1", prefix), hidden) + flags.AddFlag(flagsplugin.NewBoolFlag(flagsplugin.Prefix("data-rate-2", prefix), flagsplugin.SelectDesc(flagsplugin.Prefix("data-rate-2", prefix), true), flagsplugin.WithHidden(hidden))) + AddSelectFlagsForADRSettings_DynamicMode_PerDataRateIndexOverride(flags, flagsplugin.Prefix("data-rate-2", prefix), hidden) + flags.AddFlag(flagsplugin.NewBoolFlag(flagsplugin.Prefix("data-rate-3", prefix), flagsplugin.SelectDesc(flagsplugin.Prefix("data-rate-3", prefix), true), flagsplugin.WithHidden(hidden))) + AddSelectFlagsForADRSettings_DynamicMode_PerDataRateIndexOverride(flags, flagsplugin.Prefix("data-rate-3", prefix), hidden) + flags.AddFlag(flagsplugin.NewBoolFlag(flagsplugin.Prefix("data-rate-4", prefix), flagsplugin.SelectDesc(flagsplugin.Prefix("data-rate-4", prefix), true), flagsplugin.WithHidden(hidden))) + AddSelectFlagsForADRSettings_DynamicMode_PerDataRateIndexOverride(flags, flagsplugin.Prefix("data-rate-4", prefix), hidden) + flags.AddFlag(flagsplugin.NewBoolFlag(flagsplugin.Prefix("data-rate-5", prefix), flagsplugin.SelectDesc(flagsplugin.Prefix("data-rate-5", prefix), true), flagsplugin.WithHidden(hidden))) + AddSelectFlagsForADRSettings_DynamicMode_PerDataRateIndexOverride(flags, flagsplugin.Prefix("data-rate-5", prefix), hidden) + flags.AddFlag(flagsplugin.NewBoolFlag(flagsplugin.Prefix("data-rate-6", prefix), flagsplugin.SelectDesc(flagsplugin.Prefix("data-rate-6", prefix), true), flagsplugin.WithHidden(hidden))) + AddSelectFlagsForADRSettings_DynamicMode_PerDataRateIndexOverride(flags, flagsplugin.Prefix("data-rate-6", prefix), hidden) + flags.AddFlag(flagsplugin.NewBoolFlag(flagsplugin.Prefix("data-rate-7", prefix), flagsplugin.SelectDesc(flagsplugin.Prefix("data-rate-7", prefix), true), flagsplugin.WithHidden(hidden))) + AddSelectFlagsForADRSettings_DynamicMode_PerDataRateIndexOverride(flags, flagsplugin.Prefix("data-rate-7", prefix), hidden) + flags.AddFlag(flagsplugin.NewBoolFlag(flagsplugin.Prefix("data-rate-8", prefix), flagsplugin.SelectDesc(flagsplugin.Prefix("data-rate-8", prefix), true), flagsplugin.WithHidden(hidden))) + AddSelectFlagsForADRSettings_DynamicMode_PerDataRateIndexOverride(flags, flagsplugin.Prefix("data-rate-8", prefix), hidden) + flags.AddFlag(flagsplugin.NewBoolFlag(flagsplugin.Prefix("data-rate-9", prefix), flagsplugin.SelectDesc(flagsplugin.Prefix("data-rate-9", prefix), true), flagsplugin.WithHidden(hidden))) + AddSelectFlagsForADRSettings_DynamicMode_PerDataRateIndexOverride(flags, flagsplugin.Prefix("data-rate-9", prefix), hidden) + flags.AddFlag(flagsplugin.NewBoolFlag(flagsplugin.Prefix("data-rate-10", prefix), flagsplugin.SelectDesc(flagsplugin.Prefix("data-rate-10", prefix), true), flagsplugin.WithHidden(hidden))) + AddSelectFlagsForADRSettings_DynamicMode_PerDataRateIndexOverride(flags, flagsplugin.Prefix("data-rate-10", prefix), hidden) + flags.AddFlag(flagsplugin.NewBoolFlag(flagsplugin.Prefix("data-rate-11", prefix), flagsplugin.SelectDesc(flagsplugin.Prefix("data-rate-11", prefix), true), flagsplugin.WithHidden(hidden))) + AddSelectFlagsForADRSettings_DynamicMode_PerDataRateIndexOverride(flags, flagsplugin.Prefix("data-rate-11", prefix), hidden) + flags.AddFlag(flagsplugin.NewBoolFlag(flagsplugin.Prefix("data-rate-12", prefix), flagsplugin.SelectDesc(flagsplugin.Prefix("data-rate-12", prefix), true), flagsplugin.WithHidden(hidden))) + AddSelectFlagsForADRSettings_DynamicMode_PerDataRateIndexOverride(flags, flagsplugin.Prefix("data-rate-12", prefix), hidden) + flags.AddFlag(flagsplugin.NewBoolFlag(flagsplugin.Prefix("data-rate-13", prefix), flagsplugin.SelectDesc(flagsplugin.Prefix("data-rate-13", prefix), true), flagsplugin.WithHidden(hidden))) + AddSelectFlagsForADRSettings_DynamicMode_PerDataRateIndexOverride(flags, flagsplugin.Prefix("data-rate-13", prefix), hidden) + flags.AddFlag(flagsplugin.NewBoolFlag(flagsplugin.Prefix("data-rate-14", prefix), flagsplugin.SelectDesc(flagsplugin.Prefix("data-rate-14", prefix), true), flagsplugin.WithHidden(hidden))) + AddSelectFlagsForADRSettings_DynamicMode_PerDataRateIndexOverride(flags, flagsplugin.Prefix("data-rate-14", prefix), hidden) + flags.AddFlag(flagsplugin.NewBoolFlag(flagsplugin.Prefix("data-rate-15", prefix), flagsplugin.SelectDesc(flagsplugin.Prefix("data-rate-15", prefix), true), flagsplugin.WithHidden(hidden))) + AddSelectFlagsForADRSettings_DynamicMode_PerDataRateIndexOverride(flags, flagsplugin.Prefix("data-rate-15", prefix), hidden) +} + +// SelectFromFlags outputs the fieldmask paths forADRSettings_DynamicMode_Overrides message from select flags. +func PathsFromSelectFlagsForADRSettings_DynamicMode_Overrides(flags *pflag.FlagSet, prefix string) (paths []string, err error) { + if val, selected, err := flagsplugin.GetBool(flags, flagsplugin.Prefix("data_rate_0", prefix)); err != nil { + return nil, err + } else if selected && val { + paths = append(paths, flagsplugin.Prefix("data_rate_0", prefix)) + } + if selectPaths, err := PathsFromSelectFlagsForADRSettings_DynamicMode_PerDataRateIndexOverride(flags, flagsplugin.Prefix("data_rate_0", prefix)); err != nil { + return nil, err + } else { + paths = append(paths, selectPaths...) + } + if val, selected, err := flagsplugin.GetBool(flags, flagsplugin.Prefix("data_rate_1", prefix)); err != nil { + return nil, err + } else if selected && val { + paths = append(paths, flagsplugin.Prefix("data_rate_1", prefix)) + } + if selectPaths, err := PathsFromSelectFlagsForADRSettings_DynamicMode_PerDataRateIndexOverride(flags, flagsplugin.Prefix("data_rate_1", prefix)); err != nil { + return nil, err + } else { + paths = append(paths, selectPaths...) + } + if val, selected, err := flagsplugin.GetBool(flags, flagsplugin.Prefix("data_rate_2", prefix)); err != nil { + return nil, err + } else if selected && val { + paths = append(paths, flagsplugin.Prefix("data_rate_2", prefix)) + } + if selectPaths, err := PathsFromSelectFlagsForADRSettings_DynamicMode_PerDataRateIndexOverride(flags, flagsplugin.Prefix("data_rate_2", prefix)); err != nil { + return nil, err + } else { + paths = append(paths, selectPaths...) + } + if val, selected, err := flagsplugin.GetBool(flags, flagsplugin.Prefix("data_rate_3", prefix)); err != nil { + return nil, err + } else if selected && val { + paths = append(paths, flagsplugin.Prefix("data_rate_3", prefix)) + } + if selectPaths, err := PathsFromSelectFlagsForADRSettings_DynamicMode_PerDataRateIndexOverride(flags, flagsplugin.Prefix("data_rate_3", prefix)); err != nil { + return nil, err + } else { + paths = append(paths, selectPaths...) + } + if val, selected, err := flagsplugin.GetBool(flags, flagsplugin.Prefix("data_rate_4", prefix)); err != nil { + return nil, err + } else if selected && val { + paths = append(paths, flagsplugin.Prefix("data_rate_4", prefix)) + } + if selectPaths, err := PathsFromSelectFlagsForADRSettings_DynamicMode_PerDataRateIndexOverride(flags, flagsplugin.Prefix("data_rate_4", prefix)); err != nil { + return nil, err + } else { + paths = append(paths, selectPaths...) + } + if val, selected, err := flagsplugin.GetBool(flags, flagsplugin.Prefix("data_rate_5", prefix)); err != nil { + return nil, err + } else if selected && val { + paths = append(paths, flagsplugin.Prefix("data_rate_5", prefix)) + } + if selectPaths, err := PathsFromSelectFlagsForADRSettings_DynamicMode_PerDataRateIndexOverride(flags, flagsplugin.Prefix("data_rate_5", prefix)); err != nil { + return nil, err + } else { + paths = append(paths, selectPaths...) + } + if val, selected, err := flagsplugin.GetBool(flags, flagsplugin.Prefix("data_rate_6", prefix)); err != nil { + return nil, err + } else if selected && val { + paths = append(paths, flagsplugin.Prefix("data_rate_6", prefix)) + } + if selectPaths, err := PathsFromSelectFlagsForADRSettings_DynamicMode_PerDataRateIndexOverride(flags, flagsplugin.Prefix("data_rate_6", prefix)); err != nil { + return nil, err + } else { + paths = append(paths, selectPaths...) + } + if val, selected, err := flagsplugin.GetBool(flags, flagsplugin.Prefix("data_rate_7", prefix)); err != nil { + return nil, err + } else if selected && val { + paths = append(paths, flagsplugin.Prefix("data_rate_7", prefix)) + } + if selectPaths, err := PathsFromSelectFlagsForADRSettings_DynamicMode_PerDataRateIndexOverride(flags, flagsplugin.Prefix("data_rate_7", prefix)); err != nil { + return nil, err + } else { + paths = append(paths, selectPaths...) + } + if val, selected, err := flagsplugin.GetBool(flags, flagsplugin.Prefix("data_rate_8", prefix)); err != nil { + return nil, err + } else if selected && val { + paths = append(paths, flagsplugin.Prefix("data_rate_8", prefix)) + } + if selectPaths, err := PathsFromSelectFlagsForADRSettings_DynamicMode_PerDataRateIndexOverride(flags, flagsplugin.Prefix("data_rate_8", prefix)); err != nil { + return nil, err + } else { + paths = append(paths, selectPaths...) + } + if val, selected, err := flagsplugin.GetBool(flags, flagsplugin.Prefix("data_rate_9", prefix)); err != nil { + return nil, err + } else if selected && val { + paths = append(paths, flagsplugin.Prefix("data_rate_9", prefix)) + } + if selectPaths, err := PathsFromSelectFlagsForADRSettings_DynamicMode_PerDataRateIndexOverride(flags, flagsplugin.Prefix("data_rate_9", prefix)); err != nil { + return nil, err + } else { + paths = append(paths, selectPaths...) + } + if val, selected, err := flagsplugin.GetBool(flags, flagsplugin.Prefix("data_rate_10", prefix)); err != nil { + return nil, err + } else if selected && val { + paths = append(paths, flagsplugin.Prefix("data_rate_10", prefix)) + } + if selectPaths, err := PathsFromSelectFlagsForADRSettings_DynamicMode_PerDataRateIndexOverride(flags, flagsplugin.Prefix("data_rate_10", prefix)); err != nil { + return nil, err + } else { + paths = append(paths, selectPaths...) + } + if val, selected, err := flagsplugin.GetBool(flags, flagsplugin.Prefix("data_rate_11", prefix)); err != nil { + return nil, err + } else if selected && val { + paths = append(paths, flagsplugin.Prefix("data_rate_11", prefix)) + } + if selectPaths, err := PathsFromSelectFlagsForADRSettings_DynamicMode_PerDataRateIndexOverride(flags, flagsplugin.Prefix("data_rate_11", prefix)); err != nil { + return nil, err + } else { + paths = append(paths, selectPaths...) + } + if val, selected, err := flagsplugin.GetBool(flags, flagsplugin.Prefix("data_rate_12", prefix)); err != nil { + return nil, err + } else if selected && val { + paths = append(paths, flagsplugin.Prefix("data_rate_12", prefix)) + } + if selectPaths, err := PathsFromSelectFlagsForADRSettings_DynamicMode_PerDataRateIndexOverride(flags, flagsplugin.Prefix("data_rate_12", prefix)); err != nil { + return nil, err + } else { + paths = append(paths, selectPaths...) + } + if val, selected, err := flagsplugin.GetBool(flags, flagsplugin.Prefix("data_rate_13", prefix)); err != nil { + return nil, err + } else if selected && val { + paths = append(paths, flagsplugin.Prefix("data_rate_13", prefix)) + } + if selectPaths, err := PathsFromSelectFlagsForADRSettings_DynamicMode_PerDataRateIndexOverride(flags, flagsplugin.Prefix("data_rate_13", prefix)); err != nil { + return nil, err + } else { + paths = append(paths, selectPaths...) + } + if val, selected, err := flagsplugin.GetBool(flags, flagsplugin.Prefix("data_rate_14", prefix)); err != nil { + return nil, err + } else if selected && val { + paths = append(paths, flagsplugin.Prefix("data_rate_14", prefix)) + } + if selectPaths, err := PathsFromSelectFlagsForADRSettings_DynamicMode_PerDataRateIndexOverride(flags, flagsplugin.Prefix("data_rate_14", prefix)); err != nil { + return nil, err + } else { + paths = append(paths, selectPaths...) + } + if val, selected, err := flagsplugin.GetBool(flags, flagsplugin.Prefix("data_rate_15", prefix)); err != nil { + return nil, err + } else if selected && val { + paths = append(paths, flagsplugin.Prefix("data_rate_15", prefix)) + } + if selectPaths, err := PathsFromSelectFlagsForADRSettings_DynamicMode_PerDataRateIndexOverride(flags, flagsplugin.Prefix("data_rate_15", prefix)); err != nil { + return nil, err + } else { + paths = append(paths, selectPaths...) + } + return paths, nil +} + +// AddSetFlagsForADRSettings_DynamicMode_Overrides adds flags to select fields in ADRSettings_DynamicMode_Overrides. +func AddSetFlagsForADRSettings_DynamicMode_Overrides(flags *pflag.FlagSet, prefix string, hidden bool) { + AddSetFlagsForADRSettings_DynamicMode_PerDataRateIndexOverride(flags, flagsplugin.Prefix("data-rate-0", prefix), hidden) + AddSetFlagsForADRSettings_DynamicMode_PerDataRateIndexOverride(flags, flagsplugin.Prefix("data-rate-1", prefix), hidden) + AddSetFlagsForADRSettings_DynamicMode_PerDataRateIndexOverride(flags, flagsplugin.Prefix("data-rate-2", prefix), hidden) + AddSetFlagsForADRSettings_DynamicMode_PerDataRateIndexOverride(flags, flagsplugin.Prefix("data-rate-3", prefix), hidden) + AddSetFlagsForADRSettings_DynamicMode_PerDataRateIndexOverride(flags, flagsplugin.Prefix("data-rate-4", prefix), hidden) + AddSetFlagsForADRSettings_DynamicMode_PerDataRateIndexOverride(flags, flagsplugin.Prefix("data-rate-5", prefix), hidden) + AddSetFlagsForADRSettings_DynamicMode_PerDataRateIndexOverride(flags, flagsplugin.Prefix("data-rate-6", prefix), hidden) + AddSetFlagsForADRSettings_DynamicMode_PerDataRateIndexOverride(flags, flagsplugin.Prefix("data-rate-7", prefix), hidden) + AddSetFlagsForADRSettings_DynamicMode_PerDataRateIndexOverride(flags, flagsplugin.Prefix("data-rate-8", prefix), hidden) + AddSetFlagsForADRSettings_DynamicMode_PerDataRateIndexOverride(flags, flagsplugin.Prefix("data-rate-9", prefix), hidden) + AddSetFlagsForADRSettings_DynamicMode_PerDataRateIndexOverride(flags, flagsplugin.Prefix("data-rate-10", prefix), hidden) + AddSetFlagsForADRSettings_DynamicMode_PerDataRateIndexOverride(flags, flagsplugin.Prefix("data-rate-11", prefix), hidden) + AddSetFlagsForADRSettings_DynamicMode_PerDataRateIndexOverride(flags, flagsplugin.Prefix("data-rate-12", prefix), hidden) + AddSetFlagsForADRSettings_DynamicMode_PerDataRateIndexOverride(flags, flagsplugin.Prefix("data-rate-13", prefix), hidden) + AddSetFlagsForADRSettings_DynamicMode_PerDataRateIndexOverride(flags, flagsplugin.Prefix("data-rate-14", prefix), hidden) + AddSetFlagsForADRSettings_DynamicMode_PerDataRateIndexOverride(flags, flagsplugin.Prefix("data-rate-15", prefix), hidden) +} + +// SetFromFlags sets the ADRSettings_DynamicMode_Overrides message from flags. +func (m *ADRSettings_DynamicMode_Overrides) SetFromFlags(flags *pflag.FlagSet, prefix string) (paths []string, err error) { + if changed := flagsplugin.IsAnyPrefixSet(flags, flagsplugin.Prefix("data_rate_0", prefix)); changed { + if m.DataRate_0 == nil { + m.DataRate_0 = &ADRSettings_DynamicMode_PerDataRateIndexOverride{} + } + if setPaths, err := m.DataRate_0.SetFromFlags(flags, flagsplugin.Prefix("data_rate_0", prefix)); err != nil { + return nil, err + } else { + paths = append(paths, setPaths...) + } + } + if changed := flagsplugin.IsAnyPrefixSet(flags, flagsplugin.Prefix("data_rate_1", prefix)); changed { + if m.DataRate_1 == nil { + m.DataRate_1 = &ADRSettings_DynamicMode_PerDataRateIndexOverride{} + } + if setPaths, err := m.DataRate_1.SetFromFlags(flags, flagsplugin.Prefix("data_rate_1", prefix)); err != nil { + return nil, err + } else { + paths = append(paths, setPaths...) + } + } + if changed := flagsplugin.IsAnyPrefixSet(flags, flagsplugin.Prefix("data_rate_2", prefix)); changed { + if m.DataRate_2 == nil { + m.DataRate_2 = &ADRSettings_DynamicMode_PerDataRateIndexOverride{} + } + if setPaths, err := m.DataRate_2.SetFromFlags(flags, flagsplugin.Prefix("data_rate_2", prefix)); err != nil { + return nil, err + } else { + paths = append(paths, setPaths...) + } + } + if changed := flagsplugin.IsAnyPrefixSet(flags, flagsplugin.Prefix("data_rate_3", prefix)); changed { + if m.DataRate_3 == nil { + m.DataRate_3 = &ADRSettings_DynamicMode_PerDataRateIndexOverride{} + } + if setPaths, err := m.DataRate_3.SetFromFlags(flags, flagsplugin.Prefix("data_rate_3", prefix)); err != nil { + return nil, err + } else { + paths = append(paths, setPaths...) + } + } + if changed := flagsplugin.IsAnyPrefixSet(flags, flagsplugin.Prefix("data_rate_4", prefix)); changed { + if m.DataRate_4 == nil { + m.DataRate_4 = &ADRSettings_DynamicMode_PerDataRateIndexOverride{} + } + if setPaths, err := m.DataRate_4.SetFromFlags(flags, flagsplugin.Prefix("data_rate_4", prefix)); err != nil { + return nil, err + } else { + paths = append(paths, setPaths...) + } + } + if changed := flagsplugin.IsAnyPrefixSet(flags, flagsplugin.Prefix("data_rate_5", prefix)); changed { + if m.DataRate_5 == nil { + m.DataRate_5 = &ADRSettings_DynamicMode_PerDataRateIndexOverride{} + } + if setPaths, err := m.DataRate_5.SetFromFlags(flags, flagsplugin.Prefix("data_rate_5", prefix)); err != nil { + return nil, err + } else { + paths = append(paths, setPaths...) + } + } + if changed := flagsplugin.IsAnyPrefixSet(flags, flagsplugin.Prefix("data_rate_6", prefix)); changed { + if m.DataRate_6 == nil { + m.DataRate_6 = &ADRSettings_DynamicMode_PerDataRateIndexOverride{} + } + if setPaths, err := m.DataRate_6.SetFromFlags(flags, flagsplugin.Prefix("data_rate_6", prefix)); err != nil { + return nil, err + } else { + paths = append(paths, setPaths...) + } + } + if changed := flagsplugin.IsAnyPrefixSet(flags, flagsplugin.Prefix("data_rate_7", prefix)); changed { + if m.DataRate_7 == nil { + m.DataRate_7 = &ADRSettings_DynamicMode_PerDataRateIndexOverride{} + } + if setPaths, err := m.DataRate_7.SetFromFlags(flags, flagsplugin.Prefix("data_rate_7", prefix)); err != nil { + return nil, err + } else { + paths = append(paths, setPaths...) + } + } + if changed := flagsplugin.IsAnyPrefixSet(flags, flagsplugin.Prefix("data_rate_8", prefix)); changed { + if m.DataRate_8 == nil { + m.DataRate_8 = &ADRSettings_DynamicMode_PerDataRateIndexOverride{} + } + if setPaths, err := m.DataRate_8.SetFromFlags(flags, flagsplugin.Prefix("data_rate_8", prefix)); err != nil { + return nil, err + } else { + paths = append(paths, setPaths...) + } + } + if changed := flagsplugin.IsAnyPrefixSet(flags, flagsplugin.Prefix("data_rate_9", prefix)); changed { + if m.DataRate_9 == nil { + m.DataRate_9 = &ADRSettings_DynamicMode_PerDataRateIndexOverride{} + } + if setPaths, err := m.DataRate_9.SetFromFlags(flags, flagsplugin.Prefix("data_rate_9", prefix)); err != nil { + return nil, err + } else { + paths = append(paths, setPaths...) + } + } + if changed := flagsplugin.IsAnyPrefixSet(flags, flagsplugin.Prefix("data_rate_10", prefix)); changed { + if m.DataRate_10 == nil { + m.DataRate_10 = &ADRSettings_DynamicMode_PerDataRateIndexOverride{} + } + if setPaths, err := m.DataRate_10.SetFromFlags(flags, flagsplugin.Prefix("data_rate_10", prefix)); err != nil { + return nil, err + } else { + paths = append(paths, setPaths...) + } + } + if changed := flagsplugin.IsAnyPrefixSet(flags, flagsplugin.Prefix("data_rate_11", prefix)); changed { + if m.DataRate_11 == nil { + m.DataRate_11 = &ADRSettings_DynamicMode_PerDataRateIndexOverride{} + } + if setPaths, err := m.DataRate_11.SetFromFlags(flags, flagsplugin.Prefix("data_rate_11", prefix)); err != nil { + return nil, err + } else { + paths = append(paths, setPaths...) + } + } + if changed := flagsplugin.IsAnyPrefixSet(flags, flagsplugin.Prefix("data_rate_12", prefix)); changed { + if m.DataRate_12 == nil { + m.DataRate_12 = &ADRSettings_DynamicMode_PerDataRateIndexOverride{} + } + if setPaths, err := m.DataRate_12.SetFromFlags(flags, flagsplugin.Prefix("data_rate_12", prefix)); err != nil { + return nil, err + } else { + paths = append(paths, setPaths...) + } + } + if changed := flagsplugin.IsAnyPrefixSet(flags, flagsplugin.Prefix("data_rate_13", prefix)); changed { + if m.DataRate_13 == nil { + m.DataRate_13 = &ADRSettings_DynamicMode_PerDataRateIndexOverride{} + } + if setPaths, err := m.DataRate_13.SetFromFlags(flags, flagsplugin.Prefix("data_rate_13", prefix)); err != nil { + return nil, err + } else { + paths = append(paths, setPaths...) + } + } + if changed := flagsplugin.IsAnyPrefixSet(flags, flagsplugin.Prefix("data_rate_14", prefix)); changed { + if m.DataRate_14 == nil { + m.DataRate_14 = &ADRSettings_DynamicMode_PerDataRateIndexOverride{} + } + if setPaths, err := m.DataRate_14.SetFromFlags(flags, flagsplugin.Prefix("data_rate_14", prefix)); err != nil { + return nil, err + } else { + paths = append(paths, setPaths...) + } + } + if changed := flagsplugin.IsAnyPrefixSet(flags, flagsplugin.Prefix("data_rate_15", prefix)); changed { + if m.DataRate_15 == nil { + m.DataRate_15 = &ADRSettings_DynamicMode_PerDataRateIndexOverride{} + } + if setPaths, err := m.DataRate_15.SetFromFlags(flags, flagsplugin.Prefix("data_rate_15", prefix)); err != nil { + return nil, err + } else { + paths = append(paths, setPaths...) + } + } + return paths, nil +} + // AddSelectFlagsForADRSettings_DynamicMode adds flags to select fields in ADRSettings_DynamicMode. func AddSelectFlagsForADRSettings_DynamicMode(flags *pflag.FlagSet, prefix string, hidden bool) { flags.AddFlag(flagsplugin.NewBoolFlag(flagsplugin.Prefix("margin", prefix), flagsplugin.SelectDesc(flagsplugin.Prefix("margin", prefix), false), flagsplugin.WithHidden(hidden))) @@ -1723,6 +2153,8 @@ func AddSelectFlagsForADRSettings_DynamicMode(flags *pflag.FlagSet, prefix strin flags.AddFlag(flagsplugin.NewBoolFlag(flagsplugin.Prefix("max-nb-trans", prefix), flagsplugin.SelectDesc(flagsplugin.Prefix("max-nb-trans", prefix), false), flagsplugin.WithHidden(hidden))) flags.AddFlag(flagsplugin.NewBoolFlag(flagsplugin.Prefix("channel-steering", prefix), flagsplugin.SelectDesc(flagsplugin.Prefix("channel-steering", prefix), true), flagsplugin.WithHidden(hidden))) AddSelectFlagsForADRSettings_DynamicMode_ChannelSteeringSettings(flags, flagsplugin.Prefix("channel-steering", prefix), hidden) + flags.AddFlag(flagsplugin.NewBoolFlag(flagsplugin.Prefix("overrides", prefix), flagsplugin.SelectDesc(flagsplugin.Prefix("overrides", prefix), true), flagsplugin.WithHidden(hidden))) + AddSelectFlagsForADRSettings_DynamicMode_Overrides(flags, flagsplugin.Prefix("overrides", prefix), hidden) } // SelectFromFlags outputs the fieldmask paths forADRSettings_DynamicMode message from select flags. @@ -1782,6 +2214,16 @@ func PathsFromSelectFlagsForADRSettings_DynamicMode(flags *pflag.FlagSet, prefix } else { paths = append(paths, selectPaths...) } + if val, selected, err := flagsplugin.GetBool(flags, flagsplugin.Prefix("overrides", prefix)); err != nil { + return nil, err + } else if selected && val { + paths = append(paths, flagsplugin.Prefix("overrides", prefix)) + } + if selectPaths, err := PathsFromSelectFlagsForADRSettings_DynamicMode_Overrides(flags, flagsplugin.Prefix("overrides", prefix)); err != nil { + return nil, err + } else { + paths = append(paths, selectPaths...) + } return paths, nil } @@ -1797,6 +2239,7 @@ func AddSetFlagsForADRSettings_DynamicMode(flags *pflag.FlagSet, prefix string, flags.AddFlag(flagsplugin.NewUint32Flag(flagsplugin.Prefix("min-nb-trans", prefix), "", flagsplugin.WithHidden(hidden))) flags.AddFlag(flagsplugin.NewUint32Flag(flagsplugin.Prefix("max-nb-trans", prefix), "", flagsplugin.WithHidden(hidden))) AddSetFlagsForADRSettings_DynamicMode_ChannelSteeringSettings(flags, flagsplugin.Prefix("channel-steering", prefix), hidden) + AddSetFlagsForADRSettings_DynamicMode_Overrides(flags, flagsplugin.Prefix("overrides", prefix), hidden) } // SetFromFlags sets the ADRSettings_DynamicMode message from flags. @@ -1861,6 +2304,16 @@ func (m *ADRSettings_DynamicMode) SetFromFlags(flags *pflag.FlagSet, prefix stri paths = append(paths, setPaths...) } } + if changed := flagsplugin.IsAnyPrefixSet(flags, flagsplugin.Prefix("overrides", prefix)); changed { + if m.Overrides == nil { + m.Overrides = &ADRSettings_DynamicMode_Overrides{} + } + if setPaths, err := m.Overrides.SetFromFlags(flags, flagsplugin.Prefix("overrides", prefix)); err != nil { + return nil, err + } else { + paths = append(paths, setPaths...) + } + } return paths, nil } diff --git a/pkg/ttnpb/end_device_json.pb.go b/pkg/ttnpb/end_device_json.pb.go index bfb308e251..5e658943ca 100644 --- a/pkg/ttnpb/end_device_json.pb.go +++ b/pkg/ttnpb/end_device_json.pb.go @@ -1595,6 +1595,12 @@ func (x *ADRSettings_DynamicMode) MarshalProtoJSON(s *jsonplugin.MarshalState) { // NOTE: ADRSettings_DynamicMode_ChannelSteeringSettings does not seem to implement MarshalProtoJSON. golang.MarshalMessage(s, x.ChannelSteering) } + if x.Overrides != nil || s.HasField("overrides") { + s.WriteMoreIf(&wroteField) + s.WriteObjectField("overrides") + // NOTE: ADRSettings_DynamicMode_Overrides does not seem to implement MarshalProtoJSON. + golang.MarshalMessage(s, x.Overrides) + } s.WriteObjectEnd() } @@ -1693,6 +1699,16 @@ func (x *ADRSettings_DynamicMode) UnmarshalProtoJSON(s *jsonplugin.UnmarshalStat var v ADRSettings_DynamicMode_ChannelSteeringSettings golang.UnmarshalMessage(s, &v) x.ChannelSteering = &v + case "overrides": + s.AddField("overrides") + if s.ReadNil() { + x.Overrides = nil + return + } + // NOTE: ADRSettings_DynamicMode_Overrides does not seem to implement UnmarshalProtoJSON. + var v ADRSettings_DynamicMode_Overrides + golang.UnmarshalMessage(s, &v) + x.Overrides = &v } }) } diff --git a/pkg/ttnpb/field_mask_validation.go b/pkg/ttnpb/field_mask_validation.go index 302c0a15f2..6a323dbdab 100644 --- a/pkg/ttnpb/field_mask_validation.go +++ b/pkg/ttnpb/field_mask_validation.go @@ -124,6 +124,55 @@ var nsEndDeviceReadFieldPaths = [...]string{ "mac_settings.adr.mode.dynamic.min_data_rate_index.value", "mac_settings.adr.mode.dynamic.min_nb_trans", "mac_settings.adr.mode.dynamic.min_tx_power_index", + "mac_settings.adr.mode.dynamic.overrides", + "mac_settings.adr.mode.dynamic.overrides.data_rate_0", + "mac_settings.adr.mode.dynamic.overrides.data_rate_0.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_0.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_1", + "mac_settings.adr.mode.dynamic.overrides.data_rate_1.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_1.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_10", + "mac_settings.adr.mode.dynamic.overrides.data_rate_10.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_10.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_11", + "mac_settings.adr.mode.dynamic.overrides.data_rate_11.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_11.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_12", + "mac_settings.adr.mode.dynamic.overrides.data_rate_12.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_12.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_13", + "mac_settings.adr.mode.dynamic.overrides.data_rate_13.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_13.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_14", + "mac_settings.adr.mode.dynamic.overrides.data_rate_14.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_14.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_15", + "mac_settings.adr.mode.dynamic.overrides.data_rate_15.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_15.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_2", + "mac_settings.adr.mode.dynamic.overrides.data_rate_2.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_2.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_3", + "mac_settings.adr.mode.dynamic.overrides.data_rate_3.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_3.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_4", + "mac_settings.adr.mode.dynamic.overrides.data_rate_4.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_4.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_5", + "mac_settings.adr.mode.dynamic.overrides.data_rate_5.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_5.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_6", + "mac_settings.adr.mode.dynamic.overrides.data_rate_6.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_6.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_7", + "mac_settings.adr.mode.dynamic.overrides.data_rate_7.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_7.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_8", + "mac_settings.adr.mode.dynamic.overrides.data_rate_8.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_8.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_9", + "mac_settings.adr.mode.dynamic.overrides.data_rate_9.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_9.min_nb_trans", "mac_settings.adr.mode.static", "mac_settings.adr.mode.static.data_rate_index", "mac_settings.adr.mode.static.nb_trans", @@ -986,6 +1035,55 @@ var RPCFieldMaskPaths = map[string]RPCFieldMaskPathValue{ "mac_settings.adr.mode.dynamic.min_data_rate_index.value", "mac_settings.adr.mode.dynamic.min_nb_trans", "mac_settings.adr.mode.dynamic.min_tx_power_index", + "mac_settings.adr.mode.dynamic.overrides", + "mac_settings.adr.mode.dynamic.overrides.data_rate_0", + "mac_settings.adr.mode.dynamic.overrides.data_rate_0.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_0.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_1", + "mac_settings.adr.mode.dynamic.overrides.data_rate_1.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_1.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_10", + "mac_settings.adr.mode.dynamic.overrides.data_rate_10.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_10.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_11", + "mac_settings.adr.mode.dynamic.overrides.data_rate_11.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_11.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_12", + "mac_settings.adr.mode.dynamic.overrides.data_rate_12.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_12.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_13", + "mac_settings.adr.mode.dynamic.overrides.data_rate_13.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_13.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_14", + "mac_settings.adr.mode.dynamic.overrides.data_rate_14.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_14.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_15", + "mac_settings.adr.mode.dynamic.overrides.data_rate_15.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_15.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_2", + "mac_settings.adr.mode.dynamic.overrides.data_rate_2.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_2.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_3", + "mac_settings.adr.mode.dynamic.overrides.data_rate_3.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_3.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_4", + "mac_settings.adr.mode.dynamic.overrides.data_rate_4.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_4.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_5", + "mac_settings.adr.mode.dynamic.overrides.data_rate_5.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_5.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_6", + "mac_settings.adr.mode.dynamic.overrides.data_rate_6.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_6.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_7", + "mac_settings.adr.mode.dynamic.overrides.data_rate_7.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_7.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_8", + "mac_settings.adr.mode.dynamic.overrides.data_rate_8.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_8.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_9", + "mac_settings.adr.mode.dynamic.overrides.data_rate_9.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_9.min_nb_trans", "mac_settings.adr.mode.static", "mac_settings.adr.mode.static.data_rate_index", "mac_settings.adr.mode.static.nb_trans", diff --git a/pkg/ttnpb/qrcodegenerator.pb.paths.fm.go b/pkg/ttnpb/qrcodegenerator.pb.paths.fm.go index 52103884db..8f1eb3ddd5 100644 --- a/pkg/ttnpb/qrcodegenerator.pb.paths.fm.go +++ b/pkg/ttnpb/qrcodegenerator.pb.paths.fm.go @@ -86,6 +86,55 @@ var GenerateEndDeviceQRCodeRequestFieldPathsNested = []string{ "end_device.mac_settings.adr.mode.dynamic.min_data_rate_index.value", "end_device.mac_settings.adr.mode.dynamic.min_nb_trans", "end_device.mac_settings.adr.mode.dynamic.min_tx_power_index", + "end_device.mac_settings.adr.mode.dynamic.overrides", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_0", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_0.max_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_0.min_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_1", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_1.max_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_1.min_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_10", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_10.max_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_10.min_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_11", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_11.max_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_11.min_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_12", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_12.max_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_12.min_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_13", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_13.max_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_13.min_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_14", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_14.max_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_14.min_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_15", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_15.max_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_15.min_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_2", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_2.max_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_2.min_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_3", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_3.max_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_3.min_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_4", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_4.max_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_4.min_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_5", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_5.max_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_5.min_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_6", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_6.max_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_6.min_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_7", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_7.max_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_7.min_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_8", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_8.max_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_8.min_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_9", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_9.max_nb_trans", + "end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_9.min_nb_trans", "end_device.mac_settings.adr.mode.static", "end_device.mac_settings.adr.mode.static.data_rate_index", "end_device.mac_settings.adr.mode.static.nb_trans", @@ -825,6 +874,55 @@ var ParseEndDeviceQRCodeResponseFieldPathsNested = []string{ "end_device_template.end_device.mac_settings.adr.mode.dynamic.min_data_rate_index.value", "end_device_template.end_device.mac_settings.adr.mode.dynamic.min_nb_trans", "end_device_template.end_device.mac_settings.adr.mode.dynamic.min_tx_power_index", + "end_device_template.end_device.mac_settings.adr.mode.dynamic.overrides", + "end_device_template.end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_0", + "end_device_template.end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_0.max_nb_trans", + "end_device_template.end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_0.min_nb_trans", + "end_device_template.end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_1", + "end_device_template.end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_1.max_nb_trans", + "end_device_template.end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_1.min_nb_trans", + "end_device_template.end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_10", + "end_device_template.end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_10.max_nb_trans", + "end_device_template.end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_10.min_nb_trans", + "end_device_template.end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_11", + "end_device_template.end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_11.max_nb_trans", + "end_device_template.end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_11.min_nb_trans", + "end_device_template.end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_12", + "end_device_template.end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_12.max_nb_trans", + "end_device_template.end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_12.min_nb_trans", + "end_device_template.end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_13", + "end_device_template.end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_13.max_nb_trans", + "end_device_template.end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_13.min_nb_trans", + "end_device_template.end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_14", + "end_device_template.end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_14.max_nb_trans", + "end_device_template.end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_14.min_nb_trans", + "end_device_template.end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_15", + "end_device_template.end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_15.max_nb_trans", + "end_device_template.end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_15.min_nb_trans", + "end_device_template.end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_2", + "end_device_template.end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_2.max_nb_trans", + "end_device_template.end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_2.min_nb_trans", + "end_device_template.end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_3", + "end_device_template.end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_3.max_nb_trans", + "end_device_template.end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_3.min_nb_trans", + "end_device_template.end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_4", + "end_device_template.end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_4.max_nb_trans", + "end_device_template.end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_4.min_nb_trans", + "end_device_template.end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_5", + "end_device_template.end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_5.max_nb_trans", + "end_device_template.end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_5.min_nb_trans", + "end_device_template.end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_6", + "end_device_template.end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_6.max_nb_trans", + "end_device_template.end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_6.min_nb_trans", + "end_device_template.end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_7", + "end_device_template.end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_7.max_nb_trans", + "end_device_template.end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_7.min_nb_trans", + "end_device_template.end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_8", + "end_device_template.end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_8.max_nb_trans", + "end_device_template.end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_8.min_nb_trans", + "end_device_template.end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_9", + "end_device_template.end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_9.max_nb_trans", + "end_device_template.end_device.mac_settings.adr.mode.dynamic.overrides.data_rate_9.min_nb_trans", "end_device_template.end_device.mac_settings.adr.mode.static", "end_device_template.end_device.mac_settings.adr.mode.static.data_rate_index", "end_device_template.end_device.mac_settings.adr.mode.static.nb_trans", diff --git a/pkg/ttnpb/zero_test.go b/pkg/ttnpb/zero_test.go index cd7b4af5d0..a0579b597f 100644 --- a/pkg/ttnpb/zero_test.go +++ b/pkg/ttnpb/zero_test.go @@ -29,104 +29,108 @@ import ( func TestFieldIsZero(t *testing.T) { t.Parallel() for v, paths := range map[interface{ FieldIsZero(string) bool }][]string{ - &ADRSettings{}: ADRSettingsFieldPathsNested, - (*ADRSettings)(nil): ADRSettingsFieldPathsNested, - &ADRSettings_StaticMode{}: ADRSettings_StaticModeFieldPathsNested, - (*ADRSettings_StaticMode)(nil): ADRSettings_StaticModeFieldPathsNested, - &ADRSettings_DynamicMode{}: ADRSettings_DynamicModeFieldPathsNested, - (*ADRSettings_DynamicMode)(nil): ADRSettings_DynamicModeFieldPathsNested, - &ADRSettings_DynamicMode_ChannelSteeringSettings{}: ADRSettings_DynamicMode_ChannelSteeringSettingsFieldPathsNested, // nolint: lll - (*ADRSettings_DynamicMode_ChannelSteeringSettings)(nil): ADRSettings_DynamicMode_ChannelSteeringSettingsFieldPathsNested, // nolint: lll - &ADRAckDelayExponentValue{}: ADRAckDelayExponentValueFieldPathsNested, - (*ADRAckDelayExponentValue)(nil): ADRAckDelayExponentValueFieldPathsNested, - &ADRAckLimitExponentValue{}: ADRAckLimitExponentValueFieldPathsNested, - (*ADRAckLimitExponentValue)(nil): ADRAckLimitExponentValueFieldPathsNested, - &AggregatedDutyCycleValue{}: AggregatedDutyCycleValueFieldPathsNested, - (*AggregatedDutyCycleValue)(nil): AggregatedDutyCycleValueFieldPathsNested, - &ApplicationDownlink_ClassBC{}: ApplicationDownlink_ClassBCFieldPathsNested, - (*ApplicationDownlink_ClassBC)(nil): ApplicationDownlink_ClassBCFieldPathsNested, - &ApplicationDownlink{}: ApplicationDownlinkFieldPathsNested, - (*ApplicationDownlink)(nil): ApplicationDownlinkFieldPathsNested, - &CFList{}: CFListFieldPathsNested, - (*CFList)(nil): CFListFieldPathsNested, - &DataRateIndexValue{}: DataRateIndexValueFieldPathsNested, - (*DataRateIndexValue)(nil): DataRateIndexValueFieldPathsNested, - &DeviceEIRPValue{}: DeviceEIRPValueFieldPathsNested, - (*DeviceEIRPValue)(nil): DeviceEIRPValueFieldPathsNested, - &DLSettings{}: DLSettingsFieldPathsNested, - (*DLSettings)(nil): DLSettingsFieldPathsNested, - &EndDeviceAuthenticationCode{}: EndDeviceAuthenticationCodeFieldPathsNested, - (*EndDeviceAuthenticationCode)(nil): EndDeviceAuthenticationCodeFieldPathsNested, - &EndDeviceIdentifiers{}: EndDeviceIdentifiersFieldPathsNested, - (*EndDeviceIdentifiers)(nil): EndDeviceIdentifiersFieldPathsNested, - &EndDeviceVersionIdentifiers{}: EndDeviceVersionIdentifiersFieldPathsNested, - (*EndDeviceVersionIdentifiers)(nil): EndDeviceVersionIdentifiersFieldPathsNested, - &EndDevice{}: EndDeviceFieldPathsNested, - (*EndDevice)(nil): EndDeviceFieldPathsNested, - &FCtrl{}: FCtrlFieldPathsNested, - (*FCtrl)(nil): FCtrlFieldPathsNested, - &FHDR{}: FHDRFieldPathsNested, - (*FHDR)(nil): FHDRFieldPathsNested, - &JoinAcceptPayload{}: JoinAcceptPayloadFieldPathsNested, - (*JoinAcceptPayload)(nil): JoinAcceptPayloadFieldPathsNested, - &JoinRequestPayload{}: JoinRequestPayloadFieldPathsNested, - (*JoinRequestPayload)(nil): JoinRequestPayloadFieldPathsNested, - &JoinRequest{}: JoinRequestFieldPathsNested, - (*JoinRequest)(nil): JoinRequestFieldPathsNested, - &MACParameters{}: MACParametersFieldPathsNested, - (*MACParameters)(nil): MACParametersFieldPathsNested, - &MACPayload{}: MACPayloadFieldPathsNested, - (*MACPayload)(nil): MACPayloadFieldPathsNested, - &MACSettings{}: MACSettingsFieldPathsNested, - (*MACSettings)(nil): MACSettingsFieldPathsNested, - &MACState_JoinAccept{}: MACState_JoinAcceptFieldPathsNested, - (*MACState_JoinAccept)(nil): MACState_JoinAcceptFieldPathsNested, - &MACState_JoinRequest{}: MACState_JoinRequestFieldPathsNested, - (*MACState_JoinRequest)(nil): MACState_JoinRequestFieldPathsNested, - &MACState{}: MACStateFieldPathsNested, - (*MACState)(nil): MACStateFieldPathsNested, - &MessagePayloadFormatters{}: MessagePayloadFormattersFieldPathsNested, - (*MessagePayloadFormatters)(nil): MessagePayloadFormattersFieldPathsNested, - &Message{}: MessageFieldPathsNested, - (*Message)(nil): MessageFieldPathsNested, - &MHDR{}: MHDRFieldPathsNested, - (*MHDR)(nil): MHDRFieldPathsNested, - &Picture_Embedded{}: Picture_EmbeddedFieldPathsNested, - (*Picture_Embedded)(nil): Picture_EmbeddedFieldPathsNested, - &Picture{}: PictureFieldPathsNested, - (*Picture)(nil): PictureFieldPathsNested, - &PingSlotPeriodValue{}: PingSlotPeriodValueFieldPathsNested, - (*PingSlotPeriodValue)(nil): PingSlotPeriodValueFieldPathsNested, - &RejoinRequestPayload{}: RejoinRequestPayloadFieldPathsNested, - (*RejoinRequestPayload)(nil): RejoinRequestPayloadFieldPathsNested, - &RootKeys{}: RootKeysFieldPathsNested, - (*RootKeys)(nil): RootKeysFieldPathsNested, - &RxDelayValue{}: RxDelayValueFieldPathsNested, - (*RxDelayValue)(nil): RxDelayValueFieldPathsNested, - &SetEndDeviceRequest{}: EndDeviceFieldPathsNested, - (*SetEndDeviceRequest)(nil): EndDeviceFieldPathsNested, - &UpdateEndDeviceRequest{}: EndDeviceFieldPathsNested, - (*UpdateEndDeviceRequest)(nil): EndDeviceFieldPathsNested, - &RelayParameters{}: RelayParametersFieldPathsNested, - (*RelayParameters)(nil): RelayParametersFieldPathsNested, - &ServedRelayParameters{}: ServedRelayParametersFieldPathsNested, - (*ServedRelayParameters)(nil): ServedRelayParametersFieldPathsNested, - &ServingRelayParameters{}: ServingRelayParametersFieldPathsNested, - (*ServingRelayParameters)(nil): ServingRelayParametersFieldPathsNested, - &RelaySecondChannel{}: RelaySecondChannelFieldPathsNested, - (*RelaySecondChannel)(nil): RelaySecondChannelFieldPathsNested, - &RelayEndDeviceDynamicMode{}: RelayEndDeviceDynamicModeFieldPathsNested, - (*RelayEndDeviceDynamicMode)(nil): RelayEndDeviceDynamicModeFieldPathsNested, - &RelayForwardLimits{}: RelayForwardLimitsFieldPathsNested, - (*RelayForwardLimits)(nil): RelayForwardLimitsFieldPathsNested, - &ServingRelayForwardingLimits{}: ServingRelayForwardingLimitsFieldPathsNested, - (*ServingRelayForwardingLimits)(nil): ServingRelayForwardingLimitsFieldPathsNested, - &RelaySettings{}: RelaySettingsFieldPathsNested, - (*RelaySettings)(nil): RelaySettingsFieldPathsNested, - &ServedRelaySettings{}: ServedRelaySettingsFieldPathsNested, - (*ServedRelaySettings)(nil): ServedRelaySettingsFieldPathsNested, - &ServingRelaySettings{}: ServingRelaySettingsFieldPathsNested, - (*ServingRelaySettings)(nil): ServingRelaySettingsFieldPathsNested, + &ADRSettings{}: ADRSettingsFieldPathsNested, + (*ADRSettings)(nil): ADRSettingsFieldPathsNested, + &ADRSettings_StaticMode{}: ADRSettings_StaticModeFieldPathsNested, + (*ADRSettings_StaticMode)(nil): ADRSettings_StaticModeFieldPathsNested, + &ADRSettings_DynamicMode{}: ADRSettings_DynamicModeFieldPathsNested, + (*ADRSettings_DynamicMode)(nil): ADRSettings_DynamicModeFieldPathsNested, + &ADRSettings_DynamicMode_ChannelSteeringSettings{}: ADRSettings_DynamicMode_ChannelSteeringSettingsFieldPathsNested, // nolint: lll + (*ADRSettings_DynamicMode_ChannelSteeringSettings)(nil): ADRSettings_DynamicMode_ChannelSteeringSettingsFieldPathsNested, // nolint: lll + &ADRSettings_DynamicMode_PerDataRateIndexOverride{}: ADRSettings_DynamicMode_PerDataRateIndexOverrideFieldPathsNested, // nolint: lll + (*ADRSettings_DynamicMode_PerDataRateIndexOverride)(nil): ADRSettings_DynamicMode_PerDataRateIndexOverrideFieldPathsNested, // nolint: lll + &ADRSettings_DynamicMode_Overrides{}: ADRSettings_DynamicMode_OverridesFieldPathsNested, // nolint: lll + (*ADRSettings_DynamicMode_Overrides)(nil): ADRSettings_DynamicMode_OverridesFieldPathsNested, // nolint: lll + &ADRAckDelayExponentValue{}: ADRAckDelayExponentValueFieldPathsNested, + (*ADRAckDelayExponentValue)(nil): ADRAckDelayExponentValueFieldPathsNested, + &ADRAckLimitExponentValue{}: ADRAckLimitExponentValueFieldPathsNested, + (*ADRAckLimitExponentValue)(nil): ADRAckLimitExponentValueFieldPathsNested, + &AggregatedDutyCycleValue{}: AggregatedDutyCycleValueFieldPathsNested, + (*AggregatedDutyCycleValue)(nil): AggregatedDutyCycleValueFieldPathsNested, + &ApplicationDownlink_ClassBC{}: ApplicationDownlink_ClassBCFieldPathsNested, + (*ApplicationDownlink_ClassBC)(nil): ApplicationDownlink_ClassBCFieldPathsNested, + &ApplicationDownlink{}: ApplicationDownlinkFieldPathsNested, + (*ApplicationDownlink)(nil): ApplicationDownlinkFieldPathsNested, + &CFList{}: CFListFieldPathsNested, + (*CFList)(nil): CFListFieldPathsNested, + &DataRateIndexValue{}: DataRateIndexValueFieldPathsNested, + (*DataRateIndexValue)(nil): DataRateIndexValueFieldPathsNested, + &DeviceEIRPValue{}: DeviceEIRPValueFieldPathsNested, + (*DeviceEIRPValue)(nil): DeviceEIRPValueFieldPathsNested, + &DLSettings{}: DLSettingsFieldPathsNested, + (*DLSettings)(nil): DLSettingsFieldPathsNested, + &EndDeviceAuthenticationCode{}: EndDeviceAuthenticationCodeFieldPathsNested, + (*EndDeviceAuthenticationCode)(nil): EndDeviceAuthenticationCodeFieldPathsNested, + &EndDeviceIdentifiers{}: EndDeviceIdentifiersFieldPathsNested, + (*EndDeviceIdentifiers)(nil): EndDeviceIdentifiersFieldPathsNested, + &EndDeviceVersionIdentifiers{}: EndDeviceVersionIdentifiersFieldPathsNested, + (*EndDeviceVersionIdentifiers)(nil): EndDeviceVersionIdentifiersFieldPathsNested, + &EndDevice{}: EndDeviceFieldPathsNested, + (*EndDevice)(nil): EndDeviceFieldPathsNested, + &FCtrl{}: FCtrlFieldPathsNested, + (*FCtrl)(nil): FCtrlFieldPathsNested, + &FHDR{}: FHDRFieldPathsNested, + (*FHDR)(nil): FHDRFieldPathsNested, + &JoinAcceptPayload{}: JoinAcceptPayloadFieldPathsNested, + (*JoinAcceptPayload)(nil): JoinAcceptPayloadFieldPathsNested, + &JoinRequestPayload{}: JoinRequestPayloadFieldPathsNested, + (*JoinRequestPayload)(nil): JoinRequestPayloadFieldPathsNested, + &JoinRequest{}: JoinRequestFieldPathsNested, + (*JoinRequest)(nil): JoinRequestFieldPathsNested, + &MACParameters{}: MACParametersFieldPathsNested, + (*MACParameters)(nil): MACParametersFieldPathsNested, + &MACPayload{}: MACPayloadFieldPathsNested, + (*MACPayload)(nil): MACPayloadFieldPathsNested, + &MACSettings{}: MACSettingsFieldPathsNested, + (*MACSettings)(nil): MACSettingsFieldPathsNested, + &MACState_JoinAccept{}: MACState_JoinAcceptFieldPathsNested, + (*MACState_JoinAccept)(nil): MACState_JoinAcceptFieldPathsNested, + &MACState_JoinRequest{}: MACState_JoinRequestFieldPathsNested, + (*MACState_JoinRequest)(nil): MACState_JoinRequestFieldPathsNested, + &MACState{}: MACStateFieldPathsNested, + (*MACState)(nil): MACStateFieldPathsNested, + &MessagePayloadFormatters{}: MessagePayloadFormattersFieldPathsNested, + (*MessagePayloadFormatters)(nil): MessagePayloadFormattersFieldPathsNested, + &Message{}: MessageFieldPathsNested, + (*Message)(nil): MessageFieldPathsNested, + &MHDR{}: MHDRFieldPathsNested, + (*MHDR)(nil): MHDRFieldPathsNested, + &Picture_Embedded{}: Picture_EmbeddedFieldPathsNested, + (*Picture_Embedded)(nil): Picture_EmbeddedFieldPathsNested, + &Picture{}: PictureFieldPathsNested, + (*Picture)(nil): PictureFieldPathsNested, + &PingSlotPeriodValue{}: PingSlotPeriodValueFieldPathsNested, + (*PingSlotPeriodValue)(nil): PingSlotPeriodValueFieldPathsNested, + &RejoinRequestPayload{}: RejoinRequestPayloadFieldPathsNested, + (*RejoinRequestPayload)(nil): RejoinRequestPayloadFieldPathsNested, + &RootKeys{}: RootKeysFieldPathsNested, + (*RootKeys)(nil): RootKeysFieldPathsNested, + &RxDelayValue{}: RxDelayValueFieldPathsNested, + (*RxDelayValue)(nil): RxDelayValueFieldPathsNested, + &SetEndDeviceRequest{}: EndDeviceFieldPathsNested, + (*SetEndDeviceRequest)(nil): EndDeviceFieldPathsNested, + &UpdateEndDeviceRequest{}: EndDeviceFieldPathsNested, + (*UpdateEndDeviceRequest)(nil): EndDeviceFieldPathsNested, + &RelayParameters{}: RelayParametersFieldPathsNested, + (*RelayParameters)(nil): RelayParametersFieldPathsNested, + &ServedRelayParameters{}: ServedRelayParametersFieldPathsNested, + (*ServedRelayParameters)(nil): ServedRelayParametersFieldPathsNested, + &ServingRelayParameters{}: ServingRelayParametersFieldPathsNested, + (*ServingRelayParameters)(nil): ServingRelayParametersFieldPathsNested, + &RelaySecondChannel{}: RelaySecondChannelFieldPathsNested, + (*RelaySecondChannel)(nil): RelaySecondChannelFieldPathsNested, + &RelayEndDeviceDynamicMode{}: RelayEndDeviceDynamicModeFieldPathsNested, + (*RelayEndDeviceDynamicMode)(nil): RelayEndDeviceDynamicModeFieldPathsNested, + &RelayForwardLimits{}: RelayForwardLimitsFieldPathsNested, + (*RelayForwardLimits)(nil): RelayForwardLimitsFieldPathsNested, + &ServingRelayForwardingLimits{}: ServingRelayForwardingLimitsFieldPathsNested, + (*ServingRelayForwardingLimits)(nil): ServingRelayForwardingLimitsFieldPathsNested, + &RelaySettings{}: RelaySettingsFieldPathsNested, + (*RelaySettings)(nil): RelaySettingsFieldPathsNested, + &ServedRelaySettings{}: ServedRelaySettingsFieldPathsNested, + (*ServedRelaySettings)(nil): ServedRelaySettingsFieldPathsNested, + &ServingRelaySettings{}: ServingRelaySettingsFieldPathsNested, + (*ServingRelaySettings)(nil): ServingRelaySettingsFieldPathsNested, } { for _, p := range paths { v, p := v, p diff --git a/sdk/js/generated/api-definition.json b/sdk/js/generated/api-definition.json index 74162f9b84..fc12adb717 100644 --- a/sdk/js/generated/api-definition.json +++ b/sdk/js/generated/api-definition.json @@ -4064,6 +4064,55 @@ "mac_settings.adr.mode.dynamic.min_data_rate_index.value", "mac_settings.adr.mode.dynamic.min_nb_trans", "mac_settings.adr.mode.dynamic.min_tx_power_index", + "mac_settings.adr.mode.dynamic.overrides", + "mac_settings.adr.mode.dynamic.overrides.data_rate_0", + "mac_settings.adr.mode.dynamic.overrides.data_rate_0.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_0.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_1", + "mac_settings.adr.mode.dynamic.overrides.data_rate_1.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_1.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_10", + "mac_settings.adr.mode.dynamic.overrides.data_rate_10.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_10.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_11", + "mac_settings.adr.mode.dynamic.overrides.data_rate_11.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_11.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_12", + "mac_settings.adr.mode.dynamic.overrides.data_rate_12.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_12.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_13", + "mac_settings.adr.mode.dynamic.overrides.data_rate_13.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_13.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_14", + "mac_settings.adr.mode.dynamic.overrides.data_rate_14.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_14.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_15", + "mac_settings.adr.mode.dynamic.overrides.data_rate_15.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_15.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_2", + "mac_settings.adr.mode.dynamic.overrides.data_rate_2.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_2.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_3", + "mac_settings.adr.mode.dynamic.overrides.data_rate_3.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_3.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_4", + "mac_settings.adr.mode.dynamic.overrides.data_rate_4.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_4.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_5", + "mac_settings.adr.mode.dynamic.overrides.data_rate_5.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_5.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_6", + "mac_settings.adr.mode.dynamic.overrides.data_rate_6.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_6.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_7", + "mac_settings.adr.mode.dynamic.overrides.data_rate_7.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_7.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_8", + "mac_settings.adr.mode.dynamic.overrides.data_rate_8.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_8.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_9", + "mac_settings.adr.mode.dynamic.overrides.data_rate_9.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_9.min_nb_trans", "mac_settings.adr.mode.static", "mac_settings.adr.mode.static.data_rate_index", "mac_settings.adr.mode.static.nb_trans", @@ -4623,6 +4672,55 @@ "mac_settings.adr.mode.dynamic.min_data_rate_index.value", "mac_settings.adr.mode.dynamic.min_nb_trans", "mac_settings.adr.mode.dynamic.min_tx_power_index", + "mac_settings.adr.mode.dynamic.overrides", + "mac_settings.adr.mode.dynamic.overrides.data_rate_0", + "mac_settings.adr.mode.dynamic.overrides.data_rate_0.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_0.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_1", + "mac_settings.adr.mode.dynamic.overrides.data_rate_1.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_1.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_10", + "mac_settings.adr.mode.dynamic.overrides.data_rate_10.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_10.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_11", + "mac_settings.adr.mode.dynamic.overrides.data_rate_11.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_11.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_12", + "mac_settings.adr.mode.dynamic.overrides.data_rate_12.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_12.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_13", + "mac_settings.adr.mode.dynamic.overrides.data_rate_13.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_13.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_14", + "mac_settings.adr.mode.dynamic.overrides.data_rate_14.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_14.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_15", + "mac_settings.adr.mode.dynamic.overrides.data_rate_15.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_15.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_2", + "mac_settings.adr.mode.dynamic.overrides.data_rate_2.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_2.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_3", + "mac_settings.adr.mode.dynamic.overrides.data_rate_3.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_3.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_4", + "mac_settings.adr.mode.dynamic.overrides.data_rate_4.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_4.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_5", + "mac_settings.adr.mode.dynamic.overrides.data_rate_5.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_5.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_6", + "mac_settings.adr.mode.dynamic.overrides.data_rate_6.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_6.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_7", + "mac_settings.adr.mode.dynamic.overrides.data_rate_7.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_7.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_8", + "mac_settings.adr.mode.dynamic.overrides.data_rate_8.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_8.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_9", + "mac_settings.adr.mode.dynamic.overrides.data_rate_9.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_9.min_nb_trans", "mac_settings.adr.mode.static", "mac_settings.adr.mode.static.data_rate_index", "mac_settings.adr.mode.static.nb_trans", @@ -5178,6 +5276,55 @@ "mac_settings.adr.mode.dynamic.min_data_rate_index.value", "mac_settings.adr.mode.dynamic.min_nb_trans", "mac_settings.adr.mode.dynamic.min_tx_power_index", + "mac_settings.adr.mode.dynamic.overrides", + "mac_settings.adr.mode.dynamic.overrides.data_rate_0", + "mac_settings.adr.mode.dynamic.overrides.data_rate_0.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_0.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_1", + "mac_settings.adr.mode.dynamic.overrides.data_rate_1.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_1.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_10", + "mac_settings.adr.mode.dynamic.overrides.data_rate_10.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_10.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_11", + "mac_settings.adr.mode.dynamic.overrides.data_rate_11.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_11.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_12", + "mac_settings.adr.mode.dynamic.overrides.data_rate_12.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_12.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_13", + "mac_settings.adr.mode.dynamic.overrides.data_rate_13.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_13.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_14", + "mac_settings.adr.mode.dynamic.overrides.data_rate_14.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_14.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_15", + "mac_settings.adr.mode.dynamic.overrides.data_rate_15.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_15.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_2", + "mac_settings.adr.mode.dynamic.overrides.data_rate_2.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_2.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_3", + "mac_settings.adr.mode.dynamic.overrides.data_rate_3.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_3.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_4", + "mac_settings.adr.mode.dynamic.overrides.data_rate_4.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_4.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_5", + "mac_settings.adr.mode.dynamic.overrides.data_rate_5.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_5.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_6", + "mac_settings.adr.mode.dynamic.overrides.data_rate_6.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_6.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_7", + "mac_settings.adr.mode.dynamic.overrides.data_rate_7.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_7.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_8", + "mac_settings.adr.mode.dynamic.overrides.data_rate_8.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_8.min_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_9", + "mac_settings.adr.mode.dynamic.overrides.data_rate_9.max_nb_trans", + "mac_settings.adr.mode.dynamic.overrides.data_rate_9.min_nb_trans", "mac_settings.adr.mode.static", "mac_settings.adr.mode.static.data_rate_index", "mac_settings.adr.mode.static.nb_trans", diff --git a/sdk/js/generated/api.json b/sdk/js/generated/api.json index 36333ebb9e..20bac02c7e 100644 --- a/sdk/js/generated/api.json +++ b/sdk/js/generated/api.json @@ -15091,6 +15091,18 @@ "isoneof": false, "oneofdecl": "", "defaultValue": "" + }, + { + "name": "overrides", + "description": "", + "label": "", + "type": "Overrides", + "longType": "ADRSettings.DynamicMode.Overrides", + "fullType": "ttn.lorawan.v3.ADRSettings.DynamicMode.Overrides", + "ismap": false, + "isoneof": false, + "oneofdecl": "", + "defaultValue": "" } ] }, @@ -15152,6 +15164,270 @@ "extensions": [], "fields": [] }, + { + "name": "Overrides", + "longName": "ADRSettings.DynamicMode.Overrides", + "fullName": "ttn.lorawan.v3.ADRSettings.DynamicMode.Overrides", + "description": "EXPERIMENTAL: Configuration overrides.", + "hasExtensions": false, + "hasFields": true, + "hasOneofs": false, + "extensions": [], + "fields": [ + { + "name": "data_rate_0", + "description": "", + "label": "", + "type": "PerDataRateIndexOverride", + "longType": "ADRSettings.DynamicMode.PerDataRateIndexOverride", + "fullType": "ttn.lorawan.v3.ADRSettings.DynamicMode.PerDataRateIndexOverride", + "ismap": false, + "isoneof": false, + "oneofdecl": "", + "defaultValue": "" + }, + { + "name": "data_rate_1", + "description": "", + "label": "", + "type": "PerDataRateIndexOverride", + "longType": "ADRSettings.DynamicMode.PerDataRateIndexOverride", + "fullType": "ttn.lorawan.v3.ADRSettings.DynamicMode.PerDataRateIndexOverride", + "ismap": false, + "isoneof": false, + "oneofdecl": "", + "defaultValue": "" + }, + { + "name": "data_rate_2", + "description": "", + "label": "", + "type": "PerDataRateIndexOverride", + "longType": "ADRSettings.DynamicMode.PerDataRateIndexOverride", + "fullType": "ttn.lorawan.v3.ADRSettings.DynamicMode.PerDataRateIndexOverride", + "ismap": false, + "isoneof": false, + "oneofdecl": "", + "defaultValue": "" + }, + { + "name": "data_rate_3", + "description": "", + "label": "", + "type": "PerDataRateIndexOverride", + "longType": "ADRSettings.DynamicMode.PerDataRateIndexOverride", + "fullType": "ttn.lorawan.v3.ADRSettings.DynamicMode.PerDataRateIndexOverride", + "ismap": false, + "isoneof": false, + "oneofdecl": "", + "defaultValue": "" + }, + { + "name": "data_rate_4", + "description": "", + "label": "", + "type": "PerDataRateIndexOverride", + "longType": "ADRSettings.DynamicMode.PerDataRateIndexOverride", + "fullType": "ttn.lorawan.v3.ADRSettings.DynamicMode.PerDataRateIndexOverride", + "ismap": false, + "isoneof": false, + "oneofdecl": "", + "defaultValue": "" + }, + { + "name": "data_rate_5", + "description": "", + "label": "", + "type": "PerDataRateIndexOverride", + "longType": "ADRSettings.DynamicMode.PerDataRateIndexOverride", + "fullType": "ttn.lorawan.v3.ADRSettings.DynamicMode.PerDataRateIndexOverride", + "ismap": false, + "isoneof": false, + "oneofdecl": "", + "defaultValue": "" + }, + { + "name": "data_rate_6", + "description": "", + "label": "", + "type": "PerDataRateIndexOverride", + "longType": "ADRSettings.DynamicMode.PerDataRateIndexOverride", + "fullType": "ttn.lorawan.v3.ADRSettings.DynamicMode.PerDataRateIndexOverride", + "ismap": false, + "isoneof": false, + "oneofdecl": "", + "defaultValue": "" + }, + { + "name": "data_rate_7", + "description": "", + "label": "", + "type": "PerDataRateIndexOverride", + "longType": "ADRSettings.DynamicMode.PerDataRateIndexOverride", + "fullType": "ttn.lorawan.v3.ADRSettings.DynamicMode.PerDataRateIndexOverride", + "ismap": false, + "isoneof": false, + "oneofdecl": "", + "defaultValue": "" + }, + { + "name": "data_rate_8", + "description": "", + "label": "", + "type": "PerDataRateIndexOverride", + "longType": "ADRSettings.DynamicMode.PerDataRateIndexOverride", + "fullType": "ttn.lorawan.v3.ADRSettings.DynamicMode.PerDataRateIndexOverride", + "ismap": false, + "isoneof": false, + "oneofdecl": "", + "defaultValue": "" + }, + { + "name": "data_rate_9", + "description": "", + "label": "", + "type": "PerDataRateIndexOverride", + "longType": "ADRSettings.DynamicMode.PerDataRateIndexOverride", + "fullType": "ttn.lorawan.v3.ADRSettings.DynamicMode.PerDataRateIndexOverride", + "ismap": false, + "isoneof": false, + "oneofdecl": "", + "defaultValue": "" + }, + { + "name": "data_rate_10", + "description": "", + "label": "", + "type": "PerDataRateIndexOverride", + "longType": "ADRSettings.DynamicMode.PerDataRateIndexOverride", + "fullType": "ttn.lorawan.v3.ADRSettings.DynamicMode.PerDataRateIndexOverride", + "ismap": false, + "isoneof": false, + "oneofdecl": "", + "defaultValue": "" + }, + { + "name": "data_rate_11", + "description": "", + "label": "", + "type": "PerDataRateIndexOverride", + "longType": "ADRSettings.DynamicMode.PerDataRateIndexOverride", + "fullType": "ttn.lorawan.v3.ADRSettings.DynamicMode.PerDataRateIndexOverride", + "ismap": false, + "isoneof": false, + "oneofdecl": "", + "defaultValue": "" + }, + { + "name": "data_rate_12", + "description": "", + "label": "", + "type": "PerDataRateIndexOverride", + "longType": "ADRSettings.DynamicMode.PerDataRateIndexOverride", + "fullType": "ttn.lorawan.v3.ADRSettings.DynamicMode.PerDataRateIndexOverride", + "ismap": false, + "isoneof": false, + "oneofdecl": "", + "defaultValue": "" + }, + { + "name": "data_rate_13", + "description": "", + "label": "", + "type": "PerDataRateIndexOverride", + "longType": "ADRSettings.DynamicMode.PerDataRateIndexOverride", + "fullType": "ttn.lorawan.v3.ADRSettings.DynamicMode.PerDataRateIndexOverride", + "ismap": false, + "isoneof": false, + "oneofdecl": "", + "defaultValue": "" + }, + { + "name": "data_rate_14", + "description": "", + "label": "", + "type": "PerDataRateIndexOverride", + "longType": "ADRSettings.DynamicMode.PerDataRateIndexOverride", + "fullType": "ttn.lorawan.v3.ADRSettings.DynamicMode.PerDataRateIndexOverride", + "ismap": false, + "isoneof": false, + "oneofdecl": "", + "defaultValue": "" + }, + { + "name": "data_rate_15", + "description": "", + "label": "", + "type": "PerDataRateIndexOverride", + "longType": "ADRSettings.DynamicMode.PerDataRateIndexOverride", + "fullType": "ttn.lorawan.v3.ADRSettings.DynamicMode.PerDataRateIndexOverride", + "ismap": false, + "isoneof": false, + "oneofdecl": "", + "defaultValue": "" + } + ] + }, + { + "name": "PerDataRateIndexOverride", + "longName": "ADRSettings.DynamicMode.PerDataRateIndexOverride", + "fullName": "ttn.lorawan.v3.ADRSettings.DynamicMode.PerDataRateIndexOverride", + "description": "EXPERIMENTAL: Data rate index override settings.", + "hasExtensions": false, + "hasFields": true, + "hasOneofs": false, + "extensions": [], + "fields": [ + { + "name": "min_nb_trans", + "description": "Minimum number of retransmissions.\nIf unset, the default value from Network Server configuration will be used.", + "label": "", + "type": "UInt32Value", + "longType": "google.protobuf.UInt32Value", + "fullType": "google.protobuf.UInt32Value", + "ismap": false, + "isoneof": false, + "oneofdecl": "", + "defaultValue": "", + "options": { + "validate.rules": [ + { + "name": "uint32.lte", + "value": 3 + }, + { + "name": "uint32.gte", + "value": 1 + } + ] + } + }, + { + "name": "max_nb_trans", + "description": "Maximum number of retransmissions.\nIf unset, the default value from Network Server configuration will be used.", + "label": "", + "type": "UInt32Value", + "longType": "google.protobuf.UInt32Value", + "fullType": "google.protobuf.UInt32Value", + "ismap": false, + "isoneof": false, + "oneofdecl": "", + "defaultValue": "", + "options": { + "validate.rules": [ + { + "name": "uint32.lte", + "value": 3 + }, + { + "name": "uint32.gte", + "value": 1 + } + ] + } + } + ] + }, { "name": "StaticMode", "longName": "ADRSettings.StaticMode", diff --git a/sdk/js/generated/device-entity-map.json b/sdk/js/generated/device-entity-map.json index bc8ad6cddc..0d65c728ec 100644 --- a/sdk/js/generated/device-entity-map.json +++ b/sdk/js/generated/device-entity-map.json @@ -608,7 +608,237 @@ "min_tx_power_index": [ "ns", "ns" - ] + ], + "overrides": { + "_root": [ + "ns", + "ns" + ], + "data_rate_0": { + "_root": [ + "ns", + "ns" + ], + "max_nb_trans": [ + "ns", + "ns" + ], + "min_nb_trans": [ + "ns", + "ns" + ] + }, + "data_rate_1": { + "_root": [ + "ns", + "ns" + ], + "max_nb_trans": [ + "ns", + "ns" + ], + "min_nb_trans": [ + "ns", + "ns" + ] + }, + "data_rate_10": { + "_root": [ + "ns", + "ns" + ], + "max_nb_trans": [ + "ns", + "ns" + ], + "min_nb_trans": [ + "ns", + "ns" + ] + }, + "data_rate_11": { + "_root": [ + "ns", + "ns" + ], + "max_nb_trans": [ + "ns", + "ns" + ], + "min_nb_trans": [ + "ns", + "ns" + ] + }, + "data_rate_12": { + "_root": [ + "ns", + "ns" + ], + "max_nb_trans": [ + "ns", + "ns" + ], + "min_nb_trans": [ + "ns", + "ns" + ] + }, + "data_rate_13": { + "_root": [ + "ns", + "ns" + ], + "max_nb_trans": [ + "ns", + "ns" + ], + "min_nb_trans": [ + "ns", + "ns" + ] + }, + "data_rate_14": { + "_root": [ + "ns", + "ns" + ], + "max_nb_trans": [ + "ns", + "ns" + ], + "min_nb_trans": [ + "ns", + "ns" + ] + }, + "data_rate_15": { + "_root": [ + "ns", + "ns" + ], + "max_nb_trans": [ + "ns", + "ns" + ], + "min_nb_trans": [ + "ns", + "ns" + ] + }, + "data_rate_2": { + "_root": [ + "ns", + "ns" + ], + "max_nb_trans": [ + "ns", + "ns" + ], + "min_nb_trans": [ + "ns", + "ns" + ] + }, + "data_rate_3": { + "_root": [ + "ns", + "ns" + ], + "max_nb_trans": [ + "ns", + "ns" + ], + "min_nb_trans": [ + "ns", + "ns" + ] + }, + "data_rate_4": { + "_root": [ + "ns", + "ns" + ], + "max_nb_trans": [ + "ns", + "ns" + ], + "min_nb_trans": [ + "ns", + "ns" + ] + }, + "data_rate_5": { + "_root": [ + "ns", + "ns" + ], + "max_nb_trans": [ + "ns", + "ns" + ], + "min_nb_trans": [ + "ns", + "ns" + ] + }, + "data_rate_6": { + "_root": [ + "ns", + "ns" + ], + "max_nb_trans": [ + "ns", + "ns" + ], + "min_nb_trans": [ + "ns", + "ns" + ] + }, + "data_rate_7": { + "_root": [ + "ns", + "ns" + ], + "max_nb_trans": [ + "ns", + "ns" + ], + "min_nb_trans": [ + "ns", + "ns" + ] + }, + "data_rate_8": { + "_root": [ + "ns", + "ns" + ], + "max_nb_trans": [ + "ns", + "ns" + ], + "min_nb_trans": [ + "ns", + "ns" + ] + }, + "data_rate_9": { + "_root": [ + "ns", + "ns" + ], + "max_nb_trans": [ + "ns", + "ns" + ], + "min_nb_trans": [ + "ns", + "ns" + ] + } + } }, "static": { "_root": [