From d63be32ad560b64cf0f3306108064ed59b6f29e8 Mon Sep 17 00:00:00 2001 From: thesai <1021828630@qq.com> Date: Tue, 26 Mar 2024 13:12:16 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90=E6=96=B0=E5=A2=9E=E3=80=91=E8=BD=A6?= =?UTF-8?q?=E5=BA=93=E9=97=A8PSL=E6=A8=A1=E5=9E=8B=E6=9E=84=E5=BB=BA?= =?UTF-8?q?=E5=8F=8A=E7=9B=B8=E5=85=B3ecs=E9=80=BB=E8=BE=91=EF=BC=9B=20?= =?UTF-8?q?=E3=80=90=E6=94=B9=E5=8A=A8=E3=80=91=E8=BD=A6=E5=BA=93=E9=97=A8?= =?UTF-8?q?ecs=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- component/ckm.go | 8 + component/component_data/ci.pb.go | 2 +- component/component_data/ckm.pb.go | 4 +- component/component_data/common.pb.go | 2 +- component/component_data/equipment.pb.go | 2 +- component/component_data/points.pb.go | 2 +- component/component_proto/psd.pb.go | 2 +- component/component_proto/signal.pb.go | 2 +- entity/ckm.go | 83 +- entity/psd.go | 6 +- proto/src/component/ckm.proto | 2 +- proto/src/model.proto | 16 +- repo/dto/cg_repo.pb.go | 2 +- repository/ckm_psl.go | 34 + repository/model/proto/model.pb.go | 2140 ++++++++++++---------- repository/{mkx.go => psd_psl.go} | 42 +- repository/repository.go | 68 +- repository/repository_manager.go | 23 +- sys/circuit_sys/ckm.go | 59 +- 19 files changed, 1371 insertions(+), 1128 deletions(-) create mode 100644 repository/ckm_psl.go rename repository/{mkx.go => psd_psl.go} (53%) diff --git a/component/ckm.go b/component/ckm.go index 9c311b8..02ce93b 100644 --- a/component/ckm.go +++ b/component/ckm.go @@ -10,6 +10,7 @@ var ( CkmMgzTag = ecs.NewTag() //门故障tag CkmCircuitType = ecs.NewComponentType[CkmCircuit]() CkmStateType = ecs.NewComponentType[component_data.CkmState]() + CkmPslType = ecs.NewComponentType[CkmPsl]() ) type CkmCircuit struct { @@ -23,3 +24,10 @@ type CkmCircuit struct { KMJ *ecs.Entry //开门继电器 GMJ *ecs.Entry //关门继电器 } + +type CkmPsl struct { + KMA *ecs.Entry //开门按钮 + GMA *ecs.Entry //关门按钮 + MPLA *ecs.Entry //门旁路按钮 + MMSA *ecs.Entry //门模式按钮 +} diff --git a/component/component_data/ci.pb.go b/component/component_data/ci.pb.go index 27bbae8..e69aa78 100644 --- a/component/component_data/ci.pb.go +++ b/component/component_data/ci.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.32.0 +// protoc-gen-go v1.33.0 // protoc v4.23.1 // source: component/ci.proto diff --git a/component/component_data/ckm.pb.go b/component/component_data/ckm.pb.go index a46c28b..f48daac 100644 --- a/component/component_data/ckm.pb.go +++ b/component/component_data/ckm.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.32.0 +// protoc-gen-go v1.33.0 // protoc v4.23.1 // source: component/ckm.proto @@ -26,7 +26,7 @@ type CkmState struct { unknownFields protoimpl.UnknownFields Close bool `protobuf:"varint,1,opt,name=close,proto3" json:"close,omitempty"` - Mms bool `protobuf:"varint,2,opt,name=mms,proto3" json:"mms,omitempty"` //门模式(true远程,false本地) + Mms bool `protobuf:"varint,2,opt,name=mms,proto3" json:"mms,omitempty"` //门模式(false远程,true本地) Mgz bool `protobuf:"varint,3,opt,name=mgz,proto3" json:"mgz,omitempty"` //门故障 // 驱动状态(没有继电器时直接操作以下状态) Km bool `protobuf:"varint,4,opt,name=km,proto3" json:"km,omitempty"` //开门 diff --git a/component/component_data/common.pb.go b/component/component_data/common.pb.go index bd7a5b6..9297a25 100644 --- a/component/component_data/common.pb.go +++ b/component/component_data/common.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.32.0 +// protoc-gen-go v1.33.0 // protoc v4.23.1 // source: component/common.proto diff --git a/component/component_data/equipment.pb.go b/component/component_data/equipment.pb.go index 8a50639..6ac5f4e 100644 --- a/component/component_data/equipment.pb.go +++ b/component/component_data/equipment.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.32.0 +// protoc-gen-go v1.33.0 // protoc v4.23.1 // source: component/equipment.proto diff --git a/component/component_data/points.pb.go b/component/component_data/points.pb.go index 348a607..9e9441a 100644 --- a/component/component_data/points.pb.go +++ b/component/component_data/points.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.32.0 +// protoc-gen-go v1.33.0 // protoc v4.23.1 // source: component/points.proto diff --git a/component/component_proto/psd.pb.go b/component/component_proto/psd.pb.go index 0738bf2..139149f 100644 --- a/component/component_proto/psd.pb.go +++ b/component/component_proto/psd.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.32.0 +// protoc-gen-go v1.33.0 // protoc v4.23.1 // source: component/psd.proto diff --git a/component/component_proto/signal.pb.go b/component/component_proto/signal.pb.go index 8fc9252..91d697c 100644 --- a/component/component_proto/signal.pb.go +++ b/component/component_proto/signal.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.32.0 +// protoc-gen-go v1.33.0 // protoc v4.23.1 // source: component/signal.proto diff --git a/entity/ckm.go b/entity/ckm.go index 8d4ff62..517f2cf 100644 --- a/entity/ckm.go +++ b/entity/ckm.go @@ -1,6 +1,7 @@ package entity import ( + "github.com/yohamta/donburi" "joylink.club/ecs" "joylink.club/rtsssimulation/component" "joylink.club/rtsssimulation/repository" @@ -12,36 +13,62 @@ var CkmBaseComponentTypes = []ecs.IComponentType{component.UidType, component.Ck func LoadCkm(w ecs.World) error { data := GetWorldData(w) for _, ckm := range data.Repo.CkmList() { - //创建基础entry - entry := w.Entry(w.Create(CkmBaseComponentTypes...)) - component.UidType.SetValue(entry, component.Uid{Id: ckm.Id()}) - data.EntityMap[ckm.Id()] = entry - //加载电路 - if len(ckm.ComponentGroups()) != 0 { - circuit := &component.CkmCircuit{} - entry.AddComponent(component.CkmCircuitType, unsafe.Pointer(circuit)) - for _, group := range ckm.ComponentGroups() { - for _, ec := range group.Components() { - relay := ec.(*repository.Relay) - switch ec.Code() { - case "MKJ": - circuit.MKJ = NewRelayEntity(w, relay, data.EntityMap) - case "MGJ": - circuit.MGJ = NewRelayEntity(w, relay, data.EntityMap) - case "MGZJ": - circuit.MGZJ = NewRelayEntity(w, relay, data.EntityMap) - case "MPLJ": - circuit.MPLJ = NewRelayEntity(w, relay, data.EntityMap) - case "MMSJ": - circuit.MMSJ = NewRelayEntity(w, relay, data.EntityMap) - case "KMJ": - circuit.KMJ = NewRelayEntity(w, relay, data.EntityMap) - case "GMJ": - circuit.GMJ = NewRelayEntity(w, relay, data.EntityMap) - } + ckmEntry := buildBaseEntry(w, ckm, data) + addCkmCircuit(w, ckm, ckmEntry, data) + } + for _, psl := range data.Repo.CkmPslList() { + ckmEntry := data.EntityMap[psl.Ckm().Id()] + addCkmPsl(w, psl, ckmEntry, data) + } + return nil +} + +// 构建基础镜像 +func buildBaseEntry(w ecs.World, ckm *repository.Ckm, data *component.WorldData) *donburi.Entry { + //创建基础entry + entry := w.Entry(w.Create(CkmBaseComponentTypes...)) + component.UidType.SetValue(entry, component.Uid{Id: ckm.Id()}) + data.EntityMap[ckm.Id()] = entry + return entry +} + +// 添加车库门电路 +func addCkmCircuit(w ecs.World, ckm *repository.Ckm, ckmEntry *donburi.Entry, data *component.WorldData) { + //加载电路 + if len(ckm.ComponentGroups()) != 0 { + circuit := &component.CkmCircuit{} + ckmEntry.AddComponent(component.CkmCircuitType, unsafe.Pointer(circuit)) + for _, group := range ckm.ComponentGroups() { + for _, ec := range group.Components() { + relay := ec.(*repository.Relay) + switch ec.Code() { + case "MKJ": + circuit.MKJ = NewRelayEntity(w, relay, data.EntityMap) + case "MGJ": + circuit.MGJ = NewRelayEntity(w, relay, data.EntityMap) + case "MGZJ": + circuit.MGZJ = NewRelayEntity(w, relay, data.EntityMap) + case "MPLJ": + circuit.MPLJ = NewRelayEntity(w, relay, data.EntityMap) + case "MMSJ": + circuit.MMSJ = NewRelayEntity(w, relay, data.EntityMap) + case "KMJ": + circuit.KMJ = NewRelayEntity(w, relay, data.EntityMap) + case "GMJ": + circuit.GMJ = NewRelayEntity(w, relay, data.EntityMap) } } } } - return nil +} + +// 添加车库门PSL +func addCkmPsl(w ecs.World, psl *repository.CkmPsl, ckmEntry *ecs.Entry, data *component.WorldData) { + ckmPsl := component.CkmPsl{ + KMA: NewButtonEntity(w, psl.Kma(), data.EntityMap), + GMA: NewButtonEntity(w, psl.Gma(), data.EntityMap), + MPLA: NewButtonEntity(w, psl.Mpla(), data.EntityMap), + MMSA: NewButtonEntity(w, psl.Mmsa(), data.EntityMap), + } + ckmEntry.AddComponent(component.CkmPslType, unsafe.Pointer(&ckmPsl)) } diff --git a/entity/psd.go b/entity/psd.go index d5ded2a..f5b3d96 100644 --- a/entity/psd.go +++ b/entity/psd.go @@ -29,7 +29,7 @@ func LoadPsd(w ecs.World) error { } func loadPlatformMkxCircuit(world ecs.World, entryMap map[string]*ecs.Entry, pmcMap map[string]*ecs.Entry, - mkx *repository.Mkx, mkxEntry *ecs.Entry, psdEntry *ecs.Entry) { + mkx *repository.PsdPsl, mkxEntry *ecs.Entry, psdEntry *ecs.Entry) { platformMkx, ok := pmcMap[mkx.Psd().Id()] if !ok { platformMkx = NewPlatformMkxEntry(world, entryMap, mkx) @@ -103,7 +103,7 @@ func NewAsdEntry(world ecs.World, worldData *component.WorldData, psdId string, return entry } -func NewMkxEntry(world ecs.World, worldData *component.WorldData, mkx *repository.Mkx) *ecs.Entry { +func NewMkxEntry(world ecs.World, worldData *component.WorldData, mkx *repository.PsdPsl) *ecs.Entry { entry := world.Entry(world.Create(component.UidType, component.MkxType)) worldData.EntityMap[mkx.Id()] = entry component.UidType.SetValue(entry, component.Uid{Id: mkx.Id()}) @@ -149,7 +149,7 @@ func NewMkxEntry(world ecs.World, worldData *component.WorldData, mkx *repositor return entry } -func NewPlatformMkxEntry(world ecs.World, entryMap map[string]*ecs.Entry, mkx *repository.Mkx) *ecs.Entry { +func NewPlatformMkxEntry(world ecs.World, entryMap map[string]*ecs.Entry, mkx *repository.PsdPsl) *ecs.Entry { entry := world.Entry(world.Create(component.PlatformMkxCircuitType)) circuit := &component.PlatformMkxCircuit{} if pcbj := mkx.Pcbj(); pcbj != nil { diff --git a/proto/src/component/ckm.proto b/proto/src/component/ckm.proto index 3b14f7b..b3b4928 100644 --- a/proto/src/component/ckm.proto +++ b/proto/src/component/ckm.proto @@ -6,7 +6,7 @@ option go_package = "./component/component_data"; message CkmState { bool close = 1; - bool mms = 2; //门模式(true远程,false本地) + bool mms = 2; //门模式(false远程,true本地) bool mgz = 3; //门故障 //驱动状态(没有继电器时直接操作以下状态) diff --git a/proto/src/model.proto b/proto/src/model.proto index 5fbd92c..ce8a5b8 100644 --- a/proto/src/model.proto +++ b/proto/src/model.proto @@ -30,6 +30,7 @@ message Repository { repeated Route routes = 23; repeated Ckm ckms = 24; repeated Xcj xcjs = 25; + repeated CkmPsl ckmPsls = 26; //ISCS 编号[300,500] //ISCS管线 repeated Pipe pipes = 300; @@ -221,8 +222,9 @@ enum DeviceType { DeviceType_PowerScreen = 22; // 进路 DeviceType_Route = 23; - DeviceType_Ckm = 24; - DeviceType_Xcj = 25; + DeviceType_Ckm = 24; //车库门 + DeviceType_Xcj = 25; //洗车机 + DeviceType_CkmPsl = 26; //车库门PSL //--------ISCS 编号[300,500]------ //ISCS门磁 @@ -518,6 +520,16 @@ message Mkx { string mplaId = 18; //互锁接触按钮 string jxtcplaId = 19; //间隙探测旁路按钮 } +//车库门PSL +message CkmPsl { + string id= 1; + string ckmId = 2; + string gmaId = 3; //关门按钮 + string kmaId = 4; //开门按钮 + string mplaId = 5; //门旁路按钮 + string mmsaId = 6; //门模式按钮 +} + //站台 message Platform { enum PlatformDirection { diff --git a/repo/dto/cg_repo.pb.go b/repo/dto/cg_repo.pb.go index e9e54c5..1deee04 100644 --- a/repo/dto/cg_repo.pb.go +++ b/repo/dto/cg_repo.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.32.0 +// protoc-gen-go v1.33.0 // protoc v4.23.1 // source: cg_repo.proto diff --git a/repository/ckm_psl.go b/repository/ckm_psl.go new file mode 100644 index 0000000..f3c9c95 --- /dev/null +++ b/repository/ckm_psl.go @@ -0,0 +1,34 @@ +package repository + +import "joylink.club/rtsssimulation/repository/model/proto" + +type CkmPsl struct { + Identity + ckm *Ckm + kma *Button + gma *Button + mpla *Button + mmsa *Button +} + +func NewCkmPsl(id string) *CkmPsl { + return &CkmPsl{ + Identity: identity{id, proto.DeviceType_DeviceType_CkmPsl}, + } +} + +func (psl *CkmPsl) Ckm() *Ckm { + return psl.ckm +} +func (psl *CkmPsl) Kma() *Button { + return psl.kma +} +func (psl *CkmPsl) Gma() *Button { + return psl.gma +} +func (psl *CkmPsl) Mpla() *Button { + return psl.mpla +} +func (psl *CkmPsl) Mmsa() *Button { + return psl.mmsa +} diff --git a/repository/model/proto/model.pb.go b/repository/model/proto/model.pb.go index d6af06c..2f17e68 100644 --- a/repository/model/proto/model.pb.go +++ b/repository/model/proto/model.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.32.0 +// protoc-gen-go v1.33.0 // protoc v4.23.1 // source: model.proto @@ -50,9 +50,10 @@ const ( // 电源屏 DeviceType_DeviceType_PowerScreen DeviceType = 22 // 进路 - DeviceType_DeviceType_Route DeviceType = 23 - DeviceType_DeviceType_Ckm DeviceType = 24 - DeviceType_DeviceType_Xcj DeviceType = 25 //--------ISCS 编号[300,500]------ + DeviceType_DeviceType_Route DeviceType = 23 + DeviceType_DeviceType_Ckm DeviceType = 24 //车库门 + DeviceType_DeviceType_Xcj DeviceType = 25 //洗车机 + DeviceType_DeviceType_CkmPsl DeviceType = 26 //车库门PSL // ISCS门磁 DeviceType_DeviceType_DoorSensor DeviceType = 323 // ISCS进闸机 @@ -222,6 +223,7 @@ var ( 23: "DeviceType_Route", 24: "DeviceType_Ckm", 25: "DeviceType_Xcj", + 26: "DeviceType_CkmPsl", 323: "DeviceType_DoorSensor", 324: "DeviceType_EntranceGate", 325: "DeviceType_ExitGate", @@ -319,6 +321,7 @@ var ( "DeviceType_Route": 23, "DeviceType_Ckm": 24, "DeviceType_Xcj": 25, + "DeviceType_CkmPsl": 26, "DeviceType_DoorSensor": 323, "DeviceType_EntranceGate": 324, "DeviceType_ExitGate": 325, @@ -969,7 +972,7 @@ func (x Platform_PlatformDirection) Number() protoreflect.EnumNumber { // Deprecated: Use Platform_PlatformDirection.Descriptor instead. func (Platform_PlatformDirection) EnumDescriptor() ([]byte, []int) { - return file_model_proto_rawDescGZIP(), []int{24, 0} + return file_model_proto_rawDescGZIP(), []int{25, 0} } type Route_RouteType int32 @@ -1024,7 +1027,7 @@ func (x Route_RouteType) Number() protoreflect.EnumNumber { // Deprecated: Use Route_RouteType.Descriptor instead. func (Route_RouteType) EnumDescriptor() ([]byte, []int) { - return file_model_proto_rawDescGZIP(), []int{32, 0} + return file_model_proto_rawDescGZIP(), []int{33, 0} } // 风亭子类型 @@ -1071,7 +1074,7 @@ func (x AirPavilion_Type) Number() protoreflect.EnumNumber { // Deprecated: Use AirPavilion_Type.Descriptor instead. func (AirPavilion_Type) EnumDescriptor() ([]byte, []int) { - return file_model_proto_rawDescGZIP(), []int{46, 0} + return file_model_proto_rawDescGZIP(), []int{47, 0} } // 阀门子类型 @@ -1124,7 +1127,7 @@ func (x Valve_Type) Number() protoreflect.EnumNumber { // Deprecated: Use Valve_Type.Descriptor instead. func (Valve_Type) EnumDescriptor() ([]byte, []int) { - return file_model_proto_rawDescGZIP(), []int{47, 0} + return file_model_proto_rawDescGZIP(), []int{48, 0} } // 风机子类型 @@ -1177,7 +1180,7 @@ func (x Fan_Type) Number() protoreflect.EnumNumber { // Deprecated: Use Fan_Type.Descriptor instead. func (Fan_Type) EnumDescriptor() ([]byte, []int) { - return file_model_proto_rawDescGZIP(), []int{52, 0} + return file_model_proto_rawDescGZIP(), []int{53, 0} } type Repository struct { @@ -1210,6 +1213,7 @@ type Repository struct { Routes []*Route `protobuf:"bytes,23,rep,name=routes,proto3" json:"routes,omitempty"` Ckms []*Ckm `protobuf:"bytes,24,rep,name=ckms,proto3" json:"ckms,omitempty"` Xcjs []*Xcj `protobuf:"bytes,25,rep,name=xcjs,proto3" json:"xcjs,omitempty"` + CkmPsls []*CkmPsl `protobuf:"bytes,26,rep,name=ckmPsls,proto3" json:"ckmPsls,omitempty"` // ISCS 编号[300,500] // ISCS管线 Pipes []*Pipe `protobuf:"bytes,300,rep,name=pipes,proto3" json:"pipes,omitempty"` @@ -1462,6 +1466,13 @@ func (x *Repository) GetXcjs() []*Xcj { return nil } +func (x *Repository) GetCkmPsls() []*CkmPsl { + if x != nil { + return x.CkmPsls + } + return nil +} + func (x *Repository) GetPipes() []*Pipe { if x != nil { return x.Pipes @@ -3371,6 +3382,94 @@ func (x *Mkx) GetJxtcplaId() string { return "" } +// 车库门PSL +type CkmPsl struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + CkmId string `protobuf:"bytes,2,opt,name=ckmId,proto3" json:"ckmId,omitempty"` + GmaId string `protobuf:"bytes,3,opt,name=gmaId,proto3" json:"gmaId,omitempty"` //关门按钮 + KmaId string `protobuf:"bytes,4,opt,name=kmaId,proto3" json:"kmaId,omitempty"` //开门按钮 + MplaId string `protobuf:"bytes,5,opt,name=mplaId,proto3" json:"mplaId,omitempty"` //门旁路按钮 + MmsaId string `protobuf:"bytes,6,opt,name=mmsaId,proto3" json:"mmsaId,omitempty"` //门模式按钮 +} + +func (x *CkmPsl) Reset() { + *x = CkmPsl{} + if protoimpl.UnsafeEnabled { + mi := &file_model_proto_msgTypes[24] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CkmPsl) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CkmPsl) ProtoMessage() {} + +func (x *CkmPsl) ProtoReflect() protoreflect.Message { + mi := &file_model_proto_msgTypes[24] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CkmPsl.ProtoReflect.Descriptor instead. +func (*CkmPsl) Descriptor() ([]byte, []int) { + return file_model_proto_rawDescGZIP(), []int{24} +} + +func (x *CkmPsl) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *CkmPsl) GetCkmId() string { + if x != nil { + return x.CkmId + } + return "" +} + +func (x *CkmPsl) GetGmaId() string { + if x != nil { + return x.GmaId + } + return "" +} + +func (x *CkmPsl) GetKmaId() string { + if x != nil { + return x.KmaId + } + return "" +} + +func (x *CkmPsl) GetMplaId() string { + if x != nil { + return x.MplaId + } + return "" +} + +func (x *CkmPsl) GetMmsaId() string { + if x != nil { + return x.MmsaId + } + return "" +} + // 站台 type Platform struct { state protoimpl.MessageState @@ -3387,7 +3486,7 @@ type Platform struct { func (x *Platform) Reset() { *x = Platform{} if protoimpl.UnsafeEnabled { - mi := &file_model_proto_msgTypes[24] + mi := &file_model_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3400,7 +3499,7 @@ func (x *Platform) String() string { func (*Platform) ProtoMessage() {} func (x *Platform) ProtoReflect() protoreflect.Message { - mi := &file_model_proto_msgTypes[24] + mi := &file_model_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3413,7 +3512,7 @@ func (x *Platform) ProtoReflect() protoreflect.Message { // Deprecated: Use Platform.ProtoReflect.Descriptor instead. func (*Platform) Descriptor() ([]byte, []int) { - return file_model_proto_rawDescGZIP(), []int{24} + return file_model_proto_rawDescGZIP(), []int{25} } func (x *Platform) GetId() string { @@ -3465,7 +3564,7 @@ type Key struct { func (x *Key) Reset() { *x = Key{} if protoimpl.UnsafeEnabled { - mi := &file_model_proto_msgTypes[25] + mi := &file_model_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3478,7 +3577,7 @@ func (x *Key) String() string { func (*Key) ProtoMessage() {} func (x *Key) ProtoReflect() protoreflect.Message { - mi := &file_model_proto_msgTypes[25] + mi := &file_model_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3491,7 +3590,7 @@ func (x *Key) ProtoReflect() protoreflect.Message { // Deprecated: Use Key.ProtoReflect.Descriptor instead. func (*Key) Descriptor() ([]byte, []int) { - return file_model_proto_rawDescGZIP(), []int{25} + return file_model_proto_rawDescGZIP(), []int{26} } func (x *Key) GetId() string { @@ -3531,7 +3630,7 @@ type CentralizedStationRef struct { func (x *CentralizedStationRef) Reset() { *x = CentralizedStationRef{} if protoimpl.UnsafeEnabled { - mi := &file_model_proto_msgTypes[26] + mi := &file_model_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3544,7 +3643,7 @@ func (x *CentralizedStationRef) String() string { func (*CentralizedStationRef) ProtoMessage() {} func (x *CentralizedStationRef) ProtoReflect() protoreflect.Message { - mi := &file_model_proto_msgTypes[26] + mi := &file_model_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3557,7 +3656,7 @@ func (x *CentralizedStationRef) ProtoReflect() protoreflect.Message { // Deprecated: Use CentralizedStationRef.ProtoReflect.Descriptor instead. func (*CentralizedStationRef) Descriptor() ([]byte, []int) { - return file_model_proto_rawDescGZIP(), []int{26} + return file_model_proto_rawDescGZIP(), []int{27} } func (x *CentralizedStationRef) GetStationId() string { @@ -3608,7 +3707,7 @@ type CjData struct { func (x *CjData) Reset() { *x = CjData{} if protoimpl.UnsafeEnabled { - mi := &file_model_proto_msgTypes[27] + mi := &file_model_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3621,7 +3720,7 @@ func (x *CjData) String() string { func (*CjData) ProtoMessage() {} func (x *CjData) ProtoReflect() protoreflect.Message { - mi := &file_model_proto_msgTypes[27] + mi := &file_model_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3634,7 +3733,7 @@ func (x *CjData) ProtoReflect() protoreflect.Message { // Deprecated: Use CjData.ProtoReflect.Descriptor instead. func (*CjData) Descriptor() ([]byte, []int) { - return file_model_proto_rawDescGZIP(), []int{27} + return file_model_proto_rawDescGZIP(), []int{28} } func (x *CjData) GetRow() int32 { @@ -3670,7 +3769,7 @@ type CjDataItem struct { func (x *CjDataItem) Reset() { *x = CjDataItem{} if protoimpl.UnsafeEnabled { - mi := &file_model_proto_msgTypes[28] + mi := &file_model_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3683,7 +3782,7 @@ func (x *CjDataItem) String() string { func (*CjDataItem) ProtoMessage() {} func (x *CjDataItem) ProtoReflect() protoreflect.Message { - mi := &file_model_proto_msgTypes[28] + mi := &file_model_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3696,7 +3795,7 @@ func (x *CjDataItem) ProtoReflect() protoreflect.Message { // Deprecated: Use CjDataItem.ProtoReflect.Descriptor instead. func (*CjDataItem) Descriptor() ([]byte, []int) { - return file_model_proto_rawDescGZIP(), []int{28} + return file_model_proto_rawDescGZIP(), []int{29} } func (x *CjDataItem) GetRelayId() string { @@ -3726,7 +3825,7 @@ type QdData struct { func (x *QdData) Reset() { *x = QdData{} if protoimpl.UnsafeEnabled { - mi := &file_model_proto_msgTypes[29] + mi := &file_model_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3739,7 +3838,7 @@ func (x *QdData) String() string { func (*QdData) ProtoMessage() {} func (x *QdData) ProtoReflect() protoreflect.Message { - mi := &file_model_proto_msgTypes[29] + mi := &file_model_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3752,7 +3851,7 @@ func (x *QdData) ProtoReflect() protoreflect.Message { // Deprecated: Use QdData.ProtoReflect.Descriptor instead. func (*QdData) Descriptor() ([]byte, []int) { - return file_model_proto_rawDescGZIP(), []int{29} + return file_model_proto_rawDescGZIP(), []int{30} } func (x *QdData) GetRow() int32 { @@ -3790,7 +3889,7 @@ type AsdGroup struct { func (x *AsdGroup) Reset() { *x = AsdGroup{} if protoimpl.UnsafeEnabled { - mi := &file_model_proto_msgTypes[30] + mi := &file_model_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3803,7 +3902,7 @@ func (x *AsdGroup) String() string { func (*AsdGroup) ProtoMessage() {} func (x *AsdGroup) ProtoReflect() protoreflect.Message { - mi := &file_model_proto_msgTypes[30] + mi := &file_model_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3816,7 +3915,7 @@ func (x *AsdGroup) ProtoReflect() protoreflect.Message { // Deprecated: Use AsdGroup.ProtoReflect.Descriptor instead. func (*AsdGroup) Descriptor() ([]byte, []int) { - return file_model_proto_rawDescGZIP(), []int{30} + return file_model_proto_rawDescGZIP(), []int{31} } func (x *AsdGroup) GetGroup() int32 { @@ -3853,7 +3952,7 @@ type CiSectionCodePoint struct { func (x *CiSectionCodePoint) Reset() { *x = CiSectionCodePoint{} if protoimpl.UnsafeEnabled { - mi := &file_model_proto_msgTypes[31] + mi := &file_model_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3866,7 +3965,7 @@ func (x *CiSectionCodePoint) String() string { func (*CiSectionCodePoint) ProtoMessage() {} func (x *CiSectionCodePoint) ProtoReflect() protoreflect.Message { - mi := &file_model_proto_msgTypes[31] + mi := &file_model_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3879,7 +3978,7 @@ func (x *CiSectionCodePoint) ProtoReflect() protoreflect.Message { // Deprecated: Use CiSectionCodePoint.ProtoReflect.Descriptor instead. func (*CiSectionCodePoint) Descriptor() ([]byte, []int) { - return file_model_proto_rawDescGZIP(), []int{31} + return file_model_proto_rawDescGZIP(), []int{32} } func (x *CiSectionCodePoint) GetRow() int32 { @@ -3921,7 +4020,7 @@ type Route struct { func (x *Route) Reset() { *x = Route{} if protoimpl.UnsafeEnabled { - mi := &file_model_proto_msgTypes[32] + mi := &file_model_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3934,7 +4033,7 @@ func (x *Route) String() string { func (*Route) ProtoMessage() {} func (x *Route) ProtoReflect() protoreflect.Message { - mi := &file_model_proto_msgTypes[32] + mi := &file_model_proto_msgTypes[33] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3947,7 +4046,7 @@ func (x *Route) ProtoReflect() protoreflect.Message { // Deprecated: Use Route.ProtoReflect.Descriptor instead. func (*Route) Descriptor() ([]byte, []int) { - return file_model_proto_rawDescGZIP(), []int{32} + return file_model_proto_rawDescGZIP(), []int{33} } func (x *Route) GetId() string { @@ -4023,7 +4122,7 @@ type Pipe struct { func (x *Pipe) Reset() { *x = Pipe{} if protoimpl.UnsafeEnabled { - mi := &file_model_proto_msgTypes[33] + mi := &file_model_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4036,7 +4135,7 @@ func (x *Pipe) String() string { func (*Pipe) ProtoMessage() {} func (x *Pipe) ProtoReflect() protoreflect.Message { - mi := &file_model_proto_msgTypes[33] + mi := &file_model_proto_msgTypes[34] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4049,7 +4148,7 @@ func (x *Pipe) ProtoReflect() protoreflect.Message { // Deprecated: Use Pipe.ProtoReflect.Descriptor instead. func (*Pipe) Descriptor() ([]byte, []int) { - return file_model_proto_rawDescGZIP(), []int{33} + return file_model_proto_rawDescGZIP(), []int{34} } func (x *Pipe) GetId() string { @@ -4095,7 +4194,7 @@ type PipeFitting struct { func (x *PipeFitting) Reset() { *x = PipeFitting{} if protoimpl.UnsafeEnabled { - mi := &file_model_proto_msgTypes[34] + mi := &file_model_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4108,7 +4207,7 @@ func (x *PipeFitting) String() string { func (*PipeFitting) ProtoMessage() {} func (x *PipeFitting) ProtoReflect() protoreflect.Message { - mi := &file_model_proto_msgTypes[34] + mi := &file_model_proto_msgTypes[35] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4121,7 +4220,7 @@ func (x *PipeFitting) ProtoReflect() protoreflect.Message { // Deprecated: Use PipeFitting.ProtoReflect.Descriptor instead. func (*PipeFitting) Descriptor() ([]byte, []int) { - return file_model_proto_rawDescGZIP(), []int{34} + return file_model_proto_rawDescGZIP(), []int{35} } func (x *PipeFitting) GetId() string { @@ -4159,7 +4258,7 @@ type CircuitBreaker struct { func (x *CircuitBreaker) Reset() { *x = CircuitBreaker{} if protoimpl.UnsafeEnabled { - mi := &file_model_proto_msgTypes[35] + mi := &file_model_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4172,7 +4271,7 @@ func (x *CircuitBreaker) String() string { func (*CircuitBreaker) ProtoMessage() {} func (x *CircuitBreaker) ProtoReflect() protoreflect.Message { - mi := &file_model_proto_msgTypes[35] + mi := &file_model_proto_msgTypes[36] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4185,7 +4284,7 @@ func (x *CircuitBreaker) ProtoReflect() protoreflect.Message { // Deprecated: Use CircuitBreaker.ProtoReflect.Descriptor instead. func (*CircuitBreaker) Descriptor() ([]byte, []int) { - return file_model_proto_rawDescGZIP(), []int{35} + return file_model_proto_rawDescGZIP(), []int{36} } func (x *CircuitBreaker) GetId() string { @@ -4216,7 +4315,7 @@ type ThreePositionSwitch struct { func (x *ThreePositionSwitch) Reset() { *x = ThreePositionSwitch{} if protoimpl.UnsafeEnabled { - mi := &file_model_proto_msgTypes[36] + mi := &file_model_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4229,7 +4328,7 @@ func (x *ThreePositionSwitch) String() string { func (*ThreePositionSwitch) ProtoMessage() {} func (x *ThreePositionSwitch) ProtoReflect() protoreflect.Message { - mi := &file_model_proto_msgTypes[36] + mi := &file_model_proto_msgTypes[37] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4242,7 +4341,7 @@ func (x *ThreePositionSwitch) ProtoReflect() protoreflect.Message { // Deprecated: Use ThreePositionSwitch.ProtoReflect.Descriptor instead. func (*ThreePositionSwitch) Descriptor() ([]byte, []int) { - return file_model_proto_rawDescGZIP(), []int{36} + return file_model_proto_rawDescGZIP(), []int{37} } func (x *ThreePositionSwitch) GetId() string { @@ -4273,7 +4372,7 @@ type HandcartSwitch struct { func (x *HandcartSwitch) Reset() { *x = HandcartSwitch{} if protoimpl.UnsafeEnabled { - mi := &file_model_proto_msgTypes[37] + mi := &file_model_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4286,7 +4385,7 @@ func (x *HandcartSwitch) String() string { func (*HandcartSwitch) ProtoMessage() {} func (x *HandcartSwitch) ProtoReflect() protoreflect.Message { - mi := &file_model_proto_msgTypes[37] + mi := &file_model_proto_msgTypes[38] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4299,7 +4398,7 @@ func (x *HandcartSwitch) ProtoReflect() protoreflect.Message { // Deprecated: Use HandcartSwitch.ProtoReflect.Descriptor instead. func (*HandcartSwitch) Descriptor() ([]byte, []int) { - return file_model_proto_rawDescGZIP(), []int{37} + return file_model_proto_rawDescGZIP(), []int{38} } func (x *HandcartSwitch) GetId() string { @@ -4330,7 +4429,7 @@ type Rectifier struct { func (x *Rectifier) Reset() { *x = Rectifier{} if protoimpl.UnsafeEnabled { - mi := &file_model_proto_msgTypes[38] + mi := &file_model_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4343,7 +4442,7 @@ func (x *Rectifier) String() string { func (*Rectifier) ProtoMessage() {} func (x *Rectifier) ProtoReflect() protoreflect.Message { - mi := &file_model_proto_msgTypes[38] + mi := &file_model_proto_msgTypes[39] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4356,7 +4455,7 @@ func (x *Rectifier) ProtoReflect() protoreflect.Message { // Deprecated: Use Rectifier.ProtoReflect.Descriptor instead. func (*Rectifier) Descriptor() ([]byte, []int) { - return file_model_proto_rawDescGZIP(), []int{38} + return file_model_proto_rawDescGZIP(), []int{39} } func (x *Rectifier) GetId() string { @@ -4387,7 +4486,7 @@ type Disconnector struct { func (x *Disconnector) Reset() { *x = Disconnector{} if protoimpl.UnsafeEnabled { - mi := &file_model_proto_msgTypes[39] + mi := &file_model_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4400,7 +4499,7 @@ func (x *Disconnector) String() string { func (*Disconnector) ProtoMessage() {} func (x *Disconnector) ProtoReflect() protoreflect.Message { - mi := &file_model_proto_msgTypes[39] + mi := &file_model_proto_msgTypes[40] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4413,7 +4512,7 @@ func (x *Disconnector) ProtoReflect() protoreflect.Message { // Deprecated: Use Disconnector.ProtoReflect.Descriptor instead. func (*Disconnector) Descriptor() ([]byte, []int) { - return file_model_proto_rawDescGZIP(), []int{39} + return file_model_proto_rawDescGZIP(), []int{40} } func (x *Disconnector) GetId() string { @@ -4446,7 +4545,7 @@ type VoltageTransformer struct { func (x *VoltageTransformer) Reset() { *x = VoltageTransformer{} if protoimpl.UnsafeEnabled { - mi := &file_model_proto_msgTypes[40] + mi := &file_model_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4459,7 +4558,7 @@ func (x *VoltageTransformer) String() string { func (*VoltageTransformer) ProtoMessage() {} func (x *VoltageTransformer) ProtoReflect() protoreflect.Message { - mi := &file_model_proto_msgTypes[40] + mi := &file_model_proto_msgTypes[41] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4472,7 +4571,7 @@ func (x *VoltageTransformer) ProtoReflect() protoreflect.Message { // Deprecated: Use VoltageTransformer.ProtoReflect.Descriptor instead. func (*VoltageTransformer) Descriptor() ([]byte, []int) { - return file_model_proto_rawDescGZIP(), []int{40} + return file_model_proto_rawDescGZIP(), []int{41} } func (x *VoltageTransformer) GetId() string { @@ -4523,7 +4622,7 @@ type PowerSource struct { func (x *PowerSource) Reset() { *x = PowerSource{} if protoimpl.UnsafeEnabled { - mi := &file_model_proto_msgTypes[41] + mi := &file_model_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4536,7 +4635,7 @@ func (x *PowerSource) String() string { func (*PowerSource) ProtoMessage() {} func (x *PowerSource) ProtoReflect() protoreflect.Message { - mi := &file_model_proto_msgTypes[41] + mi := &file_model_proto_msgTypes[42] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4549,7 +4648,7 @@ func (x *PowerSource) ProtoReflect() protoreflect.Message { // Deprecated: Use PowerSource.ProtoReflect.Descriptor instead. func (*PowerSource) Descriptor() ([]byte, []int) { - return file_model_proto_rawDescGZIP(), []int{41} + return file_model_proto_rawDescGZIP(), []int{42} } func (x *PowerSource) GetId() string { @@ -4600,7 +4699,7 @@ type LightningArrester struct { func (x *LightningArrester) Reset() { *x = LightningArrester{} if protoimpl.UnsafeEnabled { - mi := &file_model_proto_msgTypes[42] + mi := &file_model_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4613,7 +4712,7 @@ func (x *LightningArrester) String() string { func (*LightningArrester) ProtoMessage() {} func (x *LightningArrester) ProtoReflect() protoreflect.Message { - mi := &file_model_proto_msgTypes[42] + mi := &file_model_proto_msgTypes[43] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4626,7 +4725,7 @@ func (x *LightningArrester) ProtoReflect() protoreflect.Message { // Deprecated: Use LightningArrester.ProtoReflect.Descriptor instead. func (*LightningArrester) Descriptor() ([]byte, []int) { - return file_model_proto_rawDescGZIP(), []int{42} + return file_model_proto_rawDescGZIP(), []int{43} } func (x *LightningArrester) GetId() string { @@ -4657,7 +4756,7 @@ type EarthingDevice struct { func (x *EarthingDevice) Reset() { *x = EarthingDevice{} if protoimpl.UnsafeEnabled { - mi := &file_model_proto_msgTypes[43] + mi := &file_model_proto_msgTypes[44] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4670,7 +4769,7 @@ func (x *EarthingDevice) String() string { func (*EarthingDevice) ProtoMessage() {} func (x *EarthingDevice) ProtoReflect() protoreflect.Message { - mi := &file_model_proto_msgTypes[43] + mi := &file_model_proto_msgTypes[44] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4683,7 +4782,7 @@ func (x *EarthingDevice) ProtoReflect() protoreflect.Message { // Deprecated: Use EarthingDevice.ProtoReflect.Descriptor instead. func (*EarthingDevice) Descriptor() ([]byte, []int) { - return file_model_proto_rawDescGZIP(), []int{43} + return file_model_proto_rawDescGZIP(), []int{44} } func (x *EarthingDevice) GetId() string { @@ -4713,7 +4812,7 @@ type NetworkSwitch struct { func (x *NetworkSwitch) Reset() { *x = NetworkSwitch{} if protoimpl.UnsafeEnabled { - mi := &file_model_proto_msgTypes[44] + mi := &file_model_proto_msgTypes[45] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4726,7 +4825,7 @@ func (x *NetworkSwitch) String() string { func (*NetworkSwitch) ProtoMessage() {} func (x *NetworkSwitch) ProtoReflect() protoreflect.Message { - mi := &file_model_proto_msgTypes[44] + mi := &file_model_proto_msgTypes[45] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4739,7 +4838,7 @@ func (x *NetworkSwitch) ProtoReflect() protoreflect.Message { // Deprecated: Use NetworkSwitch.ProtoReflect.Descriptor instead. func (*NetworkSwitch) Descriptor() ([]byte, []int) { - return file_model_proto_rawDescGZIP(), []int{44} + return file_model_proto_rawDescGZIP(), []int{45} } func (x *NetworkSwitch) GetId() string { @@ -4769,7 +4868,7 @@ type WireCabinet struct { func (x *WireCabinet) Reset() { *x = WireCabinet{} if protoimpl.UnsafeEnabled { - mi := &file_model_proto_msgTypes[45] + mi := &file_model_proto_msgTypes[46] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4782,7 +4881,7 @@ func (x *WireCabinet) String() string { func (*WireCabinet) ProtoMessage() {} func (x *WireCabinet) ProtoReflect() protoreflect.Message { - mi := &file_model_proto_msgTypes[45] + mi := &file_model_proto_msgTypes[46] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4795,7 +4894,7 @@ func (x *WireCabinet) ProtoReflect() protoreflect.Message { // Deprecated: Use WireCabinet.ProtoReflect.Descriptor instead. func (*WireCabinet) Descriptor() ([]byte, []int) { - return file_model_proto_rawDescGZIP(), []int{45} + return file_model_proto_rawDescGZIP(), []int{46} } func (x *WireCabinet) GetId() string { @@ -4826,7 +4925,7 @@ type AirPavilion struct { func (x *AirPavilion) Reset() { *x = AirPavilion{} if protoimpl.UnsafeEnabled { - mi := &file_model_proto_msgTypes[46] + mi := &file_model_proto_msgTypes[47] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4839,7 +4938,7 @@ func (x *AirPavilion) String() string { func (*AirPavilion) ProtoMessage() {} func (x *AirPavilion) ProtoReflect() protoreflect.Message { - mi := &file_model_proto_msgTypes[46] + mi := &file_model_proto_msgTypes[47] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4852,7 +4951,7 @@ func (x *AirPavilion) ProtoReflect() protoreflect.Message { // Deprecated: Use AirPavilion.ProtoReflect.Descriptor instead. func (*AirPavilion) Descriptor() ([]byte, []int) { - return file_model_proto_rawDescGZIP(), []int{46} + return file_model_proto_rawDescGZIP(), []int{47} } func (x *AirPavilion) GetId() string { @@ -4890,7 +4989,7 @@ type Valve struct { func (x *Valve) Reset() { *x = Valve{} if protoimpl.UnsafeEnabled { - mi := &file_model_proto_msgTypes[47] + mi := &file_model_proto_msgTypes[48] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4903,7 +5002,7 @@ func (x *Valve) String() string { func (*Valve) ProtoMessage() {} func (x *Valve) ProtoReflect() protoreflect.Message { - mi := &file_model_proto_msgTypes[47] + mi := &file_model_proto_msgTypes[48] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4916,7 +5015,7 @@ func (x *Valve) ProtoReflect() protoreflect.Message { // Deprecated: Use Valve.ProtoReflect.Descriptor instead. func (*Valve) Descriptor() ([]byte, []int) { - return file_model_proto_rawDescGZIP(), []int{47} + return file_model_proto_rawDescGZIP(), []int{48} } func (x *Valve) GetId() string { @@ -4954,7 +5053,7 @@ type GasMixingChamber struct { func (x *GasMixingChamber) Reset() { *x = GasMixingChamber{} if protoimpl.UnsafeEnabled { - mi := &file_model_proto_msgTypes[48] + mi := &file_model_proto_msgTypes[49] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4967,7 +5066,7 @@ func (x *GasMixingChamber) String() string { func (*GasMixingChamber) ProtoMessage() {} func (x *GasMixingChamber) ProtoReflect() protoreflect.Message { - mi := &file_model_proto_msgTypes[48] + mi := &file_model_proto_msgTypes[49] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4980,7 +5079,7 @@ func (x *GasMixingChamber) ProtoReflect() protoreflect.Message { // Deprecated: Use GasMixingChamber.ProtoReflect.Descriptor instead. func (*GasMixingChamber) Descriptor() ([]byte, []int) { - return file_model_proto_rawDescGZIP(), []int{48} + return file_model_proto_rawDescGZIP(), []int{49} } func (x *GasMixingChamber) GetId() string { @@ -5012,7 +5111,7 @@ type CombinationAirConditioner struct { func (x *CombinationAirConditioner) Reset() { *x = CombinationAirConditioner{} if protoimpl.UnsafeEnabled { - mi := &file_model_proto_msgTypes[49] + mi := &file_model_proto_msgTypes[50] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5025,7 +5124,7 @@ func (x *CombinationAirConditioner) String() string { func (*CombinationAirConditioner) ProtoMessage() {} func (x *CombinationAirConditioner) ProtoReflect() protoreflect.Message { - mi := &file_model_proto_msgTypes[49] + mi := &file_model_proto_msgTypes[50] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5038,7 +5137,7 @@ func (x *CombinationAirConditioner) ProtoReflect() protoreflect.Message { // Deprecated: Use CombinationAirConditioner.ProtoReflect.Descriptor instead. func (*CombinationAirConditioner) Descriptor() ([]byte, []int) { - return file_model_proto_rawDescGZIP(), []int{49} + return file_model_proto_rawDescGZIP(), []int{50} } func (x *CombinationAirConditioner) GetId() string { @@ -5069,7 +5168,7 @@ type AirPurificationDevice struct { func (x *AirPurificationDevice) Reset() { *x = AirPurificationDevice{} if protoimpl.UnsafeEnabled { - mi := &file_model_proto_msgTypes[50] + mi := &file_model_proto_msgTypes[51] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5082,7 +5181,7 @@ func (x *AirPurificationDevice) String() string { func (*AirPurificationDevice) ProtoMessage() {} func (x *AirPurificationDevice) ProtoReflect() protoreflect.Message { - mi := &file_model_proto_msgTypes[50] + mi := &file_model_proto_msgTypes[51] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5095,7 +5194,7 @@ func (x *AirPurificationDevice) ProtoReflect() protoreflect.Message { // Deprecated: Use AirPurificationDevice.ProtoReflect.Descriptor instead. func (*AirPurificationDevice) Descriptor() ([]byte, []int) { - return file_model_proto_rawDescGZIP(), []int{50} + return file_model_proto_rawDescGZIP(), []int{51} } func (x *AirPurificationDevice) GetId() string { @@ -5125,7 +5224,7 @@ type AirCurtain struct { func (x *AirCurtain) Reset() { *x = AirCurtain{} if protoimpl.UnsafeEnabled { - mi := &file_model_proto_msgTypes[51] + mi := &file_model_proto_msgTypes[52] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5138,7 +5237,7 @@ func (x *AirCurtain) String() string { func (*AirCurtain) ProtoMessage() {} func (x *AirCurtain) ProtoReflect() protoreflect.Message { - mi := &file_model_proto_msgTypes[51] + mi := &file_model_proto_msgTypes[52] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5151,7 +5250,7 @@ func (x *AirCurtain) ProtoReflect() protoreflect.Message { // Deprecated: Use AirCurtain.ProtoReflect.Descriptor instead. func (*AirCurtain) Descriptor() ([]byte, []int) { - return file_model_proto_rawDescGZIP(), []int{51} + return file_model_proto_rawDescGZIP(), []int{52} } func (x *AirCurtain) GetId() string { @@ -5182,7 +5281,7 @@ type Fan struct { func (x *Fan) Reset() { *x = Fan{} if protoimpl.UnsafeEnabled { - mi := &file_model_proto_msgTypes[52] + mi := &file_model_proto_msgTypes[53] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5195,7 +5294,7 @@ func (x *Fan) String() string { func (*Fan) ProtoMessage() {} func (x *Fan) ProtoReflect() protoreflect.Message { - mi := &file_model_proto_msgTypes[52] + mi := &file_model_proto_msgTypes[53] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5208,7 +5307,7 @@ func (x *Fan) ProtoReflect() protoreflect.Message { // Deprecated: Use Fan.ProtoReflect.Descriptor instead. func (*Fan) Descriptor() ([]byte, []int) { - return file_model_proto_rawDescGZIP(), []int{52} + return file_model_proto_rawDescGZIP(), []int{53} } func (x *Fan) GetId() string { @@ -5248,7 +5347,7 @@ type GasEnvironment struct { func (x *GasEnvironment) Reset() { *x = GasEnvironment{} if protoimpl.UnsafeEnabled { - mi := &file_model_proto_msgTypes[53] + mi := &file_model_proto_msgTypes[54] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5261,7 +5360,7 @@ func (x *GasEnvironment) String() string { func (*GasEnvironment) ProtoMessage() {} func (x *GasEnvironment) ProtoReflect() protoreflect.Message { - mi := &file_model_proto_msgTypes[53] + mi := &file_model_proto_msgTypes[54] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5274,7 +5373,7 @@ func (x *GasEnvironment) ProtoReflect() protoreflect.Message { // Deprecated: Use GasEnvironment.ProtoReflect.Descriptor instead. func (*GasEnvironment) Descriptor() ([]byte, []int) { - return file_model_proto_rawDescGZIP(), []int{53} + return file_model_proto_rawDescGZIP(), []int{54} } func (x *GasEnvironment) GetId() string { @@ -5304,7 +5403,7 @@ type Ckm struct { func (x *Ckm) Reset() { *x = Ckm{} if protoimpl.UnsafeEnabled { - mi := &file_model_proto_msgTypes[54] + mi := &file_model_proto_msgTypes[55] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5317,7 +5416,7 @@ func (x *Ckm) String() string { func (*Ckm) ProtoMessage() {} func (x *Ckm) ProtoReflect() protoreflect.Message { - mi := &file_model_proto_msgTypes[54] + mi := &file_model_proto_msgTypes[55] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5330,7 +5429,7 @@ func (x *Ckm) ProtoReflect() protoreflect.Message { // Deprecated: Use Ckm.ProtoReflect.Descriptor instead. func (*Ckm) Descriptor() ([]byte, []int) { - return file_model_proto_rawDescGZIP(), []int{54} + return file_model_proto_rawDescGZIP(), []int{55} } func (x *Ckm) GetId() string { @@ -5360,7 +5459,7 @@ type Xcj struct { func (x *Xcj) Reset() { *x = Xcj{} if protoimpl.UnsafeEnabled { - mi := &file_model_proto_msgTypes[55] + mi := &file_model_proto_msgTypes[56] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5373,7 +5472,7 @@ func (x *Xcj) String() string { func (*Xcj) ProtoMessage() {} func (x *Xcj) ProtoReflect() protoreflect.Message { - mi := &file_model_proto_msgTypes[55] + mi := &file_model_proto_msgTypes[56] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5386,7 +5485,7 @@ func (x *Xcj) ProtoReflect() protoreflect.Message { // Deprecated: Use Xcj.ProtoReflect.Descriptor instead. func (*Xcj) Descriptor() ([]byte, []int) { - return file_model_proto_rawDescGZIP(), []int{55} + return file_model_proto_rawDescGZIP(), []int{56} } func (x *Xcj) GetId() string { @@ -5415,7 +5514,7 @@ type Route_TurnoutPosition struct { func (x *Route_TurnoutPosition) Reset() { *x = Route_TurnoutPosition{} if protoimpl.UnsafeEnabled { - mi := &file_model_proto_msgTypes[56] + mi := &file_model_proto_msgTypes[57] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5428,7 +5527,7 @@ func (x *Route_TurnoutPosition) String() string { func (*Route_TurnoutPosition) ProtoMessage() {} func (x *Route_TurnoutPosition) ProtoReflect() protoreflect.Message { - mi := &file_model_proto_msgTypes[56] + mi := &file_model_proto_msgTypes[57] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5441,7 +5540,7 @@ func (x *Route_TurnoutPosition) ProtoReflect() protoreflect.Message { // Deprecated: Use Route_TurnoutPosition.ProtoReflect.Descriptor instead. func (*Route_TurnoutPosition) Descriptor() ([]byte, []int) { - return file_model_proto_rawDescGZIP(), []int{32, 0} + return file_model_proto_rawDescGZIP(), []int{33, 0} } func (x *Route_TurnoutPosition) GetId() string { @@ -5462,7 +5561,7 @@ var File_model_proto protoreflect.FileDescriptor var file_model_proto_rawDesc = []byte{ 0x0a, 0x0b, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x05, 0x6d, - 0x6f, 0x64, 0x65, 0x6c, 0x22, 0xc0, 0x13, 0x0a, 0x0a, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, + 0x6f, 0x64, 0x65, 0x6c, 0x22, 0xe9, 0x13, 0x0a, 0x0a, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x42, 0x0a, @@ -5535,778 +5634,791 @@ var file_model_proto_rawDesc = []byte{ 0x73, 0x18, 0x18, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x43, 0x6b, 0x6d, 0x52, 0x04, 0x63, 0x6b, 0x6d, 0x73, 0x12, 0x1e, 0x0a, 0x04, 0x78, 0x63, 0x6a, 0x73, 0x18, 0x19, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, - 0x58, 0x63, 0x6a, 0x52, 0x04, 0x78, 0x63, 0x6a, 0x73, 0x12, 0x22, 0x0a, 0x05, 0x70, 0x69, 0x70, - 0x65, 0x73, 0x18, 0xac, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x6d, 0x6f, 0x64, 0x65, - 0x6c, 0x2e, 0x50, 0x69, 0x70, 0x65, 0x52, 0x05, 0x70, 0x69, 0x70, 0x65, 0x73, 0x12, 0x37, 0x0a, - 0x0c, 0x70, 0x69, 0x70, 0x65, 0x46, 0x69, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0xad, 0x02, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x50, 0x69, 0x70, - 0x65, 0x46, 0x69, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x0c, 0x70, 0x69, 0x70, 0x65, 0x46, 0x69, - 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x40, 0x0a, 0x0f, 0x63, 0x69, 0x72, 0x63, 0x75, 0x69, - 0x74, 0x42, 0x72, 0x65, 0x61, 0x6b, 0x65, 0x72, 0x73, 0x18, 0xae, 0x02, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x15, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x43, 0x69, 0x72, 0x63, 0x75, 0x69, 0x74, - 0x42, 0x72, 0x65, 0x61, 0x6b, 0x65, 0x72, 0x52, 0x0f, 0x63, 0x69, 0x72, 0x63, 0x75, 0x69, 0x74, - 0x42, 0x72, 0x65, 0x61, 0x6b, 0x65, 0x72, 0x73, 0x12, 0x51, 0x0a, 0x15, 0x74, 0x68, 0x72, 0x65, - 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x65, - 0x73, 0x18, 0xaf, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, - 0x2e, 0x54, 0x68, 0x72, 0x65, 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x77, - 0x69, 0x74, 0x63, 0x68, 0x52, 0x15, 0x74, 0x68, 0x72, 0x65, 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x65, 0x73, 0x12, 0x42, 0x0a, 0x10, 0x68, - 0x61, 0x6e, 0x64, 0x63, 0x61, 0x72, 0x74, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x65, 0x73, 0x18, - 0xb0, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x48, - 0x61, 0x6e, 0x64, 0x63, 0x61, 0x72, 0x74, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x52, 0x10, 0x68, - 0x61, 0x6e, 0x64, 0x63, 0x61, 0x72, 0x74, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x65, 0x73, 0x12, - 0x31, 0x0a, 0x0a, 0x72, 0x65, 0x63, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x18, 0xb1, 0x02, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x52, 0x65, 0x63, - 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x0a, 0x72, 0x65, 0x63, 0x74, 0x69, 0x66, 0x69, 0x65, - 0x72, 0x73, 0x12, 0x3a, 0x0a, 0x0d, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, - 0x6f, 0x72, 0x73, 0x18, 0xb2, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6d, 0x6f, 0x64, - 0x65, 0x6c, 0x2e, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, - 0x0d, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x12, 0x4c, - 0x0a, 0x13, 0x76, 0x6f, 0x6c, 0x74, 0x61, 0x67, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, - 0x72, 0x6d, 0x65, 0x72, 0x73, 0x18, 0xb3, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x6d, - 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x56, 0x6f, 0x6c, 0x74, 0x61, 0x67, 0x65, 0x54, 0x72, 0x61, 0x6e, - 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x72, 0x52, 0x13, 0x76, 0x6f, 0x6c, 0x74, 0x61, 0x67, 0x65, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x72, 0x73, 0x12, 0x37, 0x0a, 0x0c, - 0x70, 0x6f, 0x77, 0x65, 0x72, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0xb4, 0x02, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x50, 0x6f, 0x77, 0x65, - 0x72, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x0c, 0x70, 0x6f, 0x77, 0x65, 0x72, 0x53, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x49, 0x0a, 0x12, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x6e, 0x69, - 0x6e, 0x67, 0x41, 0x72, 0x72, 0x65, 0x73, 0x74, 0x65, 0x72, 0x73, 0x18, 0xb5, 0x02, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x4c, 0x69, 0x67, 0x68, 0x74, - 0x6e, 0x69, 0x6e, 0x67, 0x41, 0x72, 0x72, 0x65, 0x73, 0x74, 0x65, 0x72, 0x52, 0x12, 0x6c, 0x69, - 0x67, 0x68, 0x74, 0x6e, 0x69, 0x6e, 0x67, 0x41, 0x72, 0x72, 0x65, 0x73, 0x74, 0x65, 0x72, 0x73, - 0x12, 0x40, 0x0a, 0x0f, 0x65, 0x61, 0x72, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x76, 0x69, - 0x63, 0x65, 0x73, 0x18, 0xb6, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x6d, 0x6f, 0x64, - 0x65, 0x6c, 0x2e, 0x45, 0x61, 0x72, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x76, 0x69, 0x63, - 0x65, 0x52, 0x0f, 0x65, 0x61, 0x72, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x76, 0x69, 0x63, - 0x65, 0x73, 0x12, 0x3f, 0x0a, 0x0f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x53, 0x77, 0x69, - 0x74, 0x63, 0x68, 0x65, 0x73, 0x18, 0xb7, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6d, - 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x53, 0x77, 0x69, 0x74, - 0x63, 0x68, 0x52, 0x0f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x53, 0x77, 0x69, 0x74, 0x63, - 0x68, 0x65, 0x73, 0x12, 0x37, 0x0a, 0x0c, 0x77, 0x69, 0x72, 0x65, 0x43, 0x61, 0x62, 0x69, 0x6e, - 0x65, 0x74, 0x73, 0x18, 0xb8, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, 0x6f, 0x64, - 0x65, 0x6c, 0x2e, 0x57, 0x69, 0x72, 0x65, 0x43, 0x61, 0x62, 0x69, 0x6e, 0x65, 0x74, 0x52, 0x0c, - 0x77, 0x69, 0x72, 0x65, 0x43, 0x61, 0x62, 0x69, 0x6e, 0x65, 0x74, 0x73, 0x12, 0x37, 0x0a, 0x0c, - 0x61, 0x69, 0x72, 0x50, 0x61, 0x76, 0x69, 0x6c, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0xb9, 0x02, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x41, 0x69, 0x72, 0x50, - 0x61, 0x76, 0x69, 0x6c, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x61, 0x69, 0x72, 0x50, 0x61, 0x76, 0x69, - 0x6c, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x25, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x76, 0x65, 0x73, 0x18, - 0xba, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x56, - 0x61, 0x6c, 0x76, 0x65, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x76, 0x65, 0x73, 0x12, 0x46, 0x0a, 0x11, - 0x67, 0x61, 0x73, 0x4d, 0x69, 0x78, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x61, 0x6d, 0x62, 0x65, 0x72, - 0x73, 0x18, 0xbb, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, - 0x2e, 0x47, 0x61, 0x73, 0x4d, 0x69, 0x78, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x61, 0x6d, 0x62, 0x65, - 0x72, 0x52, 0x11, 0x67, 0x61, 0x73, 0x4d, 0x69, 0x78, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x61, 0x6d, - 0x62, 0x65, 0x72, 0x73, 0x12, 0x61, 0x0a, 0x1a, 0x63, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x41, 0x69, 0x72, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x65, - 0x72, 0x73, 0x18, 0xbc, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6d, 0x6f, 0x64, 0x65, - 0x6c, 0x2e, 0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x69, 0x72, - 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x52, 0x1a, 0x63, 0x6f, 0x6d, - 0x62, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x69, 0x72, 0x43, 0x6f, 0x6e, 0x64, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x73, 0x12, 0x55, 0x0a, 0x16, 0x61, 0x69, 0x72, 0x50, 0x75, - 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, - 0x73, 0x18, 0xbd, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, - 0x2e, 0x41, 0x69, 0x72, 0x50, 0x75, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x52, 0x16, 0x61, 0x69, 0x72, 0x50, 0x75, 0x72, 0x69, 0x66, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x34, - 0x0a, 0x0b, 0x61, 0x69, 0x72, 0x43, 0x75, 0x72, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x18, 0xbe, 0x02, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x41, 0x69, 0x72, - 0x43, 0x75, 0x72, 0x74, 0x61, 0x69, 0x6e, 0x52, 0x0b, 0x61, 0x69, 0x72, 0x43, 0x75, 0x72, 0x74, - 0x61, 0x69, 0x6e, 0x73, 0x12, 0x1f, 0x0a, 0x04, 0x66, 0x61, 0x6e, 0x73, 0x18, 0xbf, 0x02, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x46, 0x61, 0x6e, 0x52, - 0x04, 0x66, 0x61, 0x6e, 0x73, 0x12, 0x40, 0x0a, 0x0f, 0x67, 0x61, 0x73, 0x45, 0x6e, 0x76, 0x69, - 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0xc0, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x15, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x47, 0x61, 0x73, 0x45, 0x6e, 0x76, 0x69, 0x72, - 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0f, 0x67, 0x61, 0x73, 0x45, 0x6e, 0x76, 0x69, 0x72, - 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0xce, 0x03, 0x0a, 0x0c, 0x53, 0x69, 0x67, 0x6e, - 0x61, 0x6c, 0x4c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x12, 0x42, 0x0a, 0x10, 0x70, 0x68, 0x79, 0x73, - 0x69, 0x63, 0x61, 0x6c, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x50, 0x68, 0x79, 0x73, 0x69, - 0x63, 0x61, 0x6c, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x10, 0x70, 0x68, 0x79, 0x73, - 0x69, 0x63, 0x61, 0x6c, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x33, 0x0a, 0x0b, - 0x63, 0x68, 0x65, 0x63, 0x6b, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x11, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x50, - 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x0b, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x50, 0x6f, 0x69, 0x6e, 0x74, - 0x73, 0x12, 0x2a, 0x0a, 0x08, 0x74, 0x75, 0x72, 0x6e, 0x6f, 0x75, 0x74, 0x73, 0x18, 0x05, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x54, 0x75, 0x72, 0x6e, - 0x6f, 0x75, 0x74, 0x52, 0x08, 0x74, 0x75, 0x72, 0x6e, 0x6f, 0x75, 0x74, 0x73, 0x12, 0x27, 0x0a, - 0x07, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, - 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x52, 0x07, 0x73, - 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x73, 0x12, 0x36, 0x0a, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, - 0x6f, 0x6e, 0x64, 0x65, 0x72, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, - 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x65, 0x72, - 0x52, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x65, 0x72, 0x73, 0x12, 0x24, - 0x0a, 0x06, 0x73, 0x6c, 0x6f, 0x70, 0x65, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, - 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x53, 0x6c, 0x6f, 0x70, 0x65, 0x52, 0x06, 0x73, 0x6c, - 0x6f, 0x70, 0x65, 0x73, 0x12, 0x4b, 0x0a, 0x13, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, - 0x6c, 0x43, 0x75, 0x72, 0x76, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x19, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x61, 0x6c, 0x43, 0x75, 0x72, 0x76, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x13, 0x73, 0x65, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x43, 0x75, 0x72, 0x76, 0x61, 0x74, 0x75, 0x72, 0x65, - 0x73, 0x12, 0x45, 0x0a, 0x11, 0x6b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x43, 0x6f, - 0x6e, 0x76, 0x65, 0x72, 0x74, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6d, - 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x4b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x43, 0x6f, - 0x6e, 0x76, 0x65, 0x72, 0x74, 0x52, 0x11, 0x6b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, - 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x73, 0x22, 0xdb, 0x01, 0x0a, 0x0f, 0x50, 0x68, 0x79, - 0x73, 0x69, 0x63, 0x61, 0x6c, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0e, 0x0a, 0x02, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1e, 0x0a, 0x0a, - 0x74, 0x75, 0x72, 0x6e, 0x6f, 0x75, 0x74, 0x49, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x0a, 0x74, 0x75, 0x72, 0x6e, 0x6f, 0x75, 0x74, 0x49, 0x64, 0x73, 0x12, 0x33, 0x0a, 0x0b, - 0x61, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x11, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, - 0x50, 0x6f, 0x72, 0x74, 0x52, 0x0b, 0x61, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, - 0x74, 0x12, 0x33, 0x0a, 0x0b, 0x62, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x44, - 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x52, 0x0b, 0x62, 0x44, 0x65, 0x76, 0x69, - 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x2e, 0x0a, 0x12, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, - 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x12, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x53, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x9e, 0x01, 0x0a, 0x0a, 0x43, 0x68, 0x65, 0x63, 0x6b, - 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x20, 0x0a, 0x02, 0x6b, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x10, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x4b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, - 0x74, 0x65, 0x72, 0x52, 0x02, 0x6b, 0x6d, 0x12, 0x29, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x43, 0x68, - 0x65, 0x63, 0x6b, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, - 0x70, 0x65, 0x12, 0x33, 0x0a, 0x0b, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, - 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, - 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x52, 0x0b, 0x64, 0x65, 0x76, 0x69, - 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x73, 0x22, 0xcd, 0x03, 0x0a, 0x07, 0x54, 0x75, 0x72, 0x6e, - 0x6f, 0x75, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x02, 0x69, 0x64, 0x12, 0x20, 0x0a, 0x02, 0x6b, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x10, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x4b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, - 0x72, 0x52, 0x02, 0x6b, 0x6d, 0x12, 0x33, 0x0a, 0x0b, 0x61, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, + 0x58, 0x63, 0x6a, 0x52, 0x04, 0x78, 0x63, 0x6a, 0x73, 0x12, 0x27, 0x0a, 0x07, 0x63, 0x6b, 0x6d, + 0x50, 0x73, 0x6c, 0x73, 0x18, 0x1a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x6d, 0x6f, 0x64, + 0x65, 0x6c, 0x2e, 0x43, 0x6b, 0x6d, 0x50, 0x73, 0x6c, 0x52, 0x07, 0x63, 0x6b, 0x6d, 0x50, 0x73, + 0x6c, 0x73, 0x12, 0x22, 0x0a, 0x05, 0x70, 0x69, 0x70, 0x65, 0x73, 0x18, 0xac, 0x02, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x50, 0x69, 0x70, 0x65, 0x52, + 0x05, 0x70, 0x69, 0x70, 0x65, 0x73, 0x12, 0x37, 0x0a, 0x0c, 0x70, 0x69, 0x70, 0x65, 0x46, 0x69, + 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0xad, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, + 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x50, 0x69, 0x70, 0x65, 0x46, 0x69, 0x74, 0x74, 0x69, 0x6e, + 0x67, 0x52, 0x0c, 0x70, 0x69, 0x70, 0x65, 0x46, 0x69, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, + 0x40, 0x0a, 0x0f, 0x63, 0x69, 0x72, 0x63, 0x75, 0x69, 0x74, 0x42, 0x72, 0x65, 0x61, 0x6b, 0x65, + 0x72, 0x73, 0x18, 0xae, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x6d, 0x6f, 0x64, 0x65, + 0x6c, 0x2e, 0x43, 0x69, 0x72, 0x63, 0x75, 0x69, 0x74, 0x42, 0x72, 0x65, 0x61, 0x6b, 0x65, 0x72, + 0x52, 0x0f, 0x63, 0x69, 0x72, 0x63, 0x75, 0x69, 0x74, 0x42, 0x72, 0x65, 0x61, 0x6b, 0x65, 0x72, + 0x73, 0x12, 0x51, 0x0a, 0x15, 0x74, 0x68, 0x72, 0x65, 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x65, 0x73, 0x18, 0xaf, 0x02, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x54, 0x68, 0x72, 0x65, 0x65, 0x50, + 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x52, 0x15, 0x74, + 0x68, 0x72, 0x65, 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x77, 0x69, 0x74, + 0x63, 0x68, 0x65, 0x73, 0x12, 0x42, 0x0a, 0x10, 0x68, 0x61, 0x6e, 0x64, 0x63, 0x61, 0x72, 0x74, + 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x65, 0x73, 0x18, 0xb0, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x15, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x48, 0x61, 0x6e, 0x64, 0x63, 0x61, 0x72, 0x74, + 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x52, 0x10, 0x68, 0x61, 0x6e, 0x64, 0x63, 0x61, 0x72, 0x74, + 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x65, 0x73, 0x12, 0x31, 0x0a, 0x0a, 0x72, 0x65, 0x63, 0x74, + 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x18, 0xb1, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, + 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x52, 0x65, 0x63, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, + 0x0a, 0x72, 0x65, 0x63, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x12, 0x3a, 0x0a, 0x0d, 0x64, + 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x18, 0xb2, 0x02, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x44, 0x69, 0x73, 0x63, + 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x0d, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x6e, + 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x12, 0x4c, 0x0a, 0x13, 0x76, 0x6f, 0x6c, 0x74, 0x61, + 0x67, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x72, 0x73, 0x18, 0xb3, + 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x56, 0x6f, + 0x6c, 0x74, 0x61, 0x67, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x72, + 0x52, 0x13, 0x76, 0x6f, 0x6c, 0x74, 0x61, 0x67, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, + 0x72, 0x6d, 0x65, 0x72, 0x73, 0x12, 0x37, 0x0a, 0x0c, 0x70, 0x6f, 0x77, 0x65, 0x72, 0x53, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0xb4, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, + 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x52, 0x0c, 0x70, 0x6f, 0x77, 0x65, 0x72, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x49, + 0x0a, 0x12, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x6e, 0x69, 0x6e, 0x67, 0x41, 0x72, 0x72, 0x65, 0x73, + 0x74, 0x65, 0x72, 0x73, 0x18, 0xb5, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6d, 0x6f, + 0x64, 0x65, 0x6c, 0x2e, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x6e, 0x69, 0x6e, 0x67, 0x41, 0x72, 0x72, + 0x65, 0x73, 0x74, 0x65, 0x72, 0x52, 0x12, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x6e, 0x69, 0x6e, 0x67, + 0x41, 0x72, 0x72, 0x65, 0x73, 0x74, 0x65, 0x72, 0x73, 0x12, 0x40, 0x0a, 0x0f, 0x65, 0x61, 0x72, + 0x74, 0x68, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0xb6, 0x02, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x45, 0x61, 0x72, 0x74, + 0x68, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x52, 0x0f, 0x65, 0x61, 0x72, 0x74, + 0x68, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x3f, 0x0a, 0x0f, 0x6e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x65, 0x73, 0x18, 0xb7, + 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x4e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x52, 0x0f, 0x6e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x65, 0x73, 0x12, 0x37, 0x0a, 0x0c, + 0x77, 0x69, 0x72, 0x65, 0x43, 0x61, 0x62, 0x69, 0x6e, 0x65, 0x74, 0x73, 0x18, 0xb8, 0x02, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x57, 0x69, 0x72, 0x65, + 0x43, 0x61, 0x62, 0x69, 0x6e, 0x65, 0x74, 0x52, 0x0c, 0x77, 0x69, 0x72, 0x65, 0x43, 0x61, 0x62, + 0x69, 0x6e, 0x65, 0x74, 0x73, 0x12, 0x37, 0x0a, 0x0c, 0x61, 0x69, 0x72, 0x50, 0x61, 0x76, 0x69, + 0x6c, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0xb9, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, + 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x41, 0x69, 0x72, 0x50, 0x61, 0x76, 0x69, 0x6c, 0x69, 0x6f, 0x6e, + 0x52, 0x0c, 0x61, 0x69, 0x72, 0x50, 0x61, 0x76, 0x69, 0x6c, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x25, + 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x76, 0x65, 0x73, 0x18, 0xba, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x0c, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x56, 0x61, 0x6c, 0x76, 0x65, 0x52, 0x06, 0x76, + 0x61, 0x6c, 0x76, 0x65, 0x73, 0x12, 0x46, 0x0a, 0x11, 0x67, 0x61, 0x73, 0x4d, 0x69, 0x78, 0x69, + 0x6e, 0x67, 0x43, 0x68, 0x61, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0xbb, 0x02, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x17, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x47, 0x61, 0x73, 0x4d, 0x69, 0x78, + 0x69, 0x6e, 0x67, 0x43, 0x68, 0x61, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x11, 0x67, 0x61, 0x73, 0x4d, + 0x69, 0x78, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x61, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x61, 0x0a, + 0x1a, 0x63, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x69, 0x72, 0x43, + 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x73, 0x18, 0xbc, 0x02, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x43, 0x6f, 0x6d, 0x62, 0x69, + 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x69, 0x72, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x65, 0x72, 0x52, 0x1a, 0x63, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x41, 0x69, 0x72, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x73, + 0x12, 0x55, 0x0a, 0x16, 0x61, 0x69, 0x72, 0x50, 0x75, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0xbd, 0x02, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x1c, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x41, 0x69, 0x72, 0x50, 0x75, 0x72, + 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x52, + 0x16, 0x61, 0x69, 0x72, 0x50, 0x75, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x34, 0x0a, 0x0b, 0x61, 0x69, 0x72, 0x43, 0x75, + 0x72, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x18, 0xbe, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, + 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x41, 0x69, 0x72, 0x43, 0x75, 0x72, 0x74, 0x61, 0x69, 0x6e, + 0x52, 0x0b, 0x61, 0x69, 0x72, 0x43, 0x75, 0x72, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x12, 0x1f, 0x0a, + 0x04, 0x66, 0x61, 0x6e, 0x73, 0x18, 0xbf, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x6d, + 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x46, 0x61, 0x6e, 0x52, 0x04, 0x66, 0x61, 0x6e, 0x73, 0x12, 0x40, + 0x0a, 0x0f, 0x67, 0x61, 0x73, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, + 0x73, 0x18, 0xc0, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, + 0x2e, 0x47, 0x61, 0x73, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, + 0x0f, 0x67, 0x61, 0x73, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x73, + 0x22, 0xce, 0x03, 0x0a, 0x0c, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x4c, 0x61, 0x79, 0x6f, 0x75, + 0x74, 0x12, 0x42, 0x0a, 0x10, 0x70, 0x68, 0x79, 0x73, 0x69, 0x63, 0x61, 0x6c, 0x53, 0x65, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6d, 0x6f, + 0x64, 0x65, 0x6c, 0x2e, 0x50, 0x68, 0x79, 0x73, 0x69, 0x63, 0x61, 0x6c, 0x53, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x10, 0x70, 0x68, 0x79, 0x73, 0x69, 0x63, 0x61, 0x6c, 0x53, 0x65, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x33, 0x0a, 0x0b, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x50, 0x6f, + 0x69, 0x6e, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x6d, 0x6f, 0x64, + 0x65, 0x6c, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x0b, 0x63, + 0x68, 0x65, 0x63, 0x6b, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x2a, 0x0a, 0x08, 0x74, 0x75, + 0x72, 0x6e, 0x6f, 0x75, 0x74, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x6d, + 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x54, 0x75, 0x72, 0x6e, 0x6f, 0x75, 0x74, 0x52, 0x08, 0x74, 0x75, + 0x72, 0x6e, 0x6f, 0x75, 0x74, 0x73, 0x12, 0x27, 0x0a, 0x07, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, + 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, + 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x52, 0x07, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x73, 0x12, + 0x36, 0x0a, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x65, 0x72, 0x73, 0x18, + 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x54, 0x72, + 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x65, 0x72, 0x52, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, + 0x70, 0x6f, 0x6e, 0x64, 0x65, 0x72, 0x73, 0x12, 0x24, 0x0a, 0x06, 0x73, 0x6c, 0x6f, 0x70, 0x65, + 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, + 0x53, 0x6c, 0x6f, 0x70, 0x65, 0x52, 0x06, 0x73, 0x6c, 0x6f, 0x70, 0x65, 0x73, 0x12, 0x4b, 0x0a, + 0x13, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x43, 0x75, 0x72, 0x76, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x6d, 0x6f, 0x64, + 0x65, 0x6c, 0x2e, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x43, 0x75, 0x72, 0x76, + 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x13, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, + 0x43, 0x75, 0x72, 0x76, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x45, 0x0a, 0x11, 0x6b, 0x69, + 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x73, 0x18, + 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x4b, 0x69, + 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x52, 0x11, + 0x6b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, + 0x73, 0x22, 0xdb, 0x01, 0x0a, 0x0f, 0x50, 0x68, 0x79, 0x73, 0x69, 0x63, 0x61, 0x6c, 0x53, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x74, 0x75, 0x72, 0x6e, 0x6f, 0x75, 0x74, + 0x49, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x74, 0x75, 0x72, 0x6e, 0x6f, + 0x75, 0x74, 0x49, 0x64, 0x73, 0x12, 0x33, 0x0a, 0x0b, 0x61, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x52, 0x0b, 0x61, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x33, 0x0a, 0x0b, 0x62, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x52, 0x0b, 0x62, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x12, - 0x33, 0x0a, 0x0b, 0x63, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x44, 0x65, 0x76, - 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x52, 0x0b, 0x63, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, - 0x50, 0x6f, 0x72, 0x74, 0x12, 0x4e, 0x0a, 0x11, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x4d, 0x61, - 0x63, 0x68, 0x69, 0x6e, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x20, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x54, 0x75, 0x72, 0x6e, 0x6f, 0x75, 0x74, 0x2e, - 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x54, 0x79, 0x70, - 0x65, 0x52, 0x11, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, - 0x54, 0x79, 0x70, 0x65, 0x12, 0x5d, 0x0a, 0x19, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x6f, 0x6e, - 0x69, 0x63, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, - 0x45, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x6f, 0x6e, 0x69, 0x63, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, - 0x65, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x19, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x72, - 0x6f, 0x6e, 0x69, 0x63, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x47, 0x72, 0x6f, - 0x75, 0x70, 0x73, 0x22, 0x42, 0x0a, 0x11, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x4d, 0x61, 0x63, - 0x68, 0x69, 0x6e, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x6e, 0x6b, 0x6e, - 0x6f, 0x77, 0x6e, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x5a, 0x44, 0x4a, 0x39, 0x5f, 0x53, 0x69, - 0x6e, 0x67, 0x6c, 0x65, 0x10, 0x01, 0x12, 0x0f, 0x0a, 0x0b, 0x5a, 0x44, 0x4a, 0x39, 0x5f, 0x44, - 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x10, 0x02, 0x22, 0x95, 0x03, 0x0a, 0x06, 0x53, 0x69, 0x67, 0x6e, - 0x61, 0x6c, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, - 0x69, 0x64, 0x12, 0x20, 0x0a, 0x02, 0x6b, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, - 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x4b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, - 0x52, 0x02, 0x6b, 0x6d, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, - 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x49, 0x64, 0x12, 0x33, 0x0a, 0x0b, 0x74, 0x75, 0x72, 0x6e, 0x6f, 0x75, 0x74, 0x50, 0x6f, 0x72, - 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, - 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x52, 0x0b, 0x74, 0x75, 0x72, 0x6e, - 0x6f, 0x75, 0x74, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x5d, 0x0a, 0x19, 0x65, 0x6c, 0x65, 0x63, 0x74, - 0x72, 0x6f, 0x6e, 0x69, 0x63, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6d, 0x6f, 0x64, - 0x65, 0x6c, 0x2e, 0x45, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x6f, 0x6e, 0x69, 0x63, 0x43, 0x6f, 0x6d, - 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x19, 0x65, 0x6c, 0x65, - 0x63, 0x74, 0x72, 0x6f, 0x6e, 0x69, 0x63, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, - 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x29, 0x0a, 0x05, 0x6d, 0x6f, - 0x64, 0x65, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x6d, 0x6f, 0x64, 0x65, - 0x6c, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x2e, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x52, 0x05, - 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x22, 0x68, 0x0a, 0x05, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x12, 0x06, - 0x0a, 0x02, 0x48, 0x4c, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x48, 0x4c, 0x55, 0x5f, 0x46, 0x55, - 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x48, 0x4c, 0x55, 0x5f, 0x44, 0x55, 0x5f, 0x59, 0x59, 0x10, - 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x48, 0x4c, 0x55, 0x5f, 0x59, 0x59, 0x10, 0x03, 0x12, 0x10, 0x0a, - 0x0c, 0x48, 0x4c, 0x55, 0x5f, 0x46, 0x4c, 0x5f, 0x44, 0x55, 0x5f, 0x59, 0x59, 0x10, 0x04, 0x12, - 0x0a, 0x0a, 0x06, 0x48, 0x4c, 0x55, 0x5f, 0x44, 0x55, 0x10, 0x05, 0x12, 0x06, 0x0a, 0x02, 0x41, - 0x42, 0x10, 0x06, 0x12, 0x0a, 0x0a, 0x06, 0x48, 0x42, 0x55, 0x5f, 0x44, 0x55, 0x10, 0x07, 0x22, - 0xe1, 0x01, 0x0a, 0x03, 0x50, 0x73, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x73, 0x64, 0x41, 0x6d, - 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x61, 0x73, 0x64, 0x41, - 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2d, 0x0a, 0x09, 0x61, 0x73, 0x64, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, - 0x2e, 0x41, 0x73, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x09, 0x61, 0x73, 0x64, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x73, 0x12, 0x5d, 0x0a, 0x19, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x6f, 0x6e, - 0x69, 0x63, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, - 0x45, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x6f, 0x6e, 0x69, 0x63, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, - 0x65, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x19, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x72, - 0x6f, 0x6e, 0x69, 0x63, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x47, 0x72, 0x6f, - 0x75, 0x70, 0x73, 0x22, 0xc3, 0x02, 0x0a, 0x0b, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x6e, - 0x64, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x02, 0x69, 0x64, 0x12, 0x20, 0x0a, 0x02, 0x6b, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x10, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x4b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, - 0x72, 0x52, 0x02, 0x6b, 0x6d, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x49, 0x64, 0x12, 0x33, 0x0a, 0x0b, 0x74, 0x75, 0x72, 0x6e, 0x6f, 0x75, 0x74, 0x50, 0x6f, + 0x2e, 0x0a, 0x12, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x53, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x63, 0x65, 0x6e, + 0x74, 0x72, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, + 0x9e, 0x01, 0x0a, 0x0a, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x0e, + 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x20, + 0x0a, 0x02, 0x6b, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x6d, 0x6f, 0x64, + 0x65, 0x6c, 0x2e, 0x4b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x52, 0x02, 0x6b, 0x6d, + 0x12, 0x29, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, + 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x50, 0x6f, 0x69, 0x6e, + 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x33, 0x0a, 0x0b, 0x64, + 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x11, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, + 0x6f, 0x72, 0x74, 0x52, 0x0b, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x73, + 0x22, 0xcd, 0x03, 0x0a, 0x07, 0x54, 0x75, 0x72, 0x6e, 0x6f, 0x75, 0x74, 0x12, 0x0e, 0x0a, 0x02, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x20, 0x0a, 0x02, + 0x6b, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, + 0x2e, 0x4b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x52, 0x02, 0x6b, 0x6d, 0x12, 0x33, + 0x0a, 0x0b, 0x61, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x44, 0x65, 0x76, 0x69, + 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x52, 0x0b, 0x61, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, + 0x6f, 0x72, 0x74, 0x12, 0x33, 0x0a, 0x0b, 0x62, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, - 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x52, 0x0b, 0x74, 0x75, 0x72, - 0x6e, 0x6f, 0x75, 0x74, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x24, 0x0a, 0x0d, 0x66, 0x69, 0x78, 0x65, - 0x64, 0x54, 0x65, 0x6c, 0x65, 0x67, 0x72, 0x61, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, - 0x0d, 0x66, 0x69, 0x78, 0x65, 0x64, 0x54, 0x65, 0x6c, 0x65, 0x67, 0x72, 0x61, 0x6d, 0x12, 0x2b, - 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x6d, - 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x65, 0x72, - 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x2c, 0x0a, 0x11, 0x66, - 0x69, 0x78, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x54, 0x65, 0x6c, 0x65, 0x67, 0x72, 0x61, 0x6d, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x11, 0x66, 0x69, 0x78, 0x65, 0x64, 0x55, 0x73, 0x65, - 0x72, 0x54, 0x65, 0x6c, 0x65, 0x67, 0x72, 0x61, 0x6d, 0x22, 0x2e, 0x0a, 0x04, 0x54, 0x79, 0x70, - 0x65, 0x12, 0x06, 0x0a, 0x02, 0x46, 0x42, 0x10, 0x00, 0x12, 0x06, 0x0a, 0x02, 0x57, 0x42, 0x10, - 0x01, 0x12, 0x06, 0x0a, 0x02, 0x44, 0x42, 0x10, 0x02, 0x12, 0x06, 0x0a, 0x02, 0x56, 0x42, 0x10, - 0x03, 0x12, 0x06, 0x0a, 0x02, 0x49, 0x42, 0x10, 0x04, 0x22, 0x53, 0x0a, 0x05, 0x53, 0x6c, 0x6f, - 0x70, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, - 0x69, 0x64, 0x12, 0x22, 0x0a, 0x03, 0x6b, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x10, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x4b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, - 0x72, 0x52, 0x03, 0x6b, 0x6d, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x65, 0x67, 0x72, 0x65, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x64, 0x65, 0x67, 0x72, 0x65, 0x65, 0x22, 0x60, - 0x0a, 0x12, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x43, 0x75, 0x72, 0x76, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x02, 0x69, 0x64, 0x12, 0x22, 0x0a, 0x03, 0x6b, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x10, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x4b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, - 0x74, 0x65, 0x72, 0x52, 0x03, 0x6b, 0x6d, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x61, 0x64, 0x69, - 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x72, 0x61, 0x64, 0x69, 0x75, 0x73, - 0x22, 0x7c, 0x0a, 0x0a, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x1a, + 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x52, 0x0b, 0x62, 0x44, 0x65, + 0x76, 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x33, 0x0a, 0x0b, 0x63, 0x44, 0x65, 0x76, + 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, + 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, + 0x52, 0x0b, 0x63, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x4e, 0x0a, + 0x11, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x54, 0x79, + 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, + 0x2e, 0x54, 0x75, 0x72, 0x6e, 0x6f, 0x75, 0x74, 0x2e, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x4d, + 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x11, 0x73, 0x77, 0x69, 0x74, + 0x63, 0x68, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x5d, 0x0a, + 0x19, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x6f, 0x6e, 0x69, 0x63, 0x43, 0x6f, 0x6d, 0x70, 0x6f, + 0x6e, 0x65, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x1f, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x45, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x6f, + 0x6e, 0x69, 0x63, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, + 0x70, 0x52, 0x19, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x6f, 0x6e, 0x69, 0x63, 0x43, 0x6f, 0x6d, + 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x22, 0x42, 0x0a, 0x11, + 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x10, 0x00, 0x12, 0x0f, + 0x0a, 0x0b, 0x5a, 0x44, 0x4a, 0x39, 0x5f, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x10, 0x01, 0x12, + 0x0f, 0x0a, 0x0b, 0x5a, 0x44, 0x4a, 0x39, 0x5f, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x10, 0x02, + 0x22, 0x95, 0x03, 0x0a, 0x06, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x12, 0x0e, 0x0a, 0x02, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x20, 0x0a, 0x02, 0x6b, + 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, + 0x4b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x52, 0x02, 0x6b, 0x6d, 0x12, 0x1c, 0x0a, + 0x09, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x33, 0x0a, 0x0b, 0x74, + 0x75, 0x72, 0x6e, 0x6f, 0x75, 0x74, 0x50, 0x6f, 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x11, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, + 0x6f, 0x72, 0x74, 0x52, 0x0b, 0x74, 0x75, 0x72, 0x6e, 0x6f, 0x75, 0x74, 0x50, 0x6f, 0x72, 0x74, + 0x12, 0x5d, 0x0a, 0x19, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x6f, 0x6e, 0x69, 0x63, 0x43, 0x6f, + 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x18, 0x07, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x45, 0x6c, 0x65, 0x63, + 0x74, 0x72, 0x6f, 0x6e, 0x69, 0x63, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x52, 0x19, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x6f, 0x6e, 0x69, 0x63, + 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, + 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, + 0x6f, 0x64, 0x65, 0x12, 0x29, 0x0a, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x18, 0x09, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, + 0x6c, 0x2e, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x52, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x22, 0x68, + 0x0a, 0x05, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x12, 0x06, 0x0a, 0x02, 0x48, 0x4c, 0x10, 0x00, 0x12, + 0x0a, 0x0a, 0x06, 0x48, 0x4c, 0x55, 0x5f, 0x46, 0x55, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x48, + 0x4c, 0x55, 0x5f, 0x44, 0x55, 0x5f, 0x59, 0x59, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x48, 0x4c, + 0x55, 0x5f, 0x59, 0x59, 0x10, 0x03, 0x12, 0x10, 0x0a, 0x0c, 0x48, 0x4c, 0x55, 0x5f, 0x46, 0x4c, + 0x5f, 0x44, 0x55, 0x5f, 0x59, 0x59, 0x10, 0x04, 0x12, 0x0a, 0x0a, 0x06, 0x48, 0x4c, 0x55, 0x5f, + 0x44, 0x55, 0x10, 0x05, 0x12, 0x06, 0x0a, 0x02, 0x41, 0x42, 0x10, 0x06, 0x12, 0x0a, 0x0a, 0x06, + 0x48, 0x42, 0x55, 0x5f, 0x44, 0x55, 0x10, 0x07, 0x22, 0xe1, 0x01, 0x0a, 0x03, 0x50, 0x73, 0x64, + 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, + 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x49, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x49, 0x64, + 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x73, 0x64, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x09, 0x61, 0x73, 0x64, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2d, + 0x0a, 0x09, 0x61, 0x73, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x0f, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x41, 0x73, 0x64, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x52, 0x09, 0x61, 0x73, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0x5d, 0x0a, + 0x19, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x6f, 0x6e, 0x69, 0x63, 0x43, 0x6f, 0x6d, 0x70, 0x6f, + 0x6e, 0x65, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x1f, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x45, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x6f, + 0x6e, 0x69, 0x63, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, + 0x70, 0x52, 0x19, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x6f, 0x6e, 0x69, 0x63, 0x43, 0x6f, 0x6d, + 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x22, 0xc3, 0x02, 0x0a, + 0x0b, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x20, 0x0a, 0x02, + 0x6b, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, + 0x2e, 0x4b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x52, 0x02, 0x6b, 0x6d, 0x12, 0x1c, + 0x0a, 0x09, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x33, 0x0a, 0x0b, + 0x74, 0x75, 0x72, 0x6e, 0x6f, 0x75, 0x74, 0x50, 0x6f, 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x11, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, + 0x50, 0x6f, 0x72, 0x74, 0x52, 0x0b, 0x74, 0x75, 0x72, 0x6e, 0x6f, 0x75, 0x74, 0x50, 0x6f, 0x72, + 0x74, 0x12, 0x24, 0x0a, 0x0d, 0x66, 0x69, 0x78, 0x65, 0x64, 0x54, 0x65, 0x6c, 0x65, 0x67, 0x72, + 0x61, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x66, 0x69, 0x78, 0x65, 0x64, 0x54, + 0x65, 0x6c, 0x65, 0x67, 0x72, 0x61, 0x6d, 0x12, 0x2b, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x54, 0x72, + 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x65, 0x72, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, + 0x74, 0x79, 0x70, 0x65, 0x12, 0x2c, 0x0a, 0x11, 0x66, 0x69, 0x78, 0x65, 0x64, 0x55, 0x73, 0x65, + 0x72, 0x54, 0x65, 0x6c, 0x65, 0x67, 0x72, 0x61, 0x6d, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x11, 0x66, 0x69, 0x78, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x54, 0x65, 0x6c, 0x65, 0x67, 0x72, + 0x61, 0x6d, 0x22, 0x2e, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x06, 0x0a, 0x02, 0x46, 0x42, + 0x10, 0x00, 0x12, 0x06, 0x0a, 0x02, 0x57, 0x42, 0x10, 0x01, 0x12, 0x06, 0x0a, 0x02, 0x44, 0x42, + 0x10, 0x02, 0x12, 0x06, 0x0a, 0x02, 0x56, 0x42, 0x10, 0x03, 0x12, 0x06, 0x0a, 0x02, 0x49, 0x42, + 0x10, 0x04, 0x22, 0x53, 0x0a, 0x05, 0x53, 0x6c, 0x6f, 0x70, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x22, 0x0a, 0x03, 0x6b, + 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, + 0x2e, 0x4b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x52, 0x03, 0x6b, 0x6d, 0x73, 0x12, + 0x16, 0x0a, 0x06, 0x64, 0x65, 0x67, 0x72, 0x65, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x06, 0x64, 0x65, 0x67, 0x72, 0x65, 0x65, 0x22, 0x60, 0x0a, 0x12, 0x53, 0x65, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x61, 0x6c, 0x43, 0x75, 0x72, 0x76, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x22, 0x0a, + 0x03, 0x6b, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x6d, 0x6f, 0x64, + 0x65, 0x6c, 0x2e, 0x4b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x52, 0x03, 0x6b, 0x6d, + 0x73, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x61, 0x64, 0x69, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x06, 0x72, 0x61, 0x64, 0x69, 0x75, 0x73, 0x22, 0x7c, 0x0a, 0x0a, 0x44, 0x65, 0x76, + 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x65, 0x76, 0x69, 0x63, + 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x65, 0x76, 0x69, 0x63, + 0x65, 0x49, 0x64, 0x12, 0x31, 0x0a, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x11, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, + 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x64, 0x65, 0x76, 0x69, + 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1f, 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0b, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x50, 0x6f, 0x72, + 0x74, 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x22, 0x7d, 0x0a, 0x09, 0x4b, 0x69, 0x6c, 0x6f, 0x6d, + 0x65, 0x74, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x2a, 0x0a, 0x10, 0x63, 0x6f, + 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x65, + 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x12, 0x2e, 0x0a, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x10, 0x2e, 0x6d, 0x6f, 0x64, 0x65, + 0x6c, 0x2e, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x64, 0x69, 0x72, + 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x78, 0x0a, 0x10, 0x4b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, + 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x12, 0x22, 0x0a, 0x03, 0x6b, 0x6d, + 0x41, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, + 0x4b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x52, 0x03, 0x6b, 0x6d, 0x41, 0x12, 0x22, + 0x0a, 0x03, 0x6b, 0x6d, 0x42, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x6d, 0x6f, + 0x64, 0x65, 0x6c, 0x2e, 0x4b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x52, 0x03, 0x6b, + 0x6d, 0x42, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x61, 0x6d, 0x65, 0x54, 0x72, 0x65, 0x6e, 0x64, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x73, 0x61, 0x6d, 0x65, 0x54, 0x72, 0x65, 0x6e, 0x64, + 0x22, 0x89, 0x02, 0x0a, 0x05, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, + 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x28, + 0x0a, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x12, 0x2e, + 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x2e, 0x4d, 0x6f, 0x64, 0x65, + 0x6c, 0x52, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x93, 0x01, 0x0a, 0x05, 0x4d, 0x6f, 0x64, 0x65, 0x6c, + 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x10, 0x00, 0x12, 0x0d, 0x0a, + 0x09, 0x4a, 0x50, 0x58, 0x43, 0x5f, 0x31, 0x30, 0x30, 0x30, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, + 0x4a, 0x50, 0x58, 0x43, 0x5f, 0x31, 0x37, 0x30, 0x30, 0x10, 0x02, 0x12, 0x0d, 0x0a, 0x09, 0x4a, + 0x57, 0x4a, 0x58, 0x43, 0x5f, 0x34, 0x38, 0x30, 0x10, 0x03, 0x12, 0x11, 0x0a, 0x0d, 0x4a, 0x57, + 0x4a, 0x58, 0x43, 0x5f, 0x48, 0x31, 0x32, 0x35, 0x5f, 0x38, 0x30, 0x10, 0x04, 0x12, 0x0d, 0x0a, + 0x09, 0x4a, 0x57, 0x58, 0x43, 0x5f, 0x31, 0x37, 0x30, 0x30, 0x10, 0x05, 0x12, 0x0d, 0x0a, 0x09, + 0x4a, 0x57, 0x58, 0x43, 0x5f, 0x48, 0x33, 0x34, 0x30, 0x10, 0x06, 0x12, 0x11, 0x0a, 0x0d, 0x4a, + 0x59, 0x4a, 0x58, 0x43, 0x5f, 0x31, 0x36, 0x30, 0x5f, 0x32, 0x36, 0x30, 0x10, 0x07, 0x12, 0x0c, + 0x0a, 0x08, 0x4a, 0x5a, 0x58, 0x43, 0x5f, 0x48, 0x31, 0x38, 0x10, 0x08, 0x22, 0x3b, 0x0a, 0x15, + 0x50, 0x68, 0x61, 0x73, 0x65, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x50, 0x72, 0x6f, 0x74, + 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x22, 0x52, 0x0a, 0x18, 0x45, 0x6c, 0x65, + 0x63, 0x74, 0x72, 0x6f, 0x6e, 0x69, 0x63, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x63, 0x6f, 0x6d, + 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, + 0x0c, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x73, 0x22, 0xef, 0x01, + 0x0a, 0x06, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x38, 0x0a, 0x0a, + 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x18, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x2e, + 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x62, 0x75, 0x74, 0x74, + 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x68, 0x61, 0x73, 0x4c, 0x69, 0x67, + 0x68, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x68, 0x61, 0x73, 0x4c, 0x69, 0x67, + 0x68, 0x74, 0x22, 0x6b, 0x0a, 0x0a, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, + 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x10, 0x00, 0x12, 0x12, 0x0a, + 0x0e, 0x4e, 0x4f, 0x5f, 0x52, 0x65, 0x73, 0x65, 0x74, 0x5f, 0x50, 0x72, 0x65, 0x73, 0x73, 0x10, + 0x01, 0x12, 0x0f, 0x0a, 0x0b, 0x4e, 0x4f, 0x5f, 0x52, 0x65, 0x73, 0x65, 0x74, 0x5f, 0x55, 0x70, + 0x10, 0x02, 0x12, 0x0f, 0x0a, 0x0b, 0x52, 0x65, 0x73, 0x65, 0x74, 0x5f, 0x50, 0x72, 0x65, 0x73, + 0x73, 0x10, 0x03, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x65, 0x74, 0x5f, 0x55, 0x70, 0x10, + 0x04, 0x12, 0x0c, 0x0a, 0x08, 0x4b, 0x65, 0x79, 0x5f, 0x4b, 0x6e, 0x6f, 0x62, 0x10, 0x05, 0x22, + 0x97, 0x01, 0x0a, 0x05, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x30, 0x0a, + 0x06, 0x61, 0x73, 0x70, 0x65, 0x63, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x18, 0x2e, + 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x4c, 0x69, 0x67, 0x68, + 0x74, 0x41, 0x73, 0x70, 0x65, 0x63, 0x74, 0x52, 0x06, 0x61, 0x73, 0x70, 0x65, 0x63, 0x74, 0x22, + 0x38, 0x0a, 0x0b, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x41, 0x73, 0x70, 0x65, 0x63, 0x74, 0x12, 0x05, + 0x0a, 0x01, 0x4c, 0x10, 0x00, 0x12, 0x05, 0x0a, 0x01, 0x48, 0x10, 0x01, 0x12, 0x05, 0x0a, 0x01, + 0x55, 0x10, 0x02, 0x12, 0x06, 0x0a, 0x02, 0x48, 0x55, 0x10, 0x03, 0x12, 0x05, 0x0a, 0x01, 0x42, + 0x10, 0x04, 0x12, 0x05, 0x0a, 0x01, 0x41, 0x10, 0x05, 0x22, 0x2b, 0x0a, 0x05, 0x41, 0x6c, 0x61, + 0x72, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, + 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x22, 0x97, 0x01, 0x0a, 0x07, 0x53, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, + 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x40, 0x0a, 0x0f, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x72, + 0x6f, 0x6e, 0x69, 0x63, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x16, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x45, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x6f, 0x6e, + 0x69, 0x63, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x0f, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x6f, + 0x6e, 0x69, 0x63, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x26, 0x0a, 0x05, 0x64, 0x65, 0x63, 0x63, + 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, + 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x45, 0x63, 0x63, 0x52, 0x05, 0x64, 0x65, 0x63, 0x63, 0x73, + 0x22, 0x8d, 0x01, 0x0a, 0x09, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x45, 0x63, 0x63, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x12, 0x31, 0x0a, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x11, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, - 0x65, 0x52, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1f, 0x0a, - 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0b, 0x2e, 0x6d, 0x6f, - 0x64, 0x65, 0x6c, 0x2e, 0x50, 0x6f, 0x72, 0x74, 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x22, 0x7d, - 0x0a, 0x09, 0x4b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x12, 0x2a, 0x0a, 0x10, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x53, - 0x79, 0x73, 0x74, 0x65, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x63, 0x6f, 0x6f, - 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x12, 0x2e, 0x0a, - 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x10, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x78, 0x0a, - 0x10, 0x4b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, - 0x74, 0x12, 0x22, 0x0a, 0x03, 0x6b, 0x6d, 0x41, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, - 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x4b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, - 0x52, 0x03, 0x6b, 0x6d, 0x41, 0x12, 0x22, 0x0a, 0x03, 0x6b, 0x6d, 0x42, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x4b, 0x69, 0x6c, 0x6f, 0x6d, - 0x65, 0x74, 0x65, 0x72, 0x52, 0x03, 0x6b, 0x6d, 0x42, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x61, 0x6d, - 0x65, 0x54, 0x72, 0x65, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x73, 0x61, - 0x6d, 0x65, 0x54, 0x72, 0x65, 0x6e, 0x64, 0x22, 0x89, 0x02, 0x0a, 0x05, 0x52, 0x65, 0x6c, 0x61, - 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, - 0x64, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x28, 0x0a, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x12, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x52, 0x65, 0x6c, - 0x61, 0x79, 0x2e, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x52, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x12, - 0x1c, 0x0a, 0x09, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x93, 0x01, - 0x0a, 0x05, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, - 0x77, 0x6e, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x4a, 0x50, 0x58, 0x43, 0x5f, 0x31, 0x30, 0x30, - 0x30, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x4a, 0x50, 0x58, 0x43, 0x5f, 0x31, 0x37, 0x30, 0x30, - 0x10, 0x02, 0x12, 0x0d, 0x0a, 0x09, 0x4a, 0x57, 0x4a, 0x58, 0x43, 0x5f, 0x34, 0x38, 0x30, 0x10, - 0x03, 0x12, 0x11, 0x0a, 0x0d, 0x4a, 0x57, 0x4a, 0x58, 0x43, 0x5f, 0x48, 0x31, 0x32, 0x35, 0x5f, - 0x38, 0x30, 0x10, 0x04, 0x12, 0x0d, 0x0a, 0x09, 0x4a, 0x57, 0x58, 0x43, 0x5f, 0x31, 0x37, 0x30, - 0x30, 0x10, 0x05, 0x12, 0x0d, 0x0a, 0x09, 0x4a, 0x57, 0x58, 0x43, 0x5f, 0x48, 0x33, 0x34, 0x30, - 0x10, 0x06, 0x12, 0x11, 0x0a, 0x0d, 0x4a, 0x59, 0x4a, 0x58, 0x43, 0x5f, 0x31, 0x36, 0x30, 0x5f, - 0x32, 0x36, 0x30, 0x10, 0x07, 0x12, 0x0c, 0x0a, 0x08, 0x4a, 0x5a, 0x58, 0x43, 0x5f, 0x48, 0x31, - 0x38, 0x10, 0x08, 0x22, 0x3b, 0x0a, 0x15, 0x50, 0x68, 0x61, 0x73, 0x65, 0x46, 0x61, 0x69, 0x6c, - 0x75, 0x72, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x0e, 0x0a, 0x02, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, - 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, - 0x22, 0x52, 0x0a, 0x18, 0x45, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x6f, 0x6e, 0x69, 0x63, 0x43, 0x6f, - 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x12, 0x0a, 0x04, - 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, - 0x12, 0x22, 0x0a, 0x0c, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x73, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, - 0x74, 0x49, 0x64, 0x73, 0x22, 0xef, 0x01, 0x0a, 0x06, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x12, + 0x65, 0x52, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x31, 0x0a, + 0x03, 0x65, 0x67, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6d, 0x6f, 0x64, + 0x65, 0x6c, 0x2e, 0x45, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x6f, 0x6e, 0x69, 0x63, 0x43, 0x6f, 0x6d, + 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x03, 0x65, 0x67, 0x73, + 0x22, 0x61, 0x0a, 0x0f, 0x45, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x6f, 0x6e, 0x69, 0x63, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x3a, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x70, 0x6f, + 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6d, 0x6f, + 0x64, 0x65, 0x6c, 0x2e, 0x45, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x6f, 0x6e, 0x69, 0x63, 0x43, 0x6f, + 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, + 0x6e, 0x74, 0x73, 0x22, 0x58, 0x0a, 0x13, 0x45, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x6f, 0x6e, 0x69, + 0x63, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x31, 0x0a, 0x0a, 0x64, 0x65, + 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x11, + 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, + 0x65, 0x52, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x22, 0xe9, 0x03, + 0x0a, 0x03, 0x4d, 0x6b, 0x78, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x73, 0x64, 0x49, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x70, 0x73, 0x64, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x70, + 0x63, 0x62, 0x61, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x63, 0x62, + 0x61, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x63, 0x62, 0x70, 0x6c, 0x61, 0x49, 0x64, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x63, 0x62, 0x70, 0x6c, 0x61, 0x49, 0x64, 0x12, + 0x16, 0x0a, 0x06, 0x70, 0x63, 0x62, 0x6a, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x06, 0x70, 0x63, 0x62, 0x6a, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x6f, 0x62, 0x61, 0x49, + 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x6f, 0x62, 0x61, 0x49, 0x64, 0x12, + 0x1a, 0x0a, 0x08, 0x70, 0x6f, 0x62, 0x70, 0x6c, 0x61, 0x49, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x08, 0x70, 0x6f, 0x62, 0x70, 0x6c, 0x61, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x70, + 0x6f, 0x62, 0x6a, 0x49, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x6f, 0x62, + 0x6a, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x61, 0x62, 0x61, 0x49, 0x64, 0x18, 0x09, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x61, 0x62, 0x61, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x70, + 0x61, 0x62, 0x70, 0x6c, 0x61, 0x49, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, + 0x61, 0x62, 0x70, 0x6c, 0x61, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x61, 0x62, 0x6a, 0x49, + 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x61, 0x62, 0x6a, 0x49, 0x64, 0x12, + 0x18, 0x0a, 0x07, 0x77, 0x72, 0x7a, 0x66, 0x61, 0x49, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x07, 0x77, 0x72, 0x7a, 0x66, 0x61, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x77, 0x72, 0x7a, + 0x66, 0x70, 0x6c, 0x61, 0x49, 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x77, 0x72, + 0x7a, 0x66, 0x70, 0x6c, 0x61, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x77, 0x72, 0x7a, 0x66, 0x6a, + 0x49, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x77, 0x72, 0x7a, 0x66, 0x6a, 0x49, + 0x64, 0x12, 0x18, 0x0a, 0x07, 0x71, 0x6b, 0x71, 0x72, 0x61, 0x49, 0x64, 0x18, 0x0f, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x07, 0x71, 0x6b, 0x71, 0x72, 0x61, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x71, + 0x6b, 0x71, 0x72, 0x70, 0x6c, 0x61, 0x49, 0x64, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x71, 0x6b, 0x71, 0x72, 0x70, 0x6c, 0x61, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x71, 0x6b, 0x71, + 0x72, 0x6a, 0x49, 0x64, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x71, 0x6b, 0x71, 0x72, + 0x6a, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x70, 0x6c, 0x61, 0x49, 0x64, 0x18, 0x12, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x6d, 0x70, 0x6c, 0x61, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x6a, + 0x78, 0x74, 0x63, 0x70, 0x6c, 0x61, 0x49, 0x64, 0x18, 0x13, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x6a, 0x78, 0x74, 0x63, 0x70, 0x6c, 0x61, 0x49, 0x64, 0x22, 0x8a, 0x01, 0x0a, 0x06, 0x43, 0x6b, + 0x6d, 0x50, 0x73, 0x6c, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6b, 0x6d, 0x49, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x63, 0x6b, 0x6d, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x6d, + 0x61, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x67, 0x6d, 0x61, 0x49, 0x64, + 0x12, 0x14, 0x0a, 0x05, 0x6b, 0x6d, 0x61, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x6b, 0x6d, 0x61, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x70, 0x6c, 0x61, 0x49, 0x64, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6d, 0x70, 0x6c, 0x61, 0x49, 0x64, 0x12, 0x16, + 0x0a, 0x06, 0x6d, 0x6d, 0x73, 0x61, 0x49, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x6d, 0x6d, 0x73, 0x61, 0x49, 0x64, 0x22, 0xef, 0x01, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x11, 0x70, 0x68, 0x79, 0x73, 0x69, 0x63, 0x61, + 0x6c, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x11, 0x70, 0x68, 0x79, 0x73, 0x69, 0x63, 0x61, 0x6c, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x49, 0x64, 0x12, 0x3f, 0x0a, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x50, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x32, 0x0a, 0x11, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x6e, 0x6b, + 0x6e, 0x6f, 0x77, 0x6e, 0x10, 0x00, 0x12, 0x06, 0x0a, 0x02, 0x55, 0x70, 0x10, 0x01, 0x12, 0x08, + 0x0a, 0x04, 0x44, 0x6f, 0x77, 0x6e, 0x10, 0x02, 0x22, 0x3d, 0x0a, 0x03, 0x4b, 0x65, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, - 0x6f, 0x64, 0x65, 0x12, 0x38, 0x0a, 0x0a, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x54, 0x79, 0x70, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x18, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, - 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x2e, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x54, 0x79, 0x70, - 0x65, 0x52, 0x0a, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, - 0x08, 0x68, 0x61, 0x73, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x08, 0x68, 0x61, 0x73, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x22, 0x6b, 0x0a, 0x0a, 0x42, 0x75, 0x74, - 0x74, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, - 0x77, 0x6e, 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e, 0x4e, 0x4f, 0x5f, 0x52, 0x65, 0x73, 0x65, 0x74, - 0x5f, 0x50, 0x72, 0x65, 0x73, 0x73, 0x10, 0x01, 0x12, 0x0f, 0x0a, 0x0b, 0x4e, 0x4f, 0x5f, 0x52, - 0x65, 0x73, 0x65, 0x74, 0x5f, 0x55, 0x70, 0x10, 0x02, 0x12, 0x0f, 0x0a, 0x0b, 0x52, 0x65, 0x73, - 0x65, 0x74, 0x5f, 0x50, 0x72, 0x65, 0x73, 0x73, 0x10, 0x03, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x65, - 0x73, 0x65, 0x74, 0x5f, 0x55, 0x70, 0x10, 0x04, 0x12, 0x0c, 0x0a, 0x08, 0x4b, 0x65, 0x79, 0x5f, - 0x4b, 0x6e, 0x6f, 0x62, 0x10, 0x05, 0x22, 0x97, 0x01, 0x0a, 0x05, 0x4c, 0x69, 0x67, 0x68, 0x74, - 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, - 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x63, 0x6f, 0x64, 0x65, 0x12, 0x30, 0x0a, 0x06, 0x61, 0x73, 0x70, 0x65, 0x63, 0x74, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x18, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x4c, 0x69, 0x67, - 0x68, 0x74, 0x2e, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x41, 0x73, 0x70, 0x65, 0x63, 0x74, 0x52, 0x06, - 0x61, 0x73, 0x70, 0x65, 0x63, 0x74, 0x22, 0x38, 0x0a, 0x0b, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x41, - 0x73, 0x70, 0x65, 0x63, 0x74, 0x12, 0x05, 0x0a, 0x01, 0x4c, 0x10, 0x00, 0x12, 0x05, 0x0a, 0x01, - 0x48, 0x10, 0x01, 0x12, 0x05, 0x0a, 0x01, 0x55, 0x10, 0x02, 0x12, 0x06, 0x0a, 0x02, 0x48, 0x55, - 0x10, 0x03, 0x12, 0x05, 0x0a, 0x01, 0x42, 0x10, 0x04, 0x12, 0x05, 0x0a, 0x01, 0x41, 0x10, 0x05, - 0x22, 0x2b, 0x0a, 0x05, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x22, 0x97, 0x01, - 0x0a, 0x07, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x40, 0x0a, - 0x0f, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x6f, 0x6e, 0x69, 0x63, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x45, - 0x6c, 0x65, 0x63, 0x74, 0x72, 0x6f, 0x6e, 0x69, 0x63, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x0f, - 0x65, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x6f, 0x6e, 0x69, 0x63, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, - 0x26, 0x0a, 0x05, 0x64, 0x65, 0x63, 0x63, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, - 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x45, 0x63, 0x63, - 0x52, 0x05, 0x64, 0x65, 0x63, 0x63, 0x73, 0x22, 0x8d, 0x01, 0x0a, 0x09, 0x44, 0x65, 0x76, 0x69, - 0x63, 0x65, 0x45, 0x63, 0x63, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, - 0x64, 0x12, 0x31, 0x0a, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x11, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x44, 0x65, - 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, - 0x54, 0x79, 0x70, 0x65, 0x12, 0x31, 0x0a, 0x03, 0x65, 0x67, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x1f, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x45, 0x6c, 0x65, 0x63, 0x74, 0x72, - 0x6f, 0x6e, 0x69, 0x63, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x47, 0x72, 0x6f, - 0x75, 0x70, 0x52, 0x03, 0x65, 0x67, 0x73, 0x22, 0x61, 0x0a, 0x0f, 0x45, 0x6c, 0x65, 0x63, 0x74, - 0x72, 0x6f, 0x6e, 0x69, 0x63, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, - 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x3a, - 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x45, 0x6c, 0x65, 0x63, 0x74, - 0x72, 0x6f, 0x6e, 0x69, 0x63, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x52, 0x0a, - 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x58, 0x0a, 0x13, 0x45, 0x6c, - 0x65, 0x63, 0x74, 0x72, 0x6f, 0x6e, 0x69, 0x63, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, - 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, - 0x64, 0x12, 0x31, 0x0a, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x11, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x44, 0x65, - 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, - 0x54, 0x79, 0x70, 0x65, 0x22, 0xe9, 0x03, 0x0a, 0x03, 0x4d, 0x6b, 0x78, 0x12, 0x0e, 0x0a, 0x02, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, - 0x70, 0x73, 0x64, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x70, 0x73, 0x64, - 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x63, 0x62, 0x61, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x70, 0x63, 0x62, 0x61, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x63, - 0x62, 0x70, 0x6c, 0x61, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x63, - 0x62, 0x70, 0x6c, 0x61, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x63, 0x62, 0x6a, 0x49, 0x64, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x63, 0x62, 0x6a, 0x49, 0x64, 0x12, 0x16, - 0x0a, 0x06, 0x70, 0x6f, 0x62, 0x61, 0x49, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x70, 0x6f, 0x62, 0x61, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6f, 0x62, 0x70, 0x6c, 0x61, - 0x49, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6f, 0x62, 0x70, 0x6c, 0x61, - 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x6f, 0x62, 0x6a, 0x49, 0x64, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x70, 0x6f, 0x62, 0x6a, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x61, - 0x62, 0x61, 0x49, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x61, 0x62, 0x61, - 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x62, 0x70, 0x6c, 0x61, 0x49, 0x64, 0x18, 0x0a, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, 0x62, 0x70, 0x6c, 0x61, 0x49, 0x64, 0x12, 0x16, - 0x0a, 0x06, 0x70, 0x61, 0x62, 0x6a, 0x49, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x70, 0x61, 0x62, 0x6a, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x77, 0x72, 0x7a, 0x66, 0x61, 0x49, - 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x77, 0x72, 0x7a, 0x66, 0x61, 0x49, 0x64, - 0x12, 0x1c, 0x0a, 0x09, 0x77, 0x72, 0x7a, 0x66, 0x70, 0x6c, 0x61, 0x49, 0x64, 0x18, 0x0d, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x77, 0x72, 0x7a, 0x66, 0x70, 0x6c, 0x61, 0x49, 0x64, 0x12, 0x18, - 0x0a, 0x07, 0x77, 0x72, 0x7a, 0x66, 0x6a, 0x49, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x77, 0x72, 0x7a, 0x66, 0x6a, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x71, 0x6b, 0x71, 0x72, - 0x61, 0x49, 0x64, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x71, 0x6b, 0x71, 0x72, 0x61, - 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x71, 0x6b, 0x71, 0x72, 0x70, 0x6c, 0x61, 0x49, 0x64, 0x18, - 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x71, 0x6b, 0x71, 0x72, 0x70, 0x6c, 0x61, 0x49, 0x64, - 0x12, 0x18, 0x0a, 0x07, 0x71, 0x6b, 0x71, 0x72, 0x6a, 0x49, 0x64, 0x18, 0x11, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x71, 0x6b, 0x71, 0x72, 0x6a, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x70, - 0x6c, 0x61, 0x49, 0x64, 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6d, 0x70, 0x6c, 0x61, - 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x6a, 0x78, 0x74, 0x63, 0x70, 0x6c, 0x61, 0x49, 0x64, 0x18, - 0x13, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6a, 0x78, 0x74, 0x63, 0x70, 0x6c, 0x61, 0x49, 0x64, - 0x22, 0xef, 0x01, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x0e, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, - 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, - 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x03, + 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x67, 0x65, 0x61, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x04, 0x67, 0x65, 0x61, 0x72, 0x22, 0xf2, 0x01, 0x0a, 0x15, 0x43, 0x65, 0x6e, 0x74, + 0x72, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x66, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, - 0x2c, 0x0a, 0x11, 0x70, 0x68, 0x79, 0x73, 0x69, 0x63, 0x61, 0x6c, 0x53, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x70, 0x68, 0x79, 0x73, - 0x69, 0x63, 0x61, 0x6c, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x3f, 0x0a, - 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x21, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x32, - 0x0a, 0x11, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x10, 0x00, - 0x12, 0x06, 0x0a, 0x02, 0x55, 0x70, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x44, 0x6f, 0x77, 0x6e, - 0x10, 0x02, 0x22, 0x3d, 0x0a, 0x03, 0x4b, 0x65, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x24, 0x0a, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x65, 0x72, 0x49, 0x64, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x6e, + 0x64, 0x65, 0x72, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x06, 0x63, 0x6a, 0x4c, 0x69, 0x73, 0x74, 0x18, + 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x43, 0x6a, + 0x44, 0x61, 0x74, 0x61, 0x52, 0x06, 0x63, 0x6a, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x06, + 0x71, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x6d, + 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x51, 0x64, 0x44, 0x61, 0x74, 0x61, 0x52, 0x06, 0x71, 0x64, 0x4c, + 0x69, 0x73, 0x74, 0x12, 0x47, 0x0a, 0x11, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, + 0x64, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, + 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x43, 0x69, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x43, 0x6f, 0x64, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x11, 0x73, 0x65, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x22, 0x5d, 0x0a, 0x06, + 0x43, 0x6a, 0x44, 0x61, 0x74, 0x61, 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, 0x2f, 0x0a, 0x09, 0x72, 0x65, + 0x66, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, + 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x43, 0x6a, 0x44, 0x61, 0x74, 0x61, 0x49, 0x74, 0x65, 0x6d, + 0x52, 0x09, 0x72, 0x65, 0x66, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x73, 0x22, 0x34, 0x0a, 0x0a, 0x43, + 0x6a, 0x44, 0x61, 0x74, 0x61, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x6c, + 0x61, 0x79, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x6c, 0x61, + 0x79, 0x49, 0x64, 0x12, 0x0c, 0x0a, 0x01, 0x71, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x01, + 0x71, 0x22, 0x4a, 0x0a, 0x06, 0x51, 0x64, 0x44, 0x61, 0x74, 0x61, 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, + 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x66, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x73, 0x18, 0x03, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x66, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x73, 0x22, 0x48, 0x0a, + 0x08, 0x41, 0x73, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, 0x6f, + 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, + 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, + 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x65, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x03, 0x65, 0x6e, 0x64, 0x22, 0x44, 0x0a, 0x12, 0x43, 0x69, 0x53, 0x65, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x10, 0x0a, + 0x03, 0x72, 0x6f, 0x77, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x72, 0x6f, 0x77, 0x12, + 0x1c, 0x0a, 0x09, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0xbc, 0x03, + 0x0a, 0x05, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, + 0x74, 0x61, 0x72, 0x74, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x74, + 0x61, 0x72, 0x74, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x64, 0x65, + 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x64, + 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, + 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x73, 0x12, 0x30, 0x0a, 0x13, 0x63, 0x6f, 0x6e, + 0x66, 0x6c, 0x69, 0x63, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x49, 0x64, 0x73, + 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x13, 0x63, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, + 0x69, 0x6e, 0x67, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x49, 0x64, 0x73, 0x12, 0x34, 0x0a, 0x09, 0x72, + 0x6f, 0x75, 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, + 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x52, 0x6f, 0x75, + 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x09, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x38, 0x0a, 0x08, 0x74, 0x75, 0x72, 0x6e, 0x6f, 0x75, 0x74, 0x73, 0x18, 0x08, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x52, 0x6f, 0x75, 0x74, + 0x65, 0x2e, 0x54, 0x75, 0x72, 0x6e, 0x6f, 0x75, 0x74, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x08, 0x74, 0x75, 0x72, 0x6e, 0x6f, 0x75, 0x74, 0x73, 0x1a, 0x39, 0x0a, 0x0f, 0x54, + 0x75, 0x72, 0x6e, 0x6f, 0x75, 0x74, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0e, + 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, + 0x0a, 0x06, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, + 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x22, 0x54, 0x0a, 0x09, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x54, + 0x79, 0x70, 0x65, 0x12, 0x0d, 0x0a, 0x09, 0x52, 0x45, 0x43, 0x45, 0x49, 0x56, 0x49, 0x4e, 0x47, + 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x45, 0x50, 0x41, 0x52, 0x54, 0x55, 0x52, 0x45, 0x10, + 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x48, 0x55, 0x4e, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x12, + 0x08, 0x0a, 0x04, 0x50, 0x41, 0x53, 0x53, 0x10, 0x03, 0x12, 0x11, 0x0a, 0x0d, 0x4c, 0x4f, 0x4e, + 0x47, 0x5f, 0x53, 0x48, 0x55, 0x4e, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x04, 0x22, 0x7c, 0x0a, 0x04, + 0x50, 0x69, 0x70, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x27, 0x0a, 0x05, 0x70, 0x6f, 0x72, 0x74, + 0x41, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, + 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x52, 0x05, 0x70, 0x6f, 0x72, 0x74, + 0x41, 0x12, 0x27, 0x0a, 0x05, 0x70, 0x6f, 0x72, 0x74, 0x42, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x11, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, + 0x6f, 0x72, 0x74, 0x52, 0x05, 0x70, 0x6f, 0x72, 0x74, 0x42, 0x22, 0x43, 0x0a, 0x0b, 0x50, 0x69, + 0x70, 0x65, 0x46, 0x69, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, - 0x04, 0x67, 0x65, 0x61, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x67, 0x65, 0x61, - 0x72, 0x22, 0xf2, 0x01, 0x0a, 0x15, 0x43, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x6c, 0x69, 0x7a, 0x65, - 0x64, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x12, 0x1c, 0x0a, 0x09, 0x73, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x74, 0x72, 0x61, - 0x6e, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x65, 0x72, 0x49, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x65, 0x72, 0x49, 0x64, 0x12, - 0x25, 0x0a, 0x06, 0x63, 0x6a, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x0d, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x43, 0x6a, 0x44, 0x61, 0x74, 0x61, 0x52, 0x06, - 0x63, 0x6a, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x06, 0x71, 0x64, 0x4c, 0x69, 0x73, 0x74, - 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x51, - 0x64, 0x44, 0x61, 0x74, 0x61, 0x52, 0x06, 0x71, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x47, 0x0a, - 0x11, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x50, 0x6f, 0x69, 0x6e, - 0x74, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, - 0x2e, 0x43, 0x69, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x50, 0x6f, - 0x69, 0x6e, 0x74, 0x52, 0x11, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x64, 0x65, - 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x22, 0x5d, 0x0a, 0x06, 0x43, 0x6a, 0x44, 0x61, 0x74, 0x61, - 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, 0x2f, 0x0a, 0x09, 0x72, 0x65, 0x66, 0x52, 0x65, 0x6c, 0x61, 0x79, - 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, - 0x43, 0x6a, 0x44, 0x61, 0x74, 0x61, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x09, 0x72, 0x65, 0x66, 0x52, - 0x65, 0x6c, 0x61, 0x79, 0x73, 0x22, 0x34, 0x0a, 0x0a, 0x43, 0x6a, 0x44, 0x61, 0x74, 0x61, 0x49, - 0x74, 0x65, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x49, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x49, 0x64, 0x12, 0x0c, 0x0a, - 0x01, 0x71, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x01, 0x71, 0x22, 0x4a, 0x0a, 0x06, 0x51, - 0x64, 0x44, 0x61, 0x74, 0x61, 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, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x66, - 0x52, 0x65, 0x6c, 0x61, 0x79, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, - 0x66, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x73, 0x22, 0x48, 0x0a, 0x08, 0x41, 0x73, 0x64, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, - 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, - 0x10, 0x0a, 0x03, 0x65, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x65, 0x6e, - 0x64, 0x22, 0x44, 0x0a, 0x12, 0x43, 0x69, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, - 0x64, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x72, 0x6f, 0x77, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x72, 0x6f, 0x77, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x65, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0xbc, 0x03, 0x0a, 0x05, 0x52, 0x6f, 0x75, 0x74, - 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, - 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x74, 0x61, 0x72, 0x74, 0x49, 0x64, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x74, 0x61, 0x72, 0x74, 0x49, 0x64, 0x12, - 0x24, 0x0a, 0x0d, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, - 0x64, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, - 0x49, 0x64, 0x73, 0x12, 0x30, 0x0a, 0x13, 0x63, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x69, - 0x6e, 0x67, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x49, 0x64, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x13, 0x63, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x6f, 0x75, - 0x74, 0x65, 0x49, 0x64, 0x73, 0x12, 0x34, 0x0a, 0x09, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x54, 0x79, - 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, - 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, - 0x52, 0x09, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x38, 0x0a, 0x08, 0x74, - 0x75, 0x72, 0x6e, 0x6f, 0x75, 0x74, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, - 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x54, 0x75, 0x72, 0x6e, - 0x6f, 0x75, 0x74, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x74, 0x75, 0x72, - 0x6e, 0x6f, 0x75, 0x74, 0x73, 0x1a, 0x39, 0x0a, 0x0f, 0x54, 0x75, 0x72, 0x6e, 0x6f, 0x75, 0x74, - 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x6f, 0x72, 0x6d, - 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, - 0x22, 0x54, 0x0a, 0x09, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0d, 0x0a, - 0x09, 0x52, 0x45, 0x43, 0x45, 0x49, 0x56, 0x49, 0x4e, 0x47, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, - 0x44, 0x45, 0x50, 0x41, 0x52, 0x54, 0x55, 0x52, 0x45, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x53, - 0x48, 0x55, 0x4e, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x50, 0x41, 0x53, - 0x53, 0x10, 0x03, 0x12, 0x11, 0x0a, 0x0d, 0x4c, 0x4f, 0x4e, 0x47, 0x5f, 0x53, 0x48, 0x55, 0x4e, - 0x54, 0x49, 0x4e, 0x47, 0x10, 0x04, 0x22, 0x7c, 0x0a, 0x04, 0x50, 0x69, 0x70, 0x65, 0x12, 0x0e, - 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, - 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, - 0x64, 0x65, 0x12, 0x27, 0x0a, 0x05, 0x70, 0x6f, 0x72, 0x74, 0x41, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x11, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, - 0x50, 0x6f, 0x72, 0x74, 0x52, 0x05, 0x70, 0x6f, 0x72, 0x74, 0x41, 0x12, 0x27, 0x0a, 0x05, 0x70, - 0x6f, 0x72, 0x74, 0x42, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x6d, 0x6f, 0x64, - 0x65, 0x6c, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x52, 0x05, 0x70, - 0x6f, 0x72, 0x74, 0x42, 0x22, 0x43, 0x0a, 0x0b, 0x50, 0x69, 0x70, 0x65, 0x46, 0x69, 0x74, 0x74, - 0x69, 0x6e, 0x67, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x75, 0x6d, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x73, 0x75, 0x6d, 0x22, 0x34, 0x0a, 0x0e, 0x43, 0x69, 0x72, - 0x63, 0x75, 0x69, 0x74, 0x42, 0x72, 0x65, 0x61, 0x6b, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x63, - 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x22, - 0x39, 0x0a, 0x13, 0x54, 0x68, 0x72, 0x65, 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x22, 0x34, 0x0a, 0x0e, 0x48, 0x61, - 0x6e, 0x64, 0x63, 0x61, 0x72, 0x74, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x12, 0x0e, 0x0a, 0x02, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, + 0x03, 0x73, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x73, 0x75, 0x6d, 0x22, + 0x34, 0x0a, 0x0e, 0x43, 0x69, 0x72, 0x63, 0x75, 0x69, 0x74, 0x42, 0x72, 0x65, 0x61, 0x6b, 0x65, + 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, + 0x64, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x63, 0x6f, 0x64, 0x65, 0x22, 0x39, 0x0a, 0x13, 0x54, 0x68, 0x72, 0x65, 0x65, 0x50, 0x6f, + 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, - 0x22, 0x2f, 0x0a, 0x09, 0x52, 0x65, 0x63, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x0e, 0x0a, + 0x22, 0x34, 0x0a, 0x0e, 0x48, 0x61, 0x6e, 0x64, 0x63, 0x61, 0x72, 0x74, 0x53, 0x77, 0x69, 0x74, + 0x63, 0x68, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, + 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x22, 0x2f, 0x0a, 0x09, 0x52, 0x65, 0x63, 0x74, 0x69, 0x66, + 0x69, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x22, 0x32, 0x0a, 0x0c, 0x44, 0x69, 0x73, 0x63, 0x6f, + 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x22, 0x58, 0x0a, 0x12, 0x56, + 0x6f, 0x6c, 0x74, 0x61, 0x67, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x65, + 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, + 0x64, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x65, 0x31, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x02, 0x65, 0x31, 0x12, 0x0e, 0x0a, 0x02, 0x65, 0x32, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x02, 0x65, 0x32, 0x22, 0x6b, 0x0a, 0x0b, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x53, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x73, 0x78, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x02, 0x73, 0x78, 0x12, 0x0e, 0x0a, 0x02, 0x61, 0x63, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x02, 0x61, 0x63, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x6f, 0x6c, 0x74, + 0x61, 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x76, 0x6f, 0x6c, 0x74, 0x61, + 0x67, 0x65, 0x22, 0x37, 0x0a, 0x11, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x6e, 0x69, 0x6e, 0x67, 0x41, + 0x72, 0x72, 0x65, 0x73, 0x74, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x22, 0x34, 0x0a, 0x0e, 0x45, + 0x61, 0x72, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, - 0x65, 0x22, 0x32, 0x0a, 0x0c, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, - 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, - 0x64, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x63, 0x6f, 0x64, 0x65, 0x22, 0x58, 0x0a, 0x12, 0x56, 0x6f, 0x6c, 0x74, 0x61, 0x67, 0x65, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x63, - 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, - 0x0e, 0x0a, 0x02, 0x65, 0x31, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x65, 0x31, 0x12, - 0x0e, 0x0a, 0x02, 0x65, 0x32, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x65, 0x32, 0x22, - 0x6b, 0x0a, 0x0b, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x0e, + 0x65, 0x22, 0x33, 0x0a, 0x0d, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x53, 0x77, 0x69, 0x74, + 0x63, 0x68, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, + 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x22, 0x31, 0x0a, 0x0b, 0x57, 0x69, 0x72, 0x65, 0x43, 0x61, + 0x62, 0x69, 0x6e, 0x65, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x22, 0xa2, 0x01, 0x0a, 0x0b, 0x41, 0x69, + 0x72, 0x50, 0x61, 0x76, 0x69, 0x6c, 0x69, 0x6f, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x3b, 0x0a, + 0x0c, 0x70, 0x61, 0x76, 0x69, 0x6c, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x41, 0x69, 0x72, 0x50, + 0x61, 0x76, 0x69, 0x6c, 0x69, 0x6f, 0x6e, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0c, 0x70, 0x61, + 0x76, 0x69, 0x6c, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x22, 0x32, 0x0a, 0x04, 0x54, 0x79, + 0x70, 0x65, 0x12, 0x13, 0x0a, 0x0f, 0x45, 0x78, 0x68, 0x61, 0x75, 0x73, 0x74, 0x50, 0x61, 0x76, + 0x69, 0x6c, 0x69, 0x6f, 0x6e, 0x10, 0x00, 0x12, 0x15, 0x0a, 0x11, 0x41, 0x69, 0x72, 0x53, 0x75, + 0x70, 0x70, 0x6c, 0x79, 0x50, 0x61, 0x76, 0x69, 0x6c, 0x69, 0x6f, 0x6e, 0x10, 0x01, 0x22, 0xc9, + 0x01, 0x0a, 0x05, 0x56, 0x61, 0x6c, 0x76, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x2f, 0x0a, 0x09, + 0x76, 0x61, 0x6c, 0x76, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x11, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x56, 0x61, 0x6c, 0x76, 0x65, 0x2e, 0x54, 0x79, + 0x70, 0x65, 0x52, 0x09, 0x76, 0x61, 0x6c, 0x76, 0x65, 0x54, 0x79, 0x70, 0x65, 0x22, 0x6b, 0x0a, + 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x14, 0x45, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x69, + 0x63, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x76, 0x65, 0x10, 0x00, 0x12, + 0x14, 0x0a, 0x10, 0x45, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x69, 0x63, 0x41, 0x69, 0x72, 0x56, 0x61, + 0x6c, 0x76, 0x65, 0x10, 0x01, 0x12, 0x17, 0x0a, 0x13, 0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x69, 0x72, 0x56, 0x61, 0x6c, 0x76, 0x65, 0x10, 0x02, 0x12, 0x1a, + 0x0a, 0x16, 0x45, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x69, 0x63, 0x42, 0x75, 0x74, 0x74, 0x65, 0x72, + 0x66, 0x6c, 0x79, 0x56, 0x61, 0x6c, 0x76, 0x65, 0x10, 0x03, 0x22, 0x36, 0x0a, 0x10, 0x47, 0x61, + 0x73, 0x4d, 0x69, 0x78, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x61, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, - 0x64, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x73, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x02, - 0x73, 0x78, 0x12, 0x0e, 0x0a, 0x02, 0x61, 0x63, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x02, - 0x61, 0x63, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x6f, 0x6c, 0x74, 0x61, 0x67, 0x65, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x07, 0x76, 0x6f, 0x6c, 0x74, 0x61, 0x67, 0x65, 0x22, 0x37, 0x0a, 0x11, - 0x4c, 0x69, 0x67, 0x68, 0x74, 0x6e, 0x69, 0x6e, 0x67, 0x41, 0x72, 0x72, 0x65, 0x73, 0x74, 0x65, - 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, - 0x64, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x63, 0x6f, 0x64, 0x65, 0x22, 0x34, 0x0a, 0x0e, 0x45, 0x61, 0x72, 0x74, 0x68, 0x69, 0x6e, - 0x67, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x22, 0x33, 0x0a, 0x0d, 0x4e, - 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x12, 0x0e, 0x0a, 0x02, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, - 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, - 0x22, 0x31, 0x0a, 0x0b, 0x57, 0x69, 0x72, 0x65, 0x43, 0x61, 0x62, 0x69, 0x6e, 0x65, 0x74, 0x12, + 0x64, 0x65, 0x22, 0x3f, 0x0a, 0x19, 0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x41, 0x69, 0x72, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, - 0x6f, 0x64, 0x65, 0x22, 0xa2, 0x01, 0x0a, 0x0b, 0x41, 0x69, 0x72, 0x50, 0x61, 0x76, 0x69, 0x6c, - 0x69, 0x6f, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x3b, 0x0a, 0x0c, 0x70, 0x61, 0x76, 0x69, 0x6c, - 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, - 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x41, 0x69, 0x72, 0x50, 0x61, 0x76, 0x69, 0x6c, 0x69, 0x6f, - 0x6e, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0c, 0x70, 0x61, 0x76, 0x69, 0x6c, 0x69, 0x6f, 0x6e, - 0x54, 0x79, 0x70, 0x65, 0x22, 0x32, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x13, 0x0a, 0x0f, - 0x45, 0x78, 0x68, 0x61, 0x75, 0x73, 0x74, 0x50, 0x61, 0x76, 0x69, 0x6c, 0x69, 0x6f, 0x6e, 0x10, - 0x00, 0x12, 0x15, 0x0a, 0x11, 0x41, 0x69, 0x72, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x79, 0x50, 0x61, - 0x76, 0x69, 0x6c, 0x69, 0x6f, 0x6e, 0x10, 0x01, 0x22, 0xc9, 0x01, 0x0a, 0x05, 0x56, 0x61, 0x6c, - 0x76, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, - 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x2f, 0x0a, 0x09, 0x76, 0x61, 0x6c, 0x76, 0x65, 0x54, - 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x11, 0x2e, 0x6d, 0x6f, 0x64, 0x65, - 0x6c, 0x2e, 0x56, 0x61, 0x6c, 0x76, 0x65, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x09, 0x76, 0x61, - 0x6c, 0x76, 0x65, 0x54, 0x79, 0x70, 0x65, 0x22, 0x6b, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, - 0x18, 0x0a, 0x14, 0x45, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x74, 0x72, - 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x76, 0x65, 0x10, 0x00, 0x12, 0x14, 0x0a, 0x10, 0x45, 0x6c, 0x65, - 0x63, 0x74, 0x72, 0x69, 0x63, 0x41, 0x69, 0x72, 0x56, 0x61, 0x6c, 0x76, 0x65, 0x10, 0x01, 0x12, - 0x17, 0x0a, 0x13, 0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x69, - 0x72, 0x56, 0x61, 0x6c, 0x76, 0x65, 0x10, 0x02, 0x12, 0x1a, 0x0a, 0x16, 0x45, 0x6c, 0x65, 0x63, - 0x74, 0x72, 0x69, 0x63, 0x42, 0x75, 0x74, 0x74, 0x65, 0x72, 0x66, 0x6c, 0x79, 0x56, 0x61, 0x6c, - 0x76, 0x65, 0x10, 0x03, 0x22, 0x36, 0x0a, 0x10, 0x47, 0x61, 0x73, 0x4d, 0x69, 0x78, 0x69, 0x6e, - 0x67, 0x43, 0x68, 0x61, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x22, 0x3f, 0x0a, 0x19, - 0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x69, 0x72, 0x43, 0x6f, - 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x22, 0x3b, 0x0a, - 0x15, 0x41, 0x69, 0x72, 0x50, 0x75, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x22, 0x30, 0x0a, 0x0a, 0x41, 0x69, - 0x72, 0x43, 0x75, 0x72, 0x74, 0x61, 0x69, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x22, 0xa3, 0x01, 0x0a, - 0x03, 0x46, 0x61, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x29, 0x0a, 0x07, 0x66, 0x61, 0x6e, 0x54, - 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x6d, 0x6f, 0x64, 0x65, - 0x6c, 0x2e, 0x46, 0x61, 0x6e, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x07, 0x66, 0x61, 0x6e, 0x54, - 0x79, 0x70, 0x65, 0x22, 0x4d, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0d, 0x0a, 0x09, 0x43, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x46, 0x61, 0x6e, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x46, 0x63, - 0x42, 0x79, 0x70, 0x61, 0x73, 0x73, 0x46, 0x61, 0x6e, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x53, - 0x6f, 0x66, 0x74, 0x53, 0x74, 0x61, 0x72, 0x74, 0x46, 0x61, 0x6e, 0x10, 0x02, 0x12, 0x13, 0x0a, - 0x0f, 0x48, 0x69, 0x67, 0x68, 0x4c, 0x6f, 0x77, 0x53, 0x70, 0x65, 0x65, 0x64, 0x46, 0x61, 0x6e, - 0x10, 0x03, 0x22, 0x34, 0x0a, 0x0e, 0x47, 0x61, 0x73, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, - 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x22, 0x74, 0x0a, 0x03, 0x43, 0x6b, 0x6d, 0x12, - 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, - 0x5d, 0x0a, 0x19, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x6f, 0x6e, 0x69, 0x63, 0x43, 0x6f, 0x6d, - 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x45, 0x6c, 0x65, 0x63, 0x74, - 0x72, 0x6f, 0x6e, 0x69, 0x63, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x52, 0x19, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x6f, 0x6e, 0x69, 0x63, 0x43, - 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x22, 0x74, - 0x0a, 0x03, 0x58, 0x63, 0x6a, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x6f, 0x64, 0x65, 0x22, 0x3b, 0x0a, 0x15, 0x41, 0x69, 0x72, 0x50, 0x75, 0x72, 0x69, 0x66, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x12, 0x0e, 0x0a, 0x02, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, + 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, + 0x22, 0x30, 0x0a, 0x0a, 0x41, 0x69, 0x72, 0x43, 0x75, 0x72, 0x74, 0x61, 0x69, 0x6e, 0x12, 0x0e, + 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, + 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, + 0x64, 0x65, 0x22, 0xa3, 0x01, 0x0a, 0x03, 0x46, 0x61, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, + 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x29, + 0x0a, 0x07, 0x66, 0x61, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x0f, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x46, 0x61, 0x6e, 0x2e, 0x54, 0x79, 0x70, 0x65, + 0x52, 0x07, 0x66, 0x61, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x22, 0x4d, 0x0a, 0x04, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x46, 0x61, 0x6e, 0x10, 0x00, + 0x12, 0x0f, 0x0a, 0x0b, 0x46, 0x63, 0x42, 0x79, 0x70, 0x61, 0x73, 0x73, 0x46, 0x61, 0x6e, 0x10, + 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x53, 0x6f, 0x66, 0x74, 0x53, 0x74, 0x61, 0x72, 0x74, 0x46, 0x61, + 0x6e, 0x10, 0x02, 0x12, 0x13, 0x0a, 0x0f, 0x48, 0x69, 0x67, 0x68, 0x4c, 0x6f, 0x77, 0x53, 0x70, + 0x65, 0x65, 0x64, 0x46, 0x61, 0x6e, 0x10, 0x03, 0x22, 0x34, 0x0a, 0x0e, 0x47, 0x61, 0x73, 0x45, + 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, + 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x22, 0x74, + 0x0a, 0x03, 0x43, 0x6b, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x5d, 0x0a, 0x19, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x6f, 0x6e, 0x69, 0x63, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x45, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x6f, 0x6e, 0x69, 0x63, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x19, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x6f, 0x6e, 0x69, 0x63, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x73, 0x2a, 0xa9, 0x16, 0x0a, 0x0a, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, - 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x12, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, - 0x65, 0x5f, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x10, 0x00, 0x12, 0x1e, 0x0a, 0x1a, 0x44, - 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x50, 0x68, 0x79, 0x73, 0x69, 0x63, - 0x61, 0x6c, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x10, 0x01, 0x12, 0x19, 0x0a, 0x15, 0x44, - 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x50, - 0x6f, 0x69, 0x6e, 0x74, 0x10, 0x02, 0x12, 0x16, 0x0a, 0x12, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, - 0x54, 0x79, 0x70, 0x65, 0x5f, 0x54, 0x75, 0x72, 0x6e, 0x6f, 0x75, 0x74, 0x10, 0x03, 0x12, 0x15, - 0x0a, 0x11, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x53, 0x69, 0x67, - 0x6e, 0x61, 0x6c, 0x10, 0x04, 0x12, 0x1a, 0x0a, 0x16, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, - 0x79, 0x70, 0x65, 0x5f, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x65, 0x72, 0x10, - 0x05, 0x12, 0x14, 0x0a, 0x10, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, - 0x53, 0x6c, 0x6f, 0x70, 0x65, 0x10, 0x06, 0x12, 0x21, 0x0a, 0x1d, 0x44, 0x65, 0x76, 0x69, 0x63, - 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x43, - 0x75, 0x72, 0x76, 0x61, 0x74, 0x75, 0x72, 0x65, 0x10, 0x07, 0x12, 0x13, 0x0a, 0x0f, 0x44, 0x65, - 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x4c, 0x69, 0x6e, 0x6b, 0x10, 0x08, 0x12, - 0x17, 0x0a, 0x13, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x4c, 0x69, - 0x6e, 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x10, 0x09, 0x12, 0x14, 0x0a, 0x10, 0x44, 0x65, 0x76, 0x69, - 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x10, 0x0a, 0x12, 0x24, - 0x0a, 0x20, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x50, 0x68, 0x61, - 0x73, 0x65, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, - 0x6f, 0x72, 0x10, 0x0b, 0x12, 0x15, 0x0a, 0x11, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, - 0x70, 0x65, 0x5f, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x10, 0x0c, 0x12, 0x14, 0x0a, 0x10, 0x44, - 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x10, - 0x0d, 0x12, 0x14, 0x0a, 0x10, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, - 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x10, 0x0e, 0x12, 0x12, 0x0a, 0x0e, 0x44, 0x65, 0x76, 0x69, 0x63, - 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x50, 0x73, 0x64, 0x10, 0x0f, 0x12, 0x16, 0x0a, 0x12, 0x44, - 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x10, 0x10, 0x12, 0x12, 0x0a, 0x0e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, - 0x65, 0x5f, 0x4d, 0x6b, 0x78, 0x10, 0x11, 0x12, 0x12, 0x0a, 0x0e, 0x44, 0x65, 0x76, 0x69, 0x63, - 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x4b, 0x65, 0x79, 0x10, 0x12, 0x12, 0x17, 0x0a, 0x13, 0x44, - 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x10, 0x13, 0x12, 0x1f, 0x0a, 0x1b, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, - 0x70, 0x65, 0x5f, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x46, 0x61, 0x75, 0x6c, 0x74, 0x41, 0x6c, - 0x61, 0x72, 0x6d, 0x10, 0x14, 0x12, 0x17, 0x0a, 0x13, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, - 0x79, 0x70, 0x65, 0x5f, 0x42, 0x72, 0x65, 0x61, 0x6b, 0x65, 0x72, 0x73, 0x10, 0x15, 0x12, 0x1a, - 0x0a, 0x16, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x50, 0x6f, 0x77, - 0x65, 0x72, 0x53, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x10, 0x16, 0x12, 0x14, 0x0a, 0x10, 0x44, 0x65, - 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x10, 0x17, - 0x12, 0x12, 0x0a, 0x0e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x43, - 0x6b, 0x6d, 0x10, 0x18, 0x12, 0x12, 0x0a, 0x0e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, - 0x70, 0x65, 0x5f, 0x58, 0x63, 0x6a, 0x10, 0x19, 0x12, 0x1a, 0x0a, 0x15, 0x44, 0x65, 0x76, 0x69, - 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x44, 0x6f, 0x6f, 0x72, 0x53, 0x65, 0x6e, 0x73, 0x6f, - 0x72, 0x10, 0xc3, 0x02, 0x12, 0x1c, 0x0a, 0x17, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, - 0x70, 0x65, 0x5f, 0x45, 0x6e, 0x74, 0x72, 0x61, 0x6e, 0x63, 0x65, 0x47, 0x61, 0x74, 0x65, 0x10, - 0xc4, 0x02, 0x12, 0x18, 0x0a, 0x13, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, - 0x5f, 0x45, 0x78, 0x69, 0x74, 0x47, 0x61, 0x74, 0x65, 0x10, 0xc5, 0x02, 0x12, 0x1a, 0x0a, 0x15, - 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x54, 0x77, 0x6f, 0x57, 0x61, - 0x79, 0x47, 0x61, 0x74, 0x65, 0x10, 0xc6, 0x02, 0x12, 0x24, 0x0a, 0x1f, 0x44, 0x65, 0x76, 0x69, - 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x56, 0x65, 0x6e, - 0x64, 0x69, 0x6e, 0x67, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x10, 0xc7, 0x02, 0x12, 0x25, - 0x0a, 0x20, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x53, 0x65, 0x6d, - 0x69, 0x41, 0x75, 0x74, 0x6f, 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x4d, 0x61, 0x63, 0x68, 0x69, - 0x6e, 0x65, 0x10, 0xc8, 0x02, 0x12, 0x25, 0x0a, 0x20, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, - 0x79, 0x70, 0x65, 0x5f, 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, - 0x6e, 0x67, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x10, 0xc9, 0x02, 0x12, 0x1a, 0x0a, 0x15, - 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x41, 0x69, 0x72, 0x43, 0x75, - 0x72, 0x74, 0x61, 0x69, 0x6e, 0x10, 0xca, 0x02, 0x12, 0x1b, 0x0a, 0x16, 0x44, 0x65, 0x76, 0x69, - 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x43, 0x68, 0x69, 0x6c, 0x6c, 0x65, 0x72, 0x55, 0x6e, - 0x69, 0x74, 0x10, 0xcb, 0x02, 0x12, 0x20, 0x0a, 0x1b, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, - 0x79, 0x70, 0x65, 0x5f, 0x43, 0x69, 0x76, 0x69, 0x6c, 0x44, 0x65, 0x66, 0x65, 0x6e, 0x73, 0x65, - 0x44, 0x6f, 0x6f, 0x72, 0x10, 0xcc, 0x02, 0x12, 0x19, 0x0a, 0x14, 0x44, 0x65, 0x76, 0x69, 0x63, - 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x45, 0x73, 0x63, 0x61, 0x6c, 0x61, 0x74, 0x6f, 0x72, 0x10, - 0xcd, 0x02, 0x12, 0x18, 0x0a, 0x13, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, - 0x5f, 0x45, 0x6c, 0x65, 0x76, 0x61, 0x74, 0x6f, 0x72, 0x10, 0xce, 0x02, 0x12, 0x21, 0x0a, 0x1c, - 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x45, 0x6d, 0x65, 0x72, 0x67, - 0x65, 0x6e, 0x63, 0x79, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x69, 0x6e, 0x67, 0x10, 0xcf, 0x02, 0x12, - 0x13, 0x0a, 0x0e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x46, 0x61, - 0x6e, 0x10, 0xd0, 0x02, 0x12, 0x1e, 0x0a, 0x19, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, - 0x70, 0x65, 0x5f, 0x41, 0x69, 0x72, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x65, - 0x72, 0x10, 0xd1, 0x02, 0x12, 0x1a, 0x0a, 0x15, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, - 0x70, 0x65, 0x5f, 0x46, 0x6c, 0x6f, 0x77, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x10, 0xd2, 0x02, - 0x12, 0x20, 0x0a, 0x1b, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x4c, - 0x69, 0x67, 0x68, 0x74, 0x69, 0x6e, 0x67, 0x47, 0x75, 0x69, 0x64, 0x61, 0x6e, 0x63, 0x65, 0x10, - 0xd3, 0x02, 0x12, 0x23, 0x0a, 0x1e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, - 0x5f, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x47, 0x75, 0x69, 0x64, - 0x61, 0x6e, 0x63, 0x65, 0x10, 0xd4, 0x02, 0x12, 0x21, 0x0a, 0x1c, 0x44, 0x65, 0x76, 0x69, 0x63, - 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x45, 0x73, 0x63, 0x61, 0x6c, 0x61, 0x74, 0x6f, 0x72, 0x47, - 0x75, 0x69, 0x64, 0x61, 0x6e, 0x63, 0x65, 0x10, 0xd5, 0x02, 0x12, 0x22, 0x0a, 0x1d, 0x44, 0x65, - 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x47, - 0x61, 0x74, 0x65, 0x47, 0x75, 0x69, 0x64, 0x61, 0x6e, 0x63, 0x65, 0x10, 0xd6, 0x02, 0x12, 0x29, - 0x0a, 0x24, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x53, 0x65, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x61, 0x63, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x47, 0x75, - 0x69, 0x64, 0x61, 0x6e, 0x63, 0x65, 0x10, 0xd7, 0x02, 0x12, 0x1d, 0x0a, 0x18, 0x44, 0x65, 0x76, - 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x53, - 0x77, 0x69, 0x74, 0x63, 0x68, 0x10, 0xd8, 0x02, 0x12, 0x1d, 0x0a, 0x18, 0x44, 0x65, 0x76, 0x69, - 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x50, 0x6c, 0x63, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, - 0x6c, 0x6c, 0x65, 0x72, 0x10, 0xd9, 0x02, 0x12, 0x19, 0x0a, 0x14, 0x44, 0x65, 0x76, 0x69, 0x63, - 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x57, 0x61, 0x74, 0x65, 0x72, 0x50, 0x75, 0x6d, 0x70, 0x10, - 0xda, 0x02, 0x12, 0x19, 0x0a, 0x14, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, - 0x5f, 0x57, 0x61, 0x74, 0x65, 0x72, 0x54, 0x61, 0x6e, 0x6b, 0x10, 0xdb, 0x02, 0x12, 0x22, 0x0a, - 0x1d, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x50, 0x75, 0x72, 0x69, - 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x10, 0xdc, - 0x02, 0x12, 0x18, 0x0a, 0x13, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, - 0x54, 0x68, 0x53, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x10, 0xdd, 0x02, 0x12, 0x19, 0x0a, 0x14, 0x44, - 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x43, 0x4f, 0x32, 0x53, 0x65, 0x6e, - 0x73, 0x6f, 0x72, 0x10, 0xde, 0x02, 0x12, 0x1c, 0x0a, 0x17, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, - 0x54, 0x79, 0x70, 0x65, 0x5f, 0x57, 0x61, 0x74, 0x65, 0x72, 0x54, 0x53, 0x65, 0x6e, 0x73, 0x6f, - 0x72, 0x10, 0xdf, 0x02, 0x12, 0x1e, 0x0a, 0x19, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, - 0x70, 0x65, 0x5f, 0x50, 0x72, 0x65, 0x73, 0x73, 0x75, 0x72, 0x65, 0x53, 0x65, 0x6e, 0x73, 0x6f, - 0x72, 0x10, 0xe0, 0x02, 0x12, 0x1a, 0x0a, 0x15, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, - 0x70, 0x65, 0x5f, 0x46, 0x6c, 0x6f, 0x77, 0x53, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x10, 0xe1, 0x02, - 0x12, 0x21, 0x0a, 0x1c, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x54, - 0x65, 0x6d, 0x70, 0x65, 0x72, 0x61, 0x74, 0x75, 0x72, 0x65, 0x53, 0x65, 0x6e, 0x73, 0x6f, 0x72, - 0x10, 0xe2, 0x02, 0x12, 0x1c, 0x0a, 0x17, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, - 0x65, 0x5f, 0x43, 0x6f, 0x6f, 0x6c, 0x69, 0x6e, 0x67, 0x54, 0x6f, 0x77, 0x65, 0x72, 0x10, 0xe4, + 0x6f, 0x75, 0x70, 0x73, 0x22, 0x74, 0x0a, 0x03, 0x58, 0x63, 0x6a, 0x12, 0x0e, 0x0a, 0x02, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x5d, 0x0a, 0x19, 0x65, + 0x6c, 0x65, 0x63, 0x74, 0x72, 0x6f, 0x6e, 0x69, 0x63, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, + 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, + 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x45, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x6f, 0x6e, 0x69, + 0x63, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, + 0x19, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x6f, 0x6e, 0x69, 0x63, 0x43, 0x6f, 0x6d, 0x70, 0x6f, + 0x6e, 0x65, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x2a, 0xc0, 0x16, 0x0a, 0x0a, 0x44, + 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x12, 0x44, 0x65, 0x76, + 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x10, + 0x00, 0x12, 0x1e, 0x0a, 0x1a, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, + 0x50, 0x68, 0x79, 0x73, 0x69, 0x63, 0x61, 0x6c, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x10, + 0x01, 0x12, 0x19, 0x0a, 0x15, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, + 0x43, 0x68, 0x65, 0x63, 0x6b, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x10, 0x02, 0x12, 0x16, 0x0a, 0x12, + 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x54, 0x75, 0x72, 0x6e, 0x6f, + 0x75, 0x74, 0x10, 0x03, 0x12, 0x15, 0x0a, 0x11, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, + 0x70, 0x65, 0x5f, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x10, 0x04, 0x12, 0x1a, 0x0a, 0x16, 0x44, + 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x70, + 0x6f, 0x6e, 0x64, 0x65, 0x72, 0x10, 0x05, 0x12, 0x14, 0x0a, 0x10, 0x44, 0x65, 0x76, 0x69, 0x63, + 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x53, 0x6c, 0x6f, 0x70, 0x65, 0x10, 0x06, 0x12, 0x21, 0x0a, + 0x1d, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x53, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x43, 0x75, 0x72, 0x76, 0x61, 0x74, 0x75, 0x72, 0x65, 0x10, 0x07, + 0x12, 0x13, 0x0a, 0x0f, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x4c, + 0x69, 0x6e, 0x6b, 0x10, 0x08, 0x12, 0x17, 0x0a, 0x13, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, + 0x79, 0x70, 0x65, 0x5f, 0x4c, 0x69, 0x6e, 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x10, 0x09, 0x12, 0x14, + 0x0a, 0x10, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x52, 0x65, 0x6c, + 0x61, 0x79, 0x10, 0x0a, 0x12, 0x24, 0x0a, 0x20, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, + 0x70, 0x65, 0x5f, 0x50, 0x68, 0x61, 0x73, 0x65, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x50, + 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x10, 0x0b, 0x12, 0x15, 0x0a, 0x11, 0x44, 0x65, + 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x10, + 0x0c, 0x12, 0x14, 0x0a, 0x10, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, + 0x4c, 0x69, 0x67, 0x68, 0x74, 0x10, 0x0d, 0x12, 0x14, 0x0a, 0x10, 0x44, 0x65, 0x76, 0x69, 0x63, + 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x10, 0x0e, 0x12, 0x12, 0x0a, + 0x0e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x50, 0x73, 0x64, 0x10, + 0x0f, 0x12, 0x16, 0x0a, 0x12, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, + 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x10, 0x10, 0x12, 0x12, 0x0a, 0x0e, 0x44, 0x65, 0x76, + 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x4d, 0x6b, 0x78, 0x10, 0x11, 0x12, 0x12, 0x0a, + 0x0e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x4b, 0x65, 0x79, 0x10, + 0x12, 0x12, 0x17, 0x0a, 0x13, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, + 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x10, 0x13, 0x12, 0x1f, 0x0a, 0x1b, 0x44, 0x65, + 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x46, + 0x61, 0x75, 0x6c, 0x74, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x10, 0x14, 0x12, 0x17, 0x0a, 0x13, 0x44, + 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x42, 0x72, 0x65, 0x61, 0x6b, 0x65, + 0x72, 0x73, 0x10, 0x15, 0x12, 0x1a, 0x0a, 0x16, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, + 0x70, 0x65, 0x5f, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x53, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x10, 0x16, + 0x12, 0x14, 0x0a, 0x10, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x52, + 0x6f, 0x75, 0x74, 0x65, 0x10, 0x17, 0x12, 0x12, 0x0a, 0x0e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, + 0x54, 0x79, 0x70, 0x65, 0x5f, 0x43, 0x6b, 0x6d, 0x10, 0x18, 0x12, 0x12, 0x0a, 0x0e, 0x44, 0x65, + 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x58, 0x63, 0x6a, 0x10, 0x19, 0x12, 0x15, + 0x0a, 0x11, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x43, 0x6b, 0x6d, + 0x50, 0x73, 0x6c, 0x10, 0x1a, 0x12, 0x1a, 0x0a, 0x15, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, + 0x79, 0x70, 0x65, 0x5f, 0x44, 0x6f, 0x6f, 0x72, 0x53, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x10, 0xc3, + 0x02, 0x12, 0x1c, 0x0a, 0x17, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, + 0x45, 0x6e, 0x74, 0x72, 0x61, 0x6e, 0x63, 0x65, 0x47, 0x61, 0x74, 0x65, 0x10, 0xc4, 0x02, 0x12, + 0x18, 0x0a, 0x13, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x45, 0x78, + 0x69, 0x74, 0x47, 0x61, 0x74, 0x65, 0x10, 0xc5, 0x02, 0x12, 0x1a, 0x0a, 0x15, 0x44, 0x65, 0x76, + 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x54, 0x77, 0x6f, 0x57, 0x61, 0x79, 0x47, 0x61, + 0x74, 0x65, 0x10, 0xc6, 0x02, 0x12, 0x24, 0x0a, 0x1f, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, + 0x79, 0x70, 0x65, 0x5f, 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x56, 0x65, 0x6e, 0x64, 0x69, 0x6e, + 0x67, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x10, 0xc7, 0x02, 0x12, 0x25, 0x0a, 0x20, 0x44, + 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x53, 0x65, 0x6d, 0x69, 0x41, 0x75, + 0x74, 0x6f, 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x10, + 0xc8, 0x02, 0x12, 0x25, 0x0a, 0x20, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, + 0x5f, 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x4d, + 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x10, 0xc9, 0x02, 0x12, 0x1a, 0x0a, 0x15, 0x44, 0x65, 0x76, + 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x41, 0x69, 0x72, 0x43, 0x75, 0x72, 0x74, 0x61, + 0x69, 0x6e, 0x10, 0xca, 0x02, 0x12, 0x1b, 0x0a, 0x16, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, + 0x79, 0x70, 0x65, 0x5f, 0x43, 0x68, 0x69, 0x6c, 0x6c, 0x65, 0x72, 0x55, 0x6e, 0x69, 0x74, 0x10, + 0xcb, 0x02, 0x12, 0x20, 0x0a, 0x1b, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, + 0x5f, 0x43, 0x69, 0x76, 0x69, 0x6c, 0x44, 0x65, 0x66, 0x65, 0x6e, 0x73, 0x65, 0x44, 0x6f, 0x6f, + 0x72, 0x10, 0xcc, 0x02, 0x12, 0x19, 0x0a, 0x14, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, + 0x70, 0x65, 0x5f, 0x45, 0x73, 0x63, 0x61, 0x6c, 0x61, 0x74, 0x6f, 0x72, 0x10, 0xcd, 0x02, 0x12, + 0x18, 0x0a, 0x13, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x45, 0x6c, + 0x65, 0x76, 0x61, 0x74, 0x6f, 0x72, 0x10, 0xce, 0x02, 0x12, 0x21, 0x0a, 0x1c, 0x44, 0x65, 0x76, + 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x45, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x6e, 0x63, + 0x79, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x69, 0x6e, 0x67, 0x10, 0xcf, 0x02, 0x12, 0x13, 0x0a, 0x0e, + 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x46, 0x61, 0x6e, 0x10, 0xd0, 0x02, 0x12, 0x1e, 0x0a, 0x19, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, - 0x57, 0x61, 0x74, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x10, 0xe5, - 0x02, 0x12, 0x1b, 0x0a, 0x16, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, - 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x48, 0x6f, 0x73, 0x74, 0x10, 0xe6, 0x02, 0x12, 0x1d, - 0x0a, 0x18, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x53, 0x6d, 0x6f, - 0x6b, 0x65, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x10, 0xe7, 0x02, 0x12, 0x23, 0x0a, - 0x1e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x54, 0x65, 0x6d, 0x70, - 0x65, 0x72, 0x61, 0x74, 0x75, 0x72, 0x65, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x10, - 0xe8, 0x02, 0x12, 0x25, 0x0a, 0x20, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, - 0x5f, 0x4d, 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x46, 0x69, 0x72, 0x65, 0x41, 0x6c, 0x61, 0x72, 0x6d, - 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x10, 0xe9, 0x02, 0x12, 0x23, 0x0a, 0x1e, 0x44, 0x65, 0x76, - 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x47, 0x61, 0x73, 0x46, 0x69, 0x72, 0x65, 0x45, - 0x78, 0x74, 0x69, 0x6e, 0x67, 0x75, 0x69, 0x73, 0x68, 0x65, 0x72, 0x10, 0xea, 0x02, 0x12, 0x19, - 0x0a, 0x14, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x41, 0x6c, 0x61, - 0x72, 0x6d, 0x42, 0x65, 0x6c, 0x6c, 0x10, 0xeb, 0x02, 0x12, 0x21, 0x0a, 0x1c, 0x44, 0x65, 0x76, - 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x46, 0x69, 0x72, 0x65, 0x52, 0x6f, 0x6c, 0x6c, - 0x65, 0x72, 0x53, 0x68, 0x75, 0x74, 0x74, 0x65, 0x72, 0x10, 0xec, 0x02, 0x12, 0x16, 0x0a, 0x11, - 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x46, 0x61, 0x73, 0x41, 0x63, - 0x73, 0x10, 0xed, 0x02, 0x12, 0x16, 0x0a, 0x11, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, - 0x70, 0x65, 0x5f, 0x46, 0x61, 0x73, 0x41, 0x66, 0x63, 0x10, 0xee, 0x02, 0x12, 0x22, 0x0a, 0x1d, - 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x4e, 0x6f, 0x6e, 0x46, 0x69, - 0x72, 0x65, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x10, 0xef, 0x02, - 0x12, 0x22, 0x0a, 0x1d, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x57, - 0x61, 0x74, 0x65, 0x72, 0x46, 0x6c, 0x6f, 0x77, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x61, 0x74, 0x6f, - 0x72, 0x10, 0xf0, 0x02, 0x12, 0x1f, 0x0a, 0x1a, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, - 0x70, 0x65, 0x5f, 0x50, 0x75, 0x6d, 0x70, 0x53, 0x74, 0x61, 0x72, 0x74, 0x42, 0x75, 0x74, 0x74, - 0x6f, 0x6e, 0x10, 0xf1, 0x02, 0x12, 0x27, 0x0a, 0x22, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, - 0x79, 0x70, 0x65, 0x5f, 0x54, 0x65, 0x6d, 0x70, 0x65, 0x72, 0x61, 0x74, 0x75, 0x72, 0x65, 0x53, - 0x65, 0x6e, 0x73, 0x69, 0x6e, 0x67, 0x43, 0x61, 0x62, 0x6c, 0x65, 0x10, 0xf2, 0x02, 0x12, 0x1a, - 0x0a, 0x15, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x46, 0x69, 0x72, - 0x65, 0x44, 0x61, 0x6d, 0x70, 0x65, 0x72, 0x10, 0xf3, 0x02, 0x12, 0x27, 0x0a, 0x22, 0x44, 0x65, - 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x45, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x69, - 0x63, 0x53, 0x6d, 0x6f, 0x6b, 0x65, 0x46, 0x69, 0x72, 0x65, 0x44, 0x61, 0x6d, 0x70, 0x65, 0x72, - 0x10, 0xf4, 0x02, 0x12, 0x29, 0x0a, 0x24, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, - 0x65, 0x5f, 0x46, 0x69, 0x72, 0x65, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x63, 0x6f, 0x6e, 0x6e, 0x65, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x10, 0xf5, 0x02, 0x12, 0x19, - 0x0a, 0x14, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x46, 0x6c, 0x6f, - 0x6f, 0x64, 0x47, 0x61, 0x74, 0x65, 0x10, 0xf6, 0x02, 0x12, 0x1b, 0x0a, 0x16, 0x44, 0x65, 0x76, - 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x57, 0x69, 0x72, 0x65, 0x43, 0x61, 0x62, 0x69, - 0x6e, 0x65, 0x74, 0x10, 0xf7, 0x02, 0x12, 0x1e, 0x0a, 0x19, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, - 0x54, 0x79, 0x70, 0x65, 0x5f, 0x43, 0x69, 0x72, 0x63, 0x75, 0x69, 0x74, 0x42, 0x72, 0x65, 0x61, - 0x6b, 0x65, 0x72, 0x10, 0xf8, 0x02, 0x12, 0x19, 0x0a, 0x14, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, - 0x54, 0x79, 0x70, 0x65, 0x5f, 0x52, 0x65, 0x63, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x10, 0xf9, + 0x41, 0x69, 0x72, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x10, 0xd1, + 0x02, 0x12, 0x1a, 0x0a, 0x15, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, + 0x46, 0x6c, 0x6f, 0x77, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x10, 0xd2, 0x02, 0x12, 0x20, 0x0a, + 0x1b, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x4c, 0x69, 0x67, 0x68, + 0x74, 0x69, 0x6e, 0x67, 0x47, 0x75, 0x69, 0x64, 0x61, 0x6e, 0x63, 0x65, 0x10, 0xd3, 0x02, 0x12, + 0x23, 0x0a, 0x1e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x50, 0x6f, + 0x77, 0x65, 0x72, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x47, 0x75, 0x69, 0x64, 0x61, 0x6e, 0x63, + 0x65, 0x10, 0xd4, 0x02, 0x12, 0x21, 0x0a, 0x1c, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, + 0x70, 0x65, 0x5f, 0x45, 0x73, 0x63, 0x61, 0x6c, 0x61, 0x74, 0x6f, 0x72, 0x47, 0x75, 0x69, 0x64, + 0x61, 0x6e, 0x63, 0x65, 0x10, 0xd5, 0x02, 0x12, 0x22, 0x0a, 0x1d, 0x44, 0x65, 0x76, 0x69, 0x63, + 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x47, 0x61, 0x74, 0x65, + 0x47, 0x75, 0x69, 0x64, 0x61, 0x6e, 0x63, 0x65, 0x10, 0xd6, 0x02, 0x12, 0x29, 0x0a, 0x24, 0x44, + 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x45, 0x76, 0x61, 0x63, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x47, 0x75, 0x69, 0x64, 0x61, + 0x6e, 0x63, 0x65, 0x10, 0xd7, 0x02, 0x12, 0x1d, 0x0a, 0x18, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, + 0x54, 0x79, 0x70, 0x65, 0x5f, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x53, 0x77, 0x69, 0x74, + 0x63, 0x68, 0x10, 0xd8, 0x02, 0x12, 0x1d, 0x0a, 0x18, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, + 0x79, 0x70, 0x65, 0x5f, 0x50, 0x6c, 0x63, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, + 0x72, 0x10, 0xd9, 0x02, 0x12, 0x19, 0x0a, 0x14, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, + 0x70, 0x65, 0x5f, 0x57, 0x61, 0x74, 0x65, 0x72, 0x50, 0x75, 0x6d, 0x70, 0x10, 0xda, 0x02, 0x12, + 0x19, 0x0a, 0x14, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x57, 0x61, + 0x74, 0x65, 0x72, 0x54, 0x61, 0x6e, 0x6b, 0x10, 0xdb, 0x02, 0x12, 0x22, 0x0a, 0x1d, 0x44, 0x65, + 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x50, 0x75, 0x72, 0x69, 0x66, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x10, 0xdc, 0x02, 0x12, 0x18, + 0x0a, 0x13, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x54, 0x68, 0x53, + 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x10, 0xdd, 0x02, 0x12, 0x19, 0x0a, 0x14, 0x44, 0x65, 0x76, 0x69, + 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x43, 0x4f, 0x32, 0x53, 0x65, 0x6e, 0x73, 0x6f, 0x72, + 0x10, 0xde, 0x02, 0x12, 0x1c, 0x0a, 0x17, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, + 0x65, 0x5f, 0x57, 0x61, 0x74, 0x65, 0x72, 0x54, 0x53, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x10, 0xdf, 0x02, 0x12, 0x1e, 0x0a, 0x19, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, - 0x48, 0x61, 0x6e, 0x64, 0x63, 0x61, 0x72, 0x74, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x10, 0xfa, - 0x02, 0x12, 0x22, 0x0a, 0x1d, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, - 0x56, 0x6f, 0x6c, 0x74, 0x61, 0x67, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, - 0x65, 0x72, 0x10, 0xfb, 0x02, 0x12, 0x23, 0x0a, 0x1e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, - 0x79, 0x70, 0x65, 0x5f, 0x54, 0x68, 0x72, 0x65, 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x10, 0xfc, 0x02, 0x12, 0x21, 0x0a, 0x1c, 0x44, 0x65, - 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x6e, 0x69, - 0x6e, 0x67, 0x41, 0x72, 0x72, 0x65, 0x73, 0x74, 0x65, 0x72, 0x10, 0xfd, 0x02, 0x12, 0x1c, 0x0a, - 0x17, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x44, 0x69, 0x73, 0x63, - 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x10, 0xfe, 0x02, 0x12, 0x14, 0x0a, 0x0f, 0x44, - 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x50, 0x69, 0x70, 0x65, 0x10, 0xff, - 0x02, 0x12, 0x1b, 0x0a, 0x16, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, - 0x50, 0x69, 0x70, 0x65, 0x46, 0x69, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x10, 0x80, 0x03, 0x12, 0x1b, - 0x0a, 0x16, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x50, 0x6f, 0x77, - 0x65, 0x72, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x10, 0x81, 0x03, 0x12, 0x1e, 0x0a, 0x19, 0x44, - 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x45, 0x61, 0x72, 0x74, 0x68, 0x69, - 0x6e, 0x67, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x10, 0x82, 0x03, 0x12, 0x1b, 0x0a, 0x16, 0x44, - 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x41, 0x69, 0x72, 0x50, 0x61, 0x76, - 0x69, 0x6c, 0x69, 0x6f, 0x6e, 0x10, 0x83, 0x03, 0x12, 0x15, 0x0a, 0x10, 0x44, 0x65, 0x76, 0x69, - 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x56, 0x61, 0x6c, 0x76, 0x65, 0x10, 0x84, 0x03, 0x12, - 0x20, 0x0a, 0x1b, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x47, 0x61, - 0x73, 0x4d, 0x69, 0x78, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x61, 0x6d, 0x62, 0x65, 0x72, 0x10, 0x85, - 0x03, 0x12, 0x29, 0x0a, 0x24, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, - 0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x69, 0x72, 0x43, 0x6f, - 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x10, 0x86, 0x03, 0x12, 0x25, 0x0a, 0x20, - 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x41, 0x69, 0x72, 0x50, 0x75, - 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, - 0x10, 0x87, 0x03, 0x12, 0x1b, 0x0a, 0x16, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, - 0x65, 0x5f, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x10, 0x88, 0x03, - 0x2a, 0x2c, 0x0a, 0x04, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x6f, 0x6e, 0x65, - 0x10, 0x00, 0x12, 0x05, 0x0a, 0x01, 0x41, 0x10, 0x01, 0x12, 0x05, 0x0a, 0x01, 0x42, 0x10, 0x02, - 0x12, 0x05, 0x0a, 0x01, 0x43, 0x10, 0x03, 0x12, 0x05, 0x0a, 0x01, 0x44, 0x10, 0x04, 0x2a, 0x20, - 0x0a, 0x09, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x08, 0x0a, 0x04, 0x4c, - 0x45, 0x46, 0x54, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x52, 0x49, 0x47, 0x48, 0x54, 0x10, 0x01, - 0x2a, 0x43, 0x0a, 0x0e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x54, 0x79, - 0x70, 0x65, 0x12, 0x0c, 0x0a, 0x08, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x10, 0x00, - 0x12, 0x0f, 0x0a, 0x0b, 0x41, 0x78, 0x6c, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x10, - 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x49, 0x6e, 0x73, 0x75, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x4a, 0x6f, - 0x69, 0x6e, 0x74, 0x10, 0x02, 0x42, 0x1a, 0x5a, 0x18, 0x2e, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, - 0x69, 0x74, 0x6f, 0x72, 0x79, 0x2f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x50, 0x72, 0x65, 0x73, 0x73, 0x75, 0x72, 0x65, 0x53, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x10, 0xe0, + 0x02, 0x12, 0x1a, 0x0a, 0x15, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, + 0x46, 0x6c, 0x6f, 0x77, 0x53, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x10, 0xe1, 0x02, 0x12, 0x21, 0x0a, + 0x1c, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x54, 0x65, 0x6d, 0x70, + 0x65, 0x72, 0x61, 0x74, 0x75, 0x72, 0x65, 0x53, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x10, 0xe2, 0x02, + 0x12, 0x1c, 0x0a, 0x17, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x43, + 0x6f, 0x6f, 0x6c, 0x69, 0x6e, 0x67, 0x54, 0x6f, 0x77, 0x65, 0x72, 0x10, 0xe4, 0x02, 0x12, 0x1e, + 0x0a, 0x19, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x57, 0x61, 0x74, + 0x65, 0x72, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x10, 0xe5, 0x02, 0x12, 0x1b, + 0x0a, 0x16, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x4e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x48, 0x6f, 0x73, 0x74, 0x10, 0xe6, 0x02, 0x12, 0x1d, 0x0a, 0x18, 0x44, + 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x53, 0x6d, 0x6f, 0x6b, 0x65, 0x44, + 0x65, 0x74, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x10, 0xe7, 0x02, 0x12, 0x23, 0x0a, 0x1e, 0x44, 0x65, + 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x54, 0x65, 0x6d, 0x70, 0x65, 0x72, 0x61, + 0x74, 0x75, 0x72, 0x65, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x10, 0xe8, 0x02, 0x12, + 0x25, 0x0a, 0x20, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x4d, 0x61, + 0x6e, 0x75, 0x61, 0x6c, 0x46, 0x69, 0x72, 0x65, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x42, 0x75, 0x74, + 0x74, 0x6f, 0x6e, 0x10, 0xe9, 0x02, 0x12, 0x23, 0x0a, 0x1e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, + 0x54, 0x79, 0x70, 0x65, 0x5f, 0x47, 0x61, 0x73, 0x46, 0x69, 0x72, 0x65, 0x45, 0x78, 0x74, 0x69, + 0x6e, 0x67, 0x75, 0x69, 0x73, 0x68, 0x65, 0x72, 0x10, 0xea, 0x02, 0x12, 0x19, 0x0a, 0x14, 0x44, + 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x42, + 0x65, 0x6c, 0x6c, 0x10, 0xeb, 0x02, 0x12, 0x21, 0x0a, 0x1c, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, + 0x54, 0x79, 0x70, 0x65, 0x5f, 0x46, 0x69, 0x72, 0x65, 0x52, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x53, + 0x68, 0x75, 0x74, 0x74, 0x65, 0x72, 0x10, 0xec, 0x02, 0x12, 0x16, 0x0a, 0x11, 0x44, 0x65, 0x76, + 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x46, 0x61, 0x73, 0x41, 0x63, 0x73, 0x10, 0xed, + 0x02, 0x12, 0x16, 0x0a, 0x11, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, + 0x46, 0x61, 0x73, 0x41, 0x66, 0x63, 0x10, 0xee, 0x02, 0x12, 0x22, 0x0a, 0x1d, 0x44, 0x65, 0x76, + 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x4e, 0x6f, 0x6e, 0x46, 0x69, 0x72, 0x65, 0x50, + 0x6f, 0x77, 0x65, 0x72, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x10, 0xef, 0x02, 0x12, 0x22, 0x0a, + 0x1d, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x57, 0x61, 0x74, 0x65, + 0x72, 0x46, 0x6c, 0x6f, 0x77, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x10, 0xf0, + 0x02, 0x12, 0x1f, 0x0a, 0x1a, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, + 0x50, 0x75, 0x6d, 0x70, 0x53, 0x74, 0x61, 0x72, 0x74, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x10, + 0xf1, 0x02, 0x12, 0x27, 0x0a, 0x22, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, + 0x5f, 0x54, 0x65, 0x6d, 0x70, 0x65, 0x72, 0x61, 0x74, 0x75, 0x72, 0x65, 0x53, 0x65, 0x6e, 0x73, + 0x69, 0x6e, 0x67, 0x43, 0x61, 0x62, 0x6c, 0x65, 0x10, 0xf2, 0x02, 0x12, 0x1a, 0x0a, 0x15, 0x44, + 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x46, 0x69, 0x72, 0x65, 0x44, 0x61, + 0x6d, 0x70, 0x65, 0x72, 0x10, 0xf3, 0x02, 0x12, 0x27, 0x0a, 0x22, 0x44, 0x65, 0x76, 0x69, 0x63, + 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x45, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x69, 0x63, 0x53, 0x6d, + 0x6f, 0x6b, 0x65, 0x46, 0x69, 0x72, 0x65, 0x44, 0x61, 0x6d, 0x70, 0x65, 0x72, 0x10, 0xf4, 0x02, + 0x12, 0x29, 0x0a, 0x24, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x46, + 0x69, 0x72, 0x65, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x10, 0xf5, 0x02, 0x12, 0x19, 0x0a, 0x14, 0x44, + 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x46, 0x6c, 0x6f, 0x6f, 0x64, 0x47, + 0x61, 0x74, 0x65, 0x10, 0xf6, 0x02, 0x12, 0x1b, 0x0a, 0x16, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, + 0x54, 0x79, 0x70, 0x65, 0x5f, 0x57, 0x69, 0x72, 0x65, 0x43, 0x61, 0x62, 0x69, 0x6e, 0x65, 0x74, + 0x10, 0xf7, 0x02, 0x12, 0x1e, 0x0a, 0x19, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, + 0x65, 0x5f, 0x43, 0x69, 0x72, 0x63, 0x75, 0x69, 0x74, 0x42, 0x72, 0x65, 0x61, 0x6b, 0x65, 0x72, + 0x10, 0xf8, 0x02, 0x12, 0x19, 0x0a, 0x14, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, + 0x65, 0x5f, 0x52, 0x65, 0x63, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x10, 0xf9, 0x02, 0x12, 0x1e, + 0x0a, 0x19, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x48, 0x61, 0x6e, + 0x64, 0x63, 0x61, 0x72, 0x74, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x10, 0xfa, 0x02, 0x12, 0x22, + 0x0a, 0x1d, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x56, 0x6f, 0x6c, + 0x74, 0x61, 0x67, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x72, 0x10, + 0xfb, 0x02, 0x12, 0x23, 0x0a, 0x1e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, + 0x5f, 0x54, 0x68, 0x72, 0x65, 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x77, + 0x69, 0x74, 0x63, 0x68, 0x10, 0xfc, 0x02, 0x12, 0x21, 0x0a, 0x1c, 0x44, 0x65, 0x76, 0x69, 0x63, + 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x6e, 0x69, 0x6e, 0x67, 0x41, + 0x72, 0x72, 0x65, 0x73, 0x74, 0x65, 0x72, 0x10, 0xfd, 0x02, 0x12, 0x1c, 0x0a, 0x17, 0x44, 0x65, + 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x6e, + 0x65, 0x63, 0x74, 0x6f, 0x72, 0x10, 0xfe, 0x02, 0x12, 0x14, 0x0a, 0x0f, 0x44, 0x65, 0x76, 0x69, + 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x50, 0x69, 0x70, 0x65, 0x10, 0xff, 0x02, 0x12, 0x1b, + 0x0a, 0x16, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x50, 0x69, 0x70, + 0x65, 0x46, 0x69, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x10, 0x80, 0x03, 0x12, 0x1b, 0x0a, 0x16, 0x44, + 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x53, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x10, 0x81, 0x03, 0x12, 0x1e, 0x0a, 0x19, 0x44, 0x65, 0x76, 0x69, + 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x45, 0x61, 0x72, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x44, + 0x65, 0x76, 0x69, 0x63, 0x65, 0x10, 0x82, 0x03, 0x12, 0x1b, 0x0a, 0x16, 0x44, 0x65, 0x76, 0x69, + 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x41, 0x69, 0x72, 0x50, 0x61, 0x76, 0x69, 0x6c, 0x69, + 0x6f, 0x6e, 0x10, 0x83, 0x03, 0x12, 0x15, 0x0a, 0x10, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, + 0x79, 0x70, 0x65, 0x5f, 0x56, 0x61, 0x6c, 0x76, 0x65, 0x10, 0x84, 0x03, 0x12, 0x20, 0x0a, 0x1b, + 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x47, 0x61, 0x73, 0x4d, 0x69, + 0x78, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x61, 0x6d, 0x62, 0x65, 0x72, 0x10, 0x85, 0x03, 0x12, 0x29, + 0x0a, 0x24, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x43, 0x6f, 0x6d, + 0x62, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x69, 0x72, 0x43, 0x6f, 0x6e, 0x64, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x10, 0x86, 0x03, 0x12, 0x25, 0x0a, 0x20, 0x44, 0x65, 0x76, + 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x41, 0x69, 0x72, 0x50, 0x75, 0x72, 0x69, 0x66, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x10, 0x87, 0x03, + 0x12, 0x1b, 0x0a, 0x16, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x45, + 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x10, 0x88, 0x03, 0x2a, 0x2c, 0x0a, + 0x04, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x6f, 0x6e, 0x65, 0x10, 0x00, 0x12, + 0x05, 0x0a, 0x01, 0x41, 0x10, 0x01, 0x12, 0x05, 0x0a, 0x01, 0x42, 0x10, 0x02, 0x12, 0x05, 0x0a, + 0x01, 0x43, 0x10, 0x03, 0x12, 0x05, 0x0a, 0x01, 0x44, 0x10, 0x04, 0x2a, 0x20, 0x0a, 0x09, 0x44, + 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x08, 0x0a, 0x04, 0x4c, 0x45, 0x46, 0x54, + 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x52, 0x49, 0x47, 0x48, 0x54, 0x10, 0x01, 0x2a, 0x43, 0x0a, + 0x0e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, + 0x0c, 0x0a, 0x08, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x10, 0x00, 0x12, 0x0f, 0x0a, + 0x0b, 0x41, 0x78, 0x6c, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x10, 0x01, 0x12, 0x12, + 0x0a, 0x0e, 0x49, 0x6e, 0x73, 0x75, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x4a, 0x6f, 0x69, 0x6e, 0x74, + 0x10, 0x02, 0x42, 0x1a, 0x5a, 0x18, 0x2e, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, + 0x72, 0x79, 0x2f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -6322,7 +6434,7 @@ func file_model_proto_rawDescGZIP() []byte { } var file_model_proto_enumTypes = make([]protoimpl.EnumInfo, 15) -var file_model_proto_msgTypes = make([]protoimpl.MessageInfo, 57) +var file_model_proto_msgTypes = make([]protoimpl.MessageInfo, 58) var file_model_proto_goTypes = []interface{}{ (DeviceType)(0), // 0: model.DeviceType (Port)(0), // 1: model.Port @@ -6363,39 +6475,40 @@ var file_model_proto_goTypes = []interface{}{ (*ElectronicGroup)(nil), // 36: model.ElectronicGroup (*ElectronicComponent)(nil), // 37: model.ElectronicComponent (*Mkx)(nil), // 38: model.Mkx - (*Platform)(nil), // 39: model.Platform - (*Key)(nil), // 40: model.Key - (*CentralizedStationRef)(nil), // 41: model.CentralizedStationRef - (*CjData)(nil), // 42: model.CjData - (*CjDataItem)(nil), // 43: model.CjDataItem - (*QdData)(nil), // 44: model.QdData - (*AsdGroup)(nil), // 45: model.AsdGroup - (*CiSectionCodePoint)(nil), // 46: model.CiSectionCodePoint - (*Route)(nil), // 47: model.Route - (*Pipe)(nil), // 48: model.Pipe - (*PipeFitting)(nil), // 49: model.PipeFitting - (*CircuitBreaker)(nil), // 50: model.CircuitBreaker - (*ThreePositionSwitch)(nil), // 51: model.ThreePositionSwitch - (*HandcartSwitch)(nil), // 52: model.HandcartSwitch - (*Rectifier)(nil), // 53: model.Rectifier - (*Disconnector)(nil), // 54: model.Disconnector - (*VoltageTransformer)(nil), // 55: model.VoltageTransformer - (*PowerSource)(nil), // 56: model.PowerSource - (*LightningArrester)(nil), // 57: model.LightningArrester - (*EarthingDevice)(nil), // 58: model.EarthingDevice - (*NetworkSwitch)(nil), // 59: model.NetworkSwitch - (*WireCabinet)(nil), // 60: model.WireCabinet - (*AirPavilion)(nil), // 61: model.AirPavilion - (*Valve)(nil), // 62: model.Valve - (*GasMixingChamber)(nil), // 63: model.GasMixingChamber - (*CombinationAirConditioner)(nil), // 64: model.CombinationAirConditioner - (*AirPurificationDevice)(nil), // 65: model.AirPurificationDevice - (*AirCurtain)(nil), // 66: model.AirCurtain - (*Fan)(nil), // 67: model.Fan - (*GasEnvironment)(nil), // 68: model.GasEnvironment - (*Ckm)(nil), // 69: model.Ckm - (*Xcj)(nil), // 70: model.Xcj - (*Route_TurnoutPosition)(nil), // 71: model.Route.TurnoutPosition + (*CkmPsl)(nil), // 39: model.CkmPsl + (*Platform)(nil), // 40: model.Platform + (*Key)(nil), // 41: model.Key + (*CentralizedStationRef)(nil), // 42: model.CentralizedStationRef + (*CjData)(nil), // 43: model.CjData + (*CjDataItem)(nil), // 44: model.CjDataItem + (*QdData)(nil), // 45: model.QdData + (*AsdGroup)(nil), // 46: model.AsdGroup + (*CiSectionCodePoint)(nil), // 47: model.CiSectionCodePoint + (*Route)(nil), // 48: model.Route + (*Pipe)(nil), // 49: model.Pipe + (*PipeFitting)(nil), // 50: model.PipeFitting + (*CircuitBreaker)(nil), // 51: model.CircuitBreaker + (*ThreePositionSwitch)(nil), // 52: model.ThreePositionSwitch + (*HandcartSwitch)(nil), // 53: model.HandcartSwitch + (*Rectifier)(nil), // 54: model.Rectifier + (*Disconnector)(nil), // 55: model.Disconnector + (*VoltageTransformer)(nil), // 56: model.VoltageTransformer + (*PowerSource)(nil), // 57: model.PowerSource + (*LightningArrester)(nil), // 58: model.LightningArrester + (*EarthingDevice)(nil), // 59: model.EarthingDevice + (*NetworkSwitch)(nil), // 60: model.NetworkSwitch + (*WireCabinet)(nil), // 61: model.WireCabinet + (*AirPavilion)(nil), // 62: model.AirPavilion + (*Valve)(nil), // 63: model.Valve + (*GasMixingChamber)(nil), // 64: model.GasMixingChamber + (*CombinationAirConditioner)(nil), // 65: model.CombinationAirConditioner + (*AirPurificationDevice)(nil), // 66: model.AirPurificationDevice + (*AirCurtain)(nil), // 67: model.AirCurtain + (*Fan)(nil), // 68: model.Fan + (*GasEnvironment)(nil), // 69: model.GasEnvironment + (*Ckm)(nil), // 70: model.Ckm + (*Xcj)(nil), // 71: model.Xcj + (*Route_TurnoutPosition)(nil), // 72: model.Route.TurnoutPosition } var file_model_proto_depIdxs = []int32{ 17, // 0: model.Repository.physicalSections:type_name -> model.PhysicalSection @@ -6414,96 +6527,97 @@ var file_model_proto_depIdxs = []int32{ 33, // 13: model.Repository.alarms:type_name -> model.Alarm 34, // 14: model.Repository.stations:type_name -> model.Station 38, // 15: model.Repository.mkxs:type_name -> model.Mkx - 39, // 16: model.Repository.platforms:type_name -> model.Platform - 40, // 17: model.Repository.Keys:type_name -> model.Key - 41, // 18: model.Repository.CentralizedStationRefs:type_name -> model.CentralizedStationRef - 47, // 19: model.Repository.routes:type_name -> model.Route - 69, // 20: model.Repository.ckms:type_name -> model.Ckm - 70, // 21: model.Repository.xcjs:type_name -> model.Xcj - 48, // 22: model.Repository.pipes:type_name -> model.Pipe - 49, // 23: model.Repository.pipeFittings:type_name -> model.PipeFitting - 50, // 24: model.Repository.circuitBreakers:type_name -> model.CircuitBreaker - 51, // 25: model.Repository.threePositionSwitches:type_name -> model.ThreePositionSwitch - 52, // 26: model.Repository.handcartSwitches:type_name -> model.HandcartSwitch - 53, // 27: model.Repository.rectifiers:type_name -> model.Rectifier - 54, // 28: model.Repository.disconnectors:type_name -> model.Disconnector - 55, // 29: model.Repository.voltageTransformers:type_name -> model.VoltageTransformer - 56, // 30: model.Repository.powerSources:type_name -> model.PowerSource - 57, // 31: model.Repository.lightningArresters:type_name -> model.LightningArrester - 58, // 32: model.Repository.earthingDevices:type_name -> model.EarthingDevice - 59, // 33: model.Repository.networkSwitches:type_name -> model.NetworkSwitch - 60, // 34: model.Repository.wireCabinets:type_name -> model.WireCabinet - 61, // 35: model.Repository.airPavilions:type_name -> model.AirPavilion - 62, // 36: model.Repository.valves:type_name -> model.Valve - 63, // 37: model.Repository.gasMixingChambers:type_name -> model.GasMixingChamber - 64, // 38: model.Repository.combinationAirConditioners:type_name -> model.CombinationAirConditioner - 65, // 39: model.Repository.airPurificationDevices:type_name -> model.AirPurificationDevice - 66, // 40: model.Repository.airCurtains:type_name -> model.AirCurtain - 67, // 41: model.Repository.fans:type_name -> model.Fan - 68, // 42: model.Repository.gasEnvironments:type_name -> model.GasEnvironment - 17, // 43: model.SignalLayout.physicalSections:type_name -> model.PhysicalSection - 18, // 44: model.SignalLayout.checkPoints:type_name -> model.CheckPoint - 19, // 45: model.SignalLayout.turnouts:type_name -> model.Turnout - 20, // 46: model.SignalLayout.signals:type_name -> model.Signal - 22, // 47: model.SignalLayout.transponders:type_name -> model.Transponder - 23, // 48: model.SignalLayout.slopes:type_name -> model.Slope - 24, // 49: model.SignalLayout.sectionalCurvatures:type_name -> model.SectionalCurvature - 27, // 50: model.SignalLayout.kilometerConverts:type_name -> model.KilometerConvert - 25, // 51: model.PhysicalSection.aDevicePort:type_name -> model.DevicePort - 25, // 52: model.PhysicalSection.bDevicePort:type_name -> model.DevicePort - 26, // 53: model.CheckPoint.km:type_name -> model.Kilometer - 3, // 54: model.CheckPoint.type:type_name -> model.CheckPointType - 25, // 55: model.CheckPoint.devicePorts:type_name -> model.DevicePort - 26, // 56: model.Turnout.km:type_name -> model.Kilometer - 25, // 57: model.Turnout.aDevicePort:type_name -> model.DevicePort - 25, // 58: model.Turnout.bDevicePort:type_name -> model.DevicePort - 25, // 59: model.Turnout.cDevicePort:type_name -> model.DevicePort - 4, // 60: model.Turnout.switchMachineType:type_name -> model.Turnout.SwitchMachineType - 30, // 61: model.Turnout.electronicComponentGroups:type_name -> model.ElectronicComponentGroup - 26, // 62: model.Signal.km:type_name -> model.Kilometer - 25, // 63: model.Signal.turnoutPort:type_name -> model.DevicePort - 30, // 64: model.Signal.electronicComponentGroups:type_name -> model.ElectronicComponentGroup - 5, // 65: model.Signal.model:type_name -> model.Signal.Model - 45, // 66: model.Psd.asdGroups:type_name -> model.AsdGroup - 30, // 67: model.Psd.electronicComponentGroups:type_name -> model.ElectronicComponentGroup - 26, // 68: model.Transponder.km:type_name -> model.Kilometer - 25, // 69: model.Transponder.turnoutPort:type_name -> model.DevicePort - 6, // 70: model.Transponder.type:type_name -> model.Transponder.Type - 26, // 71: model.Slope.kms:type_name -> model.Kilometer - 26, // 72: model.SectionalCurvature.kms:type_name -> model.Kilometer - 0, // 73: model.DevicePort.deviceType:type_name -> model.DeviceType - 1, // 74: model.DevicePort.port:type_name -> model.Port - 2, // 75: model.Kilometer.direction:type_name -> model.Direction - 26, // 76: model.KilometerConvert.kmA:type_name -> model.Kilometer - 26, // 77: model.KilometerConvert.kmB:type_name -> model.Kilometer - 7, // 78: model.Relay.model:type_name -> model.Relay.Model - 8, // 79: model.Button.buttonType:type_name -> model.Button.ButtonType - 9, // 80: model.Light.aspect:type_name -> model.Light.LightAspect - 36, // 81: model.Station.electronicGroup:type_name -> model.ElectronicGroup - 35, // 82: model.Station.deccs:type_name -> model.DeviceEcc - 0, // 83: model.DeviceEcc.deviceType:type_name -> model.DeviceType - 30, // 84: model.DeviceEcc.egs:type_name -> model.ElectronicComponentGroup - 37, // 85: model.ElectronicGroup.components:type_name -> model.ElectronicComponent - 0, // 86: model.ElectronicComponent.deviceType:type_name -> model.DeviceType - 10, // 87: model.Platform.direction:type_name -> model.Platform.PlatformDirection - 42, // 88: model.CentralizedStationRef.cjList:type_name -> model.CjData - 44, // 89: model.CentralizedStationRef.qdList:type_name -> model.QdData - 46, // 90: model.CentralizedStationRef.sectionCodePoints:type_name -> model.CiSectionCodePoint - 43, // 91: model.CjData.refRelays:type_name -> model.CjDataItem - 11, // 92: model.Route.routeType:type_name -> model.Route.RouteType - 71, // 93: model.Route.turnouts:type_name -> model.Route.TurnoutPosition - 25, // 94: model.Pipe.portA:type_name -> model.DevicePort - 25, // 95: model.Pipe.portB:type_name -> model.DevicePort - 12, // 96: model.AirPavilion.pavilionType:type_name -> model.AirPavilion.Type - 13, // 97: model.Valve.valveType:type_name -> model.Valve.Type - 14, // 98: model.Fan.fanType:type_name -> model.Fan.Type - 30, // 99: model.Ckm.electronicComponentGroups:type_name -> model.ElectronicComponentGroup - 30, // 100: model.Xcj.electronicComponentGroups:type_name -> model.ElectronicComponentGroup - 101, // [101:101] is the sub-list for method output_type - 101, // [101:101] is the sub-list for method input_type - 101, // [101:101] is the sub-list for extension type_name - 101, // [101:101] is the sub-list for extension extendee - 0, // [0:101] is the sub-list for field type_name + 40, // 16: model.Repository.platforms:type_name -> model.Platform + 41, // 17: model.Repository.Keys:type_name -> model.Key + 42, // 18: model.Repository.CentralizedStationRefs:type_name -> model.CentralizedStationRef + 48, // 19: model.Repository.routes:type_name -> model.Route + 70, // 20: model.Repository.ckms:type_name -> model.Ckm + 71, // 21: model.Repository.xcjs:type_name -> model.Xcj + 39, // 22: model.Repository.ckmPsls:type_name -> model.CkmPsl + 49, // 23: model.Repository.pipes:type_name -> model.Pipe + 50, // 24: model.Repository.pipeFittings:type_name -> model.PipeFitting + 51, // 25: model.Repository.circuitBreakers:type_name -> model.CircuitBreaker + 52, // 26: model.Repository.threePositionSwitches:type_name -> model.ThreePositionSwitch + 53, // 27: model.Repository.handcartSwitches:type_name -> model.HandcartSwitch + 54, // 28: model.Repository.rectifiers:type_name -> model.Rectifier + 55, // 29: model.Repository.disconnectors:type_name -> model.Disconnector + 56, // 30: model.Repository.voltageTransformers:type_name -> model.VoltageTransformer + 57, // 31: model.Repository.powerSources:type_name -> model.PowerSource + 58, // 32: model.Repository.lightningArresters:type_name -> model.LightningArrester + 59, // 33: model.Repository.earthingDevices:type_name -> model.EarthingDevice + 60, // 34: model.Repository.networkSwitches:type_name -> model.NetworkSwitch + 61, // 35: model.Repository.wireCabinets:type_name -> model.WireCabinet + 62, // 36: model.Repository.airPavilions:type_name -> model.AirPavilion + 63, // 37: model.Repository.valves:type_name -> model.Valve + 64, // 38: model.Repository.gasMixingChambers:type_name -> model.GasMixingChamber + 65, // 39: model.Repository.combinationAirConditioners:type_name -> model.CombinationAirConditioner + 66, // 40: model.Repository.airPurificationDevices:type_name -> model.AirPurificationDevice + 67, // 41: model.Repository.airCurtains:type_name -> model.AirCurtain + 68, // 42: model.Repository.fans:type_name -> model.Fan + 69, // 43: model.Repository.gasEnvironments:type_name -> model.GasEnvironment + 17, // 44: model.SignalLayout.physicalSections:type_name -> model.PhysicalSection + 18, // 45: model.SignalLayout.checkPoints:type_name -> model.CheckPoint + 19, // 46: model.SignalLayout.turnouts:type_name -> model.Turnout + 20, // 47: model.SignalLayout.signals:type_name -> model.Signal + 22, // 48: model.SignalLayout.transponders:type_name -> model.Transponder + 23, // 49: model.SignalLayout.slopes:type_name -> model.Slope + 24, // 50: model.SignalLayout.sectionalCurvatures:type_name -> model.SectionalCurvature + 27, // 51: model.SignalLayout.kilometerConverts:type_name -> model.KilometerConvert + 25, // 52: model.PhysicalSection.aDevicePort:type_name -> model.DevicePort + 25, // 53: model.PhysicalSection.bDevicePort:type_name -> model.DevicePort + 26, // 54: model.CheckPoint.km:type_name -> model.Kilometer + 3, // 55: model.CheckPoint.type:type_name -> model.CheckPointType + 25, // 56: model.CheckPoint.devicePorts:type_name -> model.DevicePort + 26, // 57: model.Turnout.km:type_name -> model.Kilometer + 25, // 58: model.Turnout.aDevicePort:type_name -> model.DevicePort + 25, // 59: model.Turnout.bDevicePort:type_name -> model.DevicePort + 25, // 60: model.Turnout.cDevicePort:type_name -> model.DevicePort + 4, // 61: model.Turnout.switchMachineType:type_name -> model.Turnout.SwitchMachineType + 30, // 62: model.Turnout.electronicComponentGroups:type_name -> model.ElectronicComponentGroup + 26, // 63: model.Signal.km:type_name -> model.Kilometer + 25, // 64: model.Signal.turnoutPort:type_name -> model.DevicePort + 30, // 65: model.Signal.electronicComponentGroups:type_name -> model.ElectronicComponentGroup + 5, // 66: model.Signal.model:type_name -> model.Signal.Model + 46, // 67: model.Psd.asdGroups:type_name -> model.AsdGroup + 30, // 68: model.Psd.electronicComponentGroups:type_name -> model.ElectronicComponentGroup + 26, // 69: model.Transponder.km:type_name -> model.Kilometer + 25, // 70: model.Transponder.turnoutPort:type_name -> model.DevicePort + 6, // 71: model.Transponder.type:type_name -> model.Transponder.Type + 26, // 72: model.Slope.kms:type_name -> model.Kilometer + 26, // 73: model.SectionalCurvature.kms:type_name -> model.Kilometer + 0, // 74: model.DevicePort.deviceType:type_name -> model.DeviceType + 1, // 75: model.DevicePort.port:type_name -> model.Port + 2, // 76: model.Kilometer.direction:type_name -> model.Direction + 26, // 77: model.KilometerConvert.kmA:type_name -> model.Kilometer + 26, // 78: model.KilometerConvert.kmB:type_name -> model.Kilometer + 7, // 79: model.Relay.model:type_name -> model.Relay.Model + 8, // 80: model.Button.buttonType:type_name -> model.Button.ButtonType + 9, // 81: model.Light.aspect:type_name -> model.Light.LightAspect + 36, // 82: model.Station.electronicGroup:type_name -> model.ElectronicGroup + 35, // 83: model.Station.deccs:type_name -> model.DeviceEcc + 0, // 84: model.DeviceEcc.deviceType:type_name -> model.DeviceType + 30, // 85: model.DeviceEcc.egs:type_name -> model.ElectronicComponentGroup + 37, // 86: model.ElectronicGroup.components:type_name -> model.ElectronicComponent + 0, // 87: model.ElectronicComponent.deviceType:type_name -> model.DeviceType + 10, // 88: model.Platform.direction:type_name -> model.Platform.PlatformDirection + 43, // 89: model.CentralizedStationRef.cjList:type_name -> model.CjData + 45, // 90: model.CentralizedStationRef.qdList:type_name -> model.QdData + 47, // 91: model.CentralizedStationRef.sectionCodePoints:type_name -> model.CiSectionCodePoint + 44, // 92: model.CjData.refRelays:type_name -> model.CjDataItem + 11, // 93: model.Route.routeType:type_name -> model.Route.RouteType + 72, // 94: model.Route.turnouts:type_name -> model.Route.TurnoutPosition + 25, // 95: model.Pipe.portA:type_name -> model.DevicePort + 25, // 96: model.Pipe.portB:type_name -> model.DevicePort + 12, // 97: model.AirPavilion.pavilionType:type_name -> model.AirPavilion.Type + 13, // 98: model.Valve.valveType:type_name -> model.Valve.Type + 14, // 99: model.Fan.fanType:type_name -> model.Fan.Type + 30, // 100: model.Ckm.electronicComponentGroups:type_name -> model.ElectronicComponentGroup + 30, // 101: model.Xcj.electronicComponentGroups:type_name -> model.ElectronicComponentGroup + 102, // [102:102] is the sub-list for method output_type + 102, // [102:102] is the sub-list for method input_type + 102, // [102:102] is the sub-list for extension type_name + 102, // [102:102] is the sub-list for extension extendee + 0, // [0:102] is the sub-list for field type_name } func init() { file_model_proto_init() } @@ -6801,7 +6915,7 @@ func file_model_proto_init() { } } file_model_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Platform); i { + switch v := v.(*CkmPsl); i { case 0: return &v.state case 1: @@ -6813,7 +6927,7 @@ func file_model_proto_init() { } } file_model_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Key); i { + switch v := v.(*Platform); i { case 0: return &v.state case 1: @@ -6825,7 +6939,7 @@ func file_model_proto_init() { } } file_model_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CentralizedStationRef); i { + switch v := v.(*Key); i { case 0: return &v.state case 1: @@ -6837,7 +6951,7 @@ func file_model_proto_init() { } } file_model_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CjData); i { + switch v := v.(*CentralizedStationRef); i { case 0: return &v.state case 1: @@ -6849,7 +6963,7 @@ func file_model_proto_init() { } } file_model_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CjDataItem); i { + switch v := v.(*CjData); i { case 0: return &v.state case 1: @@ -6861,7 +6975,7 @@ func file_model_proto_init() { } } file_model_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*QdData); i { + switch v := v.(*CjDataItem); i { case 0: return &v.state case 1: @@ -6873,7 +6987,7 @@ func file_model_proto_init() { } } file_model_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AsdGroup); i { + switch v := v.(*QdData); i { case 0: return &v.state case 1: @@ -6885,7 +6999,7 @@ func file_model_proto_init() { } } file_model_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CiSectionCodePoint); i { + switch v := v.(*AsdGroup); i { case 0: return &v.state case 1: @@ -6897,7 +7011,7 @@ func file_model_proto_init() { } } file_model_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Route); i { + switch v := v.(*CiSectionCodePoint); i { case 0: return &v.state case 1: @@ -6909,7 +7023,7 @@ func file_model_proto_init() { } } file_model_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Pipe); i { + switch v := v.(*Route); i { case 0: return &v.state case 1: @@ -6921,7 +7035,7 @@ func file_model_proto_init() { } } file_model_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PipeFitting); i { + switch v := v.(*Pipe); i { case 0: return &v.state case 1: @@ -6933,7 +7047,7 @@ func file_model_proto_init() { } } file_model_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CircuitBreaker); i { + switch v := v.(*PipeFitting); i { case 0: return &v.state case 1: @@ -6945,7 +7059,7 @@ func file_model_proto_init() { } } file_model_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ThreePositionSwitch); i { + switch v := v.(*CircuitBreaker); i { case 0: return &v.state case 1: @@ -6957,7 +7071,7 @@ func file_model_proto_init() { } } file_model_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*HandcartSwitch); i { + switch v := v.(*ThreePositionSwitch); i { case 0: return &v.state case 1: @@ -6969,7 +7083,7 @@ func file_model_proto_init() { } } file_model_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Rectifier); i { + switch v := v.(*HandcartSwitch); i { case 0: return &v.state case 1: @@ -6981,7 +7095,7 @@ func file_model_proto_init() { } } file_model_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Disconnector); i { + switch v := v.(*Rectifier); i { case 0: return &v.state case 1: @@ -6993,7 +7107,7 @@ func file_model_proto_init() { } } file_model_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*VoltageTransformer); i { + switch v := v.(*Disconnector); i { case 0: return &v.state case 1: @@ -7005,7 +7119,7 @@ func file_model_proto_init() { } } file_model_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PowerSource); i { + switch v := v.(*VoltageTransformer); i { case 0: return &v.state case 1: @@ -7017,7 +7131,7 @@ func file_model_proto_init() { } } file_model_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LightningArrester); i { + switch v := v.(*PowerSource); i { case 0: return &v.state case 1: @@ -7029,7 +7143,7 @@ func file_model_proto_init() { } } file_model_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EarthingDevice); i { + switch v := v.(*LightningArrester); i { case 0: return &v.state case 1: @@ -7041,7 +7155,7 @@ func file_model_proto_init() { } } file_model_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NetworkSwitch); i { + switch v := v.(*EarthingDevice); i { case 0: return &v.state case 1: @@ -7053,7 +7167,7 @@ func file_model_proto_init() { } } file_model_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WireCabinet); i { + switch v := v.(*NetworkSwitch); i { case 0: return &v.state case 1: @@ -7065,7 +7179,7 @@ func file_model_proto_init() { } } file_model_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AirPavilion); i { + switch v := v.(*WireCabinet); i { case 0: return &v.state case 1: @@ -7077,7 +7191,7 @@ func file_model_proto_init() { } } file_model_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Valve); i { + switch v := v.(*AirPavilion); i { case 0: return &v.state case 1: @@ -7089,7 +7203,7 @@ func file_model_proto_init() { } } file_model_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GasMixingChamber); i { + switch v := v.(*Valve); i { case 0: return &v.state case 1: @@ -7101,7 +7215,7 @@ func file_model_proto_init() { } } file_model_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CombinationAirConditioner); i { + switch v := v.(*GasMixingChamber); i { case 0: return &v.state case 1: @@ -7113,7 +7227,7 @@ func file_model_proto_init() { } } file_model_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AirPurificationDevice); i { + switch v := v.(*CombinationAirConditioner); i { case 0: return &v.state case 1: @@ -7125,7 +7239,7 @@ func file_model_proto_init() { } } file_model_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AirCurtain); i { + switch v := v.(*AirPurificationDevice); i { case 0: return &v.state case 1: @@ -7137,7 +7251,7 @@ func file_model_proto_init() { } } file_model_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Fan); i { + switch v := v.(*AirCurtain); i { case 0: return &v.state case 1: @@ -7149,7 +7263,7 @@ func file_model_proto_init() { } } file_model_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GasEnvironment); i { + switch v := v.(*Fan); i { case 0: return &v.state case 1: @@ -7161,7 +7275,7 @@ func file_model_proto_init() { } } file_model_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Ckm); i { + switch v := v.(*GasEnvironment); i { case 0: return &v.state case 1: @@ -7173,7 +7287,7 @@ func file_model_proto_init() { } } file_model_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Xcj); i { + switch v := v.(*Ckm); i { case 0: return &v.state case 1: @@ -7185,6 +7299,18 @@ func file_model_proto_init() { } } file_model_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Xcj); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_model_proto_msgTypes[57].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Route_TurnoutPosition); i { case 0: return &v.state @@ -7203,7 +7329,7 @@ func file_model_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_model_proto_rawDesc, NumEnums: 15, - NumMessages: 57, + NumMessages: 58, NumExtensions: 0, NumServices: 0, }, diff --git a/repository/mkx.go b/repository/psd_psl.go similarity index 53% rename from repository/mkx.go rename to repository/psd_psl.go index 8e04943..ce8add6 100644 --- a/repository/mkx.go +++ b/repository/psd_psl.go @@ -2,7 +2,7 @@ package repository import "joylink.club/rtsssimulation/repository/model/proto" -type Mkx struct { +type PsdPsl struct { Identity psd *Psd @@ -25,8 +25,8 @@ type Mkx struct { jxtcpl *Button } -func NewMkx(id string) *Mkx { - return &Mkx{ +func NewPsdPsl(id string) *PsdPsl { + return &PsdPsl{ Identity: identity{ id: id, deviceType: proto.DeviceType_DeviceType_Mkx, @@ -34,74 +34,74 @@ func NewMkx(id string) *Mkx { } } -func (m *Mkx) Psd() *Psd { +func (m *PsdPsl) Psd() *Psd { return m.psd } -func (m *Mkx) Pcb() *Button { +func (m *PsdPsl) Pcb() *Button { return m.pcb } -func (m *Mkx) Pcbpl() *Button { +func (m *PsdPsl) Pcbpl() *Button { return m.pcbpl } -func (m *Mkx) Pcbj() *Relay { +func (m *PsdPsl) Pcbj() *Relay { return m.pcbj } -func (m *Mkx) Pob() *Button { +func (m *PsdPsl) Pob() *Button { return m.pob } -func (m *Mkx) Pobpl() *Button { +func (m *PsdPsl) Pobpl() *Button { return m.pobpl } -func (m *Mkx) Pobj() *Relay { +func (m *PsdPsl) Pobj() *Relay { return m.pobj } -func (m *Mkx) Pab() *Button { +func (m *PsdPsl) Pab() *Button { return m.pab } -func (m *Mkx) Pabpl() *Button { +func (m *PsdPsl) Pabpl() *Button { return m.pabpl } -func (m *Mkx) Pabj() *Relay { +func (m *PsdPsl) Pabj() *Relay { return m.pabj } -func (m *Mkx) Wrzf() *Button { +func (m *PsdPsl) Wrzf() *Button { return m.wrzf } -func (m *Mkx) Wrzfpl() *Button { +func (m *PsdPsl) Wrzfpl() *Button { return m.wrzfpl } -func (m *Mkx) Wrzfj() *Relay { +func (m *PsdPsl) Wrzfj() *Relay { return m.wrzfj } -func (m *Mkx) Qkqr() *Button { +func (m *PsdPsl) Qkqr() *Button { return m.qkqr } -func (m *Mkx) Qkqrpl() *Button { +func (m *PsdPsl) Qkqrpl() *Button { return m.qkqrpl } -func (m *Mkx) Qkqrj() *Relay { +func (m *PsdPsl) Qkqrj() *Relay { return m.qkqrj } -func (m *Mkx) Mpl() *Button { +func (m *PsdPsl) Mpl() *Button { return m.mpl } -func (m *Mkx) Jxtcpl() *Button { +func (m *PsdPsl) Jxtcpl() *Button { return m.jxtcpl } diff --git a/repository/repository.go b/repository/repository.go index 563b6ef..620dd41 100644 --- a/repository/repository.go +++ b/repository/repository.go @@ -8,31 +8,33 @@ import ( ) type Repository struct { - id string - version string - coordinate *MapCoordinate // 基准坐标系类型,在列车画图时统一坐标系 - physicalSectionMap map[string]*PhysicalSection - checkPointMap map[string]*CheckPoint - turnoutMap map[string]*Turnout - signalMap map[string]*Signal - responderMap map[string]*Transponder - slopeMap map[string]*Slope - sectionalCurvatureMap map[string]*SectionalCurvature - kilometerConvertMap map[string]*proto.KilometerConvert - relayMap map[string]*Relay - phaseFailureProtectorMap map[string]*PhaseFailureProtector - buttonMap map[string]*Button - psdMap map[string]*Psd - lightMap map[string]*Light - alarmMap map[string]*Alarm - stationMap map[string]*Station - mkxMap map[string]*Mkx - keyMap map[string]*Key - linkMap map[string]*Link - platformMap map[string]*Platform - centralizedMap map[string]*proto.CentralizedStationRef - ckmMap map[string]*Ckm - xcjMap map[string]*Xcj + id string + version string + coordinate *MapCoordinate // 基准坐标系类型,在列车画图时统一坐标系 + physicalSectionMap map[string]*PhysicalSection + checkPointMap map[string]*CheckPoint + turnoutMap map[string]*Turnout + signalMap map[string]*Signal + responderMap map[string]*Transponder + slopeMap map[string]*Slope + sectionalCurvatureMap map[string]*SectionalCurvature + kilometerConvertMap map[string]*proto.KilometerConvert + relayMap map[string]*Relay + phaseFailureProtectorMap map[string]*PhaseFailureProtector + buttonMap map[string]*Button + psdMap map[string]*Psd + lightMap map[string]*Light + alarmMap map[string]*Alarm + stationMap map[string]*Station + psdPslMap map[string]*PsdPsl + keyMap map[string]*Key + linkMap map[string]*Link + platformMap map[string]*Platform + centralizedMap map[string]*proto.CentralizedStationRef + ckmMap map[string]*Ckm + ckmPslMap map[string]*CkmPsl + xcjMap map[string]*Xcj + PipeMap map[string]*Pipe //ISCS 管线 PipeFittingMap map[string]*PipeFitting //ISCS 管件 CircuitBreakerMap map[string]*CircuitBreaker //ISCS 断路器 @@ -76,7 +78,7 @@ func newRepository(id string, version string) *Repository { lightMap: make(map[string]*Light), alarmMap: make(map[string]*Alarm), stationMap: make(map[string]*Station), - mkxMap: make(map[string]*Mkx), + psdPslMap: make(map[string]*PsdPsl), keyMap: make(map[string]*Key), platformMap: make(map[string]*Platform), centralizedMap: make(map[string]*proto.CentralizedStationRef), @@ -293,9 +295,9 @@ func (repo *Repository) PsdList() []*Psd { } return list } -func (repo *Repository) MkxList() []*Mkx { - var list []*Mkx - for _, model := range repo.mkxMap { +func (repo *Repository) MkxList() []*PsdPsl { + var list []*PsdPsl + for _, model := range repo.psdPslMap { list = append(list, model) } return list @@ -340,6 +342,14 @@ func (repo *Repository) XcjList() []*Xcj { return list } +func (repo *Repository) CkmPslList() []*CkmPsl { + var list []*CkmPsl + for _, model := range repo.ckmPslMap { + list = append(list, model) + } + return list +} + func (repo *Repository) GetCentralizedStationRef(centralizedStationId string) *proto.CentralizedStationRef { return repo.centralizedMap[centralizedStationId] } diff --git a/repository/repository_manager.go b/repository/repository_manager.go index 50fc2b8..ed99efa 100644 --- a/repository/repository_manager.go +++ b/repository/repository_manager.go @@ -123,8 +123,8 @@ func buildModels(source *proto.Repository, repository *Repository) error { repository.alarmMap[m.Id()] = m } for _, protoData := range source.Mkxs { - m := NewMkx(protoData.Id) - repository.mkxMap[m.Id()] = m + m := NewPsdPsl(protoData.Id) + repository.psdPslMap[m.Id()] = m } for _, protoData := range source.Keys { m := NewKey(protoData.Id, protoData.Code, protoData.Gear) @@ -142,6 +142,10 @@ func buildModels(source *proto.Repository, repository *Repository) error { m := NewXcj(protoData.Id) repository.xcjMap[m.Id()] = m } + for _, protoData := range source.CkmPsls { + m := NewCkmPsl(protoData.Id) + repository.ckmPslMap[m.Id()] = m + } err := repository.generateCoordinateInfo(source.MainCoordinateSystem) if err != nil { return err @@ -208,9 +212,22 @@ func buildModelRelationship(source *proto.Repository, repository *Repository) er if err != nil { return err } + err = buildCkmPslRelationShip(source, repository) return err } +func buildCkmPslRelationShip(source *proto.Repository, repository *Repository) error { + for _, protoData := range source.CkmPsls { + psl := repository.ckmPslMap[protoData.Id] + psl.ckm = repository.ckmMap[protoData.CkmId] + psl.gma = repository.buttonMap[protoData.GmaId] + psl.kma = repository.buttonMap[protoData.KmaId] + psl.mpla = repository.buttonMap[protoData.MplaId] + psl.mmsa = repository.buttonMap[protoData.MmsaId] + } + return nil +} + func buildXcjRelationShip(source *proto.Repository, repo *Repository) error { for _, protoData := range source.Ckms { ckm := repo.ckmMap[protoData.Id] @@ -270,7 +287,7 @@ func buildCentralizedStationRelationShip(source *proto.Repository, repo *Reposit } func buildMkxRelationShip(source *proto.Repository, repo *Repository) error { for _, protoData := range source.Mkxs { - mkx := repo.mkxMap[protoData.Id] + mkx := repo.psdPslMap[protoData.Id] mkx.psd = repo.psdMap[protoData.PsdId] mkx.pcb = repo.buttonMap[protoData.PcbaId] mkx.pcbpl = repo.buttonMap[protoData.PcbplaId] diff --git a/sys/circuit_sys/ckm.go b/sys/circuit_sys/ckm.go index 3ca3eef..f9cb575 100644 --- a/sys/circuit_sys/ckm.go +++ b/sys/circuit_sys/ckm.go @@ -22,24 +22,35 @@ func NewCkmSys() *CkmSys { func (p *CkmSys) Update(world ecs.World) { worldData := entity.GetWorldData(world) p.query.Each(world, func(entry *ecs.Entry) { + //车库门故障(状态丢失) + if entry.HasComponent(component.CkmMgzTag) { + return + } posCom := component.FixedPositionTransformType.Get(entry) state := component.CkmStateType.Get(entry) - if entry.HasComponent(component.CkmCircuitType) { - circuit := component.CkmCircuitType.Get(entry) - //门开/关继电器及状态 - if posCom.Pos == consts.TwoPosMin { - component.RelayDriveType.Get(circuit.MGJ).Td = true - component.RelayDriveType.Get(circuit.MKJ).Td = false - state.Close = true - } else { - component.RelayDriveType.Get(circuit.MGJ).Td = false - component.RelayDriveType.Get(circuit.MKJ).Td = true - state.Close = false - } - //门故障继电器及状态 - component.RelayDriveType.Get(circuit.MGZJ).Td = entry.HasComponent(component.CkmMgzTag) - state.Mgz = entry.HasComponent(component.CkmMgzTag) - //开/关门继电器驱动状态 + remote := true //是否远程模式 + circuit := component.CkmCircuitType.Get(entry) //目前不考虑没有车库门电路的情况 + //车库门PSL + if entry.HasComponent(component.CkmPslType) { + ckmPsl := component.CkmPslType.Get(entry) + component.RelayDriveType.Get(circuit.MPLJ).Td = component.BitStateType.Get(ckmPsl.MPLA).Val + remote = component.BitStateType.Get(ckmPsl.MMSA).Val + } + //门开/关继电器及状态 + if posCom.Pos == consts.TwoPosMin { + component.RelayDriveType.Get(circuit.MGJ).Td = true + component.RelayDriveType.Get(circuit.MKJ).Td = false + state.Close = true + } else { + component.RelayDriveType.Get(circuit.MGJ).Td = false + component.RelayDriveType.Get(circuit.MKJ).Td = true + state.Close = false + } + //门故障继电器及状态 + component.RelayDriveType.Get(circuit.MGZJ).Td = entry.HasComponent(component.CkmMgzTag) + state.Mgz = entry.HasComponent(component.CkmMgzTag) + //开/关门继电器驱动状态 + if remote { kmBit, err := worldData.QueryQdBit(component.UidType.Get(circuit.KMJ).Id) if err == nil { component.RelayDriveType.Get(circuit.KMJ).Td = kmBit @@ -52,17 +63,15 @@ func (p *CkmSys) Update(world ecs.World) { } else { slog.Error(err.Error()) } - - state.Km = component.BitStateType.Get(circuit.KMJ).Val - state.Gm = component.BitStateType.Get(circuit.GMJ).Val } else { - if posCom.Pos == consts.TwoPosMin { - state.Close = true - } else { - state.Close = false - } - state.Mgz = entry.HasComponent(component.CkmMgzTag) + ckmPsl := component.CkmPslType.Get(entry) + component.RelayDriveType.Get(circuit.KMJ).Td = component.BitStateType.Get(ckmPsl.KMA).Val + component.RelayDriveType.Get(circuit.GMJ).Td = component.BitStateType.Get(ckmPsl.GMA).Val } + //车库门状态 + state.Km = component.BitStateType.Get(circuit.KMJ).Val + state.Gm = component.BitStateType.Get(circuit.GMJ).Val + state.Mgz = entry.HasComponent(component.CkmMgzTag) //驱动 if state.Gm { posCom.Speed = -component.CalculateTwoPositionAvgSpeed(3*1000, world.Tick())