From 2224a3229bac65251fd81c0e492a6e64470e2b51 Mon Sep 17 00:00:00 2001 From: Rob Shakir Date: Mon, 25 Sep 2023 12:25:28 -0700 Subject: [PATCH] Support mapping of protobuf lists. (#915) * Support nested containers in gNMI->Protobuf unmarshalling. * (M) protomap/{proto,proto_test.go} - Support nested messages when unmarshalling protobufs, previously such messages did not have their contents mapped. * (M) protomap/integration_tests/integration_test.go - Add a testcase for gRIBI's real protobufs to ensure that unmarshalling is covered. --- .../integration_tests/integration_test.go | 59 +- protomap/proto.go | 250 +++- protomap/proto_test.go | 102 +- .../testdata/exschemapath/exschemapath.pb.go | 1079 ++++++++++------- .../testdata/exschemapath/exschemapath.proto | 11 +- 5 files changed, 993 insertions(+), 508 deletions(-) diff --git a/protomap/integration_tests/integration_test.go b/protomap/integration_tests/integration_test.go index c1fe6096..b384e676 100644 --- a/protomap/integration_tests/integration_test.go +++ b/protomap/integration_tests/integration_test.go @@ -157,9 +157,9 @@ func TestGRIBIAFTToStruct(t *testing.T) { }, { desc: "map next-hop-group", inPaths: map[*gpb.Path]interface{}{ - mustPath("next-hops/next-hop[index=1]/index"): mustValue(t, 1), - mustPath("next-hops/next-hop[index=1]/state/index"): mustValue(t, 1), - mustPath("next-hops/next-hop[index=1]/state/weight"): mustValue(t, 1), + mustPath("next-hops/next-hop[index=1]/index"): mustValue(t, uint64(1)), + mustPath("next-hops/next-hop[index=1]/state/index"): mustValue(t, uint64(1)), + mustPath("next-hops/next-hop[index=1]/state/weight"): mustValue(t, uint64(1)), }, inProto: &gribi_aft.Afts_NextHopGroup{}, inPrefix: &gpb.Path{ @@ -172,15 +172,45 @@ func TestGRIBIAFTToStruct(t *testing.T) { }}, }, wantProto: &gribi_aft.Afts_NextHopGroup{ - // Currently this error is ignored for backwards compatibility with other - // messages where there are repeated fields that are not covered. - /* NextHop: []*gribi_aft.Afts_NextHopGroup_NextHopKey{{ - Index: 1, - NextHop: &gribi_aft.Afts_NextHopGroup_NextHop{ - Weight: &wpb.UintValue{Value: 1}, - }, - }}, - */ + NextHop: []*gribi_aft.Afts_NextHopGroup_NextHopKey{{ + Index: 1, + NextHop: &gribi_aft.Afts_NextHopGroup_NextHop{ + Weight: &wpb.UintValue{Value: 1}, + }, + }}, + }, + }, { + desc: "multiple NHGs", + inPaths: map[*gpb.Path]interface{}{ + mustPath("next-hops/next-hop[index=1]/index"): mustValue(t, uint64(1)), + mustPath("next-hops/next-hop[index=1]/state/index"): mustValue(t, uint64(1)), + mustPath("next-hops/next-hop[index=1]/state/weight"): mustValue(t, uint64(1)), + mustPath("next-hops/next-hop[index=2]/index"): mustValue(t, uint64(2)), + mustPath("next-hops/next-hop[index=2]/state/index"): mustValue(t, uint64(2)), + mustPath("next-hops/next-hop[index=2]/state/weight"): mustValue(t, uint64(2)), + }, + inProto: &gribi_aft.Afts_NextHopGroup{}, + inPrefix: &gpb.Path{ + Elem: []*gpb.PathElem{{ + Name: "afts", + }, { + Name: "next-hop-groups", + }, { + Name: "next-hop-group", + }}, + }, + wantProto: &gribi_aft.Afts_NextHopGroup{ + NextHop: []*gribi_aft.Afts_NextHopGroup_NextHopKey{{ + Index: 1, + NextHop: &gribi_aft.Afts_NextHopGroup_NextHop{ + Weight: &wpb.UintValue{Value: 1}, + }, + }, { + Index: 2, + NextHop: &gribi_aft.Afts_NextHopGroup_NextHop{ + Weight: &wpb.UintValue{Value: 2}, + }, + }}, }, }, { desc: "embedded field in next-hop", @@ -208,7 +238,10 @@ func TestGRIBIAFTToStruct(t *testing.T) { return } - if diff := cmp.Diff(tt.inProto, tt.wantProto, protocmp.Transform()); diff != "" { + if diff := cmp.Diff(tt.inProto, tt.wantProto, + protocmp.Transform(), + protocmp.SortRepeatedFields(&gribi_aft.Afts_NextHopGroup{}, "next_hop"), + ); diff != "" { t.Fatalf("did not get expected protobuf, diff(-got,+want):\n%s", diff) } }) diff --git a/protomap/proto.go b/protomap/proto.go index e65a662d..99661ec9 100644 --- a/protomap/proto.go +++ b/protomap/proto.go @@ -20,6 +20,8 @@ package protomap import ( "errors" "fmt" + "reflect" + "strconv" "strings" "google.golang.org/protobuf/proto" @@ -530,6 +532,7 @@ func ProtoFromPaths(p proto.Message, vals map[*gpb.Path]interface{}, opt ...Unma if err != nil { return fmt.Errorf("invalid value prefix supplied, %v", err) } + valPrefix = schemaPath(valPrefix) protoPrefix, err := hasProtoMsgPrefix(opt) if err != nil { @@ -539,54 +542,59 @@ func ProtoFromPaths(p proto.Message, vals map[*gpb.Path]interface{}, opt ...Unma return protoFromPathsInternal(p, vals, valPrefix, protoPrefix, hasIgnoreExtraPaths(opt)) } -func protoFromPathsInternal(p proto.Message, vals map[*gpb.Path]any, valPrefix, protoPrefix *gpb.Path, ignoreExtras bool) error { - schemaPath := func(p *gpb.Path) *gpb.Path { - np := proto.Clone(p).(*gpb.Path) - for _, e := range np.Elem { - e.Key = nil - } - return np +// schemaPath converts the path p into a schema path by removing all of the keys within the path. +func schemaPath(p *gpb.Path) *gpb.Path { + np := proto.Clone(p).(*gpb.Path) + for _, e := range np.Elem { + e.Key = nil } + return np +} - findChildren := func(vals map[*gpb.Path]any, valPrefix *gpb.Path, protoPrefix *gpb.Path, directOnly, mustBeChildren bool) (map[*gpb.Path]any, error) { - // directCh is a map between the absolute schema path for a particular value, and - // the value specified. - directCh := map[*gpb.Path]interface{}{} - for p, v := range vals { - absPath := &gpb.Path{ - Elem: append(append([]*gpb.PathElem{}, schemaPath(valPrefix).Elem...), p.Elem...), - } +// findChildren returns the entries from the vals map that correspond to children of the specified protoPrefix path. +// The valPrefix path is prepended to the paths within the vals map to make these values absolute. If the directOnly bool +// is set to true, then only direct children (not subsequent descendents) are returned. If mustBeChildren is set to true +// then an error is returned if there are any values within the vals map that are not children. +func findChildren(vals map[*gpb.Path]any, valPrefix *gpb.Path, protoPrefix *gpb.Path, directOnly, mustBeChildren bool) (map[*gpb.Path]any, error) { + // directCh is a map between the absolute schema path for a particular value, and + // the value specified. + directCh := map[*gpb.Path]interface{}{} + for p, v := range vals { + absPath := &gpb.Path{ + Elem: append(append([]*gpb.PathElem{}, valPrefix.Elem...), p.Elem...), + } - if !util.PathMatchesPathElemPrefix(absPath, protoPrefix) { - if mustBeChildren { - return nil, fmt.Errorf("invalid path provided, absolute paths must be used, %s does not have prefix %s", absPath, protoPrefix) - } - continue + if !util.PathMatchesPathElemPrefix(absPath, protoPrefix) { + if mustBeChildren { + return nil, fmt.Errorf("invalid path provided, absolute paths must be used, %s does not have prefix %s", absPath, protoPrefix) } + continue + } - // make the path absolute, and a schema path. - pp := util.TrimGNMIPathElemPrefix(absPath, protoPrefix) + // make the path absolute, and a schema path. + pp := util.TrimGNMIPathElemPrefix(absPath, protoPrefix) - switch directOnly { - case true: - if len(pp.GetElem()) == 1 { + switch directOnly { + case true: + if len(pp.GetElem()) == 1 { + directCh[pp] = v + } + // TODO(robjs): it'd be good to have something here that tells us whether we are in + // a compressed schema. Potentially we should add something to the generated protobuf + // as a fileoption that would give us this indication. + if len(pp.Elem) == 2 { + if pp.Elem[len(pp.Elem)-2].Name == "config" || pp.Elem[len(pp.Elem)-2].Name == "state" { directCh[pp] = v } - // TODO(robjs): it'd be good to have something here that tells us whether we are in - // a compressed schema. Potentially we should add something to the generated protobuf - // as a fileoption that would give us this indication. - if len(pp.Elem) == 2 { - if pp.Elem[len(pp.Elem)-2].Name == "config" || pp.Elem[len(pp.Elem)-2].Name == "state" { - directCh[pp] = v - } - } - case false: - directCh[pp] = v } + case false: + directCh[pp] = v } - return directCh, nil } + return directCh, nil +} +func protoFromPathsInternal(p proto.Message, vals map[*gpb.Path]any, valPrefix, protoPrefix *gpb.Path, ignoreExtras bool) error { // It is safe for us to call findChldren setting mustBeChildren to true since we are in one of two cases: // // * the first iteration through the function, at which point we expect that vals can only @@ -612,11 +620,12 @@ func protoFromPathsInternal(p proto.Message, vals map[*gpb.Path]any, valPrefix, if len(directCh) != 0 { for _, ap := range annotatedPath { - if !util.PathMatchesPathElemPrefix(ap, protoPrefix) { + trimmedPrefix := schemaPath(protoPrefix) + if !util.PathMatchesPathElemPrefix(ap, trimmedPrefix) { rangeErr = fmt.Errorf("annotation %s does not match the supplied prefix %s", ap, protoPrefix) return false } - trimmedAP := util.TrimGNMIPathElemPrefix(ap, protoPrefix) + trimmedAP := util.TrimGNMIPathElemPrefix(ap, trimmedPrefix) // Map the values that we have that a direct children of this message. for chp, chv := range directCh { @@ -657,7 +666,23 @@ func protoFromPathsInternal(p proto.Message, vals map[*gpb.Path]any, valPrefix, if fd.Kind() == protoreflect.MessageKind { switch { case fd.IsList(): - // TODO(robjs): Support mapping these fields -- currently we silently drop them for backwards compatibility. + leaflist, leaflistunion, err := annotatedYANGFieldInfo(fd) + if err != nil { + rangeErr = fmt.Errorf("cannot extract field information for %s, %v", fd.FullName(), err) + } + switch { + case leaflist, leaflistunion: + // TODO(robjs): Support these fields, silently dropped for backwards compatibility. + default: + // This is a YANG list field which is a repeated within a protobuf. We need to extract the + // keys from this message and create a list in the entry. + members, err := createListField(p, fd, annotatedPath[0], valPrefix, protoPrefix, vals, ignoreExtras) + if err != nil { + rangeErr = err + return false + } + m.Set(fd, members) + } case fd.IsMap(): rangeErr = fmt.Errorf("map fields are not supported in mapped protobufs at field %s", fd.FullName()) return false @@ -704,6 +729,153 @@ func protoFromPathsInternal(p proto.Message, vals map[*gpb.Path]any, valPrefix, return nil } +// createListField creates the entries of the repeated field fd within the protobuf message m, mapping the values within the val map. +// valPrefix specifies the prefix to be applied to the paths within the vals map, protoPrefix specifies the prefix for the protobuf +// message (if it is not the root), and fieldPath specifies the path to the field that is being mapped. ignoreExtras indicates whether +// extra paths that do not exist in the message should be treated as errors. +func createListField(m proto.Message, fd protoreflect.FieldDescriptor, fieldPath, valPrefix, protoPrefix *gpb.Path, vals map[*gpb.Path]any, ignoreExtras bool) (protoreflect.Value, error) { + keys := []map[string]string{} + keyPaths := []*gpb.Path{} + + // We need to identify the keys that are within the list, as well as the data tree paths + // that they correspond to. We walk through the supplied values to determine which to process. + for p := range vals { + // Make the paths within the vals map absolute according to the supplied valPrefix. + absPath := &gpb.Path{ + Elem: append(append([]*gpb.PathElem{}, valPrefix.Elem...), p.Elem...), + } + // Since the fieldPath is a schema path, then we need to compare just schema paths + // to avoid comparing the keys. + if !util.PathMatchesPathElemPrefix(schemaPath(absPath), schemaPath(fieldPath)) { + continue + } + // The key of the list is in the last element of the absolute path in the values map (the values + // map MUST contain data tree paths, since it is telling us list values to unmarshal). + k := absPath.Elem[len(fieldPath.Elem)-1] + // If the last element doesn't have a key, then we have not correctly found the list. + if len(k.Key) == 0 { + return protoreflect.Value{}, fmt.Errorf("invalid list data field path %s: does not have key values populated", fieldPath) + } + + // Find the parts of the path that are not the list -- we assume that this is 2 elements since + // we are in a compressed schema. + // TODO(robjs): Currently, this may report incorrectly in an uncompressed schema, but we don't have + // a signal to indicate this. One needs to be added to the generated protobufs. + keyPath := &gpb.Path{ + Elem: append(append([]*gpb.PathElem{}, protoPrefix.Elem...), absPath.Elem[len(protoPrefix.Elem):len(protoPrefix.Elem)+2]...), + } + var alreadySeen bool + for _, ek := range keys { + if reflect.DeepEqual(ek, k.Key) { + alreadySeen = true + break + } + } + if !alreadySeen { + keys = append(keys, k.Key) + keyPaths = append(keyPaths, keyPath) + } + } + + le := m.ProtoReflect().NewField(fd).List() + for i, key := range keys { + listElemChildren, err := findChildren(vals, valPrefix, keyPaths[i], false, false) + if err != nil { + return protoreflect.Value{}, fmt.Errorf("logic error, error returned from extracting list member children, %v", err) + } + + // We now need to create the "XXXKey" message, and populate the key values, subsequent values are then populated + // into the one protobuf message field. + childMsgEmpty := le.NewElement().Message() + childMsgTarget := le.NewElement().Message() + + // Walk through the fields of the XXXKey message that we just created. We use the childMsgEmpty here so that we + // don't change the message whilst iterating which causes us to revisit that field. We set the values in + // the childMsgTarget message. + var retErr error + + // Store the key values that we received, to make sure that they are mapped during iteration + // through the protobuf fields. + remainingKeys := map[string]bool{} + for n := range key { + remainingKeys[n] = true + } + unpopRange{childMsgEmpty}.Range(func(fd protoreflect.FieldDescriptor, v protoreflect.Value) bool { + // We have one field that is a message in a key message, which is the payload. The remaining fields are the keys. + switch fd.Kind() { + case protoreflect.MessageKind: + m := childMsgTarget.NewField(fd).Message() + // We must ignore extra fields from this point in the recursion, because keys map to fields that + // are not present in the generated protobuf. + if err := protoFromPathsInternal(m.Interface(), listElemChildren, keyPaths[i], keyPaths[i], true); err != nil { + retErr = err + return false + } + childMsgTarget.Set(fd, protoreflect.ValueOfMessage(m)) + default: + paths, err := annotatedSchemaPath(fd) + if err != nil { + retErr = err + return false + } + + var keyName string + for _, p := range paths { + keyName = p.Elem[len(p.Elem)-1].Name + break + } + if _, ok := key[keyName]; !ok { + retErr = fmt.Errorf("field %s, missing key %s, got keys: %v", fd.FullName(), keyName, key) + return false + } + remainingKeys[keyName] = false + pv, err := listKeyAsProtoValue(fd, key[keyName]) + if err != nil { + retErr = fmt.Errorf("field %s, %v", fd.FullName(), err) + return false + } + childMsgTarget.Set(fd, pv) + } + + return true + }) + if retErr != nil { + return protoreflect.Value{}, fmt.Errorf("field %s, %v", fd.FullName(), retErr) + } + + unmappedKeys := []string{} + for k, v := range remainingKeys { + if v { + unmappedKeys = append(unmappedKeys, k) + } + } + if len(unmappedKeys) != 0 { + return protoreflect.Value{}, fmt.Errorf("field %s, received additional keys that are not in the schema, %v", fd.FullName(), unmappedKeys) + } + + le.Append(protoreflect.ValueOfMessage(childMsgTarget)) + } + + return protoreflect.ValueOfList(le), nil +} + +// listKeyAsProtoValue converts the value of a list key (represented as a string) into a protoreflect.Value that can be +// used to set a scalar protobuf field. +func listKeyAsProtoValue(fd protoreflect.FieldDescriptor, val string) (protoreflect.Value, error) { + switch fd.Kind() { + case protoreflect.Uint64Kind: + v, err := strconv.ParseUint(val, 10, 64) + if err != nil { + return protoreflect.Value{}, fmt.Errorf("invalid uint64 value %v, err: %v", val, err) + } + return protoreflect.ValueOfUint64(v), nil + case protoreflect.StringKind: + return protoreflect.ValueOfString(val), nil + default: + return protoreflect.Value{}, fmt.Errorf("unsupported or invalid kind %v", fd.Kind()) + } +} + // hasIgnoreExtraPaths checks whether the supplied opts slice contains the // ignoreExtraPaths option. func hasIgnoreExtraPaths(opts []UnmapOpt) bool { diff --git a/protomap/proto_test.go b/protomap/proto_test.go index ec4d70e2..7b141e34 100644 --- a/protomap/proto_test.go +++ b/protomap/proto_test.go @@ -730,6 +730,102 @@ func TestProtoFromPaths(t *testing.T) { }, }, }, + }, { + desc: "list item - one entry", + inProto: &epb.Root{}, + inVals: map[*gpb.Path]any{ + mustPath("/interfaces/interface[name=eth0]/config/description"): "hello-world", + }, + wantProto: &epb.Root{ + Interface: []*epb.Root_InterfaceKey{{ + Name: "eth0", + Interface: &epb.Interface{ + Description: &wpb.StringValue{Value: "hello-world"}, + }, + }}, + }, + }, { + desc: "list item - two entries", + inProto: &epb.Root{}, + inVals: map[*gpb.Path]any{ + mustPath("/interfaces/interface[name=eth0]/config/description"): "hello-world", + mustPath("/interfaces/interface[name=eth1]/config/description"): "hello-mars", + }, + wantProto: &epb.Root{ + Interface: []*epb.Root_InterfaceKey{{ + Name: "eth0", + Interface: &epb.Interface{ + Description: &wpb.StringValue{Value: "hello-world"}, + }, + }, { + Name: "eth1", + Interface: &epb.Interface{ + Description: &wpb.StringValue{Value: "hello-mars"}, + }, + }}, + }, + }, { + desc: "nested list - one entry", + inProto: &epb.Root{}, + inVals: map[*gpb.Path]any{ + mustPath("/interfaces/interface[name=eth0]/config/description"): "int", + mustPath("/interfaces/interface[name=eth0]/subinterfaces/subinterface[index=42]/config/description"): "subint", + }, + wantProto: &epb.Root{ + Interface: []*epb.Root_InterfaceKey{{ + Name: "eth0", + Interface: &epb.Interface{ + Description: &wpb.StringValue{Value: "int"}, + Subinterface: []*epb.Interface_SubinterfaceKey{{ + Index: 42, + Subinterface: &epb.Subinterface{ + Description: &wpb.StringValue{Value: "subint"}, + }, + }}, + }, + }}, + }, + }, { + desc: "nested list - multiple entries", + inProto: &epb.Root{}, + inVals: map[*gpb.Path]any{ + mustPath("/interfaces/interface[name=eth0]/config/description"): "int", + mustPath("/interfaces/interface[name=eth0]/subinterfaces/subinterface[index=42]/config/description"): "subint42", + mustPath("/interfaces/interface[name=eth0]/subinterfaces/subinterface[index=84]/config/description"): "subint84", + }, + wantProto: &epb.Root{ + Interface: []*epb.Root_InterfaceKey{{ + Name: "eth0", + Interface: &epb.Interface{ + Description: &wpb.StringValue{Value: "int"}, + Subinterface: []*epb.Interface_SubinterfaceKey{{ + Index: 42, + Subinterface: &epb.Subinterface{ + Description: &wpb.StringValue{Value: "subint42"}, + }, + }, { + Index: 84, + Subinterface: &epb.Subinterface{ + Description: &wpb.StringValue{Value: "subint84"}, + }, + }}, + }, + }}, + }, + }, { + desc: "single list - incorrect key specified", + inProto: &epb.Root{}, + inVals: map[*gpb.Path]any{ + mustPath("/interfaces/interface[notkey=eth0]/config/description"): "hello-world", + }, + wantErrSubstring: "missing key", + }, { + desc: "single list - additional key specified", + inProto: &epb.Root{}, + inVals: map[*gpb.Path]any{ + mustPath("/interfaces/interface[name=eth0][type=ETHERNET]/config/description"): "invalid", + }, + wantErrSubstring: "received additional keys", }} for _, tt := range tests { @@ -742,7 +838,11 @@ func TestProtoFromPaths(t *testing.T) { return } - if diff := cmp.Diff(tt.inProto, tt.wantProto, protocmp.Transform()); diff != "" { + if diff := cmp.Diff(tt.inProto, tt.wantProto, + protocmp.Transform(), + protocmp.SortRepeatedFields(&epb.Root{}, "interface"), + protocmp.SortRepeatedFields(&epb.Interface{}, "subinterface"), + ); diff != "" { t.Fatalf("did not get expected results, diff(-got,+want):\n%s", diff) } }) diff --git a/protomap/testdata/exschemapath/exschemapath.pb.go b/protomap/testdata/exschemapath/exschemapath.pb.go index 119c220a..61582332 100644 --- a/protomap/testdata/exschemapath/exschemapath.pb.go +++ b/protomap/testdata/exschemapath/exschemapath.pb.go @@ -134,7 +134,8 @@ type Interface struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Description *ywrapper.StringValue `protobuf:"bytes,1,opt,name=description,proto3" json:"description,omitempty"` + Description *ywrapper.StringValue `protobuf:"bytes,1,opt,name=description,proto3" json:"description,omitempty"` + Subinterface []*Interface_SubinterfaceKey `protobuf:"bytes,42,rep,name=subinterface,proto3" json:"subinterface,omitempty"` } func (x *Interface) Reset() { @@ -176,6 +177,13 @@ func (x *Interface) GetDescription() *ywrapper.StringValue { return nil } +func (x *Interface) GetSubinterface() []*Interface_SubinterfaceKey { + if x != nil { + return x.Subinterface + } + return nil +} + type System struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -223,6 +231,53 @@ func (x *System) GetHostname() *ywrapper.StringValue { return nil } +type Subinterface struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Description *ywrapper.StringValue `protobuf:"bytes,1,opt,name=description,proto3" json:"description,omitempty"` +} + +func (x *Subinterface) Reset() { + *x = Subinterface{} + if protoimpl.UnsafeEnabled { + mi := &file_exschemapath_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Subinterface) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Subinterface) ProtoMessage() {} + +func (x *Subinterface) ProtoReflect() protoreflect.Message { + mi := &file_exschemapath_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 Subinterface.ProtoReflect.Descriptor instead. +func (*Subinterface) Descriptor() ([]byte, []int) { + return file_exschemapath_proto_rawDescGZIP(), []int{3} +} + +func (x *Subinterface) GetDescription() *ywrapper.StringValue { + if x != nil { + return x.Description + } + return nil +} + type ExampleMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -257,7 +312,7 @@ type ExampleMessage struct { func (x *ExampleMessage) Reset() { *x = ExampleMessage{} if protoimpl.UnsafeEnabled { - mi := &file_exschemapath_proto_msgTypes[3] + mi := &file_exschemapath_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -270,7 +325,7 @@ func (x *ExampleMessage) String() string { func (*ExampleMessage) ProtoMessage() {} func (x *ExampleMessage) ProtoReflect() protoreflect.Message { - mi := &file_exschemapath_proto_msgTypes[3] + mi := &file_exschemapath_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -283,7 +338,7 @@ func (x *ExampleMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use ExampleMessage.ProtoReflect.Descriptor instead. func (*ExampleMessage) Descriptor() ([]byte, []int) { - return file_exschemapath_proto_rawDescGZIP(), []int{3} + return file_exschemapath_proto_rawDescGZIP(), []int{4} } func (x *ExampleMessage) GetBo() *ywrapper.BoolValue { @@ -469,7 +524,7 @@ type ExampleNestedMessage struct { func (x *ExampleNestedMessage) Reset() { *x = ExampleNestedMessage{} if protoimpl.UnsafeEnabled { - mi := &file_exschemapath_proto_msgTypes[4] + mi := &file_exschemapath_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -482,7 +537,7 @@ func (x *ExampleNestedMessage) String() string { func (*ExampleNestedMessage) ProtoMessage() {} func (x *ExampleNestedMessage) ProtoReflect() protoreflect.Message { - mi := &file_exschemapath_proto_msgTypes[4] + mi := &file_exschemapath_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -495,7 +550,7 @@ func (x *ExampleNestedMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use ExampleNestedMessage.ProtoReflect.Descriptor instead. func (*ExampleNestedMessage) Descriptor() ([]byte, []int) { - return file_exschemapath_proto_rawDescGZIP(), []int{4} + return file_exschemapath_proto_rawDescGZIP(), []int{5} } func (x *ExampleNestedMessage) GetOne() *ywrapper.StringValue { @@ -531,7 +586,7 @@ type ExampleNestedGrandchild struct { func (x *ExampleNestedGrandchild) Reset() { *x = ExampleNestedGrandchild{} if protoimpl.UnsafeEnabled { - mi := &file_exschemapath_proto_msgTypes[5] + mi := &file_exschemapath_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -544,7 +599,7 @@ func (x *ExampleNestedGrandchild) String() string { func (*ExampleNestedGrandchild) ProtoMessage() {} func (x *ExampleNestedGrandchild) ProtoReflect() protoreflect.Message { - mi := &file_exschemapath_proto_msgTypes[5] + mi := &file_exschemapath_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -557,7 +612,7 @@ func (x *ExampleNestedGrandchild) ProtoReflect() protoreflect.Message { // Deprecated: Use ExampleNestedGrandchild.ProtoReflect.Descriptor instead. func (*ExampleNestedGrandchild) Descriptor() ([]byte, []int) { - return file_exschemapath_proto_rawDescGZIP(), []int{5} + return file_exschemapath_proto_rawDescGZIP(), []int{6} } func (x *ExampleNestedGrandchild) GetOne() *ywrapper.StringValue { @@ -587,7 +642,7 @@ type ExampleUnion struct { func (x *ExampleUnion) Reset() { *x = ExampleUnion{} if protoimpl.UnsafeEnabled { - mi := &file_exschemapath_proto_msgTypes[6] + mi := &file_exschemapath_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -600,7 +655,7 @@ func (x *ExampleUnion) String() string { func (*ExampleUnion) ProtoMessage() {} func (x *ExampleUnion) ProtoReflect() protoreflect.Message { - mi := &file_exschemapath_proto_msgTypes[6] + mi := &file_exschemapath_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -613,7 +668,7 @@ func (x *ExampleUnion) ProtoReflect() protoreflect.Message { // Deprecated: Use ExampleUnion.ProtoReflect.Descriptor instead. func (*ExampleUnion) Descriptor() ([]byte, []int) { - return file_exschemapath_proto_rawDescGZIP(), []int{6} + return file_exschemapath_proto_rawDescGZIP(), []int{7} } func (x *ExampleUnion) GetStr() string { @@ -648,7 +703,7 @@ type ExampleMessageChild struct { func (x *ExampleMessageChild) Reset() { *x = ExampleMessageChild{} if protoimpl.UnsafeEnabled { - mi := &file_exschemapath_proto_msgTypes[7] + mi := &file_exschemapath_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -661,7 +716,7 @@ func (x *ExampleMessageChild) String() string { func (*ExampleMessageChild) ProtoMessage() {} func (x *ExampleMessageChild) ProtoReflect() protoreflect.Message { - mi := &file_exschemapath_proto_msgTypes[7] + mi := &file_exschemapath_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -674,7 +729,7 @@ func (x *ExampleMessageChild) ProtoReflect() protoreflect.Message { // Deprecated: Use ExampleMessageChild.ProtoReflect.Descriptor instead. func (*ExampleMessageChild) Descriptor() ([]byte, []int) { - return file_exschemapath_proto_rawDescGZIP(), []int{7} + return file_exschemapath_proto_rawDescGZIP(), []int{8} } func (x *ExampleMessageChild) GetStr() *ywrapper.StringValue { @@ -696,7 +751,7 @@ type ExampleMessageKey struct { func (x *ExampleMessageKey) Reset() { *x = ExampleMessageKey{} if protoimpl.UnsafeEnabled { - mi := &file_exschemapath_proto_msgTypes[8] + mi := &file_exschemapath_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -709,7 +764,7 @@ func (x *ExampleMessageKey) String() string { func (*ExampleMessageKey) ProtoMessage() {} func (x *ExampleMessageKey) ProtoReflect() protoreflect.Message { - mi := &file_exschemapath_proto_msgTypes[8] + mi := &file_exschemapath_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -722,7 +777,7 @@ func (x *ExampleMessageKey) ProtoReflect() protoreflect.Message { // Deprecated: Use ExampleMessageKey.ProtoReflect.Descriptor instead. func (*ExampleMessageKey) Descriptor() ([]byte, []int) { - return file_exschemapath_proto_rawDescGZIP(), []int{8} + return file_exschemapath_proto_rawDescGZIP(), []int{9} } func (x *ExampleMessageKey) GetSingleKey() string { @@ -751,7 +806,7 @@ type ExampleMessageListMember struct { func (x *ExampleMessageListMember) Reset() { *x = ExampleMessageListMember{} if protoimpl.UnsafeEnabled { - mi := &file_exschemapath_proto_msgTypes[9] + mi := &file_exschemapath_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -764,7 +819,7 @@ func (x *ExampleMessageListMember) String() string { func (*ExampleMessageListMember) ProtoMessage() {} func (x *ExampleMessageListMember) ProtoReflect() protoreflect.Message { - mi := &file_exschemapath_proto_msgTypes[9] + mi := &file_exschemapath_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -777,7 +832,7 @@ func (x *ExampleMessageListMember) ProtoReflect() protoreflect.Message { // Deprecated: Use ExampleMessageListMember.ProtoReflect.Descriptor instead. func (*ExampleMessageListMember) Descriptor() ([]byte, []int) { - return file_exschemapath_proto_rawDescGZIP(), []int{9} + return file_exschemapath_proto_rawDescGZIP(), []int{10} } func (x *ExampleMessageListMember) GetStr() *ywrapper.StringValue { @@ -806,7 +861,7 @@ type NestedListKey struct { func (x *NestedListKey) Reset() { *x = NestedListKey{} if protoimpl.UnsafeEnabled { - mi := &file_exschemapath_proto_msgTypes[10] + mi := &file_exschemapath_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -819,7 +874,7 @@ func (x *NestedListKey) String() string { func (*NestedListKey) ProtoMessage() {} func (x *NestedListKey) ProtoReflect() protoreflect.Message { - mi := &file_exschemapath_proto_msgTypes[10] + mi := &file_exschemapath_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -832,7 +887,7 @@ func (x *NestedListKey) ProtoReflect() protoreflect.Message { // Deprecated: Use NestedListKey.ProtoReflect.Descriptor instead. func (*NestedListKey) Descriptor() ([]byte, []int) { - return file_exschemapath_proto_rawDescGZIP(), []int{10} + return file_exschemapath_proto_rawDescGZIP(), []int{11} } func (x *NestedListKey) GetKeyOne() string { @@ -860,7 +915,7 @@ type NestedListMember struct { func (x *NestedListMember) Reset() { *x = NestedListMember{} if protoimpl.UnsafeEnabled { - mi := &file_exschemapath_proto_msgTypes[11] + mi := &file_exschemapath_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -873,7 +928,7 @@ func (x *NestedListMember) String() string { func (*NestedListMember) ProtoMessage() {} func (x *NestedListMember) ProtoReflect() protoreflect.Message { - mi := &file_exschemapath_proto_msgTypes[11] + mi := &file_exschemapath_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -886,7 +941,7 @@ func (x *NestedListMember) ProtoReflect() protoreflect.Message { // Deprecated: Use NestedListMember.ProtoReflect.Descriptor instead. func (*NestedListMember) Descriptor() ([]byte, []int) { - return file_exschemapath_proto_rawDescGZIP(), []int{11} + return file_exschemapath_proto_rawDescGZIP(), []int{12} } func (x *NestedListMember) GetStr() *ywrapper.StringValue { @@ -909,7 +964,7 @@ type ExampleMessageMultiKey struct { func (x *ExampleMessageMultiKey) Reset() { *x = ExampleMessageMultiKey{} if protoimpl.UnsafeEnabled { - mi := &file_exschemapath_proto_msgTypes[12] + mi := &file_exschemapath_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -922,7 +977,7 @@ func (x *ExampleMessageMultiKey) String() string { func (*ExampleMessageMultiKey) ProtoMessage() {} func (x *ExampleMessageMultiKey) ProtoReflect() protoreflect.Message { - mi := &file_exschemapath_proto_msgTypes[12] + mi := &file_exschemapath_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -935,7 +990,7 @@ func (x *ExampleMessageMultiKey) ProtoReflect() protoreflect.Message { // Deprecated: Use ExampleMessageMultiKey.ProtoReflect.Descriptor instead. func (*ExampleMessageMultiKey) Descriptor() ([]byte, []int) { - return file_exschemapath_proto_rawDescGZIP(), []int{12} + return file_exschemapath_proto_rawDescGZIP(), []int{13} } func (x *ExampleMessageMultiKey) GetIndex() uint32 { @@ -970,7 +1025,7 @@ type MultiKeyListMember struct { func (x *MultiKeyListMember) Reset() { *x = MultiKeyListMember{} if protoimpl.UnsafeEnabled { - mi := &file_exschemapath_proto_msgTypes[13] + mi := &file_exschemapath_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -983,7 +1038,7 @@ func (x *MultiKeyListMember) String() string { func (*MultiKeyListMember) ProtoMessage() {} func (x *MultiKeyListMember) ProtoReflect() protoreflect.Message { - mi := &file_exschemapath_proto_msgTypes[13] + mi := &file_exschemapath_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -996,7 +1051,7 @@ func (x *MultiKeyListMember) ProtoReflect() protoreflect.Message { // Deprecated: Use MultiKeyListMember.ProtoReflect.Descriptor instead. func (*MultiKeyListMember) Descriptor() ([]byte, []int) { - return file_exschemapath_proto_rawDescGZIP(), []int{13} + return file_exschemapath_proto_rawDescGZIP(), []int{14} } func (x *MultiKeyListMember) GetChild() *ywrapper.StringValue { @@ -1027,7 +1082,7 @@ type InvalidMessage struct { func (x *InvalidMessage) Reset() { *x = InvalidMessage{} if protoimpl.UnsafeEnabled { - mi := &file_exschemapath_proto_msgTypes[14] + mi := &file_exschemapath_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1040,7 +1095,7 @@ func (x *InvalidMessage) String() string { func (*InvalidMessage) ProtoMessage() {} func (x *InvalidMessage) ProtoReflect() protoreflect.Message { - mi := &file_exschemapath_proto_msgTypes[14] + mi := &file_exschemapath_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1053,7 +1108,7 @@ func (x *InvalidMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use InvalidMessage.ProtoReflect.Descriptor instead. func (*InvalidMessage) Descriptor() ([]byte, []int) { - return file_exschemapath_proto_rawDescGZIP(), []int{14} + return file_exschemapath_proto_rawDescGZIP(), []int{15} } func (x *InvalidMessage) GetMapField() map[string]string { @@ -1144,7 +1199,7 @@ type InvalidAnnotationMessage struct { func (x *InvalidAnnotationMessage) Reset() { *x = InvalidAnnotationMessage{} if protoimpl.UnsafeEnabled { - mi := &file_exschemapath_proto_msgTypes[15] + mi := &file_exschemapath_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1157,7 +1212,7 @@ func (x *InvalidAnnotationMessage) String() string { func (*InvalidAnnotationMessage) ProtoMessage() {} func (x *InvalidAnnotationMessage) ProtoReflect() protoreflect.Message { - mi := &file_exschemapath_proto_msgTypes[15] + mi := &file_exschemapath_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1170,7 +1225,7 @@ func (x *InvalidAnnotationMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use InvalidAnnotationMessage.ProtoReflect.Descriptor instead. func (*InvalidAnnotationMessage) Descriptor() ([]byte, []int) { - return file_exschemapath_proto_rawDescGZIP(), []int{15} + return file_exschemapath_proto_rawDescGZIP(), []int{16} } func (x *InvalidAnnotationMessage) GetNoAnnotation() string { @@ -1191,7 +1246,7 @@ type BadMessageKeyTwo struct { func (x *BadMessageKeyTwo) Reset() { *x = BadMessageKeyTwo{} if protoimpl.UnsafeEnabled { - mi := &file_exschemapath_proto_msgTypes[16] + mi := &file_exschemapath_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1204,7 +1259,7 @@ func (x *BadMessageKeyTwo) String() string { func (*BadMessageKeyTwo) ProtoMessage() {} func (x *BadMessageKeyTwo) ProtoReflect() protoreflect.Message { - mi := &file_exschemapath_proto_msgTypes[16] + mi := &file_exschemapath_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1217,7 +1272,7 @@ func (x *BadMessageKeyTwo) ProtoReflect() protoreflect.Message { // Deprecated: Use BadMessageKeyTwo.ProtoReflect.Descriptor instead. func (*BadMessageKeyTwo) Descriptor() ([]byte, []int) { - return file_exschemapath_proto_rawDescGZIP(), []int{16} + return file_exschemapath_proto_rawDescGZIP(), []int{17} } func (x *BadMessageKeyTwo) GetKey() string { @@ -1238,7 +1293,7 @@ type BadMessageKey struct { func (x *BadMessageKey) Reset() { *x = BadMessageKey{} if protoimpl.UnsafeEnabled { - mi := &file_exschemapath_proto_msgTypes[17] + mi := &file_exschemapath_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1251,7 +1306,7 @@ func (x *BadMessageKey) String() string { func (*BadMessageKey) ProtoMessage() {} func (x *BadMessageKey) ProtoReflect() protoreflect.Message { - mi := &file_exschemapath_proto_msgTypes[17] + mi := &file_exschemapath_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1264,7 +1319,7 @@ func (x *BadMessageKey) ProtoReflect() protoreflect.Message { // Deprecated: Use BadMessageKey.ProtoReflect.Descriptor instead. func (*BadMessageKey) Descriptor() ([]byte, []int) { - return file_exschemapath_proto_rawDescGZIP(), []int{17} + return file_exschemapath_proto_rawDescGZIP(), []int{18} } func (x *BadMessageKey) GetBadKeyType() float32 { @@ -1286,7 +1341,7 @@ type BadMessageMember struct { func (x *BadMessageMember) Reset() { *x = BadMessageMember{} if protoimpl.UnsafeEnabled { - mi := &file_exschemapath_proto_msgTypes[18] + mi := &file_exschemapath_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1299,7 +1354,7 @@ func (x *BadMessageMember) String() string { func (*BadMessageMember) ProtoMessage() {} func (x *BadMessageMember) ProtoReflect() protoreflect.Message { - mi := &file_exschemapath_proto_msgTypes[18] + mi := &file_exschemapath_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1312,7 +1367,7 @@ func (x *BadMessageMember) ProtoReflect() protoreflect.Message { // Deprecated: Use BadMessageMember.ProtoReflect.Descriptor instead. func (*BadMessageMember) Descriptor() ([]byte, []int) { - return file_exschemapath_proto_rawDescGZIP(), []int{18} + return file_exschemapath_proto_rawDescGZIP(), []int{19} } func (x *BadMessageMember) GetKey() string { @@ -1340,7 +1395,7 @@ type BadKeyPathMessage struct { func (x *BadKeyPathMessage) Reset() { *x = BadKeyPathMessage{} if protoimpl.UnsafeEnabled { - mi := &file_exschemapath_proto_msgTypes[19] + mi := &file_exschemapath_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1353,7 +1408,7 @@ func (x *BadKeyPathMessage) String() string { func (*BadKeyPathMessage) ProtoMessage() {} func (x *BadKeyPathMessage) ProtoReflect() protoreflect.Message { - mi := &file_exschemapath_proto_msgTypes[19] + mi := &file_exschemapath_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1366,7 +1421,7 @@ func (x *BadKeyPathMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use BadKeyPathMessage.ProtoReflect.Descriptor instead. func (*BadKeyPathMessage) Descriptor() ([]byte, []int) { - return file_exschemapath_proto_rawDescGZIP(), []int{19} + return file_exschemapath_proto_rawDescGZIP(), []int{20} } func (x *BadKeyPathMessage) GetKey() string { @@ -1387,7 +1442,7 @@ type InvalidKeyPathKey struct { func (x *InvalidKeyPathKey) Reset() { *x = InvalidKeyPathKey{} if protoimpl.UnsafeEnabled { - mi := &file_exschemapath_proto_msgTypes[20] + mi := &file_exschemapath_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1400,7 +1455,7 @@ func (x *InvalidKeyPathKey) String() string { func (*InvalidKeyPathKey) ProtoMessage() {} func (x *InvalidKeyPathKey) ProtoReflect() protoreflect.Message { - mi := &file_exschemapath_proto_msgTypes[20] + mi := &file_exschemapath_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1413,7 +1468,7 @@ func (x *InvalidKeyPathKey) ProtoReflect() protoreflect.Message { // Deprecated: Use InvalidKeyPathKey.ProtoReflect.Descriptor instead. func (*InvalidKeyPathKey) Descriptor() ([]byte, []int) { - return file_exschemapath_proto_rawDescGZIP(), []int{20} + return file_exschemapath_proto_rawDescGZIP(), []int{21} } func (x *InvalidKeyPathKey) GetKey() string { @@ -1435,7 +1490,7 @@ type Root_InterfaceKey struct { func (x *Root_InterfaceKey) Reset() { *x = Root_InterfaceKey{} if protoimpl.UnsafeEnabled { - mi := &file_exschemapath_proto_msgTypes[21] + mi := &file_exschemapath_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1448,7 +1503,7 @@ func (x *Root_InterfaceKey) String() string { func (*Root_InterfaceKey) ProtoMessage() {} func (x *Root_InterfaceKey) ProtoReflect() protoreflect.Message { - mi := &file_exschemapath_proto_msgTypes[21] + mi := &file_exschemapath_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1478,6 +1533,61 @@ func (x *Root_InterfaceKey) GetInterface() *Interface { return nil } +type Interface_SubinterfaceKey struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Index uint64 `protobuf:"varint,1,opt,name=index,proto3" json:"index,omitempty"` + Subinterface *Subinterface `protobuf:"bytes,2,opt,name=subinterface,proto3" json:"subinterface,omitempty"` +} + +func (x *Interface_SubinterfaceKey) Reset() { + *x = Interface_SubinterfaceKey{} + if protoimpl.UnsafeEnabled { + mi := &file_exschemapath_proto_msgTypes[23] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Interface_SubinterfaceKey) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Interface_SubinterfaceKey) ProtoMessage() {} + +func (x *Interface_SubinterfaceKey) ProtoReflect() protoreflect.Message { + mi := &file_exschemapath_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 Interface_SubinterfaceKey.ProtoReflect.Descriptor instead. +func (*Interface_SubinterfaceKey) Descriptor() ([]byte, []int) { + return file_exschemapath_proto_rawDescGZIP(), []int{1, 0} +} + +func (x *Interface_SubinterfaceKey) GetIndex() uint64 { + if x != nil { + return x.Index + } + return 0 +} + +func (x *Interface_SubinterfaceKey) GetSubinterface() *Subinterface { + if x != nil { + return x.Subinterface + } + return nil +} + var File_exschemapath_proto protoreflect.FileDescriptor var file_exschemapath_proto_rawDesc = []byte{ @@ -1489,309 +1599,341 @@ var file_exschemapath_proto_rawDesc = []byte{ 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x30, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x79, 0x67, 0x6f, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x79, - 0x65, 0x78, 0x74, 0x2f, 0x79, 0x65, 0x78, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xae, - 0x02, 0x0a, 0x04, 0x52, 0x6f, 0x6f, 0x74, 0x12, 0x2c, 0x0a, 0x06, 0x73, 0x79, 0x73, 0x74, 0x65, + 0x65, 0x78, 0x74, 0x2f, 0x79, 0x65, 0x78, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xba, + 0x02, 0x0a, 0x04, 0x52, 0x6f, 0x6f, 0x74, 0x12, 0x38, 0x0a, 0x06, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x65, 0x78, 0x73, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x52, 0x06, 0x73, - 0x79, 0x73, 0x74, 0x65, 0x6d, 0x12, 0x5b, 0x0a, 0x09, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, - 0x63, 0x65, 0x18, 0xfa, 0xa7, 0xba, 0xc9, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x65, - 0x78, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x52, 0x6f, 0x6f, 0x74, - 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x42, 0x18, 0x82, - 0x41, 0x15, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x52, 0x09, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, - 0x63, 0x65, 0x1a, 0x9a, 0x01, 0x0a, 0x0c, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, - 0x4b, 0x65, 0x79, 0x12, 0x53, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x3f, 0x82, 0x41, 0x3c, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, - 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x7c, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, - 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x6e, 0x61, - 0x6d, 0x65, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x35, 0x0a, 0x09, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x66, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x65, 0x78, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, - 0x66, 0x61, 0x63, 0x65, 0x52, 0x09, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x22, - 0x71, 0x0a, 0x09, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x12, 0x64, 0x0a, 0x0b, - 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x15, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x72, - 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x2b, 0x82, 0x41, 0x28, 0x2f, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, - 0x63, 0x65, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x22, 0x57, 0x0a, 0x06, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x12, 0x4d, 0x0a, 0x08, - 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, + 0x6d, 0x61, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x42, 0x0a, 0x82, + 0x41, 0x07, 0x2f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x52, 0x06, 0x73, 0x79, 0x73, 0x74, 0x65, + 0x6d, 0x12, 0x5b, 0x0a, 0x09, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x18, 0xfa, + 0xa7, 0xba, 0xc9, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x65, 0x78, 0x73, 0x63, 0x68, + 0x65, 0x6d, 0x61, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x52, 0x6f, 0x6f, 0x74, 0x2e, 0x49, 0x6e, 0x74, + 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x42, 0x18, 0x82, 0x41, 0x15, 0x2f, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, + 0x61, 0x63, 0x65, 0x52, 0x09, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x1a, 0x9a, + 0x01, 0x0a, 0x0c, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x12, + 0x53, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x3f, 0x82, + 0x41, 0x3c, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x6e, + 0x61, 0x6d, 0x65, 0x7c, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x52, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x35, 0x0a, 0x09, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x65, 0x78, 0x73, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, + 0x52, 0x09, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x22, 0xd8, 0x03, 0x0a, 0x09, + 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x12, 0x64, 0x0a, 0x0b, 0x64, 0x65, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x1a, 0x82, 0x41, 0x17, 0x2f, 0x73, 0x79, 0x73, 0x74, 0x65, - 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, - 0x65, 0x52, 0x08, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x81, 0x0b, 0x0a, 0x0e, - 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2d, - 0x0a, 0x02, 0x62, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, - 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, - 0x08, 0x82, 0x41, 0x05, 0x2f, 0x62, 0x6f, 0x6f, 0x6c, 0x52, 0x02, 0x62, 0x6f, 0x12, 0x2f, 0x0a, - 0x02, 0x62, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x79, 0x77, 0x72, 0x61, - 0x70, 0x70, 0x65, 0x72, 0x2e, 0x42, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, - 0x09, 0x82, 0x41, 0x06, 0x2f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x52, 0x02, 0x62, 0x79, 0x12, 0x35, - 0x0a, 0x02, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x79, 0x77, 0x72, - 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x44, 0x65, 0x63, 0x69, 0x6d, 0x61, 0x6c, 0x36, 0x34, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x42, 0x0b, 0x82, 0x41, 0x08, 0x2f, 0x64, 0x65, 0x63, 0x69, 0x6d, 0x61, - 0x6c, 0x52, 0x02, 0x64, 0x65, 0x12, 0x2b, 0x0a, 0x02, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x12, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x49, 0x6e, 0x74, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x07, 0x82, 0x41, 0x04, 0x2f, 0x69, 0x6e, 0x74, 0x52, 0x02, - 0x69, 0x6e, 0x12, 0x33, 0x0a, 0x03, 0x73, 0x74, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x2b, 0x82, 0x41, 0x28, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x80, 0x01, 0x0a, 0x0c, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, + 0x18, 0x2a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x65, 0x78, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2e, + 0x53, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x42, + 0x33, 0x82, 0x41, 0x30, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x66, 0x61, 0x63, 0x65, 0x52, 0x0c, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, + 0x63, 0x65, 0x1a, 0xe1, 0x01, 0x0a, 0x0f, 0x53, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, + 0x61, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x8d, 0x01, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x42, 0x77, 0x82, 0x41, 0x74, 0x2f, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, + 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, + 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x2f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x7c, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, + 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, + 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x52, + 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x3e, 0x0a, 0x0c, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x65, + 0x78, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x53, 0x75, 0x62, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x52, 0x0c, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x22, 0x57, 0x0a, 0x06, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, + 0x12, 0x4d, 0x0a, 0x08, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x53, 0x74, + 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x1a, 0x82, 0x41, 0x17, 0x2f, 0x73, + 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x68, 0x6f, 0x73, + 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x52, 0x08, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x22, + 0x8f, 0x01, 0x0a, 0x0c, 0x53, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, + 0x12, 0x7f, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, + 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x46, 0x82, 0x41, + 0x43, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, + 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, + 0x65, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x22, 0x81, 0x0b, 0x0a, 0x0e, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x12, 0x2d, 0x0a, 0x02, 0x62, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x08, 0x82, 0x41, 0x05, 0x2f, 0x62, 0x6f, 0x6f, 0x6c, 0x52, + 0x02, 0x62, 0x6f, 0x12, 0x2f, 0x0a, 0x02, 0x62, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x14, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x42, 0x79, 0x74, 0x65, 0x73, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x09, 0x82, 0x41, 0x06, 0x2f, 0x62, 0x79, 0x74, 0x65, 0x73, + 0x52, 0x02, 0x62, 0x79, 0x12, 0x35, 0x0a, 0x02, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x18, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x44, 0x65, 0x63, 0x69, + 0x6d, 0x61, 0x6c, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x0b, 0x82, 0x41, 0x08, 0x2f, + 0x64, 0x65, 0x63, 0x69, 0x6d, 0x61, 0x6c, 0x52, 0x02, 0x64, 0x65, 0x12, 0x2b, 0x0a, 0x02, 0x69, + 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, + 0x65, 0x72, 0x2e, 0x49, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x07, 0x82, 0x41, 0x04, + 0x2f, 0x69, 0x6e, 0x74, 0x52, 0x02, 0x69, 0x6e, 0x12, 0x33, 0x0a, 0x03, 0x73, 0x74, 0x72, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, + 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x0a, 0x82, 0x41, + 0x07, 0x2f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x03, 0x73, 0x74, 0x72, 0x12, 0x2d, 0x0a, + 0x02, 0x75, 0x69, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, + 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x08, + 0x82, 0x41, 0x05, 0x2f, 0x75, 0x69, 0x6e, 0x74, 0x52, 0x02, 0x75, 0x69, 0x12, 0x3e, 0x0a, 0x02, + 0x65, 0x78, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x65, 0x78, 0x73, 0x63, 0x68, + 0x65, 0x6d, 0x61, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x42, 0x0b, 0x82, 0x41, 0x08, + 0x2f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x02, 0x65, 0x78, 0x12, 0x3e, 0x0a, 0x02, + 0x65, 0x6d, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x65, 0x78, 0x73, 0x63, 0x68, + 0x65, 0x6d, 0x61, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4b, 0x65, 0x79, 0x42, 0x0d, 0x82, 0x41, 0x0a, 0x2f, 0x6c, + 0x69, 0x73, 0x74, 0x2d, 0x6e, 0x61, 0x6d, 0x65, 0x52, 0x02, 0x65, 0x6d, 0x12, 0x4a, 0x0a, 0x05, + 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x65, 0x78, + 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x45, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x4b, 0x65, + 0x79, 0x42, 0x0e, 0x82, 0x41, 0x0b, 0x2f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x2d, 0x6c, 0x69, 0x73, + 0x74, 0x52, 0x05, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x12, 0x33, 0x0a, 0x02, 0x65, 0x6e, 0x18, 0x0a, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, 0x2e, 0x65, 0x78, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x70, + 0x61, 0x74, 0x68, 0x2e, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x42, + 0x08, 0x82, 0x41, 0x05, 0x2f, 0x65, 0x6e, 0x75, 0x6d, 0x52, 0x02, 0x65, 0x6e, 0x12, 0x45, 0x0a, + 0x08, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, - 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x0a, 0x82, 0x41, 0x07, 0x2f, 0x73, 0x74, 0x72, 0x69, - 0x6e, 0x67, 0x52, 0x03, 0x73, 0x74, 0x72, 0x12, 0x2d, 0x0a, 0x02, 0x75, 0x69, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, - 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x08, 0x82, 0x41, 0x05, 0x2f, 0x75, 0x69, - 0x6e, 0x74, 0x52, 0x02, 0x75, 0x69, 0x12, 0x3e, 0x0a, 0x02, 0x65, 0x78, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x65, 0x78, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x70, 0x61, 0x74, - 0x68, 0x2e, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x43, 0x68, 0x69, 0x6c, 0x64, 0x42, 0x0b, 0x82, 0x41, 0x08, 0x2f, 0x6d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x52, 0x02, 0x65, 0x78, 0x12, 0x3e, 0x0a, 0x02, 0x65, 0x6d, 0x18, 0x08, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x65, 0x78, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x70, 0x61, 0x74, - 0x68, 0x2e, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x4b, 0x65, 0x79, 0x42, 0x0d, 0x82, 0x41, 0x0a, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x2d, 0x6e, 0x61, - 0x6d, 0x65, 0x52, 0x02, 0x65, 0x6d, 0x12, 0x4a, 0x0a, 0x05, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x18, - 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x65, 0x78, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x70, 0x61, 0x74, 0x68, 0x2e, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x4b, 0x65, 0x79, 0x42, 0x0e, 0x82, 0x41, 0x0b, - 0x2f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x52, 0x05, 0x6d, 0x75, 0x6c, - 0x74, 0x69, 0x12, 0x33, 0x0a, 0x02, 0x65, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, + 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x12, 0x82, 0x41, 0x0f, 0x2f, 0x73, 0x74, 0x61, 0x74, + 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x52, 0x08, 0x63, 0x6f, 0x6d, 0x70, + 0x72, 0x65, 0x73, 0x73, 0x12, 0x28, 0x0a, 0x09, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x6f, 0x6e, + 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x42, 0x09, 0x82, 0x41, 0x06, 0x2f, 0x6f, 0x6e, 0x65, + 0x6f, 0x66, 0x48, 0x00, 0x52, 0x08, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x4f, 0x6e, 0x65, 0x12, 0x28, + 0x0a, 0x09, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x74, 0x77, 0x6f, 0x18, 0x0d, 0x20, 0x01, 0x28, + 0x04, 0x42, 0x09, 0x82, 0x41, 0x06, 0x2f, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x48, 0x00, 0x52, 0x08, + 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x54, 0x77, 0x6f, 0x12, 0x56, 0x0a, 0x0f, 0x6c, 0x65, 0x61, 0x66, + 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x0e, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x15, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x72, + 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x16, 0x82, 0x41, 0x10, 0x2f, 0x6c, 0x65, + 0x61, 0x66, 0x6c, 0x69, 0x73, 0x74, 0x2d, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0xd8, 0x49, 0x01, + 0x52, 0x0e, 0x6c, 0x65, 0x61, 0x66, 0x6c, 0x69, 0x73, 0x74, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, + 0x12, 0x4e, 0x0a, 0x0d, 0x6c, 0x65, 0x61, 0x66, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x62, 0x6f, 0x6f, + 0x6c, 0x18, 0x10, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, + 0x65, 0x72, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x14, 0x82, 0x41, + 0x0e, 0x2f, 0x6c, 0x65, 0x61, 0x66, 0x6c, 0x69, 0x73, 0x74, 0x2d, 0x62, 0x6f, 0x6f, 0x6c, 0xd8, + 0x49, 0x01, 0x52, 0x0c, 0x6c, 0x65, 0x61, 0x66, 0x6c, 0x69, 0x73, 0x74, 0x42, 0x6f, 0x6f, 0x6c, + 0x12, 0x4a, 0x0a, 0x0c, 0x6c, 0x65, 0x61, 0x66, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x69, 0x6e, 0x74, + 0x18, 0x11, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, + 0x72, 0x2e, 0x49, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x13, 0x82, 0x41, 0x0d, 0x2f, + 0x6c, 0x65, 0x61, 0x66, 0x6c, 0x69, 0x73, 0x74, 0x2d, 0x69, 0x6e, 0x74, 0xd8, 0x49, 0x01, 0x52, + 0x0b, 0x6c, 0x65, 0x61, 0x66, 0x6c, 0x69, 0x73, 0x74, 0x49, 0x6e, 0x74, 0x12, 0x4e, 0x0a, 0x0d, + 0x6c, 0x65, 0x61, 0x66, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x18, 0x12, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, + 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x14, 0x82, 0x41, 0x0e, 0x2f, 0x6c, 0x65, + 0x61, 0x66, 0x6c, 0x69, 0x73, 0x74, 0x2d, 0x75, 0x69, 0x6e, 0x74, 0xd8, 0x49, 0x01, 0x52, 0x0c, + 0x6c, 0x65, 0x61, 0x66, 0x6c, 0x69, 0x73, 0x74, 0x55, 0x69, 0x6e, 0x74, 0x12, 0x52, 0x0a, 0x0e, + 0x6c, 0x65, 0x61, 0x66, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x13, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, + 0x42, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x15, 0x82, 0x41, 0x0f, 0x2f, + 0x6c, 0x65, 0x61, 0x66, 0x6c, 0x69, 0x73, 0x74, 0x2d, 0x62, 0x79, 0x74, 0x65, 0x73, 0xd8, 0x49, + 0x01, 0x52, 0x0d, 0x6c, 0x65, 0x61, 0x66, 0x6c, 0x69, 0x73, 0x74, 0x42, 0x79, 0x74, 0x65, 0x73, + 0x12, 0x62, 0x0a, 0x12, 0x6c, 0x65, 0x61, 0x66, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x64, 0x65, 0x63, + 0x69, 0x6d, 0x61, 0x6c, 0x36, 0x34, 0x18, 0x14, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x79, + 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x44, 0x65, 0x63, 0x69, 0x6d, 0x61, 0x6c, 0x36, + 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x19, 0x82, 0x41, 0x13, 0x2f, 0x6c, 0x65, 0x61, 0x66, + 0x6c, 0x69, 0x73, 0x74, 0x2d, 0x64, 0x65, 0x63, 0x69, 0x6d, 0x61, 0x6c, 0x36, 0x34, 0xd8, 0x49, + 0x01, 0x52, 0x11, 0x6c, 0x65, 0x61, 0x66, 0x6c, 0x69, 0x73, 0x74, 0x44, 0x65, 0x63, 0x69, 0x6d, + 0x61, 0x6c, 0x36, 0x34, 0x12, 0x58, 0x0a, 0x0e, 0x6c, 0x65, 0x61, 0x66, 0x6c, 0x69, 0x73, 0x74, + 0x5f, 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x65, + 0x78, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x45, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x55, 0x6e, 0x69, 0x6f, 0x6e, 0x42, 0x15, 0x82, 0x41, 0x0f, 0x2f, 0x6c, 0x65, + 0x61, 0x66, 0x6c, 0x69, 0x73, 0x74, 0x2d, 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0xe0, 0x49, 0x01, 0x52, + 0x0d, 0x6c, 0x65, 0x61, 0x66, 0x6c, 0x69, 0x73, 0x74, 0x55, 0x6e, 0x69, 0x6f, 0x6e, 0x12, 0x46, + 0x0a, 0x06, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x65, 0x78, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x45, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x08, 0x82, 0x41, 0x05, 0x2f, 0x65, - 0x6e, 0x75, 0x6d, 0x52, 0x02, 0x65, 0x6e, 0x12, 0x45, 0x0a, 0x08, 0x63, 0x6f, 0x6d, 0x70, 0x72, - 0x65, 0x73, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x79, 0x77, 0x72, 0x61, - 0x70, 0x70, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x42, 0x12, 0x82, 0x41, 0x0f, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x70, - 0x72, 0x65, 0x73, 0x73, 0x52, 0x08, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x12, 0x28, - 0x0a, 0x09, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x6f, 0x6e, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x09, 0x82, 0x41, 0x06, 0x2f, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x48, 0x00, 0x52, 0x08, - 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x4f, 0x6e, 0x65, 0x12, 0x28, 0x0a, 0x09, 0x6f, 0x6e, 0x65, 0x6f, - 0x66, 0x5f, 0x74, 0x77, 0x6f, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x04, 0x42, 0x09, 0x82, 0x41, 0x06, - 0x2f, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x48, 0x00, 0x52, 0x08, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x54, - 0x77, 0x6f, 0x12, 0x56, 0x0a, 0x0f, 0x6c, 0x65, 0x61, 0x66, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x73, - 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x79, 0x77, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x42, 0x0a, 0x82, 0x41, 0x07, 0x2f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x52, 0x06, + 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x42, 0x0d, 0x0a, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, + 0x66, 0x69, 0x65, 0x6c, 0x64, 0x22, 0xd7, 0x01, 0x0a, 0x14, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x37, + 0x0a, 0x03, 0x6f, 0x6e, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x42, 0x16, 0x82, 0x41, 0x10, 0x2f, 0x6c, 0x65, 0x61, 0x66, 0x6c, 0x69, 0x73, 0x74, - 0x2d, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0xd8, 0x49, 0x01, 0x52, 0x0e, 0x6c, 0x65, 0x61, 0x66, - 0x6c, 0x69, 0x73, 0x74, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x4e, 0x0a, 0x0d, 0x6c, 0x65, - 0x61, 0x66, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x18, 0x10, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x42, 0x6f, 0x6f, - 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x14, 0x82, 0x41, 0x0e, 0x2f, 0x6c, 0x65, 0x61, 0x66, - 0x6c, 0x69, 0x73, 0x74, 0x2d, 0x62, 0x6f, 0x6f, 0x6c, 0xd8, 0x49, 0x01, 0x52, 0x0c, 0x6c, 0x65, - 0x61, 0x66, 0x6c, 0x69, 0x73, 0x74, 0x42, 0x6f, 0x6f, 0x6c, 0x12, 0x4a, 0x0a, 0x0c, 0x6c, 0x65, - 0x61, 0x66, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x69, 0x6e, 0x74, 0x18, 0x11, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x12, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x49, 0x6e, 0x74, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x42, 0x13, 0x82, 0x41, 0x0d, 0x2f, 0x6c, 0x65, 0x61, 0x66, 0x6c, 0x69, - 0x73, 0x74, 0x2d, 0x69, 0x6e, 0x74, 0xd8, 0x49, 0x01, 0x52, 0x0b, 0x6c, 0x65, 0x61, 0x66, 0x6c, - 0x69, 0x73, 0x74, 0x49, 0x6e, 0x74, 0x12, 0x4e, 0x0a, 0x0d, 0x6c, 0x65, 0x61, 0x66, 0x6c, 0x69, - 0x73, 0x74, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x18, 0x12, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, - 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x42, 0x14, 0x82, 0x41, 0x0e, 0x2f, 0x6c, 0x65, 0x61, 0x66, 0x6c, 0x69, 0x73, 0x74, - 0x2d, 0x75, 0x69, 0x6e, 0x74, 0xd8, 0x49, 0x01, 0x52, 0x0c, 0x6c, 0x65, 0x61, 0x66, 0x6c, 0x69, - 0x73, 0x74, 0x55, 0x69, 0x6e, 0x74, 0x12, 0x52, 0x0a, 0x0e, 0x6c, 0x65, 0x61, 0x66, 0x6c, 0x69, - 0x73, 0x74, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x13, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, - 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x42, 0x79, 0x74, 0x65, 0x73, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x42, 0x15, 0x82, 0x41, 0x0f, 0x2f, 0x6c, 0x65, 0x61, 0x66, 0x6c, 0x69, - 0x73, 0x74, 0x2d, 0x62, 0x79, 0x74, 0x65, 0x73, 0xd8, 0x49, 0x01, 0x52, 0x0d, 0x6c, 0x65, 0x61, - 0x66, 0x6c, 0x69, 0x73, 0x74, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x62, 0x0a, 0x12, 0x6c, 0x65, - 0x61, 0x66, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x64, 0x65, 0x63, 0x69, 0x6d, 0x61, 0x6c, 0x36, 0x34, - 0x18, 0x14, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, - 0x72, 0x2e, 0x44, 0x65, 0x63, 0x69, 0x6d, 0x61, 0x6c, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x42, 0x19, 0x82, 0x41, 0x13, 0x2f, 0x6c, 0x65, 0x61, 0x66, 0x6c, 0x69, 0x73, 0x74, 0x2d, 0x64, - 0x65, 0x63, 0x69, 0x6d, 0x61, 0x6c, 0x36, 0x34, 0xd8, 0x49, 0x01, 0x52, 0x11, 0x6c, 0x65, 0x61, - 0x66, 0x6c, 0x69, 0x73, 0x74, 0x44, 0x65, 0x63, 0x69, 0x6d, 0x61, 0x6c, 0x36, 0x34, 0x12, 0x58, - 0x0a, 0x0e, 0x6c, 0x65, 0x61, 0x66, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x75, 0x6e, 0x69, 0x6f, 0x6e, - 0x18, 0x0f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x65, 0x78, 0x73, 0x63, 0x68, 0x65, 0x6d, - 0x61, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x55, 0x6e, 0x69, - 0x6f, 0x6e, 0x42, 0x15, 0x82, 0x41, 0x0f, 0x2f, 0x6c, 0x65, 0x61, 0x66, 0x6c, 0x69, 0x73, 0x74, - 0x2d, 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0xe0, 0x49, 0x01, 0x52, 0x0d, 0x6c, 0x65, 0x61, 0x66, 0x6c, - 0x69, 0x73, 0x74, 0x55, 0x6e, 0x69, 0x6f, 0x6e, 0x12, 0x46, 0x0a, 0x06, 0x6e, 0x65, 0x73, 0x74, - 0x65, 0x64, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x65, 0x78, 0x73, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x4e, - 0x65, 0x73, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x0a, 0x82, 0x41, - 0x07, 0x2f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x52, 0x06, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, - 0x42, 0x0d, 0x0a, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x22, - 0xd7, 0x01, 0x0a, 0x14, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x4e, 0x65, 0x73, 0x74, 0x65, - 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x37, 0x0a, 0x03, 0x6f, 0x6e, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, - 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x0e, 0x82, 0x41, - 0x0b, 0x2f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2f, 0x6f, 0x6e, 0x65, 0x52, 0x03, 0x6f, 0x6e, - 0x65, 0x12, 0x37, 0x0a, 0x03, 0x74, 0x77, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, - 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x0e, 0x82, 0x41, 0x0b, 0x2f, 0x6e, 0x65, 0x73, 0x74, 0x65, - 0x64, 0x2f, 0x74, 0x77, 0x6f, 0x52, 0x03, 0x74, 0x77, 0x6f, 0x12, 0x4d, 0x0a, 0x05, 0x63, 0x68, - 0x69, 0x6c, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x65, 0x78, 0x73, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x47, 0x72, 0x61, 0x6e, 0x64, 0x63, 0x68, 0x69, 0x6c, 0x64, - 0x42, 0x10, 0x82, 0x41, 0x0d, 0x2f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2f, 0x63, 0x68, 0x69, - 0x6c, 0x64, 0x52, 0x05, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x22, 0x97, 0x01, 0x0a, 0x17, 0x45, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x47, 0x72, 0x61, 0x6e, 0x64, - 0x63, 0x68, 0x69, 0x6c, 0x64, 0x12, 0x3d, 0x0a, 0x03, 0x6f, 0x6e, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x75, 0x65, 0x42, 0x0e, 0x82, 0x41, 0x0b, 0x2f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2f, 0x6f, + 0x6e, 0x65, 0x52, 0x03, 0x6f, 0x6e, 0x65, 0x12, 0x37, 0x0a, 0x03, 0x74, 0x77, 0x6f, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, + 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x0e, 0x82, 0x41, 0x0b, + 0x2f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2f, 0x74, 0x77, 0x6f, 0x52, 0x03, 0x74, 0x77, 0x6f, + 0x12, 0x4d, 0x0a, 0x05, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x25, 0x2e, 0x65, 0x78, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x45, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x47, 0x72, 0x61, 0x6e, + 0x64, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x42, 0x10, 0x82, 0x41, 0x0d, 0x2f, 0x6e, 0x65, 0x73, 0x74, + 0x65, 0x64, 0x2f, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x52, 0x05, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x22, + 0x97, 0x01, 0x0a, 0x17, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x4e, 0x65, 0x73, 0x74, 0x65, + 0x64, 0x47, 0x72, 0x61, 0x6e, 0x64, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x12, 0x3d, 0x0a, 0x03, 0x6f, + 0x6e, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, + 0x70, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, + 0x14, 0x82, 0x41, 0x11, 0x2f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2f, 0x63, 0x68, 0x69, 0x6c, + 0x64, 0x2f, 0x6f, 0x6e, 0x65, 0x52, 0x03, 0x6f, 0x6e, 0x65, 0x12, 0x3d, 0x0a, 0x03, 0x74, 0x77, + 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, + 0x65, 0x72, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x14, + 0x82, 0x41, 0x11, 0x2f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2f, 0x63, 0x68, 0x69, 0x6c, 0x64, + 0x2f, 0x74, 0x77, 0x6f, 0x52, 0x03, 0x74, 0x77, 0x6f, 0x22, 0x9f, 0x01, 0x0a, 0x0c, 0x45, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x55, 0x6e, 0x69, 0x6f, 0x6e, 0x12, 0x24, 0x0a, 0x03, 0x73, 0x74, + 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x12, 0x82, 0x41, 0x0f, 0x2f, 0x6c, 0x65, 0x61, + 0x66, 0x6c, 0x69, 0x73, 0x74, 0x2d, 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x52, 0x03, 0x73, 0x74, 0x72, + 0x12, 0x26, 0x0a, 0x04, 0x75, 0x69, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x42, 0x12, + 0x82, 0x41, 0x0f, 0x2f, 0x6c, 0x65, 0x61, 0x66, 0x6c, 0x69, 0x73, 0x74, 0x2d, 0x75, 0x6e, 0x69, + 0x6f, 0x6e, 0x52, 0x04, 0x75, 0x69, 0x6e, 0x74, 0x12, 0x41, 0x0a, 0x04, 0x65, 0x6e, 0x75, 0x6d, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, 0x2e, 0x65, 0x78, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x45, 0x6e, 0x75, + 0x6d, 0x42, 0x12, 0x82, 0x41, 0x0f, 0x2f, 0x6c, 0x65, 0x61, 0x66, 0x6c, 0x69, 0x73, 0x74, 0x2d, + 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x52, 0x04, 0x65, 0x6e, 0x75, 0x6d, 0x22, 0x4f, 0x0a, 0x13, 0x45, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x43, 0x68, 0x69, + 0x6c, 0x64, 0x12, 0x38, 0x0a, 0x03, 0x73, 0x74, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x15, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, + 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x0f, 0x82, 0x41, 0x0c, 0x2f, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x2f, 0x73, 0x74, 0x72, 0x52, 0x03, 0x73, 0x74, 0x72, 0x22, 0xa9, 0x01, 0x0a, + 0x11, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4b, + 0x65, 0x79, 0x12, 0x54, 0x0a, 0x0a, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6b, 0x65, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x35, 0x82, 0x41, 0x32, 0x2f, 0x6c, 0x69, 0x73, 0x74, + 0x2d, 0x6e, 0x61, 0x6d, 0x65, 0x2f, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x2d, 0x6b, 0x65, 0x79, + 0x7c, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x2d, 0x6e, 0x61, 0x6d, 0x65, 0x2f, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x2f, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x2d, 0x6b, 0x65, 0x79, 0x52, 0x09, 0x73, + 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x3e, 0x0a, 0x06, 0x6d, 0x65, 0x6d, 0x62, + 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x65, 0x78, 0x73, 0x63, 0x68, + 0x65, 0x6d, 0x61, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, + 0x52, 0x06, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x22, 0xb6, 0x01, 0x0a, 0x18, 0x45, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x4d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x44, 0x0a, 0x03, 0x73, 0x74, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x53, 0x74, - 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x14, 0x82, 0x41, 0x11, 0x2f, 0x6e, - 0x65, 0x73, 0x74, 0x65, 0x64, 0x2f, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x2f, 0x6f, 0x6e, 0x65, 0x52, - 0x03, 0x6f, 0x6e, 0x65, 0x12, 0x3d, 0x0a, 0x03, 0x74, 0x77, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x15, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x72, - 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x14, 0x82, 0x41, 0x11, 0x2f, 0x6e, 0x65, - 0x73, 0x74, 0x65, 0x64, 0x2f, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x2f, 0x74, 0x77, 0x6f, 0x52, 0x03, - 0x74, 0x77, 0x6f, 0x22, 0x9f, 0x01, 0x0a, 0x0c, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x55, - 0x6e, 0x69, 0x6f, 0x6e, 0x12, 0x24, 0x0a, 0x03, 0x73, 0x74, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x12, 0x82, 0x41, 0x0f, 0x2f, 0x6c, 0x65, 0x61, 0x66, 0x6c, 0x69, 0x73, 0x74, 0x2d, - 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x52, 0x03, 0x73, 0x74, 0x72, 0x12, 0x26, 0x0a, 0x04, 0x75, 0x69, - 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x42, 0x12, 0x82, 0x41, 0x0f, 0x2f, 0x6c, 0x65, - 0x61, 0x66, 0x6c, 0x69, 0x73, 0x74, 0x2d, 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x52, 0x04, 0x75, 0x69, - 0x6e, 0x74, 0x12, 0x41, 0x0a, 0x04, 0x65, 0x6e, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x19, 0x2e, 0x65, 0x78, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x70, 0x61, 0x74, 0x68, 0x2e, - 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x12, 0x82, 0x41, 0x0f, - 0x2f, 0x6c, 0x65, 0x61, 0x66, 0x6c, 0x69, 0x73, 0x74, 0x2d, 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x52, - 0x04, 0x65, 0x6e, 0x75, 0x6d, 0x22, 0x4f, 0x0a, 0x13, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x12, 0x38, 0x0a, 0x03, - 0x73, 0x74, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x79, 0x77, 0x72, 0x61, - 0x70, 0x70, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x42, 0x0f, 0x82, 0x41, 0x0c, 0x2f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2f, 0x73, 0x74, - 0x72, 0x52, 0x03, 0x73, 0x74, 0x72, 0x22, 0xa9, 0x01, 0x0a, 0x11, 0x45, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x54, 0x0a, 0x0a, - 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x35, 0x82, 0x41, 0x32, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x2d, 0x6e, 0x61, 0x6d, 0x65, 0x2f, - 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x2d, 0x6b, 0x65, 0x79, 0x7c, 0x2f, 0x6c, 0x69, 0x73, 0x74, - 0x2d, 0x6e, 0x61, 0x6d, 0x65, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x73, 0x69, 0x6e, - 0x67, 0x6c, 0x65, 0x2d, 0x6b, 0x65, 0x79, 0x52, 0x09, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x4b, - 0x65, 0x79, 0x12, 0x3e, 0x0a, 0x06, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x65, 0x78, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x70, 0x61, 0x74, - 0x68, 0x2e, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x06, 0x6d, 0x65, 0x6d, 0x62, - 0x65, 0x72, 0x22, 0xb6, 0x01, 0x0a, 0x18, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, - 0x44, 0x0a, 0x03, 0x73, 0x74, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x79, - 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x42, 0x1b, 0x82, 0x41, 0x18, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x2d, 0x6e, 0x61, - 0x6d, 0x65, 0x2f, 0x61, 0x6e, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x2d, 0x66, 0x69, 0x65, 0x6c, 0x64, - 0x52, 0x03, 0x73, 0x74, 0x72, 0x12, 0x54, 0x0a, 0x0a, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x5f, 0x6c, - 0x69, 0x73, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x65, 0x78, 0x73, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x4c, - 0x69, 0x73, 0x74, 0x4b, 0x65, 0x79, 0x42, 0x18, 0x82, 0x41, 0x15, 0x2f, 0x6c, 0x69, 0x73, 0x74, - 0x2d, 0x6e, 0x61, 0x6d, 0x65, 0x2f, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x2d, 0x6c, 0x69, 0x73, 0x74, - 0x52, 0x09, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x80, 0x01, 0x0a, 0x0d, - 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x39, 0x0a, - 0x07, 0x6b, 0x65, 0x79, 0x5f, 0x6f, 0x6e, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x20, - 0x82, 0x41, 0x1d, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x2d, 0x6e, 0x61, 0x6d, 0x65, 0x2f, 0x63, 0x68, - 0x69, 0x6c, 0x64, 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x2f, 0x6b, 0x65, 0x79, 0x2d, 0x6f, 0x6e, 0x65, - 0x52, 0x06, 0x6b, 0x65, 0x79, 0x4f, 0x6e, 0x65, 0x12, 0x34, 0x0a, 0x05, 0x66, 0x69, 0x65, 0x6c, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x65, 0x78, 0x73, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x4c, 0x69, 0x73, - 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x05, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x22, 0x59, - 0x0a, 0x10, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, - 0x65, 0x72, 0x12, 0x45, 0x0a, 0x03, 0x73, 0x74, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x1b, 0x82, 0x41, 0x18, 0x2f, 0x6c, + 0x69, 0x73, 0x74, 0x2d, 0x6e, 0x61, 0x6d, 0x65, 0x2f, 0x61, 0x6e, 0x6f, 0x74, 0x68, 0x65, 0x72, + 0x2d, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x52, 0x03, 0x73, 0x74, 0x72, 0x12, 0x54, 0x0a, 0x0a, 0x63, + 0x68, 0x69, 0x6c, 0x64, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x1b, 0x2e, 0x65, 0x78, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x4e, + 0x65, 0x73, 0x74, 0x65, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x4b, 0x65, 0x79, 0x42, 0x18, 0x82, 0x41, + 0x15, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x2d, 0x6e, 0x61, 0x6d, 0x65, 0x2f, 0x63, 0x68, 0x69, 0x6c, + 0x64, 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x52, 0x09, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x4c, 0x69, 0x73, + 0x74, 0x22, 0x80, 0x01, 0x0a, 0x0d, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x4c, 0x69, 0x73, 0x74, + 0x4b, 0x65, 0x79, 0x12, 0x39, 0x0a, 0x07, 0x6b, 0x65, 0x79, 0x5f, 0x6f, 0x6e, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x20, 0x82, 0x41, 0x1d, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x2d, 0x6e, + 0x61, 0x6d, 0x65, 0x2f, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x2f, 0x6b, + 0x65, 0x79, 0x2d, 0x6f, 0x6e, 0x65, 0x52, 0x06, 0x6b, 0x65, 0x79, 0x4f, 0x6e, 0x65, 0x12, 0x34, + 0x0a, 0x05, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, + 0x65, 0x78, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x4e, 0x65, 0x73, + 0x74, 0x65, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x05, 0x66, + 0x69, 0x65, 0x6c, 0x64, 0x22, 0x59, 0x0a, 0x10, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x4c, 0x69, + 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x45, 0x0a, 0x03, 0x73, 0x74, 0x72, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, + 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x1c, 0x82, 0x41, + 0x19, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x2d, 0x6e, 0x61, 0x6d, 0x65, 0x2f, 0x63, 0x68, 0x69, 0x6c, + 0x64, 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x2f, 0x73, 0x74, 0x72, 0x52, 0x03, 0x73, 0x74, 0x72, 0x22, + 0xd8, 0x01, 0x0a, 0x16, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x4b, 0x65, 0x79, 0x12, 0x43, 0x0a, 0x05, 0x69, 0x6e, + 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x2d, 0x82, 0x41, 0x2a, 0x2f, 0x6d, + 0x75, 0x6c, 0x74, 0x69, 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x2f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x7c, + 0x2f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x2f, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x2f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, + 0x3f, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x2b, 0x82, + 0x41, 0x28, 0x2f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x2f, 0x6e, 0x61, + 0x6d, 0x65, 0x7c, 0x2f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x2f, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x12, 0x38, 0x0a, 0x06, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x20, 0x2e, 0x65, 0x78, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x70, 0x61, 0x74, 0x68, 0x2e, + 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x4b, 0x65, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, + 0x65, 0x72, 0x52, 0x06, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x22, 0x5e, 0x0a, 0x12, 0x4d, 0x75, + 0x6c, 0x74, 0x69, 0x4b, 0x65, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, + 0x12, 0x48, 0x0a, 0x05, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, - 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x1c, 0x82, 0x41, 0x19, 0x2f, 0x6c, 0x69, 0x73, 0x74, - 0x2d, 0x6e, 0x61, 0x6d, 0x65, 0x2f, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x2d, 0x6c, 0x69, 0x73, 0x74, - 0x2f, 0x73, 0x74, 0x72, 0x52, 0x03, 0x73, 0x74, 0x72, 0x22, 0xd8, 0x01, 0x0a, 0x16, 0x45, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4d, 0x75, 0x6c, 0x74, - 0x69, 0x4b, 0x65, 0x79, 0x12, 0x43, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0d, 0x42, 0x2d, 0x82, 0x41, 0x2a, 0x2f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x2d, 0x6c, - 0x69, 0x73, 0x74, 0x2f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x7c, 0x2f, 0x6d, 0x75, 0x6c, 0x74, 0x69, - 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x69, 0x6e, 0x64, - 0x65, 0x78, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x3f, 0x0a, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x2b, 0x82, 0x41, 0x28, 0x2f, 0x6d, 0x75, 0x6c, - 0x74, 0x69, 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x7c, 0x2f, 0x6d, 0x75, - 0x6c, 0x74, 0x69, 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, - 0x6e, 0x61, 0x6d, 0x65, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x38, 0x0a, 0x06, 0x6d, 0x65, - 0x6d, 0x62, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x65, 0x78, 0x73, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x4b, - 0x65, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x06, 0x6d, 0x65, - 0x6d, 0x62, 0x65, 0x72, 0x22, 0x5e, 0x0a, 0x12, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x4b, 0x65, 0x79, - 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x48, 0x0a, 0x05, 0x63, 0x68, - 0x69, 0x6c, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x79, 0x77, 0x72, 0x61, - 0x70, 0x70, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x42, 0x1b, 0x82, 0x41, 0x18, 0x2f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x2d, 0x6c, 0x69, 0x73, 0x74, - 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x52, 0x05, 0x63, - 0x68, 0x69, 0x6c, 0x64, 0x22, 0xb1, 0x06, 0x0a, 0x0e, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x5d, 0x0a, 0x09, 0x6d, 0x61, 0x70, 0x5f, 0x66, - 0x69, 0x65, 0x6c, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x65, 0x78, 0x73, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, - 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x61, 0x70, 0x46, 0x69, 0x65, 0x6c, - 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x14, 0x82, 0x41, 0x11, 0x2f, 0x61, 0x6e, 0x2f, 0x69, - 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x52, 0x08, 0x6d, 0x61, - 0x70, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x6e, 0x6f, 0x5f, 0x61, 0x6e, 0x6e, - 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6e, - 0x6f, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3d, 0x0a, 0x02, 0x6b, - 0x6d, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x65, 0x78, 0x73, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x4b, 0x65, 0x79, 0x42, 0x0c, 0x82, 0x41, 0x09, 0x2f, 0x6f, 0x6e, - 0x65, 0x7c, 0x2f, 0x74, 0x77, 0x6f, 0x52, 0x02, 0x6b, 0x6d, 0x12, 0x19, 0x0a, 0x02, 0x6b, 0x65, - 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x42, 0x09, 0x82, 0x41, 0x06, 0x2f, 0x74, 0x68, 0x72, 0x65, - 0x65, 0x52, 0x02, 0x6b, 0x65, 0x12, 0x35, 0x0a, 0x02, 0x62, 0x6b, 0x18, 0x05, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x1b, 0x2e, 0x65, 0x78, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x70, 0x61, 0x74, 0x68, - 0x2e, 0x42, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4b, 0x65, 0x79, 0x42, 0x08, - 0x82, 0x41, 0x05, 0x2f, 0x66, 0x6f, 0x75, 0x72, 0x52, 0x02, 0x62, 0x6b, 0x12, 0x38, 0x0a, 0x02, - 0x62, 0x6d, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x65, 0x78, 0x73, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x42, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x42, 0x08, 0x82, 0x41, 0x05, 0x2f, 0x66, 0x69, - 0x76, 0x65, 0x52, 0x02, 0x62, 0x6d, 0x12, 0x59, 0x0a, 0x16, 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, - 0x64, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x74, 0x68, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, - 0x72, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x0c, 0x82, - 0x41, 0x09, 0x2f, 0x6f, 0x6e, 0x65, 0x5b, 0x74, 0x77, 0x6f, 0x5d, 0x52, 0x14, 0x69, 0x6e, 0x76, - 0x61, 0x6c, 0x69, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x64, 0x50, 0x61, 0x74, - 0x68, 0x12, 0x3e, 0x0a, 0x06, 0x62, 0x6b, 0x5f, 0x74, 0x77, 0x6f, 0x18, 0x08, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x1e, 0x2e, 0x65, 0x78, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x70, 0x61, 0x74, 0x68, - 0x2e, 0x42, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4b, 0x65, 0x79, 0x54, 0x77, - 0x6f, 0x42, 0x07, 0x82, 0x41, 0x04, 0x2f, 0x73, 0x69, 0x78, 0x52, 0x05, 0x62, 0x6b, 0x54, 0x77, - 0x6f, 0x12, 0x79, 0x0a, 0x22, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x5f, 0x61, 0x6e, - 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x66, 0x6f, 0x72, 0x5f, 0x63, 0x6f, - 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, - 0x65, 0x78, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x49, 0x6e, 0x76, - 0x61, 0x6c, 0x69, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x0e, 0x82, 0x41, 0x0b, - 0x2f, 0x73, 0x69, 0x78, 0x7c, 0x2f, 0x73, 0x65, 0x76, 0x65, 0x6e, 0x52, 0x1f, 0x6d, 0x75, 0x6c, - 0x74, 0x69, 0x70, 0x6c, 0x65, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x46, 0x6f, 0x72, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x12, 0x3e, 0x0a, 0x04, - 0x62, 0x6b, 0x70, 0x6d, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x65, 0x78, 0x73, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x42, 0x61, 0x64, 0x4b, 0x65, 0x79, - 0x50, 0x61, 0x74, 0x68, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x09, 0x82, 0x41, 0x06, - 0x2f, 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, 0x04, 0x62, 0x6b, 0x70, 0x6d, 0x12, 0x3d, 0x0a, 0x04, - 0x69, 0x6b, 0x70, 0x6b, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x65, 0x78, 0x73, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, - 0x64, 0x4b, 0x65, 0x79, 0x50, 0x61, 0x74, 0x68, 0x4b, 0x65, 0x79, 0x42, 0x08, 0x82, 0x41, 0x05, - 0x2f, 0x6e, 0x69, 0x6e, 0x65, 0x52, 0x04, 0x69, 0x6b, 0x70, 0x6b, 0x1a, 0x3b, 0x0a, 0x0d, 0x4d, - 0x61, 0x70, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x3f, 0x0a, 0x18, 0x49, 0x6e, 0x76, 0x61, - 0x6c, 0x69, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x6e, 0x6f, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6e, 0x6f, 0x41, - 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x36, 0x0a, 0x10, 0x42, 0x61, 0x64, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4b, 0x65, 0x79, 0x54, 0x77, 0x6f, 0x12, 0x22, 0x0a, - 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x10, 0x82, 0x41, 0x0d, 0x2f, - 0x6f, 0x6e, 0x65, 0x7c, 0x2f, 0x6f, 0x6e, 0x65, 0x2f, 0x74, 0x77, 0x6f, 0x52, 0x03, 0x6b, 0x65, - 0x79, 0x22, 0x3f, 0x0a, 0x0d, 0x42, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4b, - 0x65, 0x79, 0x12, 0x2e, 0x0a, 0x0c, 0x62, 0x61, 0x64, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x74, 0x79, - 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x02, 0x42, 0x0c, 0x82, 0x41, 0x09, 0x2f, 0x66, 0x6f, - 0x75, 0x72, 0x2f, 0x6b, 0x65, 0x79, 0x52, 0x0a, 0x62, 0x61, 0x64, 0x4b, 0x65, 0x79, 0x54, 0x79, - 0x70, 0x65, 0x22, 0x58, 0x0a, 0x10, 0x42, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x1c, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x0a, 0x82, 0x41, 0x07, 0x2f, 0x6f, 0x6b, 0x2d, 0x6b, 0x65, 0x79, 0x52, - 0x03, 0x6b, 0x65, 0x79, 0x12, 0x26, 0x0a, 0x08, 0x62, 0x61, 0x64, 0x5f, 0x74, 0x79, 0x70, 0x65, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x42, 0x0b, 0x82, 0x41, 0x08, 0x2f, 0x62, 0x61, 0x64, 0x2d, - 0x6b, 0x65, 0x79, 0x52, 0x07, 0x62, 0x61, 0x64, 0x54, 0x79, 0x70, 0x65, 0x22, 0x2b, 0x0a, 0x11, + 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x1b, 0x82, 0x41, 0x18, 0x2f, 0x6d, 0x75, 0x6c, 0x74, + 0x69, 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x63, 0x68, + 0x69, 0x6c, 0x64, 0x52, 0x05, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x22, 0xb1, 0x06, 0x0a, 0x0e, 0x49, + 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x5d, 0x0a, + 0x09, 0x6d, 0x61, 0x70, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x2a, 0x2e, 0x65, 0x78, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x70, 0x61, 0x74, 0x68, 0x2e, + 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, + 0x61, 0x70, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x14, 0x82, 0x41, + 0x11, 0x2f, 0x61, 0x6e, 0x2f, 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x2f, 0x66, 0x69, 0x65, + 0x6c, 0x64, 0x52, 0x08, 0x6d, 0x61, 0x70, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x23, 0x0a, 0x0d, + 0x6e, 0x6f, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6e, 0x6f, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x3d, 0x0a, 0x02, 0x6b, 0x6d, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, + 0x65, 0x78, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x45, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4b, 0x65, 0x79, 0x42, 0x0c, + 0x82, 0x41, 0x09, 0x2f, 0x6f, 0x6e, 0x65, 0x7c, 0x2f, 0x74, 0x77, 0x6f, 0x52, 0x02, 0x6b, 0x6d, + 0x12, 0x19, 0x0a, 0x02, 0x6b, 0x65, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x42, 0x09, 0x82, 0x41, + 0x06, 0x2f, 0x74, 0x68, 0x72, 0x65, 0x65, 0x52, 0x02, 0x6b, 0x65, 0x12, 0x35, 0x0a, 0x02, 0x62, + 0x6b, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x65, 0x78, 0x73, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x42, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x4b, 0x65, 0x79, 0x42, 0x08, 0x82, 0x41, 0x05, 0x2f, 0x66, 0x6f, 0x75, 0x72, 0x52, 0x02, + 0x62, 0x6b, 0x12, 0x38, 0x0a, 0x02, 0x62, 0x6d, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, + 0x2e, 0x65, 0x78, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x42, 0x61, + 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x42, 0x08, + 0x82, 0x41, 0x05, 0x2f, 0x66, 0x69, 0x76, 0x65, 0x52, 0x02, 0x62, 0x6d, 0x12, 0x59, 0x0a, 0x16, + 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x65, + 0x64, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x79, + 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x42, 0x0c, 0x82, 0x41, 0x09, 0x2f, 0x6f, 0x6e, 0x65, 0x5b, 0x74, 0x77, 0x6f, + 0x5d, 0x52, 0x14, 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, + 0x74, 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x12, 0x3e, 0x0a, 0x06, 0x62, 0x6b, 0x5f, 0x74, 0x77, + 0x6f, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x65, 0x78, 0x73, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x42, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x4b, 0x65, 0x79, 0x54, 0x77, 0x6f, 0x42, 0x07, 0x82, 0x41, 0x04, 0x2f, 0x73, 0x69, 0x78, + 0x52, 0x05, 0x62, 0x6b, 0x54, 0x77, 0x6f, 0x12, 0x79, 0x0a, 0x22, 0x6d, 0x75, 0x6c, 0x74, 0x69, + 0x70, 0x6c, 0x65, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, + 0x66, 0x6f, 0x72, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x18, 0x09, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x65, 0x78, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x70, 0x61, + 0x74, 0x68, 0x2e, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x42, 0x0e, 0x82, 0x41, 0x0b, 0x2f, 0x73, 0x69, 0x78, 0x7c, 0x2f, 0x73, 0x65, 0x76, 0x65, + 0x6e, 0x52, 0x1f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x41, 0x6e, 0x6e, 0x6f, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x46, 0x6f, 0x72, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, + 0x65, 0x72, 0x12, 0x3e, 0x0a, 0x04, 0x62, 0x6b, 0x70, 0x6d, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x1f, 0x2e, 0x65, 0x78, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x42, 0x61, 0x64, 0x4b, 0x65, 0x79, 0x50, 0x61, 0x74, 0x68, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x12, 0x16, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x04, - 0x82, 0x41, 0x01, 0x2f, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x22, 0x33, 0x0a, 0x11, 0x49, 0x6e, 0x76, - 0x61, 0x6c, 0x69, 0x64, 0x4b, 0x65, 0x79, 0x50, 0x61, 0x74, 0x68, 0x4b, 0x65, 0x79, 0x12, 0x1e, - 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0x82, 0x41, 0x09, - 0x2f, 0x6f, 0x6e, 0x65, 0x5b, 0x74, 0x77, 0x6f, 0x5d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x2a, 0x7e, - 0x0a, 0x0b, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x0e, 0x0a, - 0x0a, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x55, 0x4e, 0x53, 0x45, 0x54, 0x10, 0x00, 0x12, 0x1b, 0x0a, - 0x0b, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x56, 0x41, 0x4c, 0x4f, 0x4e, 0x45, 0x10, 0x01, 0x1a, 0x0a, - 0x82, 0x41, 0x07, 0x56, 0x41, 0x4c, 0x5f, 0x4f, 0x4e, 0x45, 0x12, 0x1b, 0x0a, 0x0b, 0x45, 0x4e, - 0x55, 0x4d, 0x5f, 0x56, 0x41, 0x4c, 0x54, 0x57, 0x4f, 0x10, 0x02, 0x1a, 0x0a, 0x82, 0x41, 0x07, - 0x56, 0x41, 0x4c, 0x5f, 0x54, 0x57, 0x4f, 0x12, 0x25, 0x0a, 0x10, 0x45, 0x4e, 0x55, 0x4d, 0x5f, - 0x56, 0x41, 0x4c, 0x46, 0x4f, 0x52, 0x54, 0x59, 0x54, 0x57, 0x4f, 0x10, 0x2a, 0x1a, 0x0f, 0x82, - 0x41, 0x0c, 0x56, 0x41, 0x4c, 0x5f, 0x46, 0x4f, 0x52, 0x54, 0x59, 0x54, 0x57, 0x4f, 0x42, 0x3b, - 0x5a, 0x39, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, - 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x79, 0x67, 0x6f, 0x74, 0x2f, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x6d, 0x61, 0x70, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x64, 0x61, 0x74, 0x61, 0x2f, 0x65, - 0x78, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x70, 0x61, 0x74, 0x68, 0x62, 0x06, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x33, + 0x65, 0x42, 0x09, 0x82, 0x41, 0x06, 0x2f, 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, 0x04, 0x62, 0x6b, + 0x70, 0x6d, 0x12, 0x3d, 0x0a, 0x04, 0x69, 0x6b, 0x70, 0x6b, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x1f, 0x2e, 0x65, 0x78, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x70, 0x61, 0x74, 0x68, 0x2e, + 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x4b, 0x65, 0x79, 0x50, 0x61, 0x74, 0x68, 0x4b, 0x65, + 0x79, 0x42, 0x08, 0x82, 0x41, 0x05, 0x2f, 0x6e, 0x69, 0x6e, 0x65, 0x52, 0x04, 0x69, 0x6b, 0x70, + 0x6b, 0x1a, 0x3b, 0x0a, 0x0d, 0x4d, 0x61, 0x70, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x3f, + 0x0a, 0x18, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x6e, 0x6f, + 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0c, 0x6e, 0x6f, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, + 0x36, 0x0a, 0x10, 0x42, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4b, 0x65, 0x79, + 0x54, 0x77, 0x6f, 0x12, 0x22, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x10, 0x82, 0x41, 0x0d, 0x2f, 0x6f, 0x6e, 0x65, 0x7c, 0x2f, 0x6f, 0x6e, 0x65, 0x2f, 0x74, + 0x77, 0x6f, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x22, 0x3f, 0x0a, 0x0d, 0x42, 0x61, 0x64, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x2e, 0x0a, 0x0c, 0x62, 0x61, 0x64, 0x5f, + 0x6b, 0x65, 0x79, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x02, 0x42, 0x0c, + 0x82, 0x41, 0x09, 0x2f, 0x66, 0x6f, 0x75, 0x72, 0x2f, 0x6b, 0x65, 0x79, 0x52, 0x0a, 0x62, 0x61, + 0x64, 0x4b, 0x65, 0x79, 0x54, 0x79, 0x70, 0x65, 0x22, 0x58, 0x0a, 0x10, 0x42, 0x61, 0x64, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x1c, 0x0a, 0x03, + 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0x82, 0x41, 0x07, 0x2f, 0x6f, + 0x6b, 0x2d, 0x6b, 0x65, 0x79, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x26, 0x0a, 0x08, 0x62, 0x61, + 0x64, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x42, 0x0b, 0x82, 0x41, + 0x08, 0x2f, 0x62, 0x61, 0x64, 0x2d, 0x6b, 0x65, 0x79, 0x52, 0x07, 0x62, 0x61, 0x64, 0x54, 0x79, + 0x70, 0x65, 0x22, 0x2b, 0x0a, 0x11, 0x42, 0x61, 0x64, 0x4b, 0x65, 0x79, 0x50, 0x61, 0x74, 0x68, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x16, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x04, 0x82, 0x41, 0x01, 0x2f, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x22, + 0x33, 0x0a, 0x11, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x4b, 0x65, 0x79, 0x50, 0x61, 0x74, + 0x68, 0x4b, 0x65, 0x79, 0x12, 0x1e, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x0c, 0x82, 0x41, 0x09, 0x2f, 0x6f, 0x6e, 0x65, 0x5b, 0x74, 0x77, 0x6f, 0x5d, 0x52, + 0x03, 0x6b, 0x65, 0x79, 0x2a, 0x7e, 0x0a, 0x0b, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x45, + 0x6e, 0x75, 0x6d, 0x12, 0x0e, 0x0a, 0x0a, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x55, 0x4e, 0x53, 0x45, + 0x54, 0x10, 0x00, 0x12, 0x1b, 0x0a, 0x0b, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x56, 0x41, 0x4c, 0x4f, + 0x4e, 0x45, 0x10, 0x01, 0x1a, 0x0a, 0x82, 0x41, 0x07, 0x56, 0x41, 0x4c, 0x5f, 0x4f, 0x4e, 0x45, + 0x12, 0x1b, 0x0a, 0x0b, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x56, 0x41, 0x4c, 0x54, 0x57, 0x4f, 0x10, + 0x02, 0x1a, 0x0a, 0x82, 0x41, 0x07, 0x56, 0x41, 0x4c, 0x5f, 0x54, 0x57, 0x4f, 0x12, 0x25, 0x0a, + 0x10, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x56, 0x41, 0x4c, 0x46, 0x4f, 0x52, 0x54, 0x59, 0x54, 0x57, + 0x4f, 0x10, 0x2a, 0x1a, 0x0f, 0x82, 0x41, 0x0c, 0x56, 0x41, 0x4c, 0x5f, 0x46, 0x4f, 0x52, 0x54, + 0x59, 0x54, 0x57, 0x4f, 0x42, 0x3b, 0x5a, 0x39, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x79, 0x67, + 0x6f, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x6d, 0x61, 0x70, 0x2f, 0x74, 0x65, 0x73, 0x74, + 0x64, 0x61, 0x74, 0x61, 0x2f, 0x65, 0x78, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x70, 0x61, 0x74, + 0x68, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1807,92 +1949,97 @@ func file_exschemapath_proto_rawDescGZIP() []byte { } var file_exschemapath_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_exschemapath_proto_msgTypes = make([]protoimpl.MessageInfo, 23) +var file_exschemapath_proto_msgTypes = make([]protoimpl.MessageInfo, 25) var file_exschemapath_proto_goTypes = []interface{}{ - (ExampleEnum)(0), // 0: exschemapath.ExampleEnum - (*Root)(nil), // 1: exschemapath.Root - (*Interface)(nil), // 2: exschemapath.Interface - (*System)(nil), // 3: exschemapath.System - (*ExampleMessage)(nil), // 4: exschemapath.ExampleMessage - (*ExampleNestedMessage)(nil), // 5: exschemapath.ExampleNestedMessage - (*ExampleNestedGrandchild)(nil), // 6: exschemapath.ExampleNestedGrandchild - (*ExampleUnion)(nil), // 7: exschemapath.ExampleUnion - (*ExampleMessageChild)(nil), // 8: exschemapath.ExampleMessageChild - (*ExampleMessageKey)(nil), // 9: exschemapath.ExampleMessageKey - (*ExampleMessageListMember)(nil), // 10: exschemapath.ExampleMessageListMember - (*NestedListKey)(nil), // 11: exschemapath.NestedListKey - (*NestedListMember)(nil), // 12: exschemapath.NestedListMember - (*ExampleMessageMultiKey)(nil), // 13: exschemapath.ExampleMessageMultiKey - (*MultiKeyListMember)(nil), // 14: exschemapath.MultiKeyListMember - (*InvalidMessage)(nil), // 15: exschemapath.InvalidMessage - (*InvalidAnnotationMessage)(nil), // 16: exschemapath.InvalidAnnotationMessage - (*BadMessageKeyTwo)(nil), // 17: exschemapath.BadMessageKeyTwo - (*BadMessageKey)(nil), // 18: exschemapath.BadMessageKey - (*BadMessageMember)(nil), // 19: exschemapath.BadMessageMember - (*BadKeyPathMessage)(nil), // 20: exschemapath.BadKeyPathMessage - (*InvalidKeyPathKey)(nil), // 21: exschemapath.InvalidKeyPathKey - (*Root_InterfaceKey)(nil), // 22: exschemapath.Root.InterfaceKey - nil, // 23: exschemapath.InvalidMessage.MapFieldEntry - (*ywrapper.StringValue)(nil), // 24: ywrapper.StringValue - (*ywrapper.BoolValue)(nil), // 25: ywrapper.BoolValue - (*ywrapper.BytesValue)(nil), // 26: ywrapper.BytesValue - (*ywrapper.Decimal64Value)(nil), // 27: ywrapper.Decimal64Value - (*ywrapper.IntValue)(nil), // 28: ywrapper.IntValue - (*ywrapper.UintValue)(nil), // 29: ywrapper.UintValue + (ExampleEnum)(0), // 0: exschemapath.ExampleEnum + (*Root)(nil), // 1: exschemapath.Root + (*Interface)(nil), // 2: exschemapath.Interface + (*System)(nil), // 3: exschemapath.System + (*Subinterface)(nil), // 4: exschemapath.Subinterface + (*ExampleMessage)(nil), // 5: exschemapath.ExampleMessage + (*ExampleNestedMessage)(nil), // 6: exschemapath.ExampleNestedMessage + (*ExampleNestedGrandchild)(nil), // 7: exschemapath.ExampleNestedGrandchild + (*ExampleUnion)(nil), // 8: exschemapath.ExampleUnion + (*ExampleMessageChild)(nil), // 9: exschemapath.ExampleMessageChild + (*ExampleMessageKey)(nil), // 10: exschemapath.ExampleMessageKey + (*ExampleMessageListMember)(nil), // 11: exschemapath.ExampleMessageListMember + (*NestedListKey)(nil), // 12: exschemapath.NestedListKey + (*NestedListMember)(nil), // 13: exschemapath.NestedListMember + (*ExampleMessageMultiKey)(nil), // 14: exschemapath.ExampleMessageMultiKey + (*MultiKeyListMember)(nil), // 15: exschemapath.MultiKeyListMember + (*InvalidMessage)(nil), // 16: exschemapath.InvalidMessage + (*InvalidAnnotationMessage)(nil), // 17: exschemapath.InvalidAnnotationMessage + (*BadMessageKeyTwo)(nil), // 18: exschemapath.BadMessageKeyTwo + (*BadMessageKey)(nil), // 19: exschemapath.BadMessageKey + (*BadMessageMember)(nil), // 20: exschemapath.BadMessageMember + (*BadKeyPathMessage)(nil), // 21: exschemapath.BadKeyPathMessage + (*InvalidKeyPathKey)(nil), // 22: exschemapath.InvalidKeyPathKey + (*Root_InterfaceKey)(nil), // 23: exschemapath.Root.InterfaceKey + (*Interface_SubinterfaceKey)(nil), // 24: exschemapath.Interface.SubinterfaceKey + nil, // 25: exschemapath.InvalidMessage.MapFieldEntry + (*ywrapper.StringValue)(nil), // 26: ywrapper.StringValue + (*ywrapper.BoolValue)(nil), // 27: ywrapper.BoolValue + (*ywrapper.BytesValue)(nil), // 28: ywrapper.BytesValue + (*ywrapper.Decimal64Value)(nil), // 29: ywrapper.Decimal64Value + (*ywrapper.IntValue)(nil), // 30: ywrapper.IntValue + (*ywrapper.UintValue)(nil), // 31: ywrapper.UintValue } var file_exschemapath_proto_depIdxs = []int32{ 3, // 0: exschemapath.Root.system:type_name -> exschemapath.System - 22, // 1: exschemapath.Root.interface:type_name -> exschemapath.Root.InterfaceKey - 24, // 2: exschemapath.Interface.description:type_name -> ywrapper.StringValue - 24, // 3: exschemapath.System.hostname:type_name -> ywrapper.StringValue - 25, // 4: exschemapath.ExampleMessage.bo:type_name -> ywrapper.BoolValue - 26, // 5: exschemapath.ExampleMessage.by:type_name -> ywrapper.BytesValue - 27, // 6: exschemapath.ExampleMessage.de:type_name -> ywrapper.Decimal64Value - 28, // 7: exschemapath.ExampleMessage.in:type_name -> ywrapper.IntValue - 24, // 8: exschemapath.ExampleMessage.str:type_name -> ywrapper.StringValue - 29, // 9: exschemapath.ExampleMessage.ui:type_name -> ywrapper.UintValue - 8, // 10: exschemapath.ExampleMessage.ex:type_name -> exschemapath.ExampleMessageChild - 9, // 11: exschemapath.ExampleMessage.em:type_name -> exschemapath.ExampleMessageKey - 13, // 12: exschemapath.ExampleMessage.multi:type_name -> exschemapath.ExampleMessageMultiKey - 0, // 13: exschemapath.ExampleMessage.en:type_name -> exschemapath.ExampleEnum - 24, // 14: exschemapath.ExampleMessage.compress:type_name -> ywrapper.StringValue - 24, // 15: exschemapath.ExampleMessage.leaflist_string:type_name -> ywrapper.StringValue - 25, // 16: exschemapath.ExampleMessage.leaflist_bool:type_name -> ywrapper.BoolValue - 28, // 17: exschemapath.ExampleMessage.leaflist_int:type_name -> ywrapper.IntValue - 29, // 18: exschemapath.ExampleMessage.leaflist_uint:type_name -> ywrapper.UintValue - 26, // 19: exschemapath.ExampleMessage.leaflist_bytes:type_name -> ywrapper.BytesValue - 27, // 20: exschemapath.ExampleMessage.leaflist_decimal64:type_name -> ywrapper.Decimal64Value - 7, // 21: exschemapath.ExampleMessage.leaflist_union:type_name -> exschemapath.ExampleUnion - 5, // 22: exschemapath.ExampleMessage.nested:type_name -> exschemapath.ExampleNestedMessage - 24, // 23: exschemapath.ExampleNestedMessage.one:type_name -> ywrapper.StringValue - 24, // 24: exschemapath.ExampleNestedMessage.two:type_name -> ywrapper.StringValue - 6, // 25: exschemapath.ExampleNestedMessage.child:type_name -> exschemapath.ExampleNestedGrandchild - 24, // 26: exschemapath.ExampleNestedGrandchild.one:type_name -> ywrapper.StringValue - 24, // 27: exschemapath.ExampleNestedGrandchild.two:type_name -> ywrapper.StringValue - 0, // 28: exschemapath.ExampleUnion.enum:type_name -> exschemapath.ExampleEnum - 24, // 29: exschemapath.ExampleMessageChild.str:type_name -> ywrapper.StringValue - 10, // 30: exschemapath.ExampleMessageKey.member:type_name -> exschemapath.ExampleMessageListMember - 24, // 31: exschemapath.ExampleMessageListMember.str:type_name -> ywrapper.StringValue - 11, // 32: exschemapath.ExampleMessageListMember.child_list:type_name -> exschemapath.NestedListKey - 12, // 33: exschemapath.NestedListKey.field:type_name -> exschemapath.NestedListMember - 24, // 34: exschemapath.NestedListMember.str:type_name -> ywrapper.StringValue - 14, // 35: exschemapath.ExampleMessageMultiKey.member:type_name -> exschemapath.MultiKeyListMember - 24, // 36: exschemapath.MultiKeyListMember.child:type_name -> ywrapper.StringValue - 23, // 37: exschemapath.InvalidMessage.map_field:type_name -> exschemapath.InvalidMessage.MapFieldEntry - 9, // 38: exschemapath.InvalidMessage.km:type_name -> exschemapath.ExampleMessageKey - 18, // 39: exschemapath.InvalidMessage.bk:type_name -> exschemapath.BadMessageKey - 19, // 40: exschemapath.InvalidMessage.bm:type_name -> exschemapath.BadMessageMember - 24, // 41: exschemapath.InvalidMessage.invalid_annotated_path:type_name -> ywrapper.StringValue - 17, // 42: exschemapath.InvalidMessage.bk_two:type_name -> exschemapath.BadMessageKeyTwo - 15, // 43: exschemapath.InvalidMessage.multiple_annotations_for_container:type_name -> exschemapath.InvalidMessage - 20, // 44: exschemapath.InvalidMessage.bkpm:type_name -> exschemapath.BadKeyPathMessage - 21, // 45: exschemapath.InvalidMessage.ikpk:type_name -> exschemapath.InvalidKeyPathKey - 2, // 46: exschemapath.Root.InterfaceKey.interface:type_name -> exschemapath.Interface - 47, // [47:47] is the sub-list for method output_type - 47, // [47:47] is the sub-list for method input_type - 47, // [47:47] is the sub-list for extension type_name - 47, // [47:47] is the sub-list for extension extendee - 0, // [0:47] is the sub-list for field type_name + 23, // 1: exschemapath.Root.interface:type_name -> exschemapath.Root.InterfaceKey + 26, // 2: exschemapath.Interface.description:type_name -> ywrapper.StringValue + 24, // 3: exschemapath.Interface.subinterface:type_name -> exschemapath.Interface.SubinterfaceKey + 26, // 4: exschemapath.System.hostname:type_name -> ywrapper.StringValue + 26, // 5: exschemapath.Subinterface.description:type_name -> ywrapper.StringValue + 27, // 6: exschemapath.ExampleMessage.bo:type_name -> ywrapper.BoolValue + 28, // 7: exschemapath.ExampleMessage.by:type_name -> ywrapper.BytesValue + 29, // 8: exschemapath.ExampleMessage.de:type_name -> ywrapper.Decimal64Value + 30, // 9: exschemapath.ExampleMessage.in:type_name -> ywrapper.IntValue + 26, // 10: exschemapath.ExampleMessage.str:type_name -> ywrapper.StringValue + 31, // 11: exschemapath.ExampleMessage.ui:type_name -> ywrapper.UintValue + 9, // 12: exschemapath.ExampleMessage.ex:type_name -> exschemapath.ExampleMessageChild + 10, // 13: exschemapath.ExampleMessage.em:type_name -> exschemapath.ExampleMessageKey + 14, // 14: exschemapath.ExampleMessage.multi:type_name -> exschemapath.ExampleMessageMultiKey + 0, // 15: exschemapath.ExampleMessage.en:type_name -> exschemapath.ExampleEnum + 26, // 16: exschemapath.ExampleMessage.compress:type_name -> ywrapper.StringValue + 26, // 17: exschemapath.ExampleMessage.leaflist_string:type_name -> ywrapper.StringValue + 27, // 18: exschemapath.ExampleMessage.leaflist_bool:type_name -> ywrapper.BoolValue + 30, // 19: exschemapath.ExampleMessage.leaflist_int:type_name -> ywrapper.IntValue + 31, // 20: exschemapath.ExampleMessage.leaflist_uint:type_name -> ywrapper.UintValue + 28, // 21: exschemapath.ExampleMessage.leaflist_bytes:type_name -> ywrapper.BytesValue + 29, // 22: exschemapath.ExampleMessage.leaflist_decimal64:type_name -> ywrapper.Decimal64Value + 8, // 23: exschemapath.ExampleMessage.leaflist_union:type_name -> exschemapath.ExampleUnion + 6, // 24: exschemapath.ExampleMessage.nested:type_name -> exschemapath.ExampleNestedMessage + 26, // 25: exschemapath.ExampleNestedMessage.one:type_name -> ywrapper.StringValue + 26, // 26: exschemapath.ExampleNestedMessage.two:type_name -> ywrapper.StringValue + 7, // 27: exschemapath.ExampleNestedMessage.child:type_name -> exschemapath.ExampleNestedGrandchild + 26, // 28: exschemapath.ExampleNestedGrandchild.one:type_name -> ywrapper.StringValue + 26, // 29: exschemapath.ExampleNestedGrandchild.two:type_name -> ywrapper.StringValue + 0, // 30: exschemapath.ExampleUnion.enum:type_name -> exschemapath.ExampleEnum + 26, // 31: exschemapath.ExampleMessageChild.str:type_name -> ywrapper.StringValue + 11, // 32: exschemapath.ExampleMessageKey.member:type_name -> exschemapath.ExampleMessageListMember + 26, // 33: exschemapath.ExampleMessageListMember.str:type_name -> ywrapper.StringValue + 12, // 34: exschemapath.ExampleMessageListMember.child_list:type_name -> exschemapath.NestedListKey + 13, // 35: exschemapath.NestedListKey.field:type_name -> exschemapath.NestedListMember + 26, // 36: exschemapath.NestedListMember.str:type_name -> ywrapper.StringValue + 15, // 37: exschemapath.ExampleMessageMultiKey.member:type_name -> exschemapath.MultiKeyListMember + 26, // 38: exschemapath.MultiKeyListMember.child:type_name -> ywrapper.StringValue + 25, // 39: exschemapath.InvalidMessage.map_field:type_name -> exschemapath.InvalidMessage.MapFieldEntry + 10, // 40: exschemapath.InvalidMessage.km:type_name -> exschemapath.ExampleMessageKey + 19, // 41: exschemapath.InvalidMessage.bk:type_name -> exschemapath.BadMessageKey + 20, // 42: exschemapath.InvalidMessage.bm:type_name -> exschemapath.BadMessageMember + 26, // 43: exschemapath.InvalidMessage.invalid_annotated_path:type_name -> ywrapper.StringValue + 18, // 44: exschemapath.InvalidMessage.bk_two:type_name -> exschemapath.BadMessageKeyTwo + 16, // 45: exschemapath.InvalidMessage.multiple_annotations_for_container:type_name -> exschemapath.InvalidMessage + 21, // 46: exschemapath.InvalidMessage.bkpm:type_name -> exschemapath.BadKeyPathMessage + 22, // 47: exschemapath.InvalidMessage.ikpk:type_name -> exschemapath.InvalidKeyPathKey + 2, // 48: exschemapath.Root.InterfaceKey.interface:type_name -> exschemapath.Interface + 4, // 49: exschemapath.Interface.SubinterfaceKey.subinterface:type_name -> exschemapath.Subinterface + 50, // [50:50] is the sub-list for method output_type + 50, // [50:50] is the sub-list for method input_type + 50, // [50:50] is the sub-list for extension type_name + 50, // [50:50] is the sub-list for extension extendee + 0, // [0:50] is the sub-list for field type_name } func init() { file_exschemapath_proto_init() } @@ -1938,7 +2085,7 @@ func file_exschemapath_proto_init() { } } file_exschemapath_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ExampleMessage); i { + switch v := v.(*Subinterface); i { case 0: return &v.state case 1: @@ -1950,7 +2097,7 @@ func file_exschemapath_proto_init() { } } file_exschemapath_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ExampleNestedMessage); i { + switch v := v.(*ExampleMessage); i { case 0: return &v.state case 1: @@ -1962,7 +2109,7 @@ func file_exschemapath_proto_init() { } } file_exschemapath_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ExampleNestedGrandchild); i { + switch v := v.(*ExampleNestedMessage); i { case 0: return &v.state case 1: @@ -1974,7 +2121,7 @@ func file_exschemapath_proto_init() { } } file_exschemapath_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ExampleUnion); i { + switch v := v.(*ExampleNestedGrandchild); i { case 0: return &v.state case 1: @@ -1986,7 +2133,7 @@ func file_exschemapath_proto_init() { } } file_exschemapath_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ExampleMessageChild); i { + switch v := v.(*ExampleUnion); i { case 0: return &v.state case 1: @@ -1998,7 +2145,7 @@ func file_exschemapath_proto_init() { } } file_exschemapath_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ExampleMessageKey); i { + switch v := v.(*ExampleMessageChild); i { case 0: return &v.state case 1: @@ -2010,7 +2157,7 @@ func file_exschemapath_proto_init() { } } file_exschemapath_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ExampleMessageListMember); i { + switch v := v.(*ExampleMessageKey); i { case 0: return &v.state case 1: @@ -2022,7 +2169,7 @@ func file_exschemapath_proto_init() { } } file_exschemapath_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NestedListKey); i { + switch v := v.(*ExampleMessageListMember); i { case 0: return &v.state case 1: @@ -2034,7 +2181,7 @@ func file_exschemapath_proto_init() { } } file_exschemapath_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NestedListMember); i { + switch v := v.(*NestedListKey); i { case 0: return &v.state case 1: @@ -2046,7 +2193,7 @@ func file_exschemapath_proto_init() { } } file_exschemapath_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ExampleMessageMultiKey); i { + switch v := v.(*NestedListMember); i { case 0: return &v.state case 1: @@ -2058,7 +2205,7 @@ func file_exschemapath_proto_init() { } } file_exschemapath_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MultiKeyListMember); i { + switch v := v.(*ExampleMessageMultiKey); i { case 0: return &v.state case 1: @@ -2070,7 +2217,7 @@ func file_exschemapath_proto_init() { } } file_exschemapath_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*InvalidMessage); i { + switch v := v.(*MultiKeyListMember); i { case 0: return &v.state case 1: @@ -2082,7 +2229,7 @@ func file_exschemapath_proto_init() { } } file_exschemapath_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*InvalidAnnotationMessage); i { + switch v := v.(*InvalidMessage); i { case 0: return &v.state case 1: @@ -2094,7 +2241,7 @@ func file_exschemapath_proto_init() { } } file_exschemapath_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BadMessageKeyTwo); i { + switch v := v.(*InvalidAnnotationMessage); i { case 0: return &v.state case 1: @@ -2106,7 +2253,7 @@ func file_exschemapath_proto_init() { } } file_exschemapath_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BadMessageKey); i { + switch v := v.(*BadMessageKeyTwo); i { case 0: return &v.state case 1: @@ -2118,7 +2265,7 @@ func file_exschemapath_proto_init() { } } file_exschemapath_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BadMessageMember); i { + switch v := v.(*BadMessageKey); i { case 0: return &v.state case 1: @@ -2130,7 +2277,7 @@ func file_exschemapath_proto_init() { } } file_exschemapath_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BadKeyPathMessage); i { + switch v := v.(*BadMessageMember); i { case 0: return &v.state case 1: @@ -2142,7 +2289,7 @@ func file_exschemapath_proto_init() { } } file_exschemapath_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*InvalidKeyPathKey); i { + switch v := v.(*BadKeyPathMessage); i { case 0: return &v.state case 1: @@ -2154,6 +2301,18 @@ func file_exschemapath_proto_init() { } } file_exschemapath_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*InvalidKeyPathKey); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_exschemapath_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Root_InterfaceKey); i { case 0: return &v.state @@ -2165,8 +2324,20 @@ func file_exschemapath_proto_init() { return nil } } + file_exschemapath_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Interface_SubinterfaceKey); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } - file_exschemapath_proto_msgTypes[3].OneofWrappers = []interface{}{ + file_exschemapath_proto_msgTypes[4].OneofWrappers = []interface{}{ (*ExampleMessage_OneofOne)(nil), (*ExampleMessage_OneofTwo)(nil), } @@ -2176,7 +2347,7 @@ func file_exschemapath_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_exschemapath_proto_rawDesc, NumEnums: 1, - NumMessages: 23, + NumMessages: 25, NumExtensions: 0, NumServices: 0, }, diff --git a/protomap/testdata/exschemapath/exschemapath.proto b/protomap/testdata/exschemapath/exschemapath.proto index 65b0e7db..3a2e60fa 100644 --- a/protomap/testdata/exschemapath/exschemapath.proto +++ b/protomap/testdata/exschemapath/exschemapath.proto @@ -8,7 +8,7 @@ import "github.com/openconfig/ygot/proto/ywrapper/ywrapper.proto"; import "github.com/openconfig/ygot/proto/yext/yext.proto"; message Root { - System system = 1; + System system = 1 [(yext.schemapath) = "/system"]; message InterfaceKey { string name = 1 [(yext.schemapath) = "/interfaces/interface/config/name|/interfaces/interface/name"]; Interface interface = 2; @@ -18,12 +18,21 @@ message Root { message Interface { ywrapper.StringValue description = 1 [(yext.schemapath) = "/interfaces/interface/config/description"]; + message SubinterfaceKey { + uint64 index = 1 [(yext.schemapath) = "/interfaces/interface/subinterfaces/subinterface/config/index|/interfaces/interface/subinterfaces/subinterface/index"]; + Subinterface subinterface = 2; + } + repeated SubinterfaceKey subinterface = 42 [(yext.schemapath) = "/interfaces/interface/subinterfaces/subinterface"]; } message System { ywrapper.StringValue hostname = 1 [(yext.schemapath) = "/system/config/hostname"]; } +message Subinterface { + ywrapper.StringValue description = 1 [(yext.schemapath) = "/interfaces/interface/subinterfaces/subinterface/config/description"]; +} + message ExampleMessage { ywrapper.BoolValue bo = 1 [(yext.schemapath) = "/bool"]; ywrapper.BytesValue by = 2 [(yext.schemapath) = "/bytes"];