diff --git a/config/config.go b/config/config.go index fda4bae..631c44f 100644 --- a/config/config.go +++ b/config/config.go @@ -161,11 +161,15 @@ type VehiclePCSimConfig2 struct { } type VehiclePCSimConfig struct { + Open bool `json:"open" description:"是否开启"` //TrainEnds bool `json:"trainEnds" description:"列车端点A?"` ConfigName string `json:"configName" description:"连接名称"` - Open bool `json:"open" description:"是否开启"` - PcSimIp string `json:"pcSimIp" description:"pc仿真平台通信ip"` - PcSimPort uint32 `json:"pcSimPort" description:"pc仿真平台通信端口"` + OpenA bool `json:"openA" description:"是否开启A端"` + APcSimIp string `json:"apcSimIp" description:"pc仿真平台通信ip A端"` + APcSimPort uint32 `json:"apcSimPort" description:"pc仿真平台通信端口A端"` + OpenB bool `json:"openB" description:"是否开启B端"` + BPcSimIp string `json:"bpcSimIp" description:"pc仿真平台通信ip B端"` + BPcSimPort uint32 `json:"bpcSimPort" description:"pc仿真平台通信端口B端"` //LocalTestingPort uint32 `json:"localTestingPort" description:"本地测试端口"` } diff --git a/config/dev.yml b/config/dev.yml index 5612785..9691b36 100644 --- a/config/dev.yml +++ b/config/dev.yml @@ -6,8 +6,8 @@ server: # 数据源 datasource: # 数据库访问url -# dsn: root:root@tcp(127.0.0.1:3306)/bj-rtss?charset=utf8mb4&parseTime=true&loc=UTC - dsn: root:joylink0503@tcp(192.168.33.233:3306)/bj-rtss?charset=utf8mb4&parseTime=true&loc=UTC + dsn: root:root@tcp(127.0.0.1:3306)/bj-rtss?charset=utf8mb4&parseTime=true&loc=UTC +# dsn: root:joylink0503@tcp(192.168.33.233:3306)/bj-rtss?charset=utf8mb4&parseTime=true&loc=UTC # 日志配置 logging: @@ -33,7 +33,7 @@ logging: # 消息配置 messaging: mqtt: -# address: tcp://127.0.0.1:1883 - address: tcp://192.168.33.233:1883 + address: tcp://127.0.0.1:1883 +# address: tcp://192.168.33.233:1883 username: rtsts_service password: joylink@0503 \ No newline at end of file diff --git a/dto/state_proto/device_state.pb.go b/dto/state_proto/device_state.pb.go index 6d2da42..0dadc62 100644 --- a/dto/state_proto/device_state.pb.go +++ b/dto/state_proto/device_state.pb.go @@ -148,6 +148,7 @@ func (Signal_Aspect) EnumDescriptor() ([]byte, []int) { return file_device_state_proto_rawDescGZIP(), []int{5, 0} } +// map speedPulseCountMap = 5;//连接状态 type TrainConnState_TrainConnType int32 const ( @@ -1149,13 +1150,16 @@ type TrainState struct { // VobcBtmState vobcBtm = 27;//vobc btm 状态 OldLink string `protobuf:"bytes,28,opt,name=oldLink,proto3" json:"oldLink,omitempty"` OldLinkOffset int64 `protobuf:"varint,29,opt,name=oldLinkOffset,proto3" json:"oldLinkOffset,omitempty"` - BtmBaliseCache *TrainBtmCache `protobuf:"bytes,30,opt,name=btmBaliseCache,proto3" json:"btmBaliseCache,omitempty"` //列车应答器缓存 - TrainLoad int32 `protobuf:"varint,31,opt,name=TrainLoad,proto3" json:"TrainLoad,omitempty"` //列车载荷(吨) - TrainMaxSpeed float32 `protobuf:"fixed32,32,opt,name=TrainMaxSpeed,proto3" json:"TrainMaxSpeed,omitempty"` //列车最大时速 - TrainMaxAcc float32 `protobuf:"fixed32,33,opt,name=TrainMaxAcc,proto3" json:"TrainMaxAcc,omitempty"` //列车最大加速度 - TrainMaxBrake float32 `protobuf:"fixed32,34,opt,name=TrainMaxBrake,proto3" json:"TrainMaxBrake,omitempty"` //列车最大减速度 - TrainEmergencyBrake float32 `protobuf:"fixed32,35,opt,name=TrainEmergencyBrake,proto3" json:"TrainEmergencyBrake,omitempty"` //列车紧急制动减速度 - ProjectCode string `protobuf:"bytes,36,opt,name=projectCode,proto3" json:"projectCode,omitempty"` + OldTailLink string `protobuf:"bytes,30,opt,name=oldTailLink,proto3" json:"oldTailLink,omitempty"` + OldTailLinkOffset int64 `protobuf:"varint,31,opt,name=oldTailLinkOffset,proto3" json:"oldTailLinkOffset,omitempty"` + BtmBaliseCacheA *TrainBtmCache `protobuf:"bytes,32,opt,name=btmBaliseCacheA,proto3" json:"btmBaliseCacheA,omitempty"` //列车应答器缓存 + BtmBaliseCacheB *TrainBtmCache `protobuf:"bytes,33,opt,name=btmBaliseCacheB,proto3" json:"btmBaliseCacheB,omitempty"` //列车应答器缓存 + TrainLoad int32 `protobuf:"varint,34,opt,name=TrainLoad,proto3" json:"TrainLoad,omitempty"` //列车载荷(吨) + TrainMaxSpeed float32 `protobuf:"fixed32,35,opt,name=TrainMaxSpeed,proto3" json:"TrainMaxSpeed,omitempty"` //列车最大时速 + TrainMaxAcc float32 `protobuf:"fixed32,36,opt,name=TrainMaxAcc,proto3" json:"TrainMaxAcc,omitempty"` //列车最大加速度 + TrainMaxBrake float32 `protobuf:"fixed32,37,opt,name=TrainMaxBrake,proto3" json:"TrainMaxBrake,omitempty"` //列车最大减速度 + TrainEmergencyBrake float32 `protobuf:"fixed32,38,opt,name=TrainEmergencyBrake,proto3" json:"TrainEmergencyBrake,omitempty"` //列车紧急制动减速度 + ProjectCode string `protobuf:"bytes,39,opt,name=projectCode,proto3" json:"projectCode,omitempty"` // map trainPortVS = 40; } func (x *TrainState) Reset() { @@ -1379,9 +1383,30 @@ func (x *TrainState) GetOldLinkOffset() int64 { return 0 } -func (x *TrainState) GetBtmBaliseCache() *TrainBtmCache { +func (x *TrainState) GetOldTailLink() string { if x != nil { - return x.BtmBaliseCache + return x.OldTailLink + } + return "" +} + +func (x *TrainState) GetOldTailLinkOffset() int64 { + if x != nil { + return x.OldTailLinkOffset + } + return 0 +} + +func (x *TrainState) GetBtmBaliseCacheA() *TrainBtmCache { + if x != nil { + return x.BtmBaliseCacheA + } + return nil +} + +func (x *TrainState) GetBtmBaliseCacheB() *TrainBtmCache { + if x != nil { + return x.BtmBaliseCacheB } return nil } @@ -2008,8 +2033,10 @@ type TrainVobcState struct { AtoCloseRightDoor bool `protobuf:"varint,83,opt,name=atoCloseRightDoor,proto3" json:"atoCloseRightDoor,omitempty"` LightAtoSend bool `protobuf:"varint,84,opt,name=lightAtoSend,proto3" json:"lightAtoSend,omitempty"` // Ato运行级位 - AtoStepLevel TrainVobcState_AtoStepLevel `protobuf:"varint,85,opt,name=atoStepLevel,proto3,enum=state.TrainVobcState_AtoStepLevel" json:"atoStepLevel,omitempty"` - VobcBtmInfo *TrainVobcState_VobcBtmInfo `protobuf:"bytes,86,opt,name=vobcBtmInfo,proto3" json:"vobcBtmInfo,omitempty"` + AtoStepLevel TrainVobcState_AtoStepLevel `protobuf:"varint,85,opt,name=atoStepLevel,proto3,enum=state.TrainVobcState_AtoStepLevel" json:"atoStepLevel,omitempty"` + VobcBtmInfo *TrainVobcState_VobcBtmInfo `protobuf:"bytes,86,opt,name=vobcBtmInfo,proto3" json:"vobcBtmInfo,omitempty"` + LineInitTimeStamp12 int64 `protobuf:"varint,87,opt,name=lineInitTimeStamp12,proto3" json:"lineInitTimeStamp12,omitempty"` //12号线列出初始化时间戳 + Line12ConnErr bool `protobuf:"varint,88,opt,name=line12ConnErr,proto3" json:"line12ConnErr,omitempty"` //12号线连接错误,因为12号线atp故障(此时atp需要重启)时,还是会发送数据通过此次属性标记atp状态情况(多次观察atp故障时,atp输出数字量返回的数据最后一个直接是0) } func (x *TrainVobcState) Reset() { @@ -2618,6 +2645,20 @@ func (x *TrainVobcState) GetVobcBtmInfo() *TrainVobcState_VobcBtmInfo { return nil } +func (x *TrainVobcState) GetLineInitTimeStamp12() int64 { + if x != nil { + return x.LineInitTimeStamp12 + } + return 0 +} + +func (x *TrainVobcState) GetLine12ConnErr() bool { + if x != nil { + return x.Line12ConnErr + } + return false +} + // 发给前端的列车状态 type TrainMapState struct { state protoimpl.MessageState @@ -5155,10 +5196,16 @@ type TrainControlState struct { DriverKey []*TrainControlState_DriverKeySwitch `protobuf:"bytes,2,rep,name=driverKey,proto3" json:"driverKey,omitempty"` //驾驶端激活 SwitchKeyMap map[string]*TrainControlState_SwitchKeyChange `protobuf:"bytes,3,rep,name=switchKeyMap,proto3" json:"switchKeyMap,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // DirectionKeySwitch dirKey = 3; //接车运行方向 - PushHandler *TrainControlState_PushHandler `protobuf:"bytes,4,opt,name=pushHandler,proto3" json:"pushHandler,omitempty"` //牵引制动手柄 - LightMaps map[string]*TrainControlState_ControlLight `protobuf:"bytes,5,rep,name=lightMaps,proto3" json:"lightMaps,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - LineInitTimeStamp12 int64 `protobuf:"varint,6,opt,name=lineInitTimeStamp12,proto3" json:"lineInitTimeStamp12,omitempty"` //12号线列出初始化时间戳 - Line12ConnErr bool `protobuf:"varint,7,opt,name=line12ConnErr,proto3" json:"line12ConnErr,omitempty"` //12号线连接错误,因为12号线atp故障(此时atp需要重启)时,还是会发送数据通过此次属性标记atp状态情况(多次观察atp故障时,atp输出数字量返回的数据最后一个直接是0) + PushHandler *TrainControlState_PushHandler `protobuf:"bytes,4,opt,name=pushHandler,proto3" json:"pushHandler,omitempty"` //牵引制动手柄 + LightMaps map[string]*TrainControlState_ControlLight `protobuf:"bytes,5,rep,name=lightMaps,proto3" json:"lightMaps,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + LineInitTimeStamp12PortA int64 `protobuf:"varint,6,opt,name=lineInitTimeStamp12PortA,proto3" json:"lineInitTimeStamp12PortA,omitempty"` //12号线列出初始化时间戳 + LineInitTimeStamp12PortB int64 `protobuf:"varint,7,opt,name=lineInitTimeStamp12PortB,proto3" json:"lineInitTimeStamp12PortB,omitempty"` //12号线列出初始化时间戳 + Line12ConnErrPortA bool `protobuf:"varint,8,opt,name=line12ConnErrPortA,proto3" json:"line12ConnErrPortA,omitempty"` //12号线连接错误,因为12号线atp故障(此时atp需要重启)时,还是会发送数据通过此次属性标记atp状态情况(多次观察atp故障时,atp输出数字量返回的数据最后一个直接是0) + Line12ConnErrPortB bool `protobuf:"varint,9,opt,name=line12ConnErrPortB,proto3" json:"line12ConnErrPortB,omitempty"` //12号线连接错误,因为12号线atp故障(此时atp需要重启)时,还是会发送数据通过此次属性标记atp状态情况(多次观察atp故障时,atp输出数字量返回的数据最后一个直接是0) + TrainConnInitComplatePortA bool `protobuf:"varint,10,opt,name=TrainConnInitComplatePortA,proto3" json:"TrainConnInitComplatePortA,omitempty"` + TrainConnInitComplatePortB bool `protobuf:"varint,11,opt,name=TrainConnInitComplatePortB,proto3" json:"TrainConnInitComplatePortB,omitempty"` + ActiveTrainA bool `protobuf:"varint,12,opt,name=activeTrainA,proto3" json:"activeTrainA,omitempty"` + ActiveTrainB bool `protobuf:"varint,13,opt,name=activeTrainB,proto3" json:"activeTrainB,omitempty"` } func (x *TrainControlState) Reset() { @@ -5228,16 +5275,58 @@ func (x *TrainControlState) GetLightMaps() map[string]*TrainControlState_Control return nil } -func (x *TrainControlState) GetLineInitTimeStamp12() int64 { +func (x *TrainControlState) GetLineInitTimeStamp12PortA() int64 { if x != nil { - return x.LineInitTimeStamp12 + return x.LineInitTimeStamp12PortA } return 0 } -func (x *TrainControlState) GetLine12ConnErr() bool { +func (x *TrainControlState) GetLineInitTimeStamp12PortB() int64 { if x != nil { - return x.Line12ConnErr + return x.LineInitTimeStamp12PortB + } + return 0 +} + +func (x *TrainControlState) GetLine12ConnErrPortA() bool { + if x != nil { + return x.Line12ConnErrPortA + } + return false +} + +func (x *TrainControlState) GetLine12ConnErrPortB() bool { + if x != nil { + return x.Line12ConnErrPortB + } + return false +} + +func (x *TrainControlState) GetTrainConnInitComplatePortA() bool { + if x != nil { + return x.TrainConnInitComplatePortA + } + return false +} + +func (x *TrainControlState) GetTrainConnInitComplatePortB() bool { + if x != nil { + return x.TrainConnInitComplatePortB + } + return false +} + +func (x *TrainControlState) GetActiveTrainA() bool { + if x != nil { + return x.ActiveTrainA + } + return false +} + +func (x *TrainControlState) GetActiveTrainB() bool { + if x != nil { + return x.ActiveTrainB } return false } @@ -5448,7 +5537,6 @@ func (x *StationQc_State) GetOn() bool { return false } -// uint32 initCount = 8;//初始化计数器 type TrainControlState_ControlButton struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -5815,7 +5903,7 @@ var file_device_state_proto_rawDesc = []byte{ 0x74, 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x2f, 0x0a, 0x0d, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x56, 0x4f, 0x42, 0x43, 0x10, 0x01, 0x12, 0x0a, 0x0a, - 0x06, 0x50, 0x43, 0x5f, 0x53, 0x49, 0x4d, 0x10, 0x02, 0x22, 0xdc, 0x0a, 0x0a, 0x0a, 0x54, 0x72, + 0x06, 0x50, 0x43, 0x5f, 0x53, 0x49, 0x4d, 0x10, 0x02, 0x22, 0xee, 0x0b, 0x0a, 0x0a, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x75, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x02, 0x75, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x70, 0x65, 0x65, @@ -5883,910 +5971,945 @@ var file_device_state_proto_rawDesc = []byte{ 0x64, 0x4c, 0x69, 0x6e, 0x6b, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6f, 0x6c, 0x64, 0x4c, 0x69, 0x6e, 0x6b, 0x12, 0x24, 0x0a, 0x0d, 0x6f, 0x6c, 0x64, 0x4c, 0x69, 0x6e, 0x6b, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x6f, 0x6c, 0x64, - 0x4c, 0x69, 0x6e, 0x6b, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x3c, 0x0a, 0x0e, 0x62, 0x74, - 0x6d, 0x42, 0x61, 0x6c, 0x69, 0x73, 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, 0x18, 0x1e, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x69, 0x6e, - 0x42, 0x74, 0x6d, 0x43, 0x61, 0x63, 0x68, 0x65, 0x52, 0x0e, 0x62, 0x74, 0x6d, 0x42, 0x61, 0x6c, - 0x69, 0x73, 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x54, 0x72, 0x61, 0x69, - 0x6e, 0x4c, 0x6f, 0x61, 0x64, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x54, 0x72, 0x61, - 0x69, 0x6e, 0x4c, 0x6f, 0x61, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x4d, - 0x61, 0x78, 0x53, 0x70, 0x65, 0x65, 0x64, 0x18, 0x20, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0d, 0x54, - 0x72, 0x61, 0x69, 0x6e, 0x4d, 0x61, 0x78, 0x53, 0x70, 0x65, 0x65, 0x64, 0x12, 0x20, 0x0a, 0x0b, - 0x54, 0x72, 0x61, 0x69, 0x6e, 0x4d, 0x61, 0x78, 0x41, 0x63, 0x63, 0x18, 0x21, 0x20, 0x01, 0x28, - 0x02, 0x52, 0x0b, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x4d, 0x61, 0x78, 0x41, 0x63, 0x63, 0x12, 0x24, - 0x0a, 0x0d, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x4d, 0x61, 0x78, 0x42, 0x72, 0x61, 0x6b, 0x65, 0x18, - 0x22, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0d, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x4d, 0x61, 0x78, 0x42, - 0x72, 0x61, 0x6b, 0x65, 0x12, 0x30, 0x0a, 0x13, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x45, 0x6d, 0x65, - 0x72, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x42, 0x72, 0x61, 0x6b, 0x65, 0x18, 0x23, 0x20, 0x01, 0x28, - 0x02, 0x52, 0x13, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x45, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x6e, 0x63, - 0x79, 0x42, 0x72, 0x61, 0x6b, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x24, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x22, 0xc4, 0x01, 0x0a, 0x0d, 0x54, 0x72, 0x61, - 0x69, 0x6e, 0x42, 0x74, 0x6d, 0x43, 0x61, 0x63, 0x68, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x64, 0x73, - 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x64, 0x73, 0x6e, 0x12, 0x20, 0x0a, 0x0b, - 0x62, 0x61, 0x6c, 0x69, 0x73, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x0b, 0x62, 0x61, 0x6c, 0x69, 0x73, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x26, - 0x0a, 0x0e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x43, - 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x26, 0x0a, 0x0e, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x64, - 0x42, 0x61, 0x6c, 0x69, 0x73, 0x65, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, - 0x72, 0x65, 0x73, 0x65, 0x6e, 0x64, 0x42, 0x61, 0x6c, 0x69, 0x73, 0x65, 0x49, 0x64, 0x12, 0x2f, - 0x0a, 0x0a, 0x62, 0x61, 0x6c, 0x69, 0x73, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x05, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x42, 0x54, 0x4d, 0x53, 0x74, - 0x61, 0x74, 0x65, 0x52, 0x0a, 0x62, 0x61, 0x6c, 0x69, 0x73, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x22, - 0x9f, 0x01, 0x0a, 0x15, 0x53, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x53, 0x70, 0x65, 0x65, 0x64, 0x50, - 0x75, 0x6c, 0x73, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x75, 0x6c, - 0x73, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x31, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, - 0x70, 0x75, 0x6c, 0x73, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x31, 0x12, 0x20, 0x0a, 0x0b, 0x70, - 0x75, 0x6c, 0x73, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x32, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x0b, 0x70, 0x75, 0x6c, 0x73, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x32, 0x12, 0x20, 0x0a, - 0x0b, 0x70, 0x75, 0x6c, 0x73, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x33, 0x18, 0x03, 0x20, 0x03, - 0x28, 0x02, 0x52, 0x0b, 0x70, 0x75, 0x6c, 0x73, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x33, 0x12, - 0x20, 0x0a, 0x0b, 0x70, 0x75, 0x6c, 0x73, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x34, 0x18, 0x04, + 0x4c, 0x69, 0x6e, 0x6b, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x6f, 0x6c, + 0x64, 0x54, 0x61, 0x69, 0x6c, 0x4c, 0x69, 0x6e, 0x6b, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0b, 0x6f, 0x6c, 0x64, 0x54, 0x61, 0x69, 0x6c, 0x4c, 0x69, 0x6e, 0x6b, 0x12, 0x2c, 0x0a, 0x11, + 0x6f, 0x6c, 0x64, 0x54, 0x61, 0x69, 0x6c, 0x4c, 0x69, 0x6e, 0x6b, 0x4f, 0x66, 0x66, 0x73, 0x65, + 0x74, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x6f, 0x6c, 0x64, 0x54, 0x61, 0x69, 0x6c, + 0x4c, 0x69, 0x6e, 0x6b, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x3e, 0x0a, 0x0f, 0x62, 0x74, + 0x6d, 0x42, 0x61, 0x6c, 0x69, 0x73, 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, 0x41, 0x18, 0x20, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x69, + 0x6e, 0x42, 0x74, 0x6d, 0x43, 0x61, 0x63, 0x68, 0x65, 0x52, 0x0f, 0x62, 0x74, 0x6d, 0x42, 0x61, + 0x6c, 0x69, 0x73, 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, 0x41, 0x12, 0x3e, 0x0a, 0x0f, 0x62, 0x74, + 0x6d, 0x42, 0x61, 0x6c, 0x69, 0x73, 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, 0x42, 0x18, 0x21, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x69, + 0x6e, 0x42, 0x74, 0x6d, 0x43, 0x61, 0x63, 0x68, 0x65, 0x52, 0x0f, 0x62, 0x74, 0x6d, 0x42, 0x61, + 0x6c, 0x69, 0x73, 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, 0x42, 0x12, 0x1c, 0x0a, 0x09, 0x54, 0x72, + 0x61, 0x69, 0x6e, 0x4c, 0x6f, 0x61, 0x64, 0x18, 0x22, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x54, + 0x72, 0x61, 0x69, 0x6e, 0x4c, 0x6f, 0x61, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x54, 0x72, 0x61, 0x69, + 0x6e, 0x4d, 0x61, 0x78, 0x53, 0x70, 0x65, 0x65, 0x64, 0x18, 0x23, 0x20, 0x01, 0x28, 0x02, 0x52, + 0x0d, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x4d, 0x61, 0x78, 0x53, 0x70, 0x65, 0x65, 0x64, 0x12, 0x20, + 0x0a, 0x0b, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x4d, 0x61, 0x78, 0x41, 0x63, 0x63, 0x18, 0x24, 0x20, + 0x01, 0x28, 0x02, 0x52, 0x0b, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x4d, 0x61, 0x78, 0x41, 0x63, 0x63, + 0x12, 0x24, 0x0a, 0x0d, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x4d, 0x61, 0x78, 0x42, 0x72, 0x61, 0x6b, + 0x65, 0x18, 0x25, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0d, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x4d, 0x61, + 0x78, 0x42, 0x72, 0x61, 0x6b, 0x65, 0x12, 0x30, 0x0a, 0x13, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x45, + 0x6d, 0x65, 0x72, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x42, 0x72, 0x61, 0x6b, 0x65, 0x18, 0x26, 0x20, + 0x01, 0x28, 0x02, 0x52, 0x13, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x45, 0x6d, 0x65, 0x72, 0x67, 0x65, + 0x6e, 0x63, 0x79, 0x42, 0x72, 0x61, 0x6b, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x27, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x22, 0xc4, 0x01, 0x0a, 0x0d, 0x54, + 0x72, 0x61, 0x69, 0x6e, 0x42, 0x74, 0x6d, 0x43, 0x61, 0x63, 0x68, 0x65, 0x12, 0x10, 0x0a, 0x03, + 0x64, 0x73, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x64, 0x73, 0x6e, 0x12, 0x20, + 0x0a, 0x0b, 0x62, 0x61, 0x6c, 0x69, 0x73, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x62, 0x61, 0x6c, 0x69, 0x73, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, + 0x12, 0x26, 0x0a, 0x0e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, + 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x26, 0x0a, 0x0e, 0x72, 0x65, 0x73, 0x65, + 0x6e, 0x64, 0x42, 0x61, 0x6c, 0x69, 0x73, 0x65, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0e, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x64, 0x42, 0x61, 0x6c, 0x69, 0x73, 0x65, 0x49, 0x64, + 0x12, 0x2f, 0x0a, 0x0a, 0x62, 0x61, 0x6c, 0x69, 0x73, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x05, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x42, 0x54, 0x4d, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0a, 0x62, 0x61, 0x6c, 0x69, 0x73, 0x65, 0x4c, 0x69, 0x73, + 0x74, 0x22, 0x9f, 0x01, 0x0a, 0x15, 0x53, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x53, 0x70, 0x65, 0x65, + 0x64, 0x50, 0x75, 0x6c, 0x73, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x70, + 0x75, 0x6c, 0x73, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x31, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x0b, 0x70, 0x75, 0x6c, 0x73, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x31, 0x12, 0x20, 0x0a, + 0x0b, 0x70, 0x75, 0x6c, 0x73, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x32, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x0b, 0x70, 0x75, 0x6c, 0x73, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x32, 0x12, + 0x20, 0x0a, 0x0b, 0x70, 0x75, 0x6c, 0x73, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x33, 0x18, 0x03, 0x20, 0x03, 0x28, 0x02, 0x52, 0x0b, 0x70, 0x75, 0x6c, 0x73, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, - 0x34, 0x22, 0xf1, 0x06, 0x0a, 0x11, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x44, 0x79, 0x6e, 0x61, 0x6d, - 0x69, 0x63, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x68, 0x65, 0x61, 0x72, 0x74, - 0x62, 0x65, 0x61, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x68, 0x65, 0x61, 0x72, - 0x74, 0x62, 0x65, 0x61, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x68, 0x65, 0x61, 0x64, 0x4c, 0x69, 0x6e, - 0x6b, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x68, 0x65, 0x61, 0x64, 0x4c, - 0x69, 0x6e, 0x6b, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0e, 0x68, 0x65, 0x61, 0x64, 0x4c, 0x69, 0x6e, - 0x6b, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x68, - 0x65, 0x61, 0x64, 0x4c, 0x69, 0x6e, 0x6b, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x1e, 0x0a, - 0x0a, 0x74, 0x61, 0x69, 0x6c, 0x4c, 0x69, 0x6e, 0x6b, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0a, 0x74, 0x61, 0x69, 0x6c, 0x4c, 0x69, 0x6e, 0x6b, 0x49, 0x64, 0x12, 0x26, 0x0a, - 0x0e, 0x74, 0x61, 0x69, 0x6c, 0x4c, 0x69, 0x6e, 0x6b, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x74, 0x61, 0x69, 0x6c, 0x4c, 0x69, 0x6e, 0x6b, 0x4f, - 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x2c, 0x0a, 0x11, 0x6f, 0x63, 0x63, 0x75, 0x70, 0x69, 0x65, - 0x64, 0x4c, 0x69, 0x6e, 0x6b, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x11, 0x6f, 0x63, 0x63, 0x75, 0x70, 0x69, 0x65, 0x64, 0x4c, 0x69, 0x6e, 0x6b, 0x49, 0x6e, - 0x64, 0x65, 0x78, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x6c, 0x6f, 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x05, 0x73, 0x6c, 0x6f, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x75, 0x70, 0x73, - 0x6c, 0x6f, 0x70, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x75, 0x70, 0x73, 0x6c, - 0x6f, 0x70, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x55, 0x70, - 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x55, - 0x70, 0x12, 0x32, 0x0a, 0x14, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x69, - 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x75, 0x6d, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x02, 0x52, - 0x14, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x69, 0x73, 0x74, 0x61, 0x6e, - 0x63, 0x65, 0x53, 0x75, 0x6d, 0x12, 0x24, 0x0a, 0x0d, 0x61, 0x69, 0x72, 0x52, 0x65, 0x73, 0x69, - 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0d, 0x61, 0x69, - 0x72, 0x52, 0x65, 0x73, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x72, - 0x61, 0x6d, 0x70, 0x52, 0x65, 0x73, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x0c, 0x20, - 0x01, 0x28, 0x02, 0x52, 0x0e, 0x72, 0x61, 0x6d, 0x70, 0x52, 0x65, 0x73, 0x69, 0x73, 0x74, 0x61, - 0x6e, 0x63, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x63, 0x75, 0x72, 0x76, 0x65, 0x52, 0x65, 0x73, 0x69, - 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0f, 0x63, 0x75, - 0x72, 0x76, 0x65, 0x52, 0x65, 0x73, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x14, 0x0a, - 0x05, 0x73, 0x70, 0x65, 0x65, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x73, 0x70, - 0x65, 0x65, 0x64, 0x12, 0x2a, 0x0a, 0x10, 0x68, 0x65, 0x61, 0x64, 0x53, 0x65, 0x6e, 0x73, 0x6f, - 0x72, 0x53, 0x70, 0x65, 0x65, 0x64, 0x31, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x68, - 0x65, 0x61, 0x64, 0x53, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x53, 0x70, 0x65, 0x65, 0x64, 0x31, 0x12, - 0x2a, 0x0a, 0x10, 0x68, 0x65, 0x61, 0x64, 0x53, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x53, 0x70, 0x65, - 0x65, 0x64, 0x32, 0x18, 0x10, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x68, 0x65, 0x61, 0x64, 0x53, - 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x53, 0x70, 0x65, 0x65, 0x64, 0x32, 0x12, 0x2a, 0x0a, 0x10, 0x74, - 0x61, 0x69, 0x6c, 0x53, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x53, 0x70, 0x65, 0x65, 0x64, 0x31, 0x18, - 0x11, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x74, 0x61, 0x69, 0x6c, 0x53, 0x65, 0x6e, 0x73, 0x6f, - 0x72, 0x53, 0x70, 0x65, 0x65, 0x64, 0x31, 0x12, 0x2a, 0x0a, 0x10, 0x74, 0x61, 0x69, 0x6c, 0x53, - 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x53, 0x70, 0x65, 0x65, 0x64, 0x32, 0x18, 0x12, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x10, 0x74, 0x61, 0x69, 0x6c, 0x53, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x53, 0x70, 0x65, - 0x65, 0x64, 0x32, 0x12, 0x26, 0x0a, 0x0e, 0x68, 0x65, 0x61, 0x64, 0x52, 0x61, 0x64, 0x61, 0x72, - 0x53, 0x70, 0x65, 0x65, 0x64, 0x18, 0x13, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x68, 0x65, 0x61, - 0x64, 0x52, 0x61, 0x64, 0x61, 0x72, 0x53, 0x70, 0x65, 0x65, 0x64, 0x12, 0x26, 0x0a, 0x0e, 0x74, - 0x61, 0x69, 0x6c, 0x52, 0x61, 0x64, 0x61, 0x72, 0x53, 0x70, 0x65, 0x65, 0x64, 0x18, 0x14, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x0e, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x61, 0x64, 0x61, 0x72, 0x53, 0x70, - 0x65, 0x65, 0x64, 0x12, 0x28, 0x0a, 0x0f, 0x75, 0x64, 0x70, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x72, - 0x75, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x15, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x75, 0x64, - 0x70, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x72, 0x75, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x22, 0x0a, - 0x0c, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x16, 0x20, - 0x01, 0x28, 0x02, 0x52, 0x0c, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x22, 0x0a, 0x0c, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x18, 0x17, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0c, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x63, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0xf4, 0x1c, 0x0a, 0x0e, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x56, - 0x6f, 0x62, 0x63, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x6c, 0x69, 0x66, 0x65, - 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x6c, 0x69, - 0x66, 0x65, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x63, 0x31, 0x41, - 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x74, 0x63, 0x31, - 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x63, 0x32, 0x41, 0x63, 0x74, - 0x69, 0x76, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x74, 0x63, 0x32, 0x41, 0x63, - 0x74, 0x69, 0x76, 0x65, 0x12, 0x2a, 0x0a, 0x10, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, - 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, - 0x12, 0x2c, 0x0a, 0x11, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x61, 0x63, - 0x6b, 0x77, 0x61, 0x72, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x64, 0x69, 0x72, - 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x61, 0x63, 0x6b, 0x77, 0x61, 0x72, 0x64, 0x12, 0x26, - 0x0a, 0x0e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x62, 0x72, 0x61, 0x6b, 0x69, 0x6e, - 0x67, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x62, - 0x72, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x36, 0x0a, 0x16, + 0x33, 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x75, 0x6c, 0x73, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x34, + 0x18, 0x04, 0x20, 0x03, 0x28, 0x02, 0x52, 0x0b, 0x70, 0x75, 0x6c, 0x73, 0x65, 0x43, 0x6f, 0x75, + 0x6e, 0x74, 0x34, 0x22, 0xf1, 0x06, 0x0a, 0x11, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x44, 0x79, 0x6e, + 0x61, 0x6d, 0x69, 0x63, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x68, 0x65, 0x61, + 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x68, 0x65, + 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x68, 0x65, 0x61, 0x64, 0x4c, + 0x69, 0x6e, 0x6b, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x68, 0x65, 0x61, + 0x64, 0x4c, 0x69, 0x6e, 0x6b, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0e, 0x68, 0x65, 0x61, 0x64, 0x4c, + 0x69, 0x6e, 0x6b, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x0e, 0x68, 0x65, 0x61, 0x64, 0x4c, 0x69, 0x6e, 0x6b, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, + 0x1e, 0x0a, 0x0a, 0x74, 0x61, 0x69, 0x6c, 0x4c, 0x69, 0x6e, 0x6b, 0x49, 0x64, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0a, 0x74, 0x61, 0x69, 0x6c, 0x4c, 0x69, 0x6e, 0x6b, 0x49, 0x64, 0x12, + 0x26, 0x0a, 0x0e, 0x74, 0x61, 0x69, 0x6c, 0x4c, 0x69, 0x6e, 0x6b, 0x4f, 0x66, 0x66, 0x73, 0x65, + 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x74, 0x61, 0x69, 0x6c, 0x4c, 0x69, 0x6e, + 0x6b, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x2c, 0x0a, 0x11, 0x6f, 0x63, 0x63, 0x75, 0x70, + 0x69, 0x65, 0x64, 0x4c, 0x69, 0x6e, 0x6b, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x06, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x11, 0x6f, 0x63, 0x63, 0x75, 0x70, 0x69, 0x65, 0x64, 0x4c, 0x69, 0x6e, 0x6b, + 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x6c, 0x6f, 0x70, 0x65, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x73, 0x6c, 0x6f, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x75, + 0x70, 0x73, 0x6c, 0x6f, 0x70, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x75, 0x70, + 0x73, 0x6c, 0x6f, 0x70, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, + 0x55, 0x70, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, + 0x67, 0x55, 0x70, 0x12, 0x32, 0x0a, 0x14, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x52, 0x65, + 0x73, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x75, 0x6d, 0x18, 0x0a, 0x20, 0x01, 0x28, + 0x02, 0x52, 0x14, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x69, 0x73, 0x74, + 0x61, 0x6e, 0x63, 0x65, 0x53, 0x75, 0x6d, 0x12, 0x24, 0x0a, 0x0d, 0x61, 0x69, 0x72, 0x52, 0x65, + 0x73, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0d, + 0x61, 0x69, 0x72, 0x52, 0x65, 0x73, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x26, 0x0a, + 0x0e, 0x72, 0x61, 0x6d, 0x70, 0x52, 0x65, 0x73, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, + 0x0c, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0e, 0x72, 0x61, 0x6d, 0x70, 0x52, 0x65, 0x73, 0x69, 0x73, + 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x63, 0x75, 0x72, 0x76, 0x65, 0x52, 0x65, + 0x73, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0f, + 0x63, 0x75, 0x72, 0x76, 0x65, 0x52, 0x65, 0x73, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, + 0x14, 0x0a, 0x05, 0x73, 0x70, 0x65, 0x65, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, + 0x73, 0x70, 0x65, 0x65, 0x64, 0x12, 0x2a, 0x0a, 0x10, 0x68, 0x65, 0x61, 0x64, 0x53, 0x65, 0x6e, + 0x73, 0x6f, 0x72, 0x53, 0x70, 0x65, 0x65, 0x64, 0x31, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x10, 0x68, 0x65, 0x61, 0x64, 0x53, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x53, 0x70, 0x65, 0x65, 0x64, + 0x31, 0x12, 0x2a, 0x0a, 0x10, 0x68, 0x65, 0x61, 0x64, 0x53, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x53, + 0x70, 0x65, 0x65, 0x64, 0x32, 0x18, 0x10, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x68, 0x65, 0x61, + 0x64, 0x53, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x53, 0x70, 0x65, 0x65, 0x64, 0x32, 0x12, 0x2a, 0x0a, + 0x10, 0x74, 0x61, 0x69, 0x6c, 0x53, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x53, 0x70, 0x65, 0x65, 0x64, + 0x31, 0x18, 0x11, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x74, 0x61, 0x69, 0x6c, 0x53, 0x65, 0x6e, + 0x73, 0x6f, 0x72, 0x53, 0x70, 0x65, 0x65, 0x64, 0x31, 0x12, 0x2a, 0x0a, 0x10, 0x74, 0x61, 0x69, + 0x6c, 0x53, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x53, 0x70, 0x65, 0x65, 0x64, 0x32, 0x18, 0x12, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x10, 0x74, 0x61, 0x69, 0x6c, 0x53, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x53, + 0x70, 0x65, 0x65, 0x64, 0x32, 0x12, 0x26, 0x0a, 0x0e, 0x68, 0x65, 0x61, 0x64, 0x52, 0x61, 0x64, + 0x61, 0x72, 0x53, 0x70, 0x65, 0x65, 0x64, 0x18, 0x13, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x68, + 0x65, 0x61, 0x64, 0x52, 0x61, 0x64, 0x61, 0x72, 0x53, 0x70, 0x65, 0x65, 0x64, 0x12, 0x26, 0x0a, + 0x0e, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x61, 0x64, 0x61, 0x72, 0x53, 0x70, 0x65, 0x65, 0x64, 0x18, + 0x14, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x61, 0x64, 0x61, 0x72, + 0x53, 0x70, 0x65, 0x65, 0x64, 0x12, 0x28, 0x0a, 0x0f, 0x75, 0x64, 0x70, 0x49, 0x6e, 0x74, 0x65, + 0x72, 0x72, 0x75, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x15, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, + 0x75, 0x64, 0x70, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x72, 0x75, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x22, 0x0a, 0x0c, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x16, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0c, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x65, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x22, 0x0a, 0x0c, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x6d, + 0x65, 0x6e, 0x74, 0x18, 0x17, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0c, 0x44, 0x69, 0x73, 0x70, 0x6c, + 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0xcc, 0x1d, 0x0a, 0x0e, 0x54, 0x72, 0x61, 0x69, + 0x6e, 0x56, 0x6f, 0x62, 0x63, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x6c, 0x69, + 0x66, 0x65, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, + 0x6c, 0x69, 0x66, 0x65, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x63, + 0x31, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x74, + 0x63, 0x31, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x63, 0x32, 0x41, + 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x74, 0x63, 0x32, + 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, 0x2a, 0x0a, 0x10, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x10, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x6f, 0x72, 0x77, 0x61, + 0x72, 0x64, 0x12, 0x2c, 0x0a, 0x11, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, + 0x61, 0x63, 0x6b, 0x77, 0x61, 0x72, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x64, + 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x61, 0x63, 0x6b, 0x77, 0x61, 0x72, 0x64, + 0x12, 0x26, 0x0a, 0x0e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x62, 0x72, 0x61, 0x6b, + 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x0d, 0x62, 0x72, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x36, + 0x0a, 0x16, 0x65, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x42, 0x72, 0x61, 0x6b, 0x69, + 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x16, 0x65, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x42, 0x72, 0x61, 0x6b, 0x69, 0x6e, 0x67, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x16, 0x65, 0x6d, - 0x65, 0x72, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x42, 0x72, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x74, 0x75, 0x72, 0x6e, 0x62, 0x61, 0x63, 0x6b, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x74, 0x75, - 0x72, 0x6e, 0x62, 0x61, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1e, 0x0a, 0x0a, - 0x6a, 0x75, 0x6d, 0x70, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x0a, 0x6a, 0x75, 0x6d, 0x70, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x10, 0x0a, 0x03, - 0x61, 0x74, 0x6f, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x74, 0x6f, 0x12, 0x10, - 0x0a, 0x03, 0x66, 0x61, 0x6d, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x66, 0x61, 0x6d, - 0x12, 0x10, 0x0a, 0x03, 0x63, 0x61, 0x6d, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x63, - 0x61, 0x6d, 0x12, 0x34, 0x0a, 0x15, 0x74, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x61, - 0x66, 0x65, 0x74, 0x79, 0x43, 0x69, 0x72, 0x63, 0x75, 0x69, 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x15, 0x74, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x61, 0x66, 0x65, 0x74, - 0x79, 0x43, 0x69, 0x72, 0x63, 0x75, 0x69, 0x74, 0x12, 0x2e, 0x0a, 0x12, 0x70, 0x61, 0x72, 0x6b, - 0x69, 0x6e, 0x67, 0x42, 0x72, 0x61, 0x6b, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x0f, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x70, 0x61, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x42, 0x72, 0x61, - 0x6b, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x30, 0x0a, 0x13, 0x6d, 0x61, 0x69, 0x6e, - 0x74, 0x61, 0x69, 0x6e, 0x42, 0x72, 0x61, 0x6b, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, - 0x10, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x6d, 0x61, 0x69, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x42, - 0x72, 0x61, 0x6b, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x74, 0x72, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x6f, 0x72, 0x63, 0x65, - 0x12, 0x1e, 0x0a, 0x0a, 0x62, 0x72, 0x61, 0x6b, 0x65, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x12, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x62, 0x72, 0x61, 0x6b, 0x65, 0x46, 0x6f, 0x72, 0x63, 0x65, - 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x4c, 0x6f, 0x61, 0x64, 0x18, 0x13, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x4c, 0x6f, 0x61, 0x64, 0x12, 0x30, - 0x0a, 0x13, 0x6c, 0x65, 0x66, 0x74, 0x44, 0x6f, 0x6f, 0x72, 0x4f, 0x70, 0x65, 0x6e, 0x43, 0x6f, - 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x14, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x6c, 0x65, 0x66, - 0x74, 0x44, 0x6f, 0x6f, 0x72, 0x4f, 0x70, 0x65, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, - 0x12, 0x32, 0x0a, 0x14, 0x72, 0x69, 0x67, 0x68, 0x74, 0x44, 0x6f, 0x6f, 0x72, 0x4f, 0x70, 0x65, - 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x15, 0x20, 0x01, 0x28, 0x08, 0x52, 0x14, - 0x72, 0x69, 0x67, 0x68, 0x74, 0x44, 0x6f, 0x6f, 0x72, 0x4f, 0x70, 0x65, 0x6e, 0x43, 0x6f, 0x6d, - 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x32, 0x0a, 0x14, 0x6c, 0x65, 0x66, 0x74, 0x44, 0x6f, 0x6f, 0x72, - 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x16, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x14, 0x6c, 0x65, 0x66, 0x74, 0x44, 0x6f, 0x6f, 0x72, 0x43, 0x6c, 0x6f, 0x73, - 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x34, 0x0a, 0x15, 0x72, 0x69, 0x67, 0x68, - 0x74, 0x44, 0x6f, 0x6f, 0x72, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, - 0x64, 0x18, 0x17, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x72, 0x69, 0x67, 0x68, 0x74, 0x44, 0x6f, - 0x6f, 0x72, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x22, - 0x0a, 0x0c, 0x61, 0x6c, 0x6c, 0x44, 0x6f, 0x6f, 0x72, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x18, 0x18, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x61, 0x6c, 0x6c, 0x44, 0x6f, 0x6f, 0x72, 0x43, 0x6c, 0x6f, - 0x73, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x75, 0x64, 0x70, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x72, 0x75, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x19, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x75, 0x64, 0x70, - 0x49, 0x6e, 0x74, 0x65, 0x72, 0x72, 0x75, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, - 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0e, - 0x66, 0x6f, 0x72, 0x63, 0x65, 0x44, 0x6f, 0x6f, 0x72, 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x18, 0x1b, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x44, 0x6f, 0x6f, 0x72, 0x41, - 0x6c, 0x6c, 0x6f, 0x77, 0x12, 0x2a, 0x0a, 0x10, 0x6d, 0x6f, 0x64, 0x65, 0x4c, 0x65, 0x76, 0x65, - 0x6c, 0x44, 0x6f, 0x77, 0x6e, 0x42, 0x74, 0x6e, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, - 0x6d, 0x6f, 0x64, 0x65, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x44, 0x6f, 0x77, 0x6e, 0x42, 0x74, 0x6e, - 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x42, 0x74, 0x6e, 0x18, 0x1d, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x42, 0x74, 0x6e, - 0x12, 0x26, 0x0a, 0x0e, 0x6d, 0x6f, 0x64, 0x65, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x55, 0x70, 0x42, - 0x74, 0x6e, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x6d, 0x6f, 0x64, 0x65, 0x4c, 0x65, - 0x76, 0x65, 0x6c, 0x55, 0x70, 0x42, 0x74, 0x6e, 0x12, 0x28, 0x0a, 0x0f, 0x61, 0x74, 0x6f, 0x53, - 0x65, 0x6e, 0x64, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x42, 0x74, 0x6e, 0x18, 0x1f, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x0f, 0x61, 0x74, 0x6f, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x42, - 0x74, 0x6e, 0x12, 0x30, 0x0a, 0x13, 0x61, 0x74, 0x70, 0x4f, 0x72, 0x41, 0x74, 0x6f, 0x42, 0x79, - 0x70, 0x61, 0x73, 0x73, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x21, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x13, 0x61, 0x74, 0x70, 0x4f, 0x72, 0x41, 0x74, 0x6f, 0x42, 0x79, 0x70, 0x61, 0x73, 0x73, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x12, 0x2e, 0x0a, 0x12, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x54, 0x72, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x75, 0x74, 0x65, 0x64, 0x18, 0x22, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x12, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x54, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, - 0x75, 0x74, 0x65, 0x64, 0x12, 0x2a, 0x0a, 0x10, 0x6f, 0x62, 0x73, 0x74, 0x61, 0x63, 0x6c, 0x65, - 0x43, 0x68, 0x65, 0x63, 0x6b, 0x42, 0x74, 0x6e, 0x18, 0x23, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, - 0x6f, 0x62, 0x73, 0x74, 0x61, 0x63, 0x6c, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x42, 0x74, 0x6e, - 0x12, 0x28, 0x0a, 0x0f, 0x62, 0x72, 0x61, 0x6b, 0x65, 0x48, 0x65, 0x61, 0x76, 0x79, 0x46, 0x61, - 0x75, 0x6c, 0x74, 0x18, 0x25, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x62, 0x72, 0x61, 0x6b, 0x65, - 0x48, 0x65, 0x61, 0x76, 0x79, 0x46, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x24, 0x0a, 0x0d, 0x6c, 0x65, - 0x66, 0x74, 0x44, 0x6f, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x26, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x0d, 0x6c, 0x65, 0x66, 0x74, 0x44, 0x6f, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x12, 0x26, 0x0a, 0x0e, 0x72, 0x69, 0x67, 0x68, 0x74, 0x44, 0x6f, 0x6f, 0x72, 0x53, 0x74, 0x61, - 0x74, 0x65, 0x18, 0x27, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x72, 0x69, 0x67, 0x68, 0x74, 0x44, - 0x6f, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x77, 0x61, 0x6b, 0x65, - 0x55, 0x70, 0x42, 0x74, 0x6e, 0x18, 0x28, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x77, 0x61, 0x6b, - 0x65, 0x55, 0x70, 0x42, 0x74, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x6f, 0x76, 0x65, 0x72, 0x68, 0x61, - 0x75, 0x6c, 0x42, 0x74, 0x6e, 0x18, 0x29, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x6f, 0x76, 0x65, - 0x72, 0x68, 0x61, 0x75, 0x6c, 0x42, 0x74, 0x6e, 0x12, 0x28, 0x0a, 0x0f, 0x75, 0x6e, 0x64, 0x65, - 0x72, 0x76, 0x6f, 0x6c, 0x74, 0x61, 0x67, 0x65, 0x42, 0x74, 0x6e, 0x18, 0x2a, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x0f, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x76, 0x6f, 0x6c, 0x74, 0x61, 0x67, 0x65, 0x42, - 0x74, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x6c, 0x65, 0x65, 0x70, 0x42, 0x74, 0x6e, 0x18, 0x2b, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x73, 0x6c, 0x65, 0x65, 0x70, 0x42, 0x74, 0x6e, 0x12, 0x2e, - 0x0a, 0x12, 0x65, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x6e, 0x74, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, - 0x44, 0x6f, 0x77, 0x6e, 0x18, 0x2c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x65, 0x6d, 0x65, 0x72, - 0x67, 0x65, 0x6e, 0x74, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x44, 0x6f, 0x77, 0x6e, 0x12, 0x24, - 0x0a, 0x0d, 0x64, 0x6f, 0x6f, 0x72, 0x4c, 0x6f, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, - 0x2d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x64, 0x6f, 0x6f, 0x72, 0x4c, 0x6f, 0x63, 0x6b, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x6c, 0x69, 0x66, 0x65, 0x44, 0x6f, 0x6f, 0x72, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x2e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x6c, 0x69, 0x66, - 0x65, 0x44, 0x6f, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x38, 0x0a, 0x17, 0x74, 0x72, - 0x61, 0x69, 0x6e, 0x4c, 0x6f, 0x77, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x52, 0x65, 0x73, 0x65, 0x74, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x2f, 0x20, 0x01, 0x28, 0x08, 0x52, 0x17, 0x74, 0x72, 0x61, - 0x69, 0x6e, 0x4c, 0x6f, 0x77, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x52, 0x65, 0x73, 0x65, 0x74, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x61, 0x74, 0x70, 0x50, 0x6f, 0x77, 0x65, 0x72, - 0x4f, 0x6e, 0x42, 0x74, 0x6e, 0x18, 0x30, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x61, 0x74, 0x70, - 0x50, 0x6f, 0x77, 0x65, 0x72, 0x4f, 0x6e, 0x42, 0x74, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x6f, - 0x6f, 0x72, 0x4d, 0x6f, 0x64, 0x65, 0x41, 0x41, 0x18, 0x31, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, - 0x64, 0x6f, 0x6f, 0x72, 0x4d, 0x6f, 0x64, 0x65, 0x41, 0x41, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x6f, - 0x6f, 0x72, 0x4d, 0x6f, 0x64, 0x65, 0x41, 0x4d, 0x18, 0x32, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, - 0x64, 0x6f, 0x6f, 0x72, 0x4d, 0x6f, 0x64, 0x65, 0x41, 0x4d, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x6f, - 0x6f, 0x72, 0x4d, 0x6f, 0x64, 0x65, 0x4d, 0x4d, 0x18, 0x33, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, - 0x64, 0x6f, 0x6f, 0x72, 0x4d, 0x6f, 0x64, 0x65, 0x4d, 0x4d, 0x12, 0x28, 0x0a, 0x0f, 0x74, 0x72, - 0x61, 0x69, 0x6e, 0x44, 0x6f, 0x6f, 0x72, 0x4f, 0x75, 0x74, 0x4c, 0x65, 0x64, 0x18, 0x35, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x0f, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x44, 0x6f, 0x6f, 0x72, 0x4f, 0x75, - 0x74, 0x4c, 0x65, 0x64, 0x12, 0x28, 0x0a, 0x0f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x41, 0x74, 0x70, - 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x18, 0x36, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x6c, - 0x6f, 0x63, 0x61, 0x6c, 0x41, 0x74, 0x70, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x12, 0x28, - 0x0a, 0x0f, 0x61, 0x74, 0x6f, 0x42, 0x72, 0x61, 0x6b, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, - 0x64, 0x18, 0x37, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x61, 0x74, 0x6f, 0x42, 0x72, 0x61, 0x6b, - 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x34, 0x0a, 0x15, 0x61, 0x74, 0x6f, 0x54, - 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x4f, 0x75, - 0x74, 0x18, 0x38, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x61, 0x74, 0x6f, 0x54, 0x72, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x4f, 0x75, 0x74, 0x12, 0x2c, - 0x0a, 0x11, 0x61, 0x74, 0x6f, 0x4c, 0x61, 0x7a, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, - 0x4f, 0x75, 0x74, 0x18, 0x39, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x61, 0x74, 0x6f, 0x4c, 0x61, - 0x7a, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x4f, 0x75, 0x74, 0x12, 0x26, 0x0a, 0x0e, - 0x61, 0x74, 0x6f, 0x41, 0x6c, 0x77, 0x61, 0x79, 0x73, 0x42, 0x72, 0x61, 0x6b, 0x65, 0x18, 0x3b, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x61, 0x74, 0x6f, 0x41, 0x6c, 0x77, 0x61, 0x79, 0x73, 0x42, - 0x72, 0x61, 0x6b, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x61, 0x74, 0x6f, 0x4f, 0x70, 0x65, 0x6e, 0x4c, - 0x65, 0x66, 0x74, 0x44, 0x6f, 0x6f, 0x72, 0x18, 0x3c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x61, - 0x74, 0x6f, 0x4f, 0x70, 0x65, 0x6e, 0x4c, 0x65, 0x66, 0x74, 0x44, 0x6f, 0x6f, 0x72, 0x12, 0x2a, - 0x0a, 0x10, 0x61, 0x74, 0x6f, 0x4f, 0x70, 0x65, 0x6e, 0x52, 0x69, 0x67, 0x68, 0x74, 0x44, 0x6f, - 0x6f, 0x72, 0x18, 0x3d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x61, 0x74, 0x6f, 0x4f, 0x70, 0x65, - 0x6e, 0x52, 0x69, 0x67, 0x68, 0x74, 0x44, 0x6f, 0x6f, 0x72, 0x12, 0x2a, 0x0a, 0x10, 0x61, 0x74, - 0x6f, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x4c, 0x65, 0x66, 0x74, 0x44, 0x6f, 0x6f, 0x72, 0x18, 0x3e, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x61, 0x74, 0x6f, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x4c, 0x65, - 0x66, 0x74, 0x44, 0x6f, 0x6f, 0x72, 0x12, 0x22, 0x0a, 0x0c, 0x6e, 0x6f, 0x53, 0x70, 0x65, 0x65, - 0x64, 0x53, 0x69, 0x67, 0x6c, 0x65, 0x18, 0x3f, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x6e, 0x6f, - 0x53, 0x70, 0x65, 0x65, 0x64, 0x53, 0x69, 0x67, 0x6c, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x74, 0x72, - 0x61, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x4c, 0x65, 0x64, 0x18, 0x40, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x0f, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, - 0x64, 0x4c, 0x65, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x6d, 0x6f, 0x73, 0x74, 0x55, 0x73, 0x65, 0x42, - 0x72, 0x61, 0x6b, 0x65, 0x18, 0x41, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x6d, 0x6f, 0x73, 0x74, - 0x55, 0x73, 0x65, 0x42, 0x72, 0x61, 0x6b, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x73, 0x70, 0x6c, 0x69, - 0x74, 0x74, 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x18, 0x42, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, - 0x73, 0x70, 0x6c, 0x69, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x12, 0x1c, 0x0a, 0x09, - 0x6d, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x18, 0x43, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x09, 0x6d, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x12, 0x2c, 0x0a, 0x11, 0x74, 0x72, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, - 0x44, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x74, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, - 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x62, 0x72, 0x61, 0x6b, - 0x65, 0x45, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x45, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x0e, 0x62, 0x72, 0x61, 0x6b, 0x65, 0x45, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, - 0x12, 0x28, 0x0a, 0x0f, 0x62, 0x72, 0x61, 0x6b, 0x65, 0x51, 0x75, 0x61, 0x72, 0x61, 0x6e, 0x74, - 0x69, 0x6e, 0x65, 0x18, 0x46, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x62, 0x72, 0x61, 0x6b, 0x65, - 0x51, 0x75, 0x61, 0x72, 0x61, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x73, 0x74, - 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x41, 0x6c, 0x6c, 0x42, 0x72, 0x61, 0x6b, 0x65, 0x18, 0x47, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x0f, 0x73, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x41, 0x6c, 0x6c, 0x42, - 0x72, 0x61, 0x6b, 0x65, 0x12, 0x30, 0x0a, 0x13, 0x61, 0x74, 0x6f, 0x54, 0x72, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x31, 0x18, 0x48, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x13, 0x61, 0x74, 0x6f, 0x54, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, - 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x31, 0x12, 0x30, 0x0a, 0x13, 0x61, 0x74, 0x6f, 0x54, 0x72, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x32, 0x18, 0x49, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x13, 0x61, 0x74, 0x6f, 0x54, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x32, 0x12, 0x30, 0x0a, 0x13, 0x61, 0x74, 0x6f, 0x54, - 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x33, 0x18, - 0x4a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x61, 0x74, 0x6f, 0x54, 0x72, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x33, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x6f, - 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x4b, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x6d, 0x6f, - 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x22, 0x0a, 0x0c, 0x61, 0x74, 0x70, 0x43, 0x75, 0x74, - 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x18, 0x4c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x61, 0x74, - 0x70, 0x43, 0x75, 0x74, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x12, 0x40, 0x0a, 0x1b, 0x6c, 0x69, - 0x67, 0x68, 0x74, 0x45, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x42, 0x72, 0x61, 0x6b, - 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x4d, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x1b, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x45, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x42, - 0x72, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x3e, 0x0a, 0x1a, - 0x6c, 0x69, 0x67, 0x68, 0x74, 0x54, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x61, 0x66, - 0x65, 0x74, 0x79, 0x43, 0x69, 0x72, 0x63, 0x75, 0x69, 0x74, 0x18, 0x4e, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x1a, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x54, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, - 0x61, 0x66, 0x65, 0x74, 0x79, 0x43, 0x69, 0x72, 0x63, 0x75, 0x69, 0x74, 0x12, 0x1c, 0x0a, 0x09, - 0x6c, 0x69, 0x67, 0x68, 0x74, 0x44, 0x69, 0x72, 0x31, 0x18, 0x4f, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x09, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x44, 0x69, 0x72, 0x31, 0x12, 0x1c, 0x0a, 0x09, 0x6c, 0x69, - 0x67, 0x68, 0x74, 0x44, 0x69, 0x72, 0x32, 0x18, 0x50, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x6c, - 0x69, 0x67, 0x68, 0x74, 0x44, 0x69, 0x72, 0x32, 0x12, 0x2c, 0x0a, 0x11, 0x6c, 0x69, 0x67, 0x68, - 0x74, 0x44, 0x72, 0x69, 0x76, 0x65, 0x72, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x51, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x11, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x44, 0x72, 0x69, 0x76, 0x65, 0x72, - 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, 0x34, 0x0a, 0x15, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x43, - 0x6f, 0x6e, 0x6e, 0x49, 0x6e, 0x69, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x18, - 0x52, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x6e, - 0x49, 0x6e, 0x69, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x2c, 0x0a, 0x11, - 0x61, 0x74, 0x6f, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x52, 0x69, 0x67, 0x68, 0x74, 0x44, 0x6f, 0x6f, - 0x72, 0x18, 0x53, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x61, 0x74, 0x6f, 0x43, 0x6c, 0x6f, 0x73, - 0x65, 0x52, 0x69, 0x67, 0x68, 0x74, 0x44, 0x6f, 0x6f, 0x72, 0x12, 0x22, 0x0a, 0x0c, 0x6c, 0x69, - 0x67, 0x68, 0x74, 0x41, 0x74, 0x6f, 0x53, 0x65, 0x6e, 0x64, 0x18, 0x54, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x0c, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x41, 0x74, 0x6f, 0x53, 0x65, 0x6e, 0x64, 0x12, 0x46, - 0x0a, 0x0c, 0x61, 0x74, 0x6f, 0x53, 0x74, 0x65, 0x70, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x55, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x22, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x72, 0x61, - 0x69, 0x6e, 0x56, 0x6f, 0x62, 0x63, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x41, 0x74, 0x6f, 0x53, - 0x74, 0x65, 0x70, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x0c, 0x61, 0x74, 0x6f, 0x53, 0x74, 0x65, - 0x70, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x43, 0x0a, 0x0b, 0x76, 0x6f, 0x62, 0x63, 0x42, 0x74, - 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x56, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x73, 0x74, - 0x61, 0x74, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x56, 0x6f, 0x62, 0x63, 0x53, 0x74, 0x61, - 0x74, 0x65, 0x2e, 0x56, 0x6f, 0x62, 0x63, 0x42, 0x74, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0b, - 0x76, 0x6f, 0x62, 0x63, 0x42, 0x74, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x1a, 0x5b, 0x0a, 0x0b, 0x56, - 0x6f, 0x62, 0x63, 0x42, 0x74, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x14, 0x0a, 0x05, 0x62, 0x74, - 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x74, 0x6d, 0x49, 0x64, - 0x12, 0x16, 0x0a, 0x06, 0x76, 0x6f, 0x62, 0x63, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x06, 0x76, 0x6f, 0x62, 0x63, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x76, 0x6f, 0x62, 0x63, - 0x4c, 0x69, 0x66, 0x65, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x76, 0x6f, - 0x62, 0x63, 0x4c, 0x69, 0x66, 0x65, 0x49, 0x64, 0x22, 0xc1, 0x01, 0x0a, 0x0c, 0x41, 0x74, 0x6f, - 0x53, 0x74, 0x65, 0x70, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x17, 0x0a, 0x13, 0x41, 0x54, 0x4f, - 0x5f, 0x53, 0x54, 0x45, 0x50, 0x5f, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x4e, 0x4f, 0x4e, 0x45, - 0x10, 0x00, 0x12, 0x14, 0x0a, 0x10, 0x41, 0x54, 0x4f, 0x5f, 0x53, 0x54, 0x45, 0x50, 0x5f, 0x4c, - 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x31, 0x10, 0x01, 0x12, 0x14, 0x0a, 0x10, 0x41, 0x54, 0x4f, 0x5f, - 0x53, 0x54, 0x45, 0x50, 0x5f, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x32, 0x10, 0x02, 0x12, 0x14, - 0x0a, 0x10, 0x41, 0x54, 0x4f, 0x5f, 0x53, 0x54, 0x45, 0x50, 0x5f, 0x4c, 0x45, 0x56, 0x45, 0x4c, - 0x5f, 0x33, 0x10, 0x03, 0x12, 0x14, 0x0a, 0x10, 0x41, 0x54, 0x4f, 0x5f, 0x53, 0x54, 0x45, 0x50, - 0x5f, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x34, 0x10, 0x04, 0x12, 0x14, 0x0a, 0x10, 0x41, 0x54, - 0x4f, 0x5f, 0x53, 0x54, 0x45, 0x50, 0x5f, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x35, 0x10, 0x05, - 0x12, 0x14, 0x0a, 0x10, 0x41, 0x54, 0x4f, 0x5f, 0x53, 0x54, 0x45, 0x50, 0x5f, 0x4c, 0x45, 0x56, - 0x45, 0x4c, 0x5f, 0x36, 0x10, 0x06, 0x12, 0x14, 0x0a, 0x10, 0x41, 0x54, 0x4f, 0x5f, 0x53, 0x54, - 0x45, 0x50, 0x5f, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x37, 0x10, 0x07, 0x22, 0x8d, 0x15, 0x0a, - 0x0d, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0e, - 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x0e, - 0x0a, 0x02, 0x75, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x02, 0x75, 0x70, 0x12, 0x22, - 0x0a, 0x0c, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x70, 0x65, 0x65, 0x64, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x02, 0x52, 0x0c, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x70, 0x65, - 0x65, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x4c, 0x65, 0x6e, 0x67, 0x74, - 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x4c, 0x65, - 0x6e, 0x67, 0x74, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x68, 0x6f, 0x77, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x04, 0x73, 0x68, 0x6f, 0x77, 0x12, 0x22, 0x0a, 0x0c, 0x68, 0x65, 0x61, 0x64, - 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, - 0x68, 0x65, 0x61, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, - 0x68, 0x65, 0x61, 0x64, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0a, 0x68, 0x65, 0x61, 0x64, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x1e, 0x0a, 0x0a, - 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x18, 0x0a, 0x07, - 0x64, 0x72, 0x69, 0x66, 0x74, 0x54, 0x6f, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x64, - 0x72, 0x69, 0x66, 0x74, 0x54, 0x6f, 0x12, 0x1e, 0x0a, 0x0a, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x52, - 0x75, 0x6e, 0x55, 0x70, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x74, 0x72, 0x61, 0x69, - 0x6e, 0x52, 0x75, 0x6e, 0x55, 0x70, 0x12, 0x32, 0x0a, 0x14, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x41, - 0x63, 0x74, 0x69, 0x76, 0x65, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0b, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x14, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x41, 0x63, 0x74, 0x69, 0x76, - 0x65, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x0a, 0x0e, 0x74, 0x72, - 0x61, 0x69, 0x6e, 0x4b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x18, 0x0c, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0e, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x4b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, - 0x65, 0x72, 0x12, 0x2a, 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x44, 0x65, 0x6c, - 0x61, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x63, 0x6f, - 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x24, - 0x0a, 0x0d, 0x77, 0x68, 0x65, 0x65, 0x6c, 0x44, 0x69, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x18, - 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x77, 0x68, 0x65, 0x65, 0x6c, 0x44, 0x69, 0x61, 0x6d, - 0x65, 0x74, 0x65, 0x72, 0x12, 0x2a, 0x0a, 0x10, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x48, - 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, - 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, - 0x12, 0x1e, 0x0a, 0x0a, 0x68, 0x65, 0x61, 0x64, 0x4c, 0x69, 0x6e, 0x6b, 0x49, 0x64, 0x18, 0x10, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x68, 0x65, 0x61, 0x64, 0x4c, 0x69, 0x6e, 0x6b, 0x49, 0x64, - 0x12, 0x26, 0x0a, 0x0e, 0x68, 0x65, 0x61, 0x64, 0x4c, 0x69, 0x6e, 0x6b, 0x4f, 0x66, 0x66, 0x73, - 0x65, 0x74, 0x18, 0x11, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x68, 0x65, 0x61, 0x64, 0x4c, 0x69, - 0x6e, 0x6b, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x74, 0x61, 0x69, 0x6c, - 0x4c, 0x69, 0x6e, 0x6b, 0x49, 0x64, 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x74, 0x61, - 0x69, 0x6c, 0x4c, 0x69, 0x6e, 0x6b, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0e, 0x74, 0x61, 0x69, 0x6c, - 0x4c, 0x69, 0x6e, 0x6b, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x13, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0e, 0x74, 0x61, 0x69, 0x6c, 0x4c, 0x69, 0x6e, 0x6b, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, - 0x12, 0x2c, 0x0a, 0x11, 0x6f, 0x63, 0x63, 0x75, 0x70, 0x69, 0x65, 0x64, 0x4c, 0x69, 0x6e, 0x6b, - 0x49, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x14, 0x20, 0x03, 0x28, 0x09, 0x52, 0x11, 0x6f, 0x63, 0x63, - 0x75, 0x70, 0x69, 0x65, 0x64, 0x4c, 0x69, 0x6e, 0x6b, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x14, - 0x0a, 0x05, 0x73, 0x6c, 0x6f, 0x70, 0x65, 0x18, 0x15, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x73, - 0x6c, 0x6f, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x75, 0x70, 0x73, 0x6c, 0x6f, 0x70, 0x65, 0x18, - 0x16, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x75, 0x70, 0x73, 0x6c, 0x6f, 0x70, 0x65, 0x12, 0x1c, - 0x0a, 0x09, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x55, 0x70, 0x18, 0x17, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x09, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x55, 0x70, 0x12, 0x32, 0x0a, 0x14, - 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, - 0x65, 0x53, 0x75, 0x6d, 0x18, 0x18, 0x20, 0x01, 0x28, 0x02, 0x52, 0x14, 0x72, 0x75, 0x6e, 0x6e, - 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x75, 0x6d, - 0x12, 0x24, 0x0a, 0x0d, 0x61, 0x69, 0x72, 0x52, 0x65, 0x73, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, - 0x65, 0x18, 0x19, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0d, 0x61, 0x69, 0x72, 0x52, 0x65, 0x73, 0x69, - 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x72, 0x61, 0x6d, 0x70, 0x52, 0x65, - 0x73, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0e, - 0x72, 0x61, 0x6d, 0x70, 0x52, 0x65, 0x73, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x28, - 0x0a, 0x0f, 0x63, 0x75, 0x72, 0x76, 0x65, 0x52, 0x65, 0x73, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, - 0x65, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0f, 0x63, 0x75, 0x72, 0x76, 0x65, 0x52, 0x65, - 0x73, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x70, 0x65, 0x65, - 0x64, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x73, 0x70, 0x65, 0x65, 0x64, 0x12, 0x2a, - 0x0a, 0x10, 0x68, 0x65, 0x61, 0x64, 0x53, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x53, 0x70, 0x65, 0x65, - 0x64, 0x31, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x68, 0x65, 0x61, 0x64, 0x53, 0x65, - 0x6e, 0x73, 0x6f, 0x72, 0x53, 0x70, 0x65, 0x65, 0x64, 0x31, 0x12, 0x2a, 0x0a, 0x10, 0x68, 0x65, - 0x61, 0x64, 0x53, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x53, 0x70, 0x65, 0x65, 0x64, 0x32, 0x18, 0x1e, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x68, 0x65, 0x61, 0x64, 0x53, 0x65, 0x6e, 0x73, 0x6f, 0x72, - 0x53, 0x70, 0x65, 0x65, 0x64, 0x32, 0x12, 0x2a, 0x0a, 0x10, 0x74, 0x61, 0x69, 0x6c, 0x53, 0x65, - 0x6e, 0x73, 0x6f, 0x72, 0x53, 0x70, 0x65, 0x65, 0x64, 0x31, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x10, 0x74, 0x61, 0x69, 0x6c, 0x53, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x53, 0x70, 0x65, 0x65, - 0x64, 0x31, 0x12, 0x2a, 0x0a, 0x10, 0x74, 0x61, 0x69, 0x6c, 0x53, 0x65, 0x6e, 0x73, 0x6f, 0x72, - 0x53, 0x70, 0x65, 0x65, 0x64, 0x32, 0x18, 0x20, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x74, 0x61, - 0x69, 0x6c, 0x53, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x53, 0x70, 0x65, 0x65, 0x64, 0x32, 0x12, 0x26, - 0x0a, 0x0e, 0x68, 0x65, 0x61, 0x64, 0x52, 0x61, 0x64, 0x61, 0x72, 0x53, 0x70, 0x65, 0x65, 0x64, - 0x18, 0x21, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x68, 0x65, 0x61, 0x64, 0x52, 0x61, 0x64, 0x61, - 0x72, 0x53, 0x70, 0x65, 0x65, 0x64, 0x12, 0x26, 0x0a, 0x0e, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x61, - 0x64, 0x61, 0x72, 0x53, 0x70, 0x65, 0x65, 0x64, 0x18, 0x22, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, - 0x74, 0x61, 0x69, 0x6c, 0x52, 0x61, 0x64, 0x61, 0x72, 0x53, 0x70, 0x65, 0x65, 0x64, 0x12, 0x30, - 0x0a, 0x13, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x72, 0x75, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x23, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x64, 0x79, 0x6e, - 0x61, 0x6d, 0x69, 0x63, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x72, 0x75, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x22, 0x0a, 0x0c, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x24, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0c, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x65, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x0a, 0x0e, 0x76, 0x6f, 0x62, 0x63, 0x4c, 0x69, 0x66, 0x65, - 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x18, 0x25, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x76, 0x6f, - 0x62, 0x63, 0x4c, 0x69, 0x66, 0x65, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x12, 0x1c, 0x0a, 0x09, - 0x74, 0x63, 0x31, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x26, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x09, 0x74, 0x63, 0x31, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x63, - 0x32, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x27, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x74, - 0x63, 0x32, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, 0x2a, 0x0a, 0x10, 0x64, 0x69, 0x72, 0x65, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x18, 0x28, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x10, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x6f, 0x72, - 0x77, 0x61, 0x72, 0x64, 0x12, 0x2c, 0x0a, 0x11, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x42, 0x61, 0x63, 0x6b, 0x77, 0x61, 0x72, 0x64, 0x18, 0x29, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x11, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x61, 0x63, 0x6b, 0x77, 0x61, - 0x72, 0x64, 0x12, 0x26, 0x0a, 0x0e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x18, 0x2a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x74, 0x72, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x62, 0x72, - 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x2b, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x0d, 0x62, 0x72, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x12, 0x36, 0x0a, 0x16, 0x65, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x42, 0x72, 0x61, - 0x6b, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x2c, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x16, 0x65, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x42, 0x72, 0x61, 0x6b, 0x69, - 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x74, 0x75, 0x72, 0x6e, - 0x62, 0x61, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x2d, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x0e, 0x74, 0x75, 0x72, 0x6e, 0x62, 0x61, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x12, 0x1e, 0x0a, 0x0a, 0x6a, 0x75, 0x6d, 0x70, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x2e, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x6a, 0x75, 0x6d, 0x70, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x12, 0x10, 0x0a, 0x03, 0x61, 0x74, 0x6f, 0x18, 0x2f, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, - 0x74, 0x6f, 0x12, 0x10, 0x0a, 0x03, 0x66, 0x61, 0x6d, 0x18, 0x30, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x03, 0x66, 0x61, 0x6d, 0x12, 0x10, 0x0a, 0x03, 0x63, 0x61, 0x6d, 0x18, 0x31, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x03, 0x63, 0x61, 0x6d, 0x12, 0x34, 0x0a, 0x15, 0x74, 0x72, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x53, 0x61, 0x66, 0x65, 0x74, 0x79, 0x43, 0x69, 0x72, 0x63, 0x75, 0x69, 0x74, 0x18, - 0x32, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x74, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, - 0x61, 0x66, 0x65, 0x74, 0x79, 0x43, 0x69, 0x72, 0x63, 0x75, 0x69, 0x74, 0x12, 0x2e, 0x0a, 0x12, - 0x70, 0x61, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x42, 0x72, 0x61, 0x6b, 0x65, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x18, 0x33, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x70, 0x61, 0x72, 0x6b, 0x69, 0x6e, - 0x67, 0x42, 0x72, 0x61, 0x6b, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x30, 0x0a, 0x13, - 0x6d, 0x61, 0x69, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x42, 0x72, 0x61, 0x6b, 0x65, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x18, 0x34, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x6d, 0x61, 0x69, 0x6e, 0x74, - 0x61, 0x69, 0x6e, 0x42, 0x72, 0x61, 0x6b, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, - 0x0a, 0x0d, 0x74, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x18, - 0x35, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x46, - 0x6f, 0x72, 0x63, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x62, 0x72, 0x61, 0x6b, 0x65, 0x46, 0x6f, 0x72, - 0x63, 0x65, 0x18, 0x36, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x62, 0x72, 0x61, 0x6b, 0x65, 0x46, - 0x6f, 0x72, 0x63, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x4c, 0x6f, 0x61, - 0x64, 0x18, 0x37, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x4c, 0x6f, - 0x61, 0x64, 0x12, 0x30, 0x0a, 0x13, 0x6c, 0x65, 0x66, 0x74, 0x44, 0x6f, 0x6f, 0x72, 0x4f, 0x70, - 0x65, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x38, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x13, 0x6c, 0x65, 0x66, 0x74, 0x44, 0x6f, 0x6f, 0x72, 0x4f, 0x70, 0x65, 0x6e, 0x43, 0x6f, 0x6d, - 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x32, 0x0a, 0x14, 0x72, 0x69, 0x67, 0x68, 0x74, 0x44, 0x6f, 0x6f, - 0x72, 0x4f, 0x70, 0x65, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x39, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x14, 0x72, 0x69, 0x67, 0x68, 0x74, 0x44, 0x6f, 0x6f, 0x72, 0x4f, 0x70, 0x65, - 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x32, 0x0a, 0x14, 0x6c, 0x65, 0x66, 0x74, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x74, 0x75, 0x72, 0x6e, 0x62, 0x61, + 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, + 0x74, 0x75, 0x72, 0x6e, 0x62, 0x61, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1e, + 0x0a, 0x0a, 0x6a, 0x75, 0x6d, 0x70, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x0a, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x0a, 0x6a, 0x75, 0x6d, 0x70, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x10, + 0x0a, 0x03, 0x61, 0x74, 0x6f, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x74, 0x6f, + 0x12, 0x10, 0x0a, 0x03, 0x66, 0x61, 0x6d, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x66, + 0x61, 0x6d, 0x12, 0x10, 0x0a, 0x03, 0x63, 0x61, 0x6d, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x03, 0x63, 0x61, 0x6d, 0x12, 0x34, 0x0a, 0x15, 0x74, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x53, 0x61, 0x66, 0x65, 0x74, 0x79, 0x43, 0x69, 0x72, 0x63, 0x75, 0x69, 0x74, 0x18, 0x0e, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x15, 0x74, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x61, 0x66, + 0x65, 0x74, 0x79, 0x43, 0x69, 0x72, 0x63, 0x75, 0x69, 0x74, 0x12, 0x2e, 0x0a, 0x12, 0x70, 0x61, + 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x42, 0x72, 0x61, 0x6b, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x18, 0x0f, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x70, 0x61, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x42, + 0x72, 0x61, 0x6b, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x30, 0x0a, 0x13, 0x6d, 0x61, + 0x69, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x42, 0x72, 0x61, 0x6b, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x18, 0x10, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x6d, 0x61, 0x69, 0x6e, 0x74, 0x61, 0x69, + 0x6e, 0x42, 0x72, 0x61, 0x6b, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, 0x0d, + 0x74, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x11, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x6f, 0x72, + 0x63, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x62, 0x72, 0x61, 0x6b, 0x65, 0x46, 0x6f, 0x72, 0x63, 0x65, + 0x18, 0x12, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x62, 0x72, 0x61, 0x6b, 0x65, 0x46, 0x6f, 0x72, + 0x63, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x4c, 0x6f, 0x61, 0x64, 0x18, + 0x13, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x4c, 0x6f, 0x61, 0x64, + 0x12, 0x30, 0x0a, 0x13, 0x6c, 0x65, 0x66, 0x74, 0x44, 0x6f, 0x6f, 0x72, 0x4f, 0x70, 0x65, 0x6e, + 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x14, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x6c, + 0x65, 0x66, 0x74, 0x44, 0x6f, 0x6f, 0x72, 0x4f, 0x70, 0x65, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, + 0x6e, 0x64, 0x12, 0x32, 0x0a, 0x14, 0x72, 0x69, 0x67, 0x68, 0x74, 0x44, 0x6f, 0x6f, 0x72, 0x4f, + 0x70, 0x65, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x15, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x14, 0x72, 0x69, 0x67, 0x68, 0x74, 0x44, 0x6f, 0x6f, 0x72, 0x4f, 0x70, 0x65, 0x6e, 0x43, + 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x32, 0x0a, 0x14, 0x6c, 0x65, 0x66, 0x74, 0x44, 0x6f, + 0x6f, 0x72, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x16, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x14, 0x6c, 0x65, 0x66, 0x74, 0x44, 0x6f, 0x6f, 0x72, 0x43, 0x6c, + 0x6f, 0x73, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x34, 0x0a, 0x15, 0x72, 0x69, + 0x67, 0x68, 0x74, 0x44, 0x6f, 0x6f, 0x72, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x43, 0x6f, 0x6d, 0x6d, + 0x61, 0x6e, 0x64, 0x18, 0x17, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x72, 0x69, 0x67, 0x68, 0x74, 0x44, 0x6f, 0x6f, 0x72, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, - 0x18, 0x3a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x14, 0x6c, 0x65, 0x66, 0x74, 0x44, 0x6f, 0x6f, 0x72, - 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x34, 0x0a, 0x15, - 0x72, 0x69, 0x67, 0x68, 0x74, 0x44, 0x6f, 0x6f, 0x72, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x43, 0x6f, - 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x3b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x72, 0x69, 0x67, - 0x68, 0x74, 0x44, 0x6f, 0x6f, 0x72, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x61, - 0x6e, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x61, 0x6c, 0x6c, 0x44, 0x6f, 0x6f, 0x72, 0x43, 0x6c, 0x6f, - 0x73, 0x65, 0x18, 0x3c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x61, 0x6c, 0x6c, 0x44, 0x6f, 0x6f, - 0x72, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x10, 0x76, 0x6f, 0x62, 0x63, 0x49, 0x6e, - 0x74, 0x65, 0x72, 0x72, 0x75, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x3d, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x10, 0x76, 0x6f, 0x62, 0x63, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x72, 0x75, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x4d, 0x0a, 0x12, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x44, 0x79, 0x6e, 0x61, 0x6d, - 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x3e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, - 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x44, 0x79, 0x6e, 0x61, - 0x6d, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4d, 0x71, 0x74, 0x74, 0x52, 0x12, 0x74, - 0x72, 0x61, 0x69, 0x6e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x12, 0x39, 0x0a, 0x0a, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x45, 0x6e, 0x64, 0x73, 0x41, 0x18, - 0x3f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x72, - 0x61, 0x69, 0x6e, 0x45, 0x6e, 0x64, 0x73, 0x53, 0x74, 0x61, 0x74, 0x65, 0x4d, 0x71, 0x74, 0x74, - 0x52, 0x0a, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x45, 0x6e, 0x64, 0x73, 0x41, 0x12, 0x39, 0x0a, 0x0a, - 0x74, 0x72, 0x61, 0x69, 0x6e, 0x45, 0x6e, 0x64, 0x73, 0x42, 0x18, 0x40, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x19, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x45, 0x6e, - 0x64, 0x73, 0x53, 0x74, 0x61, 0x74, 0x65, 0x4d, 0x71, 0x74, 0x74, 0x52, 0x0a, 0x74, 0x72, 0x61, - 0x69, 0x6e, 0x45, 0x6e, 0x64, 0x73, 0x42, 0x12, 0x22, 0x0a, 0x0c, 0x44, 0x69, 0x73, 0x70, 0x6c, - 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x41, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0c, 0x44, - 0x69, 0x73, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x74, - 0x61, 0x69, 0x6c, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x18, 0x42, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x0c, 0x74, 0x61, 0x69, 0x6c, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x12, - 0x1e, 0x0a, 0x0a, 0x74, 0x61, 0x69, 0x6c, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x43, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0a, 0x74, 0x61, 0x69, 0x6c, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, - 0x26, 0x0a, 0x0e, 0x74, 0x61, 0x69, 0x6c, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, - 0x74, 0x18, 0x44, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x74, 0x61, 0x69, 0x6c, 0x44, 0x65, 0x76, - 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x33, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x6e, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x18, 0x45, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x73, 0x74, 0x61, - 0x74, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x6e, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x22, 0xfc, 0x02, 0x0a, - 0x08, 0x42, 0x54, 0x4d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x74, 0x65, 0x6c, - 0x65, 0x67, 0x72, 0x61, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x65, 0x6c, - 0x65, 0x67, 0x72, 0x61, 0x6d, 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x62, 0x6f, 0x76, 0x65, 0x42, 0x61, - 0x6c, 0x69, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x61, 0x62, 0x6f, 0x76, - 0x65, 0x42, 0x61, 0x6c, 0x69, 0x73, 0x65, 0x12, 0x42, 0x0a, 0x1c, 0x62, 0x61, 0x6c, 0x69, 0x73, - 0x65, 0x54, 0x65, 0x6c, 0x65, 0x67, 0x72, 0x61, 0x6d, 0x46, 0x6f, 0x72, 0x50, 0x63, 0x53, 0x69, - 0x6d, 0x52, 0x65, 0x73, 0x65, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x1c, 0x62, - 0x61, 0x6c, 0x69, 0x73, 0x65, 0x54, 0x65, 0x6c, 0x65, 0x67, 0x72, 0x61, 0x6d, 0x46, 0x6f, 0x72, - 0x50, 0x63, 0x53, 0x69, 0x6d, 0x52, 0x65, 0x73, 0x65, 0x6e, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x74, - 0x65, 0x6c, 0x65, 0x67, 0x72, 0x61, 0x6d, 0x31, 0x32, 0x38, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0b, 0x74, 0x65, 0x6c, 0x65, 0x67, 0x72, 0x61, 0x6d, 0x31, 0x32, 0x38, 0x12, 0x1a, 0x0a, - 0x08, 0x62, 0x61, 0x6c, 0x69, 0x73, 0x65, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x62, 0x61, 0x6c, 0x69, 0x73, 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x73, 0x53, - 0x65, 0x6e, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x69, 0x73, 0x53, 0x65, 0x6e, - 0x64, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x06, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x12, 0x1e, 0x0a, 0x0a, 0x62, 0x61, 0x6c, - 0x69, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x62, - 0x61, 0x6c, 0x69, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x68, 0x61, 0x73, - 0x44, 0x61, 0x74, 0x61, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x68, 0x61, 0x73, 0x44, - 0x61, 0x74, 0x61, 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x64, 0x43, 0x6f, 0x75, - 0x6e, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x64, - 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x24, 0x0a, 0x0d, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, - 0x44, 0x61, 0x74, 0x61, 0x53, 0x4e, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x70, 0x61, - 0x63, 0x6b, 0x61, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x53, 0x4e, 0x22, 0xe4, 0x04, 0x0a, 0x16, - 0x54, 0x72, 0x61, 0x69, 0x6e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x4d, 0x71, 0x74, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x61, 0x76, 0x69, 0x73, 0x50, - 0x61, 0x72, 0x61, 0x6d, 0x41, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x61, 0x76, - 0x69, 0x73, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x41, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x61, 0x76, 0x69, - 0x73, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x42, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, - 0x61, 0x76, 0x69, 0x73, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x42, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x61, - 0x76, 0x69, 0x73, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x43, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0b, 0x64, 0x61, 0x76, 0x69, 0x73, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x43, 0x12, 0x36, 0x0a, 0x16, + 0x12, 0x22, 0x0a, 0x0c, 0x61, 0x6c, 0x6c, 0x44, 0x6f, 0x6f, 0x72, 0x43, 0x6c, 0x6f, 0x73, 0x65, + 0x18, 0x18, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x61, 0x6c, 0x6c, 0x44, 0x6f, 0x6f, 0x72, 0x43, + 0x6c, 0x6f, 0x73, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x75, 0x64, 0x70, 0x49, 0x6e, 0x74, 0x65, 0x72, + 0x72, 0x75, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x19, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x75, + 0x64, 0x70, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x72, 0x75, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1e, + 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x1a, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x26, + 0x0a, 0x0e, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x44, 0x6f, 0x6f, 0x72, 0x41, 0x6c, 0x6c, 0x6f, 0x77, + 0x18, 0x1b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x44, 0x6f, 0x6f, + 0x72, 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x12, 0x2a, 0x0a, 0x10, 0x6d, 0x6f, 0x64, 0x65, 0x4c, 0x65, + 0x76, 0x65, 0x6c, 0x44, 0x6f, 0x77, 0x6e, 0x42, 0x74, 0x6e, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x10, 0x6d, 0x6f, 0x64, 0x65, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x44, 0x6f, 0x77, 0x6e, 0x42, + 0x74, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x42, 0x74, 0x6e, + 0x18, 0x1d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x42, + 0x74, 0x6e, 0x12, 0x26, 0x0a, 0x0e, 0x6d, 0x6f, 0x64, 0x65, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x55, + 0x70, 0x42, 0x74, 0x6e, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x6d, 0x6f, 0x64, 0x65, + 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x55, 0x70, 0x42, 0x74, 0x6e, 0x12, 0x28, 0x0a, 0x0f, 0x61, 0x74, + 0x6f, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x42, 0x74, 0x6e, 0x18, 0x1f, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x0f, 0x61, 0x74, 0x6f, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x72, 0x61, 0x69, + 0x6e, 0x42, 0x74, 0x6e, 0x12, 0x30, 0x0a, 0x13, 0x61, 0x74, 0x70, 0x4f, 0x72, 0x41, 0x74, 0x6f, + 0x42, 0x79, 0x70, 0x61, 0x73, 0x73, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x21, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x13, 0x61, 0x74, 0x70, 0x4f, 0x72, 0x41, 0x74, 0x6f, 0x42, 0x79, 0x70, 0x61, 0x73, + 0x73, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x2e, 0x0a, 0x12, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x54, + 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x75, 0x74, 0x65, 0x64, 0x18, 0x22, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x12, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x54, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x43, 0x75, 0x74, 0x65, 0x64, 0x12, 0x2a, 0x0a, 0x10, 0x6f, 0x62, 0x73, 0x74, 0x61, 0x63, + 0x6c, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x42, 0x74, 0x6e, 0x18, 0x23, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x10, 0x6f, 0x62, 0x73, 0x74, 0x61, 0x63, 0x6c, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x42, + 0x74, 0x6e, 0x12, 0x28, 0x0a, 0x0f, 0x62, 0x72, 0x61, 0x6b, 0x65, 0x48, 0x65, 0x61, 0x76, 0x79, + 0x46, 0x61, 0x75, 0x6c, 0x74, 0x18, 0x25, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x62, 0x72, 0x61, + 0x6b, 0x65, 0x48, 0x65, 0x61, 0x76, 0x79, 0x46, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x24, 0x0a, 0x0d, + 0x6c, 0x65, 0x66, 0x74, 0x44, 0x6f, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x26, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x0d, 0x6c, 0x65, 0x66, 0x74, 0x44, 0x6f, 0x6f, 0x72, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x72, 0x69, 0x67, 0x68, 0x74, 0x44, 0x6f, 0x6f, 0x72, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x18, 0x27, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x72, 0x69, 0x67, 0x68, + 0x74, 0x44, 0x6f, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x77, 0x61, + 0x6b, 0x65, 0x55, 0x70, 0x42, 0x74, 0x6e, 0x18, 0x28, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x77, + 0x61, 0x6b, 0x65, 0x55, 0x70, 0x42, 0x74, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x6f, 0x76, 0x65, 0x72, + 0x68, 0x61, 0x75, 0x6c, 0x42, 0x74, 0x6e, 0x18, 0x29, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x6f, + 0x76, 0x65, 0x72, 0x68, 0x61, 0x75, 0x6c, 0x42, 0x74, 0x6e, 0x12, 0x28, 0x0a, 0x0f, 0x75, 0x6e, + 0x64, 0x65, 0x72, 0x76, 0x6f, 0x6c, 0x74, 0x61, 0x67, 0x65, 0x42, 0x74, 0x6e, 0x18, 0x2a, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x0f, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x76, 0x6f, 0x6c, 0x74, 0x61, 0x67, + 0x65, 0x42, 0x74, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x6c, 0x65, 0x65, 0x70, 0x42, 0x74, 0x6e, + 0x18, 0x2b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x73, 0x6c, 0x65, 0x65, 0x70, 0x42, 0x74, 0x6e, + 0x12, 0x2e, 0x0a, 0x12, 0x65, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x6e, 0x74, 0x48, 0x61, 0x6e, 0x64, + 0x6c, 0x65, 0x44, 0x6f, 0x77, 0x6e, 0x18, 0x2c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x65, 0x6d, + 0x65, 0x72, 0x67, 0x65, 0x6e, 0x74, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x44, 0x6f, 0x77, 0x6e, + 0x12, 0x24, 0x0a, 0x0d, 0x64, 0x6f, 0x6f, 0x72, 0x4c, 0x6f, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x18, 0x2d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x64, 0x6f, 0x6f, 0x72, 0x4c, 0x6f, 0x63, + 0x6b, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x6c, 0x69, 0x66, 0x65, 0x44, 0x6f, + 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x2e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x6c, + 0x69, 0x66, 0x65, 0x44, 0x6f, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x38, 0x0a, 0x17, + 0x74, 0x72, 0x61, 0x69, 0x6e, 0x4c, 0x6f, 0x77, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x52, 0x65, 0x73, + 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x2f, 0x20, 0x01, 0x28, 0x08, 0x52, 0x17, 0x74, + 0x72, 0x61, 0x69, 0x6e, 0x4c, 0x6f, 0x77, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x52, 0x65, 0x73, 0x65, + 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x61, 0x74, 0x70, 0x50, 0x6f, 0x77, + 0x65, 0x72, 0x4f, 0x6e, 0x42, 0x74, 0x6e, 0x18, 0x30, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x61, + 0x74, 0x70, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x4f, 0x6e, 0x42, 0x74, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, + 0x64, 0x6f, 0x6f, 0x72, 0x4d, 0x6f, 0x64, 0x65, 0x41, 0x41, 0x18, 0x31, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x0a, 0x64, 0x6f, 0x6f, 0x72, 0x4d, 0x6f, 0x64, 0x65, 0x41, 0x41, 0x12, 0x1e, 0x0a, 0x0a, + 0x64, 0x6f, 0x6f, 0x72, 0x4d, 0x6f, 0x64, 0x65, 0x41, 0x4d, 0x18, 0x32, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x0a, 0x64, 0x6f, 0x6f, 0x72, 0x4d, 0x6f, 0x64, 0x65, 0x41, 0x4d, 0x12, 0x1e, 0x0a, 0x0a, + 0x64, 0x6f, 0x6f, 0x72, 0x4d, 0x6f, 0x64, 0x65, 0x4d, 0x4d, 0x18, 0x33, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x0a, 0x64, 0x6f, 0x6f, 0x72, 0x4d, 0x6f, 0x64, 0x65, 0x4d, 0x4d, 0x12, 0x28, 0x0a, 0x0f, + 0x74, 0x72, 0x61, 0x69, 0x6e, 0x44, 0x6f, 0x6f, 0x72, 0x4f, 0x75, 0x74, 0x4c, 0x65, 0x64, 0x18, + 0x35, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x44, 0x6f, 0x6f, 0x72, + 0x4f, 0x75, 0x74, 0x4c, 0x65, 0x64, 0x12, 0x28, 0x0a, 0x0f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x41, + 0x74, 0x70, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x18, 0x36, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x0f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x41, 0x74, 0x70, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, + 0x12, 0x28, 0x0a, 0x0f, 0x61, 0x74, 0x6f, 0x42, 0x72, 0x61, 0x6b, 0x65, 0x43, 0x6f, 0x6d, 0x6d, + 0x61, 0x6e, 0x64, 0x18, 0x37, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x61, 0x74, 0x6f, 0x42, 0x72, + 0x61, 0x6b, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x34, 0x0a, 0x15, 0x61, 0x74, + 0x6f, 0x54, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, + 0x4f, 0x75, 0x74, 0x18, 0x38, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x61, 0x74, 0x6f, 0x54, 0x72, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x4f, 0x75, 0x74, + 0x12, 0x2c, 0x0a, 0x11, 0x61, 0x74, 0x6f, 0x4c, 0x61, 0x7a, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x61, + 0x6e, 0x64, 0x4f, 0x75, 0x74, 0x18, 0x39, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x61, 0x74, 0x6f, + 0x4c, 0x61, 0x7a, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x4f, 0x75, 0x74, 0x12, 0x26, + 0x0a, 0x0e, 0x61, 0x74, 0x6f, 0x41, 0x6c, 0x77, 0x61, 0x79, 0x73, 0x42, 0x72, 0x61, 0x6b, 0x65, + 0x18, 0x3b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x61, 0x74, 0x6f, 0x41, 0x6c, 0x77, 0x61, 0x79, + 0x73, 0x42, 0x72, 0x61, 0x6b, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x61, 0x74, 0x6f, 0x4f, 0x70, 0x65, + 0x6e, 0x4c, 0x65, 0x66, 0x74, 0x44, 0x6f, 0x6f, 0x72, 0x18, 0x3c, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x0f, 0x61, 0x74, 0x6f, 0x4f, 0x70, 0x65, 0x6e, 0x4c, 0x65, 0x66, 0x74, 0x44, 0x6f, 0x6f, 0x72, + 0x12, 0x2a, 0x0a, 0x10, 0x61, 0x74, 0x6f, 0x4f, 0x70, 0x65, 0x6e, 0x52, 0x69, 0x67, 0x68, 0x74, + 0x44, 0x6f, 0x6f, 0x72, 0x18, 0x3d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x61, 0x74, 0x6f, 0x4f, + 0x70, 0x65, 0x6e, 0x52, 0x69, 0x67, 0x68, 0x74, 0x44, 0x6f, 0x6f, 0x72, 0x12, 0x2a, 0x0a, 0x10, + 0x61, 0x74, 0x6f, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x4c, 0x65, 0x66, 0x74, 0x44, 0x6f, 0x6f, 0x72, + 0x18, 0x3e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x61, 0x74, 0x6f, 0x43, 0x6c, 0x6f, 0x73, 0x65, + 0x4c, 0x65, 0x66, 0x74, 0x44, 0x6f, 0x6f, 0x72, 0x12, 0x22, 0x0a, 0x0c, 0x6e, 0x6f, 0x53, 0x70, + 0x65, 0x65, 0x64, 0x53, 0x69, 0x67, 0x6c, 0x65, 0x18, 0x3f, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, + 0x6e, 0x6f, 0x53, 0x70, 0x65, 0x65, 0x64, 0x53, 0x69, 0x67, 0x6c, 0x65, 0x12, 0x28, 0x0a, 0x0f, + 0x74, 0x72, 0x61, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x4c, 0x65, 0x64, 0x18, + 0x40, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x72, + 0x74, 0x65, 0x64, 0x4c, 0x65, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x6d, 0x6f, 0x73, 0x74, 0x55, 0x73, + 0x65, 0x42, 0x72, 0x61, 0x6b, 0x65, 0x18, 0x41, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x6d, 0x6f, + 0x73, 0x74, 0x55, 0x73, 0x65, 0x42, 0x72, 0x61, 0x6b, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x73, 0x70, + 0x6c, 0x69, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x18, 0x42, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x0c, 0x73, 0x70, 0x6c, 0x69, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x12, 0x1c, + 0x0a, 0x09, 0x6d, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x18, 0x43, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x09, 0x6d, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x12, 0x2c, 0x0a, 0x11, + 0x74, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, + 0x65, 0x18, 0x44, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x74, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x45, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x62, 0x72, + 0x61, 0x6b, 0x65, 0x45, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x45, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x0e, 0x62, 0x72, 0x61, 0x6b, 0x65, 0x45, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, + 0x76, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x62, 0x72, 0x61, 0x6b, 0x65, 0x51, 0x75, 0x61, 0x72, 0x61, + 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x18, 0x46, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x62, 0x72, 0x61, + 0x6b, 0x65, 0x51, 0x75, 0x61, 0x72, 0x61, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x12, 0x28, 0x0a, 0x0f, + 0x73, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x41, 0x6c, 0x6c, 0x42, 0x72, 0x61, 0x6b, 0x65, 0x18, + 0x47, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x73, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x41, 0x6c, + 0x6c, 0x42, 0x72, 0x61, 0x6b, 0x65, 0x12, 0x30, 0x0a, 0x13, 0x61, 0x74, 0x6f, 0x54, 0x72, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x31, 0x18, 0x48, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x13, 0x61, 0x74, 0x6f, 0x54, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x31, 0x12, 0x30, 0x0a, 0x13, 0x61, 0x74, 0x6f, 0x54, + 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x32, 0x18, + 0x49, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x61, 0x74, 0x6f, 0x54, 0x72, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x32, 0x12, 0x30, 0x0a, 0x13, 0x61, 0x74, + 0x6f, 0x54, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, + 0x33, 0x18, 0x4a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x61, 0x74, 0x6f, 0x54, 0x72, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x33, 0x12, 0x1a, 0x0a, 0x08, + 0x6d, 0x6f, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x4b, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, + 0x6d, 0x6f, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x22, 0x0a, 0x0c, 0x61, 0x74, 0x70, 0x43, + 0x75, 0x74, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x18, 0x4c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, + 0x61, 0x74, 0x70, 0x43, 0x75, 0x74, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x12, 0x40, 0x0a, 0x1b, + 0x6c, 0x69, 0x67, 0x68, 0x74, 0x45, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x42, 0x72, + 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x4d, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x1b, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x45, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x6e, 0x63, + 0x79, 0x42, 0x72, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x3e, + 0x0a, 0x1a, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x54, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, + 0x61, 0x66, 0x65, 0x74, 0x79, 0x43, 0x69, 0x72, 0x63, 0x75, 0x69, 0x74, 0x18, 0x4e, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x1a, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x54, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x53, 0x61, 0x66, 0x65, 0x74, 0x79, 0x43, 0x69, 0x72, 0x63, 0x75, 0x69, 0x74, 0x12, 0x1c, + 0x0a, 0x09, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x44, 0x69, 0x72, 0x31, 0x18, 0x4f, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x09, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x44, 0x69, 0x72, 0x31, 0x12, 0x1c, 0x0a, 0x09, + 0x6c, 0x69, 0x67, 0x68, 0x74, 0x44, 0x69, 0x72, 0x32, 0x18, 0x50, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x09, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x44, 0x69, 0x72, 0x32, 0x12, 0x2c, 0x0a, 0x11, 0x6c, 0x69, + 0x67, 0x68, 0x74, 0x44, 0x72, 0x69, 0x76, 0x65, 0x72, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, + 0x51, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x44, 0x72, 0x69, 0x76, + 0x65, 0x72, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, 0x34, 0x0a, 0x15, 0x74, 0x72, 0x61, 0x69, + 0x6e, 0x43, 0x6f, 0x6e, 0x6e, 0x49, 0x6e, 0x69, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x18, 0x52, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x43, 0x6f, + 0x6e, 0x6e, 0x49, 0x6e, 0x69, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x2c, + 0x0a, 0x11, 0x61, 0x74, 0x6f, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x52, 0x69, 0x67, 0x68, 0x74, 0x44, + 0x6f, 0x6f, 0x72, 0x18, 0x53, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x61, 0x74, 0x6f, 0x43, 0x6c, + 0x6f, 0x73, 0x65, 0x52, 0x69, 0x67, 0x68, 0x74, 0x44, 0x6f, 0x6f, 0x72, 0x12, 0x22, 0x0a, 0x0c, + 0x6c, 0x69, 0x67, 0x68, 0x74, 0x41, 0x74, 0x6f, 0x53, 0x65, 0x6e, 0x64, 0x18, 0x54, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x0c, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x41, 0x74, 0x6f, 0x53, 0x65, 0x6e, 0x64, + 0x12, 0x46, 0x0a, 0x0c, 0x61, 0x74, 0x6f, 0x53, 0x74, 0x65, 0x70, 0x4c, 0x65, 0x76, 0x65, 0x6c, + 0x18, 0x55, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x22, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x54, + 0x72, 0x61, 0x69, 0x6e, 0x56, 0x6f, 0x62, 0x63, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x41, 0x74, + 0x6f, 0x53, 0x74, 0x65, 0x70, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x0c, 0x61, 0x74, 0x6f, 0x53, + 0x74, 0x65, 0x70, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x43, 0x0a, 0x0b, 0x76, 0x6f, 0x62, 0x63, + 0x42, 0x74, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x56, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, + 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x56, 0x6f, 0x62, 0x63, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x2e, 0x56, 0x6f, 0x62, 0x63, 0x42, 0x74, 0x6d, 0x49, 0x6e, 0x66, 0x6f, + 0x52, 0x0b, 0x76, 0x6f, 0x62, 0x63, 0x42, 0x74, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x30, 0x0a, + 0x13, 0x6c, 0x69, 0x6e, 0x65, 0x49, 0x6e, 0x69, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, + 0x6d, 0x70, 0x31, 0x32, 0x18, 0x57, 0x20, 0x01, 0x28, 0x03, 0x52, 0x13, 0x6c, 0x69, 0x6e, 0x65, + 0x49, 0x6e, 0x69, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x6d, 0x70, 0x31, 0x32, 0x12, + 0x24, 0x0a, 0x0d, 0x6c, 0x69, 0x6e, 0x65, 0x31, 0x32, 0x43, 0x6f, 0x6e, 0x6e, 0x45, 0x72, 0x72, + 0x18, 0x58, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x6c, 0x69, 0x6e, 0x65, 0x31, 0x32, 0x43, 0x6f, + 0x6e, 0x6e, 0x45, 0x72, 0x72, 0x1a, 0x5b, 0x0a, 0x0b, 0x56, 0x6f, 0x62, 0x63, 0x42, 0x74, 0x6d, + 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x14, 0x0a, 0x05, 0x62, 0x74, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x74, 0x6d, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x76, 0x6f, + 0x62, 0x63, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x76, 0x6f, 0x62, 0x63, + 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x76, 0x6f, 0x62, 0x63, 0x4c, 0x69, 0x66, 0x65, 0x49, 0x64, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x76, 0x6f, 0x62, 0x63, 0x4c, 0x69, 0x66, 0x65, + 0x49, 0x64, 0x22, 0xc1, 0x01, 0x0a, 0x0c, 0x41, 0x74, 0x6f, 0x53, 0x74, 0x65, 0x70, 0x4c, 0x65, + 0x76, 0x65, 0x6c, 0x12, 0x17, 0x0a, 0x13, 0x41, 0x54, 0x4f, 0x5f, 0x53, 0x54, 0x45, 0x50, 0x5f, + 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x14, 0x0a, 0x10, + 0x41, 0x54, 0x4f, 0x5f, 0x53, 0x54, 0x45, 0x50, 0x5f, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x31, + 0x10, 0x01, 0x12, 0x14, 0x0a, 0x10, 0x41, 0x54, 0x4f, 0x5f, 0x53, 0x54, 0x45, 0x50, 0x5f, 0x4c, + 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x32, 0x10, 0x02, 0x12, 0x14, 0x0a, 0x10, 0x41, 0x54, 0x4f, 0x5f, + 0x53, 0x54, 0x45, 0x50, 0x5f, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x33, 0x10, 0x03, 0x12, 0x14, + 0x0a, 0x10, 0x41, 0x54, 0x4f, 0x5f, 0x53, 0x54, 0x45, 0x50, 0x5f, 0x4c, 0x45, 0x56, 0x45, 0x4c, + 0x5f, 0x34, 0x10, 0x04, 0x12, 0x14, 0x0a, 0x10, 0x41, 0x54, 0x4f, 0x5f, 0x53, 0x54, 0x45, 0x50, + 0x5f, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x35, 0x10, 0x05, 0x12, 0x14, 0x0a, 0x10, 0x41, 0x54, + 0x4f, 0x5f, 0x53, 0x54, 0x45, 0x50, 0x5f, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x36, 0x10, 0x06, + 0x12, 0x14, 0x0a, 0x10, 0x41, 0x54, 0x4f, 0x5f, 0x53, 0x54, 0x45, 0x50, 0x5f, 0x4c, 0x45, 0x56, + 0x45, 0x4c, 0x5f, 0x37, 0x10, 0x07, 0x22, 0x8d, 0x15, 0x0a, 0x0d, 0x54, 0x72, 0x61, 0x69, 0x6e, + 0x4d, 0x61, 0x70, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x75, 0x70, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x02, 0x75, 0x70, 0x12, 0x22, 0x0a, 0x0c, 0x69, 0x6e, 0x69, 0x74, + 0x69, 0x61, 0x6c, 0x53, 0x70, 0x65, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0c, + 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x70, 0x65, 0x65, 0x64, 0x12, 0x20, 0x0a, 0x0b, + 0x74, 0x72, 0x61, 0x69, 0x6e, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x0b, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x12, + 0x0a, 0x04, 0x73, 0x68, 0x6f, 0x77, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x73, 0x68, + 0x6f, 0x77, 0x12, 0x22, 0x0a, 0x0c, 0x68, 0x65, 0x61, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, + 0x49, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x68, 0x65, 0x61, 0x64, 0x44, 0x65, + 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x68, 0x65, 0x61, 0x64, 0x4f, 0x66, + 0x66, 0x73, 0x65, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x68, 0x65, 0x61, 0x64, + 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, + 0x50, 0x6f, 0x72, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x65, 0x76, 0x69, + 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x64, 0x72, 0x69, 0x66, 0x74, 0x54, + 0x6f, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x64, 0x72, 0x69, 0x66, 0x74, 0x54, 0x6f, + 0x12, 0x1e, 0x0a, 0x0a, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x52, 0x75, 0x6e, 0x55, 0x70, 0x18, 0x0a, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x52, 0x75, 0x6e, 0x55, 0x70, + 0x12, 0x32, 0x0a, 0x14, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x44, + 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x14, + 0x74, 0x72, 0x61, 0x69, 0x6e, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x44, 0x69, 0x72, 0x65, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x0a, 0x0e, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x4b, 0x69, 0x6c, + 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x74, 0x72, + 0x61, 0x69, 0x6e, 0x4b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x12, 0x2a, 0x0a, 0x10, + 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x54, 0x69, 0x6d, 0x65, + 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x44, + 0x65, 0x6c, 0x61, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x77, 0x68, 0x65, 0x65, + 0x6c, 0x44, 0x69, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x0d, 0x77, 0x68, 0x65, 0x65, 0x6c, 0x44, 0x69, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x12, 0x2a, + 0x0a, 0x10, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, + 0x61, 0x74, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, + 0x63, 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x68, 0x65, + 0x61, 0x64, 0x4c, 0x69, 0x6e, 0x6b, 0x49, 0x64, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, + 0x68, 0x65, 0x61, 0x64, 0x4c, 0x69, 0x6e, 0x6b, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0e, 0x68, 0x65, + 0x61, 0x64, 0x4c, 0x69, 0x6e, 0x6b, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x11, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x0e, 0x68, 0x65, 0x61, 0x64, 0x4c, 0x69, 0x6e, 0x6b, 0x4f, 0x66, 0x66, 0x73, + 0x65, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x74, 0x61, 0x69, 0x6c, 0x4c, 0x69, 0x6e, 0x6b, 0x49, 0x64, + 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x74, 0x61, 0x69, 0x6c, 0x4c, 0x69, 0x6e, 0x6b, + 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0e, 0x74, 0x61, 0x69, 0x6c, 0x4c, 0x69, 0x6e, 0x6b, 0x4f, 0x66, + 0x66, 0x73, 0x65, 0x74, 0x18, 0x13, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x74, 0x61, 0x69, 0x6c, + 0x4c, 0x69, 0x6e, 0x6b, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x2c, 0x0a, 0x11, 0x6f, 0x63, + 0x63, 0x75, 0x70, 0x69, 0x65, 0x64, 0x4c, 0x69, 0x6e, 0x6b, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x18, + 0x14, 0x20, 0x03, 0x28, 0x09, 0x52, 0x11, 0x6f, 0x63, 0x63, 0x75, 0x70, 0x69, 0x65, 0x64, 0x4c, + 0x69, 0x6e, 0x6b, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x6c, 0x6f, 0x70, + 0x65, 0x18, 0x15, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x73, 0x6c, 0x6f, 0x70, 0x65, 0x12, 0x18, + 0x0a, 0x07, 0x75, 0x70, 0x73, 0x6c, 0x6f, 0x70, 0x65, 0x18, 0x16, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x07, 0x75, 0x70, 0x73, 0x6c, 0x6f, 0x70, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x75, 0x6e, 0x6e, + 0x69, 0x6e, 0x67, 0x55, 0x70, 0x18, 0x17, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x72, 0x75, 0x6e, + 0x6e, 0x69, 0x6e, 0x67, 0x55, 0x70, 0x12, 0x32, 0x0a, 0x14, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, + 0x67, 0x52, 0x65, 0x73, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x75, 0x6d, 0x18, 0x18, + 0x20, 0x01, 0x28, 0x02, 0x52, 0x14, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, + 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x75, 0x6d, 0x12, 0x24, 0x0a, 0x0d, 0x61, 0x69, + 0x72, 0x52, 0x65, 0x73, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x19, 0x20, 0x01, 0x28, + 0x02, 0x52, 0x0d, 0x61, 0x69, 0x72, 0x52, 0x65, 0x73, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, + 0x12, 0x26, 0x0a, 0x0e, 0x72, 0x61, 0x6d, 0x70, 0x52, 0x65, 0x73, 0x69, 0x73, 0x74, 0x61, 0x6e, + 0x63, 0x65, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0e, 0x72, 0x61, 0x6d, 0x70, 0x52, 0x65, + 0x73, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x63, 0x75, 0x72, 0x76, + 0x65, 0x52, 0x65, 0x73, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x1b, 0x20, 0x01, 0x28, + 0x02, 0x52, 0x0f, 0x63, 0x75, 0x72, 0x76, 0x65, 0x52, 0x65, 0x73, 0x69, 0x73, 0x74, 0x61, 0x6e, + 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x70, 0x65, 0x65, 0x64, 0x18, 0x1c, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x05, 0x73, 0x70, 0x65, 0x65, 0x64, 0x12, 0x2a, 0x0a, 0x10, 0x68, 0x65, 0x61, 0x64, + 0x53, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x53, 0x70, 0x65, 0x65, 0x64, 0x31, 0x18, 0x1d, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x10, 0x68, 0x65, 0x61, 0x64, 0x53, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x53, 0x70, + 0x65, 0x65, 0x64, 0x31, 0x12, 0x2a, 0x0a, 0x10, 0x68, 0x65, 0x61, 0x64, 0x53, 0x65, 0x6e, 0x73, + 0x6f, 0x72, 0x53, 0x70, 0x65, 0x65, 0x64, 0x32, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, + 0x68, 0x65, 0x61, 0x64, 0x53, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x53, 0x70, 0x65, 0x65, 0x64, 0x32, + 0x12, 0x2a, 0x0a, 0x10, 0x74, 0x61, 0x69, 0x6c, 0x53, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x53, 0x70, + 0x65, 0x65, 0x64, 0x31, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x74, 0x61, 0x69, 0x6c, + 0x53, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x53, 0x70, 0x65, 0x65, 0x64, 0x31, 0x12, 0x2a, 0x0a, 0x10, + 0x74, 0x61, 0x69, 0x6c, 0x53, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x53, 0x70, 0x65, 0x65, 0x64, 0x32, + 0x18, 0x20, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x74, 0x61, 0x69, 0x6c, 0x53, 0x65, 0x6e, 0x73, + 0x6f, 0x72, 0x53, 0x70, 0x65, 0x65, 0x64, 0x32, 0x12, 0x26, 0x0a, 0x0e, 0x68, 0x65, 0x61, 0x64, + 0x52, 0x61, 0x64, 0x61, 0x72, 0x53, 0x70, 0x65, 0x65, 0x64, 0x18, 0x21, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x0e, 0x68, 0x65, 0x61, 0x64, 0x52, 0x61, 0x64, 0x61, 0x72, 0x53, 0x70, 0x65, 0x65, 0x64, + 0x12, 0x26, 0x0a, 0x0e, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x61, 0x64, 0x61, 0x72, 0x53, 0x70, 0x65, + 0x65, 0x64, 0x18, 0x22, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x61, + 0x64, 0x61, 0x72, 0x53, 0x70, 0x65, 0x65, 0x64, 0x12, 0x30, 0x0a, 0x13, 0x64, 0x79, 0x6e, 0x61, + 0x6d, 0x69, 0x63, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x72, 0x75, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x23, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x49, 0x6e, + 0x74, 0x65, 0x72, 0x72, 0x75, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x22, 0x0a, 0x0c, 0x61, 0x63, + 0x63, 0x65, 0x6c, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x24, 0x20, 0x01, 0x28, 0x02, + 0x52, 0x0c, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, + 0x0a, 0x0e, 0x76, 0x6f, 0x62, 0x63, 0x4c, 0x69, 0x66, 0x65, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, + 0x18, 0x25, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x76, 0x6f, 0x62, 0x63, 0x4c, 0x69, 0x66, 0x65, + 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x63, 0x31, 0x41, 0x63, 0x74, + 0x69, 0x76, 0x65, 0x18, 0x26, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x74, 0x63, 0x31, 0x41, 0x63, + 0x74, 0x69, 0x76, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x63, 0x32, 0x41, 0x63, 0x74, 0x69, 0x76, + 0x65, 0x18, 0x27, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x74, 0x63, 0x32, 0x41, 0x63, 0x74, 0x69, + 0x76, 0x65, 0x12, 0x2a, 0x0a, 0x10, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x46, + 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x18, 0x28, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x64, 0x69, + 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x12, 0x2c, + 0x0a, 0x11, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x61, 0x63, 0x6b, 0x77, + 0x61, 0x72, 0x64, 0x18, 0x29, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x64, 0x69, 0x72, 0x65, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x61, 0x63, 0x6b, 0x77, 0x61, 0x72, 0x64, 0x12, 0x26, 0x0a, 0x0e, + 0x74, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x2a, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x62, 0x72, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x2b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x62, 0x72, 0x61, + 0x6b, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x36, 0x0a, 0x16, 0x65, 0x6d, + 0x65, 0x72, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x42, 0x72, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x18, 0x2c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x16, 0x65, 0x6d, 0x65, 0x72, + 0x67, 0x65, 0x6e, 0x63, 0x79, 0x42, 0x72, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x74, 0x75, 0x72, 0x6e, 0x62, 0x61, 0x63, 0x6b, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x18, 0x2d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x74, 0x75, 0x72, 0x6e, + 0x62, 0x61, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x6a, 0x75, + 0x6d, 0x70, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x2e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, + 0x6a, 0x75, 0x6d, 0x70, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x74, + 0x6f, 0x18, 0x2f, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x74, 0x6f, 0x12, 0x10, 0x0a, 0x03, + 0x66, 0x61, 0x6d, 0x18, 0x30, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x66, 0x61, 0x6d, 0x12, 0x10, + 0x0a, 0x03, 0x63, 0x61, 0x6d, 0x18, 0x31, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x63, 0x61, 0x6d, + 0x12, 0x34, 0x0a, 0x15, 0x74, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x61, 0x66, 0x65, + 0x74, 0x79, 0x43, 0x69, 0x72, 0x63, 0x75, 0x69, 0x74, 0x18, 0x32, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x15, 0x74, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x61, 0x66, 0x65, 0x74, 0x79, 0x43, + 0x69, 0x72, 0x63, 0x75, 0x69, 0x74, 0x12, 0x2e, 0x0a, 0x12, 0x70, 0x61, 0x72, 0x6b, 0x69, 0x6e, + 0x67, 0x42, 0x72, 0x61, 0x6b, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x33, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x12, 0x70, 0x61, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x42, 0x72, 0x61, 0x6b, 0x65, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x30, 0x0a, 0x13, 0x6d, 0x61, 0x69, 0x6e, 0x74, 0x61, + 0x69, 0x6e, 0x42, 0x72, 0x61, 0x6b, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x34, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x13, 0x6d, 0x61, 0x69, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x42, 0x72, 0x61, + 0x6b, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x74, 0x72, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x35, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x0d, 0x74, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x12, 0x1e, + 0x0a, 0x0a, 0x62, 0x72, 0x61, 0x6b, 0x65, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x36, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x0a, 0x62, 0x72, 0x61, 0x6b, 0x65, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x12, 0x1c, + 0x0a, 0x09, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x4c, 0x6f, 0x61, 0x64, 0x18, 0x37, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x09, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x4c, 0x6f, 0x61, 0x64, 0x12, 0x30, 0x0a, 0x13, + 0x6c, 0x65, 0x66, 0x74, 0x44, 0x6f, 0x6f, 0x72, 0x4f, 0x70, 0x65, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, + 0x61, 0x6e, 0x64, 0x18, 0x38, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x6c, 0x65, 0x66, 0x74, 0x44, + 0x6f, 0x6f, 0x72, 0x4f, 0x70, 0x65, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x32, + 0x0a, 0x14, 0x72, 0x69, 0x67, 0x68, 0x74, 0x44, 0x6f, 0x6f, 0x72, 0x4f, 0x70, 0x65, 0x6e, 0x43, + 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x39, 0x20, 0x01, 0x28, 0x08, 0x52, 0x14, 0x72, 0x69, + 0x67, 0x68, 0x74, 0x44, 0x6f, 0x6f, 0x72, 0x4f, 0x70, 0x65, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, + 0x6e, 0x64, 0x12, 0x32, 0x0a, 0x14, 0x6c, 0x65, 0x66, 0x74, 0x44, 0x6f, 0x6f, 0x72, 0x43, 0x6c, + 0x6f, 0x73, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x3a, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x14, 0x6c, 0x65, 0x66, 0x74, 0x44, 0x6f, 0x6f, 0x72, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x43, + 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x34, 0x0a, 0x15, 0x72, 0x69, 0x67, 0x68, 0x74, 0x44, + 0x6f, 0x6f, 0x72, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, + 0x3b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x72, 0x69, 0x67, 0x68, 0x74, 0x44, 0x6f, 0x6f, 0x72, + 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x22, 0x0a, 0x0c, + 0x61, 0x6c, 0x6c, 0x44, 0x6f, 0x6f, 0x72, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x18, 0x3c, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x0c, 0x61, 0x6c, 0x6c, 0x44, 0x6f, 0x6f, 0x72, 0x43, 0x6c, 0x6f, 0x73, 0x65, + 0x12, 0x2a, 0x0a, 0x10, 0x76, 0x6f, 0x62, 0x63, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x72, 0x75, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x3d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x76, 0x6f, 0x62, 0x63, + 0x49, 0x6e, 0x74, 0x65, 0x72, 0x72, 0x75, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4d, 0x0a, 0x12, + 0x74, 0x72, 0x61, 0x69, 0x6e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x18, 0x3e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, + 0x2e, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x4d, 0x71, 0x74, 0x74, 0x52, 0x12, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x44, 0x79, + 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x39, 0x0a, 0x0a, 0x74, + 0x72, 0x61, 0x69, 0x6e, 0x45, 0x6e, 0x64, 0x73, 0x41, 0x18, 0x3f, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x19, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x45, 0x6e, 0x64, + 0x73, 0x53, 0x74, 0x61, 0x74, 0x65, 0x4d, 0x71, 0x74, 0x74, 0x52, 0x0a, 0x74, 0x72, 0x61, 0x69, + 0x6e, 0x45, 0x6e, 0x64, 0x73, 0x41, 0x12, 0x39, 0x0a, 0x0a, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x45, + 0x6e, 0x64, 0x73, 0x42, 0x18, 0x40, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x73, 0x74, 0x61, + 0x74, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x45, 0x6e, 0x64, 0x73, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x4d, 0x71, 0x74, 0x74, 0x52, 0x0a, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x45, 0x6e, 0x64, 0x73, + 0x42, 0x12, 0x22, 0x0a, 0x0c, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, + 0x74, 0x18, 0x41, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0c, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x63, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x74, 0x61, 0x69, 0x6c, 0x44, 0x65, 0x76, + 0x69, 0x63, 0x65, 0x49, 0x64, 0x18, 0x42, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x74, 0x61, 0x69, + 0x6c, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x74, 0x61, 0x69, + 0x6c, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x43, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x74, + 0x61, 0x69, 0x6c, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x26, 0x0a, 0x0e, 0x74, 0x61, 0x69, + 0x6c, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x18, 0x44, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0e, 0x74, 0x61, 0x69, 0x6c, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, + 0x74, 0x12, 0x33, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x45, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x72, 0x61, + 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x09, 0x63, 0x6f, 0x6e, + 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x22, 0xfc, 0x02, 0x0a, 0x08, 0x42, 0x54, 0x4d, 0x53, 0x74, + 0x61, 0x74, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x74, 0x65, 0x6c, 0x65, 0x67, 0x72, 0x61, 0x6d, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x65, 0x6c, 0x65, 0x67, 0x72, 0x61, 0x6d, 0x12, + 0x20, 0x0a, 0x0b, 0x61, 0x62, 0x6f, 0x76, 0x65, 0x42, 0x61, 0x6c, 0x69, 0x73, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x61, 0x62, 0x6f, 0x76, 0x65, 0x42, 0x61, 0x6c, 0x69, 0x73, + 0x65, 0x12, 0x42, 0x0a, 0x1c, 0x62, 0x61, 0x6c, 0x69, 0x73, 0x65, 0x54, 0x65, 0x6c, 0x65, 0x67, + 0x72, 0x61, 0x6d, 0x46, 0x6f, 0x72, 0x50, 0x63, 0x53, 0x69, 0x6d, 0x52, 0x65, 0x73, 0x65, 0x6e, + 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x1c, 0x62, 0x61, 0x6c, 0x69, 0x73, 0x65, 0x54, + 0x65, 0x6c, 0x65, 0x67, 0x72, 0x61, 0x6d, 0x46, 0x6f, 0x72, 0x50, 0x63, 0x53, 0x69, 0x6d, 0x52, + 0x65, 0x73, 0x65, 0x6e, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x74, 0x65, 0x6c, 0x65, 0x67, 0x72, 0x61, + 0x6d, 0x31, 0x32, 0x38, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x74, 0x65, 0x6c, 0x65, + 0x67, 0x72, 0x61, 0x6d, 0x31, 0x32, 0x38, 0x12, 0x1a, 0x0a, 0x08, 0x62, 0x61, 0x6c, 0x69, 0x73, + 0x65, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x62, 0x61, 0x6c, 0x69, 0x73, + 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x73, 0x53, 0x65, 0x6e, 0x64, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x06, 0x69, 0x73, 0x53, 0x65, 0x6e, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x75, + 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x75, 0x6e, 0x70, + 0x61, 0x63, 0x6b, 0x12, 0x1e, 0x0a, 0x0a, 0x62, 0x61, 0x6c, 0x69, 0x73, 0x65, 0x54, 0x79, 0x70, + 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x62, 0x61, 0x6c, 0x69, 0x73, 0x65, 0x54, + 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x68, 0x61, 0x73, 0x44, 0x61, 0x74, 0x61, 0x18, 0x09, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x68, 0x61, 0x73, 0x44, 0x61, 0x74, 0x61, 0x12, 0x20, 0x0a, + 0x0b, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0a, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x0b, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, + 0x24, 0x0a, 0x0d, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x53, 0x4e, + 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x44, + 0x61, 0x74, 0x61, 0x53, 0x4e, 0x22, 0xe4, 0x04, 0x0a, 0x16, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x44, + 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4d, 0x71, 0x74, 0x74, + 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x61, 0x76, 0x69, 0x73, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x41, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x61, 0x76, 0x69, 0x73, 0x50, 0x61, 0x72, 0x61, + 0x6d, 0x41, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x61, 0x76, 0x69, 0x73, 0x50, 0x61, 0x72, 0x61, 0x6d, + 0x42, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x61, 0x76, 0x69, 0x73, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x42, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x61, 0x76, 0x69, 0x73, 0x50, 0x61, 0x72, + 0x61, 0x6d, 0x43, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x61, 0x76, 0x69, 0x73, + 0x50, 0x61, 0x72, 0x61, 0x6d, 0x43, 0x12, 0x36, 0x0a, 0x16, 0x63, 0x75, 0x72, 0x76, 0x65, 0x52, + 0x65, 0x73, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x52, 0x31, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x16, 0x63, 0x75, 0x72, 0x76, 0x65, 0x52, 0x65, 0x73, + 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x52, 0x31, 0x12, 0x36, + 0x0a, 0x16, 0x63, 0x75, 0x72, 0x76, 0x65, 0x52, 0x65, 0x73, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, + 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x52, 0x32, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x16, 0x63, 0x75, 0x72, 0x76, 0x65, 0x52, 0x65, 0x73, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x50, - 0x61, 0x72, 0x61, 0x6d, 0x52, 0x31, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x16, 0x63, 0x75, - 0x72, 0x76, 0x65, 0x52, 0x65, 0x73, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x61, 0x72, - 0x61, 0x6d, 0x52, 0x31, 0x12, 0x36, 0x0a, 0x16, 0x63, 0x75, 0x72, 0x76, 0x65, 0x52, 0x65, 0x73, - 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x52, 0x32, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x16, 0x63, 0x75, 0x72, 0x76, 0x65, 0x52, 0x65, 0x73, 0x69, 0x73, - 0x74, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x52, 0x32, 0x12, 0x36, 0x0a, 0x16, + 0x61, 0x72, 0x61, 0x6d, 0x52, 0x32, 0x12, 0x36, 0x0a, 0x16, 0x63, 0x75, 0x72, 0x76, 0x65, 0x52, + 0x65, 0x73, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x52, 0x33, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x16, 0x63, 0x75, 0x72, 0x76, 0x65, 0x52, 0x65, 0x73, + 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x52, 0x33, 0x12, 0x36, + 0x0a, 0x16, 0x63, 0x75, 0x72, 0x76, 0x65, 0x52, 0x65, 0x73, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, + 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x52, 0x34, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x16, 0x63, 0x75, 0x72, 0x76, 0x65, 0x52, 0x65, 0x73, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x50, - 0x61, 0x72, 0x61, 0x6d, 0x52, 0x33, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x16, 0x63, 0x75, - 0x72, 0x76, 0x65, 0x52, 0x65, 0x73, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x61, 0x72, - 0x61, 0x6d, 0x52, 0x33, 0x12, 0x36, 0x0a, 0x16, 0x63, 0x75, 0x72, 0x76, 0x65, 0x52, 0x65, 0x73, - 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x52, 0x34, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x16, 0x63, 0x75, 0x72, 0x76, 0x65, 0x52, 0x65, 0x73, 0x69, 0x73, - 0x74, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x52, 0x34, 0x12, 0x2e, 0x0a, 0x12, - 0x72, 0x65, 0x76, 0x6f, 0x6c, 0x76, 0x69, 0x6e, 0x67, 0x4d, 0x61, 0x73, 0x73, 0x50, 0x61, 0x72, - 0x61, 0x6d, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x72, 0x65, 0x76, 0x6f, 0x6c, 0x76, - 0x69, 0x6e, 0x67, 0x4d, 0x61, 0x73, 0x73, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x12, 0x12, 0x0a, 0x04, - 0x6a, 0x75, 0x6d, 0x70, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x6a, 0x75, 0x6d, 0x70, - 0x12, 0x14, 0x0a, 0x05, 0x73, 0x6c, 0x69, 0x70, 0x41, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x73, 0x6c, 0x69, 0x70, 0x41, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x6c, 0x69, 0x70, 0x52, 0x18, - 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x6c, 0x69, 0x70, 0x52, 0x12, 0x14, 0x0a, 0x05, - 0x73, 0x6c, 0x69, 0x70, 0x44, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x73, 0x6c, 0x69, - 0x70, 0x44, 0x12, 0x18, 0x0a, 0x07, 0x69, 0x64, 0x6c, 0x69, 0x6e, 0x67, 0x41, 0x18, 0x0e, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x69, 0x64, 0x6c, 0x69, 0x6e, 0x67, 0x41, 0x12, 0x18, 0x0a, 0x07, - 0x69, 0x64, 0x6c, 0x69, 0x6e, 0x67, 0x52, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x69, - 0x64, 0x6c, 0x69, 0x6e, 0x67, 0x52, 0x12, 0x18, 0x0a, 0x07, 0x69, 0x64, 0x6c, 0x69, 0x6e, 0x67, - 0x44, 0x18, 0x10, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x69, 0x64, 0x6c, 0x69, 0x6e, 0x67, 0x44, - 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x74, 0x6f, 0x70, 0x53, 0x69, 0x67, 0x6e, 0x18, 0x11, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x08, 0x73, 0x74, 0x6f, 0x70, 0x53, 0x69, 0x67, 0x6e, 0x12, 0x14, 0x0a, 0x05, - 0x73, 0x6c, 0x69, 0x64, 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x6c, 0x69, - 0x64, 0x65, 0x22, 0xa8, 0x03, 0x0a, 0x12, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x45, 0x6e, 0x64, 0x73, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x4d, 0x71, 0x74, 0x74, 0x12, 0x2e, 0x0a, 0x12, 0x73, 0x70, 0x65, - 0x65, 0x64, 0x53, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x73, 0x70, 0x65, 0x65, 0x64, 0x53, 0x65, 0x6e, 0x73, - 0x6f, 0x72, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x12, 0x2e, 0x0a, 0x12, 0x73, 0x70, 0x65, - 0x65, 0x64, 0x53, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x42, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x73, 0x70, 0x65, 0x65, 0x64, 0x53, 0x65, 0x6e, 0x73, - 0x6f, 0x72, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x42, 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x61, 0x64, - 0x61, 0x72, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, - 0x72, 0x61, 0x64, 0x61, 0x72, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x30, 0x0a, 0x13, 0x72, - 0x61, 0x64, 0x61, 0x72, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x70, 0x65, 0x65, 0x64, 0x44, 0x69, - 0x66, 0x66, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x72, 0x61, 0x64, 0x61, 0x72, 0x43, - 0x68, 0x65, 0x63, 0x6b, 0x53, 0x70, 0x65, 0x65, 0x64, 0x44, 0x69, 0x66, 0x66, 0x12, 0x26, 0x0a, - 0x0e, 0x72, 0x61, 0x64, 0x61, 0x72, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x54, 0x69, 0x6d, 0x65, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x72, 0x61, 0x64, 0x61, 0x72, 0x43, 0x68, 0x65, 0x63, - 0x6b, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x63, 0x63, 0x45, 0x6e, 0x61, 0x62, - 0x6c, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x61, 0x63, 0x63, 0x45, 0x6e, 0x61, - 0x62, 0x6c, 0x65, 0x12, 0x2c, 0x0a, 0x11, 0x61, 0x63, 0x63, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, - 0x70, 0x65, 0x65, 0x64, 0x44, 0x69, 0x66, 0x66, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, - 0x61, 0x63, 0x63, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x70, 0x65, 0x65, 0x64, 0x44, 0x69, 0x66, - 0x66, 0x12, 0x22, 0x0a, 0x0c, 0x61, 0x63, 0x63, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x54, 0x69, 0x6d, - 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x61, 0x63, 0x63, 0x43, 0x68, 0x65, 0x63, - 0x6b, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x63, 0x63, 0x4f, 0x75, 0x74, 0x53, - 0x70, 0x65, 0x65, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x61, 0x63, 0x63, 0x4f, - 0x75, 0x74, 0x53, 0x70, 0x65, 0x65, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x72, 0x61, 0x64, 0x61, 0x72, - 0x4f, 0x75, 0x74, 0x53, 0x70, 0x65, 0x65, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, - 0x72, 0x61, 0x64, 0x61, 0x72, 0x4f, 0x75, 0x74, 0x53, 0x70, 0x65, 0x65, 0x64, 0x22, 0x56, 0x0a, - 0x0a, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x78, - 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x02, 0x78, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x63, - 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, - 0x14, 0x0a, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, - 0x66, 0x6f, 0x72, 0x63, 0x65, 0x22, 0x49, 0x0a, 0x0b, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x6f, 0x77, 0x6e, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x04, 0x64, 0x6f, 0x77, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, - 0x76, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, - 0x22, 0x34, 0x0a, 0x0a, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0e, + 0x61, 0x72, 0x61, 0x6d, 0x52, 0x34, 0x12, 0x2e, 0x0a, 0x12, 0x72, 0x65, 0x76, 0x6f, 0x6c, 0x76, + 0x69, 0x6e, 0x67, 0x4d, 0x61, 0x73, 0x73, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x12, 0x72, 0x65, 0x76, 0x6f, 0x6c, 0x76, 0x69, 0x6e, 0x67, 0x4d, 0x61, 0x73, + 0x73, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x6a, 0x75, 0x6d, 0x70, 0x18, 0x09, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x6a, 0x75, 0x6d, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x6c, + 0x69, 0x70, 0x41, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x6c, 0x69, 0x70, 0x41, + 0x12, 0x14, 0x0a, 0x05, 0x73, 0x6c, 0x69, 0x70, 0x52, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x73, 0x6c, 0x69, 0x70, 0x52, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x6c, 0x69, 0x70, 0x44, 0x18, + 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x73, 0x6c, 0x69, 0x70, 0x44, 0x12, 0x18, 0x0a, 0x07, + 0x69, 0x64, 0x6c, 0x69, 0x6e, 0x67, 0x41, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x69, + 0x64, 0x6c, 0x69, 0x6e, 0x67, 0x41, 0x12, 0x18, 0x0a, 0x07, 0x69, 0x64, 0x6c, 0x69, 0x6e, 0x67, + 0x52, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x69, 0x64, 0x6c, 0x69, 0x6e, 0x67, 0x52, + 0x12, 0x18, 0x0a, 0x07, 0x69, 0x64, 0x6c, 0x69, 0x6e, 0x67, 0x44, 0x18, 0x10, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x07, 0x69, 0x64, 0x6c, 0x69, 0x6e, 0x67, 0x44, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x74, + 0x6f, 0x70, 0x53, 0x69, 0x67, 0x6e, 0x18, 0x11, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x73, 0x74, + 0x6f, 0x70, 0x53, 0x69, 0x67, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x6c, 0x69, 0x64, 0x65, 0x18, + 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x6c, 0x69, 0x64, 0x65, 0x22, 0xa8, 0x03, 0x0a, + 0x12, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x45, 0x6e, 0x64, 0x73, 0x53, 0x74, 0x61, 0x74, 0x65, 0x4d, + 0x71, 0x74, 0x74, 0x12, 0x2e, 0x0a, 0x12, 0x73, 0x70, 0x65, 0x65, 0x64, 0x53, 0x65, 0x6e, 0x73, + 0x6f, 0x72, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x12, 0x73, 0x70, 0x65, 0x65, 0x64, 0x53, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x45, 0x6e, 0x61, 0x62, + 0x6c, 0x65, 0x41, 0x12, 0x2e, 0x0a, 0x12, 0x73, 0x70, 0x65, 0x65, 0x64, 0x53, 0x65, 0x6e, 0x73, + 0x6f, 0x72, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x42, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x12, 0x73, 0x70, 0x65, 0x65, 0x64, 0x53, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x45, 0x6e, 0x61, 0x62, + 0x6c, 0x65, 0x42, 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x61, 0x64, 0x61, 0x72, 0x45, 0x6e, 0x61, 0x62, + 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x72, 0x61, 0x64, 0x61, 0x72, 0x45, + 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x30, 0x0a, 0x13, 0x72, 0x61, 0x64, 0x61, 0x72, 0x43, 0x68, + 0x65, 0x63, 0x6b, 0x53, 0x70, 0x65, 0x65, 0x64, 0x44, 0x69, 0x66, 0x66, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x13, 0x72, 0x61, 0x64, 0x61, 0x72, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x70, + 0x65, 0x65, 0x64, 0x44, 0x69, 0x66, 0x66, 0x12, 0x26, 0x0a, 0x0e, 0x72, 0x61, 0x64, 0x61, 0x72, + 0x43, 0x68, 0x65, 0x63, 0x6b, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x0e, 0x72, 0x61, 0x64, 0x61, 0x72, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x54, 0x69, 0x6d, 0x65, 0x12, + 0x1c, 0x0a, 0x09, 0x61, 0x63, 0x63, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x09, 0x61, 0x63, 0x63, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x2c, 0x0a, + 0x11, 0x61, 0x63, 0x63, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x70, 0x65, 0x65, 0x64, 0x44, 0x69, + 0x66, 0x66, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x61, 0x63, 0x63, 0x43, 0x68, 0x65, + 0x63, 0x6b, 0x53, 0x70, 0x65, 0x65, 0x64, 0x44, 0x69, 0x66, 0x66, 0x12, 0x22, 0x0a, 0x0c, 0x61, + 0x63, 0x63, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x0c, 0x61, 0x63, 0x63, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x54, 0x69, 0x6d, 0x65, 0x12, + 0x20, 0x0a, 0x0b, 0x61, 0x63, 0x63, 0x4f, 0x75, 0x74, 0x53, 0x70, 0x65, 0x65, 0x64, 0x18, 0x09, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x61, 0x63, 0x63, 0x4f, 0x75, 0x74, 0x53, 0x70, 0x65, 0x65, + 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x72, 0x61, 0x64, 0x61, 0x72, 0x4f, 0x75, 0x74, 0x53, 0x70, 0x65, + 0x65, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x72, 0x61, 0x64, 0x61, 0x72, 0x4f, + 0x75, 0x74, 0x53, 0x70, 0x65, 0x65, 0x64, 0x22, 0x56, 0x0a, 0x0a, 0x52, 0x65, 0x70, 0x6c, 0x79, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x78, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x02, 0x78, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6f, 0x72, + 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x22, + 0x49, 0x0a, 0x0b, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0e, + 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, + 0x0a, 0x04, 0x64, 0x6f, 0x77, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x64, 0x6f, + 0x77, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x22, 0x34, 0x0a, 0x0a, 0x41, 0x6c, + 0x61, 0x72, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, + 0x76, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, + 0x22, 0x34, 0x0a, 0x0a, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, - 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x22, 0x34, 0x0a, 0x0a, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x22, 0x96, 0x01, 0x0a, - 0x08, 0x50, 0x73, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x2d, 0x0a, 0x09, 0x61, 0x73, 0x64, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x73, - 0x74, 0x61, 0x74, 0x65, 0x2e, 0x41, 0x73, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x09, 0x61, - 0x73, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x67, 0x6a, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x6d, 0x67, 0x6a, 0x12, 0x27, 0x0a, 0x05, 0x70, 0x61, - 0x72, 0x61, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x72, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x2e, 0x50, 0x73, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x52, 0x05, 0x70, 0x61, - 0x72, 0x61, 0x6d, 0x12, 0x10, 0x0a, 0x03, 0x7a, 0x61, 0x77, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x03, 0x7a, 0x61, 0x77, 0x22, 0x80, 0x01, 0x0a, 0x08, 0x41, 0x73, 0x64, 0x53, 0x74, 0x61, - 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6b, 0x6d, 0x64, 0x77, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x6b, 0x6d, 0x64, 0x77, 0x12, 0x12, 0x0a, 0x04, 0x67, 0x6d, - 0x64, 0x77, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x67, 0x6d, 0x64, 0x77, 0x12, 0x10, - 0x0a, 0x03, 0x6d, 0x67, 0x6a, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x6d, 0x67, 0x6a, - 0x12, 0x10, 0x0a, 0x03, 0x7a, 0x61, 0x77, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x7a, - 0x61, 0x77, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x22, 0x2e, 0x0a, 0x08, 0x4b, 0x65, 0x79, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x67, 0x65, 0x61, 0x72, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x04, 0x67, 0x65, 0x61, 0x72, 0x22, 0x52, 0x0a, 0x09, 0x4d, 0x6b, 0x78, 0x4a, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x31, 0x0a, 0x0a, 0x72, 0x65, 0x70, - 0x6c, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, - 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6c, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x22, 0x93, 0x02, 0x0a, - 0x0b, 0x42, 0x61, 0x6c, 0x69, 0x73, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x2c, 0x0a, 0x02, - 0x6b, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, - 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x4b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, - 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x52, 0x02, 0x6b, 0x6d, 0x12, 0x24, 0x0a, 0x0d, 0x66, 0x69, - 0x78, 0x65, 0x64, 0x54, 0x65, 0x6c, 0x65, 0x67, 0x72, 0x61, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0d, 0x66, 0x69, 0x78, 0x65, 0x64, 0x54, 0x65, 0x6c, 0x65, 0x67, 0x72, 0x61, 0x6d, - 0x12, 0x2c, 0x0a, 0x11, 0x66, 0x69, 0x78, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x54, 0x65, 0x6c, - 0x65, 0x67, 0x72, 0x61, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x66, 0x69, 0x78, - 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x54, 0x65, 0x6c, 0x65, 0x67, 0x72, 0x61, 0x6d, 0x12, 0x2a, - 0x0a, 0x10, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x65, 0x6c, 0x65, 0x67, 0x72, - 0x61, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, - 0x6c, 0x65, 0x54, 0x65, 0x6c, 0x65, 0x67, 0x72, 0x61, 0x6d, 0x12, 0x32, 0x0a, 0x14, 0x76, 0x61, - 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x73, 0x65, 0x72, 0x54, 0x65, 0x6c, 0x65, 0x67, 0x72, - 0x61, 0x6d, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, - 0x6c, 0x65, 0x55, 0x73, 0x65, 0x72, 0x54, 0x65, 0x6c, 0x65, 0x67, 0x72, 0x61, 0x6d, 0x12, 0x12, - 0x0a, 0x04, 0x77, 0x6f, 0x72, 0x6b, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x77, 0x6f, - 0x72, 0x6b, 0x22, 0xb0, 0x01, 0x0a, 0x09, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x51, 0x63, - 0x12, 0x32, 0x0a, 0x08, 0x71, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x51, 0x63, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x08, 0x71, 0x64, 0x53, 0x74, - 0x61, 0x74, 0x65, 0x73, 0x12, 0x32, 0x0a, 0x08, 0x63, 0x6a, 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x53, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x51, 0x63, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x08, - 0x63, 0x6a, 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, 0x1a, 0x3b, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x12, 0x10, 0x0a, 0x03, 0x72, 0x6f, 0x77, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, - 0x72, 0x6f, 0x77, 0x12, 0x10, 0x0a, 0x03, 0x63, 0x6f, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x03, 0x63, 0x6f, 0x6c, 0x12, 0x0e, 0x0a, 0x02, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x02, 0x6f, 0x6e, 0x22, 0x7f, 0x0a, 0x08, 0x43, 0x6b, 0x6d, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, - 0x64, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x67, 0x6a, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, - 0x6d, 0x67, 0x6a, 0x12, 0x27, 0x0a, 0x05, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x43, 0x6b, 0x6d, - 0x50, 0x61, 0x72, 0x61, 0x6d, 0x52, 0x05, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x12, 0x14, 0x0a, 0x05, - 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x6c, 0x6f, 0x63, - 0x61, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x70, 0x6c, 0x6a, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x04, 0x6d, 0x70, 0x6c, 0x6a, 0x22, 0xf1, 0x01, 0x0a, 0x08, 0x58, 0x63, 0x6a, 0x53, 0x74, + 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x22, 0x96, 0x01, 0x0a, 0x08, 0x50, 0x73, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x02, 0x69, 0x64, 0x12, 0x27, 0x0a, 0x05, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x58, 0x63, 0x6a, - 0x50, 0x61, 0x72, 0x61, 0x6d, 0x52, 0x05, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x12, 0x10, 0x0a, 0x03, - 0x78, 0x71, 0x6a, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x78, 0x71, 0x6a, 0x12, 0x18, - 0x0a, 0x07, 0x74, 0x77, 0x6a, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x04, 0x20, 0x03, 0x28, 0x08, 0x52, - 0x07, 0x74, 0x77, 0x6a, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x67, 0x71, 0x6a, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x74, 0x67, 0x71, 0x6a, 0x12, 0x14, 0x0a, 0x05, - 0x78, 0x63, 0x6a, 0x78, 0x6a, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x78, 0x63, 0x6a, - 0x78, 0x6a, 0x12, 0x14, 0x0a, 0x05, 0x78, 0x63, 0x79, 0x78, 0x6a, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x05, 0x78, 0x63, 0x79, 0x78, 0x6a, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x66, 0x6a, 0x4c, - 0x69, 0x73, 0x74, 0x18, 0x08, 0x20, 0x03, 0x28, 0x08, 0x52, 0x07, 0x63, 0x66, 0x6a, 0x4c, 0x69, - 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6a, 0x74, 0x6a, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x03, 0x6a, 0x74, 0x6a, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x67, 0x79, 0x78, 0x6a, 0x18, 0x0a, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x05, 0x74, 0x67, 0x79, 0x78, 0x6a, 0x22, 0xa1, 0x02, 0x0a, 0x0f, 0x56, - 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x38, - 0x0a, 0x0c, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x72, 0x61, - 0x69, 0x6e, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0c, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x64, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x12, 0x26, 0x0a, 0x0e, 0x72, 0x65, 0x6d, 0x6f, - 0x76, 0x65, 0x64, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x0e, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x49, 0x64, - 0x12, 0x38, 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x53, 0x77, 0x69, 0x74, 0x63, - 0x68, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, - 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0d, 0x75, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x64, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x12, 0x3b, 0x0a, 0x0e, 0x75, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x64, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x53, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0e, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, - 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x35, 0x0a, 0x0c, 0x75, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, - 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x52, 0x0c, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x98, - 0x07, 0x0a, 0x10, 0x41, 0x6c, 0x6c, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x12, 0x34, 0x0a, 0x0a, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, - 0x54, 0x72, 0x61, 0x69, 0x6e, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0a, 0x74, - 0x72, 0x61, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x34, 0x0a, 0x0b, 0x73, 0x77, 0x69, - 0x74, 0x63, 0x68, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, - 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x53, 0x74, 0x61, - 0x74, 0x65, 0x52, 0x0b, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, - 0x37, 0x0a, 0x0c, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, - 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x53, 0x65, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0c, 0x73, 0x65, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x31, 0x0a, 0x0a, 0x72, 0x65, 0x70, 0x6c, - 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x73, - 0x74, 0x61, 0x74, 0x65, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, - 0x0a, 0x72, 0x65, 0x70, 0x6c, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x34, 0x0a, 0x0b, 0x73, - 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x12, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x52, 0x0b, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x12, 0x34, 0x0a, 0x0b, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x42, - 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0b, 0x62, 0x75, 0x74, 0x74, - 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x31, 0x0a, 0x0a, 0x41, 0x6c, 0x61, 0x72, 0x6d, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x73, 0x74, - 0x61, 0x74, 0x65, 0x2e, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0a, - 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x31, 0x0a, 0x0a, 0x4c, 0x69, - 0x67, 0x68, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, - 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x52, 0x0a, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x2b, 0x0a, - 0x08, 0x70, 0x73, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x0f, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x50, 0x73, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x52, 0x08, 0x70, 0x73, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x2b, 0x0a, 0x08, 0x4b, 0x65, - 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x73, - 0x74, 0x61, 0x74, 0x65, 0x2e, 0x4b, 0x65, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x08, 0x4b, - 0x65, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x3a, 0x0a, 0x0d, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, - 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x52, 0x0d, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x53, 0x74, - 0x61, 0x74, 0x65, 0x12, 0x34, 0x0a, 0x0b, 0x62, 0x61, 0x6c, 0x69, 0x73, 0x65, 0x53, 0x74, 0x61, - 0x74, 0x65, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, - 0x2e, 0x42, 0x61, 0x6c, 0x69, 0x73, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0b, 0x62, 0x61, - 0x6c, 0x69, 0x73, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x2e, 0x0a, 0x09, 0x73, 0x74, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x51, 0x63, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x73, - 0x74, 0x61, 0x74, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x51, 0x63, 0x52, 0x09, - 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x51, 0x63, 0x12, 0x2d, 0x0a, 0x09, 0x63, 0x6b, 0x6d, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x73, - 0x74, 0x61, 0x74, 0x65, 0x2e, 0x43, 0x6b, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x09, 0x63, - 0x6b, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, 0x12, 0x2d, 0x0a, 0x09, 0x66, 0x79, 0x6d, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x73, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x73, 0x74, - 0x61, 0x74, 0x65, 0x2e, 0x43, 0x6b, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x09, 0x66, 0x79, - 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, 0x12, 0x2d, 0x0a, 0x09, 0x78, 0x63, 0x6a, 0x53, 0x74, - 0x61, 0x74, 0x65, 0x73, 0x18, 0x10, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x73, 0x74, 0x61, - 0x74, 0x65, 0x2e, 0x58, 0x63, 0x6a, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x09, 0x78, 0x63, 0x6a, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, 0x12, 0x51, 0x0a, 0x13, 0x61, 0x78, 0x6c, 0x65, 0x43, 0x6f, - 0x75, 0x6e, 0x74, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x11, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x41, 0x78, 0x6c, 0x65, - 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x52, 0x13, 0x61, 0x78, 0x6c, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x69, - 0x6e, 0x67, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x94, 0x01, 0x0a, 0x13, 0x50, 0x75, - 0x73, 0x68, 0x65, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, - 0x61, 0x6c, 0x6c, 0x12, 0x34, 0x0a, 0x09, 0x76, 0x61, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x56, - 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x09, - 0x76, 0x61, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x35, 0x0a, 0x09, 0x61, 0x6c, 0x6c, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x73, - 0x74, 0x61, 0x74, 0x65, 0x2e, 0x41, 0x6c, 0x6c, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x09, 0x61, 0x6c, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x22, 0xc2, 0x01, 0x0a, 0x10, 0x53, 0x69, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x73, 0x69, 0x6d, 0x75, 0x6c, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x69, 0x6d, - 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x3d, 0x0a, 0x05, 0x73, 0x74, 0x61, - 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x27, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, - 0x2e, 0x53, 0x69, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x2e, 0x53, 0x69, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, 0x4b, 0x0a, 0x0f, 0x53, 0x69, 0x6d, 0x75, - 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x08, 0x0a, 0x04, 0x49, - 0x6e, 0x69, 0x74, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, - 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x50, 0x61, 0x75, 0x73, 0x65, 0x10, 0x02, 0x12, 0x09, 0x0a, - 0x05, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x10, 0x03, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x65, 0x73, 0x74, - 0x72, 0x6f, 0x79, 0x10, 0x04, 0x22, 0xd2, 0x01, 0x0a, 0x1e, 0x53, 0x69, 0x6d, 0x75, 0x6c, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x68, 0x69, 0x72, 0x64, 0x50, 0x61, 0x72, 0x74, 0x79, 0x41, 0x70, - 0x69, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x42, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, - 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, - 0x2e, 0x53, 0x69, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x68, 0x69, 0x72, 0x64, - 0x50, 0x61, 0x72, 0x74, 0x79, 0x41, 0x70, 0x69, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x65, 0x73, 0x22, 0x4c, 0x0a, 0x04, - 0x54, 0x79, 0x70, 0x65, 0x12, 0x0d, 0x0a, 0x09, 0x55, 0x6e, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, - 0x64, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x73, 0x10, - 0x01, 0x12, 0x15, 0x0a, 0x11, 0x53, 0x65, 0x6d, 0x69, 0x50, 0x68, 0x79, 0x73, 0x69, 0x63, 0x61, - 0x6c, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x10, 0x02, 0x12, 0x10, 0x0a, 0x0c, 0x54, 0x72, 0x61, 0x69, - 0x6e, 0x5f, 0x70, 0x63, 0x5f, 0x73, 0x69, 0x6d, 0x10, 0x03, 0x22, 0x1e, 0x0a, 0x05, 0x53, 0x74, - 0x61, 0x74, 0x65, 0x12, 0x0a, 0x0a, 0x06, 0x4e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x10, 0x00, 0x12, - 0x09, 0x0a, 0x05, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x10, 0x01, 0x22, 0xca, 0x01, 0x0a, 0x23, 0x53, - 0x69, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x68, 0x69, 0x72, 0x64, 0x50, 0x61, - 0x72, 0x74, 0x79, 0x41, 0x70, 0x69, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, - 0x74, 0x65, 0x12, 0x3e, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x2a, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x53, 0x69, 0x6d, 0x75, 0x6c, 0x61, 0x74, + 0x02, 0x69, 0x64, 0x12, 0x2d, 0x0a, 0x09, 0x61, 0x73, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x41, + 0x73, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x09, 0x61, 0x73, 0x64, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x67, 0x6a, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x03, 0x6d, 0x67, 0x6a, 0x12, 0x27, 0x0a, 0x05, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x50, 0x73, + 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x52, 0x05, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x12, 0x10, 0x0a, + 0x03, 0x7a, 0x61, 0x77, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x7a, 0x61, 0x77, 0x22, + 0x80, 0x01, 0x0a, 0x08, 0x41, 0x73, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, + 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, + 0x12, 0x12, 0x0a, 0x04, 0x6b, 0x6d, 0x64, 0x77, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, + 0x6b, 0x6d, 0x64, 0x77, 0x12, 0x12, 0x0a, 0x04, 0x67, 0x6d, 0x64, 0x77, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x04, 0x67, 0x6d, 0x64, 0x77, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x67, 0x6a, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x6d, 0x67, 0x6a, 0x12, 0x10, 0x0a, 0x03, 0x7a, 0x61, + 0x77, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x7a, 0x61, 0x77, 0x12, 0x14, 0x0a, 0x05, + 0x66, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x66, 0x6f, 0x72, + 0x63, 0x65, 0x22, 0x2e, 0x0a, 0x08, 0x4b, 0x65, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0e, + 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, + 0x0a, 0x04, 0x67, 0x65, 0x61, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x67, 0x65, + 0x61, 0x72, 0x22, 0x52, 0x0a, 0x09, 0x4d, 0x6b, 0x78, 0x4a, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, + 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, + 0x6f, 0x64, 0x65, 0x12, 0x31, 0x0a, 0x0a, 0x72, 0x65, 0x70, 0x6c, 0x79, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, + 0x52, 0x65, 0x70, 0x6c, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6c, + 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x22, 0x93, 0x02, 0x0a, 0x0b, 0x42, 0x61, 0x6c, 0x69, 0x73, + 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x2c, 0x0a, 0x02, 0x6b, 0x6d, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, + 0x2e, 0x4b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, + 0x52, 0x02, 0x6b, 0x6d, 0x12, 0x24, 0x0a, 0x0d, 0x66, 0x69, 0x78, 0x65, 0x64, 0x54, 0x65, 0x6c, + 0x65, 0x67, 0x72, 0x61, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x66, 0x69, 0x78, + 0x65, 0x64, 0x54, 0x65, 0x6c, 0x65, 0x67, 0x72, 0x61, 0x6d, 0x12, 0x2c, 0x0a, 0x11, 0x66, 0x69, + 0x78, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x54, 0x65, 0x6c, 0x65, 0x67, 0x72, 0x61, 0x6d, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x66, 0x69, 0x78, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, + 0x54, 0x65, 0x6c, 0x65, 0x67, 0x72, 0x61, 0x6d, 0x12, 0x2a, 0x0a, 0x10, 0x76, 0x61, 0x72, 0x69, + 0x61, 0x62, 0x6c, 0x65, 0x54, 0x65, 0x6c, 0x65, 0x67, 0x72, 0x61, 0x6d, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x10, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x65, 0x6c, 0x65, + 0x67, 0x72, 0x61, 0x6d, 0x12, 0x32, 0x0a, 0x14, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, + 0x55, 0x73, 0x65, 0x72, 0x54, 0x65, 0x6c, 0x65, 0x67, 0x72, 0x61, 0x6d, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x14, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x73, 0x65, 0x72, + 0x54, 0x65, 0x6c, 0x65, 0x67, 0x72, 0x61, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x77, 0x6f, 0x72, 0x6b, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x77, 0x6f, 0x72, 0x6b, 0x22, 0xb0, 0x01, 0x0a, + 0x09, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x51, 0x63, 0x12, 0x32, 0x0a, 0x08, 0x71, 0x64, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x73, + 0x74, 0x61, 0x74, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x51, 0x63, 0x2e, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x52, 0x08, 0x71, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, 0x12, 0x32, + 0x0a, 0x08, 0x63, 0x6a, 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x16, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x51, 0x63, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x08, 0x63, 0x6a, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x73, 0x1a, 0x3b, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x72, + 0x6f, 0x77, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x72, 0x6f, 0x77, 0x12, 0x10, 0x0a, + 0x03, 0x63, 0x6f, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x63, 0x6f, 0x6c, 0x12, + 0x0e, 0x0a, 0x02, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x02, 0x6f, 0x6e, 0x22, + 0x7f, 0x0a, 0x08, 0x43, 0x6b, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x6d, + 0x67, 0x6a, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x6d, 0x67, 0x6a, 0x12, 0x27, 0x0a, + 0x05, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x72, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x43, 0x6b, 0x6d, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x52, + 0x05, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x12, 0x12, 0x0a, 0x04, + 0x6d, 0x70, 0x6c, 0x6a, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x6d, 0x70, 0x6c, 0x6a, + 0x22, 0xf1, 0x01, 0x0a, 0x08, 0x58, 0x63, 0x6a, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x27, 0x0a, + 0x05, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x72, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x58, 0x63, 0x6a, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x52, + 0x05, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x12, 0x10, 0x0a, 0x03, 0x78, 0x71, 0x6a, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x03, 0x78, 0x71, 0x6a, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x77, 0x6a, 0x4c, + 0x69, 0x73, 0x74, 0x18, 0x04, 0x20, 0x03, 0x28, 0x08, 0x52, 0x07, 0x74, 0x77, 0x6a, 0x4c, 0x69, + 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x67, 0x71, 0x6a, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x04, 0x74, 0x67, 0x71, 0x6a, 0x12, 0x14, 0x0a, 0x05, 0x78, 0x63, 0x6a, 0x78, 0x6a, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x78, 0x63, 0x6a, 0x78, 0x6a, 0x12, 0x14, 0x0a, 0x05, + 0x78, 0x63, 0x79, 0x78, 0x6a, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x78, 0x63, 0x79, + 0x78, 0x6a, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x66, 0x6a, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x08, 0x20, + 0x03, 0x28, 0x08, 0x52, 0x07, 0x63, 0x66, 0x6a, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, + 0x6a, 0x74, 0x6a, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x6a, 0x74, 0x6a, 0x12, 0x14, + 0x0a, 0x05, 0x74, 0x67, 0x79, 0x78, 0x6a, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x74, + 0x67, 0x79, 0x78, 0x6a, 0x22, 0xa1, 0x02, 0x0a, 0x0f, 0x56, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x38, 0x0a, 0x0c, 0x75, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x64, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, + 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x4d, 0x61, 0x70, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x52, 0x0c, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x54, 0x72, 0x61, + 0x69, 0x6e, 0x12, 0x26, 0x0a, 0x0e, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x54, 0x72, 0x61, + 0x69, 0x6e, 0x49, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x72, 0x65, 0x6d, 0x6f, + 0x76, 0x65, 0x64, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x38, 0x0a, 0x0d, 0x75, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x64, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x18, 0x03, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x12, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x53, 0x77, + 0x69, 0x74, 0x63, 0x68, 0x12, 0x3b, 0x0a, 0x0e, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x53, + 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x73, + 0x74, 0x61, 0x74, 0x65, 0x2e, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x52, 0x0e, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x35, 0x0a, 0x0c, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x70, 0x6c, + 0x79, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, + 0x52, 0x65, 0x70, 0x6c, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0c, 0x75, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x98, 0x07, 0x0a, 0x10, 0x41, 0x6c, 0x6c, + 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x34, 0x0a, + 0x0a, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x14, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x4d, + 0x61, 0x70, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0a, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x53, 0x74, + 0x61, 0x74, 0x65, 0x12, 0x34, 0x0a, 0x0b, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, + 0x2e, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0b, 0x73, 0x77, + 0x69, 0x74, 0x63, 0x68, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x37, 0x0a, 0x0c, 0x73, 0x65, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x13, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x52, 0x0c, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x12, 0x31, 0x0a, 0x0a, 0x72, 0x65, 0x70, 0x6c, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x52, + 0x65, 0x70, 0x6c, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6c, 0x79, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x34, 0x0a, 0x0b, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x73, 0x74, 0x61, + 0x74, 0x65, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0b, + 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x34, 0x0a, 0x0b, 0x62, + 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x12, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x52, 0x0b, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x12, 0x31, 0x0a, 0x0a, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, + 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x41, 0x6c, + 0x61, 0x72, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0a, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x12, 0x31, 0x0a, 0x0a, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, + 0x2e, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0a, 0x4c, 0x69, 0x67, + 0x68, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x2b, 0x0a, 0x08, 0x70, 0x73, 0x64, 0x53, 0x74, + 0x61, 0x74, 0x65, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x73, 0x74, 0x61, 0x74, + 0x65, 0x2e, 0x50, 0x73, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x08, 0x70, 0x73, 0x64, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x12, 0x2b, 0x0a, 0x08, 0x4b, 0x65, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x4b, + 0x65, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x08, 0x4b, 0x65, 0x79, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x12, 0x3a, 0x0a, 0x0d, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, + 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0d, + 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x34, 0x0a, + 0x0b, 0x62, 0x61, 0x6c, 0x69, 0x73, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x0c, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x42, 0x61, 0x6c, 0x69, 0x73, + 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0b, 0x62, 0x61, 0x6c, 0x69, 0x73, 0x65, 0x53, 0x74, + 0x61, 0x74, 0x65, 0x12, 0x2e, 0x0a, 0x09, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x51, 0x63, + 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x53, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x51, 0x63, 0x52, 0x09, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x51, 0x63, 0x12, 0x2d, 0x0a, 0x09, 0x63, 0x6b, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, + 0x18, 0x0e, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x43, + 0x6b, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x09, 0x63, 0x6b, 0x6d, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x73, 0x12, 0x2d, 0x0a, 0x09, 0x66, 0x79, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, 0x18, + 0x0f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x43, 0x6b, + 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x09, 0x66, 0x79, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x73, 0x12, 0x2d, 0x0a, 0x09, 0x78, 0x63, 0x6a, 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, 0x18, 0x10, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x58, 0x63, 0x6a, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x09, 0x78, 0x63, 0x6a, 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, + 0x12, 0x51, 0x0a, 0x13, 0x61, 0x78, 0x6c, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x69, 0x6e, 0x67, + 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x11, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, + 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x41, 0x78, 0x6c, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x69, + 0x6e, 0x67, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x13, + 0x61, 0x78, 0x6c, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x22, 0x94, 0x01, 0x0a, 0x13, 0x50, 0x75, 0x73, 0x68, 0x65, 0x64, 0x44, 0x65, + 0x76, 0x69, 0x63, 0x65, 0x73, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x61, + 0x6c, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x12, 0x34, 0x0a, + 0x09, 0x76, 0x61, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x16, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x09, 0x76, 0x61, 0x72, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x12, 0x35, 0x0a, 0x09, 0x61, 0x6c, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x41, + 0x6c, 0x6c, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, + 0x09, 0x61, 0x6c, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0xc2, 0x01, 0x0a, 0x10, 0x53, + 0x69, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, + 0x22, 0x0a, 0x0c, 0x73, 0x69, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x69, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x49, 0x64, 0x12, 0x3d, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x27, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x53, 0x69, 0x6d, 0x75, 0x6c, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x53, 0x69, 0x6d, 0x75, + 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, + 0x74, 0x65, 0x22, 0x4b, 0x0a, 0x0f, 0x53, 0x69, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x08, 0x0a, 0x04, 0x49, 0x6e, 0x69, 0x74, 0x10, 0x00, 0x12, + 0x0b, 0x0a, 0x07, 0x52, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, + 0x50, 0x61, 0x75, 0x73, 0x65, 0x10, 0x02, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x72, 0x72, 0x6f, 0x72, + 0x10, 0x03, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, 0x10, 0x04, 0x22, + 0xd2, 0x01, 0x0a, 0x1e, 0x53, 0x69, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x68, + 0x69, 0x72, 0x64, 0x50, 0x61, 0x72, 0x74, 0x79, 0x41, 0x70, 0x69, 0x53, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x12, 0x42, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x53, 0x69, 0x6d, 0x75, 0x6c, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x68, 0x69, 0x72, 0x64, 0x50, 0x61, 0x72, 0x74, 0x79, 0x41, + 0x70, 0x69, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x06, + 0x73, 0x74, 0x61, 0x74, 0x65, 0x73, 0x22, 0x4c, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0d, + 0x0a, 0x09, 0x55, 0x6e, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x10, 0x00, 0x12, 0x0c, 0x0a, + 0x08, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x73, 0x10, 0x01, 0x12, 0x15, 0x0a, 0x11, 0x53, + 0x65, 0x6d, 0x69, 0x50, 0x68, 0x79, 0x73, 0x69, 0x63, 0x61, 0x6c, 0x54, 0x72, 0x61, 0x69, 0x6e, + 0x10, 0x02, 0x12, 0x10, 0x0a, 0x0c, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x5f, 0x70, 0x63, 0x5f, 0x73, + 0x69, 0x6d, 0x10, 0x03, 0x22, 0x1e, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0a, 0x0a, + 0x06, 0x4e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x72, 0x72, + 0x6f, 0x72, 0x10, 0x01, 0x22, 0xca, 0x01, 0x0a, 0x23, 0x53, 0x69, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x68, 0x69, 0x72, 0x64, 0x50, 0x61, 0x72, 0x74, 0x79, 0x41, 0x70, 0x69, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, - 0x70, 0x65, 0x12, 0x41, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x2b, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x53, 0x69, 0x6d, 0x75, 0x6c, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x68, 0x69, 0x72, 0x64, 0x50, 0x61, 0x72, 0x74, 0x79, 0x41, 0x70, - 0x69, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, - 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x8d, 0x08, 0x0a, 0x11, 0x54, 0x72, 0x61, 0x69, - 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x3f, 0x0a, - 0x07, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, - 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x74, - 0x72, 0x6f, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x73, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x73, 0x12, 0x46, - 0x0a, 0x09, 0x64, 0x72, 0x69, 0x76, 0x65, 0x72, 0x4b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x28, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x43, - 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x44, 0x72, 0x69, 0x76, - 0x65, 0x72, 0x4b, 0x65, 0x79, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x52, 0x09, 0x64, 0x72, 0x69, - 0x76, 0x65, 0x72, 0x4b, 0x65, 0x79, 0x12, 0x4e, 0x0a, 0x0c, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, - 0x4b, 0x65, 0x79, 0x4d, 0x61, 0x70, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x73, - 0x74, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, - 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x4b, 0x65, 0x79, - 0x4d, 0x61, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, - 0x4b, 0x65, 0x79, 0x4d, 0x61, 0x70, 0x12, 0x46, 0x0a, 0x0b, 0x70, 0x75, 0x73, 0x68, 0x48, 0x61, + 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x3e, 0x0a, 0x04, + 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2a, 0x2e, 0x73, 0x74, 0x61, + 0x74, 0x65, 0x2e, 0x53, 0x69, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x68, 0x69, + 0x72, 0x64, 0x50, 0x61, 0x72, 0x74, 0x79, 0x41, 0x70, 0x69, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x41, 0x0a, 0x05, + 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x73, 0x74, + 0x61, 0x74, 0x65, 0x2e, 0x53, 0x69, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x68, + 0x69, 0x72, 0x64, 0x50, 0x61, 0x72, 0x74, 0x79, 0x41, 0x70, 0x69, 0x53, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, + 0x20, 0x0a, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, + 0x65, 0x22, 0xd5, 0x0a, 0x0a, 0x11, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x72, + 0x6f, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x3f, 0x0a, 0x07, 0x62, 0x75, 0x74, 0x74, 0x6f, + 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, + 0x2e, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x2e, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x07, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x73, 0x12, 0x46, 0x0a, 0x09, 0x64, 0x72, 0x69, 0x76, + 0x65, 0x72, 0x4b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x73, 0x74, + 0x61, 0x74, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x44, 0x72, 0x69, 0x76, 0x65, 0x72, 0x4b, 0x65, 0x79, 0x53, + 0x77, 0x69, 0x74, 0x63, 0x68, 0x52, 0x09, 0x64, 0x72, 0x69, 0x76, 0x65, 0x72, 0x4b, 0x65, 0x79, + 0x12, 0x4e, 0x0a, 0x0c, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x4d, 0x61, 0x70, + 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x54, + 0x72, 0x61, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x2e, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x4d, 0x61, 0x70, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x52, 0x0c, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x4d, 0x61, 0x70, + 0x12, 0x46, 0x0a, 0x0b, 0x70, 0x75, 0x73, 0x68, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x72, + 0x61, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, + 0x50, 0x75, 0x73, 0x68, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x52, 0x0b, 0x70, 0x75, 0x73, + 0x68, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x12, 0x45, 0x0a, 0x09, 0x6c, 0x69, 0x67, 0x68, + 0x74, 0x4d, 0x61, 0x70, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x73, 0x74, + 0x61, 0x74, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x4d, 0x61, 0x70, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x4d, 0x61, 0x70, 0x73, 0x12, + 0x3a, 0x0a, 0x18, 0x6c, 0x69, 0x6e, 0x65, 0x49, 0x6e, 0x69, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x53, + 0x74, 0x61, 0x6d, 0x70, 0x31, 0x32, 0x50, 0x6f, 0x72, 0x74, 0x41, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x18, 0x6c, 0x69, 0x6e, 0x65, 0x49, 0x6e, 0x69, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x53, + 0x74, 0x61, 0x6d, 0x70, 0x31, 0x32, 0x50, 0x6f, 0x72, 0x74, 0x41, 0x12, 0x3a, 0x0a, 0x18, 0x6c, + 0x69, 0x6e, 0x65, 0x49, 0x6e, 0x69, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x6d, 0x70, + 0x31, 0x32, 0x50, 0x6f, 0x72, 0x74, 0x42, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x18, 0x6c, + 0x69, 0x6e, 0x65, 0x49, 0x6e, 0x69, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x6d, 0x70, + 0x31, 0x32, 0x50, 0x6f, 0x72, 0x74, 0x42, 0x12, 0x2e, 0x0a, 0x12, 0x6c, 0x69, 0x6e, 0x65, 0x31, + 0x32, 0x43, 0x6f, 0x6e, 0x6e, 0x45, 0x72, 0x72, 0x50, 0x6f, 0x72, 0x74, 0x41, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x12, 0x6c, 0x69, 0x6e, 0x65, 0x31, 0x32, 0x43, 0x6f, 0x6e, 0x6e, 0x45, + 0x72, 0x72, 0x50, 0x6f, 0x72, 0x74, 0x41, 0x12, 0x2e, 0x0a, 0x12, 0x6c, 0x69, 0x6e, 0x65, 0x31, + 0x32, 0x43, 0x6f, 0x6e, 0x6e, 0x45, 0x72, 0x72, 0x50, 0x6f, 0x72, 0x74, 0x42, 0x18, 0x09, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x12, 0x6c, 0x69, 0x6e, 0x65, 0x31, 0x32, 0x43, 0x6f, 0x6e, 0x6e, 0x45, + 0x72, 0x72, 0x50, 0x6f, 0x72, 0x74, 0x42, 0x12, 0x3e, 0x0a, 0x1a, 0x54, 0x72, 0x61, 0x69, 0x6e, + 0x43, 0x6f, 0x6e, 0x6e, 0x49, 0x6e, 0x69, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x50, 0x6f, 0x72, 0x74, 0x41, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1a, 0x54, 0x72, 0x61, + 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x6e, 0x49, 0x6e, 0x69, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x41, 0x12, 0x3e, 0x0a, 0x1a, 0x54, 0x72, 0x61, 0x69, 0x6e, + 0x43, 0x6f, 0x6e, 0x6e, 0x49, 0x6e, 0x69, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x50, 0x6f, 0x72, 0x74, 0x42, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1a, 0x54, 0x72, 0x61, + 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x6e, 0x49, 0x6e, 0x69, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x42, 0x12, 0x22, 0x0a, 0x0c, 0x61, 0x63, 0x74, 0x69, 0x76, + 0x65, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x41, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x61, + 0x63, 0x74, 0x69, 0x76, 0x65, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x41, 0x12, 0x22, 0x0a, 0x0c, 0x61, + 0x63, 0x74, 0x69, 0x76, 0x65, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x42, 0x18, 0x0d, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x0c, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x42, 0x1a, + 0x62, 0x0a, 0x0c, 0x42, 0x75, 0x74, 0x74, 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, 0x3c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x26, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x43, 0x6f, + 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, + 0x6f, 0x6c, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, + 0x02, 0x38, 0x01, 0x1a, 0x69, 0x0a, 0x11, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x4b, 0x65, 0x79, + 0x4d, 0x61, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x3e, 0x0a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x73, 0x74, 0x61, 0x74, + 0x65, 0x2e, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x53, 0x74, + 0x61, 0x74, 0x65, 0x2e, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x43, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x63, + 0x0a, 0x0e, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x4d, 0x61, 0x70, 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, 0x3b, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x25, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x43, + 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x74, + 0x72, 0x6f, 0x6c, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, + 0x02, 0x38, 0x01, 0x1a, 0x37, 0x0a, 0x0d, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x42, 0x75, + 0x74, 0x74, 0x6f, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x61, 0x73, 0x73, 0x65, 0x64, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x70, 0x61, 0x73, 0x73, 0x65, 0x64, 0x1a, 0x33, 0x0a, 0x0f, + 0x44, 0x72, 0x69, 0x76, 0x65, 0x72, 0x4b, 0x65, 0x79, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x12, + 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, + 0x10, 0x0a, 0x03, 0x76, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x76, 0x61, + 0x6c, 0x1a, 0x33, 0x0a, 0x0f, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x43, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x02, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x76, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x03, 0x76, 0x61, 0x6c, 0x1a, 0x2f, 0x0a, 0x0b, 0x50, 0x75, 0x73, 0x68, 0x48, 0x61, + 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x76, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x03, 0x76, 0x61, 0x6c, 0x1a, 0x30, 0x0a, 0x0c, 0x43, 0x6f, 0x6e, 0x74, 0x72, + 0x6f, 0x6c, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x76, 0x61, 0x6c, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x76, 0x61, 0x6c, 0x22, 0xf1, 0x02, 0x0a, 0x14, 0x54, 0x72, + 0x61, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x4d, + 0x73, 0x67, 0x12, 0x40, 0x0a, 0x07, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x69, + 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x43, 0x6f, + 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x52, 0x07, 0x62, 0x75, 0x74, + 0x74, 0x6f, 0x6e, 0x73, 0x12, 0x46, 0x0a, 0x09, 0x64, 0x72, 0x69, 0x76, 0x65, 0x72, 0x4b, 0x65, + 0x79, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, + 0x54, 0x72, 0x61, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x2e, 0x44, 0x72, 0x69, 0x76, 0x65, 0x72, 0x4b, 0x65, 0x79, 0x53, 0x77, 0x69, 0x74, 0x63, + 0x68, 0x52, 0x09, 0x64, 0x72, 0x69, 0x76, 0x65, 0x72, 0x4b, 0x65, 0x79, 0x12, 0x48, 0x0a, 0x0a, + 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x28, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x43, 0x6f, + 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x53, 0x77, 0x69, 0x74, 0x63, + 0x68, 0x4b, 0x65, 0x79, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x0a, 0x73, 0x77, 0x69, 0x74, + 0x63, 0x68, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x46, 0x0a, 0x0b, 0x70, 0x75, 0x73, 0x68, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x50, 0x75, 0x73, 0x68, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, - 0x72, 0x52, 0x0b, 0x70, 0x75, 0x73, 0x68, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x12, 0x45, - 0x0a, 0x09, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x4d, 0x61, 0x70, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x27, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x43, - 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x4c, 0x69, 0x67, 0x68, - 0x74, 0x4d, 0x61, 0x70, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x6c, 0x69, 0x67, 0x68, - 0x74, 0x4d, 0x61, 0x70, 0x73, 0x12, 0x30, 0x0a, 0x13, 0x6c, 0x69, 0x6e, 0x65, 0x49, 0x6e, 0x69, - 0x74, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x6d, 0x70, 0x31, 0x32, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x13, 0x6c, 0x69, 0x6e, 0x65, 0x49, 0x6e, 0x69, 0x74, 0x54, 0x69, 0x6d, 0x65, - 0x53, 0x74, 0x61, 0x6d, 0x70, 0x31, 0x32, 0x12, 0x24, 0x0a, 0x0d, 0x6c, 0x69, 0x6e, 0x65, 0x31, - 0x32, 0x43, 0x6f, 0x6e, 0x6e, 0x45, 0x72, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, - 0x6c, 0x69, 0x6e, 0x65, 0x31, 0x32, 0x43, 0x6f, 0x6e, 0x6e, 0x45, 0x72, 0x72, 0x1a, 0x62, 0x0a, - 0x0c, 0x42, 0x75, 0x74, 0x74, 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, - 0x3c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, + 0x72, 0x52, 0x0b, 0x70, 0x75, 0x73, 0x68, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x12, 0x3d, + 0x0a, 0x06, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, - 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, - 0x01, 0x1a, 0x69, 0x0a, 0x11, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x4d, 0x61, - 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x3e, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, - 0x54, 0x72, 0x61, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x2e, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x43, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x63, 0x0a, 0x0e, - 0x4c, 0x69, 0x67, 0x68, 0x74, 0x4d, 0x61, 0x70, 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, 0x3b, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x25, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x43, 0x6f, 0x6e, - 0x74, 0x72, 0x6f, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, - 0x6c, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, - 0x01, 0x1a, 0x37, 0x0a, 0x0d, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x42, 0x75, 0x74, 0x74, - 0x6f, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, - 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x61, 0x73, 0x73, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x06, 0x70, 0x61, 0x73, 0x73, 0x65, 0x64, 0x1a, 0x33, 0x0a, 0x0f, 0x44, 0x72, - 0x69, 0x76, 0x65, 0x72, 0x4b, 0x65, 0x79, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x12, 0x0e, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x10, 0x0a, - 0x03, 0x76, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x76, 0x61, 0x6c, 0x1a, - 0x33, 0x0a, 0x0f, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x43, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, - 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x76, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x03, 0x76, 0x61, 0x6c, 0x1a, 0x2f, 0x0a, 0x0b, 0x50, 0x75, 0x73, 0x68, 0x48, 0x61, 0x6e, 0x64, - 0x6c, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x02, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x76, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x03, 0x76, 0x61, 0x6c, 0x1a, 0x30, 0x0a, 0x0c, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, - 0x4c, 0x69, 0x67, 0x68, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x76, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x03, 0x76, 0x61, 0x6c, 0x22, 0xf1, 0x02, 0x0a, 0x14, 0x54, 0x72, 0x61, 0x69, - 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x4d, 0x73, 0x67, - 0x12, 0x40, 0x0a, 0x07, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x26, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x43, - 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x74, - 0x72, 0x6f, 0x6c, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x52, 0x07, 0x62, 0x75, 0x74, 0x74, 0x6f, - 0x6e, 0x73, 0x12, 0x46, 0x0a, 0x09, 0x64, 0x72, 0x69, 0x76, 0x65, 0x72, 0x4b, 0x65, 0x79, 0x18, - 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x72, - 0x61, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, - 0x44, 0x72, 0x69, 0x76, 0x65, 0x72, 0x4b, 0x65, 0x79, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x52, - 0x09, 0x64, 0x72, 0x69, 0x76, 0x65, 0x72, 0x4b, 0x65, 0x79, 0x12, 0x48, 0x0a, 0x0a, 0x73, 0x77, - 0x69, 0x74, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, - 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x74, - 0x72, 0x6f, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x4b, - 0x65, 0x79, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x0a, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, - 0x4b, 0x65, 0x79, 0x73, 0x12, 0x46, 0x0a, 0x0b, 0x70, 0x75, 0x73, 0x68, 0x48, 0x61, 0x6e, 0x64, - 0x6c, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x73, 0x74, 0x61, 0x74, - 0x65, 0x2e, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x53, 0x74, - 0x61, 0x74, 0x65, 0x2e, 0x50, 0x75, 0x73, 0x68, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x52, - 0x0b, 0x70, 0x75, 0x73, 0x68, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x12, 0x3d, 0x0a, 0x06, - 0x6c, 0x69, 0x67, 0x68, 0x74, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x73, - 0x74, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, - 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x4c, 0x69, - 0x67, 0x68, 0x74, 0x52, 0x06, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x73, 0x2a, 0x37, 0x0a, 0x0b, 0x53, - 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x6e, - 0x79, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x41, 0x78, 0x6c, 0x65, 0x10, 0x01, 0x12, 0x09, 0x0a, - 0x05, 0x4c, 0x6f, 0x67, 0x69, 0x63, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x50, 0x68, 0x79, 0x73, - 0x69, 0x63, 0x10, 0x03, 0x42, 0x67, 0x0a, 0x25, 0x63, 0x6c, 0x75, 0x62, 0x2e, 0x6a, 0x6f, 0x79, - 0x6c, 0x69, 0x6e, 0x6b, 0x2e, 0x62, 0x6a, 0x72, 0x74, 0x73, 0x73, 0x2e, 0x61, 0x74, 0x73, 0x2e, - 0x76, 0x65, 0x72, 0x69, 0x66, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x42, 0x10, 0x44, - 0x65, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x5a, - 0x2c, 0x6a, 0x6f, 0x79, 0x6c, 0x69, 0x6e, 0x6b, 0x2e, 0x63, 0x6c, 0x75, 0x62, 0x2f, 0x62, 0x6a, - 0x2d, 0x72, 0x74, 0x73, 0x74, 0x73, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2f, 0x64, 0x74, - 0x6f, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x4c, 0x69, 0x67, 0x68, 0x74, 0x52, 0x06, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x73, 0x2a, 0x37, 0x0a, + 0x0b, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x07, 0x0a, 0x03, + 0x41, 0x6e, 0x79, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x41, 0x78, 0x6c, 0x65, 0x10, 0x01, 0x12, + 0x09, 0x0a, 0x05, 0x4c, 0x6f, 0x67, 0x69, 0x63, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x50, 0x68, + 0x79, 0x73, 0x69, 0x63, 0x10, 0x03, 0x42, 0x67, 0x0a, 0x25, 0x63, 0x6c, 0x75, 0x62, 0x2e, 0x6a, + 0x6f, 0x79, 0x6c, 0x69, 0x6e, 0x6b, 0x2e, 0x62, 0x6a, 0x72, 0x74, 0x73, 0x73, 0x2e, 0x61, 0x74, + 0x73, 0x2e, 0x76, 0x65, 0x72, 0x69, 0x66, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x42, + 0x10, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x74, + 0x6f, 0x5a, 0x2c, 0x6a, 0x6f, 0x79, 0x6c, 0x69, 0x6e, 0x6b, 0x2e, 0x63, 0x6c, 0x75, 0x62, 0x2f, + 0x62, 0x6a, 0x2d, 0x72, 0x74, 0x73, 0x74, 0x73, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2f, + 0x64, 0x74, 0x6f, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -6885,67 +7008,68 @@ var file_device_state_proto_depIdxs = []int32{ 43, // 12: state.TrainState.tcc:type_name -> state.TrainControlState 15, // 13: state.TrainState.connState:type_name -> state.TrainConnState 18, // 14: state.TrainState.pluseCount:type_name -> state.SensorSpeedPulseCount - 17, // 15: state.TrainState.btmBaliseCache:type_name -> state.TrainBtmCache - 22, // 16: state.TrainBtmCache.baliseList:type_name -> state.BTMState - 3, // 17: state.TrainVobcState.atoStepLevel:type_name -> state.TrainVobcState.AtoStepLevel - 46, // 18: state.TrainVobcState.vobcBtmInfo:type_name -> state.TrainVobcState.VobcBtmInfo - 23, // 19: state.TrainMapState.trainDynamicConfig:type_name -> state.TrainDynamicConfigMqtt - 24, // 20: state.TrainMapState.trainEndsA:type_name -> state.TrainEndsStateMqtt - 24, // 21: state.TrainMapState.trainEndsB:type_name -> state.TrainEndsStateMqtt - 15, // 22: state.TrainMapState.connState:type_name -> state.TrainConnState - 30, // 23: state.PsdState.asdStates:type_name -> state.AsdState - 60, // 24: state.PsdState.param:type_name -> request.PsdParam - 25, // 25: state.MkxJState.replyState:type_name -> state.ReplyState - 61, // 26: state.BaliseState.km:type_name -> graphicData.KilometerSystem - 47, // 27: state.StationQc.qdStates:type_name -> state.StationQc.State - 47, // 28: state.StationQc.cjStates:type_name -> state.StationQc.State - 62, // 29: state.CkmState.param:type_name -> request.CkmParam - 63, // 30: state.XcjState.param:type_name -> request.XcjParam - 21, // 31: state.VariationStatus.updatedTrain:type_name -> state.TrainMapState - 10, // 32: state.VariationStatus.updatedSwitch:type_name -> state.SwitchState - 8, // 33: state.VariationStatus.updatedSection:type_name -> state.SectionState - 25, // 34: state.VariationStatus.updatedReply:type_name -> state.ReplyState - 21, // 35: state.AllDevicesStatus.trainState:type_name -> state.TrainMapState - 10, // 36: state.AllDevicesStatus.switchState:type_name -> state.SwitchState - 8, // 37: state.AllDevicesStatus.sectionState:type_name -> state.SectionState - 25, // 38: state.AllDevicesStatus.replyState:type_name -> state.ReplyState - 11, // 39: state.AllDevicesStatus.signalState:type_name -> state.SignalState - 26, // 40: state.AllDevicesStatus.buttonState:type_name -> state.ButtonState - 27, // 41: state.AllDevicesStatus.AlarmState:type_name -> state.AlarmState - 28, // 42: state.AllDevicesStatus.LightState:type_name -> state.LightState - 29, // 43: state.AllDevicesStatus.psdState:type_name -> state.PsdState - 31, // 44: state.AllDevicesStatus.KeyState:type_name -> state.KeyState - 13, // 45: state.AllDevicesStatus.platformState:type_name -> state.PlatformState - 33, // 46: state.AllDevicesStatus.baliseState:type_name -> state.BaliseState - 34, // 47: state.AllDevicesStatus.stationQc:type_name -> state.StationQc - 35, // 48: state.AllDevicesStatus.ckmStates:type_name -> state.CkmState - 35, // 49: state.AllDevicesStatus.fymStates:type_name -> state.CkmState - 36, // 50: state.AllDevicesStatus.xcjStates:type_name -> state.XcjState - 9, // 51: state.AllDevicesStatus.axleCountingSection:type_name -> state.AxleCountingSectionState - 37, // 52: state.PushedDevicesStatus.varStatus:type_name -> state.VariationStatus - 38, // 53: state.PushedDevicesStatus.allStatus:type_name -> state.AllDevicesStatus - 4, // 54: state.SimulationStatus.state:type_name -> state.SimulationStatus.SimulationState - 42, // 55: state.SimulationThirdPartyApiService.states:type_name -> state.SimulationThirdPartyApiServiceState - 5, // 56: state.SimulationThirdPartyApiServiceState.type:type_name -> state.SimulationThirdPartyApiService.Type - 6, // 57: state.SimulationThirdPartyApiServiceState.state:type_name -> state.SimulationThirdPartyApiService.State - 48, // 58: state.TrainControlState.buttons:type_name -> state.TrainControlState.ButtonsEntry - 52, // 59: state.TrainControlState.driverKey:type_name -> state.TrainControlState.DriverKeySwitch - 49, // 60: state.TrainControlState.switchKeyMap:type_name -> state.TrainControlState.SwitchKeyMapEntry - 54, // 61: state.TrainControlState.pushHandler:type_name -> state.TrainControlState.PushHandler - 50, // 62: state.TrainControlState.lightMaps:type_name -> state.TrainControlState.LightMapsEntry - 51, // 63: state.TrainControlStateMsg.buttons:type_name -> state.TrainControlState.ControlButton - 52, // 64: state.TrainControlStateMsg.driverKey:type_name -> state.TrainControlState.DriverKeySwitch - 53, // 65: state.TrainControlStateMsg.switchKeys:type_name -> state.TrainControlState.SwitchKeyChange - 54, // 66: state.TrainControlStateMsg.pushHandler:type_name -> state.TrainControlState.PushHandler - 55, // 67: state.TrainControlStateMsg.lights:type_name -> state.TrainControlState.ControlLight - 51, // 68: state.TrainControlState.ButtonsEntry.value:type_name -> state.TrainControlState.ControlButton - 53, // 69: state.TrainControlState.SwitchKeyMapEntry.value:type_name -> state.TrainControlState.SwitchKeyChange - 55, // 70: state.TrainControlState.LightMapsEntry.value:type_name -> state.TrainControlState.ControlLight - 71, // [71:71] is the sub-list for method output_type - 71, // [71:71] is the sub-list for method input_type - 71, // [71:71] is the sub-list for extension type_name - 71, // [71:71] is the sub-list for extension extendee - 0, // [0:71] is the sub-list for field type_name + 17, // 15: state.TrainState.btmBaliseCacheA:type_name -> state.TrainBtmCache + 17, // 16: state.TrainState.btmBaliseCacheB:type_name -> state.TrainBtmCache + 22, // 17: state.TrainBtmCache.baliseList:type_name -> state.BTMState + 3, // 18: state.TrainVobcState.atoStepLevel:type_name -> state.TrainVobcState.AtoStepLevel + 46, // 19: state.TrainVobcState.vobcBtmInfo:type_name -> state.TrainVobcState.VobcBtmInfo + 23, // 20: state.TrainMapState.trainDynamicConfig:type_name -> state.TrainDynamicConfigMqtt + 24, // 21: state.TrainMapState.trainEndsA:type_name -> state.TrainEndsStateMqtt + 24, // 22: state.TrainMapState.trainEndsB:type_name -> state.TrainEndsStateMqtt + 15, // 23: state.TrainMapState.connState:type_name -> state.TrainConnState + 30, // 24: state.PsdState.asdStates:type_name -> state.AsdState + 60, // 25: state.PsdState.param:type_name -> request.PsdParam + 25, // 26: state.MkxJState.replyState:type_name -> state.ReplyState + 61, // 27: state.BaliseState.km:type_name -> graphicData.KilometerSystem + 47, // 28: state.StationQc.qdStates:type_name -> state.StationQc.State + 47, // 29: state.StationQc.cjStates:type_name -> state.StationQc.State + 62, // 30: state.CkmState.param:type_name -> request.CkmParam + 63, // 31: state.XcjState.param:type_name -> request.XcjParam + 21, // 32: state.VariationStatus.updatedTrain:type_name -> state.TrainMapState + 10, // 33: state.VariationStatus.updatedSwitch:type_name -> state.SwitchState + 8, // 34: state.VariationStatus.updatedSection:type_name -> state.SectionState + 25, // 35: state.VariationStatus.updatedReply:type_name -> state.ReplyState + 21, // 36: state.AllDevicesStatus.trainState:type_name -> state.TrainMapState + 10, // 37: state.AllDevicesStatus.switchState:type_name -> state.SwitchState + 8, // 38: state.AllDevicesStatus.sectionState:type_name -> state.SectionState + 25, // 39: state.AllDevicesStatus.replyState:type_name -> state.ReplyState + 11, // 40: state.AllDevicesStatus.signalState:type_name -> state.SignalState + 26, // 41: state.AllDevicesStatus.buttonState:type_name -> state.ButtonState + 27, // 42: state.AllDevicesStatus.AlarmState:type_name -> state.AlarmState + 28, // 43: state.AllDevicesStatus.LightState:type_name -> state.LightState + 29, // 44: state.AllDevicesStatus.psdState:type_name -> state.PsdState + 31, // 45: state.AllDevicesStatus.KeyState:type_name -> state.KeyState + 13, // 46: state.AllDevicesStatus.platformState:type_name -> state.PlatformState + 33, // 47: state.AllDevicesStatus.baliseState:type_name -> state.BaliseState + 34, // 48: state.AllDevicesStatus.stationQc:type_name -> state.StationQc + 35, // 49: state.AllDevicesStatus.ckmStates:type_name -> state.CkmState + 35, // 50: state.AllDevicesStatus.fymStates:type_name -> state.CkmState + 36, // 51: state.AllDevicesStatus.xcjStates:type_name -> state.XcjState + 9, // 52: state.AllDevicesStatus.axleCountingSection:type_name -> state.AxleCountingSectionState + 37, // 53: state.PushedDevicesStatus.varStatus:type_name -> state.VariationStatus + 38, // 54: state.PushedDevicesStatus.allStatus:type_name -> state.AllDevicesStatus + 4, // 55: state.SimulationStatus.state:type_name -> state.SimulationStatus.SimulationState + 42, // 56: state.SimulationThirdPartyApiService.states:type_name -> state.SimulationThirdPartyApiServiceState + 5, // 57: state.SimulationThirdPartyApiServiceState.type:type_name -> state.SimulationThirdPartyApiService.Type + 6, // 58: state.SimulationThirdPartyApiServiceState.state:type_name -> state.SimulationThirdPartyApiService.State + 48, // 59: state.TrainControlState.buttons:type_name -> state.TrainControlState.ButtonsEntry + 52, // 60: state.TrainControlState.driverKey:type_name -> state.TrainControlState.DriverKeySwitch + 49, // 61: state.TrainControlState.switchKeyMap:type_name -> state.TrainControlState.SwitchKeyMapEntry + 54, // 62: state.TrainControlState.pushHandler:type_name -> state.TrainControlState.PushHandler + 50, // 63: state.TrainControlState.lightMaps:type_name -> state.TrainControlState.LightMapsEntry + 51, // 64: state.TrainControlStateMsg.buttons:type_name -> state.TrainControlState.ControlButton + 52, // 65: state.TrainControlStateMsg.driverKey:type_name -> state.TrainControlState.DriverKeySwitch + 53, // 66: state.TrainControlStateMsg.switchKeys:type_name -> state.TrainControlState.SwitchKeyChange + 54, // 67: state.TrainControlStateMsg.pushHandler:type_name -> state.TrainControlState.PushHandler + 55, // 68: state.TrainControlStateMsg.lights:type_name -> state.TrainControlState.ControlLight + 51, // 69: state.TrainControlState.ButtonsEntry.value:type_name -> state.TrainControlState.ControlButton + 53, // 70: state.TrainControlState.SwitchKeyMapEntry.value:type_name -> state.TrainControlState.SwitchKeyChange + 55, // 71: state.TrainControlState.LightMapsEntry.value:type_name -> state.TrainControlState.ControlLight + 72, // [72:72] is the sub-list for method output_type + 72, // [72:72] is the sub-list for method input_type + 72, // [72:72] is the sub-list for extension type_name + 72, // [72:72] is the sub-list for extension extendee + 0, // [0:72] is the sub-list for field type_name } func init() { file_device_state_proto_init() } diff --git a/rts-sim-module b/rts-sim-module index 6935764..91f3fdb 160000 --- a/rts-sim-module +++ b/rts-sim-module @@ -1 +1 @@ -Subproject commit 693576459c8875f7fd82c84df1cd39d4487be65d +Subproject commit 91f3fdb23d7080be99e2a2573e281bb3c5c056ed diff --git a/rts-sim-testing-message b/rts-sim-testing-message index 3d7da35..4e275a7 160000 --- a/rts-sim-testing-message +++ b/rts-sim-testing-message @@ -1 +1 @@ -Subproject commit 3d7da35731be5af7bb126c276b4f9486c1f68e3a +Subproject commit 4e275a7b14a645c84d15842106cc4ed883234382 diff --git a/service/projectRunConfig.go b/service/projectRunConfig.go index 087ea14..94d1246 100644 --- a/service/projectRunConfig.go +++ b/service/projectRunConfig.go @@ -45,7 +45,7 @@ func checkRunConfig(jsonConfigStr string) *sys_error.BusinessError { checkSameMap := make(map[string]bool) for _, simConfig := range configMap.PcSimConfigs { if simConfig.ConfigName == "" || len(strings.TrimSpace(simConfig.ConfigName)) == 0 { - return sys_error.New(fmt.Sprintf("车载运行配置名称不能为空 配置ip:%v,端口%v", simConfig.PcSimIp, simConfig.PcSimPort), err) + return sys_error.New(fmt.Sprintf("车载运行配置名称不能为空 "), err) } if checkSameMap[simConfig.ConfigName] { return sys_error.New(fmt.Sprintf("车载运行配置重复的名称:%v", simConfig.ConfigName), err) diff --git a/third_party/can_btm/balise_btm.go b/third_party/can_btm/balise_btm.go index 5a13380..c756672 100644 --- a/third_party/can_btm/balise_btm.go +++ b/third_party/can_btm/balise_btm.go @@ -68,7 +68,7 @@ type BtmCanetClient interface { Stop() //HandleTrainHeadPositionInfo 处理收到列车位置信息 HandleTrainHeadPositionInfo(w ecs.World, h *TrainHeadPositionInfo) - HandleTrainHeadPositionInfoForTrain(w ecs.World, train *state_proto.TrainBtmCache, h *TrainHeadPositionInfo) + HandleTrainHeadPositionInfoForTrain(w ecs.World, train *state_proto.TrainState, h *TrainHeadPositionInfo) } var ( @@ -84,7 +84,7 @@ func Default() BtmCanetClient { } return btmClient } -func (s *btmCanetClient) HandleTrainHeadPositionInfoForTrain(w ecs.World, btmCache *state_proto.TrainBtmCache, h *TrainHeadPositionInfo) { +func (s *btmCanetClient) HandleTrainHeadPositionInfoForTrain(w ecs.World, train *state_proto.TrainState, h *TrainHeadPositionInfo) { wd := entity.GetWorldData(w) repo := wd.Repo h2 := &TrainHeadPositionInfo{ @@ -94,8 +94,15 @@ func (s *btmCanetClient) HandleTrainHeadPositionInfoForTrain(w ecs.World, btmCac LinkOffset: h.OldLinkOffset, Speed: h.Speed, Acceleration: h.Acceleration} - s.baliseDetector.newDetect(wd, repo, h, h2, btmCache, h.IsLine12) - //s.baliseDetector.detect2(wd, repo, h, h2, vobcBtm) + s.baliseDetector.newDetect(wd, repo, h, h2, train.BtmBaliseCacheA, h.IsLine12, false, "11") + h.Up = h.TailUp + h.Link = h.TailLink + h.LinkOffset = h.TailLinkOffset + h2.Up = h.TailUp + h2.Link = h.OldTailLink + h2.LinkOffset = h.OldTailLinkOffset + s.baliseDetector.newDetect(wd, repo, h, h2, train.BtmBaliseCacheB, h.IsLine12, false, "222") + } // HandleTrainHeadPositionInfo 处理来自动力学的列车位置信息 diff --git a/third_party/can_btm/balise_detection.go b/third_party/can_btm/balise_detection.go index ab59c73..8536df9 100644 --- a/third_party/can_btm/balise_detection.go +++ b/third_party/can_btm/balise_detection.go @@ -77,7 +77,7 @@ func (t *BaliseDetector) tryRebind(th *TrainHeadPositionInfo) { //slog.Debug(fmt.Sprintf("列车[%s]与CAN-BTM绑定", t.trianId)) } } -func (t *BaliseDetector) newDetect(wd *component.WorldData, repo *repository.Repository, th, th2 *TrainHeadPositionInfo, btmCache *state_proto.TrainBtmCache, isLine12 bool) { +func (t *BaliseDetector) newDetect(wd *component.WorldData, repo *repository.Repository, th, th2 *TrainHeadPositionInfo, btmCache *state_proto.TrainBtmCache, isLine12, show bool, id string) { //BTM天线中心点运行信息 curAntennaRi := t.createBtmAntennaRunningInfo(wd, repo, th) //目前车头 curAntennaRi2 := t.createBtmAntennaRunningInfo(wd, repo, th2) //上次车头 @@ -103,7 +103,15 @@ func (t *BaliseDetector) newDetect(wd *component.WorldData, repo *repository.Rep if len(balises) > 0 { balise := balises[0] telegram, utel := t.rcvTelegram(wd, balise.Id()) - AddNewExpectedBalise(balise, btmCache, telegram, utel, isLine12) + /*if show { + slog.Info(fmt.Sprintf("%v --------------------id:%v ,offset:%v, up: %v,linkeId:%v ,headoffset:%v,tailOffset:%v", id, balise.Id(), balise.LinkPosition().Offset(), th.Up, curAntennaRi.LinkId, curAntennaRi.LinkOffset, curAntennaRi2.LinkOffset)) + }*/ + if AddNewExpectedBalise(balise, btmCache, telegram, utel, isLine12) { + if show { + slog.Info(fmt.Sprintf("%v +++++++++++++id:%v ,offset:%v, up: %v,linkeId:%v ,headoffset:%v,tailOffset:%v", id, balise.Id(), balise.LinkPosition().Offset(), th.Up, curAntennaRi.LinkId, curAntennaRi.LinkOffset, curAntennaRi2.LinkOffset)) + + } + } } } @@ -179,7 +187,7 @@ func (t *BaliseDetector) rcvTelegram(wd *component.WorldData, baliseId string) ( if !workedState.Work { return fixBalise.Telegram, fixBalise.UserTelegram } else if baliseVar.UserTelegram == nil || len(baliseVar.UserTelegram) == 0 { - slog.Warn(fmt.Sprintf("BTM天线未接受到应答器可变报文,即将使用对应的固定报文, baliseId: %v", baliseId)) + //slog.Warn(fmt.Sprintf("BTM天线未接受到应答器可变报文,即将使用对应的固定报文, baliseId: %v", baliseId)) return fixBalise.Telegram, fixBalise.UserTelegram } else { return baliseVar.Telegram, baliseVar.UserTelegram @@ -187,10 +195,10 @@ func (t *BaliseDetector) rcvTelegram(wd *component.WorldData, baliseId string) ( } else if workedState.Work { return fixBalise.Telegram, fixBalise.UserTelegram } else { - slog.Warn(fmt.Sprintf("BTM天线未接受到应答器报文,应答器未工作 baliseId: %v", baliseId)) + //slog.Warn(fmt.Sprintf("BTM天线未接受到应答器报文,应答器未工作 baliseId: %v", baliseId)) } } else { - slog.Warn(fmt.Sprintf("BTM天线接收应答器报文,未找到 baliseId: %v", baliseId)) + //slog.Warn(fmt.Sprintf("BTM天线接收应答器报文,未找到 baliseId: %v", baliseId)) } return nil, nil } diff --git a/third_party/can_btm/train_balise_cache.go b/third_party/can_btm/train_balise_cache.go index 4a06843..948fedf 100644 --- a/third_party/can_btm/train_balise_cache.go +++ b/third_party/can_btm/train_balise_cache.go @@ -58,56 +58,56 @@ func AddNewExpectedBalise(balise *repository.Transponder, btmCache *state_proto. // HandleTrainHeadPositionInfoForTrain 处理列车位置信息 // 参数1: 参数2:发送序列号,参数3:应答器计数(每过一个应答器加一,在同一个应答器内不变),参数4:报文计数器 (每解出一个报文加一)(0~255) -func FindBaliseResend(train *state_proto.TrainState) (*state_proto.BTMState, byte, byte, byte) { +func FindBaliseResend(cache *state_proto.TrainBtmCache, isLine12 bool) (*state_proto.BTMState, byte, byte, byte) { baliseLock.Lock() defer baliseLock.Unlock() - cache := train.BtmBaliseCache for _, balise := range cache.BaliseList { if balise != nil && balise.BaliseId == cache.ResendBaliseId && balise.ResendCount < 3 { balise.ResendCount++ - ndsn := BaliseCounterAdd(cache.Dsn, IsLine12(train)) + ndsn := BaliseCounterAdd(cache.Dsn, isLine12) cache.Dsn = uint32(ndsn) return balise, ndsn, byte(cache.BaliseCount), byte(cache.MessageCounter) } } - ndsn := BaliseCounterAdd(cache.Dsn, IsLine12(train)) + ndsn := BaliseCounterAdd(cache.Dsn, isLine12) return nil, ndsn, 0, 0 } -func FindBaliseByNotSend(train *state_proto.TrainState) (*state_proto.BTMState, byte, byte, byte) { + +func FindBaliseByNotSend(cache *state_proto.TrainBtmCache, isLine12 bool) (*state_proto.BTMState, byte, byte, byte) { baliseLock.Lock() defer baliseLock.Unlock() - cache := train.BtmBaliseCache + for _, btmCache := range cache.BaliseList { if btmCache != nil && !btmCache.IsSend { - ndsn := BaliseCounterAdd(cache.Dsn, IsLine12(train)) + ndsn := BaliseCounterAdd(cache.Dsn, isLine12) cache.Dsn = uint32(ndsn) cache.ResendBaliseId = btmCache.BaliseId return btmCache, ndsn, byte(cache.BaliseCount), byte(cache.MessageCounter) } } - ndsn := BaliseCounterAdd(cache.Dsn, IsLine12(train)) + ndsn := BaliseCounterAdd(cache.Dsn, isLine12) return nil, ndsn, 0, 0 } func ClearBalise(train *state_proto.TrainState) { baliseLock.Lock() defer baliseLock.Unlock() - train.BtmBaliseCache.BaliseList = make([]*state_proto.BTMState, 3) + train.BtmBaliseCacheA.BaliseList = make([]*state_proto.BTMState, 3) + train.BtmBaliseCacheB.BaliseList = make([]*state_proto.BTMState, 3) } // 11号线根据序列号查询 -func FindBaliseByMessageSerial(train *state_proto.TrainState, ms byte) (*state_proto.BTMState, byte, bool) { +func FindBaliseByMessageSerial(cache *state_proto.TrainBtmCache, isLine12 bool, ms byte) (*state_proto.BTMState, byte, bool) { baliseLock.Lock() defer baliseLock.Unlock() - cache := train.BtmBaliseCache for _, btmCache := range cache.BaliseList { if btmCache != nil { if btmCache.BaliseId == cache.ResendBaliseId { if byte(btmCache.PackageDataSN) == ms { - bt, dsn, _, _ := FindBaliseByNotSend(train) + bt, dsn, _, _ := FindBaliseByNotSend(cache, isLine12) return bt, dsn, true } else { - ndsn := BaliseCounterAdd(cache.Dsn, IsLine12(train)) + ndsn := BaliseCounterAdd(cache.Dsn, isLine12) cache.Dsn = uint32(ndsn) return btmCache, ndsn, false } @@ -115,7 +115,7 @@ func FindBaliseByMessageSerial(train *state_proto.TrainState, ms byte) (*state_p } } - bt, dsn, _, _ := FindBaliseByNotSend(train) + bt, dsn, _, _ := FindBaliseByNotSend(cache, isLine12) return bt, dsn, true } diff --git a/third_party/message/train_pc_sim_message.go b/third_party/message/train_pc_sim_message.go index 3353677..5aad711 100644 --- a/third_party/message/train_pc_sim_message.go +++ b/third_party/message/train_pc_sim_message.go @@ -122,7 +122,7 @@ func AtpLowPowerByte(d byte) bool { // 列车速度位置报告 type TrainSpeedPlaceReportMsg struct { PulseCount1 float32 - PulseCount2 float32 + //PulseCount2 float32 } func (tp *TrainSpeedPlaceReportMsg) Encode(runDir uint16, s1, runRange uint32) []byte { @@ -255,4 +255,7 @@ const ( DOOR_MODE_MM _ NOT_BREAK + //aa = 0x2e + //bb = 0x2f + cc = 0x2d ) diff --git a/third_party/semi_physical_train/btm_vobc.go b/third_party/semi_physical_train/btm_vobc.go index ce9af4f..39b5fb6 100644 --- a/third_party/semi_physical_train/btm_vobc.go +++ b/third_party/semi_physical_train/btm_vobc.go @@ -164,11 +164,11 @@ func (b *BtmVobcClient) requestFramePackets(requestId string, req *message.BtmVo if req.FrameStatus == message.REQ_FRAME_STATUS_ERROR { //抢答器错误,重新发送 - btmState, dsn, _, _ = can_btm.FindBaliseResend(train) + btmState, dsn, _, _ = can_btm.FindBaliseResend(train.BtmBaliseCacheA, false) } else { //判断 报文序列号与之前发送的 是否一致,不一致 //如果一致返回新的应答器,如果不一致返回之前发送的应答器,如果不一致并且没有找到之前发送的应答器,则返回新应答器 - btmState, dsn, matcher = can_btm.FindBaliseByMessageSerial(train, req.MessageSerial) + btmState, dsn, matcher = can_btm.FindBaliseByMessageSerial(train.BtmBaliseCacheA, false, req.MessageSerial) if matcher { if btmState != nil { //正常应答 diff --git a/third_party/tcp/tcp_client.go b/third_party/tcp/tcp_client.go index f7c481c..ec0c253 100644 --- a/third_party/tcp/tcp_client.go +++ b/third_party/tcp/tcp_client.go @@ -88,3 +88,7 @@ func (c *TcpClient) Send(data []byte) error { } return nil } + +func (c *TcpClient) RemoteInfo() net.Addr { + return c.conn.RemoteAddr() +} diff --git a/third_party/third_party.go b/third_party/third_party.go index 1ca573e..27474c7 100644 --- a/third_party/third_party.go +++ b/third_party/third_party.go @@ -46,7 +46,9 @@ func GetRunningServiceStates() *state_proto.SimulationThirdPartyApiService { trueServices := tpas.FindAppendApiService() if trueServices != nil && len(trueServices) > 0 { for _, trueService := range trueServices { - collectServiceState(ss, trueService) + if trueService != nil { + collectServiceState(ss, trueService) + } } } diff --git a/third_party/train_pc_sim/train_pc_receive_handler.go b/third_party/train_pc_sim/train_pc_receive_handler.go index afe9b71..165fd8e 100644 --- a/third_party/train_pc_sim/train_pc_receive_handler.go +++ b/third_party/train_pc_sim/train_pc_receive_handler.go @@ -1,6 +1,7 @@ package train_pc_sim import ( + "fmt" "joylink.club/bj-rtsts-server/dto/state_proto" "joylink.club/bj-rtsts-server/third_party/message" "joylink.club/bj-rtsts-server/third_party/tcp" @@ -13,10 +14,11 @@ type TrainPcReciverData struct { clientKey string tcpClient *tcp.TcpClient pcSimManage TrainPcSimManage - //trainInit bool - state tpapi.ThirdPartyApiServiceState - speedPlace *message.TrainSpeedPlaceReportMsg - train *state_proto.TrainState + state tpapi.ThirdPartyApiServiceState + speedPlace *message.TrainSpeedPlaceReportMsg + train *state_proto.TrainState + success bool + aPort bool } func (rd *TrainPcReciverData) Name() string { @@ -35,17 +37,19 @@ func (d *TrainPcReciverData) readError(err error) { slog.Error("连接车载pc仿真tcp服务断开", err) d.updateState(tpapi.ThirdPartyState_Broken) d.tcpClient = nil - } + func (d *TrainPcReciverData) ServiceDesc() string { - return d.clientKey + if d.aPort { + return fmt.Sprintf("%v-A端", d.clientKey) + } else { + return fmt.Sprintf("%v-B端", d.clientKey) + } } + func (rd *TrainPcReciverData) receiverDataHandle(n int, data []byte) { - - receiveData := data[:n] - - trainPcMsgs := message.TrainPcSimDecode(receiveData) train := rd.train + //vs := train.VobcState if train == nil { slog.Error("车载输出数字量,未找到连接车载pc仿真的列车") return @@ -54,15 +58,20 @@ func (rd *TrainPcReciverData) receiverDataHandle(n int, data []byte) { slog.Error("车载输出数字量,,列车未连接车载pc仿真") return } - //hexSourceData := hex.EncodeToString(receiveData) - //slog.Info(fmt.Sprintf("接受列车激活端:%v pc仿真接收数据:%v", rd.clientKey, hexSourceData)) + //a := rd.tcpClient.RemoteInfo() + //slog.Info(fmt.Sprintf("nw:%v ,add:%v", a.Network(), a.String()), rd.aPort) + //slog.Info(fmt.Sprintf("接受atp信息 列车:%v 列车端口:%v ,钥匙1:%v,钥匙2:%v", train.Id, rd.aPort, train.VobcState.Tc1Active, train.VobcState.Tc2Active)) + receiveData := data[:n] + trainPcMsgs := message.TrainPcSimDecode(receiveData) + for _, baseMsg := range trainPcMsgs { - //slog.Info(fmt.Sprintf("pc仿真接收数据:%v,类型:%X", hexSourceData, baseMsg.Type)) + switch baseMsg.Type { //case RECIVE_TRAIN_CREATE_REMOVE: // pc.trainPcSimManage.TrainPcSimConnOrRemoveHandle(baseMsg.Data[0]) case message.RECIVE_TRAIN_INTERFACE_CABINET_OUTR: - rd.pcSimManage.TrainPcSimDigitalOutInfoHandle(train, baseMsg.Data) + + rd.pcSimManage.TrainPcSimDigitalOutInfoHandle(rd.aPort, rd.tcpClient, train, baseMsg.Data) case message.RECIVE_TRAIN_INTERFACE_CABINET_OUTR_BACK: rd.pcSimManage.TrainPcSimDigitalReportHandle(train, baseMsg.Data) diff --git a/third_party/train_pc_sim/train_pc_sim.go b/third_party/train_pc_sim/train_pc_sim.go index 4383ecf..62d2232 100644 --- a/third_party/train_pc_sim/train_pc_sim.go +++ b/third_party/train_pc_sim/train_pc_sim.go @@ -16,10 +16,10 @@ import ( "time" ) -type TrainControlEvent struct { - Type byte - Data []byte -} +//type TrainControlEvent struct { +// Type byte +// Data []byte +//} //var FireTrainControlEventType = ecs.NewEventType[TrainControlEvent]() @@ -57,7 +57,7 @@ type TrainPcSimManage interface { //获取列车模拟量数据 ObtainTrainDigitalMockData(train *state_proto.TrainState) []message.TrainPcSimBaseMessage // TrainPcSimDigitalOutInfoHandle 4.4.1. 车载输出数字量信息报文内容 - TrainPcSimDigitalOutInfoHandle(train *state_proto.TrainState, data []byte) + TrainPcSimDigitalOutInfoHandle(aport bool, client *tcp.TcpClient, train *state_proto.TrainState, data []byte) bool // TrainPcSimDigitalReportHandle 4.4.2. 车载输出数字反馈量信息报文内容 TrainPcSimDigitalReportHandle(train *state_proto.TrainState, data []byte) FindConnTrain(ct state_proto.TrainConnState_TrainConnType) *state_proto.TrainState @@ -70,12 +70,15 @@ type TrainPcSimManage interface { TrainBtmQuery2(train *state_proto.TrainState, data []byte) } type trainPcSimService struct { - state tpapi.ThirdPartyApiServiceState - newPcSimclientMap map[string]*TrainPcReciverData - cancleContextFun context.CancelFunc - context context.Context - trainPcSimManage TrainPcSimManage - configs []config.VehiclePCSimConfig + state tpapi.ThirdPartyApiServiceState + //newPcSimclientMap map[string]*TrainPcReciverData + + newPcSimclientMap3 map[string][]*TrainPcReciverData + + cancleContextFun context.CancelFunc + context context.Context + trainPcSimManage TrainPcSimManage + configs []config.VehiclePCSimConfig } var ( @@ -113,17 +116,29 @@ func (d *trainPcSimService) ServiceDesc() string { func FindTrainPcSimClientKey2(t *state_proto.TrainState) string { return t.ConnState.TypeName } + func (d *trainPcSimService) findTrainConn(sta *state_proto.TrainState) (*TrainPcReciverData, error) { - trainPcReciver := d.newPcSimclientMap[sta.ConnState.TypeName] - if trainPcReciver == nil { + rds := d.newPcSimclientMap3[sta.ConnState.TypeName] + if rds == nil { return nil, fmt.Errorf("") } - return trainPcReciver, nil + if sta.VobcState.Tc1Active { + return rds[0], nil + } else { + return rds[1], nil + } } +func (d *trainPcSimService) findTrainAllConn(sta *state_proto.TrainState) []*TrainPcReciverData { + rds := d.newPcSimclientMap3[sta.ConnState.TypeName] + return rds +} + func (d *trainPcSimService) findAllThirdPartState() []tpapi.ThirdPartyApiService { services := make([]tpapi.ThirdPartyApiService, 0) - for _, data := range d.newPcSimclientMap { - services = append(services, data) + for _, data := range d.newPcSimclientMap3 { + for _, rd := range data { + services = append(services, rd) + } } return services } @@ -161,10 +176,13 @@ func (d *trainPcSimService) TrainPluseCount(sta *state_proto.TrainState, h1, h2, return default: } - if sd, err := d.findTrainConn(sta); err == nil { + + /*if sd, err := d.findTrainConn(sta); err == nil { + sd.speedPlace.PulseCount1 += sta.DynamicState.Displacement + //sd.speedPlace.PulseCount2 = sd.speedPlace.PulseCount1 + }*/ + for _, sd := range d.findTrainAllConn(sta) { sd.speedPlace.PulseCount1 += sta.DynamicState.Displacement - //sd.speedPlace.PulseCount1 += float32(uint32(h1 * 10)) - sd.speedPlace.PulseCount2 = sd.speedPlace.PulseCount1 } if sta.TrainRunUp { if sta.TrainEndsA.SpeedSensorEnableA { @@ -202,15 +220,22 @@ func (d *trainPcSimService) newCloseAllConn() { } func (d *trainPcSimService) newCloseConn(clientKey string) { - rd := d.newPcSimclientMap[clientKey] + rds := d.newPcSimclientMap3[clientKey] + if rds != nil { + for _, rd := range rds { + rd.tcpClient.Close() + rd.tcpClient = nil + rd.train = nil + rd.speedPlace = nil + } + } + /*rd := d.newPcSimclientMap[clientKey] if rd != nil { rd.tcpClient.Close() rd.tcpClient = nil rd.train = nil rd.speedPlace = nil - //rd.trainInit = false - //d.cancleContextFun() - } + }*/ } func (d *trainPcSimService) findConfig(configName string) (*config.VehiclePCSimConfig, error) { @@ -223,30 +248,47 @@ func (d *trainPcSimService) findConfig(configName string) (*config.VehiclePCSimC return nil, fmt.Errorf("未找到对应的车载pc连接配置") } -func (d *trainPcSimService) initConn(clientKey string) error { +func (d *trainPcSimService) initConn2(clientKey string) error { - rd := d.newPcSimclientMap[clientKey] + rds := d.newPcSimclientMap3[clientKey] + rd1 := rds[0] + rd2 := rds[1] + cfg, cfgErr := d.findConfig(clientKey) + if cfgErr != nil { + return sys_error.New(fmt.Sprintf("没找到对应的配置信息 key:%v", clientKey), cfgErr) + } + if !cfg.OpenB && !cfg.OpenA { + return sys_error.New(fmt.Sprintf("配置:%v A,B端配置均为打开", clientKey)) + } + e1 := d.connServer(cfg.OpenA, cfg.APcSimIp, cfg.APcSimPort, rd1) + if e1 != nil { + return sys_error.New(fmt.Sprintf("配置:%v 端口A连接失败", clientKey)) + } + e2 := d.connServer(cfg.OpenB, cfg.BPcSimIp, cfg.BPcSimPort, rd2) + if e2 != nil { + return sys_error.New(fmt.Sprintf("配置:%v 端口B连接失败", clientKey)) + } + rd1.aPort = true + return nil +} + +func (d *trainPcSimService) connServer(open bool, ip string, port uint32, rd *TrainPcReciverData) *sys_error.BusinessError { if rd != nil && rd.tcpClient != nil && rd.tcpClient.IsConning() { return nil } else { - //rd.trainInit = false rd.tcpClient = nil } - cfg, cfgErr := d.findConfig(clientKey) - if cfgErr != nil { - errMsg := fmt.Sprintf("没找到对应的配置信息 key:%v", clientKey) - //slog.Error(errMsg, cfgErr.Error()) - rd.updateState(tpapi.ThirdPartyState_Broken) - return sys_error.New(errMsg, cfgErr) + if !open { + rd.success = false + return nil } - addr := fmt.Sprintf("%v:%v", cfg.PcSimIp, cfg.PcSimPort) + addr := fmt.Sprintf("%v:%v", ip, port) + //slog.Info(addr, "连接.,...") client2, err := tcp.StartTcpClient(addr, rd.receiverDataHandle, rd.readError) if err != nil { - connErrMsg := fmt.Sprintf("车载pc连接失败 clientKey:%v", clientKey) - //slog.Error(connErrMsg, err.Error()) rd.updateState(tpapi.ThirdPartyState_Broken) - return sys_error.New(connErrMsg, err) } else { + rd.success = true rd.tcpClient = client2 } return nil @@ -255,7 +297,8 @@ func (d *trainPcSimService) initConn(clientKey string) error { func (d *trainPcSimService) Start(pcSimManage TrainPcSimManage) { configs := pcSimManage.GetTrainPcSimConfig() - d.newPcSimclientMap = make(map[string]*TrainPcReciverData) + //d.newPcSimclientMap = make(map[string]*TrainPcReciverData) + d.newPcSimclientMap3 = make(map[string][]*TrainPcReciverData) if len(configs) <= 0 { slog.Info("车载pc仿真配置未开启") return @@ -266,9 +309,16 @@ func (d *trainPcSimService) Start(pcSimManage TrainPcSimManage) { closedCount++ } else { ck := c.ConfigName - pcReciver := &TrainPcReciverData{clientKey: ck, pcSimManage: pcSimManage} - pcReciver.updateState(tpapi.ThirdPartyState_Closed) - d.newPcSimclientMap[ck] = pcReciver + pcReceivers := make([]*TrainPcReciverData, 2) + for i := 0; i < 2; i++ { + ss := fmt.Sprintf("%v%v", c.ConfigName, i) + pcReciver := &TrainPcReciverData{clientKey: ss, pcSimManage: pcSimManage} + pcReciver.updateState(tpapi.ThirdPartyState_Closed) + pcReceivers[i] = pcReciver + } + d.newPcSimclientMap3[ck] = pcReceivers + //d.newPcSimclientMap[ck] = pcReciver + } } if closedCount == len(configs) { @@ -285,8 +335,11 @@ func (d *trainPcSimService) Start(pcSimManage TrainPcSimManage) { } func (d *trainPcSimService) Stop() { - for _, data := range d.newPcSimclientMap { - data.updateState(tpapi.ThirdPartyState_Closed) + + for _, rds := range d.newPcSimclientMap3 { + for _, rd := range rds { + rd.updateState(tpapi.ThirdPartyState_Closed) + } } if d.cancleContextFun != nil { d.cancleContextFun() @@ -297,7 +350,7 @@ func (d *trainPcSimService) Stop() { func (d *trainPcSimService) CreateOrRemoveTrain(train *state_proto.TrainState, isCreate bool) error { clientKey := FindTrainPcSimClientKey2(train) - err := d.initConn(clientKey) + err := d.initConn2(clientKey) if err != nil { d.newCloseConn(clientKey) return err @@ -307,16 +360,23 @@ func (d *trainPcSimService) CreateOrRemoveTrain(train *state_proto.TrainState, i data[0] = message.FLAG_CAMMAND_CREATE_TRAIN } msg := &message.TrainPcSimBaseMessage{Data: data, Type: message.RECIVE_TRAIN_CREATE_REMOVE} - rd := d.newPcSimclientMap[clientKey] - if rd != nil { - initTrainErr := d.initTrain(rd, train, isCreate, msg) - if !isCreate { - d.newCloseConn(clientKey) - } - if initTrainErr != nil { - return initTrainErr + rds := d.newPcSimclientMap3[clientKey] + if rds != nil { + for index, rd := range rds { + if rd != nil && rd.success { + slog.Info(fmt.Sprintf("index%v---rd client:%v clientnil :%v", index, rd.tcpClient, rd.tcpClient == nil)) + initTrainErr := d.initTrain(rd, train, isCreate, msg) + if !isCreate { + d.newCloseConn(clientKey) + } + if initTrainErr != nil { + return initTrainErr + } + } + } } + return nil } func (d *trainPcSimService) initTrain(rd *TrainPcReciverData, train *state_proto.TrainState, isCreate bool, trains *message.TrainPcSimBaseMessage) error { @@ -326,17 +386,21 @@ func (d *trainPcSimService) initTrain(rd *TrainPcReciverData, train *state_proto train.PluseCount = &state_proto.SensorSpeedPulseCount{} rd.train = train tcc := train.Tcc - tcc.LineInitTimeStamp12 = 0 - tcc.Line12ConnErr = false + tcc.LineInitTimeStamp12PortA = 0 + tcc.LineInitTimeStamp12PortB = 0 + tcc.Line12ConnErrPortA = false + tcc.Line12ConnErrPortB = false + //tcc.LineInitTimeStamp12 = 0 + //tcc.Line12ConnErr = false if isCreate { tmpMsgs := d.trainPcSimManage.ObtainTrainDigitalMockData(train) msgs = append(msgs, tmpMsgs...) msgs = append(msgs, message.TrainPcSimBaseMessage{Data: []byte{0x00}, Type: message.RECIVE_TRAIN_DOOR_MODE}) //门模式 msgs = append(msgs, message.TrainPcSimBaseMessage{Data: []byte{}, Type: message.RECIVE_TRAIN_BTN_CLEAR_ALL_PRE_DATA}) //清空应答器 + msgs = append(msgs, message.TrainPcSimBaseMessage{Data: []byte{}, Type: message.SENDER_TRAIN_TC_ACTIVE}) //清空应答器 } else { train.VobcState.Tc1Active = false train.VobcState.Tc2Active = false - for _, key := range tcc.DriverKey { key.Val = false } @@ -357,47 +421,52 @@ func (d *trainPcSimService) initTrain(rd *TrainPcReciverData, train *state_proto // 依据文档80ms发送列车速度位置 func (d *trainPcSimService) sendTrainLocationAndSpeedTask(ctx context.Context) { - for { + for range time.Tick(time.Millisecond * 80) { select { case <-ctx.Done(): return default: } + trains := d.trainPcSimManage.GetConnTrain2() for _, train := range trains { if train.ConnState.Conn && train.PluseCount != nil { - trainClient, trainDataErr := d.findTrainConn(train) - if trainDataErr != nil { - slog.Error(fmt.Sprintf("pc仿真速度位置未找到对应的列车 id:%v", train.Id)) - continue - } - if trainClient.speedPlace == nil { - slog.Error(fmt.Sprintf("pc仿真速度位置脉冲对象为空 列车id:%v", train.Id)) - continue + trainClients := d.newPcSimclientMap3[train.ConnState.TypeName] + for _, trainClient := range trainClients { + if trainClient.success { + if trainClient.speedPlace == nil { + slog.Error(fmt.Sprintf("pc仿真速度位置脉冲对象为空 列车id:%v", train.Id)) + continue + } + connState := tpapi.ThirdPartyState_Normal + if trainClient.aPort && train.Tcc.Line12ConnErrPortA { + connState = tpapi.ThirdPartyState_Broken + } else if trainClient.aPort == false && train.Tcc.Line12ConnErrPortB { + connState = tpapi.ThirdPartyState_Broken + } + /*if train.Tcc.Line12ConnErr { + connState = tpapi.ThirdPartyState_Broken + }*/ + trainClient.updateState(connState) + s1, speed := d.pluseSpeed(train) + runDir := uint16(2) + if train.VobcState.DirectionForward { + runDir = 1 + } + disPluse := pluseCountSpeed(train.WheelDiameter, trainClient.speedPlace.PulseCount1) + data := trainClient.speedPlace.Encode(runDir, s1, disPluse) + bm := &message.TrainPcSimBaseMessage{Type: message.SENDER_TRAIN_LOCATION_INFO, Data: data} + dataCode := bm.Encode() + slog.Info(fmt.Sprintf("发送列车速度位置,列车:%v,A端:%v,列车速度:%v,计数脉冲: %v,累计里程: %v ,发送数据:%v", train.Id, trainClient.aPort, speed, s1, trainClient.speedPlace.PulseCount1, hex.EncodeToString(dataCode)), trainClient.aPort) + err := trainClient.tcpClient.Send(dataCode) + if err != nil { + slog.Error(fmt.Sprintf("发送列车速度位置失败,列车:%v,发送数据:%v", train.Id, hex.EncodeToString(dataCode))) + } + } } - connState := tpapi.ThirdPartyState_Normal - if train.Tcc.Line12ConnErr { - connState = tpapi.ThirdPartyState_Broken - } - trainClient.updateState(connState) - s1, speed := d.pluseSpeed(train) - runDir := uint16(2) - if train.VobcState.DirectionForward { - runDir = 1 - } - disPluse := pluseCountSpeed(train.WheelDiameter, trainClient.speedPlace.PulseCount1) - data := trainClient.speedPlace.Encode(runDir, s1, disPluse) - bm := &message.TrainPcSimBaseMessage{Type: message.SENDER_TRAIN_LOCATION_INFO, Data: data} - dataCode := bm.Encode() - slog.Info(fmt.Sprintf("发送列车速度位置,列车:%v,列车速度:%v,计数脉冲: %v,累计里程: %v ,发送数据:%v", train.Id, speed, s1, trainClient.speedPlace.PulseCount1, hex.EncodeToString(dataCode))) - err := trainClient.tcpClient.Send(dataCode) - if err != nil { - slog.Error(fmt.Sprintf("发送列车速度位置失败,列车:%v,发送数据:%v", train.Id, hex.EncodeToString(dataCode))) - } } } - time.Sleep(time.Millisecond * 80) } } @@ -408,22 +477,25 @@ func (d *trainPcSimService) SendDriverActive(train *state_proto.TrainState) { slog.Error(fmt.Sprintf("发送驾驶激活,未找到对应的列车连接,列车id:%v", train.Id)) return } - vobc := train.VobcState - msg := &message.TrainPcSimBaseMessage{} - if train.TrainRunUp { + /*if train.TrainRunUp { if vobc.Tc1Active { msg.Type = message.SENDER_TRAIN_TC_ACTIVE } else if vobc.Tc1Active == false { msg.Type = message.SENDER_TRAIN_TC_NOT_ACTIVE } } else if !train.TrainRunUp { - if vobc.Tc2Active { + if vobc.Tc1Active { msg.Type = message.SENDER_TRAIN_TC_ACTIVE - } else if vobc.Tc2Active == false { + } else if vobc.Tc1Active == false { msg.Type = message.SENDER_TRAIN_TC_NOT_ACTIVE } + }*/ + if vobc.Tc1Active || vobc.Tc2Active { + msg.Type = message.SENDER_TRAIN_TC_ACTIVE + } else { + msg.Type = message.SENDER_TRAIN_TC_NOT_ACTIVE } msgs := make([]byte, 0) if msg.Type == message.SENDER_TRAIN_TC_ACTIVE { diff --git a/ts/simulation/wayside/memory/wayside_memory_train.go b/ts/simulation/wayside/memory/wayside_memory_train.go index e3dce1b..b121404 100644 --- a/ts/simulation/wayside/memory/wayside_memory_train.go +++ b/ts/simulation/wayside/memory/wayside_memory_train.go @@ -77,6 +77,7 @@ func AddTrainStateNew(vs *VerifySimulation, status *state_proto.TrainState, conf calctailOffset := calcTrailTailOffset(loffset, status.TrainLength, up) // 车尾位置 tailLink, tailDeviceId, tailDevicePort, tailLOffset, tailDeviceOffset, _, e1 := CalcInitializeLink(vs, linkId, calctailOffset, up) + if e1 != nil { panic(sys_error.New("添加列车失败,列车车尾占用位置计算出错", e1)) } @@ -95,7 +96,8 @@ func AddTrainStateNew(vs *VerifySimulation, status *state_proto.TrainState, conf status.TailDeviceId = vs.GetComIdByUid(tailDeviceId) status.TailOffset = tailDeviceOffset status.TailDevicePort = tailDevicePort - status.BtmBaliseCache = &state_proto.TrainBtmCache{BaliseList: make([]*state_proto.BTMState, 3)} + status.BtmBaliseCacheA = &state_proto.TrainBtmCache{BaliseList: make([]*state_proto.BTMState, 3)} + status.BtmBaliseCacheB = &state_proto.TrainBtmCache{BaliseList: make([]*state_proto.BTMState, 3)} //初始化列车参数状态 createOrUpdateStateDynamicConfig(status, configTrainData, trainEndsA, trainEndsB) @@ -168,7 +170,10 @@ func TrainConnTypeUpdate(vs *VerifySimulation, ct *dto.TrainConnThirdDto) { train.ConnState.ConnType = ct.ConnType train.ConnState.TypeName = ct.TypeName if ct.ConnType == state_proto.TrainConnState_PC_SIM { - train.Tcc.LineInitTimeStamp12 = 0 + //train.Tcc.LineInitTimeStamp12 = 0 + train.Tcc.LineInitTimeStamp12PortA = 0 + train.Tcc.LineInitTimeStamp12PortB = 0 + err := TrainPcSimConnOrRemoveHandle(train, true) if err != nil { train.ConnState.Conn = false @@ -324,6 +329,8 @@ func UpdateTrainStateByDynamics(vs *VerifySimulation, trainId string, info *mess //calctailOffset := calcTrailTailOffset(outLinkOffset, int64(info.Len), info.Up) calctailOffset := calcTrailTailOffset(outLinkOffset, int64(info.Len), trainHeadActUp) tailLinkId, tailDeviceId, tailDevicePort, tailLinkOffset, tailOffset, _, e2 := CalcInitializeLink(vs, outLinkId, calctailOffset, !info.Up) + + tailUp, _ := QueryUpAndABByDevice(vs.Repo, tailDeviceId, tailDevicePort, sta.TrainRunUp) if e2 != nil { panic(sys_error.New("动力学传输数据:列车车尾位置计算出错", e2)) } @@ -336,8 +343,12 @@ func UpdateTrainStateByDynamics(vs *VerifySimulation, trainId string, info *mess sta.OldLinkOffset = outLinkOffset sta.OldLink = outLinkId } + if sta.OldTailLinkOffset == 0 { + sta.OldTailLinkOffset = tailLinkOffset + sta.OldTailLink = tailLinkId + } - updateTrainBtmPosition(vs, info, sta, outLinkId, outLinkOffset) + updateTrainBtmPosition(vs, info, sta, outLinkId, outLinkOffset, tailUp, tailLinkId, tailLinkOffset) //slog.Info(fmt.Sprintf("动力学,当前速度(米/秒):%v,加速度:%v,位移距离:%v", info.Speed, info.Acceleration, info.Displacement)) if sta.OldLink != outLinkId { sta.OldLink = outLinkId @@ -399,34 +410,25 @@ func updateTrainActiveDirFromDynamic(vs *VerifySimulation, info *message.Dynamic } // 根据列车位置修改列车应答器 -func updateTrainBtmPosition(vs *VerifySimulation, info *message.DynamicsTrainInfo, sta *state_proto.TrainState, outLinkId string, outLinkOffset int64) { +func updateTrainBtmPosition(vs *VerifySimulation, info *message.DynamicsTrainInfo, sta *state_proto.TrainState, outLinkId string, outLinkOffset int64, tailUp bool, tailLinkId string, tailLinkOffset int64) { // 更新BTM中列车位置信息 //isup := sta.TrainActiveDirection == 1 - can_btm.Default().HandleTrainHeadPositionInfoForTrain(vs.World, sta.BtmBaliseCache, &fi.TrainHeadPositionInfo{ - TrainId: sta.Id, - Up: info.Up, - Link: outLinkId, - LinkOffset: outLinkOffset, - Speed: info.Speed, - Acceleration: info.Acceleration, - OldLinkOffset: sta.OldLinkOffset, - OldLink: sta.OldLink, - IsLine12: can_btm.IsLine12(sta), + can_btm.Default().HandleTrainHeadPositionInfoForTrain(vs.World, sta, &fi.TrainHeadPositionInfo{ + TrainId: sta.Id, + Up: info.Up, + Link: outLinkId, + LinkOffset: outLinkOffset, + Speed: info.Speed, + Acceleration: info.Acceleration, + OldLinkOffset: sta.OldLinkOffset, + OldLink: sta.OldLink, + TailUp: tailUp, + TailLink: tailLinkId, + TailLinkOffset: tailLinkOffset, + OldTailLink: sta.OldTailLink, + OldTailLinkOffset: sta.OldTailLinkOffset, + IsLine12: can_btm.IsLine12(sta), }) - /*can_btm.Default().HandleTrainHeadPositionInfo(vs.World, sta.VobcBtm, &fi.TrainHeadPositionInfo{ - TrainId: sta.Id, - Up: info.Up, - Link: outLinkId, - LinkOffset: outLinkOffset, - Speed: info.Speed, - Acceleration: info.Acceleration, - OldLinkOffset: sta.OldLinkOffset, - OldLink: sta.OldLink, - })*/ - /* state := can_btm.Default().GetState() - if sta.BtmState == nil || sta.BtmState.BaliseId != state.BaliseId { - sta.BtmState = &state - }*/ } diff --git a/ts/simulation/wayside/memory/wayside_simulation_train_pc.go b/ts/simulation/wayside/memory/wayside_simulation_train_pc.go index ce4d49b..a7cef38 100644 --- a/ts/simulation/wayside/memory/wayside_simulation_train_pc.go +++ b/ts/simulation/wayside/memory/wayside_simulation_train_pc.go @@ -12,9 +12,11 @@ import ( "joylink.club/bj-rtsts-server/third_party/can_btm" "joylink.club/bj-rtsts-server/third_party/electrical_machinery" "joylink.club/bj-rtsts-server/third_party/message" + "joylink.club/bj-rtsts-server/third_party/tcp" train_pc_sim "joylink.club/bj-rtsts-server/third_party/train_pc_sim" "log/slog" "math" + "strings" "time" ) @@ -43,7 +45,7 @@ func ControlTrainUpdate(s *VerifySimulation, ct *request_proto.TrainControl) { baseMsg = trainControlButton(sta, ct.DeviceId, ct.ControlButton.Active, tccGraphicData) } else if ct.ControlType == request_proto.TrainControl_DRIVER_KEY_SWITCH { baseMsg = trainControlDriverKey(sta, ct.DriverKey, ct.DeviceId, tccGraphicData) - train_pc_sim.Default().SendDriverActive(sta) + //train_pc_sim.Default().SendDriverActive(sta) } else if ct.ControlType == request_proto.TrainControl_DIRECTION_KEY_SWITCH { baseMsg = trainControlDirKey(sta.DynamicState.Speed, vobc, tcc, ct.SwitchKey, ct.DeviceId, tccGraphicData) //此处先注释,根据现场调试情况 2024-4-16 @@ -96,10 +98,8 @@ func trainControlButton(train *state_proto.TrainState, deviceId uint32, active b return controlAtpBtn(vobc, active, btn) case KZM, KYM: //开左门按钮 return controlDoorOpenBtn(vobc, active, btn, graphicBtn.Code == KZM, true) - case GZM, GYM: //关左门按钮 return controlDoorCloseBtn(vobc, active, btn, graphicBtn.Code == GZM, true) - case ZF: //折返按钮 return controlReverseBtn(vobc, active, btn) case QZMYX: //强制门允许 @@ -410,7 +410,15 @@ func trainControlDriverKey(train *state_proto.TrainState, request *request_proto if addNew { tcc.DriverKey = append(tcc.DriverKey, &state_proto.TrainControlState_DriverKeySwitch{Id: deviceId, Val: request.Val}) } - return []message.TrainPcSimBaseMessage{{Type: message.SENDER_TRAIN_OUTR_INFO, Data: []byte{message.KEY_STATE, message.IsTrue(request.Val)}}} + tce := make([]message.TrainPcSimBaseMessage, 0) + tce = append(tce, message.TrainPcSimBaseMessage{Type: message.SENDER_TRAIN_OUTR_INFO, Data: []byte{message.KEY_STATE, message.IsTrue(request.Val)}}) + tce = append(tce, message.TrainPcSimBaseMessage{Type: message.SENDER_TRAIN_OUTR_INFO, Data: []byte{message.DRIVER_ACTIVE_REPORT, message.IsTrue(request.Val)}}) + if request.Val == false { + + tce = append(tce, message.TrainPcSimBaseMessage{Type: message.SENDER_TRAIN_OUTR_INFO, Data: []byte{0x2d, 0}}) + } + + return tce } func trainDoorModeChangeHandle(vobc *state_proto.TrainVobcState, tcc *state_proto.TrainControlState, request *request_proto.TrainControl_SwitchKeyChange, deviceId uint32, tccGraphic *data_proto.TccGraphicStorage) []message.TrainPcSimBaseMessage { @@ -607,18 +615,26 @@ func (s *VerifySimulation) FindConnTrain(ct state_proto.TrainConnState_TrainConn } // 反馈atp输出数字量数据 -func (s *VerifySimulation) reportTrainMockInitMsg(train *state_proto.TrainState, data1, data3 byte) { +func (s *VerifySimulation) reportTrainMockInitMsg(aport bool, client *tcp.TcpClient, train *state_proto.TrainState, data1, data3 byte) { vobc := train.VobcState tcc := train.Tcc tce := make([]message.TrainPcSimBaseMessage, 0) - tcc.Line12ConnErr = false - //initResult := trainInit + initTimeStamp := tcc.LineInitTimeStamp12PortA + connErr := tcc.Line12ConnErrPortA + initConn := tcc.TrainConnInitComplatePortA + if vobc.Tc2Active { + initTimeStamp = tcc.LineInitTimeStamp12PortB + connErr = tcc.Line12ConnErrPortB + initConn = tcc.TrainConnInitComplatePortB + } + + //tcc.Line12ConnErr = false if vobc.Tc1Active || vobc.Tc2Active { state := message.GetBit(data1, 3) - //if trainInit { - if vobc.TrainConnInitComplate { + if /* vobc.TrainConnInitComplate*/ initConn { if data1 == 0 { - tcc.Line12ConnErr = true + //tcc.Line12ConnErr = true + connErr = true } if state == 0 { jjzdBtn := tcc.Buttons[JJZD] @@ -630,36 +646,126 @@ func (s *VerifySimulation) reportTrainMockInitMsg(train *state_proto.TrainState, tce = append(tce, ebTce...) tce = append(tce, message.TrainPcSimBaseMessage{Type: message.SENDER_TRAIN_OUTR_INFO, Data: []byte{message.OUTER_EMERGENCY_BRAKE, state}}) tce = append(tce, message.TrainPcSimBaseMessage{Type: message.SENDER_TRAIN_OUTR_INFO, Data: []byte{message.TRAIN_TRACTION_CUTED, 1}}) + } else { + tce = append(tce, message.TrainPcSimBaseMessage{Type: message.SENDER_TRAIN_OUTR_INFO, Data: []byte{message.OUTER_EMERGENCY_BRAKE, state}}) } } else { - //initResult = false - vobc.TrainConnInitComplate = true - if tcc.LineInitTimeStamp12 <= 0 { - tcc.LineInitTimeStamp12 = time.Now().Add(time.Second * 6).Unix() + initConn = true + if initTimeStamp <= 0 { + initTimeStamp = time.Now().Add(time.Second * 6).Unix() } - if tcc.LineInitTimeStamp12 > time.Now().Unix() { + if initTimeStamp > time.Now().Unix() { tce = append(tce, message.TrainPcSimBaseMessage{Type: message.SENDER_TRAIN_OUTR_INFO, Data: []byte{message.OUTER_EMERGENCY_BRAKE, state}}) initData := s.ObtainTrainDigitalMockDataForStatus(train) tce = append(tce, initData...) - //initResult = false - vobc.TrainConnInitComplate = false + if aport { + tcc.ActiveTrainA = true + } else { + tcc.ActiveTrainB = true + } + initConn = false } - } + /*if vobc.LineInitTimeStamp12 <= 0 { + vobc.LineInitTimeStamp12 = time.Now().Add(time.Second * 6).Unix() + }*/ + /*if tcc.LineInitTimeStamp12 > time.Now().Unix() { + tce = append(tce, message.TrainPcSimBaseMessage{Type: message.SENDER_TRAIN_OUTR_INFO, Data: []byte{message.OUTER_EMERGENCY_BRAKE, state}}) + initData := s.ObtainTrainDigitalMockDataForStatus(train) + tce = append(tce, initData...) + vobc.TrainConnInitComplate = false + }*/ + } + if vobc.Tc1Active { + tcc.LineInitTimeStamp12PortA = initTimeStamp + tcc.Line12ConnErrPortB = connErr + tcc.TrainConnInitComplatePortA = initConn + } else if vobc.Tc2Active { + tcc.LineInitTimeStamp12PortA = initTimeStamp + tcc.Line12ConnErrPortB = connErr + tcc.TrainConnInitComplatePortB = initConn + } + //tce = append(tce, message.TrainPcSimBaseMessage{Type: message.SENDER_TRAIN_OUTR_INFO, Data: []byte{message.DRIVER_ACTIVE_REPORT, 1}}) //驾驶室激活反馈 if message.GetBit(data3, 3) == 0 { - tce = append(tce, message.TrainPcSimBaseMessage{Type: message.SENDER_TRAIN_OUTR_INFO, Data: []byte{message.DRIVER_ACTIVE_REPORT, 1}}) + act := byte(0) + if vobc.Tc1Active || vobc.Tc2Active { + act = 1 + } + tce = append(tce, message.TrainPcSimBaseMessage{Type: message.SENDER_TRAIN_OUTR_INFO, Data: []byte{message.DRIVER_ACTIVE_REPORT, act}}) } + tce = append(tce, message.TrainPcSimBaseMessage{Type: message.SENDER_TRAIN_OUTR_INFO, Data: []byte{message.TRAIN_INTEGRITY, 1}}) + } + train_pc_sim.Default().SendTrainControlMsg(train, tce) //return initResult } + +func (s *VerifySimulation) reportTrainMockInitMsg2(aport, act, initConn bool, initTimeStamp int64, train *state_proto.TrainState, data1, data3 byte) (int64, bool, bool, []message.TrainPcSimBaseMessage) { + + tcc := train.Tcc + tce := make([]message.TrainPcSimBaseMessage, 0) + connErr := false + state := message.GetBit(data1, 3) + //slog.Info(fmt.Sprintf("act:%v ,t1:%v ,a1 :%v,t2:%v,a2:%v,init:%v,ts:%v", act, train.VobcState.Tc1Active, tcc.ActiveTrainA, train.VobcState.Tc2Active, tcc.ActiveTrainB, initConn, initTimeStamp), aport) + + if message.GetBit(data3, 3) == 0 { + actt := byte(0) + if act { + actt = 1 + } + tce = append(tce, message.TrainPcSimBaseMessage{Type: message.SENDER_TRAIN_OUTR_INFO, Data: []byte{message.DRIVER_ACTIVE_REPORT, actt}}) + } + + if act == false { + tce = append(tce, message.TrainPcSimBaseMessage{Type: message.SENDER_TRAIN_OUTR_INFO, Data: []byte{message.OUTER_EMERGENCY_BRAKE, state}}) + //tce = append(tce, message.TrainPcSimBaseMessage{Type: message.SENDER_TRAIN_OUTR_INFO, Data: []byte{message.TRAIN_INTEGRITY, 1}}) + return initTimeStamp, initConn, false, tce + } + if initConn { + if data1 == 0 { + connErr = true + } + if state == 0 { + slog.Info("列车紧急制动%v", aport) + jjzdBtn := tcc.Buttons[JJZD] + ebTce := controlEBBtn(train, true, jjzdBtn) + tce = append(tce, ebTce...) + } else if message.GetBit(data1, 0) == 0 { + slog.Info(fmt.Sprintf("列车紧切牵引%v ,state :%v", aport, state)) + jjzdBtn := tcc.Buttons[JJZD] + ebTce := controlEBBtn(train, true, jjzdBtn) + tce = append(tce, ebTce...) + tce = append(tce, message.TrainPcSimBaseMessage{Type: message.SENDER_TRAIN_OUTR_INFO, Data: []byte{message.OUTER_EMERGENCY_BRAKE, state}}) + tce = append(tce, message.TrainPcSimBaseMessage{Type: message.SENDER_TRAIN_OUTR_INFO, Data: []byte{message.TRAIN_TRACTION_CUTED, 1}}) + } + + } else { + initConn = true + if initTimeStamp <= 0 { + initTimeStamp = time.Now().Add(time.Second * 6).Unix() + } + if initTimeStamp > time.Now().Unix() { + tce = append(tce, message.TrainPcSimBaseMessage{Type: message.SENDER_TRAIN_OUTR_INFO, Data: []byte{message.OUTER_EMERGENCY_BRAKE, state}}) + initData := s.ObtainTrainDigitalMockDataForStatus(train) + tce = append(tce, initData...) + if aport { + tcc.ActiveTrainA = true + } else if aport == false { + tcc.ActiveTrainB = true + } + initConn = false + } + } + + return initTimeStamp, initConn, connErr, tce +} func trainAtoLevel(at3, at2, at1 bool) state_proto.TrainVobcState_AtoStepLevel { switch { case at3 == false && at2 == false && at1 == true: return state_proto.TrainVobcState_ATO_STEP_LEVEL_1 - case at3 == false && at2 == true && at1 == true: return state_proto.TrainVobcState_ATO_STEP_LEVEL_2 case at3 == false && at2 == true && at1 == false: @@ -676,31 +782,84 @@ func trainAtoLevel(at3, at2, at1 bool) state_proto.TrainVobcState_AtoStepLevel { return state_proto.TrainVobcState_ATO_STEP_LEVEL_NONE } } +func (s *VerifySimulation) shuziliang(aport bool, client *tcp.TcpClient, baseMessage []message.TrainPcSimBaseMessage) { + for _, msg := range baseMessage { + dd := msg.Encode() + //slog.Info(fmt.Sprintf("发送列车控制信息:%x", dd), aport) + client.Send(dd) + + } +} // 4.4.1. 车载输出数字量信息报文内容 -func (s *VerifySimulation) TrainPcSimDigitalOutInfoHandle(train *state_proto.TrainState, data []byte) { - /* slog.Info("开始接受atp输出模拟量==============") - for i, d := range data { - - dd := &strings.Builder{} - for j := 0; j < 8; j++ { - dd.WriteString(fmt.Sprintf(" bit%v val:%v , ", j, message.GetBit(d, uint(j)))) - } - slog.Info(fmt.Sprintf("接受atp模拟量id:%v,data:%b,bits:%v", i, d, dd.String())) +func (s *VerifySimulation) TrainPcSimDigitalOutInfoHandle(aport bool, client *tcp.TcpClient, train *state_proto.TrainState, data []byte) bool { + dd := &strings.Builder{} + //slog.Info("开始接受atp输出模拟量==============%v", aport) + /* for i, d := range data { + for j := 0; j < 8; j++ { + dd.WriteString(fmt.Sprintf(" bit%v val:%v , ", j, message.GetBit(d, uint(j)))) } - slog.Info("结束接受atp输出模拟量eeeeeeeeeeeeeeeeee")*/ - s.reportTrainMockInitMsg(train, data[4], data[1]) - vobc := train.VobcState - trainPcSimDigitalOutInfoHandleCode7_0(data[4], vobc) - trainPcSimDigitalOutInfoHandleCode15_8(data[3], vobc) - trainPcSimDigitalOutInfoHandleCode23_16(data[2], vobc) - trainPcSimDigitalOutInfoHandleCode31_24(data[1], vobc) - trainPcSimDigitalOutInfoHandleCode39_32(data[0], vobc) - if vobc.Ato { - vobc.AtoStepLevel = trainAtoLevel(vobc.AtoTractionCommand3, vobc.AtoTractionCommand2, vobc.AtoTractionCommand1) + slog.Info(fmt.Sprintf("接受atp模拟量id:%v,data:%b,bits:%v", i, d, dd.String())) + }*/ + d := data[4] + for j := 0; j < 8; j++ { + dd.WriteString(fmt.Sprintf(" bit%v val:%v , ", j, message.GetBit(d, uint(j)))) } - //return initResult + //slog.Info(fmt.Sprintf("%v", dd.String()), aport) + //slog.Info("结束接受atp输出模拟量eeeeeeeeeeeeeeeeee", aport) + + //s.reportTrainMockInitMsg(aport, client, train, data[4], data[1]) + vobc := train.VobcState + + if aport { + ts, initConn, connErr, tce := s.reportTrainMockInitMsg2(aport, vobc.Tc1Active, train.Tcc.TrainConnInitComplatePortA, train.Tcc.LineInitTimeStamp12PortA, train, data[4], data[1]) + if train.Tcc.ActiveTrainA { + train.Tcc.LineInitTimeStamp12PortA = ts + train.Tcc.TrainConnInitComplatePortA = initConn + train.Tcc.Line12ConnErrPortA = connErr + //slog.Info("发送数字量") + s.shuziliang(aport, client, tce) + } + /* if initConn { + train.Tcc.TrainConnInitComplatePortB = initConn + train.Tcc.LineInitTimeStamp12PortB = ts + } + if train.Tcc.ActiveTrainA { + train.Tcc.ActiveTrainB = train.Tcc.ActiveTrainA + } + */ + if train.VobcState.Tc1Active { + trainPcSimDigitalOutInfoHandleCode7_0(data[4], vobc) + trainPcSimDigitalOutInfoHandleCode15_8(data[3], vobc) + trainPcSimDigitalOutInfoHandleCode23_16(data[2], vobc) + trainPcSimDigitalOutInfoHandleCode31_24(data[1], vobc) + trainPcSimDigitalOutInfoHandleCode39_32(data[0], vobc) + if vobc.Ato { + vobc.AtoStepLevel = trainAtoLevel(vobc.AtoTractionCommand3, vobc.AtoTractionCommand2, vobc.AtoTractionCommand1) + } + } + } else { + ts, initConn, connErr, tce := s.reportTrainMockInitMsg2(aport, vobc.Tc2Active, train.Tcc.TrainConnInitComplatePortB, train.Tcc.LineInitTimeStamp12PortB, train, data[4], data[1]) + if train.Tcc.ActiveTrainB { + train.Tcc.LineInitTimeStamp12PortB = ts + train.Tcc.TrainConnInitComplatePortB = initConn + train.Tcc.Line12ConnErrPortB = connErr + s.shuziliang(aport, client, tce) + } + if train.VobcState.Tc2Active { + trainPcSimDigitalOutInfoHandleCode7_0(data[4], vobc) + trainPcSimDigitalOutInfoHandleCode15_8(data[3], vobc) + trainPcSimDigitalOutInfoHandleCode23_16(data[2], vobc) + trainPcSimDigitalOutInfoHandleCode31_24(data[1], vobc) + trainPcSimDigitalOutInfoHandleCode39_32(data[0], vobc) + if vobc.Ato { + vobc.AtoStepLevel = trainAtoLevel(vobc.AtoTractionCommand3, vobc.AtoTractionCommand2, vobc.AtoTractionCommand1) + } + } + } + + return true } func trainPcSimDigitalOutInfoHandleCode39_32(d byte, vobc *state_proto.TrainVobcState) { @@ -856,10 +1015,14 @@ func (s *VerifySimulation) TrainBtmQuery2(train *state_proto.TrainState, data [] } var balise *state_proto.BTMState var dsn, bc, mc byte + btmCache := train.BtmBaliseCacheA + if train.VobcState.Tc2Active { + btmCache = train.BtmBaliseCacheB + } if atpReq.IsResend() { - balise, dsn, bc, mc = can_btm.FindBaliseResend(train) + balise, dsn, bc, mc = can_btm.FindBaliseResend(btmCache, true) } else { - balise, dsn, bc, mc = can_btm.FindBaliseByNotSend(train) + balise, dsn, bc, mc = can_btm.FindBaliseByNotSend(btmCache, true) } cl := clock(atpReq) btmRepFrame := createBtmStatus(trainAtm.CanId.ID4, balise, atpReq, cl, dsn, bc, mc) @@ -929,11 +1092,11 @@ func (s *VerifySimulation) ObtainTrainDigitalMockDataForStatus(train *state_prot vs := train.VobcState if vs.Tc1Active || vs.Tc2Active { - msgArr = append(msgArr, message.TrainPcSimBaseMessage{Data: []byte{message.KEY_STATE, 1}, Type: message.SENDER_TRAIN_OUTR_INFO}) //钥匙激活 - msgArr = append(msgArr, message.TrainPcSimBaseMessage{Data: []byte{message.DRIVER_ACTIVE_REPORT, 1}, Type: message.SENDER_TRAIN_OUTR_INFO}) //列车完整性 - } else { + msgArr = append(msgArr, message.TrainPcSimBaseMessage{Data: []byte{message.KEY_STATE, 1}, Type: message.SENDER_TRAIN_OUTR_INFO}) //钥匙激活 + //msgArr = append(msgArr, message.TrainPcSimBaseMessage{Data: []byte{message.DRIVER_ACTIVE_REPORT, 1}, Type: message.SENDER_TRAIN_OUTR_INFO}) //列车完整性 + } /* else { msgArr = append(msgArr, message.TrainPcSimBaseMessage{Data: []byte{message.DRIVER_ACTIVE_REPORT, 0}, Type: message.SENDER_TRAIN_OUTR_INFO}) //列车完整性 - } + }*/ if vs.BrakeForce == 0 { msgArr = append(msgArr, message.TrainPcSimBaseMessage{Data: []byte{message.HANDLE_TO_ZERO, 1}, Type: message.SENDER_TRAIN_OUTR_INFO}) //列车制动状态 }