From f66d826418ded8cda2e8679bfd12d1cad4b8f2ba Mon Sep 17 00:00:00 2001 From: soul-walker Date: Wed, 19 Jun 2024 19:29:46 +0800 Subject: [PATCH] =?UTF-8?q?model=20repo=20=E7=94=A8=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- example/build_repo_example/main.go | 33 + example/data_proto/line_style.go | 39 + example/data_proto/linestyle1.base64 | 1 + .../data_proto/stationLayoutGraphics.pb.go | 7709 +++++++++++++++++ .../data_proto/stationLayoutGraphics.proto | 758 ++ example/model_impl/section.go | 7 + example/model_impl/station.go | 7 + example/model_impl/turnout.go | 7 + example/repository/repo.go | 39 + go.mod | 5 +- go.sum | 6 + model/station.go | 26 + protodef/main.go | 29 +- repo/repo.go | 5 + 14 files changed, 8660 insertions(+), 11 deletions(-) create mode 100644 example/build_repo_example/main.go create mode 100644 example/data_proto/line_style.go create mode 100644 example/data_proto/linestyle1.base64 create mode 100644 example/data_proto/stationLayoutGraphics.pb.go create mode 100644 example/data_proto/stationLayoutGraphics.proto create mode 100644 example/model_impl/section.go create mode 100644 example/model_impl/station.go create mode 100644 example/model_impl/turnout.go create mode 100644 example/repository/repo.go create mode 100644 model/station.go diff --git a/example/build_repo_example/main.go b/example/build_repo_example/main.go new file mode 100644 index 0000000..8cabc95 --- /dev/null +++ b/example/build_repo_example/main.go @@ -0,0 +1,33 @@ +package main + +import ( + "joylink.club/rtss-core/example/data_proto" + "joylink.club/rtss-core/model" +) + +var ( + _stationMap = make(map[uint32]*data_proto.Station) + _sectionMap = make(map[uint32]*data_proto.Section) + _turnoutMap = make(map[uint32]*data_proto.Turnout) +) + +func main() { + rtssGraphicStorage := data_proto.GetLineSytle1() + // log.Println(rtssGraphicStorage.Stations) + // log.Println(rtssGraphicStorage.Section) + // log.Println(rtssGraphicStorage.Turnouts) + for _, station := range rtssGraphicStorage.Stations { + _stationMap[station.Common.Id] = station + } + for _, section := range rtssGraphicStorage.Section { + if section.CentralizedStations == nil || len(section.CentralizedStations) == 0 || _stationMap[section.CentralizedStations[0]] == nil { + continue + } + _sectionMap[section.Common.Id] = section + model.NewSection(getSectionUid(section)) + } +} + +func getSectionUid(section *data_proto.Section) string { + return _stationMap[section.CentralizedStations[0]].Code + "-" + section.Code +} diff --git a/example/data_proto/line_style.go b/example/data_proto/line_style.go new file mode 100644 index 0000000..83bc885 --- /dev/null +++ b/example/data_proto/line_style.go @@ -0,0 +1,39 @@ +package data_proto + +import ( + "encoding/base64" + "os" + "path/filepath" + + "google.golang.org/protobuf/proto" +) + +// / 线路样式1 +// / xxxxxxxxxx xxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxx +// / x x x +// / x x x +// / x x x +// / x x +// / x x x +// / x x x +// / x x x +// / xxxxxxxxxx xxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx +func GetLineSytle1() *RtssGraphicStorage { + basePath, _ := os.Getwd() + filename := filepath.Join(basePath, "example/data_proto/linestyle1.base64") + bs, err := os.ReadFile(filename) + if err != nil { + panic(err) + } + + protobytes, err := base64.StdEncoding.DecodeString(string(bs)) + if err != nil { + panic(err) + } + rtssGraphicStorage := RtssGraphicStorage{} + err = proto.Unmarshal(protobytes, &rtssGraphicStorage) + if err != nil { + panic(err) + } + return &rtssGraphicStorage +} diff --git a/example/data_proto/linestyle1.base64 b/example/data_proto/linestyle1.base64 new file mode 100644 index 0000000..bb5377f --- /dev/null +++ b/example/data_proto/linestyle1.base64 @@ -0,0 +1 @@ +CicIgJYBEKAQGgcjMmUyZDJkIhUKBRUAAIC/EgoNZsg1PxVmyDU/IgAqRwonEgdzdGF0aW9uGhoKCg2sb4ZEFSfRpkMSCg0AAIA/FQAAgD8iACgBEgnovabnq5nkuIAgATIASgnovabnq5nkuIBqAgECKkEKJxIHc3RhdGlvbhoaCgoN4MwXRRUn0aZDEgoNAACAPxUAAIA/IgAoAhIJ6L2m56uZ5LqMMgBKCei9puermeS6jEqRAQpMEgdUdXJub3V0GhoKCg0DASFEFcpX80MSCg0AAIA/FQAAgD8iACIjCgVsYWJlbBIaCgoNjESmQBXgsKXBEgoNU0K0PxVTQrQ/IgAoBRIBMTIKDQAASMIVAACAqToKDTfulEIVAAAAqkIKDUOFNkIVsmE8QkoEGAEgA1IGCAEYASAIWgYIARgCIAlqAKIBAQFKkQEKTBIHVHVybm91dBoaCgoNA0EiRBXSoxxEEgoNAACAPxUAAIA/IgAiIwoFbGFiZWwSGgoKDbVZDkEVtvp1QRIKDVNCtD8VU0K0PyIAKAcSATIyCg0AAFzCFQAAAKo6Cg037pRCFQAAAKpCCg35N7xCFScJu8JKBBgBIARSBggBGAEgCVoGCAEYAiAIagCiAQEBSoUBCkwSB1R1cm5vdXQaGgoKDcpeRUQVylfzQxIKDQAAgD8VAACAPyIAIiMKBWxhYmVsEhoKCg0HJUbBFQTjlsESCg1TQrQ/FVNCtD8iACgIEgEzMgUNP+wgQjoFDQAAjsJCCg18bDnCFXxsOUJKAiAKUgYIARgBIAVaBggBGAIgB2oAogEBAUqPAQpMEgdUdXJub3V0GhoKCg0pm0NEFdKjHEQSCg0AAIA/FQAAgD8iACIjCgVsYWJlbBIaCgoNdLsZwRUSmZhBEgoNU0K0PxVTQrQ/IgAoCRIBNDIKDVuiSUIVAACAqToKDezFa8IVAACAqUIKDYyOucIVjI65wkoCIAtSBggBGAEgB1oGCAEYAiAFagCiAQEBSoMBCkwSB1R1cm5vdXQaGgoKDStat0QVylfzQxIKDQAAgD8VAACAPyIAIiMKBWxhYmVsEhoKCg0HJUbBFQTjlsESCg1TQrQ/FVNCtD8iACgOEgE1MgUNP+wgQjoFDQAAKMNCCg3XQjjCFao9OEJKAiAQUgQYASAMWgYIARgCIA9qAKIBAQFKgwEKTBIHVHVybm91dBoaCgoNC96lRBXSoxxEEgoNAACAPxUAAIA/IgAiIwoFbGFiZWwSGgoKDbVZDkEVtvp1QRIKDVNCtD8VU0K0PyIAKA8SATYyBQ0AAMjBOgUNgfPeQkIKDZCgu0IVkKC7wkoEGAEgDVICIBFaBggBGAIgDmoAogEBAVKAAQpMEgdTZWN0aW9uGhoKCg273ey/FYJxG0ISCg0AAIA/FQAAgD8iACIjCgVsYWJlbBIaCgoNQFe2QxUwsOhDEgoNU0K0PxVTQrQ/IgAoAxICNUcaCg2nowxDFZrp30MaCg1y9xREFZrp30MqBAgBIAVgCnABgAEBigECFiOaAQEBUnsKTBIHU2VjdGlvbhoaCgoNu93svxUTvDJDEgoNAACAPxUAAIA/IgAiIwoFbGFiZWwSGgoKDRXKuEMVN//ZQxIKDVNCtD8VU0K0PyIAKAQSAjZHGgoNp6MMQxWa6d9DGgoNcvcURBWa6d9DKgQIASAHYAqKAQIXJJoBAQFShAEKTBIHU2VjdGlvbhoaCgoNpEQsRBWCcRtCEgoNAACAPxUAAIA/IgAiIwoFbGFiZWwSGgoKDf3vOUMVmunpQxIKDVNCtD8VU0K0PyIAKAoSAjdHGgoNp6MMQxWa6d9DGgoNIRdqQxWa6d9DIgQIASAIKgIgDGAKcAGAAQGKAQIYGZoBAQFSfwpMEgdTZWN0aW9uGhoKCg1lDC1EFRO8MkMSCg0AAIA/FQAAgD8iACIjCgVsYWJlbBIaCgoNv0M2QxVijNdDEgoNU0K0PxVTQrQ/IgAoCxICOEcaCg2nowxDFZrp30MaCg1DKmlDFZrp30MiBAgBIAkqAiANYAqKAQIaG5oBAQFSiAEKTBIHU2VjdGlvbhoaCgoNg6FDRBWCcRtCEgoNAACAPxUAAIA/IgAiIwoFbGFiZWwSGgoKDWAUn0MVMLDoQxIKDVNCtD8VU0K0PyIAKAwSAjlHGgoNp6MMQxWa6d9DGgoN0xIBRBWa6d9DIgQYASAKKgYIARgBIA5gCnABgAEBigECGRyaAQEBUoIBCkwSB1NlY3Rpb24aGgoKDQwuREQVE7wyQxIKDQAAgD8VAACAPyIAIiMKBWxhYmVsEhoKCg2rd55DFWKM10MSCg1TQrQ/FVNCtD8iACgNEgMxMEcaCg2nowxDFZrp30MaCg0KTgFEFZrp30MiBBgBIAsqBAgBIA9gCooBAhsdmgEBAVKFAQpMEgdTZWN0aW9uGhoKCg0YzapEFYJxG0ISCg0AAIA/FQAAgD8iACIjCgVsYWJlbBIaCgoN0JRuQxWa6elDEgoNU0K0PxVTQrQ/IgAoEBIDMTFHGgoNp6MMQxWa6d9DGgoNRGmuQxWa6d9DIgQIASAOKgIgEmAKcAGAAQGKAQIeH5oBAQFSggEKTBIHU2VjdGlvbhoaCgoNzjiiRBUTvDJDEgoNAACAPxUAAIA/IgAiIwoFbGFiZWwSGgoKDSuD+0MVre/WQxIKDVNCtD8VU0K0PyIAKBESAzEyRxoKDaejDEMVmunfQxoKDapjZkQVmunfQyIGCAEYASAPKgIgFWAKigECIFWaAQEBUoUBCkwSB1NlY3Rpb24aGgoKDfTSxEQVgnEbQhIKDQAAgD8VAACAPyIAIiMKBWxhYmVsEhoKCg1arJRDFTCw6EMSCg1TQrQ/FVNCtD8iACgSEgMxM0caCg2nowxDFZrp30MaCg2QjepDFZrp30MiBBgBIBAqAiATYApwAYABAYoBAh8hmgEBAVKFAQpMEgdTZWN0aW9uGhoKCg3j4e1EFYJxG0ISCg0AAIA/FQAAgD8iACIjCgVsYWJlbBIaCgoN6QJmQxWa6elDEgoNU0K0PxVTQrQ/IgAoExIDMTVHGgoNp6MMQxWa6d9DGgoNiq6eQxWa6d9DIgQYASASKgIgFGAKcAGAAQGKAQIhIpoBAQFShQEKTBIHU2VjdGlvbhoaCgoNiPwBRRWCcRtCEgoNAACAPxUAAIA/IgAiIwoFbGFiZWwSGgoKDSjQpUMVT4bqQxIKDVNCtD8VU0K0PyIAKBQSAzE3RxoKDaejDEMVmunfQxoKDdMSAUQVmunfQyIEGAEgEyoCIDNgCnABgAEBigECIlaaAQEBUoABCkwSB1NlY3Rpb24aGgoKDRfrAUUVE7wyQxIKDQAAgD8VAACAPyIAIiMKBWxhYmVsEhoKCg1mfKlDFa3v1kMSCg1TQrQ/FVNCtD8iACgVEgMxNEcaCg2nowxDFZrp30MaCg3TEgFEFZrp30MiBBgBIBEqAiA0YAqKAQI1VZoBAQFSfApMEgdTZWN0aW9uGhoKCg0CdxlFFYJxG0ISCg0AAIA/FQAAgD8iACIjCgVsYWJlbBIaCgoN6QJmQxWa6elDEgoNU0K0PxVTQrQ/IgAoMxICMUcaCg2nowxDFZrp30MaCg2Krp5DFZrp30MiBBgBIBRgCnABgAEBigECVl5SdwpMEgdTZWN0aW9uGhoKCg2RZRlFFRO8MkMSCg0AAIA/FQAAgD8iACIjCgVsYWJlbBIaCgoN6QJmQxWa6elDEgoNU0K0PxVTQrQ/IgAoNBICMkcaCg2nowxDFZrp30MaCg2Krp5DFZrp30MiBBgBIBVgCooBAjVfUogBCkISB1NlY3Rpb24aEAoAEgoNAACAPxUAAIA/IgAiIwoFbGFiZWwSGgoKDecvM0QVylf9QxIKDVNCtD8VU0K0PyIAKFESBTEtM0RHGgoNA4EURBXKV/NDGgoNjm1PRBXKV/NDGgoNAsg5RBWtQgVEGgoNV2ksRBUAcgVEMAKKAQQWGDAvmgEBAVKIAQpCEgdTZWN0aW9uGhAKABIKDQAAgD8VAACAPyIAIiMKBWxhYmVsEhoKCg3JhjREFcBTGEQSCg1TQrQ/FVNCtD8iAChSEgUyLTRERxoKDQOBFEQV0qMcRBoKDU41UEQV0qMcRBoKDVdpLEQVAHIFRBoKDQLIOUQVrUIFRDACigEEFxovMJoBAQFSeQpCEgdTZWN0aW9uGhAKABIKDQAAgD8VAACAPyIAIiMKBWxhYmVsEhoKCg0rWrdEFcpX/UMSCg1TQrQ/FVNCtD8iAChTEgM1REcaCg2NYbxEFcpX80MaCg0rWqJEFcpX80MaCg0UmLFEFcAvBUQwAooBAx4cMZoBAQFSgwEKTBIHU2VjdGlvbhoaCgoNVyZqQhUgARXCEgoNAACAPxUAAIA/IgAiIwoFbGFiZWwSGgoKDQvepUQV0qMhRBIKDVNCtD8VU0K0PyIAKFQSAzZERxoKDQu+okQV0qMcRBoKDUPNs0QV0qMcRBoKDRSYsUQVwC8FRDACigEDHSAxmgEBAWpyCksSDEF4bGVDb3VudGluZxoaCgoNA4EURBXKV/NDEgoNAACAPxUAAIA/IgAiHQoJa2lsb21ldGVyEhAKABIKDVNCtD8VU0K0PyIAKBYSCDVHLUJcMS1BGgoI6OkJEgRNQUlOIgQYASADIgQIASAFSgEBanQKSxIMQXhsZUNvdW50aW5nGhoKCg0DgRREFdKjHEQSCg0AAIA/FQAAgD8iACIdCglraWxvbWV0ZXISEAoAEgoNU0K0PxVTQrQ/IgAoFxIINkctQlwyLUEaDAjo6QkSBE1BSU4YASIEGAEgBCIECAEgB0oBAWpwCksSDEF4bGVDb3VudGluZxoaCgoNjm1PRBXKV/NDEgoNAACAPxUAAIA/IgAiHQoJa2lsb21ldGVyEhAKABIKDVNCtD8VU0K0PyIAKBgSCDdHLUFcMy1BGgoIkKQOEgRNQUlOIgIgCiIECAEgCEoBAWpxCksSDEF4bGVDb3VudGluZxoaCgoNbMpmRBXKV/NDEgoNAACAPxUAAIA/IgAiHQoJa2lsb21ldGVyEhAKABIKDVNCtD8VU0K0PyIAKBkSCTdHLUJcOUctQRoKCJCbERIETUFJTiIEGAEgCiICIAxKAQFqcgpLEgxBeGxlQ291bnRpbmcaGgoKDU41UEQV0qMcRBIKDQAAgD8VAACAPyIAIh0KCWtpbG9tZXRlchIQCgASCg1TQrQ/FVNCtD8iACgaEgg4Ry1BXDQtQRoMCJCkDhIETUFJThgBIgIgCyIECAEgCUoBAWp0CksSDEF4bGVDb3VudGluZxoaCgoN9lZnRBXSoxxEEgoNAACAPxUAAIA/IgAiHQoJa2lsb21ldGVyEhAKABIKDVNCtD8VU0K0PyIAKBsSCjhHLUJcMTBHLUEaDAiQmxESBE1BSU4YASIEGAEgCyICIA1KAQFqdApLEgxBeGxlQ291bnRpbmcaGgoKDStaokQVylfzQxIKDQAAgD8VAACAPyIAIh0KCWtpbG9tZXRlchIQCgASCg1TQrQ/FVNCtD8iACgcEgg5Ry1CXDMtQhoKCOCMGxIETUFJTiIEGAEgDCIGCAEYASAOSgEBanUKSxIMQXhsZUNvdW50aW5nGhoKCg0LvqJEFdKjHEQSCg0AAIA/FQAAgD8iACIdCglraWxvbWV0ZXISEAoAEgoNU0K0PxVTQrQ/IgAoHRIJMTBHLUJcMi1BGgwIqPUaEgRNQUlOGAEiBBgBIA0iBAgBIA9KAQFqcQpLEgxBeGxlQ291bnRpbmcaGgoKDY1hvEQVylfzQxIKDQAAgD8VAACAPyIAIh0KCWtpbG9tZXRlchIQCgASCg1TQrQ/FVNCtD8iACgeEgkxMUctQVwzLUEaCgjQrx8SBE1BSU4iAiAQIgQIASAOSgEBanMKSxIMQXhsZUNvdW50aW5nGhoKCg1pZ9ZEFcpX80MSCg0AAIA/FQAAgD8iACIdCglraWxvbWV0ZXISEAoAEgoNU0K0PxVTQrQ/IgAoHxILMTFHLUJcMTNHLUEaCgiY7iwSBE1BSU4iBBgBIBAiAiASSgEBanUKSxIMQXhsZUNvdW50aW5nGhoKCg1DzbNEFdKjHEQSCg0AAIA/FQAAgD8iACIdCglraWxvbWV0ZXISEAoAEgoNU0K0PxVTQrQ/IgAoIBIJMTJHLUFcMi1CGgwImJgfEgRNQUlOGAEiAiARIgYIARgBIA9KAQFqcwpLEgxBeGxlQ291bnRpbmcaGgoKDVh2/0QVylfzQxIKDQAAgD8VAACAPyIAIh0KCWtpbG9tZXRlchIQCgASCg1TQrQ/FVNCtD8iACghEgsxM0ctQlwxNUctQRoKCMi/YBIETUFJTiIEGAEgEiICIBNKAQFqcwpLEgxBeGxlQ291bnRpbmcaGgoKDcPGCkUVylfzQxIKDQAAgD8VAACAPyIAIh0KCWtpbG9tZXRlchIQCgASCg1TQrQ/FVNCtD8iACgiEgsxNUctQlwxN0ctQRoKCLjiZBIETUFJTiIEGAEgEyICIBRKAQFqXgpLEgxBeGxlQ291bnRpbmcaGgoKDezJCkMVylfzQxIKDQAAgD8VAACAPyIAIh0KCWtpbG9tZXRlchIQCgASCg1TQrQ/FVNCtD8iACgjEgQ1Ry1BGgAiAiADOAFKAQFqXgpLEgxBeGxlQ291bnRpbmcaGgoKDezJCkMV0qMcRBIKDQAAgD8VAACAPyIAIh0KCWtpbG9tZXRlchIQCgASCg1TQrQ/FVNCtD8iACgkEgQ2Ry1BGgAiAiAEOAFKAQFqdQpLEgxBeGxlQ291bnRpbmcaGgoKDVdpLEQVAHIFRBIKDQAAgD8VAACAPyIAIh0KCWtpbG9tZXRlchIQCgASCg1TQrQ/FVNCtD8iACgvEgcxLUNcNC1DGgoI+LQLEgRNQUlOIgYIARgCIAUiBggBGAIgCUoBAWp1CksSDEF4bGVDb3VudGluZxoaCgoNAsg5RBWtQgVEEgoNAACAPxUAAIA/IgAiHQoJa2lsb21ldGVyEhAKABIKDVNCtD8VU0K0PyIAKDASBzItQ1wzLUMaCgiY0QwSBE1BSU4iBggBGAIgByIGCAEYAiAISgEBanUKSxIMQXhsZUNvdW50aW5nGhoKCg0UmLFEFcAvBUQSCg0AAIA/FQAAgD8iACIdCglraWxvbWV0ZXISEAoAEgoNU0K0PxVTQrQ/IgAoMRIHNS1DXDYtQxoKCOCGHRIETUFJTiIGCAEYAiAOIgYIARgCIA9KAQFqcQpLEgxBeGxlQ291bnRpbmcaGgoKDcwvIkUV0qMcRBIKDQAAgD8VAACAPyIAIh0KCWtpbG9tZXRlchIQCgASCg1TQrQ/FVNCtD8iACg1EgoxNEctQlwyRy1BGgwI0LxuEgRNQUlOGAEiBBgBIBUiAiA0anUKSxIMQXhsZUNvdW50aW5nGhoKCg1StQpFFdKjHEQSCg0AAIA/FQAAgD8iACIdCglraWxvbWV0ZXISEAoAEgoNU0K0PxVTQrQ/IgAoVRILMTJHLUJcMTRHLUEaDAiwu2QSBE1BSU4YASIEGAEgESICIBVKAQFqbwpLEgxBeGxlQ291bnRpbmcaGgoKDT1BIkUVylfzQxIKDQAAgD8VAACAPyIAIh0KCWtpbG9tZXRlchIQCgASCg1TQrQ/FVNCtD8iAChWEgoxN0ctQlwxRy1BGgoI2ONuEgRNQUlOIgQYASAUIgIgM2pnCksSDEF4bGVDb3VudGluZxoaCgoN00wtRRXKV/NDEgoNAACAPxUAAIA/IgAiHQoJa2lsb21ldGVyEhAKABIKDVNCtD8VU0K0PyIAKF4SBDFHLUIaCgj45HgSBE1BSU4iBBgBIDM4AWppCksSDEF4bGVDb3VudGluZxoaCgoNYjstRRXSoxxEEgoNAACAPxUAAIA/IgAiHQoJa2lsb21ldGVyEhAKABIKDVNCtD8VU0K0PyIAKF8SBDJHLUIaDAjwvXgSBE1BSU4YASIEGAEgNDgBcjQKKRIJU2VwYXJhdG9yGhoKCg0DgRREFcpX80MSCg0AAIA/FQAAgD8iACg4GgdzZWN0aW9ucjEKKRIJU2VwYXJhdG9yGhoKCg3syQpDFcpX80MSCg0AAIA/FQAAgD8iACg5GgRlbmRBcjQKKRIJU2VwYXJhdG9yGhoKCg0DgRREFdKjHEQSCg0AAIA/FQAAgD8iACg6GgdzZWN0aW9ucjEKKRIJU2VwYXJhdG9yGhoKCg3syQpDFdKjHEQSCg0AAIA/FQAAgD8iACg7GgRlbmRBcjQKKRIJU2VwYXJhdG9yGhoKCg2ObU9EFcpX80MSCg0AAIA/FQAAgD8iACg8GgdzZWN0aW9ucjQKKRIJU2VwYXJhdG9yGhoKCg1symZEFcpX80MSCg0AAIA/FQAAgD8iACg9GgdzZWN0aW9ucjQKKRIJU2VwYXJhdG9yGhoKCg1PNVBEFdKjHEQSCg0AAIA/FQAAgD8iACg+GgdzZWN0aW9ucjQKKRIJU2VwYXJhdG9yGhoKCg32VmdEFdKjHEQSCg0AAIA/FQAAgD8iACg/GgdzZWN0aW9ucjQKKRIJU2VwYXJhdG9yGhoKCg0rWqJEFcpX80MSCg0AAIA/FQAAgD8iAChAGgdzZWN0aW9ucjQKKRIJU2VwYXJhdG9yGhoKCg0LvqJEFdKjHEQSCg0AAIA/FQAAgD8iAChBGgdzZWN0aW9ucjQKKRIJU2VwYXJhdG9yGhoKCg2NYbxEFcpX80MSCg0AAIA/FQAAgD8iAChCGgdzZWN0aW9ucjQKKRIJU2VwYXJhdG9yGhoKCg1pZ9ZEFcpX80MSCg0AAIA/FQAAgD8iAChDGgdzZWN0aW9ucjQKKRIJU2VwYXJhdG9yGhoKCg1DzbNEFdKjHEQSCg0AAIA/FQAAgD8iAChEGgdzZWN0aW9ucjQKKRIJU2VwYXJhdG9yGhoKCg1StQpFFdKjHEQSCg0AAIA/FQAAgD8iAChFGgdzZWN0aW9ucjQKKRIJU2VwYXJhdG9yGhoKCg1Ydv9EFcpX80MSCg0AAIA/FQAAgD8iAChGGgdzZWN0aW9ucjQKKRIJU2VwYXJhdG9yGhoKCg3DxgpFFcpX80MSCg0AAIA/FQAAgD8iAChHGgdzZWN0aW9ucjQKKRIJU2VwYXJhdG9yGhoKCg09QSJFFcpX80MSCg0AAIA/FQAAgD8iAChIGgdzZWN0aW9ucjQKKRIJU2VwYXJhdG9yGhoKCg3MLyJFFdKjHEQSCg0AAIA/FQAAgD8iAChJGgdzZWN0aW9ucjEKKRIJU2VwYXJhdG9yGhoKCg3UTC1FFcpX80MSCg0AAIA/FQAAgD8iAChKGgRlbmRCcjEKKRIJU2VwYXJhdG9yGhoKCg1jOy1FFdKjHEQSCg0AAIA/FQAAgD8iAChLGgRlbmRCcjQKKRIJU2VwYXJhdG9yGhoKCg3KnjNEFcpX80MSCg0AAIA/FQAAgD8iAChMGgdzZWN0aW9ucjQKKRIJU2VwYXJhdG9yGhoKCg1XaSxEFQByBUQSCg0AAIA/FQAAgD8iAChNGgd0dXJub3V0cjQKKRIJU2VwYXJhdG9yGhoKCg0CyDlEFa1CBUQSCg0AAIA/FQAAgD8iAChOGgd0dXJub3V0cjQKKRIJU2VwYXJhdG9yGhoKCg3K3jREFdKjHEQSCg0AAIA/FQAAgD8iAChPGgdzZWN0aW9ucjQKKRIJU2VwYXJhdG9yGhoKCg0UmLFEFcAvBUQSCg0AAIA/FQAAgD8iAChQGgd0dXJub3V0+gEXCgzmoIflh4bln47luIISATEaBE1BSU6iAgCyAgDKAm8KORIZQ29uY2VudHJhdGlvbkRpdmlkaW5nTGluZRoaCgoNSpNSwhUOtZzAEgoNAACAPxUAAIA/IgAoMhoKDU+VJUUVGoWxQxoKDU+VJUUVJVVGRDIKCgQYASAUEgIgMzIKCgQYASAVEgIgNDgBQAGKAwA= \ No newline at end of file diff --git a/example/data_proto/stationLayoutGraphics.pb.go b/example/data_proto/stationLayoutGraphics.pb.go new file mode 100644 index 0000000..640f2af --- /dev/null +++ b/example/data_proto/stationLayoutGraphics.pb.go @@ -0,0 +1,7709 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.34.2 +// protoc v4.23.1 +// source: stationLayoutGraphics.proto + +package data_proto + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// * 上下行(区段/信号机) +type Direction int32 + +const ( + Direction_UP Direction = 0 + Direction_DOWN Direction = 1 +) + +// Enum value maps for Direction. +var ( + Direction_name = map[int32]string{ + 0: "UP", + 1: "DOWN", + } + Direction_value = map[string]int32{ + "UP": 0, + "DOWN": 1, + } +) + +func (x Direction) Enum() *Direction { + p := new(Direction) + *p = x + return p +} + +func (x Direction) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (Direction) Descriptor() protoreflect.EnumDescriptor { + return file_stationLayoutGraphics_proto_enumTypes[0].Descriptor() +} + +func (Direction) Type() protoreflect.EnumType { + return &file_stationLayoutGraphics_proto_enumTypes[0] +} + +func (x Direction) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use Direction.Descriptor instead. +func (Direction) EnumDescriptor() ([]byte, []int) { + return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{0} +} + +type Polygon_PolygonType int32 + +const ( + Polygon_ConcentrationDividingLine Polygon_PolygonType = 0 +) + +// Enum value maps for Polygon_PolygonType. +var ( + Polygon_PolygonType_name = map[int32]string{ + 0: "ConcentrationDividingLine", + } + Polygon_PolygonType_value = map[string]int32{ + "ConcentrationDividingLine": 0, + } +) + +func (x Polygon_PolygonType) Enum() *Polygon_PolygonType { + p := new(Polygon_PolygonType) + *p = x + return p +} + +func (x Polygon_PolygonType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (Polygon_PolygonType) Descriptor() protoreflect.EnumDescriptor { + return file_stationLayoutGraphics_proto_enumTypes[1].Descriptor() +} + +func (Polygon_PolygonType) Type() protoreflect.EnumType { + return &file_stationLayoutGraphics_proto_enumTypes[1] +} + +func (x Polygon_PolygonType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use Polygon_PolygonType.Descriptor instead. +func (Polygon_PolygonType) EnumDescriptor() ([]byte, []int) { + return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{7, 0} +} + +type Platform_TypeOfPlatform int32 + +const ( + Platform_Unknown Platform_TypeOfPlatform = 0 + Platform_up Platform_TypeOfPlatform = 1 + Platform_down Platform_TypeOfPlatform = 2 +) + +// Enum value maps for Platform_TypeOfPlatform. +var ( + Platform_TypeOfPlatform_name = map[int32]string{ + 0: "Unknown", + 1: "up", + 2: "down", + } + Platform_TypeOfPlatform_value = map[string]int32{ + "Unknown": 0, + "up": 1, + "down": 2, + } +) + +func (x Platform_TypeOfPlatform) Enum() *Platform_TypeOfPlatform { + p := new(Platform_TypeOfPlatform) + *p = x + return p +} + +func (x Platform_TypeOfPlatform) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (Platform_TypeOfPlatform) Descriptor() protoreflect.EnumDescriptor { + return file_stationLayoutGraphics_proto_enumTypes[2].Descriptor() +} + +func (Platform_TypeOfPlatform) Type() protoreflect.EnumType { + return &file_stationLayoutGraphics_proto_enumTypes[2] +} + +func (x Platform_TypeOfPlatform) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use Platform_TypeOfPlatform.Descriptor instead. +func (Platform_TypeOfPlatform) EnumDescriptor() ([]byte, []int) { + return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{10, 0} +} + +type AxleCounting_TypeDetectionPoint int32 + +const ( + AxleCounting_AxleCounting AxleCounting_TypeDetectionPoint = 0 + AxleCounting_SectionBoundary AxleCounting_TypeDetectionPoint = 1 +) + +// Enum value maps for AxleCounting_TypeDetectionPoint. +var ( + AxleCounting_TypeDetectionPoint_name = map[int32]string{ + 0: "AxleCounting", + 1: "SectionBoundary", + } + AxleCounting_TypeDetectionPoint_value = map[string]int32{ + "AxleCounting": 0, + "SectionBoundary": 1, + } +) + +func (x AxleCounting_TypeDetectionPoint) Enum() *AxleCounting_TypeDetectionPoint { + p := new(AxleCounting_TypeDetectionPoint) + *p = x + return p +} + +func (x AxleCounting_TypeDetectionPoint) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (AxleCounting_TypeDetectionPoint) Descriptor() protoreflect.EnumDescriptor { + return file_stationLayoutGraphics_proto_enumTypes[3].Descriptor() +} + +func (AxleCounting_TypeDetectionPoint) Type() protoreflect.EnumType { + return &file_stationLayoutGraphics_proto_enumTypes[3] +} + +func (x AxleCounting_TypeDetectionPoint) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use AxleCounting_TypeDetectionPoint.Descriptor instead. +func (AxleCounting_TypeDetectionPoint) EnumDescriptor() ([]byte, []int) { + return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{16, 0} +} + +type Turnout_SwitchMachineType int32 + +const ( + Turnout_Unknown Turnout_SwitchMachineType = 0 + Turnout_ZDJ9_Single Turnout_SwitchMachineType = 1 + Turnout_ZDJ9_Double Turnout_SwitchMachineType = 2 +) + +// Enum value maps for Turnout_SwitchMachineType. +var ( + Turnout_SwitchMachineType_name = map[int32]string{ + 0: "Unknown", + 1: "ZDJ9_Single", + 2: "ZDJ9_Double", + } + Turnout_SwitchMachineType_value = map[string]int32{ + "Unknown": 0, + "ZDJ9_Single": 1, + "ZDJ9_Double": 2, + } +) + +func (x Turnout_SwitchMachineType) Enum() *Turnout_SwitchMachineType { + p := new(Turnout_SwitchMachineType) + *p = x + return p +} + +func (x Turnout_SwitchMachineType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (Turnout_SwitchMachineType) Descriptor() protoreflect.EnumDescriptor { + return file_stationLayoutGraphics_proto_enumTypes[4].Descriptor() +} + +func (Turnout_SwitchMachineType) Type() protoreflect.EnumType { + return &file_stationLayoutGraphics_proto_enumTypes[4] +} + +func (x Turnout_SwitchMachineType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use Turnout_SwitchMachineType.Descriptor instead. +func (Turnout_SwitchMachineType) EnumDescriptor() ([]byte, []int) { + return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{18, 0} +} + +// * 左右行 * +type KilometerSystem_Direction int32 + +const ( + KilometerSystem_LEFT KilometerSystem_Direction = 0 + KilometerSystem_RIGHT KilometerSystem_Direction = 1 +) + +// Enum value maps for KilometerSystem_Direction. +var ( + KilometerSystem_Direction_name = map[int32]string{ + 0: "LEFT", + 1: "RIGHT", + } + KilometerSystem_Direction_value = map[string]int32{ + "LEFT": 0, + "RIGHT": 1, + } +) + +func (x KilometerSystem_Direction) Enum() *KilometerSystem_Direction { + p := new(KilometerSystem_Direction) + *p = x + return p +} + +func (x KilometerSystem_Direction) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (KilometerSystem_Direction) Descriptor() protoreflect.EnumDescriptor { + return file_stationLayoutGraphics_proto_enumTypes[5].Descriptor() +} + +func (KilometerSystem_Direction) Type() protoreflect.EnumType { + return &file_stationLayoutGraphics_proto_enumTypes[5] +} + +func (x KilometerSystem_Direction) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use KilometerSystem_Direction.Descriptor instead. +func (KilometerSystem_Direction) EnumDescriptor() ([]byte, []int) { + return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{19, 0} +} + +// repeated string oldcentralizedStations = 9; // 集中站Id列表 +// 信号机模型类型枚举 +// 从左向右,最左边为靠近灯座的灯 +// 如果没有说明,默认不封灯,无引导 +// F-封 D-单 Y-有、带 Y-引导 +// H-红 L-绿 U-黄 A-蓝 B-白 +type Signal_Model int32 + +const ( + Signal_HL Signal_Model = 0 //2XH-1 红绿 + Signal_HLU_FU Signal_Model = 1 //2XH-1 红绿黄,封黄灯,无引导 + Signal_HLU_DU_YY Signal_Model = 2 //3XH-1 红绿黄,不封灯,有单黄,带引导 + Signal_HLU_YY Signal_Model = 3 //3XH-2或JDXH 红绿黄,不封灯,无单黄,带引导 + Signal_HLU_FL_DU_YY Signal_Model = 4 //3XH-3 红绿黄,封绿灯,有单黄,带引导 + Signal_HLU_DU Signal_Model = 5 //3XH-4 红绿黄,不封灯,有单黄,无引导 + Signal_AB Signal_Model = 6 //DXCH 蓝白 + Signal_HBU_DU Signal_Model = 7 //JCKXH 红白黄,不封灯,有单黄,无引导 +) + +// Enum value maps for Signal_Model. +var ( + Signal_Model_name = map[int32]string{ + 0: "HL", + 1: "HLU_FU", + 2: "HLU_DU_YY", + 3: "HLU_YY", + 4: "HLU_FL_DU_YY", + 5: "HLU_DU", + 6: "AB", + 7: "HBU_DU", + } + Signal_Model_value = map[string]int32{ + "HL": 0, + "HLU_FU": 1, + "HLU_DU_YY": 2, + "HLU_YY": 3, + "HLU_FL_DU_YY": 4, + "HLU_DU": 5, + "AB": 6, + "HBU_DU": 7, + } +) + +func (x Signal_Model) Enum() *Signal_Model { + p := new(Signal_Model) + *p = x + return p +} + +func (x Signal_Model) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (Signal_Model) Descriptor() protoreflect.EnumDescriptor { + return file_stationLayoutGraphics_proto_enumTypes[6].Descriptor() +} + +func (Signal_Model) Type() protoreflect.EnumType { + return &file_stationLayoutGraphics_proto_enumTypes[6] +} + +func (x Signal_Model) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use Signal_Model.Descriptor instead. +func (Signal_Model) EnumDescriptor() ([]byte, []int) { + return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{20, 0} +} + +type Section_SectionType int32 + +const ( + Section_Physical Section_SectionType = 0 + Section_TurnoutPhysical Section_SectionType = 2 +) + +// Enum value maps for Section_SectionType. +var ( + Section_SectionType_name = map[int32]string{ + 0: "Physical", + 2: "TurnoutPhysical", + } + Section_SectionType_value = map[string]int32{ + "Physical": 0, + "TurnoutPhysical": 2, + } +) + +func (x Section_SectionType) Enum() *Section_SectionType { + p := new(Section_SectionType) + *p = x + return p +} + +func (x Section_SectionType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (Section_SectionType) Descriptor() protoreflect.EnumDescriptor { + return file_stationLayoutGraphics_proto_enumTypes[7].Descriptor() +} + +func (Section_SectionType) Type() protoreflect.EnumType { + return &file_stationLayoutGraphics_proto_enumTypes[7] +} + +func (x Section_SectionType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use Section_SectionType.Descriptor instead. +func (Section_SectionType) EnumDescriptor() ([]byte, []int) { + return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{21, 0} +} + +type Section_RunningDirection int32 + +const ( + Section_AtoB Section_RunningDirection = 0 + Section_BtoA Section_RunningDirection = 1 + Section_BOTH Section_RunningDirection = 2 +) + +// Enum value maps for Section_RunningDirection. +var ( + Section_RunningDirection_name = map[int32]string{ + 0: "AtoB", + 1: "BtoA", + 2: "BOTH", + } + Section_RunningDirection_value = map[string]int32{ + "AtoB": 0, + "BtoA": 1, + "BOTH": 2, + } +) + +func (x Section_RunningDirection) Enum() *Section_RunningDirection { + p := new(Section_RunningDirection) + *p = x + return p +} + +func (x Section_RunningDirection) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (Section_RunningDirection) Descriptor() protoreflect.EnumDescriptor { + return file_stationLayoutGraphics_proto_enumTypes[8].Descriptor() +} + +func (Section_RunningDirection) Type() protoreflect.EnumType { + return &file_stationLayoutGraphics_proto_enumTypes[8] +} + +func (x Section_RunningDirection) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use Section_RunningDirection.Descriptor instead. +func (Section_RunningDirection) EnumDescriptor() ([]byte, []int) { + return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{21, 1} +} + +type RelatedRef_DeviceType int32 + +const ( + RelatedRef_Section RelatedRef_DeviceType = 0 + RelatedRef_Turnout RelatedRef_DeviceType = 1 + RelatedRef_TrainWindow RelatedRef_DeviceType = 2 + RelatedRef_AxleCounting RelatedRef_DeviceType = 3 + RelatedRef_SectionLink RelatedRef_DeviceType = 4 + RelatedRef_signal RelatedRef_DeviceType = 5 + RelatedRef_station RelatedRef_DeviceType = 6 + RelatedRef_ScreenDoor RelatedRef_DeviceType = 7 + RelatedRef_SignalFaultAlarm RelatedRef_DeviceType = 8 + RelatedRef_Breakers RelatedRef_DeviceType = 9 //断路器 + RelatedRef_PowerScreen RelatedRef_DeviceType = 10 //电源屏 + RelatedRef_GarageDoor RelatedRef_DeviceType = 11 + RelatedRef_CarWashing RelatedRef_DeviceType = 12 + RelatedRef_FloodGate RelatedRef_DeviceType = 13 +) + +// Enum value maps for RelatedRef_DeviceType. +var ( + RelatedRef_DeviceType_name = map[int32]string{ + 0: "Section", + 1: "Turnout", + 2: "TrainWindow", + 3: "AxleCounting", + 4: "SectionLink", + 5: "signal", + 6: "station", + 7: "ScreenDoor", + 8: "SignalFaultAlarm", + 9: "Breakers", + 10: "PowerScreen", + 11: "GarageDoor", + 12: "CarWashing", + 13: "FloodGate", + } + RelatedRef_DeviceType_value = map[string]int32{ + "Section": 0, + "Turnout": 1, + "TrainWindow": 2, + "AxleCounting": 3, + "SectionLink": 4, + "signal": 5, + "station": 6, + "ScreenDoor": 7, + "SignalFaultAlarm": 8, + "Breakers": 9, + "PowerScreen": 10, + "GarageDoor": 11, + "CarWashing": 12, + "FloodGate": 13, + } +) + +func (x RelatedRef_DeviceType) Enum() *RelatedRef_DeviceType { + p := new(RelatedRef_DeviceType) + *p = x + return p +} + +func (x RelatedRef_DeviceType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (RelatedRef_DeviceType) Descriptor() protoreflect.EnumDescriptor { + return file_stationLayoutGraphics_proto_enumTypes[9].Descriptor() +} + +func (RelatedRef_DeviceType) Type() protoreflect.EnumType { + return &file_stationLayoutGraphics_proto_enumTypes[9] +} + +func (x RelatedRef_DeviceType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use RelatedRef_DeviceType.Descriptor instead. +func (RelatedRef_DeviceType) EnumDescriptor() ([]byte, []int) { + return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{22, 0} +} + +type RelatedRef_DevicePort int32 + +const ( + RelatedRef_A RelatedRef_DevicePort = 0 + RelatedRef_B RelatedRef_DevicePort = 1 + RelatedRef_C RelatedRef_DevicePort = 2 +) + +// Enum value maps for RelatedRef_DevicePort. +var ( + RelatedRef_DevicePort_name = map[int32]string{ + 0: "A", + 1: "B", + 2: "C", + } + RelatedRef_DevicePort_value = map[string]int32{ + "A": 0, + "B": 1, + "C": 2, + } +) + +func (x RelatedRef_DevicePort) Enum() *RelatedRef_DevicePort { + p := new(RelatedRef_DevicePort) + *p = x + return p +} + +func (x RelatedRef_DevicePort) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (RelatedRef_DevicePort) Descriptor() protoreflect.EnumDescriptor { + return file_stationLayoutGraphics_proto_enumTypes[10].Descriptor() +} + +func (RelatedRef_DevicePort) Type() protoreflect.EnumType { + return &file_stationLayoutGraphics_proto_enumTypes[10] +} + +func (x RelatedRef_DevicePort) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use RelatedRef_DevicePort.Descriptor instead. +func (RelatedRef_DevicePort) EnumDescriptor() ([]byte, []int) { + return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{22, 1} +} + +type Transponder_TransponderTypeEnum int32 + +const ( + Transponder_FB Transponder_TransponderTypeEnum = 0 // 固定应答器 + Transponder_WB Transponder_TransponderTypeEnum = 1 // 轮径校正应答器 + Transponder_DB Transponder_TransponderTypeEnum = 2 // 休眠唤醒应答器 + Transponder_VB Transponder_TransponderTypeEnum = 3 // 主信号应答器 + Transponder_IB Transponder_TransponderTypeEnum = 4 // 预告应答器 +) + +// Enum value maps for Transponder_TransponderTypeEnum. +var ( + Transponder_TransponderTypeEnum_name = map[int32]string{ + 0: "FB", + 1: "WB", + 2: "DB", + 3: "VB", + 4: "IB", + } + Transponder_TransponderTypeEnum_value = map[string]int32{ + "FB": 0, + "WB": 1, + "DB": 2, + "VB": 3, + "IB": 4, + } +) + +func (x Transponder_TransponderTypeEnum) Enum() *Transponder_TransponderTypeEnum { + p := new(Transponder_TransponderTypeEnum) + *p = x + return p +} + +func (x Transponder_TransponderTypeEnum) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (Transponder_TransponderTypeEnum) Descriptor() protoreflect.EnumDescriptor { + return file_stationLayoutGraphics_proto_enumTypes[11].Descriptor() +} + +func (Transponder_TransponderTypeEnum) Type() protoreflect.EnumType { + return &file_stationLayoutGraphics_proto_enumTypes[11] +} + +func (x Transponder_TransponderTypeEnum) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use Transponder_TransponderTypeEnum.Descriptor instead. +func (Transponder_TransponderTypeEnum) EnumDescriptor() ([]byte, []int) { + return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{25, 0} +} + +type SimpleRef_DeviceType int32 + +const ( + SimpleRef_Turnout SimpleRef_DeviceType = 0 + SimpleRef_AxleCounting SimpleRef_DeviceType = 1 +) + +// Enum value maps for SimpleRef_DeviceType. +var ( + SimpleRef_DeviceType_name = map[int32]string{ + 0: "Turnout", + 1: "AxleCounting", + } + SimpleRef_DeviceType_value = map[string]int32{ + "Turnout": 0, + "AxleCounting": 1, + } +) + +func (x SimpleRef_DeviceType) Enum() *SimpleRef_DeviceType { + p := new(SimpleRef_DeviceType) + *p = x + return p +} + +func (x SimpleRef_DeviceType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (SimpleRef_DeviceType) Descriptor() protoreflect.EnumDescriptor { + return file_stationLayoutGraphics_proto_enumTypes[12].Descriptor() +} + +func (SimpleRef_DeviceType) Type() protoreflect.EnumType { + return &file_stationLayoutGraphics_proto_enumTypes[12] +} + +func (x SimpleRef_DeviceType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use SimpleRef_DeviceType.Descriptor instead. +func (SimpleRef_DeviceType) EnumDescriptor() ([]byte, []int) { + return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{26, 0} +} + +type TrackSection_TrackSectionType int32 + +const ( + TrackSection_NORMAL TrackSection_TrackSectionType = 0 //非岔区 + TrackSection_FORK TrackSection_TrackSectionType = 1 //岔区 +) + +// Enum value maps for TrackSection_TrackSectionType. +var ( + TrackSection_TrackSectionType_name = map[int32]string{ + 0: "NORMAL", + 1: "FORK", + } + TrackSection_TrackSectionType_value = map[string]int32{ + "NORMAL": 0, + "FORK": 1, + } +) + +func (x TrackSection_TrackSectionType) Enum() *TrackSection_TrackSectionType { + p := new(TrackSection_TrackSectionType) + *p = x + return p +} + +func (x TrackSection_TrackSectionType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (TrackSection_TrackSectionType) Descriptor() protoreflect.EnumDescriptor { + return file_stationLayoutGraphics_proto_enumTypes[13].Descriptor() +} + +func (TrackSection_TrackSectionType) Type() protoreflect.EnumType { + return &file_stationLayoutGraphics_proto_enumTypes[13] +} + +func (x TrackSection_TrackSectionType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use TrackSection_TrackSectionType.Descriptor instead. +func (TrackSection_TrackSectionType) EnumDescriptor() ([]byte, []int) { + return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{30, 0} +} + +type StopPosition_CoachNum int32 + +const ( + StopPosition_Four StopPosition_CoachNum = 0 + StopPosition_Six StopPosition_CoachNum = 1 + StopPosition_Eight StopPosition_CoachNum = 2 +) + +// Enum value maps for StopPosition_CoachNum. +var ( + StopPosition_CoachNum_name = map[int32]string{ + 0: "Four", + 1: "Six", + 2: "Eight", + } + StopPosition_CoachNum_value = map[string]int32{ + "Four": 0, + "Six": 1, + "Eight": 2, + } +) + +func (x StopPosition_CoachNum) Enum() *StopPosition_CoachNum { + p := new(StopPosition_CoachNum) + *p = x + return p +} + +func (x StopPosition_CoachNum) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (StopPosition_CoachNum) Descriptor() protoreflect.EnumDescriptor { + return file_stationLayoutGraphics_proto_enumTypes[14].Descriptor() +} + +func (StopPosition_CoachNum) Type() protoreflect.EnumType { + return &file_stationLayoutGraphics_proto_enumTypes[14] +} + +func (x StopPosition_CoachNum) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use StopPosition_CoachNum.Descriptor instead. +func (StopPosition_CoachNum) EnumDescriptor() ([]byte, []int) { + return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{32, 0} +} + +type Beacon_BeaconType int32 + +const ( + Beacon_Static Beacon_BeaconType = 0 + Beacon_Dynamic Beacon_BeaconType = 1 +) + +// Enum value maps for Beacon_BeaconType. +var ( + Beacon_BeaconType_name = map[int32]string{ + 0: "Static", + 1: "Dynamic", + } + Beacon_BeaconType_value = map[string]int32{ + "Static": 0, + "Dynamic": 1, + } +) + +func (x Beacon_BeaconType) Enum() *Beacon_BeaconType { + p := new(Beacon_BeaconType) + *p = x + return p +} + +func (x Beacon_BeaconType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (Beacon_BeaconType) Descriptor() protoreflect.EnumDescriptor { + return file_stationLayoutGraphics_proto_enumTypes[15].Descriptor() +} + +func (Beacon_BeaconType) Type() protoreflect.EnumType { + return &file_stationLayoutGraphics_proto_enumTypes[15] +} + +func (x Beacon_BeaconType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use Beacon_BeaconType.Descriptor instead. +func (Beacon_BeaconType) EnumDescriptor() ([]byte, []int) { + return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{42, 0} +} + +type Train_TrainModel int32 + +const ( + Train_A Train_TrainModel = 0 + Train_B Train_TrainModel = 1 + Train_C Train_TrainModel = 2 + Train_D Train_TrainModel = 3 +) + +// Enum value maps for Train_TrainModel. +var ( + Train_TrainModel_name = map[int32]string{ + 0: "A", + 1: "B", + 2: "C", + 3: "D", + } + Train_TrainModel_value = map[string]int32{ + "A": 0, + "B": 1, + "C": 2, + "D": 3, + } +) + +func (x Train_TrainModel) Enum() *Train_TrainModel { + p := new(Train_TrainModel) + *p = x + return p +} + +func (x Train_TrainModel) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (Train_TrainModel) Descriptor() protoreflect.EnumDescriptor { + return file_stationLayoutGraphics_proto_enumTypes[16].Descriptor() +} + +func (Train_TrainModel) Type() protoreflect.EnumType { + return &file_stationLayoutGraphics_proto_enumTypes[16] +} + +func (x Train_TrainModel) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use Train_TrainModel.Descriptor instead. +func (Train_TrainModel) EnumDescriptor() ([]byte, []int) { + return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{52, 0} +} + +type RtssGraphicStorage struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Canvas *Canvas `protobuf:"bytes,1,opt,name=canvas,proto3" json:"canvas,omitempty"` + // repeated Link links = 2; + // repeated IscsFan iscsFans = 3; + Platforms []*Platform `protobuf:"bytes,4,rep,name=Platforms,proto3" json:"Platforms,omitempty"` + Stations []*Station `protobuf:"bytes,5,rep,name=stations,proto3" json:"stations,omitempty"` + // repeated Rect rects = 6; + Train []*Train `protobuf:"bytes,7,rep,name=train,proto3" json:"train,omitempty"` + Signals []*Signal `protobuf:"bytes,8,rep,name=signals,proto3" json:"signals,omitempty"` + Turnouts []*Turnout `protobuf:"bytes,9,rep,name=turnouts,proto3" json:"turnouts,omitempty"` + Section []*Section `protobuf:"bytes,10,rep,name=section,proto3" json:"section,omitempty"` + Polygons []*Polygon `protobuf:"bytes,11,rep,name=polygons,proto3" json:"polygons,omitempty"` + TrainWindows []*TrainWindow `protobuf:"bytes,12,rep,name=trainWindows,proto3" json:"trainWindows,omitempty"` + AxleCountings []*AxleCounting `protobuf:"bytes,13,rep,name=axleCountings,proto3" json:"axleCountings,omitempty"` + Separators []*Separator `protobuf:"bytes,14,rep,name=separators,proto3" json:"separators,omitempty"` + SectionLinks []*SectionLink `protobuf:"bytes,15,rep,name=sectionLinks,proto3" json:"sectionLinks,omitempty"` + AxleCountingSections []*AxleCountingSection `protobuf:"bytes,16,rep,name=axleCountingSections,proto3" json:"axleCountingSections,omitempty"` + LogicSections []*LogicSection `protobuf:"bytes,17,rep,name=logicSections,proto3" json:"logicSections,omitempty"` + StopPositions []*StopPosition `protobuf:"bytes,18,rep,name=stopPositions,proto3" json:"stopPositions,omitempty"` + SpksSwitchs []*SpksSwitch `protobuf:"bytes,19,rep,name=spksSwitchs,proto3" json:"spksSwitchs,omitempty"` + EsbButtons []*EsbButton `protobuf:"bytes,20,rep,name=esbButtons,proto3" json:"esbButtons,omitempty"` // 紧急关闭按钮 + GateBoxs []*GatedBox `protobuf:"bytes,21,rep,name=gateBoxs,proto3" json:"gateBoxs,omitempty"` // 站台开门/关门/发车按钮整合控制箱 + Transponders []*Transponder `protobuf:"bytes,22,rep,name=transponders,proto3" json:"transponders,omitempty"` // 应答器 + Slopes []*Slope `protobuf:"bytes,23,rep,name=slopes,proto3" json:"slopes,omitempty"` // 坡度 + // repeated CalculateLink CalculateLink = 24; // 计算link信息 + SlopeKiloMarker []*SlopeKiloMarker `protobuf:"bytes,25,rep,name=slopeKiloMarker,proto3" json:"slopeKiloMarker,omitempty"` //坡度公里标 + CurvatureKiloMarker []*CurvatureKiloMarker `protobuf:"bytes,26,rep,name=curvatureKiloMarker,proto3" json:"curvatureKiloMarker,omitempty"` //曲度公里标 + Curvatures []*Curvature `protobuf:"bytes,27,rep,name=curvatures,proto3" json:"curvatures,omitempty"` // 曲度 + TrackSections []*TrackSection `protobuf:"bytes,28,rep,name=trackSections,proto3" json:"trackSections,omitempty"` //轨道区段 + TrackLogicSections []*TrackLogicSection `protobuf:"bytes,29,rep,name=trackLogicSections,proto3" json:"trackLogicSections,omitempty"` //轨道逻辑区段 + // UniqueIdType UniqueIdPrefix = 30;//设备唯一编码--前缀 + UniqueIdPrefix *UniqueIdOfStationLayout `protobuf:"bytes,31,opt,name=UniqueIdPrefix,proto3" json:"UniqueIdPrefix,omitempty"` //地图唯一信息 + KilometerConvertList []*KilometerConvert `protobuf:"bytes,32,rep,name=kilometerConvertList,proto3" json:"kilometerConvertList,omitempty"` //公里标转换列表 + ScreenDoors []*ScreenDoor `protobuf:"bytes,33,rep,name=screenDoors,proto3" json:"screenDoors,omitempty"` + StationRelateDeviceList []*StationRelateDevice `protobuf:"bytes,34,rep,name=stationRelateDeviceList,proto3" json:"stationRelateDeviceList,omitempty"` // 关联设备列表 + SectionCodePointList []*SectionCodePoint `protobuf:"bytes,35,rep,name=sectionCodePointList,proto3" json:"sectionCodePointList,omitempty"` // 物理区段码位表 + ScreenDoorConfig *ScreenDoorConfig `protobuf:"bytes,36,opt,name=screenDoorConfig,proto3" json:"screenDoorConfig,omitempty"` //屏蔽门的配置--子屏蔽门的数量和编组列表 + Beacons []*Beacon `protobuf:"bytes,37,rep,name=beacons,proto3" json:"beacons,omitempty"` // 信标 + GenerateAxleCountingConfig *GenerateAxleCountingConfig `protobuf:"bytes,38,opt,name=generateAxleCountingConfig,proto3" json:"generateAxleCountingConfig,omitempty"` //一键生成计轴的配置 + DepartureTimers []*DepartureTimer `protobuf:"bytes,39,rep,name=departureTimers,proto3" json:"departureTimers,omitempty"` // 发车计时器 + AutoReturnBoxs []*AutoReturnBox `protobuf:"bytes,40,rep,name=autoReturnBoxs,proto3" json:"autoReturnBoxs,omitempty"` // 自动折返按钮箱 + ConcentrationDividingLines []*ConcentrationDividingLine `protobuf:"bytes,41,rep,name=concentrationDividingLines,proto3" json:"concentrationDividingLines,omitempty"` // 集中区分割线 + OtherLineList []*OtherLine `protobuf:"bytes,42,rep,name=otherLineList,proto3" json:"otherLineList,omitempty"` // 其他线设备列表 + IbpBoxs []*IbpBox `protobuf:"bytes,43,rep,name=ibpBoxs,proto3" json:"ibpBoxs,omitempty"` // ibp地图打开按钮 + PslBoxs []*PslBox `protobuf:"bytes,44,rep,name=pslBoxs,proto3" json:"pslBoxs,omitempty"` // psl地图打开按钮 + CarWashings []*CarWashing `protobuf:"bytes,45,rep,name=carWashings,proto3" json:"carWashings,omitempty"` // 洗车机 + GarageDoors []*GarageDoor `protobuf:"bytes,46,rep,name=garageDoors,proto3" json:"garageDoors,omitempty"` // 车库门 + FloodGates []*GarageDoor `protobuf:"bytes,47,rep,name=floodGates,proto3" json:"floodGates,omitempty"` // 防淹门 + // repeated GarageDoorBox garageDoorBoxes = 48; //车库门Psl开启按钮 + LianSuoData *LianSuoData `protobuf:"bytes,49,opt,name=lianSuoData,proto3" json:"lianSuoData,omitempty"` // 联锁映射数据 + HoldButtons []*HoldButton `protobuf:"bytes,50,rep,name=holdButtons,proto3" json:"holdButtons,omitempty"` // 扣车按钮 + UnattengedButtons []*UnattengedButton `protobuf:"bytes,51,rep,name=unattengedButtons,proto3" json:"unattengedButtons,omitempty"` //无人折返按钮 +} + +func (x *RtssGraphicStorage) Reset() { + *x = RtssGraphicStorage{} + if protoimpl.UnsafeEnabled { + mi := &file_stationLayoutGraphics_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RtssGraphicStorage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RtssGraphicStorage) ProtoMessage() {} + +func (x *RtssGraphicStorage) ProtoReflect() protoreflect.Message { + mi := &file_stationLayoutGraphics_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RtssGraphicStorage.ProtoReflect.Descriptor instead. +func (*RtssGraphicStorage) Descriptor() ([]byte, []int) { + return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{0} +} + +func (x *RtssGraphicStorage) GetCanvas() *Canvas { + if x != nil { + return x.Canvas + } + return nil +} + +func (x *RtssGraphicStorage) GetPlatforms() []*Platform { + if x != nil { + return x.Platforms + } + return nil +} + +func (x *RtssGraphicStorage) GetStations() []*Station { + if x != nil { + return x.Stations + } + return nil +} + +func (x *RtssGraphicStorage) GetTrain() []*Train { + if x != nil { + return x.Train + } + return nil +} + +func (x *RtssGraphicStorage) GetSignals() []*Signal { + if x != nil { + return x.Signals + } + return nil +} + +func (x *RtssGraphicStorage) GetTurnouts() []*Turnout { + if x != nil { + return x.Turnouts + } + return nil +} + +func (x *RtssGraphicStorage) GetSection() []*Section { + if x != nil { + return x.Section + } + return nil +} + +func (x *RtssGraphicStorage) GetPolygons() []*Polygon { + if x != nil { + return x.Polygons + } + return nil +} + +func (x *RtssGraphicStorage) GetTrainWindows() []*TrainWindow { + if x != nil { + return x.TrainWindows + } + return nil +} + +func (x *RtssGraphicStorage) GetAxleCountings() []*AxleCounting { + if x != nil { + return x.AxleCountings + } + return nil +} + +func (x *RtssGraphicStorage) GetSeparators() []*Separator { + if x != nil { + return x.Separators + } + return nil +} + +func (x *RtssGraphicStorage) GetSectionLinks() []*SectionLink { + if x != nil { + return x.SectionLinks + } + return nil +} + +func (x *RtssGraphicStorage) GetAxleCountingSections() []*AxleCountingSection { + if x != nil { + return x.AxleCountingSections + } + return nil +} + +func (x *RtssGraphicStorage) GetLogicSections() []*LogicSection { + if x != nil { + return x.LogicSections + } + return nil +} + +func (x *RtssGraphicStorage) GetStopPositions() []*StopPosition { + if x != nil { + return x.StopPositions + } + return nil +} + +func (x *RtssGraphicStorage) GetSpksSwitchs() []*SpksSwitch { + if x != nil { + return x.SpksSwitchs + } + return nil +} + +func (x *RtssGraphicStorage) GetEsbButtons() []*EsbButton { + if x != nil { + return x.EsbButtons + } + return nil +} + +func (x *RtssGraphicStorage) GetGateBoxs() []*GatedBox { + if x != nil { + return x.GateBoxs + } + return nil +} + +func (x *RtssGraphicStorage) GetTransponders() []*Transponder { + if x != nil { + return x.Transponders + } + return nil +} + +func (x *RtssGraphicStorage) GetSlopes() []*Slope { + if x != nil { + return x.Slopes + } + return nil +} + +func (x *RtssGraphicStorage) GetSlopeKiloMarker() []*SlopeKiloMarker { + if x != nil { + return x.SlopeKiloMarker + } + return nil +} + +func (x *RtssGraphicStorage) GetCurvatureKiloMarker() []*CurvatureKiloMarker { + if x != nil { + return x.CurvatureKiloMarker + } + return nil +} + +func (x *RtssGraphicStorage) GetCurvatures() []*Curvature { + if x != nil { + return x.Curvatures + } + return nil +} + +func (x *RtssGraphicStorage) GetTrackSections() []*TrackSection { + if x != nil { + return x.TrackSections + } + return nil +} + +func (x *RtssGraphicStorage) GetTrackLogicSections() []*TrackLogicSection { + if x != nil { + return x.TrackLogicSections + } + return nil +} + +func (x *RtssGraphicStorage) GetUniqueIdPrefix() *UniqueIdOfStationLayout { + if x != nil { + return x.UniqueIdPrefix + } + return nil +} + +func (x *RtssGraphicStorage) GetKilometerConvertList() []*KilometerConvert { + if x != nil { + return x.KilometerConvertList + } + return nil +} + +func (x *RtssGraphicStorage) GetScreenDoors() []*ScreenDoor { + if x != nil { + return x.ScreenDoors + } + return nil +} + +func (x *RtssGraphicStorage) GetStationRelateDeviceList() []*StationRelateDevice { + if x != nil { + return x.StationRelateDeviceList + } + return nil +} + +func (x *RtssGraphicStorage) GetSectionCodePointList() []*SectionCodePoint { + if x != nil { + return x.SectionCodePointList + } + return nil +} + +func (x *RtssGraphicStorage) GetScreenDoorConfig() *ScreenDoorConfig { + if x != nil { + return x.ScreenDoorConfig + } + return nil +} + +func (x *RtssGraphicStorage) GetBeacons() []*Beacon { + if x != nil { + return x.Beacons + } + return nil +} + +func (x *RtssGraphicStorage) GetGenerateAxleCountingConfig() *GenerateAxleCountingConfig { + if x != nil { + return x.GenerateAxleCountingConfig + } + return nil +} + +func (x *RtssGraphicStorage) GetDepartureTimers() []*DepartureTimer { + if x != nil { + return x.DepartureTimers + } + return nil +} + +func (x *RtssGraphicStorage) GetAutoReturnBoxs() []*AutoReturnBox { + if x != nil { + return x.AutoReturnBoxs + } + return nil +} + +func (x *RtssGraphicStorage) GetConcentrationDividingLines() []*ConcentrationDividingLine { + if x != nil { + return x.ConcentrationDividingLines + } + return nil +} + +func (x *RtssGraphicStorage) GetOtherLineList() []*OtherLine { + if x != nil { + return x.OtherLineList + } + return nil +} + +func (x *RtssGraphicStorage) GetIbpBoxs() []*IbpBox { + if x != nil { + return x.IbpBoxs + } + return nil +} + +func (x *RtssGraphicStorage) GetPslBoxs() []*PslBox { + if x != nil { + return x.PslBoxs + } + return nil +} + +func (x *RtssGraphicStorage) GetCarWashings() []*CarWashing { + if x != nil { + return x.CarWashings + } + return nil +} + +func (x *RtssGraphicStorage) GetGarageDoors() []*GarageDoor { + if x != nil { + return x.GarageDoors + } + return nil +} + +func (x *RtssGraphicStorage) GetFloodGates() []*GarageDoor { + if x != nil { + return x.FloodGates + } + return nil +} + +func (x *RtssGraphicStorage) GetLianSuoData() *LianSuoData { + if x != nil { + return x.LianSuoData + } + return nil +} + +func (x *RtssGraphicStorage) GetHoldButtons() []*HoldButton { + if x != nil { + return x.HoldButtons + } + return nil +} + +func (x *RtssGraphicStorage) GetUnattengedButtons() []*UnattengedButton { + if x != nil { + return x.UnattengedButtons + } + return nil +} + +type Canvas struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // 画布宽 + Width int32 `protobuf:"varint,1,opt,name=width,proto3" json:"width,omitempty"` + // 画布高 + Height int32 `protobuf:"varint,2,opt,name=height,proto3" json:"height,omitempty"` + // 背景色 + BackgroundColor string `protobuf:"bytes,3,opt,name=backgroundColor,proto3" json:"backgroundColor,omitempty"` + // 视口变换 + ViewportTransform *Transform `protobuf:"bytes,4,opt,name=viewportTransform,proto3" json:"viewportTransform,omitempty"` + // 画布格子背景 + GridBackground *Grid `protobuf:"bytes,5,opt,name=gridBackground,proto3" json:"gridBackground,omitempty"` +} + +func (x *Canvas) Reset() { + *x = Canvas{} + if protoimpl.UnsafeEnabled { + mi := &file_stationLayoutGraphics_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Canvas) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Canvas) ProtoMessage() {} + +func (x *Canvas) ProtoReflect() protoreflect.Message { + mi := &file_stationLayoutGraphics_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Canvas.ProtoReflect.Descriptor instead. +func (*Canvas) Descriptor() ([]byte, []int) { + return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{1} +} + +func (x *Canvas) GetWidth() int32 { + if x != nil { + return x.Width + } + return 0 +} + +func (x *Canvas) GetHeight() int32 { + if x != nil { + return x.Height + } + return 0 +} + +func (x *Canvas) GetBackgroundColor() string { + if x != nil { + return x.BackgroundColor + } + return "" +} + +func (x *Canvas) GetViewportTransform() *Transform { + if x != nil { + return x.ViewportTransform + } + return nil +} + +func (x *Canvas) GetGridBackground() *Grid { + if x != nil { + return x.GridBackground + } + return nil +} + +// 格子背景 +type Grid struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + HasGrid bool `protobuf:"varint,1,opt,name=hasGrid,proto3" json:"hasGrid,omitempty"` + LineColor string `protobuf:"bytes,2,opt,name=lineColor,proto3" json:"lineColor,omitempty"` // 线色 + Space int32 `protobuf:"varint,3,opt,name=space,proto3" json:"space,omitempty"` //间隔 +} + +func (x *Grid) Reset() { + *x = Grid{} + if protoimpl.UnsafeEnabled { + mi := &file_stationLayoutGraphics_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Grid) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Grid) ProtoMessage() {} + +func (x *Grid) ProtoReflect() protoreflect.Message { + mi := &file_stationLayoutGraphics_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Grid.ProtoReflect.Descriptor instead. +func (*Grid) Descriptor() ([]byte, []int) { + return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{2} +} + +func (x *Grid) GetHasGrid() bool { + if x != nil { + return x.HasGrid + } + return false +} + +func (x *Grid) GetLineColor() string { + if x != nil { + return x.LineColor + } + return "" +} + +func (x *Grid) GetSpace() int32 { + if x != nil { + return x.Space + } + return 0 +} + +type Point struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // x坐标 + X float32 `protobuf:"fixed32,1,opt,name=x,proto3" json:"x,omitempty"` + // y坐标 + Y float32 `protobuf:"fixed32,2,opt,name=y,proto3" json:"y,omitempty"` +} + +func (x *Point) Reset() { + *x = Point{} + if protoimpl.UnsafeEnabled { + mi := &file_stationLayoutGraphics_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Point) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Point) ProtoMessage() {} + +func (x *Point) ProtoReflect() protoreflect.Message { + mi := &file_stationLayoutGraphics_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Point.ProtoReflect.Descriptor instead. +func (*Point) Descriptor() ([]byte, []int) { + return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{3} +} + +func (x *Point) GetX() float32 { + if x != nil { + return x.X + } + return 0 +} + +func (x *Point) GetY() float32 { + if x != nil { + return x.Y + } + return 0 +} + +// 变换 +type Transform struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // 位移 + Position *Point `protobuf:"bytes,1,opt,name=position,proto3" json:"position,omitempty"` + // 缩放 + Scale *Point `protobuf:"bytes,2,opt,name=scale,proto3" json:"scale,omitempty"` + // 旋转弧度 + Rotation float32 `protobuf:"fixed32,3,opt,name=rotation,proto3" json:"rotation,omitempty"` + // 歪斜 + Skew *Point `protobuf:"bytes,4,opt,name=skew,proto3" json:"skew,omitempty"` +} + +func (x *Transform) Reset() { + *x = Transform{} + if protoimpl.UnsafeEnabled { + mi := &file_stationLayoutGraphics_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Transform) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Transform) ProtoMessage() {} + +func (x *Transform) ProtoReflect() protoreflect.Message { + mi := &file_stationLayoutGraphics_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Transform.ProtoReflect.Descriptor instead. +func (*Transform) Descriptor() ([]byte, []int) { + return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{4} +} + +func (x *Transform) GetPosition() *Point { + if x != nil { + return x.Position + } + return nil +} + +func (x *Transform) GetScale() *Point { + if x != nil { + return x.Scale + } + return nil +} + +func (x *Transform) GetRotation() float32 { + if x != nil { + return x.Rotation + } + return 0 +} + +func (x *Transform) GetSkew() *Point { + if x != nil { + return x.Skew + } + return nil +} + +// 子元素变换 +type ChildTransform struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // 子元素名称 + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // 子元素变换 + Transform *Transform `protobuf:"bytes,2,opt,name=transform,proto3" json:"transform,omitempty"` +} + +func (x *ChildTransform) Reset() { + *x = ChildTransform{} + if protoimpl.UnsafeEnabled { + mi := &file_stationLayoutGraphics_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ChildTransform) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ChildTransform) ProtoMessage() {} + +func (x *ChildTransform) ProtoReflect() protoreflect.Message { + mi := &file_stationLayoutGraphics_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ChildTransform.ProtoReflect.Descriptor instead. +func (*ChildTransform) Descriptor() ([]byte, []int) { + return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{5} +} + +func (x *ChildTransform) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *ChildTransform) GetTransform() *Transform { + if x != nil { + return x.Transform + } + return nil +} + +// 公共属性 +type CommonInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // string oldid = 1; + GraphicType string `protobuf:"bytes,2,opt,name=graphicType,proto3" json:"graphicType,omitempty"` + Transform *Transform `protobuf:"bytes,3,opt,name=transform,proto3" json:"transform,omitempty"` + ChildTransforms []*ChildTransform `protobuf:"bytes,4,rep,name=childTransforms,proto3" json:"childTransforms,omitempty"` + Id uint32 `protobuf:"varint,5,opt,name=id,proto3" json:"id,omitempty"` +} + +func (x *CommonInfo) Reset() { + *x = CommonInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_stationLayoutGraphics_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CommonInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CommonInfo) ProtoMessage() {} + +func (x *CommonInfo) ProtoReflect() protoreflect.Message { + mi := &file_stationLayoutGraphics_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CommonInfo.ProtoReflect.Descriptor instead. +func (*CommonInfo) Descriptor() ([]byte, []int) { + return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{6} +} + +func (x *CommonInfo) GetGraphicType() string { + if x != nil { + return x.GraphicType + } + return "" +} + +func (x *CommonInfo) GetTransform() *Transform { + if x != nil { + return x.Transform + } + return nil +} + +func (x *CommonInfo) GetChildTransforms() []*ChildTransform { + if x != nil { + return x.ChildTransforms + } + return nil +} + +func (x *CommonInfo) GetId() uint32 { + if x != nil { + return x.Id + } + return 0 +} + +type Polygon struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Common *CommonInfo `protobuf:"bytes,1,opt,name=common,proto3" json:"common,omitempty"` + Code string `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"` // 编号 + PolygonType Polygon_PolygonType `protobuf:"varint,3,opt,name=polygonType,proto3,enum=graphicData.Polygon_PolygonType" json:"polygonType,omitempty"` // 多边形类型 + Points []*Point `protobuf:"bytes,4,rep,name=points,proto3" json:"points,omitempty"` // 点列表 +} + +func (x *Polygon) Reset() { + *x = Polygon{} + if protoimpl.UnsafeEnabled { + mi := &file_stationLayoutGraphics_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Polygon) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Polygon) ProtoMessage() {} + +func (x *Polygon) ProtoReflect() protoreflect.Message { + mi := &file_stationLayoutGraphics_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Polygon.ProtoReflect.Descriptor instead. +func (*Polygon) Descriptor() ([]byte, []int) { + return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{7} +} + +func (x *Polygon) GetCommon() *CommonInfo { + if x != nil { + return x.Common + } + return nil +} + +func (x *Polygon) GetCode() string { + if x != nil { + return x.Code + } + return "" +} + +func (x *Polygon) GetPolygonType() Polygon_PolygonType { + if x != nil { + return x.PolygonType + } + return Polygon_ConcentrationDividingLine +} + +func (x *Polygon) GetPoints() []*Point { + if x != nil { + return x.Points + } + return nil +} + +type ConcentrationDividingLine struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Common *CommonInfo `protobuf:"bytes,1,opt,name=common,proto3" json:"common,omitempty"` + Code string `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"` // 编号 + Points []*Point `protobuf:"bytes,3,rep,name=points,proto3" json:"points,omitempty"` // 点列表 + // string oldrefLeftStationId = 4;//左边关联的集中站id + // string oldrefRightStationId = 5;//右边关联的集中站id + NodeConWithSecs []*NodeConWithSec `protobuf:"bytes,6,rep,name=nodeConWithSecs,proto3" json:"nodeConWithSecs,omitempty"` // 集中区分割线与区段的交点 + IsOtherLineConcentrationDividingLine bool `protobuf:"varint,7,opt,name=isOtherLineConcentrationDividingLine,proto3" json:"isOtherLineConcentrationDividingLine,omitempty"` //集中区分割线绘制在其它线的边界处 + RefLeftStationId uint32 `protobuf:"varint,8,opt,name=refLeftStationId,proto3" json:"refLeftStationId,omitempty"` //左边关联的集中站id + RefRightStationId uint32 `protobuf:"varint,9,opt,name=refRightStationId,proto3" json:"refRightStationId,omitempty"` //右边关联的集中站id +} + +func (x *ConcentrationDividingLine) Reset() { + *x = ConcentrationDividingLine{} + if protoimpl.UnsafeEnabled { + mi := &file_stationLayoutGraphics_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ConcentrationDividingLine) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ConcentrationDividingLine) ProtoMessage() {} + +func (x *ConcentrationDividingLine) ProtoReflect() protoreflect.Message { + mi := &file_stationLayoutGraphics_proto_msgTypes[8] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ConcentrationDividingLine.ProtoReflect.Descriptor instead. +func (*ConcentrationDividingLine) Descriptor() ([]byte, []int) { + return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{8} +} + +func (x *ConcentrationDividingLine) GetCommon() *CommonInfo { + if x != nil { + return x.Common + } + return nil +} + +func (x *ConcentrationDividingLine) GetCode() string { + if x != nil { + return x.Code + } + return "" +} + +func (x *ConcentrationDividingLine) GetPoints() []*Point { + if x != nil { + return x.Points + } + return nil +} + +func (x *ConcentrationDividingLine) GetNodeConWithSecs() []*NodeConWithSec { + if x != nil { + return x.NodeConWithSecs + } + return nil +} + +func (x *ConcentrationDividingLine) GetIsOtherLineConcentrationDividingLine() bool { + if x != nil { + return x.IsOtherLineConcentrationDividingLine + } + return false +} + +func (x *ConcentrationDividingLine) GetRefLeftStationId() uint32 { + if x != nil { + return x.RefLeftStationId + } + return 0 +} + +func (x *ConcentrationDividingLine) GetRefRightStationId() uint32 { + if x != nil { + return x.RefRightStationId + } + return 0 +} + +type NodeConWithSec struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + LeftSection *RelatedRef `protobuf:"bytes,1,opt,name=leftSection,proto3" json:"leftSection,omitempty"` + RightSection *RelatedRef `protobuf:"bytes,2,opt,name=rightSection,proto3" json:"rightSection,omitempty"` +} + +func (x *NodeConWithSec) Reset() { + *x = NodeConWithSec{} + if protoimpl.UnsafeEnabled { + mi := &file_stationLayoutGraphics_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *NodeConWithSec) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NodeConWithSec) ProtoMessage() {} + +func (x *NodeConWithSec) ProtoReflect() protoreflect.Message { + mi := &file_stationLayoutGraphics_proto_msgTypes[9] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use NodeConWithSec.ProtoReflect.Descriptor instead. +func (*NodeConWithSec) Descriptor() ([]byte, []int) { + return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{9} +} + +func (x *NodeConWithSec) GetLeftSection() *RelatedRef { + if x != nil { + return x.LeftSection + } + return nil +} + +func (x *NodeConWithSec) GetRightSection() *RelatedRef { + if x != nil { + return x.RightSection + } + return nil +} + +type Platform struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Common *CommonInfo `protobuf:"bytes,1,opt,name=common,proto3" json:"common,omitempty"` + Code string `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"` + // bool hasdoor = 3; // 是否有屏蔽门 + // string direction = 4; // 屏蔽门上下 + // int32 index = 5; //索引 + // int32 refStationIndex = 6; //关联车站索引 + // repeated string centralizedStations = 7; // 集中站列表 + // repeated RelatedRef platformRef = 8; //站台关联的车站和物理区段 + // string oldrefStationId = 9; //关联的车站的id + // string oldrefSectionId = 10; //关联的物理区段id + RefEsbRelayCode string `protobuf:"bytes,11,opt,name=refEsbRelayCode,proto3" json:"refEsbRelayCode,omitempty"` //关联的紧急停车继电器的编号 + Type Platform_TypeOfPlatform `protobuf:"varint,12,opt,name=type,proto3,enum=graphicData.Platform_TypeOfPlatform" json:"type,omitempty"` //站台的上下行 + RefStationId uint32 `protobuf:"varint,13,opt,name=refStationId,proto3" json:"refStationId,omitempty"` //关联的车站的id + RefSectionId uint32 `protobuf:"varint,14,opt,name=refSectionId,proto3" json:"refSectionId,omitempty"` //关联的物理区段id +} + +func (x *Platform) Reset() { + *x = Platform{} + if protoimpl.UnsafeEnabled { + mi := &file_stationLayoutGraphics_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Platform) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Platform) ProtoMessage() {} + +func (x *Platform) ProtoReflect() protoreflect.Message { + mi := &file_stationLayoutGraphics_proto_msgTypes[10] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Platform.ProtoReflect.Descriptor instead. +func (*Platform) Descriptor() ([]byte, []int) { + return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{10} +} + +func (x *Platform) GetCommon() *CommonInfo { + if x != nil { + return x.Common + } + return nil +} + +func (x *Platform) GetCode() string { + if x != nil { + return x.Code + } + return "" +} + +func (x *Platform) GetRefEsbRelayCode() string { + if x != nil { + return x.RefEsbRelayCode + } + return "" +} + +func (x *Platform) GetType() Platform_TypeOfPlatform { + if x != nil { + return x.Type + } + return Platform_Unknown +} + +func (x *Platform) GetRefStationId() uint32 { + if x != nil { + return x.RefStationId + } + return 0 +} + +func (x *Platform) GetRefSectionId() uint32 { + if x != nil { + return x.RefSectionId + } + return 0 +} + +type ScreenDoor struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Common *CommonInfo `protobuf:"bytes,1,opt,name=common,proto3" json:"common,omitempty"` + Code string `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"` + // int32 sonDoorAmount = 3; //子屏蔽门的数量 + // string oldrefPlatformId = 4; //关联的站台 + // repeated ScreenDoorGroup screenDoorGroupList = 5;//编组列表 + RefPlatformId uint32 `protobuf:"varint,6,opt,name=refPlatformId,proto3" json:"refPlatformId,omitempty"` //关联的站台 +} + +func (x *ScreenDoor) Reset() { + *x = ScreenDoor{} + if protoimpl.UnsafeEnabled { + mi := &file_stationLayoutGraphics_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ScreenDoor) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ScreenDoor) ProtoMessage() {} + +func (x *ScreenDoor) ProtoReflect() protoreflect.Message { + mi := &file_stationLayoutGraphics_proto_msgTypes[11] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ScreenDoor.ProtoReflect.Descriptor instead. +func (*ScreenDoor) Descriptor() ([]byte, []int) { + return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{11} +} + +func (x *ScreenDoor) GetCommon() *CommonInfo { + if x != nil { + return x.Common + } + return nil +} + +func (x *ScreenDoor) GetCode() string { + if x != nil { + return x.Code + } + return "" +} + +func (x *ScreenDoor) GetRefPlatformId() uint32 { + if x != nil { + return x.RefPlatformId + } + return 0 +} + +type ScreenDoorConfig struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + SonDoorAmount int32 `protobuf:"varint,1,opt,name=sonDoorAmount,proto3" json:"sonDoorAmount,omitempty"` //子屏蔽门的数量 + ScreenDoorGroupList []*ScreenDoorGroup `protobuf:"bytes,2,rep,name=screenDoorGroupList,proto3" json:"screenDoorGroupList,omitempty"` //编组列表 +} + +func (x *ScreenDoorConfig) Reset() { + *x = ScreenDoorConfig{} + if protoimpl.UnsafeEnabled { + mi := &file_stationLayoutGraphics_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ScreenDoorConfig) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ScreenDoorConfig) ProtoMessage() {} + +func (x *ScreenDoorConfig) ProtoReflect() protoreflect.Message { + mi := &file_stationLayoutGraphics_proto_msgTypes[12] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ScreenDoorConfig.ProtoReflect.Descriptor instead. +func (*ScreenDoorConfig) Descriptor() ([]byte, []int) { + return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{12} +} + +func (x *ScreenDoorConfig) GetSonDoorAmount() int32 { + if x != nil { + return x.SonDoorAmount + } + return 0 +} + +func (x *ScreenDoorConfig) GetScreenDoorGroupList() []*ScreenDoorGroup { + if x != nil { + return x.ScreenDoorGroupList + } + return nil +} + +type ScreenDoorGroup struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + TrainGroupAmount int32 `protobuf:"varint,1,opt,name=trainGroupAmount,proto3" json:"trainGroupAmount,omitempty"` //列车编组数量 + StartSmallDoor int32 `protobuf:"varint,2,opt,name=startSmallDoor,proto3" json:"startSmallDoor,omitempty"` //起始的屏蔽门编号 + EndSmallDoor int32 `protobuf:"varint,3,opt,name=endSmallDoor,proto3" json:"endSmallDoor,omitempty"` //结束的屏蔽门编号 +} + +func (x *ScreenDoorGroup) Reset() { + *x = ScreenDoorGroup{} + if protoimpl.UnsafeEnabled { + mi := &file_stationLayoutGraphics_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ScreenDoorGroup) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ScreenDoorGroup) ProtoMessage() {} + +func (x *ScreenDoorGroup) ProtoReflect() protoreflect.Message { + mi := &file_stationLayoutGraphics_proto_msgTypes[13] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ScreenDoorGroup.ProtoReflect.Descriptor instead. +func (*ScreenDoorGroup) Descriptor() ([]byte, []int) { + return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{13} +} + +func (x *ScreenDoorGroup) GetTrainGroupAmount() int32 { + if x != nil { + return x.TrainGroupAmount + } + return 0 +} + +func (x *ScreenDoorGroup) GetStartSmallDoor() int32 { + if x != nil { + return x.StartSmallDoor + } + return 0 +} + +func (x *ScreenDoorGroup) GetEndSmallDoor() int32 { + if x != nil { + return x.EndSmallDoor + } + return 0 +} + +type Station struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Common *CommonInfo `protobuf:"bytes,1,opt,name=common,proto3" json:"common,omitempty"` + Code string `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"` //车站站名 + // bool hasControl = 3; // 是否有控制 + ConcentrationStations bool `protobuf:"varint,4,opt,name=concentrationStations,proto3" json:"concentrationStations,omitempty"` //是否集中站 + // string kilometerCode = 5; //公里标 + KilometerSystem *KilometerSystem `protobuf:"bytes,6,opt,name=kilometerSystem,proto3" json:"kilometerSystem,omitempty"` //公里标 + // int32 index = 7; + // string refIbpMapCode = 8; // 关联IBP地图Code + StationName string `protobuf:"bytes,9,opt,name=stationName,proto3" json:"stationName,omitempty"` //车站名 + StationNameAcronym string `protobuf:"bytes,10,opt,name=stationNameAcronym,proto3" json:"stationNameAcronym,omitempty"` // 车站名拼音简写 + Depots bool `protobuf:"varint,11,opt,name=depots,proto3" json:"depots,omitempty"` //是否车辆段 + // repeated string oldmanageStations = 12; // 如果是集中站——管理的车站-id + ManageStations []uint32 `protobuf:"varint,13,rep,packed,name=manageStations,proto3" json:"manageStations,omitempty"` // 如果是集中站——管理的车站-id +} + +func (x *Station) Reset() { + *x = Station{} + if protoimpl.UnsafeEnabled { + mi := &file_stationLayoutGraphics_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Station) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Station) ProtoMessage() {} + +func (x *Station) ProtoReflect() protoreflect.Message { + mi := &file_stationLayoutGraphics_proto_msgTypes[14] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Station.ProtoReflect.Descriptor instead. +func (*Station) Descriptor() ([]byte, []int) { + return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{14} +} + +func (x *Station) GetCommon() *CommonInfo { + if x != nil { + return x.Common + } + return nil +} + +func (x *Station) GetCode() string { + if x != nil { + return x.Code + } + return "" +} + +func (x *Station) GetConcentrationStations() bool { + if x != nil { + return x.ConcentrationStations + } + return false +} + +func (x *Station) GetKilometerSystem() *KilometerSystem { + if x != nil { + return x.KilometerSystem + } + return nil +} + +func (x *Station) GetStationName() string { + if x != nil { + return x.StationName + } + return "" +} + +func (x *Station) GetStationNameAcronym() string { + if x != nil { + return x.StationNameAcronym + } + return "" +} + +func (x *Station) GetDepots() bool { + if x != nil { + return x.Depots + } + return false +} + +func (x *Station) GetManageStations() []uint32 { + if x != nil { + return x.ManageStations + } + return nil +} + +type TrainWindow struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Common *CommonInfo `protobuf:"bytes,1,opt,name=common,proto3" json:"common,omitempty"` + Code string `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"` + SectionId int32 `protobuf:"varint,3,opt,name=sectionId,proto3" json:"sectionId,omitempty"` +} + +func (x *TrainWindow) Reset() { + *x = TrainWindow{} + if protoimpl.UnsafeEnabled { + mi := &file_stationLayoutGraphics_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TrainWindow) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TrainWindow) ProtoMessage() {} + +func (x *TrainWindow) ProtoReflect() protoreflect.Message { + mi := &file_stationLayoutGraphics_proto_msgTypes[15] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TrainWindow.ProtoReflect.Descriptor instead. +func (*TrainWindow) Descriptor() ([]byte, []int) { + return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{15} +} + +func (x *TrainWindow) GetCommon() *CommonInfo { + if x != nil { + return x.Common + } + return nil +} + +func (x *TrainWindow) GetCode() string { + if x != nil { + return x.Code + } + return "" +} + +func (x *TrainWindow) GetSectionId() int32 { + if x != nil { + return x.SectionId + } + return 0 +} + +type AxleCounting struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Common *CommonInfo `protobuf:"bytes,1,opt,name=common,proto3" json:"common,omitempty"` + Code string `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"` // 名称 + KilometerSystem *KilometerSystem `protobuf:"bytes,3,opt,name=kilometerSystem,proto3" json:"kilometerSystem,omitempty"` //公里标 + AxleCountingRef []*RelatedRef `protobuf:"bytes,4,rep,name=axleCountingRef,proto3" json:"axleCountingRef,omitempty"` // 计轴关联的非岔区物理区段和道岔,设备id和端口 + // int32 index = 5; //计轴的索引编号 + // bool invent = 6; //是否虚拟计轴--一般是最末端 + Type AxleCounting_TypeDetectionPoint `protobuf:"varint,7,opt,name=type,proto3,enum=graphicData.AxleCounting_TypeDetectionPoint" json:"type,omitempty"` //检测点的类型:计轴、区段边界 + // repeated string oldcentralizedStations = 8; // 集中站Id列表 + CentralizedStations []uint32 `protobuf:"varint,9,rep,packed,name=centralizedStations,proto3" json:"centralizedStations,omitempty"` // 集中站Id列表 +} + +func (x *AxleCounting) Reset() { + *x = AxleCounting{} + if protoimpl.UnsafeEnabled { + mi := &file_stationLayoutGraphics_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AxleCounting) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AxleCounting) ProtoMessage() {} + +func (x *AxleCounting) ProtoReflect() protoreflect.Message { + mi := &file_stationLayoutGraphics_proto_msgTypes[16] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AxleCounting.ProtoReflect.Descriptor instead. +func (*AxleCounting) Descriptor() ([]byte, []int) { + return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{16} +} + +func (x *AxleCounting) GetCommon() *CommonInfo { + if x != nil { + return x.Common + } + return nil +} + +func (x *AxleCounting) GetCode() string { + if x != nil { + return x.Code + } + return "" +} + +func (x *AxleCounting) GetKilometerSystem() *KilometerSystem { + if x != nil { + return x.KilometerSystem + } + return nil +} + +func (x *AxleCounting) GetAxleCountingRef() []*RelatedRef { + if x != nil { + return x.AxleCountingRef + } + return nil +} + +func (x *AxleCounting) GetType() AxleCounting_TypeDetectionPoint { + if x != nil { + return x.Type + } + return AxleCounting_AxleCounting +} + +func (x *AxleCounting) GetCentralizedStations() []uint32 { + if x != nil { + return x.CentralizedStations + } + return nil +} + +type GenerateAxleCountingConfig struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // repeated string oldbbConnect = 1; //需要在道岔bb连接处生成计轴的道岔id(填一个就行) + // repeated string oldnoGenerateGroup = 2;//指定的道岔组不生成计轴 + BbConnect []uint32 `protobuf:"varint,3,rep,packed,name=bbConnect,proto3" json:"bbConnect,omitempty"` //需要在道岔bb连接处生成计轴的道岔id(填一个就行) + NoGenerateGroup []uint32 `protobuf:"varint,4,rep,packed,name=noGenerateGroup,proto3" json:"noGenerateGroup,omitempty"` //指定的道岔组不生成计轴 +} + +func (x *GenerateAxleCountingConfig) Reset() { + *x = GenerateAxleCountingConfig{} + if protoimpl.UnsafeEnabled { + mi := &file_stationLayoutGraphics_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GenerateAxleCountingConfig) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GenerateAxleCountingConfig) ProtoMessage() {} + +func (x *GenerateAxleCountingConfig) ProtoReflect() protoreflect.Message { + mi := &file_stationLayoutGraphics_proto_msgTypes[17] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GenerateAxleCountingConfig.ProtoReflect.Descriptor instead. +func (*GenerateAxleCountingConfig) Descriptor() ([]byte, []int) { + return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{17} +} + +func (x *GenerateAxleCountingConfig) GetBbConnect() []uint32 { + if x != nil { + return x.BbConnect + } + return nil +} + +func (x *GenerateAxleCountingConfig) GetNoGenerateGroup() []uint32 { + if x != nil { + return x.NoGenerateGroup + } + return nil +} + +type Turnout struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Common *CommonInfo `protobuf:"bytes,1,opt,name=common,proto3" json:"common,omitempty"` + Code string `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"` + PointA []*Point `protobuf:"bytes,6,rep,name=pointA,proto3" json:"pointA,omitempty"` // A端坐标列表 + PointB []*Point `protobuf:"bytes,7,rep,name=pointB,proto3" json:"pointB,omitempty"` // B端坐标列表 + PointC []*Point `protobuf:"bytes,8,rep,name=pointC,proto3" json:"pointC,omitempty"` // C端坐标列表 + PaRef *RelatedRef `protobuf:"bytes,9,opt,name=paRef,proto3" json:"paRef,omitempty"` // 道岔A端关联的设备 + PbRef *RelatedRef `protobuf:"bytes,10,opt,name=pbRef,proto3" json:"pbRef,omitempty"` // 道岔B端关联的设备 + PcRef *RelatedRef `protobuf:"bytes,11,opt,name=pcRef,proto3" json:"pcRef,omitempty"` // 道岔C端关联的设备 + // KilometerSystem kilometerSystem = 12; // 道岔公里标 + KilometerSystem []*KilometerSystem `protobuf:"bytes,13,rep,name=kilometerSystem,proto3" json:"kilometerSystem,omitempty"` // 道岔公里标 + // int32 index = 14; //索引 + // string oldpaTrackSectionId = 15; // A端轨道区段id + // string oldpbTrackSectionId = 16; // B端轨道区段id + // string oldpcTrackSectionId = 17; // C端轨道区段id + SwitchMachineType Turnout_SwitchMachineType `protobuf:"varint,18,opt,name=switchMachineType,proto3,enum=graphicData.Turnout_SwitchMachineType" json:"switchMachineType,omitempty"` // 转辙机类型 + // repeated string oldcentralizedStations = 19; // 集中站Id列表 + CentralizedStations []uint32 `protobuf:"varint,20,rep,packed,name=centralizedStations,proto3" json:"centralizedStations,omitempty"` // 集中站Id列表 + PaTrackSectionId uint32 `protobuf:"varint,21,opt,name=paTrackSectionId,proto3" json:"paTrackSectionId,omitempty"` // A端轨道区段id + PbTrackSectionId uint32 `protobuf:"varint,22,opt,name=pbTrackSectionId,proto3" json:"pbTrackSectionId,omitempty"` // B端轨道区段id + PcTrackSectionId uint32 `protobuf:"varint,23,opt,name=pcTrackSectionId,proto3" json:"pcTrackSectionId,omitempty"` // C端轨道区段id +} + +func (x *Turnout) Reset() { + *x = Turnout{} + if protoimpl.UnsafeEnabled { + mi := &file_stationLayoutGraphics_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Turnout) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Turnout) ProtoMessage() {} + +func (x *Turnout) ProtoReflect() protoreflect.Message { + mi := &file_stationLayoutGraphics_proto_msgTypes[18] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Turnout.ProtoReflect.Descriptor instead. +func (*Turnout) Descriptor() ([]byte, []int) { + return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{18} +} + +func (x *Turnout) GetCommon() *CommonInfo { + if x != nil { + return x.Common + } + return nil +} + +func (x *Turnout) GetCode() string { + if x != nil { + return x.Code + } + return "" +} + +func (x *Turnout) GetPointA() []*Point { + if x != nil { + return x.PointA + } + return nil +} + +func (x *Turnout) GetPointB() []*Point { + if x != nil { + return x.PointB + } + return nil +} + +func (x *Turnout) GetPointC() []*Point { + if x != nil { + return x.PointC + } + return nil +} + +func (x *Turnout) GetPaRef() *RelatedRef { + if x != nil { + return x.PaRef + } + return nil +} + +func (x *Turnout) GetPbRef() *RelatedRef { + if x != nil { + return x.PbRef + } + return nil +} + +func (x *Turnout) GetPcRef() *RelatedRef { + if x != nil { + return x.PcRef + } + return nil +} + +func (x *Turnout) GetKilometerSystem() []*KilometerSystem { + if x != nil { + return x.KilometerSystem + } + return nil +} + +func (x *Turnout) GetSwitchMachineType() Turnout_SwitchMachineType { + if x != nil { + return x.SwitchMachineType + } + return Turnout_Unknown +} + +func (x *Turnout) GetCentralizedStations() []uint32 { + if x != nil { + return x.CentralizedStations + } + return nil +} + +func (x *Turnout) GetPaTrackSectionId() uint32 { + if x != nil { + return x.PaTrackSectionId + } + return 0 +} + +func (x *Turnout) GetPbTrackSectionId() uint32 { + if x != nil { + return x.PbTrackSectionId + } + return 0 +} + +func (x *Turnout) GetPcTrackSectionId() uint32 { + if x != nil { + return x.PcTrackSectionId + } + return 0 +} + +type KilometerSystem struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Kilometer int64 `protobuf:"varint,1,opt,name=kilometer,proto3" json:"kilometer,omitempty"` //公里标mm + CoordinateSystem string `protobuf:"bytes,2,opt,name=coordinateSystem,proto3" json:"coordinateSystem,omitempty"` //坐标系 + Direction KilometerSystem_Direction `protobuf:"varint,3,opt,name=direction,proto3,enum=graphicData.KilometerSystem_Direction" json:"direction,omitempty"` //左右行 +} + +func (x *KilometerSystem) Reset() { + *x = KilometerSystem{} + if protoimpl.UnsafeEnabled { + mi := &file_stationLayoutGraphics_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *KilometerSystem) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*KilometerSystem) ProtoMessage() {} + +func (x *KilometerSystem) ProtoReflect() protoreflect.Message { + mi := &file_stationLayoutGraphics_proto_msgTypes[19] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use KilometerSystem.ProtoReflect.Descriptor instead. +func (*KilometerSystem) Descriptor() ([]byte, []int) { + return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{19} +} + +func (x *KilometerSystem) GetKilometer() int64 { + if x != nil { + return x.Kilometer + } + return 0 +} + +func (x *KilometerSystem) GetCoordinateSystem() string { + if x != nil { + return x.CoordinateSystem + } + return "" +} + +func (x *KilometerSystem) GetDirection() KilometerSystem_Direction { + if x != nil { + return x.Direction + } + return KilometerSystem_LEFT +} + +type Signal struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Common *CommonInfo `protobuf:"bytes,1,opt,name=common,proto3" json:"common,omitempty"` + Code string `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"` + Mirror bool `protobuf:"varint,3,opt,name=mirror,proto3" json:"mirror,omitempty"` + // int64 kilometer = 4; + // string coordinateSystem = 5; + KilometerSystem *KilometerSystem `protobuf:"bytes,6,opt,name=kilometerSystem,proto3" json:"kilometerSystem,omitempty"` + // int32 index = 7; //索引 + RefDev *RelatedRef `protobuf:"bytes,8,opt,name=refDev,proto3" json:"refDev,omitempty"` //关联设备(区段/道岔) + // 信号机模型类型 + Mt Signal_Model `protobuf:"varint,10,opt,name=mt,proto3,enum=graphicData.Signal_Model" json:"mt,omitempty"` + // string belongStation = 11; // 所属车站(缩写) + Direction Direction `protobuf:"varint,12,opt,name=direction,proto3,enum=graphicData.Direction" json:"direction,omitempty"` // 上下行 + CentralizedStations []uint32 `protobuf:"varint,13,rep,packed,name=centralizedStations,proto3" json:"centralizedStations,omitempty"` // 集中站Id列表 +} + +func (x *Signal) Reset() { + *x = Signal{} + if protoimpl.UnsafeEnabled { + mi := &file_stationLayoutGraphics_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Signal) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Signal) ProtoMessage() {} + +func (x *Signal) ProtoReflect() protoreflect.Message { + mi := &file_stationLayoutGraphics_proto_msgTypes[20] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Signal.ProtoReflect.Descriptor instead. +func (*Signal) Descriptor() ([]byte, []int) { + return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{20} +} + +func (x *Signal) GetCommon() *CommonInfo { + if x != nil { + return x.Common + } + return nil +} + +func (x *Signal) GetCode() string { + if x != nil { + return x.Code + } + return "" +} + +func (x *Signal) GetMirror() bool { + if x != nil { + return x.Mirror + } + return false +} + +func (x *Signal) GetKilometerSystem() *KilometerSystem { + if x != nil { + return x.KilometerSystem + } + return nil +} + +func (x *Signal) GetRefDev() *RelatedRef { + if x != nil { + return x.RefDev + } + return nil +} + +func (x *Signal) GetMt() Signal_Model { + if x != nil { + return x.Mt + } + return Signal_HL +} + +func (x *Signal) GetDirection() Direction { + if x != nil { + return x.Direction + } + return Direction_UP +} + +func (x *Signal) GetCentralizedStations() []uint32 { + if x != nil { + return x.CentralizedStations + } + return nil +} + +// * 物理区段(包含岔区和非岔区) +type Section struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Common *CommonInfo `protobuf:"bytes,1,opt,name=common,proto3" json:"common,omitempty"` + Code string `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"` // 编号 + Points []*Point `protobuf:"bytes,3,rep,name=points,proto3" json:"points,omitempty"` // 点列表 + PaRef *RelatedRef `protobuf:"bytes,4,opt,name=paRef,proto3" json:"paRef,omitempty"` // 区段A端关联的设备(非岔区)(后端不关注) + PbRef *RelatedRef `protobuf:"bytes,5,opt,name=pbRef,proto3" json:"pbRef,omitempty"` // 区段B端关联的设备(非岔区)(后端不关注) + SectionType Section_SectionType `protobuf:"varint,6,opt,name=sectionType,proto3,enum=graphicData.Section_SectionType" json:"sectionType,omitempty"` // 区段类型 + // repeated string oldaxleCountings = 7; // 区段对应的计轴 + // int32 index = 8; // 索引 + // string oldtrackSectionId = 9; // 下属轨道区段id + IsCurve bool `protobuf:"varint,10,opt,name=isCurve,proto3" json:"isCurve,omitempty"` // 是否曲线 + SegmentsCount int32 `protobuf:"varint,12,opt,name=segmentsCount,proto3" json:"segmentsCount,omitempty"` // 曲线分段数 + // repeated string oldcentralizedStations = 13; // 集中站Id列表 + NormalRunningDirection Section_RunningDirection `protobuf:"varint,14,opt,name=normalRunningDirection,proto3,enum=graphicData.Section_RunningDirection" json:"normalRunningDirection,omitempty"` //常规运行方向 + IsTurnBackZone bool `protobuf:"varint,15,opt,name=isTurnBackZone,proto3" json:"isTurnBackZone,omitempty"` // 是否为折返区域 + Direction Direction `protobuf:"varint,16,opt,name=direction,proto3,enum=graphicData.Direction" json:"direction,omitempty"` // 上下行 + AxleCountings []uint32 `protobuf:"varint,17,rep,packed,name=axleCountings,proto3" json:"axleCountings,omitempty"` // 区段对应的计轴 + TrackSectionId uint32 `protobuf:"varint,18,opt,name=trackSectionId,proto3" json:"trackSectionId,omitempty"` // 下属轨道区段id + CentralizedStations []uint32 `protobuf:"varint,19,rep,packed,name=centralizedStations,proto3" json:"centralizedStations,omitempty"` // 集中站Id列表 +} + +func (x *Section) Reset() { + *x = Section{} + if protoimpl.UnsafeEnabled { + mi := &file_stationLayoutGraphics_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Section) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Section) ProtoMessage() {} + +func (x *Section) ProtoReflect() protoreflect.Message { + mi := &file_stationLayoutGraphics_proto_msgTypes[21] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Section.ProtoReflect.Descriptor instead. +func (*Section) Descriptor() ([]byte, []int) { + return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{21} +} + +func (x *Section) GetCommon() *CommonInfo { + if x != nil { + return x.Common + } + return nil +} + +func (x *Section) GetCode() string { + if x != nil { + return x.Code + } + return "" +} + +func (x *Section) GetPoints() []*Point { + if x != nil { + return x.Points + } + return nil +} + +func (x *Section) GetPaRef() *RelatedRef { + if x != nil { + return x.PaRef + } + return nil +} + +func (x *Section) GetPbRef() *RelatedRef { + if x != nil { + return x.PbRef + } + return nil +} + +func (x *Section) GetSectionType() Section_SectionType { + if x != nil { + return x.SectionType + } + return Section_Physical +} + +func (x *Section) GetIsCurve() bool { + if x != nil { + return x.IsCurve + } + return false +} + +func (x *Section) GetSegmentsCount() int32 { + if x != nil { + return x.SegmentsCount + } + return 0 +} + +func (x *Section) GetNormalRunningDirection() Section_RunningDirection { + if x != nil { + return x.NormalRunningDirection + } + return Section_AtoB +} + +func (x *Section) GetIsTurnBackZone() bool { + if x != nil { + return x.IsTurnBackZone + } + return false +} + +func (x *Section) GetDirection() Direction { + if x != nil { + return x.Direction + } + return Direction_UP +} + +func (x *Section) GetAxleCountings() []uint32 { + if x != nil { + return x.AxleCountings + } + return nil +} + +func (x *Section) GetTrackSectionId() uint32 { + if x != nil { + return x.TrackSectionId + } + return 0 +} + +func (x *Section) GetCentralizedStations() []uint32 { + if x != nil { + return x.CentralizedStations + } + return nil +} + +// 关联设备 +type RelatedRef struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + DeviceType RelatedRef_DeviceType `protobuf:"varint,1,opt,name=deviceType,proto3,enum=graphicData.RelatedRef_DeviceType" json:"deviceType,omitempty"` //关联的设备类型 + // string oldid = 2; //关联的设备ID + DevicePort RelatedRef_DevicePort `protobuf:"varint,3,opt,name=devicePort,proto3,enum=graphicData.RelatedRef_DevicePort" json:"devicePort,omitempty"` //关联的设备端口 + Id uint32 `protobuf:"varint,4,opt,name=id,proto3" json:"id,omitempty"` +} + +func (x *RelatedRef) Reset() { + *x = RelatedRef{} + if protoimpl.UnsafeEnabled { + mi := &file_stationLayoutGraphics_proto_msgTypes[22] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RelatedRef) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RelatedRef) ProtoMessage() {} + +func (x *RelatedRef) ProtoReflect() protoreflect.Message { + mi := &file_stationLayoutGraphics_proto_msgTypes[22] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RelatedRef.ProtoReflect.Descriptor instead. +func (*RelatedRef) Descriptor() ([]byte, []int) { + return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{22} +} + +func (x *RelatedRef) GetDeviceType() RelatedRef_DeviceType { + if x != nil { + return x.DeviceType + } + return RelatedRef_Section +} + +func (x *RelatedRef) GetDevicePort() RelatedRef_DevicePort { + if x != nil { + return x.DevicePort + } + return RelatedRef_A +} + +func (x *RelatedRef) GetId() uint32 { + if x != nil { + return x.Id + } + return 0 +} + +// 计轴区段与道岔的位置关系 +type TurnoutPosRef struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // string oldid = 1; //道岔的ID + Position int32 `protobuf:"varint,2,opt,name=position,proto3" json:"position,omitempty"` //道岔的正反为,0是定位,1是反位 + Id uint32 `protobuf:"varint,3,opt,name=id,proto3" json:"id,omitempty"` +} + +func (x *TurnoutPosRef) Reset() { + *x = TurnoutPosRef{} + if protoimpl.UnsafeEnabled { + mi := &file_stationLayoutGraphics_proto_msgTypes[23] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TurnoutPosRef) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TurnoutPosRef) ProtoMessage() {} + +func (x *TurnoutPosRef) ProtoReflect() protoreflect.Message { + mi := &file_stationLayoutGraphics_proto_msgTypes[23] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TurnoutPosRef.ProtoReflect.Descriptor instead. +func (*TurnoutPosRef) Descriptor() ([]byte, []int) { + return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{23} +} + +func (x *TurnoutPosRef) GetPosition() int32 { + if x != nil { + return x.Position + } + return 0 +} + +func (x *TurnoutPosRef) GetId() uint32 { + if x != nil { + return x.Id + } + return 0 +} + +type Separator struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Common *CommonInfo `protobuf:"bytes,1,opt,name=common,proto3" json:"common,omitempty"` + Code string `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"` + SeparatorType string `protobuf:"bytes,3,opt,name=separatorType,proto3" json:"separatorType,omitempty"` +} + +func (x *Separator) Reset() { + *x = Separator{} + if protoimpl.UnsafeEnabled { + mi := &file_stationLayoutGraphics_proto_msgTypes[24] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Separator) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Separator) ProtoMessage() {} + +func (x *Separator) ProtoReflect() protoreflect.Message { + mi := &file_stationLayoutGraphics_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 Separator.ProtoReflect.Descriptor instead. +func (*Separator) Descriptor() ([]byte, []int) { + return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{24} +} + +func (x *Separator) GetCommon() *CommonInfo { + if x != nil { + return x.Common + } + return nil +} + +func (x *Separator) GetCode() string { + if x != nil { + return x.Code + } + return "" +} + +func (x *Separator) GetSeparatorType() string { + if x != nil { + return x.SeparatorType + } + return "" +} + +type Transponder struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Common *CommonInfo `protobuf:"bytes,1,opt,name=common,proto3" json:"common,omitempty"` + Code string `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"` + // int32 transponderType = 3; // 作废 + // int32 index = 4; // 索引编号 + KilometerSystem *KilometerSystem `protobuf:"bytes,5,opt,name=kilometerSystem,proto3" json:"kilometerSystem,omitempty"` //公里标 + TransponderRef *RelatedRef `protobuf:"bytes,6,opt,name=TransponderRef,proto3" json:"TransponderRef,omitempty"` //关联关系 + // repeated string oldcentralizedStations = 7; // 集中站Id列表 + // bytes fixedTelegram = 8;//无源应答器固定报文 + Type Transponder_TransponderTypeEnum `protobuf:"varint,9,opt,name=type,proto3,enum=graphicData.Transponder_TransponderTypeEnum" json:"type,omitempty"` //应答器类型 + CentralizedStations []uint32 `protobuf:"varint,10,rep,packed,name=centralizedStations,proto3" json:"centralizedStations,omitempty"` // 集中站Id列表 + FixedTelegram string `protobuf:"bytes,11,opt,name=fixedTelegram,proto3" json:"fixedTelegram,omitempty"` //应答器固定报文 + FixedUserTelegram string `protobuf:"bytes,12,opt,name=fixedUserTelegram,proto3" json:"fixedUserTelegram,omitempty"` //应答器固定用户报文 + OriginalCode string `protobuf:"bytes,13,opt,name=originalCode,proto3" json:"originalCode,omitempty"` //应答器原编号(厂商提供数据编号) +} + +func (x *Transponder) Reset() { + *x = Transponder{} + if protoimpl.UnsafeEnabled { + mi := &file_stationLayoutGraphics_proto_msgTypes[25] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Transponder) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Transponder) ProtoMessage() {} + +func (x *Transponder) ProtoReflect() protoreflect.Message { + mi := &file_stationLayoutGraphics_proto_msgTypes[25] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Transponder.ProtoReflect.Descriptor instead. +func (*Transponder) Descriptor() ([]byte, []int) { + return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{25} +} + +func (x *Transponder) GetCommon() *CommonInfo { + if x != nil { + return x.Common + } + return nil +} + +func (x *Transponder) GetCode() string { + if x != nil { + return x.Code + } + return "" +} + +func (x *Transponder) GetKilometerSystem() *KilometerSystem { + if x != nil { + return x.KilometerSystem + } + return nil +} + +func (x *Transponder) GetTransponderRef() *RelatedRef { + if x != nil { + return x.TransponderRef + } + return nil +} + +func (x *Transponder) GetType() Transponder_TransponderTypeEnum { + if x != nil { + return x.Type + } + return Transponder_FB +} + +func (x *Transponder) GetCentralizedStations() []uint32 { + if x != nil { + return x.CentralizedStations + } + return nil +} + +func (x *Transponder) GetFixedTelegram() string { + if x != nil { + return x.FixedTelegram + } + return "" +} + +func (x *Transponder) GetFixedUserTelegram() string { + if x != nil { + return x.FixedUserTelegram + } + return "" +} + +func (x *Transponder) GetOriginalCode() string { + if x != nil { + return x.OriginalCode + } + return "" +} + +type SimpleRef struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + DeviceType SimpleRef_DeviceType `protobuf:"varint,1,opt,name=deviceType,proto3,enum=graphicData.SimpleRef_DeviceType" json:"deviceType,omitempty"` + // string oldid = 2; + Id uint32 `protobuf:"varint,3,opt,name=id,proto3" json:"id,omitempty"` +} + +func (x *SimpleRef) Reset() { + *x = SimpleRef{} + if protoimpl.UnsafeEnabled { + mi := &file_stationLayoutGraphics_proto_msgTypes[26] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SimpleRef) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SimpleRef) ProtoMessage() {} + +func (x *SimpleRef) ProtoReflect() protoreflect.Message { + mi := &file_stationLayoutGraphics_proto_msgTypes[26] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SimpleRef.ProtoReflect.Descriptor instead. +func (*SimpleRef) Descriptor() ([]byte, []int) { + return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{26} +} + +func (x *SimpleRef) GetDeviceType() SimpleRef_DeviceType { + if x != nil { + return x.DeviceType + } + return SimpleRef_Turnout +} + +func (x *SimpleRef) GetId() uint32 { + if x != nil { + return x.Id + } + return 0 +} + +type SectionLink struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Common *CommonInfo `protobuf:"bytes,1,opt,name=common,proto3" json:"common,omitempty"` + Code string `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"` + Points []*Point `protobuf:"bytes,3,rep,name=points,proto3" json:"points,omitempty"` + Up bool `protobuf:"varint,4,opt,name=up,proto3" json:"up,omitempty"` // 是否上行 + ASimRef *SimpleRef `protobuf:"bytes,5,opt,name=aSimRef,proto3" json:"aSimRef,omitempty"` // SectionLink A端连接设备(构建关系 AxleCounting/Turnout) //端点 + BSimRef *SimpleRef `protobuf:"bytes,6,opt,name=bSimRef,proto3" json:"bSimRef,omitempty"` // SectionLink B端连接设备(构建关系 AxleCounting/Turnout) //端点 + ARef *RelatedRef `protobuf:"bytes,7,opt,name=aRef,proto3" json:"aRef,omitempty"` // SectionLink A端连接设备(端口关系 SectionLink/Turnout) + BRef *RelatedRef `protobuf:"bytes,8,opt,name=bRef,proto3" json:"bRef,omitempty"` // SectionLink B端连接设备(端口关系 +} + +func (x *SectionLink) Reset() { + *x = SectionLink{} + if protoimpl.UnsafeEnabled { + mi := &file_stationLayoutGraphics_proto_msgTypes[27] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SectionLink) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SectionLink) ProtoMessage() {} + +func (x *SectionLink) ProtoReflect() protoreflect.Message { + mi := &file_stationLayoutGraphics_proto_msgTypes[27] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SectionLink.ProtoReflect.Descriptor instead. +func (*SectionLink) Descriptor() ([]byte, []int) { + return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{27} +} + +func (x *SectionLink) GetCommon() *CommonInfo { + if x != nil { + return x.Common + } + return nil +} + +func (x *SectionLink) GetCode() string { + if x != nil { + return x.Code + } + return "" +} + +func (x *SectionLink) GetPoints() []*Point { + if x != nil { + return x.Points + } + return nil +} + +func (x *SectionLink) GetUp() bool { + if x != nil { + return x.Up + } + return false +} + +func (x *SectionLink) GetASimRef() *SimpleRef { + if x != nil { + return x.ASimRef + } + return nil +} + +func (x *SectionLink) GetBSimRef() *SimpleRef { + if x != nil { + return x.BSimRef + } + return nil +} + +func (x *SectionLink) GetARef() *RelatedRef { + if x != nil { + return x.ARef + } + return nil +} + +func (x *SectionLink) GetBRef() *RelatedRef { + if x != nil { + return x.BRef + } + return nil +} + +type AxleCountingSection struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Common *CommonInfo `protobuf:"bytes,1,opt,name=common,proto3" json:"common,omitempty"` + Code string `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"` // 名称 + Points []*Point `protobuf:"bytes,3,rep,name=points,proto3" json:"points,omitempty"` + PaRef *RelatedRef `protobuf:"bytes,4,opt,name=paRef,proto3" json:"paRef,omitempty"` // 计轴区段A端关联的计轴 + PbRef *RelatedRef `protobuf:"bytes,5,opt,name=pbRef,proto3" json:"pbRef,omitempty"` // 计轴区段B端关联的计轴 + TurnoutPos []*TurnoutPosRef `protobuf:"bytes,6,rep,name=turnoutPos,proto3" json:"turnoutPos,omitempty"` //关联道岔的正反位--0是定位,1是反位 +} + +func (x *AxleCountingSection) Reset() { + *x = AxleCountingSection{} + if protoimpl.UnsafeEnabled { + mi := &file_stationLayoutGraphics_proto_msgTypes[28] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AxleCountingSection) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AxleCountingSection) ProtoMessage() {} + +func (x *AxleCountingSection) ProtoReflect() protoreflect.Message { + mi := &file_stationLayoutGraphics_proto_msgTypes[28] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AxleCountingSection.ProtoReflect.Descriptor instead. +func (*AxleCountingSection) Descriptor() ([]byte, []int) { + return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{28} +} + +func (x *AxleCountingSection) GetCommon() *CommonInfo { + if x != nil { + return x.Common + } + return nil +} + +func (x *AxleCountingSection) GetCode() string { + if x != nil { + return x.Code + } + return "" +} + +func (x *AxleCountingSection) GetPoints() []*Point { + if x != nil { + return x.Points + } + return nil +} + +func (x *AxleCountingSection) GetPaRef() *RelatedRef { + if x != nil { + return x.PaRef + } + return nil +} + +func (x *AxleCountingSection) GetPbRef() *RelatedRef { + if x != nil { + return x.PbRef + } + return nil +} + +func (x *AxleCountingSection) GetTurnoutPos() []*TurnoutPosRef { + if x != nil { + return x.TurnoutPos + } + return nil +} + +type LogicSection struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Common *CommonInfo `protobuf:"bytes,1,opt,name=common,proto3" json:"common,omitempty"` + Code string `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"` // 名称 + Points []*Point `protobuf:"bytes,3,rep,name=points,proto3" json:"points,omitempty"` + // string oldaxleSectionId = 4; // 关联的计轴区段Id + // int32 index = 5; // 索引编号 + // string oldturnoutId = 6; // 关联的岔芯对应的道岔id,此时该逻辑区段为该道岔C端关联的轨道link + AxleSectionId uint32 `protobuf:"varint,7,opt,name=axleSectionId,proto3" json:"axleSectionId,omitempty"` // 关联的计轴区段Id + TurnoutId uint32 `protobuf:"varint,8,opt,name=turnoutId,proto3" json:"turnoutId,omitempty"` // 关联的岔芯对应的道岔id,此时该逻辑区段为该道岔C端关联的轨道link +} + +func (x *LogicSection) Reset() { + *x = LogicSection{} + if protoimpl.UnsafeEnabled { + mi := &file_stationLayoutGraphics_proto_msgTypes[29] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *LogicSection) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LogicSection) ProtoMessage() {} + +func (x *LogicSection) ProtoReflect() protoreflect.Message { + mi := &file_stationLayoutGraphics_proto_msgTypes[29] + 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 LogicSection.ProtoReflect.Descriptor instead. +func (*LogicSection) Descriptor() ([]byte, []int) { + return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{29} +} + +func (x *LogicSection) GetCommon() *CommonInfo { + if x != nil { + return x.Common + } + return nil +} + +func (x *LogicSection) GetCode() string { + if x != nil { + return x.Code + } + return "" +} + +func (x *LogicSection) GetPoints() []*Point { + if x != nil { + return x.Points + } + return nil +} + +func (x *LogicSection) GetAxleSectionId() uint32 { + if x != nil { + return x.AxleSectionId + } + return 0 +} + +func (x *LogicSection) GetTurnoutId() uint32 { + if x != nil { + return x.TurnoutId + } + return 0 +} + +type TrackSection struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Common *CommonInfo `protobuf:"bytes,1,opt,name=common,proto3" json:"common,omitempty"` + Points []*Point `protobuf:"bytes,2,rep,name=points,proto3" json:"points,omitempty"` + Code string `protobuf:"bytes,3,opt,name=code,proto3" json:"code,omitempty"` //名称 + // int32 index = 4; //索引 + Type TrackSection_TrackSectionType `protobuf:"varint,5,opt,name=type,proto3,enum=graphicData.TrackSection_TrackSectionType" json:"type,omitempty"` //类型 + DestinationCode string `protobuf:"bytes,6,opt,name=destinationCode,proto3" json:"destinationCode,omitempty"` //目的地码 + // repeated string oldtrackLogicSection = 7; //下属的逻辑区段id(非岔区) + // + // //关联的物理设备id(物理区段/道岔)由另一端(物理区段/道岔处理) + IsCurve bool `protobuf:"varint,8,opt,name=isCurve,proto3" json:"isCurve,omitempty"` // 是否曲线 + SegmentsCount int32 `protobuf:"varint,9,opt,name=segmentsCount,proto3" json:"segmentsCount,omitempty"` // 曲线分段数 + TrackLogicSection []uint32 `protobuf:"varint,10,rep,packed,name=trackLogicSection,proto3" json:"trackLogicSection,omitempty"` //下属的逻辑区段id(非岔区) +} + +func (x *TrackSection) Reset() { + *x = TrackSection{} + if protoimpl.UnsafeEnabled { + mi := &file_stationLayoutGraphics_proto_msgTypes[30] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TrackSection) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TrackSection) ProtoMessage() {} + +func (x *TrackSection) ProtoReflect() protoreflect.Message { + mi := &file_stationLayoutGraphics_proto_msgTypes[30] + 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 TrackSection.ProtoReflect.Descriptor instead. +func (*TrackSection) Descriptor() ([]byte, []int) { + return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{30} +} + +func (x *TrackSection) GetCommon() *CommonInfo { + if x != nil { + return x.Common + } + return nil +} + +func (x *TrackSection) GetPoints() []*Point { + if x != nil { + return x.Points + } + return nil +} + +func (x *TrackSection) GetCode() string { + if x != nil { + return x.Code + } + return "" +} + +func (x *TrackSection) GetType() TrackSection_TrackSectionType { + if x != nil { + return x.Type + } + return TrackSection_NORMAL +} + +func (x *TrackSection) GetDestinationCode() string { + if x != nil { + return x.DestinationCode + } + return "" +} + +func (x *TrackSection) GetIsCurve() bool { + if x != nil { + return x.IsCurve + } + return false +} + +func (x *TrackSection) GetSegmentsCount() int32 { + if x != nil { + return x.SegmentsCount + } + return 0 +} + +func (x *TrackSection) GetTrackLogicSection() []uint32 { + if x != nil { + return x.TrackLogicSection + } + return nil +} + +type TrackLogicSection struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Common *CommonInfo `protobuf:"bytes,1,opt,name=common,proto3" json:"common,omitempty"` + Points []*Point `protobuf:"bytes,2,rep,name=points,proto3" json:"points,omitempty"` + Code string `protobuf:"bytes,3,opt,name=code,proto3" json:"code,omitempty"` //名称 + Length int32 `protobuf:"varint,4,opt,name=length,proto3" json:"length,omitempty"` //长度(mm) +} + +func (x *TrackLogicSection) Reset() { + *x = TrackLogicSection{} + if protoimpl.UnsafeEnabled { + mi := &file_stationLayoutGraphics_proto_msgTypes[31] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TrackLogicSection) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TrackLogicSection) ProtoMessage() {} + +func (x *TrackLogicSection) ProtoReflect() protoreflect.Message { + mi := &file_stationLayoutGraphics_proto_msgTypes[31] + 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 TrackLogicSection.ProtoReflect.Descriptor instead. +func (*TrackLogicSection) Descriptor() ([]byte, []int) { + return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{31} +} + +func (x *TrackLogicSection) GetCommon() *CommonInfo { + if x != nil { + return x.Common + } + return nil +} + +func (x *TrackLogicSection) GetPoints() []*Point { + if x != nil { + return x.Points + } + return nil +} + +func (x *TrackLogicSection) GetCode() string { + if x != nil { + return x.Code + } + return "" +} + +func (x *TrackLogicSection) GetLength() int32 { + if x != nil { + return x.Length + } + return 0 +} + +type StopPosition struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Common *CommonInfo `protobuf:"bytes,1,opt,name=common,proto3" json:"common,omitempty"` + Code string `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"` + Flip bool `protobuf:"varint,3,opt,name=flip,proto3" json:"flip,omitempty"` // 是否翻转(前端显示) + CoachNum StopPosition_CoachNum `protobuf:"varint,4,opt,name=coachNum,proto3,enum=graphicData.StopPosition_CoachNum" json:"coachNum,omitempty"` //编组数量 + // int32 index = 5; //索引 + KilometerSystem *KilometerSystem `protobuf:"bytes,6,opt,name=kilometerSystem,proto3" json:"kilometerSystem,omitempty"` + RefDev *RelatedRef `protobuf:"bytes,7,opt,name=refDev,proto3" json:"refDev,omitempty"` // 关联设备(区段) +} + +func (x *StopPosition) Reset() { + *x = StopPosition{} + if protoimpl.UnsafeEnabled { + mi := &file_stationLayoutGraphics_proto_msgTypes[32] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StopPosition) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StopPosition) ProtoMessage() {} + +func (x *StopPosition) ProtoReflect() protoreflect.Message { + mi := &file_stationLayoutGraphics_proto_msgTypes[32] + 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 StopPosition.ProtoReflect.Descriptor instead. +func (*StopPosition) Descriptor() ([]byte, []int) { + return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{32} +} + +func (x *StopPosition) GetCommon() *CommonInfo { + if x != nil { + return x.Common + } + return nil +} + +func (x *StopPosition) GetCode() string { + if x != nil { + return x.Code + } + return "" +} + +func (x *StopPosition) GetFlip() bool { + if x != nil { + return x.Flip + } + return false +} + +func (x *StopPosition) GetCoachNum() StopPosition_CoachNum { + if x != nil { + return x.CoachNum + } + return StopPosition_Four +} + +func (x *StopPosition) GetKilometerSystem() *KilometerSystem { + if x != nil { + return x.KilometerSystem + } + return nil +} + +func (x *StopPosition) GetRefDev() *RelatedRef { + if x != nil { + return x.RefDev + } + return nil +} + +type SpksSwitch struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Common *CommonInfo `protobuf:"bytes,1,opt,name=common,proto3" json:"common,omitempty"` + Code string `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"` + Flip bool `protobuf:"varint,3,opt,name=flip,proto3" json:"flip,omitempty"` // 是否翻转(前端显示) + // int32 index = 4; //索引 + // int32 refStand = 5; //关联站台索引 + // repeated string oldrefSections = 6; // 关联物理区段id + // string oldrefStand = 7; // 关联站台 + // repeated uint32 refSections = 8; // 关联物理区段id + RefStand uint32 `protobuf:"varint,9,opt,name=refStand,proto3" json:"refStand,omitempty"` // 关联站台 +} + +func (x *SpksSwitch) Reset() { + *x = SpksSwitch{} + if protoimpl.UnsafeEnabled { + mi := &file_stationLayoutGraphics_proto_msgTypes[33] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SpksSwitch) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SpksSwitch) ProtoMessage() {} + +func (x *SpksSwitch) ProtoReflect() protoreflect.Message { + mi := &file_stationLayoutGraphics_proto_msgTypes[33] + 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 SpksSwitch.ProtoReflect.Descriptor instead. +func (*SpksSwitch) Descriptor() ([]byte, []int) { + return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{33} +} + +func (x *SpksSwitch) GetCommon() *CommonInfo { + if x != nil { + return x.Common + } + return nil +} + +func (x *SpksSwitch) GetCode() string { + if x != nil { + return x.Code + } + return "" +} + +func (x *SpksSwitch) GetFlip() bool { + if x != nil { + return x.Flip + } + return false +} + +func (x *SpksSwitch) GetRefStand() uint32 { + if x != nil { + return x.RefStand + } + return 0 +} + +type EsbButton struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Common *CommonInfo `protobuf:"bytes,1,opt,name=common,proto3" json:"common,omitempty"` + Code string `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"` + Flip bool `protobuf:"varint,3,opt,name=flip,proto3" json:"flip,omitempty"` // 是否翻转(前端显示) + // int32 index = 4; //索引 + // int32 refStand = 5; // 关联站台索引 + // string oldrefStand = 6; // 关联站台 + RefStand uint32 `protobuf:"varint,7,opt,name=refStand,proto3" json:"refStand,omitempty"` // 关联站台 +} + +func (x *EsbButton) Reset() { + *x = EsbButton{} + if protoimpl.UnsafeEnabled { + mi := &file_stationLayoutGraphics_proto_msgTypes[34] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EsbButton) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EsbButton) ProtoMessage() {} + +func (x *EsbButton) ProtoReflect() protoreflect.Message { + mi := &file_stationLayoutGraphics_proto_msgTypes[34] + 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 EsbButton.ProtoReflect.Descriptor instead. +func (*EsbButton) Descriptor() ([]byte, []int) { + return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{34} +} + +func (x *EsbButton) GetCommon() *CommonInfo { + if x != nil { + return x.Common + } + return nil +} + +func (x *EsbButton) GetCode() string { + if x != nil { + return x.Code + } + return "" +} + +func (x *EsbButton) GetFlip() bool { + if x != nil { + return x.Flip + } + return false +} + +func (x *EsbButton) GetRefStand() uint32 { + if x != nil { + return x.RefStand + } + return 0 +} + +type GatedBox struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Common *CommonInfo `protobuf:"bytes,1,opt,name=common,proto3" json:"common,omitempty"` + Code string `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"` + Flip bool `protobuf:"varint,3,opt,name=flip,proto3" json:"flip,omitempty"` // 是否翻转(前端显示) + // int32 index = 4; //索引 + // string oldrefScreenDoor = 5; // 关联屏蔽门 + RefGatedBoxMapCode string `protobuf:"bytes,6,opt,name=refGatedBoxMapCode,proto3" json:"refGatedBoxMapCode,omitempty"` // 关联门控箱地图Code + RefScreenDoor uint32 `protobuf:"varint,7,opt,name=refScreenDoor,proto3" json:"refScreenDoor,omitempty"` // 关联屏蔽门 +} + +func (x *GatedBox) Reset() { + *x = GatedBox{} + if protoimpl.UnsafeEnabled { + mi := &file_stationLayoutGraphics_proto_msgTypes[35] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GatedBox) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GatedBox) ProtoMessage() {} + +func (x *GatedBox) ProtoReflect() protoreflect.Message { + mi := &file_stationLayoutGraphics_proto_msgTypes[35] + 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 GatedBox.ProtoReflect.Descriptor instead. +func (*GatedBox) Descriptor() ([]byte, []int) { + return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{35} +} + +func (x *GatedBox) GetCommon() *CommonInfo { + if x != nil { + return x.Common + } + return nil +} + +func (x *GatedBox) GetCode() string { + if x != nil { + return x.Code + } + return "" +} + +func (x *GatedBox) GetFlip() bool { + if x != nil { + return x.Flip + } + return false +} + +func (x *GatedBox) GetRefGatedBoxMapCode() string { + if x != nil { + return x.RefGatedBoxMapCode + } + return "" +} + +func (x *GatedBox) GetRefScreenDoor() uint32 { + if x != nil { + return x.RefScreenDoor + } + return 0 +} + +type IbpBox struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Common *CommonInfo `protobuf:"bytes,1,opt,name=common,proto3" json:"common,omitempty"` + Code string `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"` + RefIbpMapCode string `protobuf:"bytes,3,opt,name=refIbpMapCode,proto3" json:"refIbpMapCode,omitempty"` // 关联Ibp地图Code + RefStationId uint32 `protobuf:"varint,4,opt,name=refStationId,proto3" json:"refStationId,omitempty"` // 关联车站id +} + +func (x *IbpBox) Reset() { + *x = IbpBox{} + if protoimpl.UnsafeEnabled { + mi := &file_stationLayoutGraphics_proto_msgTypes[36] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *IbpBox) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*IbpBox) ProtoMessage() {} + +func (x *IbpBox) ProtoReflect() protoreflect.Message { + mi := &file_stationLayoutGraphics_proto_msgTypes[36] + 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 IbpBox.ProtoReflect.Descriptor instead. +func (*IbpBox) Descriptor() ([]byte, []int) { + return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{36} +} + +func (x *IbpBox) GetCommon() *CommonInfo { + if x != nil { + return x.Common + } + return nil +} + +func (x *IbpBox) GetCode() string { + if x != nil { + return x.Code + } + return "" +} + +func (x *IbpBox) GetRefIbpMapCode() string { + if x != nil { + return x.RefIbpMapCode + } + return "" +} + +func (x *IbpBox) GetRefStationId() uint32 { + if x != nil { + return x.RefStationId + } + return 0 +} + +type PslBox struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Common *CommonInfo `protobuf:"bytes,1,opt,name=common,proto3" json:"common,omitempty"` + Code string `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"` + RefPslMapCode string `protobuf:"bytes,3,opt,name=refPslMapCode,proto3" json:"refPslMapCode,omitempty"` // 关联Psl地图Code + RefPlatformId uint32 `protobuf:"varint,4,opt,name=refPlatformId,proto3" json:"refPlatformId,omitempty"` // 关联站台id +} + +func (x *PslBox) Reset() { + *x = PslBox{} + if protoimpl.UnsafeEnabled { + mi := &file_stationLayoutGraphics_proto_msgTypes[37] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PslBox) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PslBox) ProtoMessage() {} + +func (x *PslBox) ProtoReflect() protoreflect.Message { + mi := &file_stationLayoutGraphics_proto_msgTypes[37] + 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 PslBox.ProtoReflect.Descriptor instead. +func (*PslBox) Descriptor() ([]byte, []int) { + return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{37} +} + +func (x *PslBox) GetCommon() *CommonInfo { + if x != nil { + return x.Common + } + return nil +} + +func (x *PslBox) GetCode() string { + if x != nil { + return x.Code + } + return "" +} + +func (x *PslBox) GetRefPslMapCode() string { + if x != nil { + return x.RefPslMapCode + } + return "" +} + +func (x *PslBox) GetRefPlatformId() uint32 { + if x != nil { + return x.RefPlatformId + } + return 0 +} + +// * 坡度公里标 +type SlopeKiloMarker struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Common *CommonInfo `protobuf:"bytes,1,opt,name=common,proto3" json:"common,omitempty"` + Code string `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"` + KilometerSystem []*KilometerSystem `protobuf:"bytes,4,rep,name=kilometerSystem,proto3" json:"kilometerSystem,omitempty"` //公里标数据 +} + +func (x *SlopeKiloMarker) Reset() { + *x = SlopeKiloMarker{} + if protoimpl.UnsafeEnabled { + mi := &file_stationLayoutGraphics_proto_msgTypes[38] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SlopeKiloMarker) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SlopeKiloMarker) ProtoMessage() {} + +func (x *SlopeKiloMarker) ProtoReflect() protoreflect.Message { + mi := &file_stationLayoutGraphics_proto_msgTypes[38] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SlopeKiloMarker.ProtoReflect.Descriptor instead. +func (*SlopeKiloMarker) Descriptor() ([]byte, []int) { + return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{38} +} + +func (x *SlopeKiloMarker) GetCommon() *CommonInfo { + if x != nil { + return x.Common + } + return nil +} + +func (x *SlopeKiloMarker) GetCode() string { + if x != nil { + return x.Code + } + return "" +} + +func (x *SlopeKiloMarker) GetKilometerSystem() []*KilometerSystem { + if x != nil { + return x.KilometerSystem + } + return nil +} + +// * 曲度公里标 +type CurvatureKiloMarker struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Common *CommonInfo `protobuf:"bytes,1,opt,name=common,proto3" json:"common,omitempty"` + Code string `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"` + KilometerSystem []*KilometerSystem `protobuf:"bytes,4,rep,name=kilometerSystem,proto3" json:"kilometerSystem,omitempty"` //公里标数据 +} + +func (x *CurvatureKiloMarker) Reset() { + *x = CurvatureKiloMarker{} + if protoimpl.UnsafeEnabled { + mi := &file_stationLayoutGraphics_proto_msgTypes[39] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CurvatureKiloMarker) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CurvatureKiloMarker) ProtoMessage() {} + +func (x *CurvatureKiloMarker) ProtoReflect() protoreflect.Message { + mi := &file_stationLayoutGraphics_proto_msgTypes[39] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CurvatureKiloMarker.ProtoReflect.Descriptor instead. +func (*CurvatureKiloMarker) Descriptor() ([]byte, []int) { + return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{39} +} + +func (x *CurvatureKiloMarker) GetCommon() *CommonInfo { + if x != nil { + return x.Common + } + return nil +} + +func (x *CurvatureKiloMarker) GetCode() string { + if x != nil { + return x.Code + } + return "" +} + +func (x *CurvatureKiloMarker) GetKilometerSystem() []*KilometerSystem { + if x != nil { + return x.KilometerSystem + } + return nil +} + +// * 车库门 +type GarageDoor struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Common *CommonInfo `protobuf:"bytes,1,opt,name=common,proto3" json:"common,omitempty"` + Code string `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"` + LinkSection uint32 `protobuf:"varint,3,opt,name=linkSection,proto3" json:"linkSection,omitempty"` //关联区段 + CentralizedStations []uint32 `protobuf:"varint,4,rep,packed,name=centralizedStations,proto3" json:"centralizedStations,omitempty"` // 集中站Id列表; + RefPslMapCode string `protobuf:"bytes,5,opt,name=refPslMapCode,proto3" json:"refPslMapCode,omitempty"` // 关联的Psl地图的code(名称) +} + +func (x *GarageDoor) Reset() { + *x = GarageDoor{} + if protoimpl.UnsafeEnabled { + mi := &file_stationLayoutGraphics_proto_msgTypes[40] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GarageDoor) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GarageDoor) ProtoMessage() {} + +func (x *GarageDoor) ProtoReflect() protoreflect.Message { + mi := &file_stationLayoutGraphics_proto_msgTypes[40] + 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 GarageDoor.ProtoReflect.Descriptor instead. +func (*GarageDoor) Descriptor() ([]byte, []int) { + return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{40} +} + +func (x *GarageDoor) GetCommon() *CommonInfo { + if x != nil { + return x.Common + } + return nil +} + +func (x *GarageDoor) GetCode() string { + if x != nil { + return x.Code + } + return "" +} + +func (x *GarageDoor) GetLinkSection() uint32 { + if x != nil { + return x.LinkSection + } + return 0 +} + +func (x *GarageDoor) GetCentralizedStations() []uint32 { + if x != nil { + return x.CentralizedStations + } + return nil +} + +func (x *GarageDoor) GetRefPslMapCode() string { + if x != nil { + return x.RefPslMapCode + } + return "" +} + +// * 洗车机 +type CarWashing struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Common *CommonInfo `protobuf:"bytes,1,opt,name=common,proto3" json:"common,omitempty"` + Code string `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"` + LinkSection uint32 `protobuf:"varint,3,opt,name=linkSection,proto3" json:"linkSection,omitempty"` //关联区段 + CentralizedStations []uint32 `protobuf:"varint,4,rep,packed,name=centralizedStations,proto3" json:"centralizedStations,omitempty"` // 集中站Id列表; + DuanNum uint32 `protobuf:"varint,5,opt,name=duanNum,proto3" json:"duanNum,omitempty"` //段数 + Width uint32 `protobuf:"varint,6,opt,name=width,proto3" json:"width,omitempty"` // 洗车机宽度 +} + +func (x *CarWashing) Reset() { + *x = CarWashing{} + if protoimpl.UnsafeEnabled { + mi := &file_stationLayoutGraphics_proto_msgTypes[41] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CarWashing) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CarWashing) ProtoMessage() {} + +func (x *CarWashing) ProtoReflect() protoreflect.Message { + mi := &file_stationLayoutGraphics_proto_msgTypes[41] + 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 CarWashing.ProtoReflect.Descriptor instead. +func (*CarWashing) Descriptor() ([]byte, []int) { + return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{41} +} + +func (x *CarWashing) GetCommon() *CommonInfo { + if x != nil { + return x.Common + } + return nil +} + +func (x *CarWashing) GetCode() string { + if x != nil { + return x.Code + } + return "" +} + +func (x *CarWashing) GetLinkSection() uint32 { + if x != nil { + return x.LinkSection + } + return 0 +} + +func (x *CarWashing) GetCentralizedStations() []uint32 { + if x != nil { + return x.CentralizedStations + } + return nil +} + +func (x *CarWashing) GetDuanNum() uint32 { + if x != nil { + return x.DuanNum + } + return 0 +} + +func (x *CarWashing) GetWidth() uint32 { + if x != nil { + return x.Width + } + return 0 +} + +// * 信标 +type Beacon struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Common *CommonInfo `protobuf:"bytes,1,opt,name=common,proto3" json:"common,omitempty"` + Code string `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"` + Type Beacon_BeaconType `protobuf:"varint,3,opt,name=type,proto3,enum=graphicData.Beacon_BeaconType" json:"type,omitempty"` + Flip bool `protobuf:"varint,4,opt,name=flip,proto3" json:"flip,omitempty"` +} + +func (x *Beacon) Reset() { + *x = Beacon{} + if protoimpl.UnsafeEnabled { + mi := &file_stationLayoutGraphics_proto_msgTypes[42] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Beacon) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Beacon) ProtoMessage() {} + +func (x *Beacon) ProtoReflect() protoreflect.Message { + mi := &file_stationLayoutGraphics_proto_msgTypes[42] + 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 Beacon.ProtoReflect.Descriptor instead. +func (*Beacon) Descriptor() ([]byte, []int) { + return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{42} +} + +func (x *Beacon) GetCommon() *CommonInfo { + if x != nil { + return x.Common + } + return nil +} + +func (x *Beacon) GetCode() string { + if x != nil { + return x.Code + } + return "" +} + +func (x *Beacon) GetType() Beacon_BeaconType { + if x != nil { + return x.Type + } + return Beacon_Static +} + +func (x *Beacon) GetFlip() bool { + if x != nil { + return x.Flip + } + return false +} + +type Slope struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Common *CommonInfo `protobuf:"bytes,1,opt,name=common,proto3" json:"common,omitempty"` + Points []*Point `protobuf:"bytes,2,rep,name=points,proto3" json:"points,omitempty"` + SlopeNumber int32 `protobuf:"zigzag32,3,opt,name=slopeNumber,proto3" json:"slopeNumber,omitempty"` //坡度的值--正负代表上下坡 + // repeated string oldrefDeviceId = 4; // 坡度关联的(坡度公里标) + RefDeviceId []uint32 `protobuf:"varint,5,rep,packed,name=refDeviceId,proto3" json:"refDeviceId,omitempty"` // 坡度关联的(坡度公里标) +} + +func (x *Slope) Reset() { + *x = Slope{} + if protoimpl.UnsafeEnabled { + mi := &file_stationLayoutGraphics_proto_msgTypes[43] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Slope) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Slope) ProtoMessage() {} + +func (x *Slope) ProtoReflect() protoreflect.Message { + mi := &file_stationLayoutGraphics_proto_msgTypes[43] + 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 Slope.ProtoReflect.Descriptor instead. +func (*Slope) Descriptor() ([]byte, []int) { + return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{43} +} + +func (x *Slope) GetCommon() *CommonInfo { + if x != nil { + return x.Common + } + return nil +} + +func (x *Slope) GetPoints() []*Point { + if x != nil { + return x.Points + } + return nil +} + +func (x *Slope) GetSlopeNumber() int32 { + if x != nil { + return x.SlopeNumber + } + return 0 +} + +func (x *Slope) GetRefDeviceId() []uint32 { + if x != nil { + return x.RefDeviceId + } + return nil +} + +type Curvature struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Common *CommonInfo `protobuf:"bytes,1,opt,name=common,proto3" json:"common,omitempty"` + Points []*Point `protobuf:"bytes,2,rep,name=points,proto3" json:"points,omitempty"` + CurvatureNumber int32 `protobuf:"zigzag32,3,opt,name=curvatureNumber,proto3" json:"curvatureNumber,omitempty"` //曲线的半径--正代表外侧;负代表内侧 + // repeated string oldrefDeviceId = 4; // 曲线关联的(曲度公里标) + RefDeviceId []uint32 `protobuf:"varint,5,rep,packed,name=refDeviceId,proto3" json:"refDeviceId,omitempty"` // 曲线关联的(曲度公里标) +} + +func (x *Curvature) Reset() { + *x = Curvature{} + if protoimpl.UnsafeEnabled { + mi := &file_stationLayoutGraphics_proto_msgTypes[44] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Curvature) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Curvature) ProtoMessage() {} + +func (x *Curvature) ProtoReflect() protoreflect.Message { + mi := &file_stationLayoutGraphics_proto_msgTypes[44] + 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 Curvature.ProtoReflect.Descriptor instead. +func (*Curvature) Descriptor() ([]byte, []int) { + return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{44} +} + +func (x *Curvature) GetCommon() *CommonInfo { + if x != nil { + return x.Common + } + return nil +} + +func (x *Curvature) GetPoints() []*Point { + if x != nil { + return x.Points + } + return nil +} + +func (x *Curvature) GetCurvatureNumber() int32 { + if x != nil { + return x.CurvatureNumber + } + return 0 +} + +func (x *Curvature) GetRefDeviceId() []uint32 { + if x != nil { + return x.RefDeviceId + } + return nil +} + +// * 发车计时器 +type DepartureTimer struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Common *CommonInfo `protobuf:"bytes,1,opt,name=common,proto3" json:"common,omitempty"` + Code string `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"` + // string oldrefStand = 3; // 关联站台 + RunDirection string `protobuf:"bytes,4,opt,name=runDirection,proto3" json:"runDirection,omitempty"` //运行方向 + RefStand uint32 `protobuf:"varint,5,opt,name=refStand,proto3" json:"refStand,omitempty"` // 关联站台 +} + +func (x *DepartureTimer) Reset() { + *x = DepartureTimer{} + if protoimpl.UnsafeEnabled { + mi := &file_stationLayoutGraphics_proto_msgTypes[45] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DepartureTimer) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DepartureTimer) ProtoMessage() {} + +func (x *DepartureTimer) ProtoReflect() protoreflect.Message { + mi := &file_stationLayoutGraphics_proto_msgTypes[45] + 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 DepartureTimer.ProtoReflect.Descriptor instead. +func (*DepartureTimer) Descriptor() ([]byte, []int) { + return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{45} +} + +func (x *DepartureTimer) GetCommon() *CommonInfo { + if x != nil { + return x.Common + } + return nil +} + +func (x *DepartureTimer) GetCode() string { + if x != nil { + return x.Code + } + return "" +} + +func (x *DepartureTimer) GetRunDirection() string { + if x != nil { + return x.RunDirection + } + return "" +} + +func (x *DepartureTimer) GetRefStand() uint32 { + if x != nil { + return x.RefStand + } + return 0 +} + +type AutoReturnBox struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Common *CommonInfo `protobuf:"bytes,1,opt,name=common,proto3" json:"common,omitempty"` + Code string `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"` + Flip bool `protobuf:"varint,3,opt,name=flip,proto3" json:"flip,omitempty"` // 是否翻转(前端显示) + Index int32 `protobuf:"varint,4,opt,name=index,proto3" json:"index,omitempty"` //索引 + // string oldrefStand = 5; // 关联站台 + RefStand uint32 `protobuf:"varint,6,opt,name=refStand,proto3" json:"refStand,omitempty"` // 关联站台 +} + +func (x *AutoReturnBox) Reset() { + *x = AutoReturnBox{} + if protoimpl.UnsafeEnabled { + mi := &file_stationLayoutGraphics_proto_msgTypes[46] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AutoReturnBox) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AutoReturnBox) ProtoMessage() {} + +func (x *AutoReturnBox) ProtoReflect() protoreflect.Message { + mi := &file_stationLayoutGraphics_proto_msgTypes[46] + 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 AutoReturnBox.ProtoReflect.Descriptor instead. +func (*AutoReturnBox) Descriptor() ([]byte, []int) { + return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{46} +} + +func (x *AutoReturnBox) GetCommon() *CommonInfo { + if x != nil { + return x.Common + } + return nil +} + +func (x *AutoReturnBox) GetCode() string { + if x != nil { + return x.Code + } + return "" +} + +func (x *AutoReturnBox) GetFlip() bool { + if x != nil { + return x.Flip + } + return false +} + +func (x *AutoReturnBox) GetIndex() int32 { + if x != nil { + return x.Index + } + return 0 +} + +func (x *AutoReturnBox) GetRefStand() uint32 { + if x != nil { + return x.RefStand + } + return 0 +} + +type UniqueIdOfStationLayout struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + City string `protobuf:"bytes,1,opt,name=city,proto3" json:"city,omitempty"` //城市 + LineId string `protobuf:"bytes,2,opt,name=lineId,proto3" json:"lineId,omitempty"` //线路号 + MainCoordinateSystem string `protobuf:"bytes,3,opt,name=mainCoordinateSystem,proto3" json:"mainCoordinateSystem,omitempty"` //地图的公里标主坐标系 +} + +func (x *UniqueIdOfStationLayout) Reset() { + *x = UniqueIdOfStationLayout{} + if protoimpl.UnsafeEnabled { + mi := &file_stationLayoutGraphics_proto_msgTypes[47] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UniqueIdOfStationLayout) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UniqueIdOfStationLayout) ProtoMessage() {} + +func (x *UniqueIdOfStationLayout) ProtoReflect() protoreflect.Message { + mi := &file_stationLayoutGraphics_proto_msgTypes[47] + 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 UniqueIdOfStationLayout.ProtoReflect.Descriptor instead. +func (*UniqueIdOfStationLayout) Descriptor() ([]byte, []int) { + return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{47} +} + +func (x *UniqueIdOfStationLayout) GetCity() string { + if x != nil { + return x.City + } + return "" +} + +func (x *UniqueIdOfStationLayout) GetLineId() string { + if x != nil { + return x.LineId + } + return "" +} + +func (x *UniqueIdOfStationLayout) GetMainCoordinateSystem() string { + if x != nil { + return x.MainCoordinateSystem + } + return "" +} + +// 公里标转换 +type KilometerConvert struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + KmA *KilometerSystem `protobuf:"bytes,1,opt,name=kmA,proto3" json:"kmA,omitempty"` + KmB *KilometerSystem `protobuf:"bytes,2,opt,name=kmB,proto3" json:"kmB,omitempty"` + SameTrend bool `protobuf:"varint,3,opt,name=sameTrend,proto3" json:"sameTrend,omitempty"` //相同趋势(同增同减)? +} + +func (x *KilometerConvert) Reset() { + *x = KilometerConvert{} + if protoimpl.UnsafeEnabled { + mi := &file_stationLayoutGraphics_proto_msgTypes[48] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *KilometerConvert) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*KilometerConvert) ProtoMessage() {} + +func (x *KilometerConvert) ProtoReflect() protoreflect.Message { + mi := &file_stationLayoutGraphics_proto_msgTypes[48] + 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 KilometerConvert.ProtoReflect.Descriptor instead. +func (*KilometerConvert) Descriptor() ([]byte, []int) { + return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{48} +} + +func (x *KilometerConvert) GetKmA() *KilometerSystem { + if x != nil { + return x.KmA + } + return nil +} + +func (x *KilometerConvert) GetKmB() *KilometerSystem { + if x != nil { + return x.KmB + } + return nil +} + +func (x *KilometerConvert) GetSameTrend() bool { + if x != nil { + return x.SameTrend + } + return false +} + +// 车站关联的设备列表 +type StationRelateDevice struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Code string `protobuf:"bytes,1,opt,name=code,proto3" json:"code,omitempty"` //设备编号 + Combinationtypes []*DeviceCombinationtype `protobuf:"bytes,2,rep,name=combinationtypes,proto3" json:"combinationtypes,omitempty"` //组合类型 + DeviceType RelatedRef_DeviceType `protobuf:"varint,3,opt,name=deviceType,proto3,enum=graphicData.RelatedRef_DeviceType" json:"deviceType,omitempty"` //设备类型 +} + +func (x *StationRelateDevice) Reset() { + *x = StationRelateDevice{} + if protoimpl.UnsafeEnabled { + mi := &file_stationLayoutGraphics_proto_msgTypes[49] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StationRelateDevice) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StationRelateDevice) ProtoMessage() {} + +func (x *StationRelateDevice) ProtoReflect() protoreflect.Message { + mi := &file_stationLayoutGraphics_proto_msgTypes[49] + 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 StationRelateDevice.ProtoReflect.Descriptor instead. +func (*StationRelateDevice) Descriptor() ([]byte, []int) { + return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{49} +} + +func (x *StationRelateDevice) GetCode() string { + if x != nil { + return x.Code + } + return "" +} + +func (x *StationRelateDevice) GetCombinationtypes() []*DeviceCombinationtype { + if x != nil { + return x.Combinationtypes + } + return nil +} + +func (x *StationRelateDevice) GetDeviceType() RelatedRef_DeviceType { + if x != nil { + return x.DeviceType + } + return RelatedRef_Section +} + +type DeviceCombinationtype struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Code string `protobuf:"bytes,1,opt,name=code,proto3" json:"code,omitempty"` + // repeated string oldrefDevices = 2;//车站关联的设备 + RefDevices []uint32 `protobuf:"varint,3,rep,packed,name=refDevices,proto3" json:"refDevices,omitempty"` //车站关联的设备 +} + +func (x *DeviceCombinationtype) Reset() { + *x = DeviceCombinationtype{} + if protoimpl.UnsafeEnabled { + mi := &file_stationLayoutGraphics_proto_msgTypes[50] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DeviceCombinationtype) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeviceCombinationtype) ProtoMessage() {} + +func (x *DeviceCombinationtype) ProtoReflect() protoreflect.Message { + mi := &file_stationLayoutGraphics_proto_msgTypes[50] + 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 DeviceCombinationtype.ProtoReflect.Descriptor instead. +func (*DeviceCombinationtype) Descriptor() ([]byte, []int) { + return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{50} +} + +func (x *DeviceCombinationtype) GetCode() string { + if x != nil { + return x.Code + } + return "" +} + +func (x *DeviceCombinationtype) GetRefDevices() []uint32 { + if x != nil { + return x.RefDevices + } + return nil +} + +type SectionCodePoint struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // string oldCentralizedStation = 1; // 集中站id + // repeated string oldsectionIds = 2; //物理区段id列表 + SectionIds []uint32 `protobuf:"varint,3,rep,packed,name=sectionIds,proto3" json:"sectionIds,omitempty"` //物理区段id列表 + CentralizedStation uint32 `protobuf:"varint,4,opt,name=centralizedStation,proto3" json:"centralizedStation,omitempty"` // 集中站id +} + +func (x *SectionCodePoint) Reset() { + *x = SectionCodePoint{} + if protoimpl.UnsafeEnabled { + mi := &file_stationLayoutGraphics_proto_msgTypes[51] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SectionCodePoint) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SectionCodePoint) ProtoMessage() {} + +func (x *SectionCodePoint) ProtoReflect() protoreflect.Message { + mi := &file_stationLayoutGraphics_proto_msgTypes[51] + 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 SectionCodePoint.ProtoReflect.Descriptor instead. +func (*SectionCodePoint) Descriptor() ([]byte, []int) { + return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{51} +} + +func (x *SectionCodePoint) GetSectionIds() []uint32 { + if x != nil { + return x.SectionIds + } + return nil +} + +func (x *SectionCodePoint) GetCentralizedStation() uint32 { + if x != nil { + return x.CentralizedStation + } + return 0 +} + +// 列车信息 +type Train struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + TrainModel Train_TrainModel `protobuf:"varint,1,opt,name=trainModel,proto3,enum=graphicData.Train_TrainModel" json:"trainModel,omitempty"` // 车型 + CarriageLength int32 `protobuf:"varint,2,opt,name=carriageLength,proto3" json:"carriageLength,omitempty"` // 列车车厢长度 + TotalLength int32 `protobuf:"varint,3,opt,name=totalLength,proto3" json:"totalLength,omitempty"` // 总长度 + // int32 minDiameter = 4; // 车轮的最小直径 + // int32 maxDiameter = 5; // 车轮的最大直径 + TrainSets string `protobuf:"bytes,6,opt,name=trainSets,proto3" json:"trainSets,omitempty"` // 编组 + // common.TrainDynamicConfig dynamicConfig = 7; //动力学参数 + // + // string trainControlMapCode = 8; + TrainControlMapId int32 `protobuf:"varint,9,opt,name=trainControlMapId,proto3" json:"trainControlMapId,omitempty"` +} + +func (x *Train) Reset() { + *x = Train{} + if protoimpl.UnsafeEnabled { + mi := &file_stationLayoutGraphics_proto_msgTypes[52] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Train) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Train) ProtoMessage() {} + +func (x *Train) ProtoReflect() protoreflect.Message { + mi := &file_stationLayoutGraphics_proto_msgTypes[52] + 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 Train.ProtoReflect.Descriptor instead. +func (*Train) Descriptor() ([]byte, []int) { + return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{52} +} + +func (x *Train) GetTrainModel() Train_TrainModel { + if x != nil { + return x.TrainModel + } + return Train_A +} + +func (x *Train) GetCarriageLength() int32 { + if x != nil { + return x.CarriageLength + } + return 0 +} + +func (x *Train) GetTotalLength() int32 { + if x != nil { + return x.TotalLength + } + return 0 +} + +func (x *Train) GetTrainSets() string { + if x != nil { + return x.TrainSets + } + return "" +} + +func (x *Train) GetTrainControlMapId() int32 { + if x != nil { + return x.TrainControlMapId + } + return 0 +} + +// 其他线 +type OtherLine struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // repeated string oldids = 2; // 设备id列表 + Ids []uint32 `protobuf:"varint,3,rep,packed,name=ids,proto3" json:"ids,omitempty"` // 设备id列表 +} + +func (x *OtherLine) Reset() { + *x = OtherLine{} + if protoimpl.UnsafeEnabled { + mi := &file_stationLayoutGraphics_proto_msgTypes[53] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *OtherLine) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*OtherLine) ProtoMessage() {} + +func (x *OtherLine) ProtoReflect() protoreflect.Message { + mi := &file_stationLayoutGraphics_proto_msgTypes[53] + 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 OtherLine.ProtoReflect.Descriptor instead. +func (*OtherLine) Descriptor() ([]byte, []int) { + return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{53} +} + +func (x *OtherLine) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *OtherLine) GetIds() []uint32 { + if x != nil { + return x.Ids + } + return nil +} + +// 设备联锁编号 +type LianSuoIndexData struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id uint32 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` // 设备id + Index uint32 `protobuf:"varint,2,opt,name=index,proto3" json:"index,omitempty"` //设备联锁编号 +} + +func (x *LianSuoIndexData) Reset() { + *x = LianSuoIndexData{} + if protoimpl.UnsafeEnabled { + mi := &file_stationLayoutGraphics_proto_msgTypes[54] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *LianSuoIndexData) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LianSuoIndexData) ProtoMessage() {} + +func (x *LianSuoIndexData) ProtoReflect() protoreflect.Message { + mi := &file_stationLayoutGraphics_proto_msgTypes[54] + 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 LianSuoIndexData.ProtoReflect.Descriptor instead. +func (*LianSuoIndexData) Descriptor() ([]byte, []int) { + return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{54} +} + +func (x *LianSuoIndexData) GetId() uint32 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *LianSuoIndexData) GetIndex() uint32 { + if x != nil { + return x.Index + } + return 0 +} + +// 设备联锁映射数据 +type LianSuoData struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Stations []*LianSuoIndexData `protobuf:"bytes,1,rep,name=stations,proto3" json:"stations,omitempty"` + Switchs []*LianSuoIndexData `protobuf:"bytes,2,rep,name=switchs,proto3" json:"switchs,omitempty"` + ScreenDoors []*LianSuoIndexData `protobuf:"bytes,3,rep,name=screenDoors,proto3" json:"screenDoors,omitempty"` + Signals []*LianSuoIndexData `protobuf:"bytes,4,rep,name=signals,proto3" json:"signals,omitempty"` + Sections []*LianSuoIndexData `protobuf:"bytes,5,rep,name=sections,proto3" json:"sections,omitempty"` + FloodGates []*LianSuoIndexData `protobuf:"bytes,6,rep,name=floodGates,proto3" json:"floodGates,omitempty"` + SpksSwitchs []*LianSuoIndexData `protobuf:"bytes,7,rep,name=spksSwitchs,proto3" json:"spksSwitchs,omitempty"` + GarageDoors []*LianSuoIndexData `protobuf:"bytes,8,rep,name=garageDoors,proto3" json:"garageDoors,omitempty"` + CarWashing []*LianSuoIndexData `protobuf:"bytes,9,rep,name=carWashing,proto3" json:"carWashing,omitempty"` + EsbButtons []*LianSuoIndexData `protobuf:"bytes,10,rep,name=esbButtons,proto3" json:"esbButtons,omitempty"` + HoldButtons []*LianSuoIndexData `protobuf:"bytes,11,rep,name=holdButtons,proto3" json:"holdButtons,omitempty"` + UnattengedButtons []*LianSuoIndexData `protobuf:"bytes,12,rep,name=unattengedButtons,proto3" json:"unattengedButtons,omitempty"` +} + +func (x *LianSuoData) Reset() { + *x = LianSuoData{} + if protoimpl.UnsafeEnabled { + mi := &file_stationLayoutGraphics_proto_msgTypes[55] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *LianSuoData) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LianSuoData) ProtoMessage() {} + +func (x *LianSuoData) ProtoReflect() protoreflect.Message { + mi := &file_stationLayoutGraphics_proto_msgTypes[55] + 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 LianSuoData.ProtoReflect.Descriptor instead. +func (*LianSuoData) Descriptor() ([]byte, []int) { + return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{55} +} + +func (x *LianSuoData) GetStations() []*LianSuoIndexData { + if x != nil { + return x.Stations + } + return nil +} + +func (x *LianSuoData) GetSwitchs() []*LianSuoIndexData { + if x != nil { + return x.Switchs + } + return nil +} + +func (x *LianSuoData) GetScreenDoors() []*LianSuoIndexData { + if x != nil { + return x.ScreenDoors + } + return nil +} + +func (x *LianSuoData) GetSignals() []*LianSuoIndexData { + if x != nil { + return x.Signals + } + return nil +} + +func (x *LianSuoData) GetSections() []*LianSuoIndexData { + if x != nil { + return x.Sections + } + return nil +} + +func (x *LianSuoData) GetFloodGates() []*LianSuoIndexData { + if x != nil { + return x.FloodGates + } + return nil +} + +func (x *LianSuoData) GetSpksSwitchs() []*LianSuoIndexData { + if x != nil { + return x.SpksSwitchs + } + return nil +} + +func (x *LianSuoData) GetGarageDoors() []*LianSuoIndexData { + if x != nil { + return x.GarageDoors + } + return nil +} + +func (x *LianSuoData) GetCarWashing() []*LianSuoIndexData { + if x != nil { + return x.CarWashing + } + return nil +} + +func (x *LianSuoData) GetEsbButtons() []*LianSuoIndexData { + if x != nil { + return x.EsbButtons + } + return nil +} + +func (x *LianSuoData) GetHoldButtons() []*LianSuoIndexData { + if x != nil { + return x.HoldButtons + } + return nil +} + +func (x *LianSuoData) GetUnattengedButtons() []*LianSuoIndexData { + if x != nil { + return x.UnattengedButtons + } + return nil +} + +// 无人折返按钮 +type UnattengedButton struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Common *CommonInfo `protobuf:"bytes,1,opt,name=common,proto3" json:"common,omitempty"` + Code string `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"` + Flip bool `protobuf:"varint,3,opt,name=flip,proto3" json:"flip,omitempty"` // 是否翻转(前端显示) + RefStand uint32 `protobuf:"varint,4,opt,name=refStand,proto3" json:"refStand,omitempty"` // 关联站台 +} + +func (x *UnattengedButton) Reset() { + *x = UnattengedButton{} + if protoimpl.UnsafeEnabled { + mi := &file_stationLayoutGraphics_proto_msgTypes[56] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UnattengedButton) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UnattengedButton) ProtoMessage() {} + +func (x *UnattengedButton) ProtoReflect() protoreflect.Message { + mi := &file_stationLayoutGraphics_proto_msgTypes[56] + 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 UnattengedButton.ProtoReflect.Descriptor instead. +func (*UnattengedButton) Descriptor() ([]byte, []int) { + return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{56} +} + +func (x *UnattengedButton) GetCommon() *CommonInfo { + if x != nil { + return x.Common + } + return nil +} + +func (x *UnattengedButton) GetCode() string { + if x != nil { + return x.Code + } + return "" +} + +func (x *UnattengedButton) GetFlip() bool { + if x != nil { + return x.Flip + } + return false +} + +func (x *UnattengedButton) GetRefStand() uint32 { + if x != nil { + return x.RefStand + } + return 0 +} + +// 扣车按钮 +type HoldButton struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Common *CommonInfo `protobuf:"bytes,1,opt,name=common,proto3" json:"common,omitempty"` + Code string `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"` + Flip bool `protobuf:"varint,3,opt,name=flip,proto3" json:"flip,omitempty"` // 是否翻转(前端显示) + RefStand uint32 `protobuf:"varint,4,opt,name=refStand,proto3" json:"refStand,omitempty"` // 关联站台 +} + +func (x *HoldButton) Reset() { + *x = HoldButton{} + if protoimpl.UnsafeEnabled { + mi := &file_stationLayoutGraphics_proto_msgTypes[57] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *HoldButton) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*HoldButton) ProtoMessage() {} + +func (x *HoldButton) ProtoReflect() protoreflect.Message { + mi := &file_stationLayoutGraphics_proto_msgTypes[57] + 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 HoldButton.ProtoReflect.Descriptor instead. +func (*HoldButton) Descriptor() ([]byte, []int) { + return file_stationLayoutGraphics_proto_rawDescGZIP(), []int{57} +} + +func (x *HoldButton) GetCommon() *CommonInfo { + if x != nil { + return x.Common + } + return nil +} + +func (x *HoldButton) GetCode() string { + if x != nil { + return x.Code + } + return "" +} + +func (x *HoldButton) GetFlip() bool { + if x != nil { + return x.Flip + } + return false +} + +func (x *HoldButton) GetRefStand() uint32 { + if x != nil { + return x.RefStand + } + return 0 +} + +var File_stationLayoutGraphics_proto protoreflect.FileDescriptor + +var file_stationLayoutGraphics_proto_rawDesc = []byte{ + 0x0a, 0x1b, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x47, + 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0b, 0x67, + 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x22, 0xc7, 0x16, 0x0a, 0x12, 0x52, + 0x74, 0x73, 0x73, 0x47, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x65, 0x12, 0x2b, 0x0a, 0x06, 0x63, 0x61, 0x6e, 0x76, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x13, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, + 0x43, 0x61, 0x6e, 0x76, 0x61, 0x73, 0x52, 0x06, 0x63, 0x61, 0x6e, 0x76, 0x61, 0x73, 0x12, 0x33, + 0x0a, 0x09, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x15, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, + 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x52, 0x09, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x73, 0x12, 0x30, 0x0a, 0x08, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, + 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, + 0x61, 0x74, 0x61, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x73, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x28, 0x0a, 0x05, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x18, 0x07, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, + 0x74, 0x61, 0x2e, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x52, 0x05, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x12, + 0x2d, 0x0a, 0x07, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x13, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x53, + 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x52, 0x07, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x73, 0x12, 0x30, + 0x0a, 0x08, 0x74, 0x75, 0x72, 0x6e, 0x6f, 0x75, 0x74, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x14, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x54, + 0x75, 0x72, 0x6e, 0x6f, 0x75, 0x74, 0x52, 0x08, 0x74, 0x75, 0x72, 0x6e, 0x6f, 0x75, 0x74, 0x73, + 0x12, 0x2e, 0x0a, 0x07, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, + 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x30, 0x0a, 0x08, 0x70, 0x6f, 0x6c, 0x79, 0x67, 0x6f, 0x6e, 0x73, 0x18, 0x0b, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, + 0x2e, 0x50, 0x6f, 0x6c, 0x79, 0x67, 0x6f, 0x6e, 0x52, 0x08, 0x70, 0x6f, 0x6c, 0x79, 0x67, 0x6f, + 0x6e, 0x73, 0x12, 0x3c, 0x0a, 0x0c, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x57, 0x69, 0x6e, 0x64, 0x6f, + 0x77, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, + 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x57, 0x69, 0x6e, 0x64, + 0x6f, 0x77, 0x52, 0x0c, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x73, + 0x12, 0x3f, 0x0a, 0x0d, 0x61, 0x78, 0x6c, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x69, 0x6e, 0x67, + 0x73, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, + 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x41, 0x78, 0x6c, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x69, + 0x6e, 0x67, 0x52, 0x0d, 0x61, 0x78, 0x6c, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x69, 0x6e, 0x67, + 0x73, 0x12, 0x36, 0x0a, 0x0a, 0x73, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x18, + 0x0e, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, + 0x61, 0x74, 0x61, 0x2e, 0x53, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x0a, 0x73, + 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x12, 0x3c, 0x0a, 0x0c, 0x73, 0x65, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x6e, 0x6b, 0x73, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x18, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x0c, 0x73, 0x65, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x4c, 0x69, 0x6e, 0x6b, 0x73, 0x12, 0x54, 0x0a, 0x14, 0x61, 0x78, 0x6c, 0x65, 0x43, + 0x6f, 0x75, 0x6e, 0x74, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, + 0x10, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, + 0x61, 0x74, 0x61, 0x2e, 0x41, 0x78, 0x6c, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x69, 0x6e, 0x67, + 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x14, 0x61, 0x78, 0x6c, 0x65, 0x43, 0x6f, 0x75, + 0x6e, 0x74, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3f, 0x0a, + 0x0d, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x11, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, + 0x74, 0x61, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x63, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x0d, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3f, + 0x0a, 0x0d, 0x73, 0x74, 0x6f, 0x70, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, + 0x12, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, + 0x61, 0x74, 0x61, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x0d, 0x73, 0x74, 0x6f, 0x70, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, + 0x39, 0x0a, 0x0b, 0x73, 0x70, 0x6b, 0x73, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x73, 0x18, 0x13, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, + 0x74, 0x61, 0x2e, 0x53, 0x70, 0x6b, 0x73, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x52, 0x0b, 0x73, + 0x70, 0x6b, 0x73, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x73, 0x12, 0x36, 0x0a, 0x0a, 0x65, 0x73, + 0x62, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x73, 0x18, 0x14, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, + 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x45, 0x73, 0x62, + 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x52, 0x0a, 0x65, 0x73, 0x62, 0x42, 0x75, 0x74, 0x74, 0x6f, + 0x6e, 0x73, 0x12, 0x31, 0x0a, 0x08, 0x67, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x78, 0x73, 0x18, 0x15, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, + 0x74, 0x61, 0x2e, 0x47, 0x61, 0x74, 0x65, 0x64, 0x42, 0x6f, 0x78, 0x52, 0x08, 0x67, 0x61, 0x74, + 0x65, 0x42, 0x6f, 0x78, 0x73, 0x12, 0x3c, 0x0a, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, + 0x6e, 0x64, 0x65, 0x72, 0x73, 0x18, 0x16, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x67, 0x72, + 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 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, 0x2a, 0x0a, 0x06, 0x73, 0x6c, 0x6f, 0x70, 0x65, 0x73, 0x18, 0x17, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, + 0x61, 0x2e, 0x53, 0x6c, 0x6f, 0x70, 0x65, 0x52, 0x06, 0x73, 0x6c, 0x6f, 0x70, 0x65, 0x73, 0x12, + 0x46, 0x0a, 0x0f, 0x73, 0x6c, 0x6f, 0x70, 0x65, 0x4b, 0x69, 0x6c, 0x6f, 0x4d, 0x61, 0x72, 0x6b, + 0x65, 0x72, 0x18, 0x19, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, + 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x6c, 0x6f, 0x70, 0x65, 0x4b, 0x69, 0x6c, 0x6f, + 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x52, 0x0f, 0x73, 0x6c, 0x6f, 0x70, 0x65, 0x4b, 0x69, 0x6c, + 0x6f, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x12, 0x52, 0x0a, 0x13, 0x63, 0x75, 0x72, 0x76, 0x61, + 0x74, 0x75, 0x72, 0x65, 0x4b, 0x69, 0x6c, 0x6f, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x18, 0x1a, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, + 0x74, 0x61, 0x2e, 0x43, 0x75, 0x72, 0x76, 0x61, 0x74, 0x75, 0x72, 0x65, 0x4b, 0x69, 0x6c, 0x6f, + 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x52, 0x13, 0x63, 0x75, 0x72, 0x76, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x4b, 0x69, 0x6c, 0x6f, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x12, 0x36, 0x0a, 0x0a, 0x63, + 0x75, 0x72, 0x76, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x1b, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x16, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x75, + 0x72, 0x76, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x0a, 0x63, 0x75, 0x72, 0x76, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x73, 0x12, 0x3f, 0x0a, 0x0d, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x53, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x1c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x72, 0x61, + 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x53, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x53, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4e, 0x0a, 0x12, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x4c, 0x6f, 0x67, + 0x69, 0x63, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x1d, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x1e, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x54, + 0x72, 0x61, 0x63, 0x6b, 0x4c, 0x6f, 0x67, 0x69, 0x63, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x12, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x4c, 0x6f, 0x67, 0x69, 0x63, 0x53, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4c, 0x0a, 0x0e, 0x55, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x49, 0x64, + 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, + 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x55, 0x6e, 0x69, 0x71, 0x75, + 0x65, 0x49, 0x64, 0x4f, 0x66, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x61, 0x79, 0x6f, + 0x75, 0x74, 0x52, 0x0e, 0x55, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x49, 0x64, 0x50, 0x72, 0x65, 0x66, + 0x69, 0x78, 0x12, 0x51, 0x0a, 0x14, 0x6b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x43, + 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x20, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x1d, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x4b, + 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x52, + 0x14, 0x6b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, + 0x74, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x39, 0x0a, 0x0b, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x44, + 0x6f, 0x6f, 0x72, 0x73, 0x18, 0x21, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x61, + 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x44, + 0x6f, 0x6f, 0x72, 0x52, 0x0b, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x44, 0x6f, 0x6f, 0x72, 0x73, + 0x12, 0x5a, 0x0a, 0x17, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x6c, 0x61, 0x74, + 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x22, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x20, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, + 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x44, 0x65, 0x76, + 0x69, 0x63, 0x65, 0x52, 0x17, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x6c, 0x61, + 0x74, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x51, 0x0a, 0x14, + 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, + 0x4c, 0x69, 0x73, 0x74, 0x18, 0x23, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x67, 0x72, 0x61, + 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x43, 0x6f, 0x64, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x14, 0x73, 0x65, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x12, + 0x49, 0x0a, 0x10, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x44, 0x6f, 0x6f, 0x72, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x18, 0x24, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x67, 0x72, 0x61, 0x70, + 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x44, 0x6f, + 0x6f, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x10, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, + 0x44, 0x6f, 0x6f, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x2d, 0x0a, 0x07, 0x62, 0x65, + 0x61, 0x63, 0x6f, 0x6e, 0x73, 0x18, 0x25, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x67, 0x72, + 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, + 0x52, 0x07, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x73, 0x12, 0x67, 0x0a, 0x1a, 0x67, 0x65, 0x6e, + 0x65, 0x72, 0x61, 0x74, 0x65, 0x41, 0x78, 0x6c, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x69, 0x6e, + 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x26, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, + 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x6e, 0x65, + 0x72, 0x61, 0x74, 0x65, 0x41, 0x78, 0x6c, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x69, 0x6e, 0x67, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x1a, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, + 0x41, 0x78, 0x6c, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x12, 0x45, 0x0a, 0x0f, 0x64, 0x65, 0x70, 0x61, 0x72, 0x74, 0x75, 0x72, 0x65, 0x54, + 0x69, 0x6d, 0x65, 0x72, 0x73, 0x18, 0x27, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x72, + 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x44, 0x65, 0x70, 0x61, 0x72, 0x74, + 0x75, 0x72, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x72, 0x52, 0x0f, 0x64, 0x65, 0x70, 0x61, 0x72, 0x74, + 0x75, 0x72, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x72, 0x73, 0x12, 0x42, 0x0a, 0x0e, 0x61, 0x75, 0x74, + 0x6f, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x42, 0x6f, 0x78, 0x73, 0x18, 0x28, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, + 0x41, 0x75, 0x74, 0x6f, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x42, 0x6f, 0x78, 0x52, 0x0e, 0x61, + 0x75, 0x74, 0x6f, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x42, 0x6f, 0x78, 0x73, 0x12, 0x66, 0x0a, + 0x1a, 0x63, 0x6f, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x69, + 0x76, 0x69, 0x64, 0x69, 0x6e, 0x67, 0x4c, 0x69, 0x6e, 0x65, 0x73, 0x18, 0x29, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, + 0x43, 0x6f, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x69, 0x76, + 0x69, 0x64, 0x69, 0x6e, 0x67, 0x4c, 0x69, 0x6e, 0x65, 0x52, 0x1a, 0x63, 0x6f, 0x6e, 0x63, 0x65, + 0x6e, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x69, 0x76, 0x69, 0x64, 0x69, 0x6e, 0x67, + 0x4c, 0x69, 0x6e, 0x65, 0x73, 0x12, 0x3c, 0x0a, 0x0d, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x4c, 0x69, + 0x6e, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x2a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, + 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x4f, 0x74, 0x68, 0x65, 0x72, + 0x4c, 0x69, 0x6e, 0x65, 0x52, 0x0d, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x4c, 0x69, 0x6e, 0x65, 0x4c, + 0x69, 0x73, 0x74, 0x12, 0x2d, 0x0a, 0x07, 0x69, 0x62, 0x70, 0x42, 0x6f, 0x78, 0x73, 0x18, 0x2b, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, + 0x74, 0x61, 0x2e, 0x49, 0x62, 0x70, 0x42, 0x6f, 0x78, 0x52, 0x07, 0x69, 0x62, 0x70, 0x42, 0x6f, + 0x78, 0x73, 0x12, 0x2d, 0x0a, 0x07, 0x70, 0x73, 0x6c, 0x42, 0x6f, 0x78, 0x73, 0x18, 0x2c, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, + 0x61, 0x2e, 0x50, 0x73, 0x6c, 0x42, 0x6f, 0x78, 0x52, 0x07, 0x70, 0x73, 0x6c, 0x42, 0x6f, 0x78, + 0x73, 0x12, 0x39, 0x0a, 0x0b, 0x63, 0x61, 0x72, 0x57, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x73, + 0x18, 0x2d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, + 0x44, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x61, 0x72, 0x57, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x52, + 0x0b, 0x63, 0x61, 0x72, 0x57, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x39, 0x0a, 0x0b, + 0x67, 0x61, 0x72, 0x61, 0x67, 0x65, 0x44, 0x6f, 0x6f, 0x72, 0x73, 0x18, 0x2e, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, + 0x47, 0x61, 0x72, 0x61, 0x67, 0x65, 0x44, 0x6f, 0x6f, 0x72, 0x52, 0x0b, 0x67, 0x61, 0x72, 0x61, + 0x67, 0x65, 0x44, 0x6f, 0x6f, 0x72, 0x73, 0x12, 0x37, 0x0a, 0x0a, 0x66, 0x6c, 0x6f, 0x6f, 0x64, + 0x47, 0x61, 0x74, 0x65, 0x73, 0x18, 0x2f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, + 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x61, 0x72, 0x61, 0x67, 0x65, + 0x44, 0x6f, 0x6f, 0x72, 0x52, 0x0a, 0x66, 0x6c, 0x6f, 0x6f, 0x64, 0x47, 0x61, 0x74, 0x65, 0x73, + 0x12, 0x3a, 0x0a, 0x0b, 0x6c, 0x69, 0x61, 0x6e, 0x53, 0x75, 0x6f, 0x44, 0x61, 0x74, 0x61, 0x18, + 0x31, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, + 0x61, 0x74, 0x61, 0x2e, 0x4c, 0x69, 0x61, 0x6e, 0x53, 0x75, 0x6f, 0x44, 0x61, 0x74, 0x61, 0x52, + 0x0b, 0x6c, 0x69, 0x61, 0x6e, 0x53, 0x75, 0x6f, 0x44, 0x61, 0x74, 0x61, 0x12, 0x39, 0x0a, 0x0b, + 0x68, 0x6f, 0x6c, 0x64, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x73, 0x18, 0x32, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, + 0x48, 0x6f, 0x6c, 0x64, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x52, 0x0b, 0x68, 0x6f, 0x6c, 0x64, + 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x73, 0x12, 0x4b, 0x0a, 0x11, 0x75, 0x6e, 0x61, 0x74, 0x74, + 0x65, 0x6e, 0x67, 0x65, 0x64, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x73, 0x18, 0x33, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, + 0x2e, 0x55, 0x6e, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x67, 0x65, 0x64, 0x42, 0x75, 0x74, 0x74, 0x6f, + 0x6e, 0x52, 0x11, 0x75, 0x6e, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x67, 0x65, 0x64, 0x42, 0x75, 0x74, + 0x74, 0x6f, 0x6e, 0x73, 0x22, 0xe1, 0x01, 0x0a, 0x06, 0x43, 0x61, 0x6e, 0x76, 0x61, 0x73, 0x12, + 0x14, 0x0a, 0x05, 0x77, 0x69, 0x64, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, + 0x77, 0x69, 0x64, 0x74, 0x68, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x28, 0x0a, + 0x0f, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x6f, 0x6c, 0x6f, 0x72, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, + 0x6e, 0x64, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x12, 0x44, 0x0a, 0x11, 0x76, 0x69, 0x65, 0x77, 0x70, + 0x6f, 0x72, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, + 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x52, 0x11, 0x76, 0x69, 0x65, 0x77, + 0x70, 0x6f, 0x72, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x39, 0x0a, + 0x0e, 0x67, 0x72, 0x69, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, + 0x61, 0x74, 0x61, 0x2e, 0x47, 0x72, 0x69, 0x64, 0x52, 0x0e, 0x67, 0x72, 0x69, 0x64, 0x42, 0x61, + 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x22, 0x54, 0x0a, 0x04, 0x47, 0x72, 0x69, 0x64, + 0x12, 0x18, 0x0a, 0x07, 0x68, 0x61, 0x73, 0x47, 0x72, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x07, 0x68, 0x61, 0x73, 0x47, 0x72, 0x69, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x6c, 0x69, + 0x6e, 0x65, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6c, + 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x23, + 0x0a, 0x05, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x0c, 0x0a, 0x01, 0x78, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x02, 0x52, 0x01, 0x78, 0x12, 0x0c, 0x0a, 0x01, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, + 0x52, 0x01, 0x79, 0x22, 0xa9, 0x01, 0x0a, 0x09, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, + 0x6d, 0x12, 0x2e, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, + 0x61, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x28, 0x0a, 0x05, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x12, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x50, + 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x05, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x72, + 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x52, 0x08, 0x72, + 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x0a, 0x04, 0x73, 0x6b, 0x65, 0x77, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, + 0x61, 0x74, 0x61, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x04, 0x73, 0x6b, 0x65, 0x77, 0x22, + 0x5a, 0x0a, 0x0e, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, + 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x34, 0x0a, 0x09, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, + 0x72, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, + 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, + 0x52, 0x09, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x22, 0xbb, 0x01, 0x0a, 0x0a, + 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x20, 0x0a, 0x0b, 0x67, 0x72, + 0x61, 0x70, 0x68, 0x69, 0x63, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0b, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x54, 0x79, 0x70, 0x65, 0x12, 0x34, 0x0a, 0x09, + 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x16, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x72, + 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x52, 0x09, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, + 0x72, 0x6d, 0x12, 0x45, 0x0a, 0x0f, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, + 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x72, + 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x54, + 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x52, 0x0f, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x54, + 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x22, 0xec, 0x01, 0x0a, 0x07, 0x50, 0x6f, + 0x6c, 0x79, 0x67, 0x6f, 0x6e, 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, + 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, + 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x42, 0x0a, 0x0b, 0x70, 0x6f, + 0x6c, 0x79, 0x67, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x20, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x50, 0x6f, + 0x6c, 0x79, 0x67, 0x6f, 0x6e, 0x2e, 0x50, 0x6f, 0x6c, 0x79, 0x67, 0x6f, 0x6e, 0x54, 0x79, 0x70, + 0x65, 0x52, 0x0b, 0x70, 0x6f, 0x6c, 0x79, 0x67, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x2a, + 0x0a, 0x06, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, + 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x50, 0x6f, 0x69, + 0x6e, 0x74, 0x52, 0x06, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x22, 0x2c, 0x0a, 0x0b, 0x50, 0x6f, + 0x6c, 0x79, 0x67, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1d, 0x0a, 0x19, 0x43, 0x6f, 0x6e, + 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x69, 0x76, 0x69, 0x64, 0x69, + 0x6e, 0x67, 0x4c, 0x69, 0x6e, 0x65, 0x10, 0x00, 0x22, 0x81, 0x03, 0x0a, 0x19, 0x43, 0x6f, 0x6e, + 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x69, 0x76, 0x69, 0x64, 0x69, + 0x6e, 0x67, 0x4c, 0x69, 0x6e, 0x65, 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, + 0x44, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, + 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x70, + 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x72, + 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, + 0x06, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x45, 0x0a, 0x0f, 0x6e, 0x6f, 0x64, 0x65, 0x43, + 0x6f, 0x6e, 0x57, 0x69, 0x74, 0x68, 0x53, 0x65, 0x63, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x1b, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x4e, + 0x6f, 0x64, 0x65, 0x43, 0x6f, 0x6e, 0x57, 0x69, 0x74, 0x68, 0x53, 0x65, 0x63, 0x52, 0x0f, 0x6e, + 0x6f, 0x64, 0x65, 0x43, 0x6f, 0x6e, 0x57, 0x69, 0x74, 0x68, 0x53, 0x65, 0x63, 0x73, 0x12, 0x52, + 0x0a, 0x24, 0x69, 0x73, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x4c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6e, + 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x69, 0x76, 0x69, 0x64, 0x69, + 0x6e, 0x67, 0x4c, 0x69, 0x6e, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x24, 0x69, 0x73, + 0x4f, 0x74, 0x68, 0x65, 0x72, 0x4c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6e, 0x63, 0x65, 0x6e, 0x74, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x69, 0x76, 0x69, 0x64, 0x69, 0x6e, 0x67, 0x4c, 0x69, + 0x6e, 0x65, 0x12, 0x2a, 0x0a, 0x10, 0x72, 0x65, 0x66, 0x4c, 0x65, 0x66, 0x74, 0x53, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x10, 0x72, 0x65, + 0x66, 0x4c, 0x65, 0x66, 0x74, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2c, + 0x0a, 0x11, 0x72, 0x65, 0x66, 0x52, 0x69, 0x67, 0x68, 0x74, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x49, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x11, 0x72, 0x65, 0x66, 0x52, 0x69, + 0x67, 0x68, 0x74, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x88, 0x01, 0x0a, + 0x0e, 0x4e, 0x6f, 0x64, 0x65, 0x43, 0x6f, 0x6e, 0x57, 0x69, 0x74, 0x68, 0x53, 0x65, 0x63, 0x12, + 0x39, 0x0a, 0x0b, 0x6c, 0x65, 0x66, 0x74, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, + 0x74, 0x61, 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x66, 0x52, 0x0b, 0x6c, + 0x65, 0x66, 0x74, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3b, 0x0a, 0x0c, 0x72, 0x69, + 0x67, 0x68, 0x74, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x52, + 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x66, 0x52, 0x0c, 0x72, 0x69, 0x67, 0x68, 0x74, + 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xac, 0x02, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, + 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x63, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x72, 0x65, 0x66, + 0x45, 0x73, 0x62, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x0b, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0f, 0x72, 0x65, 0x66, 0x45, 0x73, 0x62, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x43, + 0x6f, 0x64, 0x65, 0x12, 0x38, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x24, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, + 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x4f, 0x66, 0x50, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x22, 0x0a, + 0x0c, 0x72, 0x65, 0x66, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x0d, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x72, 0x65, 0x66, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, + 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x72, 0x65, 0x66, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, + 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x72, 0x65, 0x66, 0x53, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x2f, 0x0a, 0x0e, 0x54, 0x79, 0x70, 0x65, 0x4f, 0x66, 0x50, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, + 0x77, 0x6e, 0x10, 0x00, 0x12, 0x06, 0x0a, 0x02, 0x75, 0x70, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, + 0x64, 0x6f, 0x77, 0x6e, 0x10, 0x02, 0x22, 0x77, 0x0a, 0x0a, 0x53, 0x63, 0x72, 0x65, 0x65, 0x6e, + 0x44, 0x6f, 0x6f, 0x72, 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, + 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x63, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x72, 0x65, 0x66, + 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x49, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x0d, 0x72, 0x65, 0x66, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x49, 0x64, 0x22, + 0x88, 0x01, 0x0a, 0x10, 0x53, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x44, 0x6f, 0x6f, 0x72, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x6f, 0x6e, 0x44, 0x6f, 0x6f, 0x72, 0x41, + 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x73, 0x6f, 0x6e, + 0x44, 0x6f, 0x6f, 0x72, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x4e, 0x0a, 0x13, 0x73, 0x63, + 0x72, 0x65, 0x65, 0x6e, 0x44, 0x6f, 0x6f, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4c, 0x69, 0x73, + 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, + 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x44, 0x6f, 0x6f, 0x72, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x13, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x44, 0x6f, 0x6f, + 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x89, 0x01, 0x0a, 0x0f, 0x53, + 0x63, 0x72, 0x65, 0x65, 0x6e, 0x44, 0x6f, 0x6f, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x2a, + 0x0a, 0x10, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x6d, 0x6f, 0x75, + 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x26, 0x0a, 0x0e, 0x73, 0x74, + 0x61, 0x72, 0x74, 0x53, 0x6d, 0x61, 0x6c, 0x6c, 0x44, 0x6f, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x0e, 0x73, 0x74, 0x61, 0x72, 0x74, 0x53, 0x6d, 0x61, 0x6c, 0x6c, 0x44, 0x6f, + 0x6f, 0x72, 0x12, 0x22, 0x0a, 0x0c, 0x65, 0x6e, 0x64, 0x53, 0x6d, 0x61, 0x6c, 0x6c, 0x44, 0x6f, + 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x65, 0x6e, 0x64, 0x53, 0x6d, 0x61, + 0x6c, 0x6c, 0x44, 0x6f, 0x6f, 0x72, 0x22, 0xde, 0x02, 0x0a, 0x07, 0x53, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, + 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x63, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x34, 0x0a, 0x15, 0x63, 0x6f, 0x6e, 0x63, 0x65, + 0x6e, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x63, 0x6f, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x46, 0x0a, + 0x0f, 0x6b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, + 0x44, 0x61, 0x74, 0x61, 0x2e, 0x4b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x79, + 0x73, 0x74, 0x65, 0x6d, 0x52, 0x0f, 0x6b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, + 0x79, 0x73, 0x74, 0x65, 0x6d, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2e, 0x0a, 0x12, 0x73, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x41, 0x63, 0x72, 0x6f, 0x6e, 0x79, 0x6d, 0x18, 0x0a, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x12, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, + 0x41, 0x63, 0x72, 0x6f, 0x6e, 0x79, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x65, 0x70, 0x6f, 0x74, + 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x64, 0x65, 0x70, 0x6f, 0x74, 0x73, 0x12, + 0x26, 0x0a, 0x0e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x0e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x53, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x70, 0x0a, 0x0b, 0x54, 0x72, 0x61, 0x69, 0x6e, + 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, + 0x44, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, + 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 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, + 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, + 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x8f, 0x03, 0x0a, 0x0c, 0x41, 0x78, + 0x6c, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x61, + 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x49, + 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x63, + 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, + 0x46, 0x0a, 0x0f, 0x6b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x79, 0x73, 0x74, + 0x65, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, + 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x4b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, + 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x52, 0x0f, 0x6b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, + 0x72, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x12, 0x41, 0x0a, 0x0f, 0x61, 0x78, 0x6c, 0x65, 0x43, + 0x6f, 0x75, 0x6e, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x66, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x52, + 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x66, 0x52, 0x0f, 0x61, 0x78, 0x6c, 0x65, 0x43, + 0x6f, 0x75, 0x6e, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x66, 0x12, 0x40, 0x0a, 0x04, 0x74, 0x79, + 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, + 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x41, 0x78, 0x6c, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, + 0x69, 0x6e, 0x67, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x30, 0x0a, 0x13, + 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x13, 0x63, 0x65, 0x6e, 0x74, 0x72, + 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x3b, + 0x0a, 0x12, 0x54, 0x79, 0x70, 0x65, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, + 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x10, 0x0a, 0x0c, 0x41, 0x78, 0x6c, 0x65, 0x43, 0x6f, 0x75, 0x6e, + 0x74, 0x69, 0x6e, 0x67, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x10, 0x01, 0x22, 0x64, 0x0a, 0x1a, 0x47, + 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x41, 0x78, 0x6c, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, + 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1c, 0x0a, 0x09, 0x62, 0x62, 0x43, + 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x09, 0x62, 0x62, + 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x12, 0x28, 0x0a, 0x0f, 0x6e, 0x6f, 0x47, 0x65, 0x6e, + 0x65, 0x72, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0d, + 0x52, 0x0f, 0x6e, 0x6f, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, + 0x70, 0x22, 0xf7, 0x05, 0x0a, 0x07, 0x54, 0x75, 0x72, 0x6e, 0x6f, 0x75, 0x74, 0x12, 0x2f, 0x0a, + 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, + 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x12, 0x12, + 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, + 0x64, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x18, 0x06, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, + 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x06, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x12, 0x2a, + 0x0a, 0x06, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x42, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, + 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x50, 0x6f, 0x69, + 0x6e, 0x74, 0x52, 0x06, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x42, 0x12, 0x2a, 0x0a, 0x06, 0x70, 0x6f, + 0x69, 0x6e, 0x74, 0x43, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x72, 0x61, + 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x06, + 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x43, 0x12, 0x2d, 0x0a, 0x05, 0x70, 0x61, 0x52, 0x65, 0x66, 0x18, + 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, + 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x66, 0x52, 0x05, + 0x70, 0x61, 0x52, 0x65, 0x66, 0x12, 0x2d, 0x0a, 0x05, 0x70, 0x62, 0x52, 0x65, 0x66, 0x18, 0x0a, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, + 0x74, 0x61, 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x66, 0x52, 0x05, 0x70, + 0x62, 0x52, 0x65, 0x66, 0x12, 0x2d, 0x0a, 0x05, 0x70, 0x63, 0x52, 0x65, 0x66, 0x18, 0x0b, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, + 0x61, 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x66, 0x52, 0x05, 0x70, 0x63, + 0x52, 0x65, 0x66, 0x12, 0x46, 0x0a, 0x0f, 0x6b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, + 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, + 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x4b, 0x69, 0x6c, 0x6f, 0x6d, + 0x65, 0x74, 0x65, 0x72, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x52, 0x0f, 0x6b, 0x69, 0x6c, 0x6f, + 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x12, 0x54, 0x0a, 0x11, 0x73, + 0x77, 0x69, 0x74, 0x63, 0x68, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x54, 0x79, 0x70, 0x65, + 0x18, 0x12, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x26, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, + 0x44, 0x61, 0x74, 0x61, 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, 0x30, 0x0a, 0x13, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, + 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x14, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x13, + 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x12, 0x2a, 0x0a, 0x10, 0x70, 0x61, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x53, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x10, 0x70, + 0x61, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, + 0x2a, 0x0a, 0x10, 0x70, 0x62, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x49, 0x64, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x10, 0x70, 0x62, 0x54, 0x72, 0x61, + 0x63, 0x6b, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x10, 0x70, + 0x63, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, + 0x17, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x10, 0x70, 0x63, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x53, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 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, 0xc3, 0x01, 0x0a, 0x0f, + 0x4b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x12, + 0x1c, 0x0a, 0x09, 0x6b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x09, 0x6b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 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, 0x44, 0x0a, 0x09, 0x64, 0x69, 0x72, + 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x26, 0x2e, 0x67, + 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x4b, 0x69, 0x6c, 0x6f, 0x6d, + 0x65, 0x74, 0x65, 0x72, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2e, 0x44, 0x69, 0x72, 0x65, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, + 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, 0x22, 0xdb, 0x03, 0x0a, 0x06, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x12, 0x2f, 0x0a, 0x06, + 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, + 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x12, 0x12, 0x0a, + 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, + 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x69, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x06, 0x6d, 0x69, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x46, 0x0a, 0x0f, 0x6b, 0x69, 0x6c, + 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, + 0x2e, 0x4b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, + 0x52, 0x0f, 0x6b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x79, 0x73, 0x74, 0x65, + 0x6d, 0x12, 0x2f, 0x0a, 0x06, 0x72, 0x65, 0x66, 0x44, 0x65, 0x76, 0x18, 0x08, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, + 0x52, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x66, 0x52, 0x06, 0x72, 0x65, 0x66, 0x44, + 0x65, 0x76, 0x12, 0x29, 0x0a, 0x02, 0x6d, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, + 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x69, 0x67, + 0x6e, 0x61, 0x6c, 0x2e, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x52, 0x02, 0x6d, 0x74, 0x12, 0x34, 0x0a, + 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x16, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x44, + 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x30, 0x0a, 0x13, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x6c, 0x69, 0x7a, + 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0d, + 0x52, 0x13, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x53, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 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, + 0xfd, 0x05, 0x0a, 0x07, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2f, 0x0a, 0x06, 0x63, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, + 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, + 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, + 0x12, 0x2a, 0x0a, 0x06, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x12, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x50, + 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x06, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x2d, 0x0a, 0x05, + 0x70, 0x61, 0x52, 0x65, 0x66, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, + 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x65, + 0x64, 0x52, 0x65, 0x66, 0x52, 0x05, 0x70, 0x61, 0x52, 0x65, 0x66, 0x12, 0x2d, 0x0a, 0x05, 0x70, + 0x62, 0x52, 0x65, 0x66, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x61, + 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, + 0x52, 0x65, 0x66, 0x52, 0x05, 0x70, 0x62, 0x52, 0x65, 0x66, 0x12, 0x42, 0x0a, 0x0b, 0x73, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x20, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, + 0x65, 0x52, 0x0b, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, + 0x0a, 0x07, 0x69, 0x73, 0x43, 0x75, 0x72, 0x76, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x07, 0x69, 0x73, 0x43, 0x75, 0x72, 0x76, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x65, 0x67, 0x6d, + 0x65, 0x6e, 0x74, 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x0d, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x5d, + 0x0a, 0x16, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x52, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x44, + 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x25, + 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x65, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x16, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x52, 0x75, 0x6e, + 0x6e, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x0a, + 0x0e, 0x69, 0x73, 0x54, 0x75, 0x72, 0x6e, 0x42, 0x61, 0x63, 0x6b, 0x5a, 0x6f, 0x6e, 0x65, 0x18, + 0x0f, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x69, 0x73, 0x54, 0x75, 0x72, 0x6e, 0x42, 0x61, 0x63, + 0x6b, 0x5a, 0x6f, 0x6e, 0x65, 0x12, 0x34, 0x0a, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, + 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x24, 0x0a, 0x0d, 0x61, + 0x78, 0x6c, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x11, 0x20, 0x03, + 0x28, 0x0d, 0x52, 0x0d, 0x61, 0x78, 0x6c, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x69, 0x6e, 0x67, + 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x49, 0x64, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x74, 0x72, 0x61, 0x63, 0x6b, + 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x13, 0x63, 0x65, 0x6e, + 0x74, 0x72, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x18, 0x13, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x13, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x6c, 0x69, + 0x7a, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x30, 0x0a, 0x0b, 0x53, + 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0c, 0x0a, 0x08, 0x50, 0x68, + 0x79, 0x73, 0x69, 0x63, 0x61, 0x6c, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x54, 0x75, 0x72, 0x6e, + 0x6f, 0x75, 0x74, 0x50, 0x68, 0x79, 0x73, 0x69, 0x63, 0x61, 0x6c, 0x10, 0x02, 0x22, 0x30, 0x0a, + 0x10, 0x52, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x08, 0x0a, 0x04, 0x41, 0x74, 0x6f, 0x42, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x42, + 0x74, 0x6f, 0x41, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x42, 0x4f, 0x54, 0x48, 0x10, 0x02, 0x22, + 0xb1, 0x03, 0x0a, 0x0a, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x66, 0x12, 0x42, + 0x0a, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x22, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, + 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x66, 0x2e, 0x44, 0x65, 0x76, 0x69, + 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, + 0x70, 0x65, 0x12, 0x42, 0x0a, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x22, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, + 0x44, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x66, 0x2e, + 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x52, 0x0a, 0x64, 0x65, 0x76, 0x69, + 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x22, 0xe7, 0x01, 0x0a, 0x0a, 0x44, 0x65, 0x76, 0x69, 0x63, + 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x54, 0x75, 0x72, 0x6e, 0x6f, 0x75, 0x74, 0x10, 0x01, 0x12, + 0x0f, 0x0a, 0x0b, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x10, 0x02, + 0x12, 0x10, 0x0a, 0x0c, 0x41, 0x78, 0x6c, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x69, 0x6e, 0x67, + 0x10, 0x03, 0x12, 0x0f, 0x0a, 0x0b, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x6e, + 0x6b, 0x10, 0x04, 0x12, 0x0a, 0x0a, 0x06, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x10, 0x05, 0x12, + 0x0b, 0x0a, 0x07, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x10, 0x06, 0x12, 0x0e, 0x0a, 0x0a, + 0x53, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x44, 0x6f, 0x6f, 0x72, 0x10, 0x07, 0x12, 0x14, 0x0a, 0x10, + 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x46, 0x61, 0x75, 0x6c, 0x74, 0x41, 0x6c, 0x61, 0x72, 0x6d, + 0x10, 0x08, 0x12, 0x0c, 0x0a, 0x08, 0x42, 0x72, 0x65, 0x61, 0x6b, 0x65, 0x72, 0x73, 0x10, 0x09, + 0x12, 0x0f, 0x0a, 0x0b, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x53, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x10, + 0x0a, 0x12, 0x0e, 0x0a, 0x0a, 0x47, 0x61, 0x72, 0x61, 0x67, 0x65, 0x44, 0x6f, 0x6f, 0x72, 0x10, + 0x0b, 0x12, 0x0e, 0x0a, 0x0a, 0x43, 0x61, 0x72, 0x57, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x10, + 0x0c, 0x12, 0x0d, 0x0a, 0x09, 0x46, 0x6c, 0x6f, 0x6f, 0x64, 0x47, 0x61, 0x74, 0x65, 0x10, 0x0d, + 0x22, 0x21, 0x0a, 0x0a, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x05, + 0x0a, 0x01, 0x41, 0x10, 0x00, 0x12, 0x05, 0x0a, 0x01, 0x42, 0x10, 0x01, 0x12, 0x05, 0x0a, 0x01, + 0x43, 0x10, 0x02, 0x22, 0x3b, 0x0a, 0x0d, 0x54, 0x75, 0x72, 0x6e, 0x6f, 0x75, 0x74, 0x50, 0x6f, + 0x73, 0x52, 0x65, 0x66, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, + 0x22, 0x76, 0x0a, 0x09, 0x53, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x2f, 0x0a, + 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, + 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x12, 0x12, + 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, + 0x64, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x54, + 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x65, 0x70, 0x61, 0x72, + 0x61, 0x74, 0x6f, 0x72, 0x54, 0x79, 0x70, 0x65, 0x22, 0x86, 0x04, 0x0a, 0x0b, 0x54, 0x72, 0x61, + 0x6e, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x65, 0x72, 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, + 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x49, 0x6e, 0x66, + 0x6f, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x46, 0x0a, + 0x0f, 0x6b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, + 0x44, 0x61, 0x74, 0x61, 0x2e, 0x4b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x79, + 0x73, 0x74, 0x65, 0x6d, 0x52, 0x0f, 0x6b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, + 0x79, 0x73, 0x74, 0x65, 0x6d, 0x12, 0x3f, 0x0a, 0x0e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, + 0x6e, 0x64, 0x65, 0x72, 0x52, 0x65, 0x66, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, + 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x6c, 0x61, + 0x74, 0x65, 0x64, 0x52, 0x65, 0x66, 0x52, 0x0e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x6e, + 0x64, 0x65, 0x72, 0x52, 0x65, 0x66, 0x12, 0x40, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x09, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, + 0x74, 0x61, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x65, 0x72, 0x2e, 0x54, + 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x45, 0x6e, + 0x75, 0x6d, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x30, 0x0a, 0x13, 0x63, 0x65, 0x6e, 0x74, + 0x72, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, + 0x0a, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x13, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x6c, 0x69, 0x7a, + 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x66, 0x69, + 0x78, 0x65, 0x64, 0x54, 0x65, 0x6c, 0x65, 0x67, 0x72, 0x61, 0x6d, 0x18, 0x0b, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0d, 0x66, 0x69, 0x78, 0x65, 0x64, 0x54, 0x65, 0x6c, 0x65, 0x67, 0x72, 0x61, 0x6d, + 0x12, 0x2c, 0x0a, 0x11, 0x66, 0x69, 0x78, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x54, 0x65, 0x6c, + 0x65, 0x67, 0x72, 0x61, 0x6d, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x66, 0x69, 0x78, + 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x54, 0x65, 0x6c, 0x65, 0x67, 0x72, 0x61, 0x6d, 0x12, 0x22, + 0x0a, 0x0c, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x0d, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x43, 0x6f, + 0x64, 0x65, 0x22, 0x3d, 0x0a, 0x13, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x65, + 0x72, 0x54, 0x79, 0x70, 0x65, 0x45, 0x6e, 0x75, 0x6d, 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, 0x8b, 0x01, 0x0a, 0x09, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x12, + 0x41, 0x0a, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, + 0x61, 0x2e, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x2e, 0x44, 0x65, 0x76, 0x69, + 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, + 0x70, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, + 0x69, 0x64, 0x22, 0x2b, 0x0a, 0x0a, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, + 0x12, 0x0b, 0x0a, 0x07, 0x54, 0x75, 0x72, 0x6e, 0x6f, 0x75, 0x74, 0x10, 0x00, 0x12, 0x10, 0x0a, + 0x0c, 0x41, 0x78, 0x6c, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x69, 0x6e, 0x67, 0x10, 0x01, 0x22, + 0xcc, 0x02, 0x0a, 0x0b, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x6e, 0x6b, 0x12, + 0x2f, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x63, 0x6f, 0x64, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x03, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, + 0x74, 0x61, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x06, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, + 0x12, 0x0e, 0x0a, 0x02, 0x75, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x02, 0x75, 0x70, + 0x12, 0x30, 0x0a, 0x07, 0x61, 0x53, 0x69, 0x6d, 0x52, 0x65, 0x66, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, + 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x52, 0x07, 0x61, 0x53, 0x69, 0x6d, 0x52, + 0x65, 0x66, 0x12, 0x30, 0x0a, 0x07, 0x62, 0x53, 0x69, 0x6d, 0x52, 0x65, 0x66, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, + 0x61, 0x2e, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x52, 0x07, 0x62, 0x53, 0x69, + 0x6d, 0x52, 0x65, 0x66, 0x12, 0x2b, 0x0a, 0x04, 0x61, 0x52, 0x65, 0x66, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, + 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x66, 0x52, 0x04, 0x61, 0x52, 0x65, + 0x66, 0x12, 0x2b, 0x0a, 0x04, 0x62, 0x52, 0x65, 0x66, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, + 0x6c, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x66, 0x52, 0x04, 0x62, 0x52, 0x65, 0x66, 0x22, 0xa0, + 0x02, 0x0a, 0x13, 0x41, 0x78, 0x6c, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x69, 0x6e, 0x67, 0x53, + 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, + 0x44, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, + 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x70, + 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x72, + 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, + 0x06, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x2d, 0x0a, 0x05, 0x70, 0x61, 0x52, 0x65, 0x66, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, + 0x44, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x66, 0x52, + 0x05, 0x70, 0x61, 0x52, 0x65, 0x66, 0x12, 0x2d, 0x0a, 0x05, 0x70, 0x62, 0x52, 0x65, 0x66, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, + 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x66, 0x52, 0x05, + 0x70, 0x62, 0x52, 0x65, 0x66, 0x12, 0x3a, 0x0a, 0x0a, 0x74, 0x75, 0x72, 0x6e, 0x6f, 0x75, 0x74, + 0x50, 0x6f, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x72, 0x61, 0x70, + 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x75, 0x72, 0x6e, 0x6f, 0x75, 0x74, 0x50, + 0x6f, 0x73, 0x52, 0x65, 0x66, 0x52, 0x0a, 0x74, 0x75, 0x72, 0x6e, 0x6f, 0x75, 0x74, 0x50, 0x6f, + 0x73, 0x22, 0xc3, 0x01, 0x0a, 0x0c, 0x4c, 0x6f, 0x67, 0x69, 0x63, 0x53, 0x65, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, + 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x63, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x70, 0x6f, 0x69, 0x6e, 0x74, + 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, + 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x06, 0x70, 0x6f, 0x69, + 0x6e, 0x74, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x61, 0x78, 0x6c, 0x65, 0x53, 0x65, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x61, 0x78, 0x6c, 0x65, + 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x75, 0x72, + 0x6e, 0x6f, 0x75, 0x74, 0x49, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x74, 0x75, + 0x72, 0x6e, 0x6f, 0x75, 0x74, 0x49, 0x64, 0x22, 0x81, 0x03, 0x0a, 0x0c, 0x54, 0x72, 0x61, 0x63, + 0x6b, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, + 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x49, 0x6e, 0x66, + 0x6f, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x12, 0x2a, 0x0a, 0x06, 0x70, 0x6f, 0x69, + 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x72, 0x61, 0x70, + 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x06, 0x70, + 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x3e, 0x0a, 0x04, 0x74, 0x79, 0x70, + 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2a, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, + 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x53, 0x65, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, + 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x64, 0x65, 0x73, + 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0f, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, + 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x69, 0x73, 0x43, 0x75, 0x72, 0x76, 0x65, 0x18, 0x08, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x43, 0x75, 0x72, 0x76, 0x65, 0x12, 0x24, 0x0a, + 0x0d, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x09, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x43, 0x6f, + 0x75, 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x11, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x4c, 0x6f, 0x67, 0x69, + 0x63, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x11, + 0x74, 0x72, 0x61, 0x63, 0x6b, 0x4c, 0x6f, 0x67, 0x69, 0x63, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x22, 0x28, 0x0a, 0x10, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0a, 0x0a, 0x06, 0x4e, 0x4f, 0x52, 0x4d, 0x41, 0x4c, 0x10, + 0x00, 0x12, 0x08, 0x0a, 0x04, 0x46, 0x4f, 0x52, 0x4b, 0x10, 0x01, 0x22, 0x9c, 0x01, 0x0a, 0x11, + 0x54, 0x72, 0x61, 0x63, 0x6b, 0x4c, 0x6f, 0x67, 0x69, 0x63, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, + 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x12, 0x2a, 0x0a, 0x06, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, + 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x06, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x12, + 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, + 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0xca, 0x02, 0x0a, 0x0c, 0x53, + 0x74, 0x6f, 0x70, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2f, 0x0a, 0x06, 0x63, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, + 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, + 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, + 0x12, 0x12, 0x0a, 0x04, 0x66, 0x6c, 0x69, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, + 0x66, 0x6c, 0x69, 0x70, 0x12, 0x3e, 0x0a, 0x08, 0x63, 0x6f, 0x61, 0x63, 0x68, 0x4e, 0x75, 0x6d, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x22, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, + 0x44, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x43, 0x6f, 0x61, 0x63, 0x68, 0x4e, 0x75, 0x6d, 0x52, 0x08, 0x63, 0x6f, 0x61, 0x63, + 0x68, 0x4e, 0x75, 0x6d, 0x12, 0x46, 0x0a, 0x0f, 0x6b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, + 0x72, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, + 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x4b, 0x69, 0x6c, 0x6f, + 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x52, 0x0f, 0x6b, 0x69, 0x6c, + 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x12, 0x2f, 0x0a, 0x06, + 0x72, 0x65, 0x66, 0x44, 0x65, 0x76, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, + 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x74, + 0x65, 0x64, 0x52, 0x65, 0x66, 0x52, 0x06, 0x72, 0x65, 0x66, 0x44, 0x65, 0x76, 0x22, 0x28, 0x0a, + 0x08, 0x43, 0x6f, 0x61, 0x63, 0x68, 0x4e, 0x75, 0x6d, 0x12, 0x08, 0x0a, 0x04, 0x46, 0x6f, 0x75, + 0x72, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x53, 0x69, 0x78, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, + 0x45, 0x69, 0x67, 0x68, 0x74, 0x10, 0x02, 0x22, 0x81, 0x01, 0x0a, 0x0a, 0x53, 0x70, 0x6b, 0x73, + 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, + 0x44, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, + 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x66, + 0x6c, 0x69, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x66, 0x6c, 0x69, 0x70, 0x12, + 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x66, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x08, 0x72, 0x65, 0x66, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x22, 0x80, 0x01, 0x0a, 0x09, + 0x45, 0x73, 0x62, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, + 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x49, 0x6e, + 0x66, 0x6f, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, + 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x12, + 0x0a, 0x04, 0x66, 0x6c, 0x69, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x66, 0x6c, + 0x69, 0x70, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x66, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x72, 0x65, 0x66, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x22, 0xb9, + 0x01, 0x0a, 0x08, 0x47, 0x61, 0x74, 0x65, 0x64, 0x42, 0x6f, 0x78, 0x12, 0x2f, 0x0a, 0x06, 0x63, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, + 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, + 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, + 0x12, 0x12, 0x0a, 0x04, 0x66, 0x6c, 0x69, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, + 0x66, 0x6c, 0x69, 0x70, 0x12, 0x2e, 0x0a, 0x12, 0x72, 0x65, 0x66, 0x47, 0x61, 0x74, 0x65, 0x64, + 0x42, 0x6f, 0x78, 0x4d, 0x61, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x12, 0x72, 0x65, 0x66, 0x47, 0x61, 0x74, 0x65, 0x64, 0x42, 0x6f, 0x78, 0x4d, 0x61, 0x70, + 0x43, 0x6f, 0x64, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x72, 0x65, 0x66, 0x53, 0x63, 0x72, 0x65, 0x65, + 0x6e, 0x44, 0x6f, 0x6f, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x72, 0x65, 0x66, + 0x53, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x44, 0x6f, 0x6f, 0x72, 0x22, 0x97, 0x01, 0x0a, 0x06, 0x49, + 0x62, 0x70, 0x42, 0x6f, 0x78, 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, + 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, + 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x72, 0x65, + 0x66, 0x49, 0x62, 0x70, 0x4d, 0x61, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0d, 0x72, 0x65, 0x66, 0x49, 0x62, 0x70, 0x4d, 0x61, 0x70, 0x43, 0x6f, 0x64, 0x65, + 0x12, 0x22, 0x0a, 0x0c, 0x72, 0x65, 0x66, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x72, 0x65, 0x66, 0x53, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x99, 0x01, 0x0a, 0x06, 0x50, 0x73, 0x6c, 0x42, 0x6f, 0x78, 0x12, + 0x2f, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x63, 0x6f, 0x64, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x72, 0x65, 0x66, 0x50, 0x73, 0x6c, 0x4d, 0x61, + 0x70, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x72, 0x65, 0x66, + 0x50, 0x73, 0x6c, 0x4d, 0x61, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x72, 0x65, + 0x66, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x0d, 0x72, 0x65, 0x66, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x49, 0x64, + 0x22, 0x9e, 0x01, 0x0a, 0x0f, 0x53, 0x6c, 0x6f, 0x70, 0x65, 0x4b, 0x69, 0x6c, 0x6f, 0x4d, 0x61, + 0x72, 0x6b, 0x65, 0x72, 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, + 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x63, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x46, 0x0a, 0x0f, 0x6b, 0x69, 0x6c, + 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x18, 0x04, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, + 0x2e, 0x4b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, + 0x52, 0x0f, 0x6b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x79, 0x73, 0x74, 0x65, + 0x6d, 0x22, 0xa2, 0x01, 0x0a, 0x13, 0x43, 0x75, 0x72, 0x76, 0x61, 0x74, 0x75, 0x72, 0x65, 0x4b, + 0x69, 0x6c, 0x6f, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, + 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x49, 0x6e, + 0x66, 0x6f, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, + 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x46, + 0x0a, 0x0f, 0x6b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x79, 0x73, 0x74, 0x65, + 0x6d, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, + 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x4b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, + 0x79, 0x73, 0x74, 0x65, 0x6d, 0x52, 0x0f, 0x6b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, + 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x22, 0xcb, 0x01, 0x0a, 0x0a, 0x47, 0x61, 0x72, 0x61, 0x67, + 0x65, 0x44, 0x6f, 0x6f, 0x72, 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, + 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, + 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x6c, 0x69, + 0x6e, 0x6b, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x0b, 0x6c, 0x69, 0x6e, 0x6b, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x30, 0x0a, 0x13, + 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x13, 0x63, 0x65, 0x6e, 0x74, 0x72, + 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x24, + 0x0a, 0x0d, 0x72, 0x65, 0x66, 0x50, 0x73, 0x6c, 0x4d, 0x61, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x72, 0x65, 0x66, 0x50, 0x73, 0x6c, 0x4d, 0x61, 0x70, + 0x43, 0x6f, 0x64, 0x65, 0x22, 0xd5, 0x01, 0x0a, 0x0a, 0x43, 0x61, 0x72, 0x57, 0x61, 0x73, 0x68, + 0x69, 0x6e, 0x67, 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, + 0x61, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x63, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x6c, 0x69, 0x6e, 0x6b, + 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x6c, + 0x69, 0x6e, 0x6b, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x30, 0x0a, 0x13, 0x63, 0x65, + 0x6e, 0x74, 0x72, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x13, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x6c, + 0x69, 0x7a, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x18, 0x0a, 0x07, + 0x64, 0x75, 0x61, 0x6e, 0x4e, 0x75, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x64, + 0x75, 0x61, 0x6e, 0x4e, 0x75, 0x6d, 0x12, 0x14, 0x0a, 0x05, 0x77, 0x69, 0x64, 0x74, 0x68, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x77, 0x69, 0x64, 0x74, 0x68, 0x22, 0xbc, 0x01, 0x0a, + 0x06, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, + 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, + 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x32, 0x0a, 0x04, + 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1e, 0x2e, 0x67, 0x72, 0x61, + 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x2e, + 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, + 0x12, 0x12, 0x0a, 0x04, 0x66, 0x6c, 0x69, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, + 0x66, 0x6c, 0x69, 0x70, 0x22, 0x25, 0x0a, 0x0a, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x54, 0x79, + 0x70, 0x65, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x69, 0x63, 0x10, 0x00, 0x12, 0x0b, + 0x0a, 0x07, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x10, 0x01, 0x22, 0xa8, 0x01, 0x0a, 0x05, + 0x53, 0x6c, 0x6f, 0x70, 0x65, 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, + 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, + 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x12, 0x2a, 0x0a, 0x06, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, + 0x44, 0x61, 0x74, 0x61, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x06, 0x70, 0x6f, 0x69, 0x6e, + 0x74, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x6c, 0x6f, 0x70, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, + 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x11, 0x52, 0x0b, 0x73, 0x6c, 0x6f, 0x70, 0x65, 0x4e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x65, 0x66, 0x44, 0x65, 0x76, 0x69, 0x63, + 0x65, 0x49, 0x64, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x0b, 0x72, 0x65, 0x66, 0x44, 0x65, + 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x22, 0xb4, 0x01, 0x0a, 0x09, 0x43, 0x75, 0x72, 0x76, 0x61, + 0x74, 0x75, 0x72, 0x65, 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, + 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x63, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x12, 0x2a, 0x0a, 0x06, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, + 0x61, 0x74, 0x61, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x06, 0x70, 0x6f, 0x69, 0x6e, 0x74, + 0x73, 0x12, 0x28, 0x0a, 0x0f, 0x63, 0x75, 0x72, 0x76, 0x61, 0x74, 0x75, 0x72, 0x65, 0x4e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x11, 0x52, 0x0f, 0x63, 0x75, 0x72, 0x76, + 0x61, 0x74, 0x75, 0x72, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x20, 0x0a, 0x0b, 0x72, + 0x65, 0x66, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0d, + 0x52, 0x0b, 0x72, 0x65, 0x66, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x22, 0x95, 0x01, + 0x0a, 0x0e, 0x44, 0x65, 0x70, 0x61, 0x72, 0x74, 0x75, 0x72, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x72, + 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x43, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x72, 0x75, 0x6e, 0x44, 0x69, 0x72, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x75, 0x6e, + 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x66, + 0x53, 0x74, 0x61, 0x6e, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x72, 0x65, 0x66, + 0x53, 0x74, 0x61, 0x6e, 0x64, 0x22, 0x9a, 0x01, 0x0a, 0x0d, 0x41, 0x75, 0x74, 0x6f, 0x52, 0x65, + 0x74, 0x75, 0x72, 0x6e, 0x42, 0x6f, 0x78, 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, + 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, + 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, + 0x66, 0x6c, 0x69, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x66, 0x6c, 0x69, 0x70, + 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x66, 0x53, 0x74, 0x61, + 0x6e, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x72, 0x65, 0x66, 0x53, 0x74, 0x61, + 0x6e, 0x64, 0x22, 0x79, 0x0a, 0x17, 0x55, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x49, 0x64, 0x4f, 0x66, + 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x12, 0x12, 0x0a, + 0x04, 0x63, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x69, 0x74, + 0x79, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x69, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x06, 0x6c, 0x69, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x32, 0x0a, 0x14, 0x6d, 0x61, 0x69, + 0x6e, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x53, 0x79, 0x73, 0x74, 0x65, + 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x6d, 0x61, 0x69, 0x6e, 0x43, 0x6f, 0x6f, + 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x22, 0x90, 0x01, + 0x0a, 0x10, 0x4b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x76, 0x65, + 0x72, 0x74, 0x12, 0x2e, 0x0a, 0x03, 0x6b, 0x6d, 0x41, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1c, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x4b, 0x69, + 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x52, 0x03, 0x6b, + 0x6d, 0x41, 0x12, 0x2e, 0x0a, 0x03, 0x6b, 0x6d, 0x42, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1c, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x4b, 0x69, + 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x52, 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, 0xbd, 0x01, 0x0a, 0x13, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x6c, 0x61, + 0x74, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x4e, 0x0a, 0x10, + 0x63, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x74, 0x79, 0x70, 0x65, 0x73, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, + 0x44, 0x61, 0x74, 0x61, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x6d, 0x62, 0x69, + 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x74, 0x79, 0x70, 0x65, 0x52, 0x10, 0x63, 0x6f, 0x6d, 0x62, + 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x12, 0x42, 0x0a, 0x0a, + 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x22, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x52, + 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x66, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, + 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, + 0x22, 0x4b, 0x0a, 0x15, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x74, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x1e, 0x0a, + 0x0a, 0x72, 0x65, 0x66, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, + 0x0d, 0x52, 0x0a, 0x72, 0x65, 0x66, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x22, 0x62, 0x0a, + 0x10, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x50, 0x6f, 0x69, 0x6e, + 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x18, + 0x03, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x0a, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, + 0x73, 0x12, 0x2e, 0x0a, 0x12, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, + 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x12, 0x63, + 0x65, 0x6e, 0x74, 0x72, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x22, 0x86, 0x02, 0x0a, 0x05, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x12, 0x3d, 0x0a, 0x0a, 0x74, + 0x72, 0x61, 0x69, 0x6e, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x1d, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x72, + 0x61, 0x69, 0x6e, 0x2e, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x52, 0x0a, + 0x74, 0x72, 0x61, 0x69, 0x6e, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x61, + 0x72, 0x72, 0x69, 0x61, 0x67, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x0e, 0x63, 0x61, 0x72, 0x72, 0x69, 0x61, 0x67, 0x65, 0x4c, 0x65, 0x6e, 0x67, + 0x74, 0x68, 0x12, 0x20, 0x0a, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x4c, 0x65, 0x6e, 0x67, 0x74, + 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x4c, 0x65, + 0x6e, 0x67, 0x74, 0x68, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x53, 0x65, 0x74, + 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x53, 0x65, + 0x74, 0x73, 0x12, 0x2c, 0x0a, 0x11, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x72, + 0x6f, 0x6c, 0x4d, 0x61, 0x70, 0x49, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x11, 0x74, + 0x72, 0x61, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x4d, 0x61, 0x70, 0x49, 0x64, + 0x22, 0x28, 0x0a, 0x0a, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x12, 0x05, + 0x0a, 0x01, 0x41, 0x10, 0x00, 0x12, 0x05, 0x0a, 0x01, 0x42, 0x10, 0x01, 0x12, 0x05, 0x0a, 0x01, + 0x43, 0x10, 0x02, 0x12, 0x05, 0x0a, 0x01, 0x44, 0x10, 0x03, 0x22, 0x31, 0x0a, 0x09, 0x4f, 0x74, + 0x68, 0x65, 0x72, 0x4c, 0x69, 0x6e, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x69, + 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x03, 0x69, 0x64, 0x73, 0x22, 0x38, 0x0a, + 0x10, 0x4c, 0x69, 0x61, 0x6e, 0x53, 0x75, 0x6f, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x44, 0x61, 0x74, + 0x61, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, + 0x64, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x22, 0x83, 0x06, 0x0a, 0x0b, 0x4c, 0x69, 0x61, 0x6e, + 0x53, 0x75, 0x6f, 0x44, 0x61, 0x74, 0x61, 0x12, 0x39, 0x0a, 0x08, 0x73, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x67, 0x72, 0x61, 0x70, + 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x4c, 0x69, 0x61, 0x6e, 0x53, 0x75, 0x6f, 0x49, + 0x6e, 0x64, 0x65, 0x78, 0x44, 0x61, 0x74, 0x61, 0x52, 0x08, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x12, 0x37, 0x0a, 0x07, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x73, 0x18, 0x02, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, + 0x61, 0x2e, 0x4c, 0x69, 0x61, 0x6e, 0x53, 0x75, 0x6f, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x44, 0x61, + 0x74, 0x61, 0x52, 0x07, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x73, 0x12, 0x3f, 0x0a, 0x0b, 0x73, + 0x63, 0x72, 0x65, 0x65, 0x6e, 0x44, 0x6f, 0x6f, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x1d, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x4c, + 0x69, 0x61, 0x6e, 0x53, 0x75, 0x6f, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x44, 0x61, 0x74, 0x61, 0x52, + 0x0b, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x44, 0x6f, 0x6f, 0x72, 0x73, 0x12, 0x37, 0x0a, 0x07, + 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, + 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x4c, 0x69, 0x61, 0x6e, + 0x53, 0x75, 0x6f, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x44, 0x61, 0x74, 0x61, 0x52, 0x07, 0x73, 0x69, + 0x67, 0x6e, 0x61, 0x6c, 0x73, 0x12, 0x39, 0x0a, 0x08, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, + 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x4c, 0x69, 0x61, 0x6e, 0x53, 0x75, 0x6f, 0x49, 0x6e, 0x64, + 0x65, 0x78, 0x44, 0x61, 0x74, 0x61, 0x52, 0x08, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x12, 0x3d, 0x0a, 0x0a, 0x66, 0x6c, 0x6f, 0x6f, 0x64, 0x47, 0x61, 0x74, 0x65, 0x73, 0x18, 0x06, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, + 0x74, 0x61, 0x2e, 0x4c, 0x69, 0x61, 0x6e, 0x53, 0x75, 0x6f, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x44, + 0x61, 0x74, 0x61, 0x52, 0x0a, 0x66, 0x6c, 0x6f, 0x6f, 0x64, 0x47, 0x61, 0x74, 0x65, 0x73, 0x12, + 0x3f, 0x0a, 0x0b, 0x73, 0x70, 0x6b, 0x73, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x73, 0x18, 0x07, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, + 0x74, 0x61, 0x2e, 0x4c, 0x69, 0x61, 0x6e, 0x53, 0x75, 0x6f, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x44, + 0x61, 0x74, 0x61, 0x52, 0x0b, 0x73, 0x70, 0x6b, 0x73, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x73, + 0x12, 0x3f, 0x0a, 0x0b, 0x67, 0x61, 0x72, 0x61, 0x67, 0x65, 0x44, 0x6f, 0x6f, 0x72, 0x73, 0x18, + 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, + 0x61, 0x74, 0x61, 0x2e, 0x4c, 0x69, 0x61, 0x6e, 0x53, 0x75, 0x6f, 0x49, 0x6e, 0x64, 0x65, 0x78, + 0x44, 0x61, 0x74, 0x61, 0x52, 0x0b, 0x67, 0x61, 0x72, 0x61, 0x67, 0x65, 0x44, 0x6f, 0x6f, 0x72, + 0x73, 0x12, 0x3d, 0x0a, 0x0a, 0x63, 0x61, 0x72, 0x57, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x18, + 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, + 0x61, 0x74, 0x61, 0x2e, 0x4c, 0x69, 0x61, 0x6e, 0x53, 0x75, 0x6f, 0x49, 0x6e, 0x64, 0x65, 0x78, + 0x44, 0x61, 0x74, 0x61, 0x52, 0x0a, 0x63, 0x61, 0x72, 0x57, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, + 0x12, 0x3d, 0x0a, 0x0a, 0x65, 0x73, 0x62, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x73, 0x18, 0x0a, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, + 0x74, 0x61, 0x2e, 0x4c, 0x69, 0x61, 0x6e, 0x53, 0x75, 0x6f, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x44, + 0x61, 0x74, 0x61, 0x52, 0x0a, 0x65, 0x73, 0x62, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x73, 0x12, + 0x3f, 0x0a, 0x0b, 0x68, 0x6f, 0x6c, 0x64, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x73, 0x18, 0x0b, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, + 0x74, 0x61, 0x2e, 0x4c, 0x69, 0x61, 0x6e, 0x53, 0x75, 0x6f, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x44, + 0x61, 0x74, 0x61, 0x52, 0x0b, 0x68, 0x6f, 0x6c, 0x64, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x73, + 0x12, 0x4b, 0x0a, 0x11, 0x75, 0x6e, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x67, 0x65, 0x64, 0x42, 0x75, + 0x74, 0x74, 0x6f, 0x6e, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x67, 0x72, + 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x4c, 0x69, 0x61, 0x6e, 0x53, 0x75, + 0x6f, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x44, 0x61, 0x74, 0x61, 0x52, 0x11, 0x75, 0x6e, 0x61, 0x74, + 0x74, 0x65, 0x6e, 0x67, 0x65, 0x64, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x73, 0x22, 0x87, 0x01, + 0x0a, 0x10, 0x55, 0x6e, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x67, 0x65, 0x64, 0x42, 0x75, 0x74, 0x74, + 0x6f, 0x6e, 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, + 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x63, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x6c, 0x69, 0x70, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x66, 0x6c, 0x69, 0x70, 0x12, 0x1a, 0x0a, 0x08, 0x72, + 0x65, 0x66, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x72, + 0x65, 0x66, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x22, 0x81, 0x01, 0x0a, 0x0a, 0x48, 0x6f, 0x6c, 0x64, + 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, + 0x44, 0x61, 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, + 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x66, + 0x6c, 0x69, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x66, 0x6c, 0x69, 0x70, 0x12, + 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x66, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x08, 0x72, 0x65, 0x66, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x2a, 0x1d, 0x0a, 0x09, 0x44, + 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x06, 0x0a, 0x02, 0x55, 0x50, 0x10, 0x00, + 0x12, 0x08, 0x0a, 0x04, 0x44, 0x4f, 0x57, 0x4e, 0x10, 0x01, 0x42, 0x2b, 0x5a, 0x29, 0x6a, 0x6f, + 0x79, 0x6c, 0x69, 0x6e, 0x6b, 0x2e, 0x63, 0x6c, 0x75, 0x62, 0x2f, 0x72, 0x74, 0x73, 0x73, 0x2d, + 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x64, 0x61, 0x74, + 0x61, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_stationLayoutGraphics_proto_rawDescOnce sync.Once + file_stationLayoutGraphics_proto_rawDescData = file_stationLayoutGraphics_proto_rawDesc +) + +func file_stationLayoutGraphics_proto_rawDescGZIP() []byte { + file_stationLayoutGraphics_proto_rawDescOnce.Do(func() { + file_stationLayoutGraphics_proto_rawDescData = protoimpl.X.CompressGZIP(file_stationLayoutGraphics_proto_rawDescData) + }) + return file_stationLayoutGraphics_proto_rawDescData +} + +var file_stationLayoutGraphics_proto_enumTypes = make([]protoimpl.EnumInfo, 17) +var file_stationLayoutGraphics_proto_msgTypes = make([]protoimpl.MessageInfo, 58) +var file_stationLayoutGraphics_proto_goTypes = []any{ + (Direction)(0), // 0: graphicData.Direction + (Polygon_PolygonType)(0), // 1: graphicData.Polygon.PolygonType + (Platform_TypeOfPlatform)(0), // 2: graphicData.Platform.TypeOfPlatform + (AxleCounting_TypeDetectionPoint)(0), // 3: graphicData.AxleCounting.TypeDetectionPoint + (Turnout_SwitchMachineType)(0), // 4: graphicData.Turnout.SwitchMachineType + (KilometerSystem_Direction)(0), // 5: graphicData.KilometerSystem.Direction + (Signal_Model)(0), // 6: graphicData.Signal.Model + (Section_SectionType)(0), // 7: graphicData.Section.SectionType + (Section_RunningDirection)(0), // 8: graphicData.Section.RunningDirection + (RelatedRef_DeviceType)(0), // 9: graphicData.RelatedRef.DeviceType + (RelatedRef_DevicePort)(0), // 10: graphicData.RelatedRef.DevicePort + (Transponder_TransponderTypeEnum)(0), // 11: graphicData.Transponder.TransponderTypeEnum + (SimpleRef_DeviceType)(0), // 12: graphicData.SimpleRef.DeviceType + (TrackSection_TrackSectionType)(0), // 13: graphicData.TrackSection.TrackSectionType + (StopPosition_CoachNum)(0), // 14: graphicData.StopPosition.CoachNum + (Beacon_BeaconType)(0), // 15: graphicData.Beacon.BeaconType + (Train_TrainModel)(0), // 16: graphicData.Train.TrainModel + (*RtssGraphicStorage)(nil), // 17: graphicData.RtssGraphicStorage + (*Canvas)(nil), // 18: graphicData.Canvas + (*Grid)(nil), // 19: graphicData.Grid + (*Point)(nil), // 20: graphicData.Point + (*Transform)(nil), // 21: graphicData.Transform + (*ChildTransform)(nil), // 22: graphicData.ChildTransform + (*CommonInfo)(nil), // 23: graphicData.CommonInfo + (*Polygon)(nil), // 24: graphicData.Polygon + (*ConcentrationDividingLine)(nil), // 25: graphicData.ConcentrationDividingLine + (*NodeConWithSec)(nil), // 26: graphicData.NodeConWithSec + (*Platform)(nil), // 27: graphicData.Platform + (*ScreenDoor)(nil), // 28: graphicData.ScreenDoor + (*ScreenDoorConfig)(nil), // 29: graphicData.ScreenDoorConfig + (*ScreenDoorGroup)(nil), // 30: graphicData.ScreenDoorGroup + (*Station)(nil), // 31: graphicData.Station + (*TrainWindow)(nil), // 32: graphicData.TrainWindow + (*AxleCounting)(nil), // 33: graphicData.AxleCounting + (*GenerateAxleCountingConfig)(nil), // 34: graphicData.GenerateAxleCountingConfig + (*Turnout)(nil), // 35: graphicData.Turnout + (*KilometerSystem)(nil), // 36: graphicData.KilometerSystem + (*Signal)(nil), // 37: graphicData.Signal + (*Section)(nil), // 38: graphicData.Section + (*RelatedRef)(nil), // 39: graphicData.RelatedRef + (*TurnoutPosRef)(nil), // 40: graphicData.TurnoutPosRef + (*Separator)(nil), // 41: graphicData.Separator + (*Transponder)(nil), // 42: graphicData.Transponder + (*SimpleRef)(nil), // 43: graphicData.SimpleRef + (*SectionLink)(nil), // 44: graphicData.SectionLink + (*AxleCountingSection)(nil), // 45: graphicData.AxleCountingSection + (*LogicSection)(nil), // 46: graphicData.LogicSection + (*TrackSection)(nil), // 47: graphicData.TrackSection + (*TrackLogicSection)(nil), // 48: graphicData.TrackLogicSection + (*StopPosition)(nil), // 49: graphicData.StopPosition + (*SpksSwitch)(nil), // 50: graphicData.SpksSwitch + (*EsbButton)(nil), // 51: graphicData.EsbButton + (*GatedBox)(nil), // 52: graphicData.GatedBox + (*IbpBox)(nil), // 53: graphicData.IbpBox + (*PslBox)(nil), // 54: graphicData.PslBox + (*SlopeKiloMarker)(nil), // 55: graphicData.SlopeKiloMarker + (*CurvatureKiloMarker)(nil), // 56: graphicData.CurvatureKiloMarker + (*GarageDoor)(nil), // 57: graphicData.GarageDoor + (*CarWashing)(nil), // 58: graphicData.CarWashing + (*Beacon)(nil), // 59: graphicData.Beacon + (*Slope)(nil), // 60: graphicData.Slope + (*Curvature)(nil), // 61: graphicData.Curvature + (*DepartureTimer)(nil), // 62: graphicData.DepartureTimer + (*AutoReturnBox)(nil), // 63: graphicData.AutoReturnBox + (*UniqueIdOfStationLayout)(nil), // 64: graphicData.UniqueIdOfStationLayout + (*KilometerConvert)(nil), // 65: graphicData.KilometerConvert + (*StationRelateDevice)(nil), // 66: graphicData.StationRelateDevice + (*DeviceCombinationtype)(nil), // 67: graphicData.DeviceCombinationtype + (*SectionCodePoint)(nil), // 68: graphicData.SectionCodePoint + (*Train)(nil), // 69: graphicData.Train + (*OtherLine)(nil), // 70: graphicData.OtherLine + (*LianSuoIndexData)(nil), // 71: graphicData.LianSuoIndexData + (*LianSuoData)(nil), // 72: graphicData.LianSuoData + (*UnattengedButton)(nil), // 73: graphicData.UnattengedButton + (*HoldButton)(nil), // 74: graphicData.HoldButton +} +var file_stationLayoutGraphics_proto_depIdxs = []int32{ + 18, // 0: graphicData.RtssGraphicStorage.canvas:type_name -> graphicData.Canvas + 27, // 1: graphicData.RtssGraphicStorage.Platforms:type_name -> graphicData.Platform + 31, // 2: graphicData.RtssGraphicStorage.stations:type_name -> graphicData.Station + 69, // 3: graphicData.RtssGraphicStorage.train:type_name -> graphicData.Train + 37, // 4: graphicData.RtssGraphicStorage.signals:type_name -> graphicData.Signal + 35, // 5: graphicData.RtssGraphicStorage.turnouts:type_name -> graphicData.Turnout + 38, // 6: graphicData.RtssGraphicStorage.section:type_name -> graphicData.Section + 24, // 7: graphicData.RtssGraphicStorage.polygons:type_name -> graphicData.Polygon + 32, // 8: graphicData.RtssGraphicStorage.trainWindows:type_name -> graphicData.TrainWindow + 33, // 9: graphicData.RtssGraphicStorage.axleCountings:type_name -> graphicData.AxleCounting + 41, // 10: graphicData.RtssGraphicStorage.separators:type_name -> graphicData.Separator + 44, // 11: graphicData.RtssGraphicStorage.sectionLinks:type_name -> graphicData.SectionLink + 45, // 12: graphicData.RtssGraphicStorage.axleCountingSections:type_name -> graphicData.AxleCountingSection + 46, // 13: graphicData.RtssGraphicStorage.logicSections:type_name -> graphicData.LogicSection + 49, // 14: graphicData.RtssGraphicStorage.stopPositions:type_name -> graphicData.StopPosition + 50, // 15: graphicData.RtssGraphicStorage.spksSwitchs:type_name -> graphicData.SpksSwitch + 51, // 16: graphicData.RtssGraphicStorage.esbButtons:type_name -> graphicData.EsbButton + 52, // 17: graphicData.RtssGraphicStorage.gateBoxs:type_name -> graphicData.GatedBox + 42, // 18: graphicData.RtssGraphicStorage.transponders:type_name -> graphicData.Transponder + 60, // 19: graphicData.RtssGraphicStorage.slopes:type_name -> graphicData.Slope + 55, // 20: graphicData.RtssGraphicStorage.slopeKiloMarker:type_name -> graphicData.SlopeKiloMarker + 56, // 21: graphicData.RtssGraphicStorage.curvatureKiloMarker:type_name -> graphicData.CurvatureKiloMarker + 61, // 22: graphicData.RtssGraphicStorage.curvatures:type_name -> graphicData.Curvature + 47, // 23: graphicData.RtssGraphicStorage.trackSections:type_name -> graphicData.TrackSection + 48, // 24: graphicData.RtssGraphicStorage.trackLogicSections:type_name -> graphicData.TrackLogicSection + 64, // 25: graphicData.RtssGraphicStorage.UniqueIdPrefix:type_name -> graphicData.UniqueIdOfStationLayout + 65, // 26: graphicData.RtssGraphicStorage.kilometerConvertList:type_name -> graphicData.KilometerConvert + 28, // 27: graphicData.RtssGraphicStorage.screenDoors:type_name -> graphicData.ScreenDoor + 66, // 28: graphicData.RtssGraphicStorage.stationRelateDeviceList:type_name -> graphicData.StationRelateDevice + 68, // 29: graphicData.RtssGraphicStorage.sectionCodePointList:type_name -> graphicData.SectionCodePoint + 29, // 30: graphicData.RtssGraphicStorage.screenDoorConfig:type_name -> graphicData.ScreenDoorConfig + 59, // 31: graphicData.RtssGraphicStorage.beacons:type_name -> graphicData.Beacon + 34, // 32: graphicData.RtssGraphicStorage.generateAxleCountingConfig:type_name -> graphicData.GenerateAxleCountingConfig + 62, // 33: graphicData.RtssGraphicStorage.departureTimers:type_name -> graphicData.DepartureTimer + 63, // 34: graphicData.RtssGraphicStorage.autoReturnBoxs:type_name -> graphicData.AutoReturnBox + 25, // 35: graphicData.RtssGraphicStorage.concentrationDividingLines:type_name -> graphicData.ConcentrationDividingLine + 70, // 36: graphicData.RtssGraphicStorage.otherLineList:type_name -> graphicData.OtherLine + 53, // 37: graphicData.RtssGraphicStorage.ibpBoxs:type_name -> graphicData.IbpBox + 54, // 38: graphicData.RtssGraphicStorage.pslBoxs:type_name -> graphicData.PslBox + 58, // 39: graphicData.RtssGraphicStorage.carWashings:type_name -> graphicData.CarWashing + 57, // 40: graphicData.RtssGraphicStorage.garageDoors:type_name -> graphicData.GarageDoor + 57, // 41: graphicData.RtssGraphicStorage.floodGates:type_name -> graphicData.GarageDoor + 72, // 42: graphicData.RtssGraphicStorage.lianSuoData:type_name -> graphicData.LianSuoData + 74, // 43: graphicData.RtssGraphicStorage.holdButtons:type_name -> graphicData.HoldButton + 73, // 44: graphicData.RtssGraphicStorage.unattengedButtons:type_name -> graphicData.UnattengedButton + 21, // 45: graphicData.Canvas.viewportTransform:type_name -> graphicData.Transform + 19, // 46: graphicData.Canvas.gridBackground:type_name -> graphicData.Grid + 20, // 47: graphicData.Transform.position:type_name -> graphicData.Point + 20, // 48: graphicData.Transform.scale:type_name -> graphicData.Point + 20, // 49: graphicData.Transform.skew:type_name -> graphicData.Point + 21, // 50: graphicData.ChildTransform.transform:type_name -> graphicData.Transform + 21, // 51: graphicData.CommonInfo.transform:type_name -> graphicData.Transform + 22, // 52: graphicData.CommonInfo.childTransforms:type_name -> graphicData.ChildTransform + 23, // 53: graphicData.Polygon.common:type_name -> graphicData.CommonInfo + 1, // 54: graphicData.Polygon.polygonType:type_name -> graphicData.Polygon.PolygonType + 20, // 55: graphicData.Polygon.points:type_name -> graphicData.Point + 23, // 56: graphicData.ConcentrationDividingLine.common:type_name -> graphicData.CommonInfo + 20, // 57: graphicData.ConcentrationDividingLine.points:type_name -> graphicData.Point + 26, // 58: graphicData.ConcentrationDividingLine.nodeConWithSecs:type_name -> graphicData.NodeConWithSec + 39, // 59: graphicData.NodeConWithSec.leftSection:type_name -> graphicData.RelatedRef + 39, // 60: graphicData.NodeConWithSec.rightSection:type_name -> graphicData.RelatedRef + 23, // 61: graphicData.Platform.common:type_name -> graphicData.CommonInfo + 2, // 62: graphicData.Platform.type:type_name -> graphicData.Platform.TypeOfPlatform + 23, // 63: graphicData.ScreenDoor.common:type_name -> graphicData.CommonInfo + 30, // 64: graphicData.ScreenDoorConfig.screenDoorGroupList:type_name -> graphicData.ScreenDoorGroup + 23, // 65: graphicData.Station.common:type_name -> graphicData.CommonInfo + 36, // 66: graphicData.Station.kilometerSystem:type_name -> graphicData.KilometerSystem + 23, // 67: graphicData.TrainWindow.common:type_name -> graphicData.CommonInfo + 23, // 68: graphicData.AxleCounting.common:type_name -> graphicData.CommonInfo + 36, // 69: graphicData.AxleCounting.kilometerSystem:type_name -> graphicData.KilometerSystem + 39, // 70: graphicData.AxleCounting.axleCountingRef:type_name -> graphicData.RelatedRef + 3, // 71: graphicData.AxleCounting.type:type_name -> graphicData.AxleCounting.TypeDetectionPoint + 23, // 72: graphicData.Turnout.common:type_name -> graphicData.CommonInfo + 20, // 73: graphicData.Turnout.pointA:type_name -> graphicData.Point + 20, // 74: graphicData.Turnout.pointB:type_name -> graphicData.Point + 20, // 75: graphicData.Turnout.pointC:type_name -> graphicData.Point + 39, // 76: graphicData.Turnout.paRef:type_name -> graphicData.RelatedRef + 39, // 77: graphicData.Turnout.pbRef:type_name -> graphicData.RelatedRef + 39, // 78: graphicData.Turnout.pcRef:type_name -> graphicData.RelatedRef + 36, // 79: graphicData.Turnout.kilometerSystem:type_name -> graphicData.KilometerSystem + 4, // 80: graphicData.Turnout.switchMachineType:type_name -> graphicData.Turnout.SwitchMachineType + 5, // 81: graphicData.KilometerSystem.direction:type_name -> graphicData.KilometerSystem.Direction + 23, // 82: graphicData.Signal.common:type_name -> graphicData.CommonInfo + 36, // 83: graphicData.Signal.kilometerSystem:type_name -> graphicData.KilometerSystem + 39, // 84: graphicData.Signal.refDev:type_name -> graphicData.RelatedRef + 6, // 85: graphicData.Signal.mt:type_name -> graphicData.Signal.Model + 0, // 86: graphicData.Signal.direction:type_name -> graphicData.Direction + 23, // 87: graphicData.Section.common:type_name -> graphicData.CommonInfo + 20, // 88: graphicData.Section.points:type_name -> graphicData.Point + 39, // 89: graphicData.Section.paRef:type_name -> graphicData.RelatedRef + 39, // 90: graphicData.Section.pbRef:type_name -> graphicData.RelatedRef + 7, // 91: graphicData.Section.sectionType:type_name -> graphicData.Section.SectionType + 8, // 92: graphicData.Section.normalRunningDirection:type_name -> graphicData.Section.RunningDirection + 0, // 93: graphicData.Section.direction:type_name -> graphicData.Direction + 9, // 94: graphicData.RelatedRef.deviceType:type_name -> graphicData.RelatedRef.DeviceType + 10, // 95: graphicData.RelatedRef.devicePort:type_name -> graphicData.RelatedRef.DevicePort + 23, // 96: graphicData.Separator.common:type_name -> graphicData.CommonInfo + 23, // 97: graphicData.Transponder.common:type_name -> graphicData.CommonInfo + 36, // 98: graphicData.Transponder.kilometerSystem:type_name -> graphicData.KilometerSystem + 39, // 99: graphicData.Transponder.TransponderRef:type_name -> graphicData.RelatedRef + 11, // 100: graphicData.Transponder.type:type_name -> graphicData.Transponder.TransponderTypeEnum + 12, // 101: graphicData.SimpleRef.deviceType:type_name -> graphicData.SimpleRef.DeviceType + 23, // 102: graphicData.SectionLink.common:type_name -> graphicData.CommonInfo + 20, // 103: graphicData.SectionLink.points:type_name -> graphicData.Point + 43, // 104: graphicData.SectionLink.aSimRef:type_name -> graphicData.SimpleRef + 43, // 105: graphicData.SectionLink.bSimRef:type_name -> graphicData.SimpleRef + 39, // 106: graphicData.SectionLink.aRef:type_name -> graphicData.RelatedRef + 39, // 107: graphicData.SectionLink.bRef:type_name -> graphicData.RelatedRef + 23, // 108: graphicData.AxleCountingSection.common:type_name -> graphicData.CommonInfo + 20, // 109: graphicData.AxleCountingSection.points:type_name -> graphicData.Point + 39, // 110: graphicData.AxleCountingSection.paRef:type_name -> graphicData.RelatedRef + 39, // 111: graphicData.AxleCountingSection.pbRef:type_name -> graphicData.RelatedRef + 40, // 112: graphicData.AxleCountingSection.turnoutPos:type_name -> graphicData.TurnoutPosRef + 23, // 113: graphicData.LogicSection.common:type_name -> graphicData.CommonInfo + 20, // 114: graphicData.LogicSection.points:type_name -> graphicData.Point + 23, // 115: graphicData.TrackSection.common:type_name -> graphicData.CommonInfo + 20, // 116: graphicData.TrackSection.points:type_name -> graphicData.Point + 13, // 117: graphicData.TrackSection.type:type_name -> graphicData.TrackSection.TrackSectionType + 23, // 118: graphicData.TrackLogicSection.common:type_name -> graphicData.CommonInfo + 20, // 119: graphicData.TrackLogicSection.points:type_name -> graphicData.Point + 23, // 120: graphicData.StopPosition.common:type_name -> graphicData.CommonInfo + 14, // 121: graphicData.StopPosition.coachNum:type_name -> graphicData.StopPosition.CoachNum + 36, // 122: graphicData.StopPosition.kilometerSystem:type_name -> graphicData.KilometerSystem + 39, // 123: graphicData.StopPosition.refDev:type_name -> graphicData.RelatedRef + 23, // 124: graphicData.SpksSwitch.common:type_name -> graphicData.CommonInfo + 23, // 125: graphicData.EsbButton.common:type_name -> graphicData.CommonInfo + 23, // 126: graphicData.GatedBox.common:type_name -> graphicData.CommonInfo + 23, // 127: graphicData.IbpBox.common:type_name -> graphicData.CommonInfo + 23, // 128: graphicData.PslBox.common:type_name -> graphicData.CommonInfo + 23, // 129: graphicData.SlopeKiloMarker.common:type_name -> graphicData.CommonInfo + 36, // 130: graphicData.SlopeKiloMarker.kilometerSystem:type_name -> graphicData.KilometerSystem + 23, // 131: graphicData.CurvatureKiloMarker.common:type_name -> graphicData.CommonInfo + 36, // 132: graphicData.CurvatureKiloMarker.kilometerSystem:type_name -> graphicData.KilometerSystem + 23, // 133: graphicData.GarageDoor.common:type_name -> graphicData.CommonInfo + 23, // 134: graphicData.CarWashing.common:type_name -> graphicData.CommonInfo + 23, // 135: graphicData.Beacon.common:type_name -> graphicData.CommonInfo + 15, // 136: graphicData.Beacon.type:type_name -> graphicData.Beacon.BeaconType + 23, // 137: graphicData.Slope.common:type_name -> graphicData.CommonInfo + 20, // 138: graphicData.Slope.points:type_name -> graphicData.Point + 23, // 139: graphicData.Curvature.common:type_name -> graphicData.CommonInfo + 20, // 140: graphicData.Curvature.points:type_name -> graphicData.Point + 23, // 141: graphicData.DepartureTimer.common:type_name -> graphicData.CommonInfo + 23, // 142: graphicData.AutoReturnBox.common:type_name -> graphicData.CommonInfo + 36, // 143: graphicData.KilometerConvert.kmA:type_name -> graphicData.KilometerSystem + 36, // 144: graphicData.KilometerConvert.kmB:type_name -> graphicData.KilometerSystem + 67, // 145: graphicData.StationRelateDevice.combinationtypes:type_name -> graphicData.DeviceCombinationtype + 9, // 146: graphicData.StationRelateDevice.deviceType:type_name -> graphicData.RelatedRef.DeviceType + 16, // 147: graphicData.Train.trainModel:type_name -> graphicData.Train.TrainModel + 71, // 148: graphicData.LianSuoData.stations:type_name -> graphicData.LianSuoIndexData + 71, // 149: graphicData.LianSuoData.switchs:type_name -> graphicData.LianSuoIndexData + 71, // 150: graphicData.LianSuoData.screenDoors:type_name -> graphicData.LianSuoIndexData + 71, // 151: graphicData.LianSuoData.signals:type_name -> graphicData.LianSuoIndexData + 71, // 152: graphicData.LianSuoData.sections:type_name -> graphicData.LianSuoIndexData + 71, // 153: graphicData.LianSuoData.floodGates:type_name -> graphicData.LianSuoIndexData + 71, // 154: graphicData.LianSuoData.spksSwitchs:type_name -> graphicData.LianSuoIndexData + 71, // 155: graphicData.LianSuoData.garageDoors:type_name -> graphicData.LianSuoIndexData + 71, // 156: graphicData.LianSuoData.carWashing:type_name -> graphicData.LianSuoIndexData + 71, // 157: graphicData.LianSuoData.esbButtons:type_name -> graphicData.LianSuoIndexData + 71, // 158: graphicData.LianSuoData.holdButtons:type_name -> graphicData.LianSuoIndexData + 71, // 159: graphicData.LianSuoData.unattengedButtons:type_name -> graphicData.LianSuoIndexData + 23, // 160: graphicData.UnattengedButton.common:type_name -> graphicData.CommonInfo + 23, // 161: graphicData.HoldButton.common:type_name -> graphicData.CommonInfo + 162, // [162:162] is the sub-list for method output_type + 162, // [162:162] is the sub-list for method input_type + 162, // [162:162] is the sub-list for extension type_name + 162, // [162:162] is the sub-list for extension extendee + 0, // [0:162] is the sub-list for field type_name +} + +func init() { file_stationLayoutGraphics_proto_init() } +func file_stationLayoutGraphics_proto_init() { + if File_stationLayoutGraphics_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_stationLayoutGraphics_proto_msgTypes[0].Exporter = func(v any, i int) any { + switch v := v.(*RtssGraphicStorage); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_stationLayoutGraphics_proto_msgTypes[1].Exporter = func(v any, i int) any { + switch v := v.(*Canvas); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_stationLayoutGraphics_proto_msgTypes[2].Exporter = func(v any, i int) any { + switch v := v.(*Grid); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_stationLayoutGraphics_proto_msgTypes[3].Exporter = func(v any, i int) any { + switch v := v.(*Point); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_stationLayoutGraphics_proto_msgTypes[4].Exporter = func(v any, i int) any { + switch v := v.(*Transform); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_stationLayoutGraphics_proto_msgTypes[5].Exporter = func(v any, i int) any { + switch v := v.(*ChildTransform); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_stationLayoutGraphics_proto_msgTypes[6].Exporter = func(v any, i int) any { + switch v := v.(*CommonInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_stationLayoutGraphics_proto_msgTypes[7].Exporter = func(v any, i int) any { + switch v := v.(*Polygon); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_stationLayoutGraphics_proto_msgTypes[8].Exporter = func(v any, i int) any { + switch v := v.(*ConcentrationDividingLine); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_stationLayoutGraphics_proto_msgTypes[9].Exporter = func(v any, i int) any { + switch v := v.(*NodeConWithSec); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_stationLayoutGraphics_proto_msgTypes[10].Exporter = func(v any, i int) any { + switch v := v.(*Platform); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_stationLayoutGraphics_proto_msgTypes[11].Exporter = func(v any, i int) any { + switch v := v.(*ScreenDoor); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_stationLayoutGraphics_proto_msgTypes[12].Exporter = func(v any, i int) any { + switch v := v.(*ScreenDoorConfig); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_stationLayoutGraphics_proto_msgTypes[13].Exporter = func(v any, i int) any { + switch v := v.(*ScreenDoorGroup); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_stationLayoutGraphics_proto_msgTypes[14].Exporter = func(v any, i int) any { + switch v := v.(*Station); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_stationLayoutGraphics_proto_msgTypes[15].Exporter = func(v any, i int) any { + switch v := v.(*TrainWindow); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_stationLayoutGraphics_proto_msgTypes[16].Exporter = func(v any, i int) any { + switch v := v.(*AxleCounting); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_stationLayoutGraphics_proto_msgTypes[17].Exporter = func(v any, i int) any { + switch v := v.(*GenerateAxleCountingConfig); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_stationLayoutGraphics_proto_msgTypes[18].Exporter = func(v any, i int) any { + switch v := v.(*Turnout); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_stationLayoutGraphics_proto_msgTypes[19].Exporter = func(v any, i int) any { + switch v := v.(*KilometerSystem); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_stationLayoutGraphics_proto_msgTypes[20].Exporter = func(v any, i int) any { + switch v := v.(*Signal); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_stationLayoutGraphics_proto_msgTypes[21].Exporter = func(v any, i int) any { + switch v := v.(*Section); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_stationLayoutGraphics_proto_msgTypes[22].Exporter = func(v any, i int) any { + switch v := v.(*RelatedRef); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_stationLayoutGraphics_proto_msgTypes[23].Exporter = func(v any, i int) any { + switch v := v.(*TurnoutPosRef); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_stationLayoutGraphics_proto_msgTypes[24].Exporter = func(v any, i int) any { + switch v := v.(*Separator); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_stationLayoutGraphics_proto_msgTypes[25].Exporter = func(v any, i int) any { + switch v := v.(*Transponder); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_stationLayoutGraphics_proto_msgTypes[26].Exporter = func(v any, i int) any { + switch v := v.(*SimpleRef); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_stationLayoutGraphics_proto_msgTypes[27].Exporter = func(v any, i int) any { + switch v := v.(*SectionLink); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_stationLayoutGraphics_proto_msgTypes[28].Exporter = func(v any, i int) any { + switch v := v.(*AxleCountingSection); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_stationLayoutGraphics_proto_msgTypes[29].Exporter = func(v any, i int) any { + switch v := v.(*LogicSection); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_stationLayoutGraphics_proto_msgTypes[30].Exporter = func(v any, i int) any { + switch v := v.(*TrackSection); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_stationLayoutGraphics_proto_msgTypes[31].Exporter = func(v any, i int) any { + switch v := v.(*TrackLogicSection); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_stationLayoutGraphics_proto_msgTypes[32].Exporter = func(v any, i int) any { + switch v := v.(*StopPosition); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_stationLayoutGraphics_proto_msgTypes[33].Exporter = func(v any, i int) any { + switch v := v.(*SpksSwitch); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_stationLayoutGraphics_proto_msgTypes[34].Exporter = func(v any, i int) any { + switch v := v.(*EsbButton); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_stationLayoutGraphics_proto_msgTypes[35].Exporter = func(v any, i int) any { + switch v := v.(*GatedBox); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_stationLayoutGraphics_proto_msgTypes[36].Exporter = func(v any, i int) any { + switch v := v.(*IbpBox); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_stationLayoutGraphics_proto_msgTypes[37].Exporter = func(v any, i int) any { + switch v := v.(*PslBox); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_stationLayoutGraphics_proto_msgTypes[38].Exporter = func(v any, i int) any { + switch v := v.(*SlopeKiloMarker); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_stationLayoutGraphics_proto_msgTypes[39].Exporter = func(v any, i int) any { + switch v := v.(*CurvatureKiloMarker); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_stationLayoutGraphics_proto_msgTypes[40].Exporter = func(v any, i int) any { + switch v := v.(*GarageDoor); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_stationLayoutGraphics_proto_msgTypes[41].Exporter = func(v any, i int) any { + switch v := v.(*CarWashing); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_stationLayoutGraphics_proto_msgTypes[42].Exporter = func(v any, i int) any { + switch v := v.(*Beacon); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_stationLayoutGraphics_proto_msgTypes[43].Exporter = func(v any, i int) any { + switch v := v.(*Slope); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_stationLayoutGraphics_proto_msgTypes[44].Exporter = func(v any, i int) any { + switch v := v.(*Curvature); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_stationLayoutGraphics_proto_msgTypes[45].Exporter = func(v any, i int) any { + switch v := v.(*DepartureTimer); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_stationLayoutGraphics_proto_msgTypes[46].Exporter = func(v any, i int) any { + switch v := v.(*AutoReturnBox); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_stationLayoutGraphics_proto_msgTypes[47].Exporter = func(v any, i int) any { + switch v := v.(*UniqueIdOfStationLayout); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_stationLayoutGraphics_proto_msgTypes[48].Exporter = func(v any, i int) any { + switch v := v.(*KilometerConvert); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_stationLayoutGraphics_proto_msgTypes[49].Exporter = func(v any, i int) any { + switch v := v.(*StationRelateDevice); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_stationLayoutGraphics_proto_msgTypes[50].Exporter = func(v any, i int) any { + switch v := v.(*DeviceCombinationtype); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_stationLayoutGraphics_proto_msgTypes[51].Exporter = func(v any, i int) any { + switch v := v.(*SectionCodePoint); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_stationLayoutGraphics_proto_msgTypes[52].Exporter = func(v any, i int) any { + switch v := v.(*Train); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_stationLayoutGraphics_proto_msgTypes[53].Exporter = func(v any, i int) any { + switch v := v.(*OtherLine); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_stationLayoutGraphics_proto_msgTypes[54].Exporter = func(v any, i int) any { + switch v := v.(*LianSuoIndexData); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_stationLayoutGraphics_proto_msgTypes[55].Exporter = func(v any, i int) any { + switch v := v.(*LianSuoData); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_stationLayoutGraphics_proto_msgTypes[56].Exporter = func(v any, i int) any { + switch v := v.(*UnattengedButton); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_stationLayoutGraphics_proto_msgTypes[57].Exporter = func(v any, i int) any { + switch v := v.(*HoldButton); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_stationLayoutGraphics_proto_rawDesc, + NumEnums: 17, + NumMessages: 58, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_stationLayoutGraphics_proto_goTypes, + DependencyIndexes: file_stationLayoutGraphics_proto_depIdxs, + EnumInfos: file_stationLayoutGraphics_proto_enumTypes, + MessageInfos: file_stationLayoutGraphics_proto_msgTypes, + }.Build() + File_stationLayoutGraphics_proto = out.File + file_stationLayoutGraphics_proto_rawDesc = nil + file_stationLayoutGraphics_proto_goTypes = nil + file_stationLayoutGraphics_proto_depIdxs = nil +} diff --git a/example/data_proto/stationLayoutGraphics.proto b/example/data_proto/stationLayoutGraphics.proto new file mode 100644 index 0000000..7d52120 --- /dev/null +++ b/example/data_proto/stationLayoutGraphics.proto @@ -0,0 +1,758 @@ +syntax = "proto3"; + + +package graphicData; +option go_package = "joylink.club/rtss-core/example/data_proto"; + +message RtssGraphicStorage { + Canvas canvas = 1; + // repeated Link links = 2; + // repeated IscsFan iscsFans = 3; + repeated Platform Platforms = 4; + repeated Station stations = 5; + // repeated Rect rects = 6; + repeated Train train = 7; + repeated Signal signals = 8; + repeated Turnout turnouts = 9; + repeated Section section = 10; + repeated Polygon polygons = 11; + repeated TrainWindow trainWindows = 12; + repeated AxleCounting axleCountings = 13; + repeated Separator separators = 14; + repeated SectionLink sectionLinks = 15; + repeated AxleCountingSection axleCountingSections = 16; + repeated LogicSection logicSections = 17; + repeated StopPosition stopPositions = 18; + repeated SpksSwitch spksSwitchs = 19; + repeated EsbButton esbButtons = 20; // 紧急关闭按钮 + repeated GatedBox gateBoxs = 21; // 站台开门/关门/发车按钮整合控制箱 + repeated Transponder transponders = 22; // 应答器 + repeated Slope slopes = 23; // 坡度 + // repeated CalculateLink CalculateLink = 24; // 计算link信息 + repeated SlopeKiloMarker slopeKiloMarker = 25; //坡度公里标 + repeated CurvatureKiloMarker curvatureKiloMarker = 26; //曲度公里标 + repeated Curvature curvatures = 27; // 曲度 + repeated TrackSection trackSections = 28; //轨道区段 + repeated TrackLogicSection trackLogicSections = 29; //轨道逻辑区段 + //UniqueIdType UniqueIdPrefix = 30;//设备唯一编码--前缀 + UniqueIdOfStationLayout UniqueIdPrefix = 31;//地图唯一信息 + repeated KilometerConvert kilometerConvertList = 32;//公里标转换列表 + repeated ScreenDoor screenDoors = 33; + repeated StationRelateDevice stationRelateDeviceList = 34; // 关联设备列表 + repeated SectionCodePoint sectionCodePointList = 35; // 物理区段码位表 + ScreenDoorConfig screenDoorConfig = 36;//屏蔽门的配置--子屏蔽门的数量和编组列表 + repeated Beacon beacons = 37; // 信标 + GenerateAxleCountingConfig generateAxleCountingConfig = 38;//一键生成计轴的配置 + repeated DepartureTimer departureTimers = 39; // 发车计时器 + repeated AutoReturnBox autoReturnBoxs = 40; // 自动折返按钮箱 + repeated ConcentrationDividingLine concentrationDividingLines = 41; // 集中区分割线 + repeated OtherLine otherLineList = 42; // 其他线设备列表 + repeated IbpBox ibpBoxs = 43; // ibp地图打开按钮 + repeated PslBox pslBoxs = 44; // psl地图打开按钮 + repeated CarWashing carWashings = 45; // 洗车机 + repeated GarageDoor garageDoors = 46; // 车库门 + repeated GarageDoor floodGates = 47; // 防淹门 + //repeated GarageDoorBox garageDoorBoxes = 48; //车库门Psl开启按钮 + LianSuoData lianSuoData = 49; // 联锁映射数据 + repeated HoldButton holdButtons = 50; // 扣车按钮 + repeated UnattengedButton unattengedButtons = 51; //无人折返按钮 +} + +message Canvas { + // 画布宽 + int32 width = 1; + // 画布高 + int32 height = 2; + // 背景色 + string backgroundColor = 3; + // 视口变换 + Transform viewportTransform = 4; + //画布格子背景 + Grid gridBackground = 5; +} + +//格子背景 +message Grid { + bool hasGrid = 1; + string lineColor = 2; // 线色 + int32 space = 3; //间隔 +} + +message Point { + // x坐标 + float x = 1; + // y坐标 + float y = 2; +} + +//变换 +message Transform { + // 位移 + Point position = 1; + // 缩放 + Point scale = 2; + // 旋转弧度 + float rotation = 3; + // 歪斜 + Point skew = 4; +} + +//子元素变换 +message ChildTransform { + // 子元素名称 + string name = 1; + // 子元素变换 + Transform transform = 2; +} +// 公共属性 +message CommonInfo { +// string oldid = 1; + string graphicType = 2; + Transform transform = 3; + repeated ChildTransform childTransforms = 4; + uint32 id = 5; +} + +// message Link { +// CommonInfo common = 1; +// string code = 2; +// bool curve = 3; // 是否曲线 +// int32 segmentsCount = 4; // 曲线分段数 +// int32 lineWidth = 5; // 线宽 +// string lineColor = 6; // 线色 +// repeated Point points = 7; // 点坐标列表 +// } + +// message Rect { +// CommonInfo common = 1; +// string code = 2; +// int32 lineWidth = 3; // 线宽 +// string lineColor = 4; // 线色 +// float width = 5; //宽度 +// float height = 6; //高度 +// int32 radius = 7; //圆角半径 +// Point point = 8; // 画第一个点的坐标 +// } + +message Polygon { + enum PolygonType { + ConcentrationDividingLine = 0; + } + CommonInfo common = 1; + string code = 2; // 编号 + PolygonType polygonType = 3; // 多边形类型 + repeated Point points = 4; // 点列表 +} + +message ConcentrationDividingLine { + CommonInfo common = 1; + string code = 2; // 编号 + repeated Point points = 3; // 点列表 + //string oldrefLeftStationId = 4;//左边关联的集中站id + //string oldrefRightStationId = 5;//右边关联的集中站id + repeated NodeConWithSec nodeConWithSecs = 6;// 集中区分割线与区段的交点 + bool isOtherLineConcentrationDividingLine = 7;//集中区分割线绘制在其它线的边界处 + uint32 refLeftStationId = 8;//左边关联的集中站id + uint32 refRightStationId = 9;//右边关联的集中站id +} + +message NodeConWithSec { + RelatedRef leftSection = 1; + RelatedRef rightSection = 2; +} + +message Platform { + enum TypeOfPlatform { + Unknown = 0; + up = 1; + down = 2; + } + CommonInfo common = 1; + string code = 2; + //bool hasdoor = 3; // 是否有屏蔽门 + //string direction = 4; // 屏蔽门上下 + // int32 index = 5; //索引 + //int32 refStationIndex = 6; //关联车站索引 + // repeated string centralizedStations = 7; // 集中站列表 + //repeated RelatedRef platformRef = 8; //站台关联的车站和物理区段 + //string oldrefStationId = 9; //关联的车站的id + //string oldrefSectionId = 10; //关联的物理区段id + string refEsbRelayCode = 11;//关联的紧急停车继电器的编号 + TypeOfPlatform type = 12; //站台的上下行 + uint32 refStationId = 13; //关联的车站的id + uint32 refSectionId = 14; //关联的物理区段id +} + +message ScreenDoor { + CommonInfo common = 1; + string code = 2; + //int32 sonDoorAmount = 3; //子屏蔽门的数量 + //string oldrefPlatformId = 4; //关联的站台 + //repeated ScreenDoorGroup screenDoorGroupList = 5;//编组列表 + uint32 refPlatformId = 6; //关联的站台 +} + +message ScreenDoorConfig { + int32 sonDoorAmount = 1; //子屏蔽门的数量 + repeated ScreenDoorGroup screenDoorGroupList = 2;//编组列表 +} + +message ScreenDoorGroup { + int32 trainGroupAmount = 1; //列车编组数量 + int32 startSmallDoor = 2; //起始的屏蔽门编号 + int32 endSmallDoor = 3; //结束的屏蔽门编号 +} + +message Station { + CommonInfo common = 1; + string code = 2;//车站站名 + // bool hasControl = 3; // 是否有控制 + bool concentrationStations = 4; //是否集中站 + // string kilometerCode = 5; //公里标 + KilometerSystem kilometerSystem = 6; //公里标 + // int32 index = 7; + //string refIbpMapCode = 8; // 关联IBP地图Code + string stationName = 9; //车站名 + string stationNameAcronym = 10; // 车站名拼音简写 + bool depots = 11; //是否车辆段 + //repeated string oldmanageStations = 12; // 如果是集中站——管理的车站-id + repeated uint32 manageStations = 13; // 如果是集中站——管理的车站-id +} + +message TrainWindow { + CommonInfo common = 1; + string code = 2; + int32 sectionId = 3; +} + +message AxleCounting { + enum TypeDetectionPoint { + AxleCounting = 0; + SectionBoundary = 1; + } + CommonInfo common = 1; + string code = 2; // 名称 + KilometerSystem kilometerSystem = 3; //公里标 + repeated RelatedRef axleCountingRef = 4; // 计轴关联的非岔区物理区段和道岔,设备id和端口 + // int32 index = 5; //计轴的索引编号 + //bool invent = 6; //是否虚拟计轴--一般是最末端 + TypeDetectionPoint type = 7; //检测点的类型:计轴、区段边界 + //repeated string oldcentralizedStations = 8; // 集中站Id列表 + repeated uint32 centralizedStations = 9; // 集中站Id列表 +} + +message GenerateAxleCountingConfig { + //repeated string oldbbConnect = 1; //需要在道岔bb连接处生成计轴的道岔id(填一个就行) + //repeated string oldnoGenerateGroup = 2;//指定的道岔组不生成计轴 + repeated uint32 bbConnect = 3; //需要在道岔bb连接处生成计轴的道岔id(填一个就行) + repeated uint32 noGenerateGroup = 4;//指定的道岔组不生成计轴 +} + +// message Train { +// CommonInfo common = 1; +// string code = 2; +// } + +// message IscsFan { +// CommonInfo common = 1; +// string code = 2; +// } + +message Turnout { //(后端不关注) + + enum SwitchMachineType { + Unknown = 0; + ZDJ9_Single = 1; + ZDJ9_Double = 2; + } + + CommonInfo common = 1; + string code = 2; + repeated Point pointA = 6; // A端坐标列表 + repeated Point pointB = 7; // B端坐标列表 + repeated Point pointC = 8; // C端坐标列表 + RelatedRef paRef = 9; // 道岔A端关联的设备 + RelatedRef pbRef = 10; // 道岔B端关联的设备 + RelatedRef pcRef = 11; // 道岔C端关联的设备 + // KilometerSystem kilometerSystem = 12; // 道岔公里标 + repeated KilometerSystem kilometerSystem = 13; // 道岔公里标 + // int32 index = 14; //索引 + //string oldpaTrackSectionId = 15; // A端轨道区段id + //string oldpbTrackSectionId = 16; // B端轨道区段id + //string oldpcTrackSectionId = 17; // C端轨道区段id + SwitchMachineType switchMachineType = 18; // 转辙机类型 + //repeated string oldcentralizedStations = 19; // 集中站Id列表 + repeated uint32 centralizedStations = 20; // 集中站Id列表 + uint32 paTrackSectionId = 21; // A端轨道区段id + uint32 pbTrackSectionId = 22; // B端轨道区段id + uint32 pcTrackSectionId = 23; // C端轨道区段id +} + + +message KilometerSystem { + /** 左右行 **/ + enum Direction { + LEFT = 0; + RIGHT = 1; + } + int64 kilometer = 1; //公里标mm + string coordinateSystem = 2; //坐标系 + Direction direction = 3; //左右行 +} + +message Signal { + CommonInfo common = 1; + string code = 2; + bool mirror = 3; + // int64 kilometer = 4; + // string coordinateSystem = 5; + KilometerSystem kilometerSystem = 6; + // int32 index = 7; //索引 + RelatedRef refDev = 8; //关联设备(区段/道岔) + //repeated string oldcentralizedStations = 9; // 集中站Id列表 + // 信号机模型类型枚举 + // 从左向右,最左边为靠近灯座的灯 + // 如果没有说明,默认不封灯,无引导 + // F-封 D-单 Y-有、带 Y-引导 + // H-红 L-绿 U-黄 A-蓝 B-白 + enum Model{ + HL = 0; //2XH-1 红绿 + HLU_FU = 1; //2XH-1 红绿黄,封黄灯,无引导 + HLU_DU_YY = 2; //3XH-1 红绿黄,不封灯,有单黄,带引导 + HLU_YY = 3; //3XH-2或JDXH 红绿黄,不封灯,无单黄,带引导 + HLU_FL_DU_YY = 4;//3XH-3 红绿黄,封绿灯,有单黄,带引导 + HLU_DU = 5; //3XH-4 红绿黄,不封灯,有单黄,无引导 + AB = 6; //DXCH 蓝白 + HBU_DU = 7; //JCKXH 红白黄,不封灯,有单黄,无引导 + } + // 信号机模型类型 + Model mt = 10; + //string belongStation = 11; // 所属车站(缩写) + Direction direction = 12; // 上下行 + repeated uint32 centralizedStations = 13; // 集中站Id列表 +} + +/** 上下行(区段/信号机) */ +enum Direction { + UP = 0; + DOWN = 1; +} + +/** 物理区段(包含岔区和非岔区) */ +message Section { + enum SectionType { + Physical = 0; + TurnoutPhysical = 2; + } + + enum RunningDirection { + AtoB = 0; + BtoA = 1; + BOTH = 2; + } + + + CommonInfo common = 1; + string code = 2; // 编号 + repeated Point points = 3; // 点列表 + RelatedRef paRef = 4; // 区段A端关联的设备(非岔区)(后端不关注) + RelatedRef pbRef = 5; // 区段B端关联的设备(非岔区)(后端不关注) + SectionType sectionType = 6; // 区段类型 + //repeated string oldaxleCountings = 7; // 区段对应的计轴 + // int32 index = 8; // 索引 + //string oldtrackSectionId = 9; // 下属轨道区段id + bool isCurve = 10; // 是否曲线 + int32 segmentsCount = 12; // 曲线分段数 + //repeated string oldcentralizedStations = 13; // 集中站Id列表 + RunningDirection normalRunningDirection = 14; //常规运行方向 + bool isTurnBackZone = 15; // 是否为折返区域 + Direction direction = 16; // 上下行 + repeated uint32 axleCountings = 17; // 区段对应的计轴 + uint32 trackSectionId = 18; // 下属轨道区段id + repeated uint32 centralizedStations = 19; // 集中站Id列表 +} + +//关联设备 +message RelatedRef { + enum DeviceType { + Section = 0; + Turnout = 1; + TrainWindow = 2; + AxleCounting = 3; + SectionLink = 4; + signal = 5; + station = 6; + ScreenDoor = 7; + SignalFaultAlarm = 8; + Breakers = 9;//断路器 + PowerScreen = 10;//电源屏 + GarageDoor = 11; + CarWashing = 12; + FloodGate = 13; + } + + enum DevicePort { + A = 0; + B = 1; + C = 2; + } + + DeviceType deviceType = 1; //关联的设备类型 + //string oldid = 2; //关联的设备ID + DevicePort devicePort = 3; //关联的设备端口 + uint32 id = 4; +} + +//计轴区段与道岔的位置关系 +message TurnoutPosRef { + //string oldid = 1; //道岔的ID + int32 position = 2; //道岔的正反为,0是定位,1是反位 + uint32 id = 3; +} + +message Separator { // 分隔符 + CommonInfo common = 1; + string code = 2; + string separatorType = 3; +} + +message Transponder { // 应答器 + enum TransponderTypeEnum { + FB = 0; // 固定应答器 + WB = 1; // 轮径校正应答器 + DB = 2; // 休眠唤醒应答器 + VB = 3; // 主信号应答器 + IB = 4; // 预告应答器 + } + CommonInfo common = 1; + string code = 2; + // int32 transponderType = 3; // 作废 + // int32 index = 4; // 索引编号 + KilometerSystem kilometerSystem = 5; //公里标 + RelatedRef TransponderRef = 6; //关联关系 + //repeated string oldcentralizedStations = 7; // 集中站Id列表 + // bytes fixedTelegram = 8;//无源应答器固定报文 + TransponderTypeEnum type = 9;//应答器类型 + repeated uint32 centralizedStations = 10; // 集中站Id列表 + string fixedTelegram = 11; //应答器固定报文 + string fixedUserTelegram = 12; //应答器固定用户报文 + string originalCode = 13; //应答器原编号(厂商提供数据编号) +} + +message SimpleRef { + enum DeviceType { + Turnout = 0; + AxleCounting = 1; + } + DeviceType deviceType = 1; + //string oldid = 2; + uint32 id = 3; +} + +message SectionLink { + CommonInfo common = 1; + string code = 2; + repeated Point points = 3; + bool up = 4; // 是否上行 + SimpleRef aSimRef = + 5; // SectionLink A端连接设备(构建关系 AxleCounting/Turnout) //端点 + SimpleRef bSimRef = + 6; // SectionLink B端连接设备(构建关系 AxleCounting/Turnout) //端点 + RelatedRef aRef = + 7; // SectionLink A端连接设备(端口关系 SectionLink/Turnout) + RelatedRef bRef = 8; // SectionLink B端连接设备(端口关系 + // SectionLink/Turnout) + // int32 index = 9; // 索引编号 +} + +message AxleCountingSection { // 计轴区段 + CommonInfo common = 1; + string code = 2; // 名称 + repeated Point points = 3; + RelatedRef paRef = 4; // 计轴区段A端关联的计轴 + RelatedRef pbRef = 5; // 计轴区段B端关联的计轴 + repeated TurnoutPosRef turnoutPos = 6; //关联道岔的正反位--0是定位,1是反位 + // int32 index = 7; //计轴区段的索引编号 +} + +message LogicSection { // 逻辑区段 + CommonInfo common = 1; + string code = 2; // 名称 + repeated Point points = 3; + //string oldaxleSectionId = 4; // 关联的计轴区段Id + // int32 index = 5; // 索引编号 + //string oldturnoutId = 6; // 关联的岔芯对应的道岔id,此时该逻辑区段为该道岔C端关联的轨道link + uint32 axleSectionId = 7; // 关联的计轴区段Id + uint32 turnoutId = 8; // 关联的岔芯对应的道岔id,此时该逻辑区段为该道岔C端关联的轨道link +} + +message TrackSection { //轨道区段 + enum TrackSectionType { + NORMAL = 0; //非岔区 + FORK = 1; //岔区 + } + CommonInfo common = 1; + repeated Point points = 2; + string code = 3; //名称 + // int32 index = 4; //索引 + TrackSectionType type = 5; //类型 + string destinationCode = 6; //目的地码 + //repeated string oldtrackLogicSection = 7; //下属的逻辑区段id(非岔区) + // //关联的物理设备id(物理区段/道岔)由另一端(物理区段/道岔处理) + bool isCurve = 8; // 是否曲线 + int32 segmentsCount = 9; // 曲线分段数 + repeated uint32 trackLogicSection = 10; //下属的逻辑区段id(非岔区) +} + +message TrackLogicSection { //轨道逻辑区段 + CommonInfo common = 1; + repeated Point points = 2; + string code = 3; //名称 + int32 length = 4; //长度(mm) +} + +message StopPosition { + enum CoachNum { + Four = 0; + Six = 1; + Eight = 2; + } + CommonInfo common = 1; + string code = 2; + bool flip = 3; // 是否翻转(前端显示) + CoachNum coachNum = 4; //编组数量 + // int32 index = 5; //索引 + KilometerSystem kilometerSystem = 6; + RelatedRef refDev = 7; // 关联设备(区段) +} + +message SpksSwitch { + CommonInfo common = 1; + string code = 2; + bool flip = 3; // 是否翻转(前端显示) + // int32 index = 4; //索引 + // int32 refStand = 5; //关联站台索引 + //repeated string oldrefSections = 6; // 关联物理区段id + //string oldrefStand = 7; // 关联站台 + // repeated uint32 refSections = 8; // 关联物理区段id + uint32 refStand = 9; // 关联站台 +} + +message EsbButton { + CommonInfo common = 1; + string code = 2; + bool flip = 3; // 是否翻转(前端显示) + // int32 index = 4; //索引 + // int32 refStand = 5; // 关联站台索引 + //string oldrefStand = 6; // 关联站台 + uint32 refStand = 7; // 关联站台 + //string refEsbButtonMapCode = 8; // 关联紧急关闭按钮地图Code--关联PSL地图 +} + +message GatedBox { + CommonInfo common = 1; + string code = 2; + bool flip = 3; // 是否翻转(前端显示) + // int32 index = 4; //索引 + //string oldrefScreenDoor = 5; // 关联屏蔽门 + string refGatedBoxMapCode = 6; // 关联门控箱地图Code + uint32 refScreenDoor = 7; // 关联屏蔽门 +} + +message IbpBox { + CommonInfo common = 1; + string code = 2; + string refIbpMapCode = 3; // 关联Ibp地图Code + uint32 refStationId = 4; // 关联车站id +} + +message PslBox { + CommonInfo common = 1; + string code = 2; + string refPslMapCode = 3; // 关联Psl地图Code + uint32 refPlatformId = 4; // 关联站台id +} + +/** 坡度公里标 */ +message SlopeKiloMarker { + CommonInfo common = 1; + string code = 2; + repeated KilometerSystem kilometerSystem = 4; //公里标数据 +} + +/** 曲度公里标 */ +message CurvatureKiloMarker { + CommonInfo common = 1; + string code = 2; + repeated KilometerSystem kilometerSystem = 4; //公里标数据 +} +/** 车库门 */ +message GarageDoor { + CommonInfo common = 1; + string code = 2; + uint32 linkSection = 3; //关联区段 + repeated uint32 centralizedStations = 4; // 集中站Id列表; + string refPslMapCode = 5; // 关联的Psl地图的code(名称) +} +/** 洗车机 */ +message CarWashing { + CommonInfo common = 1; + string code = 2; + uint32 linkSection = 3; //关联区段 + repeated uint32 centralizedStations = 4; // 集中站Id列表; + uint32 duanNum = 5; //段数 + uint32 width = 6; // 洗车机宽度 +} +/** 信标 */ +message Beacon { + enum BeaconType { + Static = 0; + Dynamic = 1; + } + CommonInfo common = 1; + string code = 2; + BeaconType type = 3; + bool flip = 4; +} + +message Slope { + CommonInfo common = 1; + repeated Point points = 2; + sint32 slopeNumber = 3; //坡度的值--正负代表上下坡 + //repeated string oldrefDeviceId = 4; // 坡度关联的(坡度公里标) + repeated uint32 refDeviceId = 5; // 坡度关联的(坡度公里标) +} + +message Curvature { + CommonInfo common = 1; + repeated Point points = 2; + sint32 curvatureNumber = 3; //曲线的半径--正代表外侧;负代表内侧 + //repeated string oldrefDeviceId = 4; // 曲线关联的(曲度公里标) + repeated uint32 refDeviceId = 5; // 曲线关联的(曲度公里标) +} + +// 计算link结构 +// message CalculateLink { +// CommonInfo common = 1; +// repeated Point points = 2; +// int32 length = 3; //长度,mm +// RelatedRef aRelatedRef = 4; // A端(最小端)关联的端点 (道岔端点) +// RelatedRef bRelatedRef = 5; // B端(最大端)关联的端点 (道岔端点) +// repeated DevicePosition devicePositions = 6; //设备在link上的位置 +// int32 index = 7; // link唯一标识 +// message DevicePosition { +// int32 offset = 1; +// string deviceId = 2; +// string deviceType = 3; +// } +// } +/** 发车计时器 */ +message DepartureTimer { + CommonInfo common = 1; + string code = 2; + //string oldrefStand = 3; // 关联站台 + string runDirection = 4; //运行方向 + uint32 refStand = 5; // 关联站台 +} + +message AutoReturnBox { + CommonInfo common = 1; + string code = 2; + bool flip = 3; // 是否翻转(前端显示) + int32 index = 4; //索引 + //string oldrefStand = 5; // 关联站台 + uint32 refStand = 6; // 关联站台 +} + +message UniqueIdOfStationLayout { + string city = 1;//城市 + string lineId = 2;//线路号 + string mainCoordinateSystem = 3;//地图的公里标主坐标系 +} + +//公里标转换 +message KilometerConvert { + KilometerSystem kmA = 1; + KilometerSystem kmB = 2; + bool sameTrend = 3; //相同趋势(同增同减)? +} + +/* 车站关联的设备列表 */ +message StationRelateDevice { + string code = 1;//设备编号 + repeated DeviceCombinationtype combinationtypes = 2; //组合类型 + RelatedRef.DeviceType deviceType = 3;//设备类型 +} +message DeviceCombinationtype { + string code = 1; + //repeated string oldrefDevices = 2;//车站关联的设备 + repeated uint32 refDevices = 3;//车站关联的设备 +} + +message SectionCodePoint { + //string oldCentralizedStation = 1; // 集中站id + //repeated string oldsectionIds = 2; //物理区段id列表 + repeated uint32 sectionIds = 3; //物理区段id列表 + uint32 centralizedStation = 4; // 集中站id +} + +// 列车信息 +message Train { + enum TrainModel { // 车型 + A = 0; + B = 1; + C = 2; + D = 3; + } + TrainModel trainModel = 1; // 车型 + int32 carriageLength = 2; // 列车车厢长度 + int32 totalLength = 3; // 总长度 +// int32 minDiameter = 4; // 车轮的最小直径 +// int32 maxDiameter = 5; // 车轮的最大直径 + string trainSets = 6; // 编组 + // common.TrainDynamicConfig dynamicConfig = 7; //动力学参数 +// string trainControlMapCode = 8; + int32 trainControlMapId = 9; + +} + +// 其他线 +message OtherLine { + string name = 1; + //repeated string oldids = 2; // 设备id列表 + repeated uint32 ids = 3; // 设备id列表 +} +// 设备联锁编号 +message LianSuoIndexData { + uint32 id = 1; // 设备id + uint32 index = 2; //设备联锁编号 +} +// 设备联锁映射数据 +message LianSuoData { + repeated LianSuoIndexData stations = 1; + repeated LianSuoIndexData switchs = 2; + repeated LianSuoIndexData screenDoors = 3; + repeated LianSuoIndexData signals = 4; + repeated LianSuoIndexData sections = 5; + repeated LianSuoIndexData floodGates = 6; + repeated LianSuoIndexData spksSwitchs = 7; + repeated LianSuoIndexData garageDoors = 8; + repeated LianSuoIndexData carWashing = 9; + repeated LianSuoIndexData esbButtons = 10; + repeated LianSuoIndexData holdButtons = 11; + repeated LianSuoIndexData unattengedButtons = 12; +} +// 无人折返按钮 +message UnattengedButton { + CommonInfo common = 1; + string code = 2; + bool flip = 3; // 是否翻转(前端显示) + uint32 refStand = 4; // 关联站台 +} +// 扣车按钮 +message HoldButton { + CommonInfo common = 1; + string code = 2; + bool flip = 3; // 是否翻转(前端显示) + uint32 refStand = 4; // 关联站台 +} diff --git a/example/model_impl/section.go b/example/model_impl/section.go new file mode 100644 index 0000000..1283b3b --- /dev/null +++ b/example/model_impl/section.go @@ -0,0 +1,7 @@ +package modelimpl + +import "joylink.club/rtss-core/model" + +type Section struct { + model.SectionImpl +} diff --git a/example/model_impl/station.go b/example/model_impl/station.go new file mode 100644 index 0000000..811117e --- /dev/null +++ b/example/model_impl/station.go @@ -0,0 +1,7 @@ +package modelimpl + +import "joylink.club/rtss-core/model" + +type Station struct { + model.StationImpl +} diff --git a/example/model_impl/turnout.go b/example/model_impl/turnout.go new file mode 100644 index 0000000..1ba45ac --- /dev/null +++ b/example/model_impl/turnout.go @@ -0,0 +1,7 @@ +package modelimpl + +import "joylink.club/rtss-core/model" + +type Turnout struct { + model.TurnoutImpl +} diff --git a/example/repository/repo.go b/example/repository/repo.go new file mode 100644 index 0000000..52c2dee --- /dev/null +++ b/example/repository/repo.go @@ -0,0 +1,39 @@ +package repository + +import ( + modelimpl "joylink.club/rtss-core/example/model_impl" + "joylink.club/rtss-core/model" + "joylink.club/rtss-core/repo" +) + +type Repository struct { + id string + stationMap map[string]*modelimpl.Station + sectionMap map[string]*modelimpl.Section + turnoutMap map[string]*modelimpl.Turnout +} + +func NewRepository(id string) repo.Repo { + return &Repository{ + id: id, + stationMap: make(map[string]*modelimpl.Station), + sectionMap: make(map[string]*modelimpl.Section), + turnoutMap: make(map[string]*modelimpl.Turnout), + } +} + +func (r *Repository) Id() string { + return r.id +} + +func (r *Repository) GetStationByUid(uid string) model.Station { + return r.stationMap[uid] +} + +func (r *Repository) GetSectionByUid(uid string) model.Section { + return r.sectionMap[uid] +} + +func (r *Repository) GetTurnoutByUid(uid string) model.Turnout { + return r.turnoutMap[uid] +} diff --git a/go.mod b/go.mod index 31ec636..46a93be 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,9 @@ module joylink.club/rtss-core -require joylink.club/ecs v0.1.0 +require ( + google.golang.org/protobuf v1.34.2 + joylink.club/ecs v0.1.0 +) require github.com/yohamta/donburi v1.3.9 // indirect diff --git a/go.sum b/go.sum index 91696ec..de08852 100644 --- a/go.sum +++ b/go.sum @@ -2,11 +2,17 @@ gitea.joylink.club/joylink/jl-ecs v0.1.0 h1:+qQw0VN4dSnAuerqCl34bQTfLEZA+foGUUG5 gitea.joylink.club/joylink/jl-ecs v0.1.0/go.mod h1:i/tBVZV1hoFNZCxmZXeUIa9sHwJcbgpj3zA9xtcQkyA= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/yohamta/donburi v1.3.9 h1:sYAPaelSnxmoTGjgH9ZlYt4pUKrnwvAv4YGXxLZCK6E= github.com/yohamta/donburi v1.3.9/go.mod h1:5QkyraUjkzbMVTD2b8jaPFy1Uwjm/zdFN1c1lZGaezg= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= +google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/model/station.go b/model/station.go new file mode 100644 index 0000000..a7dbe69 --- /dev/null +++ b/model/station.go @@ -0,0 +1,26 @@ +package model + +type Station interface { + RtssModel + IsCentralized() bool +} + +type StationImpl struct { + uid string + centralized bool +} + +func NewStation(uid string, centralized bool) Station { + return &StationImpl{ + uid: uid, + centralized: centralized, + } +} + +func (s *StationImpl) Uid() string { + return s.uid +} + +func (s *StationImpl) IsCentralized() bool { + return s.centralized +} diff --git a/protodef/main.go b/protodef/main.go index 8f8da72..e8172d6 100644 --- a/protodef/main.go +++ b/protodef/main.go @@ -21,18 +21,27 @@ func main() { //先安装以下插件 //go install google.golang.org/protobuf/cmd/protoc-gen-go@latest args := os.Args - if len(args) >= 2 { - switch { - case args[1] == "component": //go run . component 编译组件proto - { - protocPath = filepath.Join(basePath, "protoc-23.1", "bin", "win64", "protoc") - protoFolder = filepath.Join(basePath, "src", args[1]) - goOutDir = "../" - } - } + if len(args) < 3 { + log.Fatal("usage: go run protodef/main.go [path/to/proto/dir] [goOutDir]") } + protoFolder = filepath.Join(basePath, args[1]) + goOutDir = args[2] + + log.Println(protoFolder, goOutDir) + // if len(args) >= 2 { + // switch { + // case args[1] == "component": //go run . component 编译组件proto + // { + // protocPath = filepath.Join(basePath, "protoc-23.1", "bin", "win64", "protoc") + // protoFolder = filepath.Join(basePath, "src", args[1]) + // goOutDir = "../" + // } + // } + // } // + // protoFolder = filepath.Join(basePath) protoFiles := getProtoFiles() + log.Println(protoFiles) // 编译proto文件为Go文件 if err := compileProto(protoFiles); err != nil { log.Fatalf("编译proto文件失败:%v", err) @@ -57,7 +66,7 @@ func getProtoFiles() []string { // 编译proto文件为Go文件 func compileProto(protoFiles []string) error { for _, fileName := range protoFiles { - cmd := exec.Command(protocPath, "-I="+protoFolder, fmt.Sprintf("--go_out=%s", goOutDir), fileName) + cmd := exec.Command(protocPath, "-I="+protoFolder, fmt.Sprintf("--go_out=%s", goOutDir), "--go_opt=paths=source_relative", fileName) fmt.Println(cmd.String()) cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr diff --git a/repo/repo.go b/repo/repo.go index 41fe1a7..9cf94fe 100644 --- a/repo/repo.go +++ b/repo/repo.go @@ -1,6 +1,11 @@ package repo +import "joylink.club/rtss-core/model" + type Repo interface { // 模型仓库id Id() string + GetStationByUid(uid string) model.Station + GetSectionByUid(uid string) model.Section + GetTurnoutByUid(uid string) model.Turnout }