Ver código fonte

internal/fileinit: generate reflect data structures from raw descriptors

This CL takes a significantly different approach to generating support
for protobuf reflection. The previous approach involved generating a
large number of Go literals to represent the reflection information.
While that approach was correct, it resulted in too much binary bloat.

The approach taken here initializes the reflection information from
the raw descriptor proto, which is a relatively dense representation
of the protobuf reflection information. In order to keep initialization
cost low, several measures were taken:
* At program init, the bare minimum is parsed in order to initialize
naming information for enums, messages, extensions, and services declared
in the file. This is done because those top-level declarations are often
relevant for registration.
* Only upon first are most of the other data structures for protobuf
reflection actually initialized.
* Instead of using proto.Unmarshal, a hand-written unmarshaler is used.
This allows us to avoid a dependendency on the descriptor proto and also
because the API for the descriptor proto is fundamentally non-performant
since it requires an allocation for every primitive field.

At a high-level, the new implementation lives in internal/fileinit.

Several changes were made to other parts of the repository:
* cmd/protoc-gen-go:
  * Stop compressing the raw descriptors. While compression does reduce
the size of the descriptors by approximately 2x, it is a pre-mature
optimization since the descriptors themselves are around 1% of the total
binary bloat that is due to generated protobufs.
  * Seeding protobuf reflection from the raw descriptor significantly
simplifies the generator implementation since it is no longer responsible
for constructing a tree of Go literals to represent the same information.
  * We remove the generation of the shadow types and instead call
protoimpl.MessageType.MessageOf. Unfortunately, this incurs an allocation
for every call to ProtoReflect since we need to allocate a tuple that wraps
a pointer to the message value, and a pointer to message type.
* internal/impl:
  * We add a MessageType.GoType field and make it required that it is
set prior to first use. This is done so that we can avoid calling
MessageType.init except for when it is actually needed. The allows code
to call (*FooMessage)(nil).ProtoReflect().Type() without fearing that the
init code will run, possibly triggering a recursive deadlock (where the
init code depends on getting the Type of some dependency which may be
declared within the same file).
* internal/cmd/generate-types:
  * The code to generate reflect/prototype/protofile_list_gen.go was copied
and altered to generated internal/fileinit.desc_list_gen.go.

At a high-level this CL adds significant technical complexity.
However, this is offset by several possible future changes:
* The prototype package can be drastically simplified. We can probably
reimplement internal/legacy to use internal/fileinit instead, allowing us
to drop another dependency on the prototype package. As a result, we can
probably delete most of the constructor types in that package.
* With the prototype package significantly pruned, and the fact that generated
code no longer depend on depends on that package, we can consider merging
what's left of prototype into protodesc.

Change-Id: I6090f023f2e1b6afaf62bd3ae883566242e30715
Reviewed-on: https://go-review.googlesource.com/c/158539
Reviewed-by: Herbie Ong <herbie@google.com>
Reviewed-by: Joe Tsai <thebrokentoaster@gmail.com>
Damien Neil 7 anos atrás
pai
commit
8012b444ee
60 arquivos alterados com 7761 adições e 9749 exclusões
  1. 44 29
      cmd/protoc-gen-go-grpc/testdata/grpc/deprecation.pb.go
  2. 79 87
      cmd/protoc-gen-go-grpc/testdata/grpc/grpc.pb.go
  3. 28 17
      cmd/protoc-gen-go/internal_gengo/main.go
  4. 135 302
      cmd/protoc-gen-go/internal_gengo/reflect.go
  5. 59 89
      cmd/protoc-gen-go/testdata/annotations/annotations.pb.go
  6. 69 213
      cmd/protoc-gen-go/testdata/comments/comments.pb.go
  7. 58 89
      cmd/protoc-gen-go/testdata/comments/deprecated.pb.go
  8. 55 98
      cmd/protoc-gen-go/testdata/extensions/base/base.pb.go
  9. 482 359
      cmd/protoc-gen-go/testdata/extensions/ext/ext.pb.go
  10. 47 66
      cmd/protoc-gen-go/testdata/extensions/extra/extra.pb.go
  11. 323 117
      cmd/protoc-gen-go/testdata/extensions/proto3/ext3.pb.go
  12. 92 256
      cmd/protoc-gen-go/testdata/fieldnames/fieldnames.pb.go
  13. 68 95
      cmd/protoc-gen-go/testdata/import_public/a.pb.go
  14. 57 79
      cmd/protoc-gen-go/testdata/import_public/b.pb.go
  15. 104 236
      cmd/protoc-gen-go/testdata/import_public/sub/a.pb.go
  16. 44 53
      cmd/protoc-gen-go/testdata/import_public/sub/b.pb.go
  17. 44 53
      cmd/protoc-gen-go/testdata/import_public/sub2/a.pb.go
  18. 41 51
      cmd/protoc-gen-go/testdata/imports/fmt/m.pb.go
  19. 58 114
      cmd/protoc-gen-go/testdata/imports/test_a_1/m1.pb.go
  20. 42 52
      cmd/protoc-gen-go/testdata/imports/test_a_1/m2.pb.go
  21. 42 52
      cmd/protoc-gen-go/testdata/imports/test_a_2/m3.pb.go
  22. 42 52
      cmd/protoc-gen-go/testdata/imports/test_a_2/m4.pb.go
  23. 43 52
      cmd/protoc-gen-go/testdata/imports/test_b_1/m1.pb.go
  24. 43 52
      cmd/protoc-gen-go/testdata/imports/test_b_1/m2.pb.go
  25. 49 69
      cmd/protoc-gen-go/testdata/imports/test_import_a1m1.pb.go
  26. 49 69
      cmd/protoc-gen-go/testdata/imports/test_import_a1m2.pb.go
  27. 77 119
      cmd/protoc-gen-go/testdata/imports/test_import_all.pb.go
  28. 43 68
      cmd/protoc-gen-go/testdata/issue780_oneof_conflict/test.pb.go
  29. 53 95
      cmd/protoc-gen-go/testdata/nopackage/nopackage.pb.go
  30. 102 213
      cmd/protoc-gen-go/testdata/proto2/enum.pb.go
  31. 449 1325
      cmd/protoc-gen-go/testdata/proto2/fields.pb.go
  32. 68 144
      cmd/protoc-gen-go/testdata/proto2/nested_messages.pb.go
  33. 49 74
      cmd/protoc-gen-go/testdata/proto2/proto2.pb.go
  34. 37 43
      cmd/protoc-gen-go/testdata/proto3/enum.pb.go
  35. 207 521
      cmd/protoc-gen-go/testdata/proto3/fields.pb.go
  36. 584 1617
      encoding/textpb/testprotos/pb2/test.pb.go
  37. 113 369
      encoding/textpb/testprotos/pb3/test.pb.go
  38. 93 0
      internal/cmd/generate-types/main.go
  39. 474 0
      internal/fileinit/desc.go
  40. 356 0
      internal/fileinit/desc_init.go
  41. 878 0
      internal/fileinit/desc_lazy.go
  42. 189 0
      internal/fileinit/desc_list.go
  43. 345 0
      internal/fileinit/desc_list_gen.go
  44. 94 0
      internal/fileinit/desc_wire.go
  45. 46 0
      internal/fileinit/name_pure.go
  46. 138 0
      internal/fileinit/name_unsafe.go
  47. 3 3
      internal/impl/legacy_extension.go
  48. 1 1
      internal/impl/legacy_test.go
  49. 1 1
      internal/impl/legacy_unknown.go
  50. 27 28
      internal/impl/message.go
  51. 17 16
      internal/impl/message_test.go
  52. 1 1
      internal/legacy/export.go
  53. 2 1
      internal/legacy/message.go
  54. 783 1340
      internal/testprotos/test/test.pb.go
  55. 9 0
      reflect/protoregistry/registry.go
  56. 119 202
      reflect/protoregistry/testprotos/test.pb.go
  57. 32 18
      reflect/prototype/options.go
  58. 5 1
      runtime/protoimpl/impl.go
  59. 70 478
      types/descriptor/descriptor.pb.go
  60. 99 270
      types/plugin/plugin.pb.go

+ 44 - 29
cmd/protoc-gen-go-grpc/testdata/grpc/deprecation.pb.go

@@ -4,9 +4,10 @@
 package grpc
 
 import (
+	bytes "bytes"
+	gzip "compress/gzip"
 	proto "github.com/golang/protobuf/proto"
 	protoreflect "github.com/golang/protobuf/v2/reflect/protoreflect"
-	prototype "github.com/golang/protobuf/v2/reflect/prototype"
 	protoimpl "github.com/golang/protobuf/v2/runtime/protoimpl"
 )
 
@@ -17,42 +18,56 @@ import (
 const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
 
 func init() {
-	proto.RegisterFile("grpc/deprecation.proto", fileDescriptor_1e7146702b7fe8c5)
+	proto.RegisterFile("grpc/deprecation.proto", fileDescriptor_1e7146702b7fe8c5_gzipped)
 }
 
 var fileDescriptor_1e7146702b7fe8c5 = []byte{
-	// 184 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x12, 0x4b, 0x2f, 0x2a, 0x48,
-	0xd6, 0x4f, 0x49, 0x2d, 0x28, 0x4a, 0x4d, 0x4e, 0x2c, 0xc9, 0xcc, 0xcf, 0xd3, 0x2b, 0x28, 0xca,
-	0x2f, 0xc9, 0x17, 0x12, 0x4e, 0xcf, 0x07, 0x33, 0x20, 0xdc, 0x64, 0x3d, 0x90, 0x32, 0x29, 0x7e,
-	0xb0, 0x62, 0x10, 0x01, 0x11, 0x36, 0xca, 0xe1, 0x12, 0x74, 0x81, 0x6a, 0x4d, 0x4d, 0x09, 0x4e,
-	0x2d, 0x2a, 0xcb, 0x4c, 0x4e, 0x15, 0x0a, 0xe2, 0xe2, 0x43, 0x08, 0x3a, 0x27, 0xe6, 0xe4, 0x08,
-	0xc9, 0xe8, 0x61, 0x31, 0x4d, 0x2f, 0x28, 0xb5, 0xb0, 0x34, 0xb5, 0xb8, 0x44, 0x4a, 0x16, 0x87,
-	0x6c, 0x71, 0x41, 0x7e, 0x5e, 0x71, 0xaa, 0x12, 0x73, 0x07, 0x13, 0xa3, 0x14, 0x88, 0x70, 0xb2,
-	0x8f, 0xb2, 0x4d, 0xcf, 0x2c, 0xc9, 0x28, 0x4d, 0xd2, 0x4b, 0xce, 0xcf, 0xd5, 0x4f, 0xcf, 0xcf,
-	0x49, 0xcc, 0x4b, 0xd7, 0x07, 0xeb, 0x49, 0x2a, 0x4d, 0xd3, 0x2f, 0x33, 0xd2, 0x4f, 0xce, 0x4d,
-	0x81, 0xf0, 0x93, 0x75, 0xd3, 0x53, 0xf3, 0x74, 0xd3, 0xf3, 0xf5, 0x4b, 0x52, 0x8b, 0x4b, 0x52,
-	0x12, 0x4b, 0x12, 0xc1, 0x8e, 0x4e, 0x62, 0x03, 0x4b, 0x1a, 0x03, 0x02, 0x00, 0x00, 0xff, 0xff,
-	0x8d, 0xbe, 0xc2, 0x16, 0xf5, 0x00, 0x00, 0x00,
+	// 245 bytes of the wire-encoded FileDescriptorProto
+	0x0a, 0x16, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x69,
+	0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x13, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x1a, 0x0f, 0x67,
+	0x72, 0x70, 0x63, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x6c,
+	0x0a, 0x11, 0x44, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x53, 0x65, 0x72, 0x76,
+	0x69, 0x63, 0x65, 0x12, 0x52, 0x0a, 0x0e, 0x44, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65,
+	0x64, 0x43, 0x61, 0x6c, 0x6c, 0x12, 0x1c, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x65, 0x71, 0x75,
+	0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+	0x73, 0x65, 0x22, 0x03, 0x88, 0x02, 0x01, 0x1a, 0x03, 0x88, 0x02, 0x01, 0x42, 0x3f, 0x5a, 0x3d,
+	0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x6f, 0x6c, 0x61, 0x6e,
+	0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x76, 0x32, 0x2f, 0x63, 0x6d,
+	0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x67, 0x6f, 0x2f,
+	0x74, 0x65, 0x73, 0x74, 0x64, 0x61, 0x74, 0x61, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x62, 0x06, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x33,
 }
 
-func init() {
-	var err error
-	Deprecation_protoFile, err = prototype.NewFile(&xxx_Deprecation_protoFile_FileDesc)
-	if err != nil {
-		panic(err)
-	}
-}
+var fileDescriptor_1e7146702b7fe8c5_gzipped = func() []byte {
+	bb := new(bytes.Buffer)
+	zw, _ := gzip.NewWriterLevel(bb, gzip.NoCompression)
+	zw.Write(fileDescriptor_1e7146702b7fe8c5)
+	zw.Close()
+	return bb.Bytes()
+}()
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
 var Deprecation_protoFile protoreflect.FileDescriptor
 
-var xxx_Deprecation_protoFile_FileDesc = prototype.File{
-	Syntax:  protoreflect.Proto3,
-	Path:    "grpc/deprecation.proto",
-	Package: "goproto.protoc.grpc",
-	Imports: []protoreflect.FileImport{
-		{FileDescriptor: prototype.PlaceholderFile("grpc/grpc.proto", "goproto.protoc.grpc")},
-	},
+var xxx_Deprecation_protoFile_goTypes = []interface{}{
+	(*Request)(nil),  // 0: goproto.protoc.grpc.Request
+	(*Response)(nil), // 1: goproto.protoc.grpc.Response
+}
+var xxx_Deprecation_protoFile_depIdxs = []int32{
+	0, // goproto.protoc.grpc.DeprecatedService.DeprecatedCall:input_type -> goproto.protoc.grpc.Request
+	1, // goproto.protoc.grpc.DeprecatedService.DeprecatedCall:output_type -> goproto.protoc.grpc.Response
+}
+
+func init() {
+	Deprecation_protoFile = protoimpl.FileBuilder{
+		RawDescriptor:     fileDescriptor_1e7146702b7fe8c5,
+		GoTypes:           xxx_Deprecation_protoFile_goTypes,
+		DependencyIndexes: xxx_Deprecation_protoFile_depIdxs,
+	}.Init()
+	xxx_Deprecation_protoFile_goTypes = nil
+	xxx_Deprecation_protoFile_depIdxs = nil
 }

+ 79 - 87
cmd/protoc-gen-go-grpc/testdata/grpc/grpc.pb.go

@@ -4,10 +4,12 @@
 package grpc
 
 import (
+	bytes "bytes"
+	gzip "compress/gzip"
 	proto "github.com/golang/protobuf/proto"
 	protoreflect "github.com/golang/protobuf/v2/reflect/protoreflect"
-	prototype "github.com/golang/protobuf/v2/reflect/prototype"
 	protoimpl "github.com/golang/protobuf/v2/runtime/protoimpl"
+	reflect "reflect"
 )
 
 // This is a compile-time assertion to ensure that this generated file
@@ -22,29 +24,14 @@ type Request struct {
 	XXX_sizecache        int32    `json:"-"`
 }
 
-type xxx_Request struct{ m *Request }
-
 func (m *Request) ProtoReflect() protoreflect.Message {
-	return xxx_Request{m}
-}
-func (m xxx_Request) Type() protoreflect.MessageType {
-	return xxx_Grpc_protoFile_MessageTypes[0].Type
-}
-func (m xxx_Request) KnownFields() protoreflect.KnownFields {
-	return xxx_Grpc_protoFile_MessageTypes[0].KnownFieldsOf(m.m)
+	return xxx_Grpc_protoFile_messageTypes[0].MessageOf(m)
 }
-func (m xxx_Request) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Grpc_protoFile_MessageTypes[0].UnknownFieldsOf(m.m)
-}
-func (m xxx_Request) Interface() protoreflect.ProtoMessage {
-	return m.m
-}
-
 func (m *Request) Reset()         { *m = Request{} }
 func (m *Request) String() string { return proto.CompactTextString(m) }
 func (*Request) ProtoMessage()    {}
 func (*Request) Descriptor() ([]byte, []int) {
-	return fileDescriptor_81ea47a3f88c2082, []int{0}
+	return fileDescriptor_81ea47a3f88c2082_gzipped, []int{0}
 }
 
 func (m *Request) XXX_Unmarshal(b []byte) error {
@@ -71,29 +58,14 @@ type Response struct {
 	XXX_sizecache        int32    `json:"-"`
 }
 
-type xxx_Response struct{ m *Response }
-
 func (m *Response) ProtoReflect() protoreflect.Message {
-	return xxx_Response{m}
-}
-func (m xxx_Response) Type() protoreflect.MessageType {
-	return xxx_Grpc_protoFile_MessageTypes[1].Type
-}
-func (m xxx_Response) KnownFields() protoreflect.KnownFields {
-	return xxx_Grpc_protoFile_MessageTypes[1].KnownFieldsOf(m.m)
-}
-func (m xxx_Response) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Grpc_protoFile_MessageTypes[1].UnknownFieldsOf(m.m)
-}
-func (m xxx_Response) Interface() protoreflect.ProtoMessage {
-	return m.m
+	return xxx_Grpc_protoFile_messageTypes[1].MessageOf(m)
 }
-
 func (m *Response) Reset()         { *m = Response{} }
 func (m *Response) String() string { return proto.CompactTextString(m) }
 func (*Response) ProtoMessage()    {}
 func (*Response) Descriptor() ([]byte, []int) {
-	return fileDescriptor_81ea47a3f88c2082, []int{1}
+	return fileDescriptor_81ea47a3f88c2082_gzipped, []int{1}
 }
 
 func (m *Response) XXX_Unmarshal(b []byte) error {
@@ -115,66 +87,86 @@ func (m *Response) XXX_DiscardUnknown() {
 var xxx_messageInfo_Response proto.InternalMessageInfo
 
 func init() {
-	proto.RegisterFile("grpc/grpc.proto", fileDescriptor_81ea47a3f88c2082)
+	proto.RegisterFile("grpc/grpc.proto", fileDescriptor_81ea47a3f88c2082_gzipped)
 	proto.RegisterType((*Request)(nil), "goproto.protoc.grpc.Request")
 	proto.RegisterType((*Response)(nil), "goproto.protoc.grpc.Response")
 }
 
 var fileDescriptor_81ea47a3f88c2082 = []byte{
-	// 218 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0xd1, 0x3d, 0x4b, 0x04, 0x31,
-	0x10, 0x06, 0x60, 0xd6, 0x42, 0xbd, 0x41, 0x39, 0x88, 0x9d, 0x68, 0x73, 0x95, 0xcd, 0x25, 0xc7,
-	0x59, 0x8b, 0x60, 0x27, 0x88, 0xc8, 0x96, 0x36, 0x4b, 0x3e, 0xc6, 0x18, 0xd8, 0xcd, 0xc4, 0x7c,
-	0xac, 0xf8, 0x13, 0xfd, 0x57, 0xb2, 0x59, 0x4b, 0xad, 0x6e, 0x9b, 0x90, 0x97, 0x77, 0x78, 0x8a,
-	0x19, 0x58, 0xdb, 0x18, 0xb4, 0x98, 0x1e, 0x1e, 0x22, 0x65, 0x62, 0x17, 0x96, 0xea, 0x67, 0x8e,
-	0x9a, 0x4f, 0xd5, 0x66, 0x05, 0x27, 0x2d, 0x7e, 0x14, 0x4c, 0x79, 0x03, 0x70, 0xda, 0x62, 0x0a,
-	0xe4, 0x13, 0xee, 0xbf, 0x8f, 0xe0, 0x2c, 0x63, 0xca, 0x5d, 0xc2, 0x38, 0x3a, 0x8d, 0xec, 0x11,
-	0xa0, 0x78, 0x19, 0xbf, 0x3a, 0x2d, 0xfb, 0x9e, 0x5d, 0xf1, 0x3f, 0x2c, 0xfe, 0x0b, 0x5d, 0x5e,
-	0xff, 0xd3, 0xce, 0x36, 0x7b, 0x81, 0xb5, 0xa1, 0x4f, 0x9f, 0x72, 0x44, 0x39, 0x1c, 0xee, 0xed,
-	0x1a, 0xf6, 0x0c, 0xe7, 0x25, 0x2c, 0xe5, 0xdd, 0x34, 0xec, 0x09, 0x56, 0xca, 0x19, 0xb7, 0x84,
-	0xb5, 0x6b, 0x1e, 0xee, 0x5f, 0xef, 0xac, 0xcb, 0xef, 0x45, 0x71, 0x4d, 0x83, 0xb0, 0xd4, 0x4b,
-	0x6f, 0x45, 0x9d, 0x56, 0xe5, 0x4d, 0x8c, 0x7b, 0xa1, 0x07, 0x33, 0x67, 0xbd, 0xb5, 0xe8, 0xb7,
-	0x96, 0xc4, 0xb4, 0x7a, 0x23, 0xb3, 0xac, 0xe7, 0x53, 0xc7, 0xb5, 0xbc, 0xfd, 0x09, 0x00, 0x00,
-	0xff, 0xff, 0x74, 0x8e, 0x77, 0x1d, 0xd2, 0x01, 0x00, 0x00,
-}
-
-func init() {
-	xxx_Grpc_protoFile_FileDesc.Messages = xxx_Grpc_protoFile_MessageDescs[0:2]
-	var err error
-	Grpc_protoFile, err = prototype.NewFile(&xxx_Grpc_protoFile_FileDesc)
-	if err != nil {
-		panic(err)
-	}
-}
+	// 466 bytes of the wire-encoded FileDescriptorProto
+	0x0a, 0x0f, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x12, 0x13, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x63, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x22, 0x09, 0x0a, 0x07, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+	0x74, 0x22, 0x0a, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xc9, 0x02,
+	0x0a, 0x0c, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x49,
+	0x0a, 0x0a, 0x75, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x12, 0x1c, 0x2e, 0x67,
+	0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x67, 0x72,
+	0x70, 0x63, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x67, 0x6f, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x67, 0x72, 0x70, 0x63,
+	0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x50, 0x0a, 0x0f, 0x64, 0x6f, 0x77,
+	0x6e, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x12, 0x1c, 0x2e, 0x67,
+	0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x67, 0x72,
+	0x70, 0x63, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x67, 0x6f, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x67, 0x72, 0x70, 0x63,
+	0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x4e, 0x0a, 0x0d, 0x75,
+	0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x12, 0x1c, 0x2e, 0x67,
+	0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x67, 0x72,
+	0x70, 0x63, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x67, 0x6f, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x67, 0x72, 0x70, 0x63,
+	0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x12, 0x4c, 0x0a, 0x09, 0x62,
+	0x69, 0x64, 0x69, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x12, 0x1c, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x52,
+	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x65, 0x73,
+	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x30, 0x01, 0x42, 0x3f, 0x5a, 0x3d, 0x67, 0x69, 0x74,
+	0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2f, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x76, 0x32, 0x2f, 0x63, 0x6d, 0x64, 0x2f, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x67, 0x6f, 0x2f, 0x74, 0x65, 0x73,
+	0x74, 0x64, 0x61, 0x74, 0x61, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x33,
+}
+
+var fileDescriptor_81ea47a3f88c2082_gzipped = func() []byte {
+	bb := new(bytes.Buffer)
+	zw, _ := gzip.NewWriterLevel(bb, gzip.NoCompression)
+	zw.Write(fileDescriptor_81ea47a3f88c2082)
+	zw.Close()
+	return bb.Bytes()
+}()
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
 var Grpc_protoFile protoreflect.FileDescriptor
 
-var xxx_Grpc_protoFile_FileDesc = prototype.File{
-	Syntax:  protoreflect.Proto3,
-	Path:    "grpc/grpc.proto",
-	Package: "goproto.protoc.grpc",
-}
-var xxx_Grpc_protoFile_MessageTypes = [2]protoimpl.MessageType{
-	{Type: prototype.GoMessage(
-		xxx_Grpc_protoFile_MessageDescs[0].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_Request{new(Request)}
-		},
-	)},
-	{Type: prototype.GoMessage(
-		xxx_Grpc_protoFile_MessageDescs[1].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_Response{new(Response)}
-		},
-	)},
-}
-var xxx_Grpc_protoFile_MessageDescs = [2]prototype.Message{
-	{
-		Name: "Request",
-	},
-	{
-		Name: "Response",
-	},
+var xxx_Grpc_protoFile_messageTypes [2]protoimpl.MessageType
+var xxx_Grpc_protoFile_goTypes = []interface{}{
+	(*Request)(nil),  // 0: goproto.protoc.grpc.Request
+	(*Response)(nil), // 1: goproto.protoc.grpc.Response
+}
+var xxx_Grpc_protoFile_depIdxs = []int32{
+	0, // goproto.protoc.grpc.test_service.unary_call:input_type -> goproto.protoc.grpc.Request
+	1, // goproto.protoc.grpc.test_service.unary_call:output_type -> goproto.protoc.grpc.Response
+	0, // goproto.protoc.grpc.test_service.downstream_call:input_type -> goproto.protoc.grpc.Request
+	1, // goproto.protoc.grpc.test_service.downstream_call:output_type -> goproto.protoc.grpc.Response
+	0, // goproto.protoc.grpc.test_service.upstream_call:input_type -> goproto.protoc.grpc.Request
+	1, // goproto.protoc.grpc.test_service.upstream_call:output_type -> goproto.protoc.grpc.Response
+	0, // goproto.protoc.grpc.test_service.bidi_call:input_type -> goproto.protoc.grpc.Request
+	1, // goproto.protoc.grpc.test_service.bidi_call:output_type -> goproto.protoc.grpc.Response
+}
+
+func init() {
+	var messageTypes [2]protoreflect.MessageType
+	Grpc_protoFile = protoimpl.FileBuilder{
+		RawDescriptor:      fileDescriptor_81ea47a3f88c2082,
+		GoTypes:            xxx_Grpc_protoFile_goTypes,
+		DependencyIndexes:  xxx_Grpc_protoFile_depIdxs,
+		MessageOutputTypes: messageTypes[:],
+	}.Init()
+	messageGoTypes := xxx_Grpc_protoFile_goTypes[0:][:2]
+	for i, mt := range messageTypes[:] {
+		xxx_Grpc_protoFile_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
+		xxx_Grpc_protoFile_messageTypes[i].PBType = mt
+	}
+	xxx_Grpc_protoFile_goTypes = nil
+	xxx_Grpc_protoFile_depIdxs = nil
 }

+ 28 - 17
cmd/protoc-gen-go/internal_gengo/main.go

@@ -6,8 +6,6 @@
 package internal_gengo
 
 import (
-	"bytes"
-	"compress/gzip"
 	"crypto/sha256"
 	"encoding/hex"
 	"fmt"
@@ -36,7 +34,8 @@ import (
 const generatedCodeVersion = 3
 
 const (
-	fmtPackage      = protogen.GoImportPath("fmt")
+	bytesPackage    = protogen.GoImportPath("bytes")
+	gzipPackage     = protogen.GoImportPath("compress/gzip")
 	mathPackage     = protogen.GoImportPath("math")
 	protoPackage    = protogen.GoImportPath("github.com/golang/protobuf/proto")
 	protoapiPackage = protogen.GoImportPath("github.com/golang/protobuf/protoapi")
@@ -44,7 +43,10 @@ const (
 
 type fileInfo struct {
 	*protogen.File
-	descriptorVar string // var containing the gzipped FileDescriptorProto
+
+	// vars containing the raw wire-encoded and compressed FileDescriptorProto.
+	descriptorRawVar  string
+	descriptorGzipVar string
 
 	allEnums         []*protogen.Enum
 	allEnumsByPtr    map[*protogen.Enum]int // value is index into allEnums
@@ -81,7 +83,8 @@ func GenerateFile(gen *protogen.Plugin, file *protogen.File, g *protogen.Generat
 		File: file,
 	}
 
-	// Collect all enums, messages, and extensions in a breadth-first order.
+	// Collect all enums, messages, and extensions in "flattened ordering".
+	// See fileinit.FileBuilder.
 	f.allEnums = append(f.allEnums, f.Enums...)
 	f.allMessages = append(f.allMessages, f.Messages...)
 	f.allExtensions = append(f.allExtensions, f.Extensions...)
@@ -110,7 +113,8 @@ func GenerateFile(gen *protogen.Plugin, file *protogen.File, g *protogen.Generat
 	//
 	//     fileDescriptor_<hash of filename>
 	filenameHash := sha256.Sum256([]byte(f.Desc.Path()))
-	f.descriptorVar = fmt.Sprintf("fileDescriptor_%s", hex.EncodeToString(filenameHash[:8]))
+	f.descriptorRawVar = fmt.Sprintf("fileDescriptor_%s", hex.EncodeToString(filenameHash[:8]))
+	f.descriptorGzipVar = f.descriptorRawVar + "_gzipped"
 
 	g.P("// Code generated by protoc-gen-go. DO NOT EDIT.")
 	if f.Proto.GetOptions().GetDeprecated() {
@@ -153,7 +157,6 @@ func GenerateFile(gen *protogen.Plugin, file *protogen.File, g *protogen.Generat
 
 	genInitFunction(gen, g, f)
 	genFileDescriptor(gen, g, f)
-	genReflectInitFunction(gen, g, f)
 	genReflectFileDescriptor(gen, g, f)
 }
 
@@ -256,14 +259,9 @@ func genFileDescriptor(gen *protogen.Plugin, g *protogen.GeneratedFile, f *fileI
 		gen.Error(err)
 		return
 	}
-	var buf bytes.Buffer
-	w, _ := gzip.NewWriterLevel(&buf, gzip.BestCompression)
-	w.Write(b)
-	w.Close()
-	b = buf.Bytes()
 
-	g.P("var ", f.descriptorVar, " = []byte{")
-	g.P("// ", len(b), " bytes of a gzipped FileDescriptorProto")
+	g.P("var ", f.descriptorRawVar, " = []byte{")
+	g.P("// ", len(b), " bytes of the wire-encoded FileDescriptorProto")
 	for len(b) > 0 {
 		n := 16
 		if n > len(b) {
@@ -280,6 +278,19 @@ func genFileDescriptor(gen *protogen.Plugin, g *protogen.GeneratedFile, f *fileI
 	}
 	g.P("}")
 	g.P()
+
+	// TODO: Add a helper function in protoapi or protoimpl?
+	// This function would probably encode the input lazily upon first use.
+	// Currently, the GZIPed form is used eagerly in v1 registration.
+	// See https://play.golang.org/p/_atJHs0izTH
+	g.P("var ", f.descriptorGzipVar, " = func() []byte {")
+	g.P("bb := new(", bytesPackage.Ident("Buffer"), ")")
+	g.P("zw, _ := ", gzipPackage.Ident("NewWriterLevel"), "(bb, ", gzipPackage.Ident("NoCompression"), ")")
+	g.P("zw.Write(", f.descriptorRawVar, ")")
+	g.P("zw.Close()")
+	g.P("return bb.Bytes()")
+	g.P("}()")
+	g.P()
 }
 
 func genEnum(gen *protogen.Plugin, g *protogen.GeneratedFile, f *fileInfo, enum *protogen.Enum) {
@@ -350,7 +361,7 @@ func genEnum(gen *protogen.Plugin, g *protogen.GeneratedFile, f *fileInfo, enum
 		indexes = append(indexes, strconv.Itoa(int(enum.Location.Path[i])))
 	}
 	g.P("func (", enum.GoIdent, ") EnumDescriptor() ([]byte, []int) {")
-	g.P("return ", f.descriptorVar, ", []int{", strings.Join(indexes, ","), "}")
+	g.P("return ", f.descriptorGzipVar, ", []int{", strings.Join(indexes, ","), "}")
 	g.P("}")
 	g.P()
 
@@ -456,7 +467,7 @@ func genMessage(gen *protogen.Plugin, g *protogen.GeneratedFile, f *fileInfo, me
 		indexes = append(indexes, strconv.Itoa(int(message.Location.Path[i])))
 	}
 	g.P("func (*", message.GoIdent, ") Descriptor() ([]byte, []int) {")
-	g.P("return ", f.descriptorVar, ", []int{", strings.Join(indexes, ","), "}")
+	g.P("return ", f.descriptorGzipVar, ", []int{", strings.Join(indexes, ","), "}")
 	g.P("}")
 	g.P()
 
@@ -757,7 +768,7 @@ func extensionVar(f *protogen.File, extension *protogen.Extension) protogen.GoId
 // generated file with the proto package.
 func genInitFunction(gen *protogen.Plugin, g *protogen.GeneratedFile, f *fileInfo) {
 	g.P("func init() {")
-	g.P(f.protoPackage().Ident("RegisterFile"), "(", strconv.Quote(f.Desc.Path()), ", ", f.descriptorVar, ")")
+	g.P(f.protoPackage().Ident("RegisterFile"), "(", strconv.Quote(f.Desc.Path()), ", ", f.descriptorGzipVar, ")")
 	for _, enum := range f.allEnums {
 		name := enum.GoIdent.GoName
 		g.P(f.protoPackage().Ident("RegisterEnum"), fmt.Sprintf("(%q, %s_name, %s_value)", enumRegistryName(enum), name, name))

+ 135 - 302
cmd/protoc-gen-go/internal_gengo/reflect.go

@@ -8,8 +8,6 @@ import (
 	"fmt"
 	"math"
 	"os"
-	"reflect"
-	"strconv"
 	"strings"
 
 	"github.com/golang/protobuf/v2/protogen"
@@ -35,6 +33,7 @@ func isDescriptor(f *protogen.File) bool {
 const minimumVersion = 0
 
 const (
+	reflectPackage      = protogen.GoImportPath("reflect")
 	protoimplPackage    = protogen.GoImportPath("github.com/golang/protobuf/v2/runtime/protoimpl")
 	protoreflectPackage = protogen.GoImportPath("github.com/golang/protobuf/v2/reflect/protoreflect")
 	prototypePackage    = protogen.GoImportPath("github.com/golang/protobuf/v2/reflect/prototype")
@@ -42,309 +41,169 @@ const (
 
 // TODO: Add support for proto options.
 
-func genReflectInitFunction(gen *protogen.Plugin, g *protogen.GeneratedFile, f *fileInfo) {
+func genReflectFileDescriptor(gen *protogen.Plugin, g *protogen.GeneratedFile, f *fileInfo) {
 	if !enableReflection(f.File) {
 		return
 	}
 
-	if len(f.allEnums)+len(f.allMessages)+len(f.allExtensions)+len(f.Services) == 0 {
-		return
-	}
-
-	g.P("func init() {")
-
-	// TODO: Fix up file imports to reference a protoreflect.FileDescriptor
-	// in a remote dependency. Since we cannot yet rely on the existence of
-	// a variable containing the file descriptor, we find a random message or
-	// enum the package and see if we can ascend to the parent file descriptor.
+	// Emit a static check that enforces a minimum version of the proto package.
+	// TODO: This should appear higher up in the Go source file.
+	g.P("const _ = ", protoimplPackage.Ident("EnforceVersion"), "(", protoimplPackage.Ident("Version"), " - ", minimumVersion, ")")
 
-	fileDescVar := fileDescVarName(f)
-	enumTypesVar := enumTypesVarName(f)
-	enumDescsVar := enumDescsVarName(f)
-	messageTypesVar := messageTypesVarName(f)
-	messageDescsVar := messageDescsVarName(f)
+	g.P("var ", f.GoDescriptorIdent, " ", protoreflectPackage.Ident("FileDescriptor"))
+	g.P()
 
-	// Populate all declarations for messages and enums.
-	// These are not declared in the literals to avoid an initialization loop.
-	if enums := f.Enums; len(enums) > 0 {
-		i := f.allEnumsByPtr[enums[0]]
-		g.P(fileDescVar, ".Enums = ", enumDescsVar, "[", i, ":", i+len(enums), "]")
+	if len(f.allEnums) > 0 {
+		g.P("var ", enumTypesVarName(f), " [", len(f.allEnums), "]", protoreflectPackage.Ident("EnumType"))
 	}
-	if messages := f.Messages; len(messages) > 0 {
-		i := f.allMessagesByPtr[messages[0]]
-		g.P(fileDescVar, ".Messages = ", messageDescsVar, "[", i, ":", i+len(messages), "]")
+	if len(f.allMessages) > 0 {
+		g.P("var ", messageTypesVarName(f), " [", len(f.allMessages), "]", protoimplPackage.Ident("MessageType"))
 	}
-	for i, message := range f.allMessages {
-		if enums := message.Enums; len(enums) > 0 {
-			j := f.allEnumsByPtr[enums[0]]
-			g.P(messageDescsVar, "[", i, "].Enums = ", enumDescsVar, "[", j, ":", j+len(enums), "]")
+
+	// Generate a unique list of Go types for all declarations and dependencies,
+	// and the associated index into the type list for all dependencies.
+	var goTypes []string
+	var depIdxs []string
+	seen := map[protoreflect.FullName]int{}
+	genDep := func(name protoreflect.FullName, depSource string) {
+		if depSource != "" {
+			line := fmt.Sprintf("%d, // %s -> %s", seen[name], depSource, name)
+			depIdxs = append(depIdxs, line)
 		}
-		if messages := message.Messages; len(messages) > 0 {
-			j := f.allMessagesByPtr[messages[0]]
-			g.P(messageDescsVar, "[", i, "].Messages = ", messageDescsVar, "[", j, ":", j+len(messages), "]")
+	}
+	genEnum := func(e *protogen.Enum, depSource string) {
+		if e != nil {
+			name := e.Desc.FullName()
+			if _, ok := seen[name]; !ok {
+				line := fmt.Sprintf("(%s)(0), // %d: %s", g.QualifiedGoIdent(e.GoIdent), len(goTypes), name)
+				goTypes = append(goTypes, line)
+				seen[name] = len(seen)
+			}
+			if depSource != "" {
+				genDep(name, depSource)
+			}
 		}
 	}
-
-	// Populate all dependencies for messages and enums.
-	//
-	// Externally defined enums and messages may or may not support the
-	// v2 protobuf reflection interfaces. The EnumTypeOf and MessageTypeOf
-	// helper functions checks for compliance and derives a v2 type from the
-	// legacy v1 enum or message if necessary.
-	for i, message := range f.allMessages {
-		for j, field := range message.Fields {
-			fieldSel := fmt.Sprintf("[%d].Fields[%d]", i, j)
-			if et := field.EnumType; et != nil {
-				idx, ok := f.allEnumsByPtr[et]
-				if ok {
-					// Locally defined enums are found in the type array.
-					g.P(messageDescsVar, fieldSel, ".EnumType = ", enumTypesVar, "[", idx, "]")
-				} else {
-					// Externally defined enums may need special handling.
-					g.P(messageDescsVar, fieldSel, ".EnumType = ", protoimplPackage.Ident("X"), ".EnumTypeOf(", et.GoIdent, "(0))")
+	genMessage := func(m *protogen.Message, depSource string) {
+		if m != nil {
+			name := m.Desc.FullName()
+			if _, ok := seen[name]; !ok {
+				line := fmt.Sprintf("(*%s)(nil), // %d: %s", g.QualifiedGoIdent(m.GoIdent), len(goTypes), name)
+				if m.Desc.IsMapEntry() {
+					// Map entry messages have no associated Go type.
+					line = fmt.Sprintf("nil, // %d: %s", len(goTypes), name)
 				}
+				goTypes = append(goTypes, line)
+				seen[name] = len(seen)
 			}
-			if mt := field.MessageType; mt != nil {
-				idx, ok := f.allMessagesByPtr[mt]
-				if ok {
-					if mt.Desc.IsMapEntry() {
-						// Map entry types have no Go type generated for them.
-						g.P(messageDescsVar, fieldSel, ".MessageType = ", messageDescsVar, "[", idx, "].Reference()")
-					} else {
-						// Locally defined messages are found in the type array.
-						g.P(messageDescsVar, fieldSel, ".MessageType = ", messageTypesVar, "[", idx, "].Type")
-					}
-				} else {
-					// Externally defined messages may need special handling.
-					g.P(messageDescsVar, fieldSel, ".MessageType = ", protoimplPackage.Ident("X"), ".MessageTypeOf((*", mt.GoIdent, ")(nil))")
-				}
+			if depSource != "" {
+				genDep(name, depSource)
 			}
 		}
 	}
-	// TODO: Fix up extension dependencies.
-	// TODO: Fix up method dependencies.
-
-	// Construct the file descriptor.
-	g.P("var err error")
-	g.P(f.GoDescriptorIdent, ", err = ", prototypePackage.Ident("NewFile"), "(&", fileDescVarName(f), ")")
-	g.P("if err != nil { panic(err) }")
-
-	// TODO: Add v2 registration and stop v1 registration in genInitFunction.
 
-	// The descriptor proto needs to register the option types with the
-	// prototype so that the package can properly handle those option types.
-	if isDescriptor(f.File) {
-		for _, m := range f.allMessages {
-			name := m.GoIdent.GoName
-			if strings.HasSuffix(name, "Options") {
-				g.P(prototypePackage.Ident("X"), ".Register", name, "((*", name, ")(nil))")
+	// This ordering is significant. See protoimpl.FileBuilder.GoTypes.
+	for _, enum := range f.allEnums {
+		genEnum(enum, "")
+	}
+	for _, message := range f.allMessages {
+		genMessage(message, "")
+	}
+	for _, extension := range f.allExtensions {
+		source := string(extension.Desc.FullName())
+		genMessage(extension.ExtendedType, source+":extendee")
+	}
+	for _, message := range f.allMessages {
+		for _, field := range message.Fields {
+			if field.Desc.IsWeak() {
+				continue
 			}
+			source := string(field.Desc.FullName())
+			genEnum(field.EnumType, source+":type_name")
+			genMessage(field.MessageType, source+":type_name")
+		}
+	}
+	for _, extension := range f.allExtensions {
+		source := string(extension.Desc.FullName())
+		genEnum(extension.EnumType, source+":type_name")
+		genMessage(extension.MessageType, source+":type_name")
+	}
+	for _, service := range f.Services {
+		for _, method := range service.Methods {
+			source := string(method.Desc.FullName())
+			genMessage(method.InputType, source+":input_type")
+			genMessage(method.OutputType, source+":output_type")
 		}
 	}
+	if len(depIdxs) > math.MaxInt32 {
+		panic("too many dependencies") // sanity check
+	}
 
+	g.P("var ", goTypesVarName(f), " = []interface{}{")
+	for _, s := range goTypes {
+		g.P(s)
+	}
 	g.P("}")
-}
 
-func genReflectFileDescriptor(gen *protogen.Plugin, g *protogen.GeneratedFile, f *fileInfo) {
-	if !enableReflection(f.File) {
-		return
+	g.P("var ", depIdxsVarName(f), " = []int32{")
+	for _, s := range depIdxs {
+		g.P(s)
 	}
+	g.P("}")
 
-	// Emit a static check that enforces a minimum version of the proto package.
-	g.P("const _ = ", protoimplPackage.Ident("EnforceVersion"), "(", protoimplPackage.Ident("Version"), " - ", minimumVersion, ")")
-
-	g.P("var ", f.GoDescriptorIdent, " ", protoreflectPackage.Ident("FileDescriptor"))
-	g.P()
-
-	// Generate literal for file descriptor.
-	fileDescVar := fileDescVarName(f)
-	g.P("var ", fileDescVar, " = ", prototypePackage.Ident("File"), "{")
-	g.P("Syntax: ", protoreflectPackage.Ident(f.Desc.Syntax().GoString()), ",")
-	g.P("Path: ", strconv.Quote(f.Desc.Path()), ",")
-	g.P("Package: ", strconv.Quote(string(f.Desc.Package())), ",")
-	if imps := f.Desc.Imports(); imps.Len() > 0 {
-		g.P("Imports: ", "[]", protoreflectPackage.Ident("FileImport"), "{")
-		for i := 0; i < imps.Len(); i++ {
-			imp := imps.Get(i)
-			path := strconv.Quote(imp.Path())
-			pkg := strconv.Quote(string(imp.Package()))
-			var isPublic, isWeak string
-			if imp.IsPublic {
-				isPublic = ", IsPublic: true"
-			}
-			if imp.IsWeak {
-				isWeak = ", IsWeak: true"
-			}
-			// NOTE: FileDescriptor may be updated later by init.
-			g.P("{FileDescriptor: ", prototypePackage.Ident("PlaceholderFile"), "(", path, ", ", pkg, ")", isPublic, isWeak, "},")
-		}
-		g.P("},")
+	g.P("func init() {")
+	if len(f.allMessages) > 0 {
+		g.P("var messageTypes [", len(f.allMessages), "]", protoreflectPackage.Ident("MessageType"))
+	}
+	if len(f.allExtensions) > 0 {
+		g.P("var extensionTypes [", len(f.allExtensions), "]", protoreflectPackage.Ident("ExtensionType"))
 	}
-	// NOTE: Messages, Enums, Extensions, and Services are populated by init.
-	g.P("}")
 
-	// Generate literals for enum descriptors.
+	g.P(f.GoDescriptorIdent, " = ", protoimplPackage.Ident("FileBuilder"), "{")
+	g.P("RawDescriptor: ", f.descriptorRawVar, ",")
+	g.P("GoTypes: ", goTypesVarName(f), ",")
+	g.P("DependencyIndexes: ", depIdxsVarName(f), ",")
 	if len(f.allEnums) > 0 {
-		enumTypesVar := enumTypesVarName(f)
-		enumDescsVar := enumDescsVarName(f)
-		g.P("var ", enumTypesVar, " = [", len(f.allEnums), "]", protoreflectPackage.Ident("EnumType"), "{")
-		for i, enum := range f.allEnums {
-			g.P(prototypePackage.Ident("GoEnum"), "(")
-			g.P(enumDescsVar, "[", i, "].Reference(),")
-			g.P("func(_ ", protoreflectPackage.Ident("EnumType"), ", n ", protoreflectPackage.Ident("EnumNumber"), ") ", protoreflectPackage.Ident("Enum"), " {")
-			g.P("return ", enum.GoIdent, "(n)")
-			g.P("},")
-			g.P("),")
-		}
-		g.P("}")
-
-		g.P("var ", enumDescsVar, " = [", len(f.allEnums), "]", prototypePackage.Ident("Enum"), "{")
-		for _, enum := range f.allEnums {
-			g.P("{")
-			g.P("Name: ", strconv.Quote(string(enum.Desc.Name())), ",")
-			g.P("Values: []", prototypePackage.Ident("EnumValue"), "{")
-			for _, value := range enum.Values {
-				g.P("{Name: ", strconv.Quote(string(value.Desc.Name())), ", Number: ", value.Desc.Number(), "},")
-			}
-			g.P("},")
-			if resvNames := enum.Desc.ReservedNames(); resvNames.Len() > 0 {
-				var ss []string
-				for i := 0; i < resvNames.Len(); i++ {
-					s := resvNames.Get(i)
-					ss = append(ss, strconv.Quote(string(s)))
-				}
-				g.P("ReservedNames: []", protoreflectPackage.Ident("Name"), "{", strings.Join(ss, ","), "},")
-			}
-			if resvRanges := enum.Desc.ReservedRanges(); resvRanges.Len() > 0 {
-				var ss []string
-				for i := 0; i < resvRanges.Len(); i++ {
-					r := resvRanges.Get(i)
-					ss = append(ss, fmt.Sprintf("{%d,%d}", r[0], r[1]))
-				}
-				g.P("ReservedRanges: [][2]", protoreflectPackage.Ident("EnumNumber"), "{", strings.Join(ss, ","), "},")
-			}
-			g.P("},")
-		}
-		g.P("}")
+		g.P("EnumOutputTypes: ", enumTypesVarName(f), "[:],")
+	}
+	if len(f.allMessages) > 0 {
+		g.P("MessageOutputTypes: messageTypes[:],")
+	}
+	if len(f.allExtensions) > 0 {
+		g.P("ExtensionOutputTypes: extensionTypes[:],")
 	}
+	g.P("}.Init()")
 
-	// Generate literals for message descriptors.
+	// Copy the local list of message types into the global array.
 	if len(f.allMessages) > 0 {
-		messageTypesVar := messageTypesVarName(f)
-		messageDescsVar := messageDescsVarName(f)
-		g.P("var ", messageTypesVar, " = [", len(f.allMessages), "]", protoimplPackage.Ident("MessageType"), "{")
-		for i, message := range f.allMessages {
-			if message.Desc.IsMapEntry() {
-				// Map entry types have no Go type generated for them.
-				g.P("{ /* no message type for ", message.GoIdent, " */ },")
-				continue
-			}
-			g.P("{Type: ", prototypePackage.Ident("GoMessage"), "(")
-			g.P(messageDescsVar, "[", i, "].Reference(),")
-			g.P("func(", protoreflectPackage.Ident("MessageType"), ") ", protoreflectPackage.Ident("Message"), " {")
-			g.P("return ", shadowTypeName(message.GoIdent), "{new(", message.GoIdent, ")}")
-			g.P("},")
-			g.P(")},")
-		}
+		g.P("messageGoTypes := ", goTypesVarName(f), "[", len(f.allEnums), ":][:", len(f.allMessages), "]")
+		g.P("for i, mt := range messageTypes[:] {")
+		g.P(messageTypesVarName(f), "[i].GoType = ", reflectPackage.Ident("TypeOf"), "(messageGoTypes[i])")
+		g.P(messageTypesVarName(f), "[i].PBType = mt")
 		g.P("}")
+	}
 
-		g.P("var ", messageDescsVar, " = [", len(f.allMessages), "]", prototypePackage.Ident("Message"), "{")
-		for _, message := range f.allMessages {
-			g.P("{")
-			g.P("Name: ", strconv.Quote(string(message.Desc.Name())), ",")
-			if fields := message.Desc.Fields(); fields.Len() > 0 {
-				g.P("Fields: []", prototypePackage.Ident("Field"), "{")
-				for i := 0; i < fields.Len(); i++ {
-					field := fields.Get(i)
-					g.P("{")
-					g.P("Name: ", strconv.Quote(string(field.Name())), ",")
-					g.P("Number: ", field.Number(), ",")
-					g.P("Cardinality: ", protoreflectPackage.Ident(field.Cardinality().GoString()), ",")
-					g.P("Kind: ", protoreflectPackage.Ident(field.Kind().GoString()), ",")
-					if field.HasJSONName() {
-						g.P("JSONName: ", strconv.Quote(field.JSONName()), ",")
-					}
-					if field.HasDefault() {
-						v := field.Default().Interface()
-						typeName := reflect.TypeOf(v).Name()
-						valLit := fmt.Sprint(v)
-						switch v.(type) {
-						case protoreflect.EnumNumber:
-							typeName = "string"
-							valLit = strconv.Quote(string(field.DefaultEnumValue().Name()))
-						case float32, float64:
-							switch f := field.Default().Float(); {
-							case math.IsInf(f, -1):
-								valLit = g.QualifiedGoIdent(mathPackage.Ident("Inf")) + "(-1)"
-							case math.IsInf(f, +1):
-								valLit = g.QualifiedGoIdent(mathPackage.Ident("Inf")) + "(+1)"
-							case math.IsNaN(f):
-								valLit = g.QualifiedGoIdent(mathPackage.Ident("NaN")) + "()"
-							}
-						case string, []byte:
-							valLit = fmt.Sprintf("%q", v)
-						}
-						g.P("Default: ", protoreflectPackage.Ident("ValueOf"), "(", typeName, "(", valLit, ")),")
-					}
-					if oneof := field.OneofType(); oneof != nil {
-						g.P("OneofName: ", strconv.Quote(string(oneof.Name())), ",")
-					}
-					if field.IsPacked() {
-						g.P("IsPacked: ", prototypePackage.Ident("True"), ",")
-					} else {
-						g.P("IsPacked: ", prototypePackage.Ident("False"), ",")
-					}
-					if field.IsWeak() {
-						g.P("IsWeak: true,")
-					}
-					// NOTE: MessageType and EnumType are populated by init.
-					g.P("},")
-				}
-				g.P("},")
-			}
-			if oneofs := message.Desc.Oneofs(); oneofs.Len() > 0 {
-				g.P("Oneofs: []", prototypePackage.Ident("Oneof"), "{")
-				for i := 0; i < oneofs.Len(); i++ {
-					oneof := oneofs.Get(i)
-					g.P("{Name: ", strconv.Quote(string(oneof.Name())), "},")
-				}
-				g.P("},")
-			}
-			if resvNames := message.Desc.ReservedNames(); resvNames.Len() > 0 {
-				var ss []string
-				for i := 0; i < resvNames.Len(); i++ {
-					s := resvNames.Get(i)
-					ss = append(ss, strconv.Quote(string(s)))
-				}
-				g.P("ReservedNames: []", protoreflectPackage.Ident("Name"), "{", strings.Join(ss, ","), "},")
-			}
-			if resvRanges := message.Desc.ReservedRanges(); resvRanges.Len() > 0 {
-				var ss []string
-				for i := 0; i < resvRanges.Len(); i++ {
-					r := resvRanges.Get(i)
-					ss = append(ss, fmt.Sprintf("{%d,%d}", r[0], r[1]))
-				}
-				g.P("ReservedRanges: [][2]", protoreflectPackage.Ident("FieldNumber"), "{", strings.Join(ss, ","), "},")
-			}
-			if extRanges := message.Desc.ExtensionRanges(); extRanges.Len() > 0 {
-				var ss []string
-				for i := 0; i < extRanges.Len(); i++ {
-					r := extRanges.Get(i)
-					ss = append(ss, fmt.Sprintf("{%d,%d}", r[0], r[1]))
-				}
-				g.P("ExtensionRanges: [][2]", protoreflectPackage.Ident("FieldNumber"), "{", strings.Join(ss, ","), "},")
-			}
-			if message.Desc.IsMapEntry() {
-				g.P("IsMapEntry: true,")
+	// Copy the local list of extension types into each global variable.
+	for i, extension := range f.allExtensions {
+		g.P(extensionVar(f.File, extension), ".Type = extensionTypes[", i, "]")
+	}
+
+	// TODO: Add v2 registration and stop v1 registration in genInitFunction.
+
+	// The descriptor proto needs to register the option types with the
+	// prototype so that the package can properly handle those option types.
+	if isDescriptor(f.File) {
+		for _, m := range f.allMessages {
+			name := m.GoIdent.GoName
+			if strings.HasSuffix(name, "Options") {
+				g.P(prototypePackage.Ident("X"), ".Register", name, "((*", name, ")(nil))")
 			}
-			// NOTE: Messages, Enums, and Extensions are populated by init.
-			g.P("},")
 		}
-		g.P("}")
 	}
 
-	// TODO: Add support for extensions.
-	// TODO: Add support for services.
+	g.P(goTypesVarName(f), " = nil") // allow GC to reclaim resource
+	g.P(depIdxsVarName(f), " = nil") // allow GC to reclaim resource
+	g.P("}")
 }
 
 func genReflectEnum(gen *protogen.Plugin, g *protogen.GeneratedFile, f *fileInfo, enum *protogen.Enum) {
@@ -367,48 +226,22 @@ func genReflectMessage(gen *protogen.Plugin, g *protogen.GeneratedFile, f *fileI
 		return
 	}
 
-	shadowType := shadowTypeName(message.GoIdent)
-	g.P("type ", shadowType, " struct{m *", message.GoIdent, "}")
-	g.P()
-
 	idx := f.allMessagesByPtr[message]
 	typesVar := messageTypesVarName(f)
 	g.P("func (m *", message.GoIdent, ") ProtoReflect() ", protoreflectPackage.Ident("Message"), " {")
-	g.P("return ", shadowType, "{m}")
-	g.P("}")
-	g.P("func (m ", shadowType, ") Type() ", protoreflectPackage.Ident("MessageType"), " {")
-	g.P("return ", typesVar, "[", idx, "].Type")
-	g.P("}")
-	g.P("func (m ", shadowType, ") KnownFields() ", protoreflectPackage.Ident("KnownFields"), " {")
-	g.P("return ", typesVar, "[", idx, "].KnownFieldsOf(m.m)")
-	g.P("}")
-	g.P("func (m ", shadowType, ") UnknownFields() ", protoreflectPackage.Ident("UnknownFields"), " {")
-	g.P("return ", typesVar, "[", idx, "].UnknownFieldsOf(m.m)")
-	g.P("}")
-	g.P("func (m ", shadowType, ") Interface() ", protoreflectPackage.Ident("ProtoMessage"), " {")
-	g.P("return m.m")
+	g.P("return ", typesVar, "[", idx, "].MessageOf(m)")
 	g.P("}")
-	g.P()
 }
 
-func fileDescVarName(f *fileInfo) string {
-	return "xxx_" + f.GoDescriptorIdent.GoName + "_FileDesc"
+func goTypesVarName(f *fileInfo) string {
+	return "xxx_" + f.GoDescriptorIdent.GoName + "_goTypes"
 }
-func enumTypesVarName(f *fileInfo) string {
-	return "xxx_" + f.GoDescriptorIdent.GoName + "_EnumTypes"
+func depIdxsVarName(f *fileInfo) string {
+	return "xxx_" + f.GoDescriptorIdent.GoName + "_depIdxs"
 }
-func enumDescsVarName(f *fileInfo) string {
-	return "xxx_" + f.GoDescriptorIdent.GoName + "_EnumDescs"
+func enumTypesVarName(f *fileInfo) string {
+	return "xxx_" + f.GoDescriptorIdent.GoName + "_enumTypes"
 }
 func messageTypesVarName(f *fileInfo) string {
-	return "xxx_" + f.GoDescriptorIdent.GoName + "_MessageTypes"
-}
-func messageDescsVarName(f *fileInfo) string {
-	return "xxx_" + f.GoDescriptorIdent.GoName + "_MessageDescs"
-}
-func extensionDescsVarName(f *fileInfo) string {
-	return "xxx_" + f.GoDescriptorIdent.GoName + "_ExtensionDescs"
-}
-func shadowTypeName(ident protogen.GoIdent) string {
-	return "xxx_" + ident.GoName
+	return "xxx_" + f.GoDescriptorIdent.GoName + "_messageTypes"
 }

+ 59 - 89
cmd/protoc-gen-go/testdata/annotations/annotations.pb.go

@@ -4,10 +4,12 @@
 package annotations
 
 import (
+	bytes "bytes"
+	gzip "compress/gzip"
 	proto "github.com/golang/protobuf/proto"
 	protoreflect "github.com/golang/protobuf/v2/reflect/protoreflect"
-	prototype "github.com/golang/protobuf/v2/reflect/prototype"
 	protoimpl "github.com/golang/protobuf/v2/runtime/protoimpl"
+	reflect "reflect"
 )
 
 // This is a compile-time assertion to ensure that this generated file
@@ -23,7 +25,7 @@ const (
 )
 
 func (e AnnotationsTestEnum) Type() protoreflect.EnumType {
-	return xxx_Annotations_protoFile_EnumTypes[0]
+	return xxx_Annotations_protoFile_enumTypes[0]
 }
 func (e AnnotationsTestEnum) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -57,7 +59,7 @@ func (x *AnnotationsTestEnum) UnmarshalJSON(data []byte) error {
 }
 
 func (AnnotationsTestEnum) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_21dfaf6fd39fa3b7, []int{0}
+	return fileDescriptor_21dfaf6fd39fa3b7_gzipped, []int{0}
 }
 
 type AnnotationsTestMessage struct {
@@ -67,29 +69,14 @@ type AnnotationsTestMessage struct {
 	XXX_sizecache        int32    `json:"-"`
 }
 
-type xxx_AnnotationsTestMessage struct{ m *AnnotationsTestMessage }
-
 func (m *AnnotationsTestMessage) ProtoReflect() protoreflect.Message {
-	return xxx_AnnotationsTestMessage{m}
-}
-func (m xxx_AnnotationsTestMessage) Type() protoreflect.MessageType {
-	return xxx_Annotations_protoFile_MessageTypes[0].Type
-}
-func (m xxx_AnnotationsTestMessage) KnownFields() protoreflect.KnownFields {
-	return xxx_Annotations_protoFile_MessageTypes[0].KnownFieldsOf(m.m)
-}
-func (m xxx_AnnotationsTestMessage) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Annotations_protoFile_MessageTypes[0].UnknownFieldsOf(m.m)
+	return xxx_Annotations_protoFile_messageTypes[0].MessageOf(m)
 }
-func (m xxx_AnnotationsTestMessage) Interface() protoreflect.ProtoMessage {
-	return m.m
-}
-
 func (m *AnnotationsTestMessage) Reset()         { *m = AnnotationsTestMessage{} }
 func (m *AnnotationsTestMessage) String() string { return proto.CompactTextString(m) }
 func (*AnnotationsTestMessage) ProtoMessage()    {}
 func (*AnnotationsTestMessage) Descriptor() ([]byte, []int) {
-	return fileDescriptor_21dfaf6fd39fa3b7, []int{0}
+	return fileDescriptor_21dfaf6fd39fa3b7_gzipped, []int{0}
 }
 
 func (m *AnnotationsTestMessage) XXX_Unmarshal(b []byte) error {
@@ -118,83 +105,66 @@ func (m *AnnotationsTestMessage) GetAnnotationsTestField() string {
 }
 
 func init() {
-	proto.RegisterFile("annotations/annotations.proto", fileDescriptor_21dfaf6fd39fa3b7)
+	proto.RegisterFile("annotations/annotations.proto", fileDescriptor_21dfaf6fd39fa3b7_gzipped)
 	proto.RegisterEnum("goproto.protoc.annotations.AnnotationsTestEnum", AnnotationsTestEnum_name, AnnotationsTestEnum_value)
 	proto.RegisterType((*AnnotationsTestMessage)(nil), "goproto.protoc.annotations.AnnotationsTestMessage")
 }
 
 var fileDescriptor_21dfaf6fd39fa3b7 = []byte{
-	// 194 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x4d, 0xcc, 0xcb, 0xcb,
-	0x2f, 0x49, 0x2c, 0xc9, 0xcc, 0xcf, 0x2b, 0xd6, 0x47, 0x62, 0xeb, 0x15, 0x14, 0xe5, 0x97, 0xe4,
-	0x0b, 0x49, 0xa5, 0xe7, 0x83, 0x19, 0x10, 0x6e, 0xb2, 0x1e, 0x92, 0x0a, 0x25, 0x1f, 0x2e, 0x31,
-	0x47, 0x04, 0x37, 0x24, 0xb5, 0xb8, 0xc4, 0x37, 0xb5, 0xb8, 0x38, 0x31, 0x3d, 0x55, 0xc8, 0x88,
-	0x4b, 0x04, 0x4d, 0xc6, 0x2d, 0x33, 0x35, 0x27, 0x45, 0x82, 0x51, 0x81, 0x51, 0x83, 0x33, 0x08,
-	0xab, 0x9c, 0x96, 0x19, 0x97, 0x30, 0x9a, 0xb8, 0x6b, 0x5e, 0x69, 0xae, 0x90, 0x3c, 0x97, 0xb4,
-	0xa3, 0x9f, 0x9f, 0x7f, 0x88, 0x63, 0x88, 0xa7, 0xbf, 0x5f, 0x70, 0x7c, 0x88, 0x6b, 0x70, 0x48,
-	0xbc, 0xab, 0x5f, 0xa8, 0x6f, 0x7c, 0x98, 0xa3, 0x4f, 0xa8, 0xab, 0x00, 0x83, 0x93, 0x5b, 0x94,
-	0x4b, 0x7a, 0x66, 0x49, 0x46, 0x69, 0x92, 0x5e, 0x72, 0x7e, 0xae, 0x7e, 0x7a, 0x7e, 0x4e, 0x62,
-	0x5e, 0xba, 0x3e, 0xd8, 0xb5, 0x49, 0xa5, 0x69, 0xfa, 0x65, 0x46, 0xfa, 0xc9, 0xb9, 0x29, 0x10,
-	0x7e, 0xb2, 0x6e, 0x7a, 0x6a, 0x9e, 0x6e, 0x7a, 0xbe, 0x7e, 0x49, 0x6a, 0x71, 0x49, 0x4a, 0x62,
-	0x49, 0x22, 0xb2, 0x7f, 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0x40, 0xd6, 0xe5, 0x9d, 0x09, 0x01,
-	0x00, 0x00,
-}
-
-func init() {
-	xxx_Annotations_protoFile_FileDesc.Enums = xxx_Annotations_protoFile_EnumDescs[0:1]
-	xxx_Annotations_protoFile_FileDesc.Messages = xxx_Annotations_protoFile_MessageDescs[0:1]
-	var err error
-	Annotations_protoFile, err = prototype.NewFile(&xxx_Annotations_protoFile_FileDesc)
-	if err != nil {
-		panic(err)
-	}
-}
+	// 265 bytes of the wire-encoded FileDescriptorProto
+	0x0a, 0x1d, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x6e,
+	0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12,
+	0x1a, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e,
+	0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x4c, 0x0a, 0x16, 0x41,
+	0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x54, 0x65, 0x73, 0x74, 0x4d, 0x65,
+	0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x32, 0x0a, 0x14, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74,
+	0x69, 0x6f, 0x6e, 0x73, 0x54, 0x65, 0x73, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x18, 0x01, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x14, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73,
+	0x54, 0x65, 0x73, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x2a, 0x36, 0x0a, 0x13, 0x41, 0x6e, 0x6e,
+	0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x54, 0x65, 0x73, 0x74, 0x45, 0x6e, 0x75, 0x6d,
+	0x12, 0x1f, 0x0a, 0x1b, 0x41, 0x4e, 0x4e, 0x4f, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x5f,
+	0x54, 0x45, 0x53, 0x54, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x10,
+	0x00, 0x42, 0x46, 0x5a, 0x44, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f,
+	0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f,
+	0x76, 0x32, 0x2f, 0x63, 0x6d, 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65,
+	0x6e, 0x2d, 0x67, 0x6f, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x64, 0x61, 0x74, 0x61, 0x2f, 0x61, 0x6e,
+	0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73,
+}
+
+var fileDescriptor_21dfaf6fd39fa3b7_gzipped = func() []byte {
+	bb := new(bytes.Buffer)
+	zw, _ := gzip.NewWriterLevel(bb, gzip.NoCompression)
+	zw.Write(fileDescriptor_21dfaf6fd39fa3b7)
+	zw.Close()
+	return bb.Bytes()
+}()
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
 var Annotations_protoFile protoreflect.FileDescriptor
 
-var xxx_Annotations_protoFile_FileDesc = prototype.File{
-	Syntax:  protoreflect.Proto2,
-	Path:    "annotations/annotations.proto",
-	Package: "goproto.protoc.annotations",
-}
-var xxx_Annotations_protoFile_EnumTypes = [1]protoreflect.EnumType{
-	prototype.GoEnum(
-		xxx_Annotations_protoFile_EnumDescs[0].Reference(),
-		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
-			return AnnotationsTestEnum(n)
-		},
-	),
-}
-var xxx_Annotations_protoFile_EnumDescs = [1]prototype.Enum{
-	{
-		Name: "AnnotationsTestEnum",
-		Values: []prototype.EnumValue{
-			{Name: "ANNOTATIONS_TEST_ENUM_VALUE", Number: 0},
-		},
-	},
-}
-var xxx_Annotations_protoFile_MessageTypes = [1]protoimpl.MessageType{
-	{Type: prototype.GoMessage(
-		xxx_Annotations_protoFile_MessageDescs[0].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_AnnotationsTestMessage{new(AnnotationsTestMessage)}
-		},
-	)},
-}
-var xxx_Annotations_protoFile_MessageDescs = [1]prototype.Message{
-	{
-		Name: "AnnotationsTestMessage",
-		Fields: []prototype.Field{
-			{
-				Name:        "AnnotationsTestField",
-				Number:      1,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.StringKind,
-				JSONName:    "AnnotationsTestField",
-				IsPacked:    prototype.False,
-			},
-		},
-	},
+var xxx_Annotations_protoFile_enumTypes [1]protoreflect.EnumType
+var xxx_Annotations_protoFile_messageTypes [1]protoimpl.MessageType
+var xxx_Annotations_protoFile_goTypes = []interface{}{
+	(AnnotationsTestEnum)(0),       // 0: goproto.protoc.annotations.AnnotationsTestEnum
+	(*AnnotationsTestMessage)(nil), // 1: goproto.protoc.annotations.AnnotationsTestMessage
+}
+var xxx_Annotations_protoFile_depIdxs = []int32{}
+
+func init() {
+	var messageTypes [1]protoreflect.MessageType
+	Annotations_protoFile = protoimpl.FileBuilder{
+		RawDescriptor:      fileDescriptor_21dfaf6fd39fa3b7,
+		GoTypes:            xxx_Annotations_protoFile_goTypes,
+		DependencyIndexes:  xxx_Annotations_protoFile_depIdxs,
+		EnumOutputTypes:    xxx_Annotations_protoFile_enumTypes[:],
+		MessageOutputTypes: messageTypes[:],
+	}.Init()
+	messageGoTypes := xxx_Annotations_protoFile_goTypes[1:][:1]
+	for i, mt := range messageTypes[:] {
+		xxx_Annotations_protoFile_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
+		xxx_Annotations_protoFile_messageTypes[i].PBType = mt
+	}
+	xxx_Annotations_protoFile_goTypes = nil
+	xxx_Annotations_protoFile_depIdxs = nil
 }

+ 69 - 213
cmd/protoc-gen-go/testdata/comments/comments.pb.go

@@ -6,10 +6,12 @@
 package comments
 
 import (
+	bytes "bytes"
+	gzip "compress/gzip"
 	proto "github.com/golang/protobuf/proto"
 	protoreflect "github.com/golang/protobuf/v2/reflect/protoreflect"
-	prototype "github.com/golang/protobuf/v2/reflect/prototype"
 	protoimpl "github.com/golang/protobuf/v2/runtime/protoimpl"
+	reflect "reflect"
 )
 
 // This is a compile-time assertion to ensure that this generated file
@@ -33,29 +35,14 @@ type Message1 struct {
 	XXX_sizecache        int32              `json:"-"`
 }
 
-type xxx_Message1 struct{ m *Message1 }
-
 func (m *Message1) ProtoReflect() protoreflect.Message {
-	return xxx_Message1{m}
-}
-func (m xxx_Message1) Type() protoreflect.MessageType {
-	return xxx_Comments_protoFile_MessageTypes[0].Type
-}
-func (m xxx_Message1) KnownFields() protoreflect.KnownFields {
-	return xxx_Comments_protoFile_MessageTypes[0].KnownFieldsOf(m.m)
+	return xxx_Comments_protoFile_messageTypes[0].MessageOf(m)
 }
-func (m xxx_Message1) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Comments_protoFile_MessageTypes[0].UnknownFieldsOf(m.m)
-}
-func (m xxx_Message1) Interface() protoreflect.ProtoMessage {
-	return m.m
-}
-
 func (m *Message1) Reset()         { *m = Message1{} }
 func (m *Message1) String() string { return proto.CompactTextString(m) }
 func (*Message1) ProtoMessage()    {}
 func (*Message1) Descriptor() ([]byte, []int) {
-	return fileDescriptor_885e8293f1fab554, []int{0}
+	return fileDescriptor_885e8293f1fab554_gzipped, []int{0}
 }
 
 func (m *Message1) XXX_Unmarshal(b []byte) error {
@@ -121,29 +108,14 @@ type Message2 struct {
 	XXX_sizecache        int32    `json:"-"`
 }
 
-type xxx_Message2 struct{ m *Message2 }
-
 func (m *Message2) ProtoReflect() protoreflect.Message {
-	return xxx_Message2{m}
-}
-func (m xxx_Message2) Type() protoreflect.MessageType {
-	return xxx_Comments_protoFile_MessageTypes[1].Type
-}
-func (m xxx_Message2) KnownFields() protoreflect.KnownFields {
-	return xxx_Comments_protoFile_MessageTypes[1].KnownFieldsOf(m.m)
+	return xxx_Comments_protoFile_messageTypes[1].MessageOf(m)
 }
-func (m xxx_Message2) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Comments_protoFile_MessageTypes[1].UnknownFieldsOf(m.m)
-}
-func (m xxx_Message2) Interface() protoreflect.ProtoMessage {
-	return m.m
-}
-
 func (m *Message2) Reset()         { *m = Message2{} }
 func (m *Message2) String() string { return proto.CompactTextString(m) }
 func (*Message2) ProtoMessage()    {}
 func (*Message2) Descriptor() ([]byte, []int) {
-	return fileDescriptor_885e8293f1fab554, []int{1}
+	return fileDescriptor_885e8293f1fab554_gzipped, []int{1}
 }
 
 func (m *Message2) XXX_Unmarshal(b []byte) error {
@@ -171,29 +143,14 @@ type Message1_Message1A struct {
 	XXX_sizecache        int32    `json:"-"`
 }
 
-type xxx_Message1_Message1A struct{ m *Message1_Message1A }
-
 func (m *Message1_Message1A) ProtoReflect() protoreflect.Message {
-	return xxx_Message1_Message1A{m}
-}
-func (m xxx_Message1_Message1A) Type() protoreflect.MessageType {
-	return xxx_Comments_protoFile_MessageTypes[2].Type
-}
-func (m xxx_Message1_Message1A) KnownFields() protoreflect.KnownFields {
-	return xxx_Comments_protoFile_MessageTypes[2].KnownFieldsOf(m.m)
+	return xxx_Comments_protoFile_messageTypes[2].MessageOf(m)
 }
-func (m xxx_Message1_Message1A) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Comments_protoFile_MessageTypes[2].UnknownFieldsOf(m.m)
-}
-func (m xxx_Message1_Message1A) Interface() protoreflect.ProtoMessage {
-	return m.m
-}
-
 func (m *Message1_Message1A) Reset()         { *m = Message1_Message1A{} }
 func (m *Message1_Message1A) String() string { return proto.CompactTextString(m) }
 func (*Message1_Message1A) ProtoMessage()    {}
 func (*Message1_Message1A) Descriptor() ([]byte, []int) {
-	return fileDescriptor_885e8293f1fab554, []int{0, 0}
+	return fileDescriptor_885e8293f1fab554_gzipped, []int{0, 0}
 }
 
 func (m *Message1_Message1A) XXX_Unmarshal(b []byte) error {
@@ -221,29 +178,14 @@ type Message1_Message1B struct {
 	XXX_sizecache        int32    `json:"-"`
 }
 
-type xxx_Message1_Message1B struct{ m *Message1_Message1B }
-
 func (m *Message1_Message1B) ProtoReflect() protoreflect.Message {
-	return xxx_Message1_Message1B{m}
-}
-func (m xxx_Message1_Message1B) Type() protoreflect.MessageType {
-	return xxx_Comments_protoFile_MessageTypes[3].Type
-}
-func (m xxx_Message1_Message1B) KnownFields() protoreflect.KnownFields {
-	return xxx_Comments_protoFile_MessageTypes[3].KnownFieldsOf(m.m)
-}
-func (m xxx_Message1_Message1B) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Comments_protoFile_MessageTypes[3].UnknownFieldsOf(m.m)
-}
-func (m xxx_Message1_Message1B) Interface() protoreflect.ProtoMessage {
-	return m.m
+	return xxx_Comments_protoFile_messageTypes[3].MessageOf(m)
 }
-
 func (m *Message1_Message1B) Reset()         { *m = Message1_Message1B{} }
 func (m *Message1_Message1B) String() string { return proto.CompactTextString(m) }
 func (*Message1_Message1B) ProtoMessage()    {}
 func (*Message1_Message1B) Descriptor() ([]byte, []int) {
-	return fileDescriptor_885e8293f1fab554, []int{0, 1}
+	return fileDescriptor_885e8293f1fab554_gzipped, []int{0, 1}
 }
 
 func (m *Message1_Message1B) XXX_Unmarshal(b []byte) error {
@@ -271,29 +213,14 @@ type Message2_Message2A struct {
 	XXX_sizecache        int32    `json:"-"`
 }
 
-type xxx_Message2_Message2A struct{ m *Message2_Message2A }
-
 func (m *Message2_Message2A) ProtoReflect() protoreflect.Message {
-	return xxx_Message2_Message2A{m}
-}
-func (m xxx_Message2_Message2A) Type() protoreflect.MessageType {
-	return xxx_Comments_protoFile_MessageTypes[4].Type
-}
-func (m xxx_Message2_Message2A) KnownFields() protoreflect.KnownFields {
-	return xxx_Comments_protoFile_MessageTypes[4].KnownFieldsOf(m.m)
-}
-func (m xxx_Message2_Message2A) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Comments_protoFile_MessageTypes[4].UnknownFieldsOf(m.m)
-}
-func (m xxx_Message2_Message2A) Interface() protoreflect.ProtoMessage {
-	return m.m
+	return xxx_Comments_protoFile_messageTypes[4].MessageOf(m)
 }
-
 func (m *Message2_Message2A) Reset()         { *m = Message2_Message2A{} }
 func (m *Message2_Message2A) String() string { return proto.CompactTextString(m) }
 func (*Message2_Message2A) ProtoMessage()    {}
 func (*Message2_Message2A) Descriptor() ([]byte, []int) {
-	return fileDescriptor_885e8293f1fab554, []int{1, 0}
+	return fileDescriptor_885e8293f1fab554_gzipped, []int{1, 0}
 }
 
 func (m *Message2_Message2A) XXX_Unmarshal(b []byte) error {
@@ -321,29 +248,14 @@ type Message2_Message2B struct {
 	XXX_sizecache        int32    `json:"-"`
 }
 
-type xxx_Message2_Message2B struct{ m *Message2_Message2B }
-
 func (m *Message2_Message2B) ProtoReflect() protoreflect.Message {
-	return xxx_Message2_Message2B{m}
-}
-func (m xxx_Message2_Message2B) Type() protoreflect.MessageType {
-	return xxx_Comments_protoFile_MessageTypes[5].Type
-}
-func (m xxx_Message2_Message2B) KnownFields() protoreflect.KnownFields {
-	return xxx_Comments_protoFile_MessageTypes[5].KnownFieldsOf(m.m)
-}
-func (m xxx_Message2_Message2B) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Comments_protoFile_MessageTypes[5].UnknownFieldsOf(m.m)
+	return xxx_Comments_protoFile_messageTypes[5].MessageOf(m)
 }
-func (m xxx_Message2_Message2B) Interface() protoreflect.ProtoMessage {
-	return m.m
-}
-
 func (m *Message2_Message2B) Reset()         { *m = Message2_Message2B{} }
 func (m *Message2_Message2B) String() string { return proto.CompactTextString(m) }
 func (*Message2_Message2B) ProtoMessage()    {}
 func (*Message2_Message2B) Descriptor() ([]byte, []int) {
-	return fileDescriptor_885e8293f1fab554, []int{1, 1}
+	return fileDescriptor_885e8293f1fab554_gzipped, []int{1, 1}
 }
 
 func (m *Message2_Message2B) XXX_Unmarshal(b []byte) error {
@@ -365,7 +277,7 @@ func (m *Message2_Message2B) XXX_DiscardUnknown() {
 var xxx_messageInfo_Message2_Message2B proto.InternalMessageInfo
 
 func init() {
-	proto.RegisterFile("comments/comments.proto", fileDescriptor_885e8293f1fab554)
+	proto.RegisterFile("comments/comments.proto", fileDescriptor_885e8293f1fab554_gzipped)
 	proto.RegisterType((*Message1)(nil), "goproto.protoc.comments.Message1")
 	proto.RegisterType((*Message2)(nil), "goproto.protoc.comments.Message2")
 	proto.RegisterType((*Message1_Message1A)(nil), "goproto.protoc.comments.Message1.Message1A")
@@ -375,118 +287,62 @@ func init() {
 }
 
 var fileDescriptor_885e8293f1fab554 = []byte{
-	// 191 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x12, 0x4f, 0xce, 0xcf, 0xcd,
-	0x4d, 0xcd, 0x2b, 0x29, 0xd6, 0x87, 0x31, 0xf4, 0x0a, 0x8a, 0xf2, 0x4b, 0xf2, 0x85, 0xc4, 0xd3,
-	0xf3, 0xc1, 0x0c, 0x08, 0x37, 0x59, 0x0f, 0x26, 0xad, 0x54, 0xc8, 0xc5, 0xe1, 0x9b, 0x5a, 0x5c,
-	0x9c, 0x98, 0x9e, 0x6a, 0x28, 0x24, 0xc1, 0xc5, 0xee, 0x96, 0x99, 0x9a, 0x93, 0x62, 0xe8, 0x28,
-	0xc1, 0xa8, 0xc0, 0xa8, 0xc1, 0x19, 0x04, 0xe3, 0x0a, 0xa9, 0x71, 0xf1, 0xfa, 0xe7, 0xa5, 0xe6,
-	0xa7, 0x19, 0x3a, 0x42, 0x44, 0x24, 0x98, 0x40, 0xf2, 0x1e, 0x0c, 0x41, 0xa8, 0xc2, 0x52, 0xdc,
-	0x5c, 0x9c, 0x30, 0xd3, 0x1c, 0x91, 0x39, 0x4e, 0x4e, 0x9c, 0x5c, 0xec, 0x10, 0xa5, 0x89, 0x4a,
-	0x2a, 0x70, 0x2b, 0x8d, 0x90, 0xd4, 0x18, 0x21, 0x6b, 0x30, 0x72, 0x72, 0x72, 0x8e, 0x72, 0x4c,
-	0xcf, 0x2c, 0xc9, 0x28, 0x4d, 0x02, 0xb9, 0x55, 0x3f, 0x3d, 0x3f, 0x27, 0x31, 0x2f, 0x5d, 0x1f,
-	0xec, 0xfa, 0xa4, 0xd2, 0x34, 0xfd, 0x32, 0x23, 0xfd, 0xe4, 0xdc, 0x14, 0x08, 0x3f, 0x59, 0x37,
-	0x3d, 0x35, 0x4f, 0x37, 0x3d, 0x5f, 0xbf, 0x24, 0xb5, 0xb8, 0x24, 0x25, 0xb1, 0x24, 0x11, 0xee,
-	0x79, 0x40, 0x00, 0x00, 0x00, 0xff, 0xff, 0x27, 0xeb, 0x57, 0xe0, 0x10, 0x01, 0x00, 0x00,
-}
-
-func init() {
-	xxx_Comments_protoFile_FileDesc.Messages = xxx_Comments_protoFile_MessageDescs[0:2]
-	xxx_Comments_protoFile_MessageDescs[0].Messages = xxx_Comments_protoFile_MessageDescs[2:4]
-	xxx_Comments_protoFile_MessageDescs[1].Messages = xxx_Comments_protoFile_MessageDescs[4:6]
-	var err error
-	Comments_protoFile, err = prototype.NewFile(&xxx_Comments_protoFile_FileDesc)
-	if err != nil {
-		panic(err)
-	}
-}
+	// 272 bytes of the wire-encoded FileDescriptorProto
+	0x0a, 0x17, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x65,
+	0x6e, 0x74, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x17, 0x67, 0x6f, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e,
+	0x74, 0x73, 0x22, 0x71, 0x0a, 0x08, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x31, 0x12, 0x18,
+	0x0a, 0x07, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x31, 0x41, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x07, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x31, 0x41, 0x12, 0x26, 0x0a, 0x0d, 0x4f, 0x6e, 0x65, 0x6f,
+	0x66, 0x31, 0x41, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x31, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48,
+	0x00, 0x52, 0x0d, 0x4f, 0x6e, 0x65, 0x6f, 0x66, 0x31, 0x41, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x31,
+	0x1a, 0x0b, 0x0a, 0x09, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x31, 0x41, 0x1a, 0x0b, 0x0a,
+	0x09, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x31, 0x42, 0x42, 0x09, 0x0a, 0x07, 0x4f, 0x6e,
+	0x65, 0x6f, 0x66, 0x31, 0x61, 0x22, 0x24, 0x0a, 0x08, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,
+	0x32, 0x1a, 0x0b, 0x0a, 0x09, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x32, 0x41, 0x1a, 0x0b,
+	0x0a, 0x09, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x32, 0x42, 0x42, 0x43, 0x5a, 0x41, 0x67,
+	0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67,
+	0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x76, 0x32, 0x2f, 0x63, 0x6d, 0x64,
+	0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x67, 0x6f, 0x2f, 0x74,
+	0x65, 0x73, 0x74, 0x64, 0x61, 0x74, 0x61, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73,
+}
+
+var fileDescriptor_885e8293f1fab554_gzipped = func() []byte {
+	bb := new(bytes.Buffer)
+	zw, _ := gzip.NewWriterLevel(bb, gzip.NoCompression)
+	zw.Write(fileDescriptor_885e8293f1fab554)
+	zw.Close()
+	return bb.Bytes()
+}()
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
 var Comments_protoFile protoreflect.FileDescriptor
 
-var xxx_Comments_protoFile_FileDesc = prototype.File{
-	Syntax:  protoreflect.Proto2,
-	Path:    "comments/comments.proto",
-	Package: "goproto.protoc.comments",
-}
-var xxx_Comments_protoFile_MessageTypes = [6]protoimpl.MessageType{
-	{Type: prototype.GoMessage(
-		xxx_Comments_protoFile_MessageDescs[0].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_Message1{new(Message1)}
-		},
-	)},
-	{Type: prototype.GoMessage(
-		xxx_Comments_protoFile_MessageDescs[1].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_Message2{new(Message2)}
-		},
-	)},
-	{Type: prototype.GoMessage(
-		xxx_Comments_protoFile_MessageDescs[2].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_Message1_Message1A{new(Message1_Message1A)}
-		},
-	)},
-	{Type: prototype.GoMessage(
-		xxx_Comments_protoFile_MessageDescs[3].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_Message1_Message1B{new(Message1_Message1B)}
-		},
-	)},
-	{Type: prototype.GoMessage(
-		xxx_Comments_protoFile_MessageDescs[4].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_Message2_Message2A{new(Message2_Message2A)}
-		},
-	)},
-	{Type: prototype.GoMessage(
-		xxx_Comments_protoFile_MessageDescs[5].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_Message2_Message2B{new(Message2_Message2B)}
-		},
-	)},
-}
-var xxx_Comments_protoFile_MessageDescs = [6]prototype.Message{
-	{
-		Name: "Message1",
-		Fields: []prototype.Field{
-			{
-				Name:        "Field1A",
-				Number:      1,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.StringKind,
-				JSONName:    "Field1A",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "Oneof1AField1",
-				Number:      2,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.StringKind,
-				JSONName:    "Oneof1AField1",
-				OneofName:   "Oneof1a",
-				IsPacked:    prototype.False,
-			},
-		},
-		Oneofs: []prototype.Oneof{
-			{Name: "Oneof1a"},
-		},
-	},
-	{
-		Name: "Message2",
-	},
-	{
-		Name: "Message1A",
-	},
-	{
-		Name: "Message1B",
-	},
-	{
-		Name: "Message2A",
-	},
-	{
-		Name: "Message2B",
-	},
+var xxx_Comments_protoFile_messageTypes [6]protoimpl.MessageType
+var xxx_Comments_protoFile_goTypes = []interface{}{
+	(*Message1)(nil),           // 0: goproto.protoc.comments.Message1
+	(*Message2)(nil),           // 1: goproto.protoc.comments.Message2
+	(*Message1_Message1A)(nil), // 2: goproto.protoc.comments.Message1.Message1A
+	(*Message1_Message1B)(nil), // 3: goproto.protoc.comments.Message1.Message1B
+	(*Message2_Message2A)(nil), // 4: goproto.protoc.comments.Message2.Message2A
+	(*Message2_Message2B)(nil), // 5: goproto.protoc.comments.Message2.Message2B
+}
+var xxx_Comments_protoFile_depIdxs = []int32{}
+
+func init() {
+	var messageTypes [6]protoreflect.MessageType
+	Comments_protoFile = protoimpl.FileBuilder{
+		RawDescriptor:      fileDescriptor_885e8293f1fab554,
+		GoTypes:            xxx_Comments_protoFile_goTypes,
+		DependencyIndexes:  xxx_Comments_protoFile_depIdxs,
+		MessageOutputTypes: messageTypes[:],
+	}.Init()
+	messageGoTypes := xxx_Comments_protoFile_goTypes[0:][:6]
+	for i, mt := range messageTypes[:] {
+		xxx_Comments_protoFile_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
+		xxx_Comments_protoFile_messageTypes[i].PBType = mt
+	}
+	xxx_Comments_protoFile_goTypes = nil
+	xxx_Comments_protoFile_depIdxs = nil
 }

+ 58 - 89
cmd/protoc-gen-go/testdata/comments/deprecated.pb.go

@@ -4,10 +4,12 @@
 package comments
 
 import (
+	bytes "bytes"
+	gzip "compress/gzip"
 	proto "github.com/golang/protobuf/proto"
 	protoreflect "github.com/golang/protobuf/v2/reflect/protoreflect"
-	prototype "github.com/golang/protobuf/v2/reflect/prototype"
 	protoimpl "github.com/golang/protobuf/v2/runtime/protoimpl"
+	reflect "reflect"
 )
 
 // This is a compile-time assertion to ensure that this generated file
@@ -22,7 +24,7 @@ const (
 )
 
 func (e DeprecatedEnum) Type() protoreflect.EnumType {
-	return xxx_Deprecated_protoFile_EnumTypes[0]
+	return xxx_Deprecated_protoFile_enumTypes[0]
 }
 func (e DeprecatedEnum) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -41,7 +43,7 @@ func (x DeprecatedEnum) String() string {
 }
 
 func (DeprecatedEnum) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_0336e614ee2de5f7, []int{0}
+	return fileDescriptor_0336e614ee2de5f7_gzipped, []int{0}
 }
 
 // Deprecated: Do not use.
@@ -52,29 +54,14 @@ type DeprecatedMessage struct {
 	XXX_sizecache        int32    `json:"-"`
 }
 
-type xxx_DeprecatedMessage struct{ m *DeprecatedMessage }
-
 func (m *DeprecatedMessage) ProtoReflect() protoreflect.Message {
-	return xxx_DeprecatedMessage{m}
-}
-func (m xxx_DeprecatedMessage) Type() protoreflect.MessageType {
-	return xxx_Deprecated_protoFile_MessageTypes[0].Type
-}
-func (m xxx_DeprecatedMessage) KnownFields() protoreflect.KnownFields {
-	return xxx_Deprecated_protoFile_MessageTypes[0].KnownFieldsOf(m.m)
-}
-func (m xxx_DeprecatedMessage) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Deprecated_protoFile_MessageTypes[0].UnknownFieldsOf(m.m)
+	return xxx_Deprecated_protoFile_messageTypes[0].MessageOf(m)
 }
-func (m xxx_DeprecatedMessage) Interface() protoreflect.ProtoMessage {
-	return m.m
-}
-
 func (m *DeprecatedMessage) Reset()         { *m = DeprecatedMessage{} }
 func (m *DeprecatedMessage) String() string { return proto.CompactTextString(m) }
 func (*DeprecatedMessage) ProtoMessage()    {}
 func (*DeprecatedMessage) Descriptor() ([]byte, []int) {
-	return fileDescriptor_0336e614ee2de5f7, []int{0}
+	return fileDescriptor_0336e614ee2de5f7_gzipped, []int{0}
 }
 
 func (m *DeprecatedMessage) XXX_Unmarshal(b []byte) error {
@@ -104,83 +91,65 @@ func (m *DeprecatedMessage) GetDeprecatedField() string {
 }
 
 func init() {
-	proto.RegisterFile("comments/deprecated.proto", fileDescriptor_0336e614ee2de5f7)
+	proto.RegisterFile("comments/deprecated.proto", fileDescriptor_0336e614ee2de5f7_gzipped)
 	proto.RegisterEnum("goproto.protoc.comments.DeprecatedEnum", DeprecatedEnum_name, DeprecatedEnum_value)
 	proto.RegisterType((*DeprecatedMessage)(nil), "goproto.protoc.comments.DeprecatedMessage")
 }
 
 var fileDescriptor_0336e614ee2de5f7 = []byte{
-	// 206 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x4c, 0xce, 0xcf, 0xcd,
-	0x4d, 0xcd, 0x2b, 0x29, 0xd6, 0x4f, 0x49, 0x2d, 0x28, 0x4a, 0x4d, 0x4e, 0x2c, 0x49, 0x4d, 0xd1,
-	0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0x4f, 0xcf, 0x07, 0x33, 0x20, 0xdc, 0x64, 0x3d, 0x98,
-	0x4a, 0x25, 0x37, 0x2e, 0x41, 0x17, 0xb8, 0x62, 0xdf, 0xd4, 0xe2, 0xe2, 0xc4, 0xf4, 0x54, 0x21,
-	0x5d, 0x2e, 0x01, 0x84, 0x09, 0xf1, 0x69, 0x99, 0xa9, 0x39, 0x29, 0x12, 0x8c, 0x0a, 0x8c, 0x1a,
-	0x9c, 0x4e, 0x4c, 0x12, 0x8c, 0x41, 0xfc, 0x08, 0x39, 0x37, 0x90, 0x94, 0x15, 0x93, 0x04, 0xa3,
-	0x96, 0x06, 0x17, 0x1f, 0xc2, 0x1c, 0xd7, 0xbc, 0xd2, 0x5c, 0x21, 0x21, 0x2e, 0x2e, 0x17, 0xd7,
-	0x80, 0x20, 0x57, 0x67, 0xc7, 0x10, 0x57, 0x17, 0x01, 0x06, 0x29, 0x26, 0x0e, 0x46, 0x29, 0x26,
-	0x09, 0x46, 0x27, 0xb7, 0x28, 0xc7, 0xf4, 0xcc, 0x92, 0x8c, 0xd2, 0x24, 0x90, 0x23, 0xf4, 0xd3,
-	0xf3, 0x73, 0x12, 0xf3, 0xd2, 0xf5, 0xc1, 0xce, 0x4a, 0x2a, 0x4d, 0xd3, 0x2f, 0x33, 0xd2, 0x4f,
-	0xce, 0x4d, 0x81, 0xf0, 0x93, 0x75, 0xd3, 0x53, 0xf3, 0x74, 0xd3, 0xf3, 0xf5, 0x4b, 0x52, 0x8b,
-	0x4b, 0x52, 0x12, 0x4b, 0x12, 0xf5, 0x61, 0xce, 0xde, 0xc1, 0xc8, 0x98, 0xc4, 0x06, 0x56, 0x63,
-	0x0c, 0x08, 0x00, 0x00, 0xff, 0xff, 0x39, 0xab, 0x43, 0x93, 0xf6, 0x00, 0x00, 0x00,
-}
-
-func init() {
-	xxx_Deprecated_protoFile_FileDesc.Enums = xxx_Deprecated_protoFile_EnumDescs[0:1]
-	xxx_Deprecated_protoFile_FileDesc.Messages = xxx_Deprecated_protoFile_MessageDescs[0:1]
-	var err error
-	Deprecated_protoFile, err = prototype.NewFile(&xxx_Deprecated_protoFile_FileDesc)
-	if err != nil {
-		panic(err)
-	}
-}
+	// 246 bytes of the wire-encoded FileDescriptorProto
+	0x0a, 0x19, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x64, 0x65, 0x70, 0x72, 0x65,
+	0x63, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x17, 0x67, 0x6f, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x63, 0x6f, 0x6d, 0x6d,
+	0x65, 0x6e, 0x74, 0x73, 0x22, 0x46, 0x0a, 0x11, 0x44, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74,
+	0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2d, 0x0a, 0x10, 0x64, 0x65, 0x70,
+	0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x18, 0x01, 0x20,
+	0x01, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0f, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61,
+	0x74, 0x65, 0x64, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x3a, 0x02, 0x18, 0x01, 0x2a, 0x28, 0x0a, 0x0e,
+	0x44, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x12,
+	0x0a, 0x0a, 0x44, 0x45, 0x50, 0x52, 0x45, 0x43, 0x41, 0x54, 0x45, 0x44, 0x10, 0x00, 0x1a, 0x02,
+	0x08, 0x01, 0x1a, 0x02, 0x18, 0x01, 0x42, 0x46, 0x5a, 0x41, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62,
+	0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x62, 0x75, 0x66, 0x2f, 0x76, 0x32, 0x2f, 0x63, 0x6d, 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x67, 0x6f, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x64, 0x61,
+	0x74, 0x61, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0xb8, 0x01, 0x01, 0x62, 0x06,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+}
+
+var fileDescriptor_0336e614ee2de5f7_gzipped = func() []byte {
+	bb := new(bytes.Buffer)
+	zw, _ := gzip.NewWriterLevel(bb, gzip.NoCompression)
+	zw.Write(fileDescriptor_0336e614ee2de5f7)
+	zw.Close()
+	return bb.Bytes()
+}()
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
 var Deprecated_protoFile protoreflect.FileDescriptor
 
-var xxx_Deprecated_protoFile_FileDesc = prototype.File{
-	Syntax:  protoreflect.Proto3,
-	Path:    "comments/deprecated.proto",
-	Package: "goproto.protoc.comments",
-}
-var xxx_Deprecated_protoFile_EnumTypes = [1]protoreflect.EnumType{
-	prototype.GoEnum(
-		xxx_Deprecated_protoFile_EnumDescs[0].Reference(),
-		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
-			return DeprecatedEnum(n)
-		},
-	),
-}
-var xxx_Deprecated_protoFile_EnumDescs = [1]prototype.Enum{
-	{
-		Name: "DeprecatedEnum",
-		Values: []prototype.EnumValue{
-			{Name: "DEPRECATED", Number: 0},
-		},
-	},
-}
-var xxx_Deprecated_protoFile_MessageTypes = [1]protoimpl.MessageType{
-	{Type: prototype.GoMessage(
-		xxx_Deprecated_protoFile_MessageDescs[0].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_DeprecatedMessage{new(DeprecatedMessage)}
-		},
-	)},
-}
-var xxx_Deprecated_protoFile_MessageDescs = [1]prototype.Message{
-	{
-		Name: "DeprecatedMessage",
-		Fields: []prototype.Field{
-			{
-				Name:        "deprecated_field",
-				Number:      1,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.StringKind,
-				JSONName:    "deprecatedField",
-				IsPacked:    prototype.False,
-			},
-		},
-	},
+var xxx_Deprecated_protoFile_enumTypes [1]protoreflect.EnumType
+var xxx_Deprecated_protoFile_messageTypes [1]protoimpl.MessageType
+var xxx_Deprecated_protoFile_goTypes = []interface{}{
+	(DeprecatedEnum)(0),       // 0: goproto.protoc.comments.DeprecatedEnum
+	(*DeprecatedMessage)(nil), // 1: goproto.protoc.comments.DeprecatedMessage
+}
+var xxx_Deprecated_protoFile_depIdxs = []int32{}
+
+func init() {
+	var messageTypes [1]protoreflect.MessageType
+	Deprecated_protoFile = protoimpl.FileBuilder{
+		RawDescriptor:      fileDescriptor_0336e614ee2de5f7,
+		GoTypes:            xxx_Deprecated_protoFile_goTypes,
+		DependencyIndexes:  xxx_Deprecated_protoFile_depIdxs,
+		EnumOutputTypes:    xxx_Deprecated_protoFile_enumTypes[:],
+		MessageOutputTypes: messageTypes[:],
+	}.Init()
+	messageGoTypes := xxx_Deprecated_protoFile_goTypes[1:][:1]
+	for i, mt := range messageTypes[:] {
+		xxx_Deprecated_protoFile_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
+		xxx_Deprecated_protoFile_messageTypes[i].PBType = mt
+	}
+	xxx_Deprecated_protoFile_goTypes = nil
+	xxx_Deprecated_protoFile_depIdxs = nil
 }

+ 55 - 98
cmd/protoc-gen-go/testdata/extensions/base/base.pb.go

@@ -4,10 +4,12 @@
 package base
 
 import (
+	bytes "bytes"
+	gzip "compress/gzip"
 	proto "github.com/golang/protobuf/proto"
 	protoreflect "github.com/golang/protobuf/v2/reflect/protoreflect"
-	prototype "github.com/golang/protobuf/v2/reflect/prototype"
 	protoimpl "github.com/golang/protobuf/v2/runtime/protoimpl"
+	reflect "reflect"
 )
 
 // This is a compile-time assertion to ensure that this generated file
@@ -24,29 +26,14 @@ type BaseMessage struct {
 	XXX_sizecache                int32  `json:"-"`
 }
 
-type xxx_BaseMessage struct{ m *BaseMessage }
-
 func (m *BaseMessage) ProtoReflect() protoreflect.Message {
-	return xxx_BaseMessage{m}
-}
-func (m xxx_BaseMessage) Type() protoreflect.MessageType {
-	return xxx_Base_protoFile_MessageTypes[0].Type
-}
-func (m xxx_BaseMessage) KnownFields() protoreflect.KnownFields {
-	return xxx_Base_protoFile_MessageTypes[0].KnownFieldsOf(m.m)
+	return xxx_Base_protoFile_messageTypes[0].MessageOf(m)
 }
-func (m xxx_BaseMessage) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Base_protoFile_MessageTypes[0].UnknownFieldsOf(m.m)
-}
-func (m xxx_BaseMessage) Interface() protoreflect.ProtoMessage {
-	return m.m
-}
-
 func (m *BaseMessage) Reset()         { *m = BaseMessage{} }
 func (m *BaseMessage) String() string { return proto.CompactTextString(m) }
 func (*BaseMessage) ProtoMessage()    {}
 func (*BaseMessage) Descriptor() ([]byte, []int) {
-	return fileDescriptor_aebb28f8d5a04466, []int{0}
+	return fileDescriptor_aebb28f8d5a04466_gzipped, []int{0}
 }
 
 var extRange_BaseMessage = []proto.ExtensionRange{
@@ -90,29 +77,14 @@ type MessageSetWireFormatMessage struct {
 	XXX_sizecache                int32  `json:"-"`
 }
 
-type xxx_MessageSetWireFormatMessage struct{ m *MessageSetWireFormatMessage }
-
 func (m *MessageSetWireFormatMessage) ProtoReflect() protoreflect.Message {
-	return xxx_MessageSetWireFormatMessage{m}
-}
-func (m xxx_MessageSetWireFormatMessage) Type() protoreflect.MessageType {
-	return xxx_Base_protoFile_MessageTypes[1].Type
-}
-func (m xxx_MessageSetWireFormatMessage) KnownFields() protoreflect.KnownFields {
-	return xxx_Base_protoFile_MessageTypes[1].KnownFieldsOf(m.m)
-}
-func (m xxx_MessageSetWireFormatMessage) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Base_protoFile_MessageTypes[1].UnknownFieldsOf(m.m)
-}
-func (m xxx_MessageSetWireFormatMessage) Interface() protoreflect.ProtoMessage {
-	return m.m
+	return xxx_Base_protoFile_messageTypes[1].MessageOf(m)
 }
-
 func (m *MessageSetWireFormatMessage) Reset()         { *m = MessageSetWireFormatMessage{} }
 func (m *MessageSetWireFormatMessage) String() string { return proto.CompactTextString(m) }
 func (*MessageSetWireFormatMessage) ProtoMessage()    {}
 func (*MessageSetWireFormatMessage) Descriptor() ([]byte, []int) {
-	return fileDescriptor_aebb28f8d5a04466, []int{1}
+	return fileDescriptor_aebb28f8d5a04466_gzipped, []int{1}
 }
 
 var extRange_MessageSetWireFormatMessage = []proto.ExtensionRange{
@@ -142,77 +114,62 @@ func (m *MessageSetWireFormatMessage) XXX_DiscardUnknown() {
 var xxx_messageInfo_MessageSetWireFormatMessage proto.InternalMessageInfo
 
 func init() {
-	proto.RegisterFile("extensions/base/base.proto", fileDescriptor_aebb28f8d5a04466)
+	proto.RegisterFile("extensions/base/base.proto", fileDescriptor_aebb28f8d5a04466_gzipped)
 	proto.RegisterType((*BaseMessage)(nil), "goproto.protoc.extension.base.BaseMessage")
 	proto.RegisterType((*MessageSetWireFormatMessage)(nil), "goproto.protoc.extension.base.MessageSetWireFormatMessage")
 }
 
 var fileDescriptor_aebb28f8d5a04466 = []byte{
-	// 204 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x4a, 0xad, 0x28, 0x49,
-	0xcd, 0x2b, 0xce, 0xcc, 0xcf, 0x2b, 0xd6, 0x4f, 0x4a, 0x2c, 0x4e, 0x05, 0x13, 0x7a, 0x05, 0x45,
-	0xf9, 0x25, 0xf9, 0x42, 0xb2, 0xe9, 0xf9, 0x60, 0x06, 0x84, 0x9b, 0xac, 0x07, 0x57, 0xaa, 0x07,
-	0x52, 0xa4, 0x64, 0xcc, 0xc5, 0xed, 0x94, 0x58, 0x9c, 0xea, 0x9b, 0x5a, 0x5c, 0x9c, 0x98, 0x9e,
-	0x2a, 0x24, 0xc2, 0xc5, 0x9a, 0x96, 0x99, 0x9a, 0x93, 0x22, 0xc1, 0xa8, 0xc0, 0xa8, 0xc1, 0x19,
-	0x04, 0xe1, 0x68, 0xb1, 0x70, 0xb0, 0x08, 0x70, 0x69, 0x71, 0x70, 0x08, 0x08, 0x34, 0x34, 0x34,
-	0x34, 0x30, 0x29, 0x69, 0x73, 0x49, 0x43, 0x35, 0x04, 0xa7, 0x96, 0x84, 0x67, 0x16, 0xa5, 0xba,
-	0xe5, 0x17, 0xe5, 0x26, 0x96, 0x40, 0xc5, 0xb4, 0x38, 0x38, 0x52, 0x04, 0xfe, 0xff, 0xff, 0xff,
-	0x9f, 0xdd, 0x8a, 0x89, 0x83, 0xd1, 0xc9, 0x2b, 0xca, 0x23, 0x3d, 0xb3, 0x24, 0xa3, 0x34, 0x49,
-	0x2f, 0x39, 0x3f, 0x57, 0x3f, 0x3d, 0x3f, 0x27, 0x31, 0x2f, 0x5d, 0x1f, 0xec, 0x98, 0xa4, 0xd2,
-	0x34, 0xfd, 0x32, 0x23, 0xfd, 0xe4, 0xdc, 0x14, 0x08, 0x3f, 0x59, 0x37, 0x3d, 0x35, 0x4f, 0x37,
-	0x3d, 0x5f, 0xbf, 0x24, 0xb5, 0xb8, 0x24, 0x25, 0xb1, 0x24, 0x51, 0x1f, 0xcd, 0x5f, 0x80, 0x00,
-	0x00, 0x00, 0xff, 0xff, 0x1c, 0x75, 0xde, 0x5a, 0xe9, 0x00, 0x00, 0x00,
-}
-
-func init() {
-	xxx_Base_protoFile_FileDesc.Messages = xxx_Base_protoFile_MessageDescs[0:2]
-	var err error
-	Base_protoFile, err = prototype.NewFile(&xxx_Base_protoFile_FileDesc)
-	if err != nil {
-		panic(err)
-	}
-}
+	// 233 bytes of the wire-encoded FileDescriptorProto
+	0x0a, 0x1a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x62, 0x61, 0x73,
+	0x65, 0x2f, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1d, 0x67, 0x6f,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x65, 0x78, 0x74,
+	0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x22, 0x33, 0x0a, 0x0b, 0x42,
+	0x61, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x69,
+	0x65, 0x6c, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x66, 0x69, 0x65, 0x6c, 0x64,
+	0x2a, 0x04, 0x08, 0x04, 0x10, 0x0a, 0x2a, 0x08, 0x08, 0x10, 0x10, 0x80, 0x80, 0x80, 0x80, 0x02,
+	0x22, 0x2b, 0x0a, 0x1b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x65, 0x74, 0x57, 0x69,
+	0x72, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2a,
+	0x08, 0x08, 0x64, 0x10, 0xff, 0xff, 0xff, 0xff, 0x07, 0x3a, 0x02, 0x08, 0x01, 0x42, 0x4a, 0x5a,
+	0x48, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x6f, 0x6c, 0x61,
+	0x6e, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x76, 0x32, 0x2f, 0x63,
+	0x6d, 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x67, 0x6f,
+	0x2f, 0x74, 0x65, 0x73, 0x74, 0x64, 0x61, 0x74, 0x61, 0x2f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73,
+	0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x62, 0x61, 0x73, 0x65,
+}
+
+var fileDescriptor_aebb28f8d5a04466_gzipped = func() []byte {
+	bb := new(bytes.Buffer)
+	zw, _ := gzip.NewWriterLevel(bb, gzip.NoCompression)
+	zw.Write(fileDescriptor_aebb28f8d5a04466)
+	zw.Close()
+	return bb.Bytes()
+}()
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
 var Base_protoFile protoreflect.FileDescriptor
 
-var xxx_Base_protoFile_FileDesc = prototype.File{
-	Syntax:  protoreflect.Proto2,
-	Path:    "extensions/base/base.proto",
-	Package: "goproto.protoc.extension.base",
-}
-var xxx_Base_protoFile_MessageTypes = [2]protoimpl.MessageType{
-	{Type: prototype.GoMessage(
-		xxx_Base_protoFile_MessageDescs[0].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_BaseMessage{new(BaseMessage)}
-		},
-	)},
-	{Type: prototype.GoMessage(
-		xxx_Base_protoFile_MessageDescs[1].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_MessageSetWireFormatMessage{new(MessageSetWireFormatMessage)}
-		},
-	)},
-}
-var xxx_Base_protoFile_MessageDescs = [2]prototype.Message{
-	{
-		Name: "BaseMessage",
-		Fields: []prototype.Field{
-			{
-				Name:        "field",
-				Number:      1,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.StringKind,
-				JSONName:    "field",
-				IsPacked:    prototype.False,
-			},
-		},
-		ExtensionRanges: [][2]protoreflect.FieldNumber{{4, 10}, {16, 536870912}},
-	},
-	{
-		Name:            "MessageSetWireFormatMessage",
-		ExtensionRanges: [][2]protoreflect.FieldNumber{{100, 2147483647}},
-	},
+var xxx_Base_protoFile_messageTypes [2]protoimpl.MessageType
+var xxx_Base_protoFile_goTypes = []interface{}{
+	(*BaseMessage)(nil),                 // 0: goproto.protoc.extension.base.BaseMessage
+	(*MessageSetWireFormatMessage)(nil), // 1: goproto.protoc.extension.base.MessageSetWireFormatMessage
+}
+var xxx_Base_protoFile_depIdxs = []int32{}
+
+func init() {
+	var messageTypes [2]protoreflect.MessageType
+	Base_protoFile = protoimpl.FileBuilder{
+		RawDescriptor:      fileDescriptor_aebb28f8d5a04466,
+		GoTypes:            xxx_Base_protoFile_goTypes,
+		DependencyIndexes:  xxx_Base_protoFile_depIdxs,
+		MessageOutputTypes: messageTypes[:],
+	}.Init()
+	messageGoTypes := xxx_Base_protoFile_goTypes[0:][:2]
+	for i, mt := range messageTypes[:] {
+		xxx_Base_protoFile_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
+		xxx_Base_protoFile_messageTypes[i].PBType = mt
+	}
+	xxx_Base_protoFile_goTypes = nil
+	xxx_Base_protoFile_depIdxs = nil
 }

+ 482 - 359
cmd/protoc-gen-go/testdata/extensions/ext/ext.pb.go

@@ -4,12 +4,14 @@
 package ext
 
 import (
+	bytes "bytes"
+	gzip "compress/gzip"
 	proto "github.com/golang/protobuf/proto"
 	base "github.com/golang/protobuf/v2/cmd/protoc-gen-go/testdata/extensions/base"
 	extra "github.com/golang/protobuf/v2/cmd/protoc-gen-go/testdata/extensions/extra"
 	protoreflect "github.com/golang/protobuf/v2/reflect/protoreflect"
-	prototype "github.com/golang/protobuf/v2/reflect/prototype"
 	protoimpl "github.com/golang/protobuf/v2/runtime/protoimpl"
+	reflect "reflect"
 )
 
 // This is a compile-time assertion to ensure that this generated file
@@ -25,7 +27,7 @@ const (
 )
 
 func (e Enum) Type() protoreflect.EnumType {
-	return xxx_Ext_protoFile_EnumTypes[0]
+	return xxx_Ext_protoFile_enumTypes[0]
 }
 func (e Enum) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -59,7 +61,7 @@ func (x *Enum) UnmarshalJSON(data []byte) error {
 }
 
 func (Enum) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_bf470ef4907b23cb, []int{0}
+	return fileDescriptor_bf470ef4907b23cb_gzipped, []int{0}
 }
 
 type Message struct {
@@ -69,29 +71,14 @@ type Message struct {
 	XXX_sizecache        int32    `json:"-"`
 }
 
-type xxx_Message struct{ m *Message }
-
 func (m *Message) ProtoReflect() protoreflect.Message {
-	return xxx_Message{m}
-}
-func (m xxx_Message) Type() protoreflect.MessageType {
-	return xxx_Ext_protoFile_MessageTypes[0].Type
-}
-func (m xxx_Message) KnownFields() protoreflect.KnownFields {
-	return xxx_Ext_protoFile_MessageTypes[0].KnownFieldsOf(m.m)
-}
-func (m xxx_Message) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Ext_protoFile_MessageTypes[0].UnknownFieldsOf(m.m)
+	return xxx_Ext_protoFile_messageTypes[0].MessageOf(m)
 }
-func (m xxx_Message) Interface() protoreflect.ProtoMessage {
-	return m.m
-}
-
 func (m *Message) Reset()         { *m = Message{} }
 func (m *Message) String() string { return proto.CompactTextString(m) }
 func (*Message) ProtoMessage()    {}
 func (*Message) Descriptor() ([]byte, []int) {
-	return fileDescriptor_bf470ef4907b23cb, []int{0}
+	return fileDescriptor_bf470ef4907b23cb_gzipped, []int{0}
 }
 
 func (m *Message) XXX_Unmarshal(b []byte) error {
@@ -126,29 +113,14 @@ type ExtensionGroup struct {
 	XXX_sizecache        int32    `json:"-"`
 }
 
-type xxx_ExtensionGroup struct{ m *ExtensionGroup }
-
 func (m *ExtensionGroup) ProtoReflect() protoreflect.Message {
-	return xxx_ExtensionGroup{m}
-}
-func (m xxx_ExtensionGroup) Type() protoreflect.MessageType {
-	return xxx_Ext_protoFile_MessageTypes[1].Type
+	return xxx_Ext_protoFile_messageTypes[1].MessageOf(m)
 }
-func (m xxx_ExtensionGroup) KnownFields() protoreflect.KnownFields {
-	return xxx_Ext_protoFile_MessageTypes[1].KnownFieldsOf(m.m)
-}
-func (m xxx_ExtensionGroup) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Ext_protoFile_MessageTypes[1].UnknownFieldsOf(m.m)
-}
-func (m xxx_ExtensionGroup) Interface() protoreflect.ProtoMessage {
-	return m.m
-}
-
 func (m *ExtensionGroup) Reset()         { *m = ExtensionGroup{} }
 func (m *ExtensionGroup) String() string { return proto.CompactTextString(m) }
 func (*ExtensionGroup) ProtoMessage()    {}
 func (*ExtensionGroup) Descriptor() ([]byte, []int) {
-	return fileDescriptor_bf470ef4907b23cb, []int{1}
+	return fileDescriptor_bf470ef4907b23cb_gzipped, []int{1}
 }
 
 func (m *ExtensionGroup) XXX_Unmarshal(b []byte) error {
@@ -183,29 +155,14 @@ type ExtendingMessage struct {
 	XXX_sizecache        int32    `json:"-"`
 }
 
-type xxx_ExtendingMessage struct{ m *ExtendingMessage }
-
 func (m *ExtendingMessage) ProtoReflect() protoreflect.Message {
-	return xxx_ExtendingMessage{m}
-}
-func (m xxx_ExtendingMessage) Type() protoreflect.MessageType {
-	return xxx_Ext_protoFile_MessageTypes[2].Type
-}
-func (m xxx_ExtendingMessage) KnownFields() protoreflect.KnownFields {
-	return xxx_Ext_protoFile_MessageTypes[2].KnownFieldsOf(m.m)
+	return xxx_Ext_protoFile_messageTypes[2].MessageOf(m)
 }
-func (m xxx_ExtendingMessage) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Ext_protoFile_MessageTypes[2].UnknownFieldsOf(m.m)
-}
-func (m xxx_ExtendingMessage) Interface() protoreflect.ProtoMessage {
-	return m.m
-}
-
 func (m *ExtendingMessage) Reset()         { *m = ExtendingMessage{} }
 func (m *ExtendingMessage) String() string { return proto.CompactTextString(m) }
 func (*ExtendingMessage) ProtoMessage()    {}
 func (*ExtendingMessage) Descriptor() ([]byte, []int) {
-	return fileDescriptor_bf470ef4907b23cb, []int{2}
+	return fileDescriptor_bf470ef4907b23cb_gzipped, []int{2}
 }
 
 func (m *ExtendingMessage) XXX_Unmarshal(b []byte) error {
@@ -233,29 +190,14 @@ type RepeatedGroup struct {
 	XXX_sizecache        int32    `json:"-"`
 }
 
-type xxx_RepeatedGroup struct{ m *RepeatedGroup }
-
 func (m *RepeatedGroup) ProtoReflect() protoreflect.Message {
-	return xxx_RepeatedGroup{m}
-}
-func (m xxx_RepeatedGroup) Type() protoreflect.MessageType {
-	return xxx_Ext_protoFile_MessageTypes[3].Type
-}
-func (m xxx_RepeatedGroup) KnownFields() protoreflect.KnownFields {
-	return xxx_Ext_protoFile_MessageTypes[3].KnownFieldsOf(m.m)
-}
-func (m xxx_RepeatedGroup) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Ext_protoFile_MessageTypes[3].UnknownFieldsOf(m.m)
-}
-func (m xxx_RepeatedGroup) Interface() protoreflect.ProtoMessage {
-	return m.m
+	return xxx_Ext_protoFile_messageTypes[3].MessageOf(m)
 }
-
 func (m *RepeatedGroup) Reset()         { *m = RepeatedGroup{} }
 func (m *RepeatedGroup) String() string { return proto.CompactTextString(m) }
 func (*RepeatedGroup) ProtoMessage()    {}
 func (*RepeatedGroup) Descriptor() ([]byte, []int) {
-	return fileDescriptor_bf470ef4907b23cb, []int{3}
+	return fileDescriptor_bf470ef4907b23cb_gzipped, []int{3}
 }
 
 func (m *RepeatedGroup) XXX_Unmarshal(b []byte) error {
@@ -291,29 +233,14 @@ type Extendable struct {
 	XXX_sizecache                int32  `json:"-"`
 }
 
-type xxx_Extendable struct{ m *Extendable }
-
 func (m *Extendable) ProtoReflect() protoreflect.Message {
-	return xxx_Extendable{m}
-}
-func (m xxx_Extendable) Type() protoreflect.MessageType {
-	return xxx_Ext_protoFile_MessageTypes[4].Type
-}
-func (m xxx_Extendable) KnownFields() protoreflect.KnownFields {
-	return xxx_Ext_protoFile_MessageTypes[4].KnownFieldsOf(m.m)
+	return xxx_Ext_protoFile_messageTypes[4].MessageOf(m)
 }
-func (m xxx_Extendable) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Ext_protoFile_MessageTypes[4].UnknownFieldsOf(m.m)
-}
-func (m xxx_Extendable) Interface() protoreflect.ProtoMessage {
-	return m.m
-}
-
 func (m *Extendable) Reset()         { *m = Extendable{} }
 func (m *Extendable) String() string { return proto.CompactTextString(m) }
 func (*Extendable) ProtoMessage()    {}
 func (*Extendable) Descriptor() ([]byte, []int) {
-	return fileDescriptor_bf470ef4907b23cb, []int{4}
+	return fileDescriptor_bf470ef4907b23cb_gzipped, []int{4}
 }
 
 var extRange_Extendable = []proto.ExtensionRange{
@@ -349,31 +276,14 @@ type MessageSetWireFormatExtension struct {
 	XXX_sizecache        int32    `json:"-"`
 }
 
-type xxx_MessageSetWireFormatExtension struct {
-	m *MessageSetWireFormatExtension
-}
-
 func (m *MessageSetWireFormatExtension) ProtoReflect() protoreflect.Message {
-	return xxx_MessageSetWireFormatExtension{m}
-}
-func (m xxx_MessageSetWireFormatExtension) Type() protoreflect.MessageType {
-	return xxx_Ext_protoFile_MessageTypes[5].Type
-}
-func (m xxx_MessageSetWireFormatExtension) KnownFields() protoreflect.KnownFields {
-	return xxx_Ext_protoFile_MessageTypes[5].KnownFieldsOf(m.m)
+	return xxx_Ext_protoFile_messageTypes[5].MessageOf(m)
 }
-func (m xxx_MessageSetWireFormatExtension) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Ext_protoFile_MessageTypes[5].UnknownFieldsOf(m.m)
-}
-func (m xxx_MessageSetWireFormatExtension) Interface() protoreflect.ProtoMessage {
-	return m.m
-}
-
 func (m *MessageSetWireFormatExtension) Reset()         { *m = MessageSetWireFormatExtension{} }
 func (m *MessageSetWireFormatExtension) String() string { return proto.CompactTextString(m) }
 func (*MessageSetWireFormatExtension) ProtoMessage()    {}
 func (*MessageSetWireFormatExtension) Descriptor() ([]byte, []int) {
-	return fileDescriptor_bf470ef4907b23cb, []int{5}
+	return fileDescriptor_bf470ef4907b23cb_gzipped, []int{5}
 }
 
 func (m *MessageSetWireFormatExtension) XXX_Unmarshal(b []byte) error {
@@ -400,29 +310,14 @@ type Message_M struct {
 	XXX_sizecache        int32    `json:"-"`
 }
 
-type xxx_Message_M struct{ m *Message_M }
-
 func (m *Message_M) ProtoReflect() protoreflect.Message {
-	return xxx_Message_M{m}
+	return xxx_Ext_protoFile_messageTypes[6].MessageOf(m)
 }
-func (m xxx_Message_M) Type() protoreflect.MessageType {
-	return xxx_Ext_protoFile_MessageTypes[6].Type
-}
-func (m xxx_Message_M) KnownFields() protoreflect.KnownFields {
-	return xxx_Ext_protoFile_MessageTypes[6].KnownFieldsOf(m.m)
-}
-func (m xxx_Message_M) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Ext_protoFile_MessageTypes[6].UnknownFieldsOf(m.m)
-}
-func (m xxx_Message_M) Interface() protoreflect.ProtoMessage {
-	return m.m
-}
-
 func (m *Message_M) Reset()         { *m = Message_M{} }
 func (m *Message_M) String() string { return proto.CompactTextString(m) }
 func (*Message_M) ProtoMessage()    {}
 func (*Message_M) Descriptor() ([]byte, []int) {
-	return fileDescriptor_bf470ef4907b23cb, []int{0, 0}
+	return fileDescriptor_bf470ef4907b23cb_gzipped, []int{0, 0}
 }
 
 func (m *Message_M) XXX_Unmarshal(b []byte) error {
@@ -449,26 +344,9 @@ type ExtendingMessage_ExtendingMessageSubmessage struct {
 	XXX_sizecache        int32    `json:"-"`
 }
 
-type xxx_ExtendingMessage_ExtendingMessageSubmessage struct {
-	m *ExtendingMessage_ExtendingMessageSubmessage
-}
-
 func (m *ExtendingMessage_ExtendingMessageSubmessage) ProtoReflect() protoreflect.Message {
-	return xxx_ExtendingMessage_ExtendingMessageSubmessage{m}
+	return xxx_Ext_protoFile_messageTypes[7].MessageOf(m)
 }
-func (m xxx_ExtendingMessage_ExtendingMessageSubmessage) Type() protoreflect.MessageType {
-	return xxx_Ext_protoFile_MessageTypes[7].Type
-}
-func (m xxx_ExtendingMessage_ExtendingMessageSubmessage) KnownFields() protoreflect.KnownFields {
-	return xxx_Ext_protoFile_MessageTypes[7].KnownFieldsOf(m.m)
-}
-func (m xxx_ExtendingMessage_ExtendingMessageSubmessage) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Ext_protoFile_MessageTypes[7].UnknownFieldsOf(m.m)
-}
-func (m xxx_ExtendingMessage_ExtendingMessageSubmessage) Interface() protoreflect.ProtoMessage {
-	return m.m
-}
-
 func (m *ExtendingMessage_ExtendingMessageSubmessage) Reset() {
 	*m = ExtendingMessage_ExtendingMessageSubmessage{}
 }
@@ -477,7 +355,7 @@ func (m *ExtendingMessage_ExtendingMessageSubmessage) String() string {
 }
 func (*ExtendingMessage_ExtendingMessageSubmessage) ProtoMessage() {}
 func (*ExtendingMessage_ExtendingMessageSubmessage) Descriptor() ([]byte, []int) {
-	return fileDescriptor_bf470ef4907b23cb, []int{2, 0}
+	return fileDescriptor_bf470ef4907b23cb_gzipped, []int{2, 0}
 }
 
 func (m *ExtendingMessage_ExtendingMessageSubmessage) XXX_Unmarshal(b []byte) error {
@@ -895,7 +773,7 @@ var E_MessageSetWireFormatExtension_MessageSetExtension = &proto.ExtensionDesc{
 }
 
 func init() {
-	proto.RegisterFile("extensions/ext/ext.proto", fileDescriptor_bf470ef4907b23cb)
+	proto.RegisterFile("extensions/ext/ext.proto", fileDescriptor_bf470ef4907b23cb_gzipped)
 	proto.RegisterEnum("goproto.protoc.extension.ext.Enum", Enum_name, Enum_value)
 	proto.RegisterType((*Message)(nil), "goproto.protoc.extension.ext.Message")
 	proto.RegisterType((*ExtensionGroup)(nil), "goproto.protoc.extension.ext.ExtensionGroup")
@@ -952,224 +830,469 @@ func init() {
 }
 
 var fileDescriptor_bf470ef4907b23cb = []byte{
-	// 1120 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x98, 0xcb, 0x6e, 0xdb, 0x46,
-	0x14, 0x86, 0x3b, 0x92, 0x12, 0x2b, 0x53, 0xcb, 0x96, 0x18, 0x24, 0x15, 0x04, 0x17, 0x18, 0x08,
-	0x28, 0x32, 0x75, 0x1b, 0x09, 0x60, 0x05, 0x01, 0x65, 0x77, 0x46, 0xed, 0xc0, 0x0b, 0xa1, 0x28,
-	0x0d, 0xc3, 0x4e, 0xba, 0x60, 0x29, 0x73, 0xc4, 0xb0, 0x95, 0x48, 0x97, 0x97, 0x44, 0x5d, 0x34,
-	0x10, 0xfa, 0x04, 0x7d, 0x8f, 0xa2, 0xf7, 0x5b, 0x7a, 0xdf, 0xb6, 0x8b, 0x6e, 0xfa, 0x44, 0xc1,
-	0xcc, 0xf0, 0x32, 0xa4, 0x64, 0x45, 0x43, 0x20, 0x0b, 0x09, 0xe4, 0x90, 0xfa, 0xce, 0xe1, 0x7f,
-	0x8e, 0xf8, 0x1f, 0x12, 0xb6, 0xc9, 0x3c, 0x24, 0x6e, 0xe0, 0x78, 0x6e, 0xd0, 0x27, 0xf3, 0x90,
-	0x7e, 0x7a, 0x97, 0xbe, 0x17, 0x7a, 0xca, 0x9e, 0xed, 0xb1, 0x0d, 0xbe, 0x7b, 0xd1, 0x4b, 0x4f,
-	0xa4, 0x5b, 0x9d, 0x8e, 0xf0, 0xbb, 0xb1, 0x19, 0x10, 0xf6, 0xc5, 0x4f, 0xed, 0xec, 0xe5, 0x99,
-	0xbe, 0xc9, 0xbf, 0xf9, 0xd1, 0x6e, 0x17, 0x6e, 0x8d, 0x48, 0x10, 0x98, 0x36, 0x51, 0x14, 0x58,
-	0xb3, 0xcc, 0xd0, 0x6c, 0x03, 0x04, 0xf0, 0xb6, 0xce, 0xb6, 0x3b, 0x55, 0x08, 0x46, 0xdd, 0xb7,
-	0xe1, 0xce, 0x61, 0xc2, 0xb8, 0xe7, 0x7b, 0xd1, 0xa5, 0x72, 0x07, 0xee, 0xa6, 0x54, 0xc3, 0xa6,
-	0x4b, 0xed, 0x39, 0x02, 0xf8, 0x86, 0xbe, 0x43, 0x72, 0x27, 0x76, 0xff, 0xaf, 0xc0, 0x26, 0xfb,
-	0xad, 0xe5, 0xb8, 0x76, 0x1c, 0xa8, 0xb3, 0x07, 0x3b, 0xc5, 0xb5, 0x93, 0x68, 0x3c, 0xe3, 0x5b,
-	0x2a, 0x89, 0x55, 0xa0, 0x47, 0x8d, 0x78, 0xd1, 0x08, 0x42, 0xdf, 0x71, 0x6d, 0x65, 0xbf, 0x77,
-	0xa5, 0x0c, 0xec, 0x8a, 0x0f, 0xcc, 0x80, 0xc4, 0xc4, 0xf6, 0x3f, 0x80, 0x65, 0x74, 0x9b, 0x14,
-	0x43, 0x31, 0x94, 0xfa, 0x14, 0xc0, 0xbd, 0x15, 0x71, 0xd2, 0x3c, 0xa4, 0x62, 0xfd, 0x4b, 0x63,
-	0xbd, 0xac, 0x1e, 0xf7, 0xd6, 0x55, 0xa9, 0x57, 0xbc, 0xe8, 0xde, 0xd5, 0x2a, 0xe8, 0x1d, 0x72,
-	0xe5, 0xb1, 0xae, 0x06, 0x1b, 0x3a, 0xb9, 0x24, 0x66, 0x48, 0x2c, 0x5e, 0x8e, 0xd7, 0x61, 0xd3,
-	0x8f, 0x17, 0x8c, 0x79, 0x5c, 0x8f, 0xbf, 0x2b, 0xa8, 0x4a, 0x0b, 0x92, 0x1c, 0x38, 0xe7, 0x05,
-	0xb9, 0x0d, 0x21, 0x8f, 0x6a, 0x8e, 0xa7, 0x64, 0xbf, 0x5e, 0x07, 0xcd, 0xc5, 0x62, 0xb1, 0xa8,
-	0x74, 0xff, 0x03, 0xf0, 0xd5, 0x24, 0x12, 0x09, 0xcf, 0x1c, 0x9f, 0x1c, 0x79, 0xfe, 0xcc, 0x0c,
-	0xd3, 0xc2, 0xab, 0x5f, 0x02, 0x78, 0x2b, 0x95, 0x89, 0x84, 0x46, 0x7a, 0x6d, 0x8a, 0xf6, 0x1c,
-	0xa5, 0x56, 0x71, 0x13, 0xe5, 0x2c, 0x26, 0xdc, 0x3b, 0xeb, 0x85, 0x5b, 0x9b, 0x98, 0x7e, 0x73,
-	0x96, 0x1e, 0x4e, 0x17, 0xf7, 0x9b, 0xb0, 0x76, 0xe8, 0x46, 0x33, 0xa5, 0x0e, 0x6b, 0x0f, 0x0e,
-	0xf5, 0xf7, 0x9a, 0x2f, 0x69, 0xef, 0xc3, 0xac, 0x39, 0x8d, 0xb1, 0xe7, 0x4d, 0xa5, 0x2a, 0x4c,
-	0x10, 0xc0, 0x75, 0xbd, 0x91, 0x9e, 0x71, 0xe0, 0x79, 0x53, 0x2d, 0x12, 0x91, 0x84, 0x86, 0x93,
-	0x41, 0x4e, 0x10, 0xc0, 0x3b, 0x6a, 0xf7, 0x39, 0x3d, 0xe3, 0x46, 0x33, 0x21, 0x2c, 0xdd, 0xd5,
-	0x4e, 0xc4, 0x7f, 0x9f, 0xe3, 0x86, 0x6f, 0xa9, 0x52, 0x71, 0x6d, 0x04, 0xf0, 0x35, 0xe1, 0x9f,
-	0x7a, 0x4c, 0x09, 0xda, 0x29, 0x6c, 0x66, 0xd0, 0x40, 0x9e, 0xfa, 0x10, 0x01, 0xdc, 0xd2, 0xb3,
-	0xc4, 0x4e, 0x9c, 0x65, 0x6c, 0x24, 0x8f, 0x75, 0x10, 0xc0, 0x0d, 0x01, 0x7b, 0xca, 0xb1, 0x45,
-	0x09, 0x86, 0x03, 0x29, 0xea, 0x47, 0x08, 0xe0, 0x6a, 0x5e, 0x82, 0xe1, 0x60, 0x59, 0x02, 0x49,
-	0xea, 0xc7, 0x08, 0x60, 0xa5, 0x20, 0x41, 0x11, 0x1b, 0xc9, 0x63, 0xa7, 0x08, 0xe0, 0x5a, 0x41,
-	0x82, 0xe1, 0x40, 0xbb, 0x0f, 0x15, 0x21, 0xdb, 0x89, 0x33, 0x27, 0x96, 0xa4, 0xb6, 0x33, 0x04,
-	0xf0, 0xae, 0xde, 0xca, 0xf2, 0x8d, 0x21, 0xda, 0x19, 0xcc, 0x16, 0x8d, 0x32, 0x64, 0x17, 0x01,
-	0xbc, 0xa5, 0x67, 0x97, 0x7d, 0x14, 0x83, 0x73, 0x65, 0x9b, 0x4c, 0x3d, 0x33, 0x94, 0xc2, 0x7a,
-	0x08, 0xe0, 0x8a, 0x50, 0xb6, 0x23, 0x4a, 0x58, 0x25, 0x84, 0xa4, 0xc2, 0x97, 0x08, 0xe0, 0xe6,
-	0x92, 0x10, 0xc3, 0xc1, 0x0a, 0x21, 0x24, 0xc9, 0x9f, 0x20, 0x80, 0xaf, 0x17, 0x85, 0x28, 0xf6,
-	0x84, 0xe5, 0x45, 0xe3, 0xa9, 0x9c, 0xe1, 0xf8, 0x08, 0x60, 0x20, 0xf4, 0xc4, 0xbb, 0x0c, 0x51,
-	0xe8, 0x60, 0x79, 0xcf, 0x0c, 0x98, 0x65, 0x0a, 0x1d, 0xcc, 0x10, 0xf9, 0xb2, 0x8d, 0x3f, 0x0d,
-	0x49, 0x20, 0x45, 0x0d, 0xd9, 0x40, 0x91, 0x95, 0xed, 0x80, 0x12, 0xb4, 0x27, 0xa2, 0xb6, 0xa3,
-	0x12, 0xa6, 0x1b, 0x31, 0xeb, 0x78, 0x6d, 0x23, 0xeb, 0x10, 0x4a, 0x10, 0xaf, 0x68, 0x9f, 0x03,
-	0xb1, 0x6f, 0xe2, 0xd5, 0x91, 0x54, 0x06, 0x8f, 0x58, 0x06, 0x77, 0x36, 0xca, 0xa0, 0x37, 0x12,
-	0x1a, 0x2c, 0x89, 0xa6, 0x2d, 0x80, 0x60, 0x21, 0xcc, 0xb8, 0xa5, 0x12, 0x78, 0x8c, 0x00, 0x86,
-	0xea, 0x9b, 0x1b, 0x8c, 0x1d, 0xe9, 0x48, 0xa6, 0x17, 0xe2, 0x69, 0x9f, 0xc1, 0x06, 0x1b, 0x08,
-	0x8d, 0x32, 0x83, 0xcf, 0x0d, 0xa6, 0xc0, 0xfa, 0x04, 0x7c, 0x93, 0xa6, 0xe0, 0x9b, 0x49, 0x29,
-	0xb6, 0x89, 0xb0, 0x47, 0x7b, 0x4b, 0x98, 0x5d, 0xa4, 0x7d, 0xf9, 0x2b, 0x3a, 0xe6, 0xd4, 0xf5,
-	0x46, 0x3a, 0xe6, 0x30, 0x63, 0x7e, 0x9c, 0x83, 0x4a, 0x3b, 0xf3, 0xd7, 0x14, 0xba, 0xa1, 0x35,
-	0xa7, 0x81, 0x99, 0x35, 0x9f, 0xe6, 0x26, 0x31, 0x79, 0xbb, 0xfb, 0x86, 0x46, 0xbe, 0x26, 0x4c,
-	0x6d, 0xdc, 0x9c, 0xcf, 0x60, 0x4b, 0xc0, 0x96, 0x70, 0xe7, 0x6f, 0x29, 0xb7, 0xa5, 0xa7, 0xaa,
-	0x9c, 0xc7, 0xf6, 0x9c, 0x07, 0x97, 0xf0, 0xe7, 0xef, 0x28, 0xb8, 0x21, 0x80, 0x4f, 0x53, 0xdf,
-	0xcf, 0x0b, 0x21, 0x79, 0xe3, 0xfc, 0x9e, 0x72, 0xab, 0x79, 0x21, 0xf8, 0x0d, 0xb9, 0x20, 0x84,
-	0x24, 0xf7, 0x07, 0xca, 0x55, 0x0a, 0x42, 0x2c, 0x81, 0x4b, 0xb8, 0xf4, 0x8f, 0x14, 0x5c, 0x2b,
-	0x08, 0x31, 0x1c, 0x68, 0x1f, 0xc0, 0x9b, 0x62, 0xc6, 0x65, 0xdc, 0xf4, 0x27, 0x8a, 0xde, 0xd5,
-	0x5b, 0x59, 0xce, 0x89, 0x51, 0xdf, 0x87, 0x8a, 0x00, 0x2f, 0xc3, 0xfe, 0x99, 0xb2, 0xb7, 0xf4,
-	0xb4, 0x58, 0xe7, 0x89, 0x55, 0xe7, 0x0b, 0x28, 0xef, 0xd5, 0xbf, 0x50, 0x70, 0x45, 0x28, 0x20,
-	0x37, 0xeb, 0x55, 0x72, 0x48, 0x2a, 0xfd, 0x94, 0x92, 0x9b, 0x4b, 0x72, 0xf0, 0x91, 0xa8, 0x28,
-	0x87, 0x24, 0xfb, 0x57, 0xca, 0xbe, 0x5e, 0x94, 0x63, 0xa9, 0x3f, 0x4a, 0x38, 0xf6, 0x6f, 0x94,
-	0x0c, 0x84, 0xfe, 0x88, 0x2d, 0xbb, 0xd0, 0xd1, 0xf2, 0x9e, 0xfd, 0x3b, 0x7f, 0xd0, 0x13, 0x3a,
-	0x9a, 0x9b, 0x76, 0xbe, 0x80, 0xf2, 0xae, 0xfd, 0x07, 0xe5, 0x6e, 0x0b, 0x05, 0xe4, 0xb6, 0xbd,
-	0x00, 0x39, 0x91, 0xcb, 0x18, 0xf7, 0x9f, 0x94, 0xbc, 0xb9, 0x73, 0xa7, 0x09, 0x24, 0x96, 0xf1,
-	0x04, 0xa6, 0x77, 0x5d, 0x79, 0xcb, 0xfc, 0x8b, 0x06, 0x87, 0xea, 0x1b, 0xeb, 0x83, 0xe7, 0x9e,
-	0xaf, 0xf5, 0x7c, 0x38, 0x2a, 0x01, 0x1f, 0x27, 0xd8, 0x43, 0xb4, 0x31, 0x71, 0xc8, 0xd4, 0x92,
-	0xca, 0xe1, 0x8b, 0x2a, 0xb3, 0x4d, 0xbc, 0xc9, 0xeb, 0x02, 0x1a, 0x22, 0x9e, 0xc8, 0xd8, 0xf6,
-	0x11, 0x8d, 0xa6, 0x7d, 0x08, 0x5f, 0x11, 0x32, 0xe0, 0x5d, 0x13, 0x27, 0xb2, 0x31, 0xb5, 0xcd,
-	0x5f, 0x90, 0xdc, 0xca, 0x40, 0xbc, 0x73, 0x78, 0x84, 0x17, 0xf3, 0xb8, 0x4f, 0x5e, 0xcc, 0xe3,
-	0xfe, 0xc1, 0xf1, 0x83, 0x7b, 0xb6, 0x13, 0x3e, 0x8c, 0xc6, 0xbd, 0x0b, 0x6f, 0xd6, 0xb7, 0xbd,
-	0xa9, 0xe9, 0xda, 0x7d, 0x06, 0x1f, 0x47, 0x93, 0xfe, 0x23, 0xb5, 0x7f, 0x31, 0xb3, 0xf8, 0xfe,
-	0xc5, 0x5d, 0x9b, 0xb8, 0x77, 0x6d, 0xaf, 0x1f, 0x92, 0x20, 0xb4, 0xcc, 0x90, 0xbd, 0x0e, 0x13,
-	0xde, 0x8f, 0x3d, 0x0b, 0x00, 0x00, 0xff, 0xff, 0xe1, 0x33, 0x5c, 0xd7, 0x84, 0x13, 0x00, 0x00,
-}
-
-func init() {
-	xxx_Ext_protoFile_FileDesc.Enums = xxx_Ext_protoFile_EnumDescs[0:1]
-	xxx_Ext_protoFile_FileDesc.Messages = xxx_Ext_protoFile_MessageDescs[0:6]
-	xxx_Ext_protoFile_MessageDescs[0].Messages = xxx_Ext_protoFile_MessageDescs[6:7]
-	xxx_Ext_protoFile_MessageDescs[2].Messages = xxx_Ext_protoFile_MessageDescs[7:8]
-	var err error
-	Ext_protoFile, err = prototype.NewFile(&xxx_Ext_protoFile_FileDesc)
-	if err != nil {
-		panic(err)
-	}
-}
+	// 4996 bytes of the wire-encoded FileDescriptorProto
+	0x0a, 0x18, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x65, 0x78, 0x74,
+	0x2f, 0x65, 0x78, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1c, 0x67, 0x6f, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e,
+	0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x65, 0x78, 0x74, 0x1a, 0x1a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73,
+	0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x62, 0x61, 0x73, 0x65, 0x2f, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73,
+	0x2f, 0x65, 0x78, 0x74, 0x72, 0x61, 0x2f, 0x65, 0x78, 0x74, 0x72, 0x61, 0x2e, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x22, 0x22, 0x0a, 0x07, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a,
+	0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74,
+	0x61, 0x1a, 0x03, 0x0a, 0x01, 0x4d, 0x22, 0x39, 0x0a, 0x0e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73,
+	0x69, 0x6f, 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x27, 0x0a, 0x0f, 0x65, 0x78, 0x74, 0x65,
+	0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x78, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x0e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x47, 0x72, 0x6f, 0x75,
+	0x70, 0x22, 0xd2, 0x02, 0x0a, 0x10, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x4d,
+	0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x1c, 0x0a, 0x1a, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64,
+	0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x75, 0x62, 0x6d, 0x65, 0x73,
+	0x73, 0x61, 0x67, 0x65, 0x32, 0x65, 0x0a, 0x18, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x69, 0x6e,
+	0x67, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67,
+	0x12, 0x2a, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x63, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x61, 0x73, 0x65,
+	0x2e, 0x42, 0x61, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0xc8, 0x01, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x16, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x4d, 0x65,
+	0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x32, 0xb8, 0x01, 0x0a, 0x1c,
+	0x65, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67,
+	0x65, 0x5f, 0x73, 0x75, 0x62, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x2e, 0x67,
+	0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x65, 0x78,
+	0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x42, 0x61, 0x73,
+	0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0xc9, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x49, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63,
+	0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x65, 0x78, 0x74, 0x2e, 0x45,
+	0x78, 0x74, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e,
+	0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,
+	0x53, 0x75, 0x62, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x1a, 0x65, 0x78, 0x74, 0x65,
+	0x6e, 0x64, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x75, 0x62, 0x6d,
+	0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x3a, 0x0a, 0x0d, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74,
+	0x65, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x29, 0x0a, 0x10, 0x72, 0x65, 0x70, 0x65, 0x61,
+	0x74, 0x65, 0x64, 0x5f, 0x78, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0xbf, 0x02, 0x20, 0x03,
+	0x28, 0x09, 0x52, 0x0e, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x58, 0x47, 0x72, 0x6f,
+	0x75, 0x70, 0x22, 0x16, 0x0a, 0x0a, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x61, 0x62, 0x6c, 0x65,
+	0x2a, 0x08, 0x08, 0x01, 0x10, 0x80, 0x80, 0x80, 0x80, 0x02, 0x22, 0xcd, 0x01, 0x0a, 0x1d, 0x4d,
+	0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x65, 0x74, 0x57, 0x69, 0x72, 0x65, 0x46, 0x6f, 0x72,
+	0x6d, 0x61, 0x74, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x32, 0xab, 0x01, 0x0a,
+	0x15, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x65, 0x78, 0x74,
+	0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x3a, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f,
+	0x6e, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x65,
+	0x74, 0x57, 0x69, 0x72, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61,
+	0x67, 0x65, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73,
+	0x69, 0x6f, 0x6e, 0x2e, 0x65, 0x78, 0x74, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53,
+	0x65, 0x74, 0x57, 0x69, 0x72, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x45, 0x78, 0x74, 0x65,
+	0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x65,
+	0x74, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2a, 0x10, 0x0a, 0x04, 0x45, 0x6e,
+	0x75, 0x6d, 0x12, 0x08, 0x0a, 0x04, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x3a, 0x51, 0x0a, 0x0e,
+	0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x12, 0x2a,
+	0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e,
+	0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x42,
+	0x61, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x65, 0x20, 0x01, 0x28, 0x08,
+	0x52, 0x0d, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x6f, 0x6c, 0x3a,
+	0x75, 0x0a, 0x0e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x6e, 0x75,
+	0x6d, 0x12, 0x2a, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x63, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x61, 0x73,
+	0x65, 0x2e, 0x42, 0x61, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x66, 0x20,
+	0x01, 0x28, 0x0e, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x65,
+	0x78, 0x74, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x0d, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69,
+	0x6f, 0x6e, 0x45, 0x6e, 0x75, 0x6d, 0x3a, 0x53, 0x0a, 0x0f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73,
+	0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x2a, 0x2e, 0x67, 0x6f, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e,
+	0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x42, 0x61, 0x73, 0x65, 0x4d, 0x65,
+	0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x67, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x65, 0x78, 0x74,
+	0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x3a, 0x55, 0x0a, 0x10, 0x65,
+	0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x12,
+	0x2a, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63,
+	0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e,
+	0x42, 0x61, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x68, 0x20, 0x01, 0x28,
+	0x11, 0x52, 0x0f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x69, 0x6e, 0x74,
+	0x33, 0x32, 0x3a, 0x55, 0x0a, 0x10, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f,
+	0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x2a, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f,
+	0x6e, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x42, 0x61, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61,
+	0x67, 0x65, 0x18, 0x69, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73,
+	0x69, 0x6f, 0x6e, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x3a, 0x53, 0x0a, 0x0f, 0x65, 0x78, 0x74,
+	0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x2a, 0x2e, 0x67,
+	0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x65, 0x78,
+	0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x42, 0x61, 0x73,
+	0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x6a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e,
+	0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x3a, 0x55,
+	0x0a, 0x10, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x69, 0x6e, 0x74,
+	0x36, 0x34, 0x12, 0x2a, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x63, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x61,
+	0x73, 0x65, 0x2e, 0x42, 0x61, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x6b,
+	0x20, 0x01, 0x28, 0x12, 0x52, 0x0f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x53,
+	0x69, 0x6e, 0x74, 0x36, 0x34, 0x3a, 0x55, 0x0a, 0x10, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69,
+	0x6f, 0x6e, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x2a, 0x2e, 0x67, 0x6f, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e,
+	0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x42, 0x61, 0x73, 0x65, 0x4d, 0x65,
+	0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x6c, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x65, 0x78, 0x74,
+	0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x3a, 0x59, 0x0a, 0x12,
+	0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64,
+	0x33, 0x32, 0x12, 0x2a, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x63, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x61,
+	0x73, 0x65, 0x2e, 0x42, 0x61, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x6d,
+	0x20, 0x01, 0x28, 0x0f, 0x52, 0x11, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x53,
+	0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x3a, 0x57, 0x0a, 0x11, 0x65, 0x78, 0x74, 0x65, 0x6e,
+	0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x12, 0x2a, 0x2e, 0x67,
+	0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x65, 0x78,
+	0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x42, 0x61, 0x73,
+	0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x6e, 0x20, 0x01, 0x28, 0x07, 0x52, 0x10,
+	0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x46, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32,
+	0x3a, 0x53, 0x0a, 0x0f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x66, 0x6c,
+	0x6f, 0x61, 0x74, 0x12, 0x2a, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x62,
+	0x61, 0x73, 0x65, 0x2e, 0x42, 0x61, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18,
+	0x6f, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e,
+	0x46, 0x6c, 0x6f, 0x61, 0x74, 0x3a, 0x59, 0x0a, 0x12, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69,
+	0x6f, 0x6e, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x12, 0x2a, 0x2e, 0x67, 0x6f,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x65, 0x78, 0x74,
+	0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x42, 0x61, 0x73, 0x65,
+	0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x70, 0x20, 0x01, 0x28, 0x10, 0x52, 0x11, 0x65,
+	0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34,
+	0x3a, 0x57, 0x0a, 0x11, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x66, 0x69,
+	0x78, 0x65, 0x64, 0x36, 0x34, 0x12, 0x2a, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e,
+	0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x42, 0x61, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67,
+	0x65, 0x18, 0x71, 0x20, 0x01, 0x28, 0x06, 0x52, 0x10, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69,
+	0x6f, 0x6e, 0x46, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x3a, 0x55, 0x0a, 0x10, 0x65, 0x78, 0x74,
+	0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x12, 0x2a, 0x2e,
+	0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x65,
+	0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x42, 0x61,
+	0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x72, 0x20, 0x01, 0x28, 0x01, 0x52,
+	0x0f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65,
+	0x3a, 0x55, 0x0a, 0x10, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x74,
+	0x72, 0x69, 0x6e, 0x67, 0x12, 0x2a, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e,
+	0x62, 0x61, 0x73, 0x65, 0x2e, 0x42, 0x61, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,
+	0x18, 0x73, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f,
+	0x6e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x53, 0x0a, 0x0f, 0x65, 0x78, 0x74, 0x65, 0x6e,
+	0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x12, 0x2a, 0x2e, 0x67, 0x6f, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x65, 0x78, 0x74, 0x65,
+	0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x42, 0x61, 0x73, 0x65, 0x4d,
+	0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x74, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x65, 0x78,
+	0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x74, 0x65, 0x73, 0x3a, 0x7e, 0x0a, 0x11,
+	0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67,
+	0x65, 0x12, 0x2a, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x63, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x61, 0x73,
+	0x65, 0x2e, 0x42, 0x61, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x75, 0x20,
+	0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x65,
+	0x78, 0x74, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x10, 0x65, 0x78, 0x74, 0x65,
+	0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x3a, 0x82, 0x01, 0x0a,
+	0x12, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x4d, 0x65, 0x73, 0x73, 0x61,
+	0x67, 0x65, 0x4d, 0x12, 0x2a, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x62,
+	0x61, 0x73, 0x65, 0x2e, 0x42, 0x61, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18,
+	0x76, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e,
+	0x2e, 0x65, 0x78, 0x74, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x52, 0x11,
+	0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,
+	0x4d, 0x3a, 0x80, 0x01, 0x0a, 0x0e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x67,
+	0x72, 0x6f, 0x75, 0x70, 0x12, 0x2a, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e,
+	0x62, 0x61, 0x73, 0x65, 0x2e, 0x42, 0x61, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,
+	0x18, 0x77, 0x20, 0x01, 0x28, 0x0a, 0x32, 0x2c, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f,
+	0x6e, 0x2e, 0x65, 0x78, 0x74, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x47,
+	0x72, 0x6f, 0x75, 0x70, 0x52, 0x0e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x67,
+	0x72, 0x6f, 0x75, 0x70, 0x3a, 0x7d, 0x0a, 0x0d, 0x65, 0x78, 0x74, 0x72, 0x61, 0x5f, 0x6d, 0x65,
+	0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e,
+	0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x42, 0x61, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67,
+	0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69,
+	0x6f, 0x6e, 0x2e, 0x65, 0x78, 0x74, 0x72, 0x61, 0x2e, 0x45, 0x78, 0x74, 0x72, 0x61, 0x4d, 0x65,
+	0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x0c, 0x65, 0x78, 0x74, 0x72, 0x61, 0x4d, 0x65, 0x73, 0x73,
+	0x61, 0x67, 0x65, 0x3a, 0x53, 0x0a, 0x0f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f,
+	0x78, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x12, 0x2a, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f,
+	0x6e, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x42, 0x61, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61,
+	0x67, 0x65, 0x18, 0xad, 0x02, 0x20, 0x03, 0x28, 0x08, 0x52, 0x0d, 0x72, 0x65, 0x70, 0x65, 0x61,
+	0x74, 0x65, 0x64, 0x58, 0x42, 0x6f, 0x6f, 0x6c, 0x3a, 0x77, 0x0a, 0x0f, 0x72, 0x65, 0x70, 0x65,
+	0x61, 0x74, 0x65, 0x64, 0x5f, 0x78, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x12, 0x2a, 0x2e, 0x67, 0x6f,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x65, 0x78, 0x74,
+	0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x42, 0x61, 0x73, 0x65,
+	0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0xae, 0x02, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x22,
+	0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e,
+	0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x65, 0x78, 0x74, 0x2e, 0x45, 0x6e,
+	0x75, 0x6d, 0x52, 0x0d, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x58, 0x45, 0x6e, 0x75,
+	0x6d, 0x3a, 0x55, 0x0a, 0x10, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x78, 0x5f,
+	0x69, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x2a, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e,
+	0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x42, 0x61, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67,
+	0x65, 0x18, 0xaf, 0x02, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0e, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74,
+	0x65, 0x64, 0x58, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x3a, 0x57, 0x0a, 0x11, 0x72, 0x65, 0x70, 0x65,
+	0x61, 0x74, 0x65, 0x64, 0x5f, 0x78, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x2a, 0x2e,
+	0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x65,
+	0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x42, 0x61,
+	0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0xb0, 0x02, 0x20, 0x03, 0x28, 0x11,
+	0x52, 0x0f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x58, 0x53, 0x69, 0x6e, 0x74, 0x33,
+	0x32, 0x3a, 0x57, 0x0a, 0x11, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x78, 0x5f,
+	0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x2a, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f,
+	0x6e, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x42, 0x61, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61,
+	0x67, 0x65, 0x18, 0xb1, 0x02, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x0f, 0x72, 0x65, 0x70, 0x65, 0x61,
+	0x74, 0x65, 0x64, 0x58, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x3a, 0x55, 0x0a, 0x10, 0x72, 0x65,
+	0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x78, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x2a,
+	0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e,
+	0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x42,
+	0x61, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0xb2, 0x02, 0x20, 0x03, 0x28,
+	0x03, 0x52, 0x0e, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x58, 0x49, 0x6e, 0x74, 0x36,
+	0x34, 0x3a, 0x57, 0x0a, 0x11, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x78, 0x5f,
+	0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x2a, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f,
+	0x6e, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x42, 0x61, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61,
+	0x67, 0x65, 0x18, 0xb3, 0x02, 0x20, 0x03, 0x28, 0x12, 0x52, 0x0f, 0x72, 0x65, 0x70, 0x65, 0x61,
+	0x74, 0x65, 0x64, 0x58, 0x53, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x3a, 0x57, 0x0a, 0x11, 0x72, 0x65,
+	0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x78, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x12,
+	0x2a, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63,
+	0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e,
+	0x42, 0x61, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0xb4, 0x02, 0x20, 0x03,
+	0x28, 0x04, 0x52, 0x0f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x58, 0x55, 0x69, 0x6e,
+	0x74, 0x36, 0x34, 0x3a, 0x5b, 0x0a, 0x13, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f,
+	0x78, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x12, 0x2a, 0x2e, 0x67, 0x6f, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x65, 0x78, 0x74, 0x65,
+	0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x42, 0x61, 0x73, 0x65, 0x4d,
+	0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0xb5, 0x02, 0x20, 0x03, 0x28, 0x0f, 0x52, 0x11, 0x72,
+	0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x58, 0x53, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32,
+	0x3a, 0x59, 0x0a, 0x12, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x78, 0x5f, 0x66,
+	0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x12, 0x2a, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f,
+	0x6e, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x42, 0x61, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61,
+	0x67, 0x65, 0x18, 0xb6, 0x02, 0x20, 0x03, 0x28, 0x07, 0x52, 0x10, 0x72, 0x65, 0x70, 0x65, 0x61,
+	0x74, 0x65, 0x64, 0x58, 0x46, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x3a, 0x55, 0x0a, 0x10, 0x72,
+	0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x78, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x12,
+	0x2a, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63,
+	0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e,
+	0x42, 0x61, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0xb7, 0x02, 0x20, 0x03,
+	0x28, 0x02, 0x52, 0x0e, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x58, 0x46, 0x6c, 0x6f,
+	0x61, 0x74, 0x3a, 0x5b, 0x0a, 0x13, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x78,
+	0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x12, 0x2a, 0x2e, 0x67, 0x6f, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e,
+	0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x42, 0x61, 0x73, 0x65, 0x4d, 0x65,
+	0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0xb8, 0x02, 0x20, 0x03, 0x28, 0x10, 0x52, 0x11, 0x72, 0x65,
+	0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x58, 0x53, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x3a,
+	0x59, 0x0a, 0x12, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x78, 0x5f, 0x66, 0x69,
+	0x78, 0x65, 0x64, 0x36, 0x34, 0x12, 0x2a, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e,
+	0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x42, 0x61, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67,
+	0x65, 0x18, 0xb9, 0x02, 0x20, 0x03, 0x28, 0x06, 0x52, 0x10, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74,
+	0x65, 0x64, 0x58, 0x46, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x3a, 0x57, 0x0a, 0x11, 0x72, 0x65,
+	0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x78, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x12,
+	0x2a, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63,
+	0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e,
+	0x42, 0x61, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0xba, 0x02, 0x20, 0x03,
+	0x28, 0x01, 0x52, 0x0f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x58, 0x44, 0x6f, 0x75,
+	0x62, 0x6c, 0x65, 0x3a, 0x57, 0x0a, 0x11, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f,
+	0x78, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x2a, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73,
+	0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x42, 0x61, 0x73, 0x65, 0x4d, 0x65, 0x73,
+	0x73, 0x61, 0x67, 0x65, 0x18, 0xbb, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x72, 0x65, 0x70,
+	0x65, 0x61, 0x74, 0x65, 0x64, 0x58, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x55, 0x0a, 0x10,
+	0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x78, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73,
+	0x12, 0x2a, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x63, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x61, 0x73, 0x65,
+	0x2e, 0x42, 0x61, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0xbc, 0x02, 0x20,
+	0x03, 0x28, 0x0c, 0x52, 0x0e, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x58, 0x42, 0x79,
+	0x74, 0x65, 0x73, 0x3a, 0x80, 0x01, 0x0a, 0x12, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64,
+	0x5f, 0x78, 0x5f, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x2e, 0x67, 0x6f, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x65, 0x78, 0x74, 0x65,
+	0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x42, 0x61, 0x73, 0x65, 0x4d,
+	0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0xbd, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e,
+	0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x65,
+	0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x65, 0x78, 0x74, 0x2e, 0x4d, 0x65, 0x73,
+	0x73, 0x61, 0x67, 0x65, 0x52, 0x10, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x58, 0x4d,
+	0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x3a, 0x7e, 0x0a, 0x0d, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74,
+	0x65, 0x64, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x2a, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69,
+	0x6f, 0x6e, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x42, 0x61, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73,
+	0x61, 0x67, 0x65, 0x18, 0xbe, 0x02, 0x20, 0x03, 0x28, 0x0a, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x65, 0x78, 0x74, 0x65,
+	0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x65, 0x78, 0x74, 0x2e, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74,
+	0x65, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x0d, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65,
+	0x64, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x3a, 0x80, 0x01, 0x0a, 0x10, 0x65, 0x78, 0x74, 0x65, 0x6e,
+	0x64, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x2a, 0x2e, 0x67, 0x6f,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x65, 0x78, 0x74,
+	0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x42, 0x61, 0x73, 0x65,
+	0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x90, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28,
+	0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e,
+	0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x65, 0x78, 0x74, 0x2e, 0x45, 0x78,
+	0x74, 0x65, 0x6e, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x0f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x64,
+	0x61, 0x62, 0x6c, 0x65, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x3a, 0x60, 0x0a, 0x17, 0x65, 0x78, 0x74,
+	0x65, 0x6e, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x66,
+	0x69, 0x65, 0x6c, 0x64, 0x12, 0x28, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e,
+	0x65, 0x78, 0x74, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x01,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x15, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x61, 0x62, 0x6c, 0x65,
+	0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x3a, 0xab, 0x01, 0x0a, 0x15,
+	0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x65, 0x78, 0x74, 0x65,
+	0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x3a, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e,
+	0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x65, 0x74,
+	0x57, 0x69, 0x72, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67,
+	0x65, 0x18, 0x65, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69,
+	0x6f, 0x6e, 0x2e, 0x65, 0x78, 0x74, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x65,
+	0x74, 0x57, 0x69, 0x72, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x45, 0x78, 0x74, 0x65, 0x6e,
+	0x73, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x65, 0x74,
+	0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x49, 0x5a, 0x47, 0x67, 0x69, 0x74,
+	0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2f, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x76, 0x32, 0x2f, 0x63, 0x6d, 0x64, 0x2f, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x67, 0x6f, 0x2f, 0x74, 0x65, 0x73,
+	0x74, 0x64, 0x61, 0x74, 0x61, 0x2f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73,
+	0x2f, 0x65, 0x78, 0x74,
+}
+
+var fileDescriptor_bf470ef4907b23cb_gzipped = func() []byte {
+	bb := new(bytes.Buffer)
+	zw, _ := gzip.NewWriterLevel(bb, gzip.NoCompression)
+	zw.Write(fileDescriptor_bf470ef4907b23cb)
+	zw.Close()
+	return bb.Bytes()
+}()
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
 var Ext_protoFile protoreflect.FileDescriptor
 
-var xxx_Ext_protoFile_FileDesc = prototype.File{
-	Syntax:  protoreflect.Proto2,
-	Path:    "extensions/ext/ext.proto",
-	Package: "goproto.protoc.extension.ext",
-	Imports: []protoreflect.FileImport{
-		{FileDescriptor: prototype.PlaceholderFile("extensions/base/base.proto", "goproto.protoc.extension.base")},
-		{FileDescriptor: prototype.PlaceholderFile("extensions/extra/extra.proto", "goproto.protoc.extension.extra")},
-	},
-}
-var xxx_Ext_protoFile_EnumTypes = [1]protoreflect.EnumType{
-	prototype.GoEnum(
-		xxx_Ext_protoFile_EnumDescs[0].Reference(),
-		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
-			return Enum(n)
-		},
-	),
-}
-var xxx_Ext_protoFile_EnumDescs = [1]prototype.Enum{
-	{
-		Name: "Enum",
-		Values: []prototype.EnumValue{
-			{Name: "ZERO", Number: 0},
-		},
-	},
-}
-var xxx_Ext_protoFile_MessageTypes = [8]protoimpl.MessageType{
-	{Type: prototype.GoMessage(
-		xxx_Ext_protoFile_MessageDescs[0].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_Message{new(Message)}
-		},
-	)},
-	{Type: prototype.GoMessage(
-		xxx_Ext_protoFile_MessageDescs[1].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_ExtensionGroup{new(ExtensionGroup)}
-		},
-	)},
-	{Type: prototype.GoMessage(
-		xxx_Ext_protoFile_MessageDescs[2].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_ExtendingMessage{new(ExtendingMessage)}
-		},
-	)},
-	{Type: prototype.GoMessage(
-		xxx_Ext_protoFile_MessageDescs[3].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_RepeatedGroup{new(RepeatedGroup)}
-		},
-	)},
-	{Type: prototype.GoMessage(
-		xxx_Ext_protoFile_MessageDescs[4].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_Extendable{new(Extendable)}
-		},
-	)},
-	{Type: prototype.GoMessage(
-		xxx_Ext_protoFile_MessageDescs[5].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_MessageSetWireFormatExtension{new(MessageSetWireFormatExtension)}
-		},
-	)},
-	{Type: prototype.GoMessage(
-		xxx_Ext_protoFile_MessageDescs[6].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_Message_M{new(Message_M)}
-		},
-	)},
-	{Type: prototype.GoMessage(
-		xxx_Ext_protoFile_MessageDescs[7].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_ExtendingMessage_ExtendingMessageSubmessage{new(ExtendingMessage_ExtendingMessageSubmessage)}
-		},
-	)},
-}
-var xxx_Ext_protoFile_MessageDescs = [8]prototype.Message{
-	{
-		Name: "Message",
-		Fields: []prototype.Field{
-			{
-				Name:        "data",
-				Number:      1,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.BytesKind,
-				JSONName:    "data",
-				IsPacked:    prototype.False,
-			},
-		},
-	},
-	{
-		Name: "ExtensionGroup",
-		Fields: []prototype.Field{
-			{
-				Name:        "extension_group",
-				Number:      120,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.StringKind,
-				JSONName:    "extensionGroup",
-				IsPacked:    prototype.False,
-			},
-		},
-	},
-	{
-		Name: "ExtendingMessage",
-	},
-	{
-		Name: "RepeatedGroup",
-		Fields: []prototype.Field{
-			{
-				Name:        "repeated_x_group",
-				Number:      319,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.StringKind,
-				JSONName:    "repeatedXGroup",
-				IsPacked:    prototype.False,
-			},
-		},
-	},
-	{
-		Name:            "Extendable",
-		ExtensionRanges: [][2]protoreflect.FieldNumber{{1, 536870912}},
-	},
-	{
-		Name: "MessageSetWireFormatExtension",
-	},
-	{
-		Name: "M",
-	},
-	{
-		Name: "ExtendingMessageSubmessage",
-	},
+var xxx_Ext_protoFile_enumTypes [1]protoreflect.EnumType
+var xxx_Ext_protoFile_messageTypes [8]protoimpl.MessageType
+var xxx_Ext_protoFile_goTypes = []interface{}{
+	(Enum)(0),                             // 0: goproto.protoc.extension.ext.Enum
+	(*Message)(nil),                       // 1: goproto.protoc.extension.ext.Message
+	(*ExtensionGroup)(nil),                // 2: goproto.protoc.extension.ext.ExtensionGroup
+	(*ExtendingMessage)(nil),              // 3: goproto.protoc.extension.ext.ExtendingMessage
+	(*RepeatedGroup)(nil),                 // 4: goproto.protoc.extension.ext.RepeatedGroup
+	(*Extendable)(nil),                    // 5: goproto.protoc.extension.ext.Extendable
+	(*MessageSetWireFormatExtension)(nil), // 6: goproto.protoc.extension.ext.MessageSetWireFormatExtension
+	(*Message_M)(nil),                     // 7: goproto.protoc.extension.ext.Message.M
+	(*ExtendingMessage_ExtendingMessageSubmessage)(nil), // 8: goproto.protoc.extension.ext.ExtendingMessage.ExtendingMessageSubmessage
+	(*base.BaseMessage)(nil),                            // 9: goproto.protoc.extension.base.BaseMessage
+	(*base.MessageSetWireFormatMessage)(nil),            // 10: goproto.protoc.extension.base.MessageSetWireFormatMessage
+	(*extra.ExtraMessage)(nil),                          // 11: goproto.protoc.extension.extra.ExtraMessage
+}
+var xxx_Ext_protoFile_depIdxs = []int32{
+	9,  // goproto.protoc.extension.ext.extension_bool:extendee -> goproto.protoc.extension.base.BaseMessage
+	9,  // goproto.protoc.extension.ext.extension_enum:extendee -> goproto.protoc.extension.base.BaseMessage
+	9,  // goproto.protoc.extension.ext.extension_int32:extendee -> goproto.protoc.extension.base.BaseMessage
+	9,  // goproto.protoc.extension.ext.extension_sint32:extendee -> goproto.protoc.extension.base.BaseMessage
+	9,  // goproto.protoc.extension.ext.extension_uint32:extendee -> goproto.protoc.extension.base.BaseMessage
+	9,  // goproto.protoc.extension.ext.extension_int64:extendee -> goproto.protoc.extension.base.BaseMessage
+	9,  // goproto.protoc.extension.ext.extension_sint64:extendee -> goproto.protoc.extension.base.BaseMessage
+	9,  // goproto.protoc.extension.ext.extension_uint64:extendee -> goproto.protoc.extension.base.BaseMessage
+	9,  // goproto.protoc.extension.ext.extension_sfixed32:extendee -> goproto.protoc.extension.base.BaseMessage
+	9,  // goproto.protoc.extension.ext.extension_fixed32:extendee -> goproto.protoc.extension.base.BaseMessage
+	9,  // goproto.protoc.extension.ext.extension_float:extendee -> goproto.protoc.extension.base.BaseMessage
+	9,  // goproto.protoc.extension.ext.extension_sfixed64:extendee -> goproto.protoc.extension.base.BaseMessage
+	9,  // goproto.protoc.extension.ext.extension_fixed64:extendee -> goproto.protoc.extension.base.BaseMessage
+	9,  // goproto.protoc.extension.ext.extension_double:extendee -> goproto.protoc.extension.base.BaseMessage
+	9,  // goproto.protoc.extension.ext.extension_string:extendee -> goproto.protoc.extension.base.BaseMessage
+	9,  // goproto.protoc.extension.ext.extension_bytes:extendee -> goproto.protoc.extension.base.BaseMessage
+	9,  // goproto.protoc.extension.ext.extension_Message:extendee -> goproto.protoc.extension.base.BaseMessage
+	9,  // goproto.protoc.extension.ext.extension_MessageM:extendee -> goproto.protoc.extension.base.BaseMessage
+	9,  // goproto.protoc.extension.ext.extensiongroup:extendee -> goproto.protoc.extension.base.BaseMessage
+	9,  // goproto.protoc.extension.ext.extra_message:extendee -> goproto.protoc.extension.base.BaseMessage
+	9,  // goproto.protoc.extension.ext.repeated_x_bool:extendee -> goproto.protoc.extension.base.BaseMessage
+	9,  // goproto.protoc.extension.ext.repeated_x_enum:extendee -> goproto.protoc.extension.base.BaseMessage
+	9,  // goproto.protoc.extension.ext.repeated_x_int32:extendee -> goproto.protoc.extension.base.BaseMessage
+	9,  // goproto.protoc.extension.ext.repeated_x_sint32:extendee -> goproto.protoc.extension.base.BaseMessage
+	9,  // goproto.protoc.extension.ext.repeated_x_uint32:extendee -> goproto.protoc.extension.base.BaseMessage
+	9,  // goproto.protoc.extension.ext.repeated_x_int64:extendee -> goproto.protoc.extension.base.BaseMessage
+	9,  // goproto.protoc.extension.ext.repeated_x_sint64:extendee -> goproto.protoc.extension.base.BaseMessage
+	9,  // goproto.protoc.extension.ext.repeated_x_uint64:extendee -> goproto.protoc.extension.base.BaseMessage
+	9,  // goproto.protoc.extension.ext.repeated_x_sfixed32:extendee -> goproto.protoc.extension.base.BaseMessage
+	9,  // goproto.protoc.extension.ext.repeated_x_fixed32:extendee -> goproto.protoc.extension.base.BaseMessage
+	9,  // goproto.protoc.extension.ext.repeated_x_float:extendee -> goproto.protoc.extension.base.BaseMessage
+	9,  // goproto.protoc.extension.ext.repeated_x_sfixed64:extendee -> goproto.protoc.extension.base.BaseMessage
+	9,  // goproto.protoc.extension.ext.repeated_x_fixed64:extendee -> goproto.protoc.extension.base.BaseMessage
+	9,  // goproto.protoc.extension.ext.repeated_x_double:extendee -> goproto.protoc.extension.base.BaseMessage
+	9,  // goproto.protoc.extension.ext.repeated_x_string:extendee -> goproto.protoc.extension.base.BaseMessage
+	9,  // goproto.protoc.extension.ext.repeated_x_bytes:extendee -> goproto.protoc.extension.base.BaseMessage
+	9,  // goproto.protoc.extension.ext.repeated_x_Message:extendee -> goproto.protoc.extension.base.BaseMessage
+	9,  // goproto.protoc.extension.ext.repeatedgroup:extendee -> goproto.protoc.extension.base.BaseMessage
+	9,  // goproto.protoc.extension.ext.extendable_field:extendee -> goproto.protoc.extension.base.BaseMessage
+	5,  // goproto.protoc.extension.ext.extendable_string_field:extendee -> goproto.protoc.extension.ext.Extendable
+	10, // goproto.protoc.extension.ext.message_set_extension:extendee -> goproto.protoc.extension.base.MessageSetWireFormatMessage
+	9,  // goproto.protoc.extension.ext.ExtendingMessage.extending_message_string:extendee -> goproto.protoc.extension.base.BaseMessage
+	9,  // goproto.protoc.extension.ext.ExtendingMessage.extending_message_submessage:extendee -> goproto.protoc.extension.base.BaseMessage
+	10, // goproto.protoc.extension.ext.MessageSetWireFormatExtension.message_set_extension:extendee -> goproto.protoc.extension.base.MessageSetWireFormatMessage
+	0,  // goproto.protoc.extension.ext.extension_enum:type_name -> goproto.protoc.extension.ext.Enum
+	1,  // goproto.protoc.extension.ext.extension_Message:type_name -> goproto.protoc.extension.ext.Message
+	7,  // goproto.protoc.extension.ext.extension_MessageM:type_name -> goproto.protoc.extension.ext.Message.M
+	2,  // goproto.protoc.extension.ext.extensiongroup:type_name -> goproto.protoc.extension.ext.ExtensionGroup
+	11, // goproto.protoc.extension.ext.extra_message:type_name -> goproto.protoc.extension.extra.ExtraMessage
+	0,  // goproto.protoc.extension.ext.repeated_x_enum:type_name -> goproto.protoc.extension.ext.Enum
+	1,  // goproto.protoc.extension.ext.repeated_x_Message:type_name -> goproto.protoc.extension.ext.Message
+	4,  // goproto.protoc.extension.ext.repeatedgroup:type_name -> goproto.protoc.extension.ext.RepeatedGroup
+	5,  // goproto.protoc.extension.ext.extendable_field:type_name -> goproto.protoc.extension.ext.Extendable
+	6,  // goproto.protoc.extension.ext.message_set_extension:type_name -> goproto.protoc.extension.ext.MessageSetWireFormatExtension
+	8,  // goproto.protoc.extension.ext.ExtendingMessage.extending_message_submessage:type_name -> goproto.protoc.extension.ext.ExtendingMessage.ExtendingMessageSubmessage
+	6,  // goproto.protoc.extension.ext.MessageSetWireFormatExtension.message_set_extension:type_name -> goproto.protoc.extension.ext.MessageSetWireFormatExtension
+}
+
+func init() {
+	var messageTypes [8]protoreflect.MessageType
+	var extensionTypes [44]protoreflect.ExtensionType
+	Ext_protoFile = protoimpl.FileBuilder{
+		RawDescriptor:        fileDescriptor_bf470ef4907b23cb,
+		GoTypes:              xxx_Ext_protoFile_goTypes,
+		DependencyIndexes:    xxx_Ext_protoFile_depIdxs,
+		EnumOutputTypes:      xxx_Ext_protoFile_enumTypes[:],
+		MessageOutputTypes:   messageTypes[:],
+		ExtensionOutputTypes: extensionTypes[:],
+	}.Init()
+	messageGoTypes := xxx_Ext_protoFile_goTypes[1:][:8]
+	for i, mt := range messageTypes[:] {
+		xxx_Ext_protoFile_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
+		xxx_Ext_protoFile_messageTypes[i].PBType = mt
+	}
+	E_ExtensionBool.Type = extensionTypes[0]
+	E_ExtensionEnum.Type = extensionTypes[1]
+	E_ExtensionInt32.Type = extensionTypes[2]
+	E_ExtensionSint32.Type = extensionTypes[3]
+	E_ExtensionUint32.Type = extensionTypes[4]
+	E_ExtensionInt64.Type = extensionTypes[5]
+	E_ExtensionSint64.Type = extensionTypes[6]
+	E_ExtensionUint64.Type = extensionTypes[7]
+	E_ExtensionSfixed32.Type = extensionTypes[8]
+	E_ExtensionFixed32.Type = extensionTypes[9]
+	E_ExtensionFloat.Type = extensionTypes[10]
+	E_ExtensionSfixed64.Type = extensionTypes[11]
+	E_ExtensionFixed64.Type = extensionTypes[12]
+	E_ExtensionDouble.Type = extensionTypes[13]
+	E_ExtensionString.Type = extensionTypes[14]
+	E_ExtensionBytes.Type = extensionTypes[15]
+	E_Extension_Message.Type = extensionTypes[16]
+	E_Extension_MessageM.Type = extensionTypes[17]
+	E_Extensiongroup.Type = extensionTypes[18]
+	E_ExtraMessage.Type = extensionTypes[19]
+	E_RepeatedXBool.Type = extensionTypes[20]
+	E_RepeatedXEnum.Type = extensionTypes[21]
+	E_RepeatedXInt32.Type = extensionTypes[22]
+	E_RepeatedXSint32.Type = extensionTypes[23]
+	E_RepeatedXUint32.Type = extensionTypes[24]
+	E_RepeatedXInt64.Type = extensionTypes[25]
+	E_RepeatedXSint64.Type = extensionTypes[26]
+	E_RepeatedXUint64.Type = extensionTypes[27]
+	E_RepeatedXSfixed32.Type = extensionTypes[28]
+	E_RepeatedXFixed32.Type = extensionTypes[29]
+	E_RepeatedXFloat.Type = extensionTypes[30]
+	E_RepeatedXSfixed64.Type = extensionTypes[31]
+	E_RepeatedXFixed64.Type = extensionTypes[32]
+	E_RepeatedXDouble.Type = extensionTypes[33]
+	E_RepeatedXString.Type = extensionTypes[34]
+	E_RepeatedXBytes.Type = extensionTypes[35]
+	E_RepeatedX_Message.Type = extensionTypes[36]
+	E_Repeatedgroup.Type = extensionTypes[37]
+	E_ExtendableField.Type = extensionTypes[38]
+	E_ExtendableStringField.Type = extensionTypes[39]
+	E_MessageSetExtension.Type = extensionTypes[40]
+	E_ExtendingMessage_ExtendingMessageString.Type = extensionTypes[41]
+	E_ExtendingMessage_ExtendingMessageSubmessage.Type = extensionTypes[42]
+	E_MessageSetWireFormatExtension_MessageSetExtension.Type = extensionTypes[43]
+	xxx_Ext_protoFile_goTypes = nil
+	xxx_Ext_protoFile_depIdxs = nil
 }

+ 47 - 66
cmd/protoc-gen-go/testdata/extensions/extra/extra.pb.go

@@ -4,10 +4,12 @@
 package extra
 
 import (
+	bytes "bytes"
+	gzip "compress/gzip"
 	proto "github.com/golang/protobuf/proto"
 	protoreflect "github.com/golang/protobuf/v2/reflect/protoreflect"
-	prototype "github.com/golang/protobuf/v2/reflect/prototype"
 	protoimpl "github.com/golang/protobuf/v2/runtime/protoimpl"
+	reflect "reflect"
 )
 
 // This is a compile-time assertion to ensure that this generated file
@@ -23,29 +25,14 @@ type ExtraMessage struct {
 	XXX_sizecache        int32    `json:"-"`
 }
 
-type xxx_ExtraMessage struct{ m *ExtraMessage }
-
 func (m *ExtraMessage) ProtoReflect() protoreflect.Message {
-	return xxx_ExtraMessage{m}
-}
-func (m xxx_ExtraMessage) Type() protoreflect.MessageType {
-	return xxx_Extra_protoFile_MessageTypes[0].Type
-}
-func (m xxx_ExtraMessage) KnownFields() protoreflect.KnownFields {
-	return xxx_Extra_protoFile_MessageTypes[0].KnownFieldsOf(m.m)
-}
-func (m xxx_ExtraMessage) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Extra_protoFile_MessageTypes[0].UnknownFieldsOf(m.m)
+	return xxx_Extra_protoFile_messageTypes[0].MessageOf(m)
 }
-func (m xxx_ExtraMessage) Interface() protoreflect.ProtoMessage {
-	return m.m
-}
-
 func (m *ExtraMessage) Reset()         { *m = ExtraMessage{} }
 func (m *ExtraMessage) String() string { return proto.CompactTextString(m) }
 func (*ExtraMessage) ProtoMessage()    {}
 func (*ExtraMessage) Descriptor() ([]byte, []int) {
-	return fileDescriptor_496c2a5e9c1e8739, []int{0}
+	return fileDescriptor_496c2a5e9c1e8739_gzipped, []int{0}
 }
 
 func (m *ExtraMessage) XXX_Unmarshal(b []byte) error {
@@ -74,62 +61,56 @@ func (m *ExtraMessage) GetData() []byte {
 }
 
 func init() {
-	proto.RegisterFile("extensions/extra/extra.proto", fileDescriptor_496c2a5e9c1e8739)
+	proto.RegisterFile("extensions/extra/extra.proto", fileDescriptor_496c2a5e9c1e8739_gzipped)
 	proto.RegisterType((*ExtraMessage)(nil), "goproto.protoc.extension.extra.ExtraMessage")
 }
 
 var fileDescriptor_496c2a5e9c1e8739 = []byte{
-	// 149 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x49, 0xad, 0x28, 0x49,
-	0xcd, 0x2b, 0xce, 0xcc, 0xcf, 0x2b, 0xd6, 0x4f, 0xad, 0x28, 0x29, 0x4a, 0x84, 0x90, 0x7a, 0x05,
-	0x45, 0xf9, 0x25, 0xf9, 0x42, 0x72, 0xe9, 0xf9, 0x60, 0x06, 0x84, 0x9b, 0xac, 0x07, 0x57, 0xac,
-	0x07, 0x56, 0xa5, 0xa4, 0xc4, 0xc5, 0xe3, 0x0a, 0x62, 0xf8, 0xa6, 0x16, 0x17, 0x27, 0xa6, 0xa7,
-	0x0a, 0x09, 0x71, 0xb1, 0xa4, 0x24, 0x96, 0x24, 0x4a, 0x30, 0x2a, 0x30, 0x6a, 0xf0, 0x04, 0x81,
-	0xd9, 0x4e, 0xde, 0x51, 0x9e, 0xe9, 0x99, 0x25, 0x19, 0xa5, 0x49, 0x7a, 0xc9, 0xf9, 0xb9, 0xfa,
-	0xe9, 0xf9, 0x39, 0x89, 0x79, 0xe9, 0xfa, 0x60, 0xf3, 0x92, 0x4a, 0xd3, 0xf4, 0xcb, 0x8c, 0xf4,
-	0x93, 0x73, 0x53, 0x20, 0xfc, 0x64, 0xdd, 0xf4, 0xd4, 0x3c, 0xdd, 0xf4, 0x7c, 0xfd, 0x92, 0xd4,
-	0xe2, 0x12, 0x90, 0x5e, 0x7d, 0x74, 0xc7, 0x01, 0x02, 0x00, 0x00, 0xff, 0xff, 0xcb, 0xfb, 0x31,
-	0xfc, 0xaf, 0x00, 0x00, 0x00,
-}
-
-func init() {
-	xxx_Extra_protoFile_FileDesc.Messages = xxx_Extra_protoFile_MessageDescs[0:1]
-	var err error
-	Extra_protoFile, err = prototype.NewFile(&xxx_Extra_protoFile_FileDesc)
-	if err != nil {
-		panic(err)
-	}
-}
+	// 175 bytes of the wire-encoded FileDescriptorProto
+	0x0a, 0x1c, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x65, 0x78, 0x74,
+	0x72, 0x61, 0x2f, 0x65, 0x78, 0x74, 0x72, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1e,
+	0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x65,
+	0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x65, 0x78, 0x74, 0x72, 0x61, 0x22, 0x22,
+	0x0a, 0x0c, 0x45, 0x78, 0x74, 0x72, 0x61, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x12,
+	0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61,
+	0x74, 0x61, 0x42, 0x4b, 0x5a, 0x49, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d,
+	0x2f, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,
+	0x2f, 0x76, 0x32, 0x2f, 0x63, 0x6d, 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67,
+	0x65, 0x6e, 0x2d, 0x67, 0x6f, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x64, 0x61, 0x74, 0x61, 0x2f, 0x65,
+	0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x65, 0x78, 0x74, 0x72, 0x61,
+}
+
+var fileDescriptor_496c2a5e9c1e8739_gzipped = func() []byte {
+	bb := new(bytes.Buffer)
+	zw, _ := gzip.NewWriterLevel(bb, gzip.NoCompression)
+	zw.Write(fileDescriptor_496c2a5e9c1e8739)
+	zw.Close()
+	return bb.Bytes()
+}()
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
 var Extra_protoFile protoreflect.FileDescriptor
 
-var xxx_Extra_protoFile_FileDesc = prototype.File{
-	Syntax:  protoreflect.Proto2,
-	Path:    "extensions/extra/extra.proto",
-	Package: "goproto.protoc.extension.extra",
-}
-var xxx_Extra_protoFile_MessageTypes = [1]protoimpl.MessageType{
-	{Type: prototype.GoMessage(
-		xxx_Extra_protoFile_MessageDescs[0].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_ExtraMessage{new(ExtraMessage)}
-		},
-	)},
+var xxx_Extra_protoFile_messageTypes [1]protoimpl.MessageType
+var xxx_Extra_protoFile_goTypes = []interface{}{
+	(*ExtraMessage)(nil), // 0: goproto.protoc.extension.extra.ExtraMessage
 }
-var xxx_Extra_protoFile_MessageDescs = [1]prototype.Message{
-	{
-		Name: "ExtraMessage",
-		Fields: []prototype.Field{
-			{
-				Name:        "data",
-				Number:      1,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.BytesKind,
-				JSONName:    "data",
-				IsPacked:    prototype.False,
-			},
-		},
-	},
+var xxx_Extra_protoFile_depIdxs = []int32{}
+
+func init() {
+	var messageTypes [1]protoreflect.MessageType
+	Extra_protoFile = protoimpl.FileBuilder{
+		RawDescriptor:      fileDescriptor_496c2a5e9c1e8739,
+		GoTypes:            xxx_Extra_protoFile_goTypes,
+		DependencyIndexes:  xxx_Extra_protoFile_depIdxs,
+		MessageOutputTypes: messageTypes[:],
+	}.Init()
+	messageGoTypes := xxx_Extra_protoFile_goTypes[0:][:1]
+	for i, mt := range messageTypes[:] {
+		xxx_Extra_protoFile_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
+		xxx_Extra_protoFile_messageTypes[i].PBType = mt
+	}
+	xxx_Extra_protoFile_goTypes = nil
+	xxx_Extra_protoFile_depIdxs = nil
 }

+ 323 - 117
cmd/protoc-gen-go/testdata/extensions/proto3/ext3.pb.go

@@ -4,11 +4,13 @@
 package proto3
 
 import (
+	bytes "bytes"
+	gzip "compress/gzip"
 	proto "github.com/golang/protobuf/proto"
 	descriptor "github.com/golang/protobuf/protoc-gen-go/descriptor"
 	protoreflect "github.com/golang/protobuf/v2/reflect/protoreflect"
-	prototype "github.com/golang/protobuf/v2/reflect/prototype"
 	protoimpl "github.com/golang/protobuf/v2/runtime/protoimpl"
+	reflect "reflect"
 )
 
 // This is a compile-time assertion to ensure that this generated file
@@ -24,7 +26,7 @@ const (
 )
 
 func (e Enum) Type() protoreflect.EnumType {
-	return xxx_Ext3_protoFile_EnumTypes[0]
+	return xxx_Ext3_protoFile_enumTypes[0]
 }
 func (e Enum) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -43,7 +45,7 @@ func (x Enum) String() string {
 }
 
 func (Enum) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_3db31bb248c8865e, []int{0}
+	return fileDescriptor_3db31bb248c8865e_gzipped, []int{0}
 }
 
 type Message struct {
@@ -52,29 +54,14 @@ type Message struct {
 	XXX_sizecache        int32    `json:"-"`
 }
 
-type xxx_Message struct{ m *Message }
-
 func (m *Message) ProtoReflect() protoreflect.Message {
-	return xxx_Message{m}
-}
-func (m xxx_Message) Type() protoreflect.MessageType {
-	return xxx_Ext3_protoFile_MessageTypes[0].Type
-}
-func (m xxx_Message) KnownFields() protoreflect.KnownFields {
-	return xxx_Ext3_protoFile_MessageTypes[0].KnownFieldsOf(m.m)
-}
-func (m xxx_Message) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Ext3_protoFile_MessageTypes[0].UnknownFieldsOf(m.m)
+	return xxx_Ext3_protoFile_messageTypes[0].MessageOf(m)
 }
-func (m xxx_Message) Interface() protoreflect.ProtoMessage {
-	return m.m
-}
-
 func (m *Message) Reset()         { *m = Message{} }
 func (m *Message) String() string { return proto.CompactTextString(m) }
 func (*Message) ProtoMessage()    {}
 func (*Message) Descriptor() ([]byte, []int) {
-	return fileDescriptor_3db31bb248c8865e, []int{0}
+	return fileDescriptor_3db31bb248c8865e_gzipped, []int{0}
 }
 
 func (m *Message) XXX_Unmarshal(b []byte) error {
@@ -402,7 +389,7 @@ var E_RepeatedExtension_Message = &proto.ExtensionDesc{
 }
 
 func init() {
-	proto.RegisterFile("extensions/proto3/ext3.proto", fileDescriptor_3db31bb248c8865e)
+	proto.RegisterFile("extensions/proto3/ext3.proto", fileDescriptor_3db31bb248c8865e_gzipped)
 	proto.RegisterEnum("goproto.protoc.extension.proto3.Enum", Enum_name, Enum_value)
 	proto.RegisterType((*Message)(nil), "goproto.protoc.extension.proto3.Message")
 	proto.RegisterExtension(E_ExtensionBool)
@@ -442,105 +429,324 @@ func init() {
 }
 
 var fileDescriptor_3db31bb248c8865e = []byte{
-	// 758 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x97, 0xdb, 0x4b, 0xdc, 0x5e,
-	0x10, 0xc7, 0x7f, 0xab, 0xab, 0xab, 0xe7, 0xa7, 0xee, 0xba, 0xd0, 0x7a, 0x69, 0x41, 0x29, 0x14,
-	0xa4, 0x60, 0x02, 0xbb, 0x21, 0x0f, 0x79, 0x94, 0x6a, 0xb1, 0xad, 0x08, 0x29, 0x85, 0x22, 0xa5,
-	0x76, 0xb3, 0x39, 0xa6, 0x81, 0x98, 0xb3, 0x6c, 0x4e, 0x5a, 0xfb, 0xd4, 0xd7, 0xfe, 0x7b, 0xbd,
-	0xdf, 0x6f, 0x8f, 0xbd, 0xdf, 0x6f, 0x6f, 0x65, 0xf6, 0x64, 0x4d, 0x36, 0x39, 0x31, 0xe3, 0x93,
-	0x49, 0xcc, 0x7c, 0x66, 0xe6, 0x3b, 0x67, 0xbf, 0x43, 0xc8, 0x71, 0xba, 0xc7, 0xa9, 0x1f, 0xb8,
-	0xcc, 0x0f, 0xd4, 0x4e, 0x97, 0x71, 0xd6, 0x54, 0xe9, 0x1e, 0x6f, 0x2a, 0xbd, 0xeb, 0xfa, 0x82,
-	0xc3, 0x7a, 0x17, 0xe2, 0xb6, 0xad, 0xec, 0xbf, 0x2c, 0x1e, 0x34, 0xe7, 0x17, 0x1d, 0xc6, 0x1c,
-	0x8f, 0x8a, 0x50, 0x2b, 0xdc, 0x51, 0x6d, 0x1a, 0xb4, 0xbb, 0x6e, 0x87, 0xb3, 0xae, 0x78, 0xe5,
-	0xc4, 0x38, 0xa9, 0x6c, 0xd0, 0x20, 0x68, 0x39, 0xf4, 0x54, 0x8d, 0x94, 0x57, 0xfd, 0x70, 0xb7,
-	0x3e, 0x46, 0xca, 0x5b, 0xab, 0xe6, 0x66, 0xed, 0x3f, 0xe3, 0x0c, 0x99, 0xda, 0x47, 0x6e, 0x5b,
-	0x8c, 0x79, 0xf5, 0x05, 0x45, 0x10, 0x95, 0x3e, 0x51, 0x89, 0xa2, 0x37, 0x3b, 0x1c, 0x8a, 0x9c,
-	0x7d, 0x5b, 0x59, 0x2c, 0x2d, 0x8d, 0x99, 0x93, 0xfb, 0x71, 0x2b, 0x8c, 0x79, 0x86, 0x9f, 0x04,
-	0x51, 0x48, 0x52, 0x08, 0x7a, 0x07, 0xa0, 0xa9, 0xc6, 0x49, 0xa5, 0xa0, 0x47, 0x05, 0x6a, 0x4e,
-	0xe4, 0x83, 0x5b, 0x63, 0x9d, 0x54, 0xe3, 0x7c, 0xae, 0xcf, 0x9b, 0x8d, 0xe2, 0x84, 0xef, 0x21,
-	0xe1, 0x88, 0x19, 0x17, 0xba, 0x0e, 0x71, 0xc6, 0x39, 0x52, 0x8b, 0x51, 0x01, 0x92, 0xf5, 0x01,
-	0x58, 0xd3, 0x66, 0x5c, 0xc4, 0x05, 0x37, 0x0b, 0x0b, 0x91, 0xb0, 0x8f, 0x00, 0x9b, 0x4c, 0xc0,
-	0x2e, 0x0a, 0x58, 0xba, 0x49, 0x5d, 0x2b, 0x66, 0x7d, 0x02, 0xd6, 0xf0, 0x60, 0x93, 0xba, 0x96,
-	0x6d, 0x12, 0xc3, 0xfa, 0x0c, 0xac, 0x7a, 0xaa, 0xc9, 0x34, 0x2c, 0x44, 0xc2, 0xbe, 0x00, 0xac,
-	0x9c, 0x6a, 0x52, 0xd7, 0x8c, 0x4d, 0x52, 0x4f, 0x54, 0xb6, 0xe3, 0xee, 0x51, 0x1b, 0xa3, 0xd9,
-	0x57, 0xc0, 0x55, 0xcd, 0xe9, 0xb8, 0xb6, 0x28, 0xd4, 0xd8, 0x20, 0xf1, 0xc3, 0x6d, 0x34, 0xef,
-	0x1b, 0xf0, 0x2a, 0x66, 0xdc, 0xd8, 0x5a, 0x84, 0x1b, 0x18, 0xc2, 0x8e, 0xc7, 0x5a, 0xbc, 0x18,
-	0xf6, 0x1d, 0x60, 0x43, 0x89, 0x21, 0xac, 0x41, 0x9c, 0xac, 0x55, 0x8c, 0x72, 0x3f, 0x80, 0x56,
-	0xcb, 0xb4, 0xaa, 0x6b, 0x92, 0x56, 0x31, 0xbc, 0x9f, 0xc0, 0x1b, 0x4d, 0xb7, 0x9a, 0x9e, 0xab,
-	0xcd, 0x42, 0xcb, 0xa3, 0xc5, 0xb4, 0x5f, 0x40, 0x2b, 0x25, 0xe6, 0x7a, 0xba, 0x17, 0x98, 0x3a,
-	0x71, 0xbc, 0xeb, 0xfa, 0x4e, 0x31, 0xec, 0x37, 0xc0, 0xc6, 0x93, 0x27, 0xae, 0x17, 0x38, 0x38,
-	0x04, 0xeb, 0x26, 0xa7, 0x41, 0x31, 0xeb, 0x0f, 0xb0, 0x26, 0x12, 0x43, 0x58, 0x81, 0x38, 0xe3,
-	0x46, 0x52, 0xb3, 0x28, 0xa4, 0x18, 0xf6, 0x17, 0x60, 0xff, 0x37, 0x96, 0x0a, 0xcd, 0x2a, 0x8a,
-	0x4b, 0xa8, 0x1b, 0x3d, 0x31, 0x2e, 0x91, 0x99, 0x2e, 0xed, 0xd0, 0x16, 0xa7, 0xf6, 0xf6, 0x61,
-	0x4d, 0xf7, 0x4e, 0x75, 0x71, 0x78, 0x69, 0xcc, 0x3c, 0xd2, 0x07, 0xac, 0x0e, 0x98, 0xef, 0x2d,
-	0x29, 0x19, 0xe7, 0xc2, 0x77, 0x81, 0x8c, 0x76, 0xe1, 0x6c, 0x01, 0x3d, 0x37, 0xde, 0x22, 0xb3,
-	0x92, 0x02, 0x90, 0xee, 0x77, 0x0f, 0x2a, 0x18, 0x31, 0x8f, 0x66, 0xd0, 0xc2, 0x9e, 0x2f, 0x93,
-	0x39, 0x09, 0x1b, 0xeb, 0xd3, 0xf7, 0x01, 0x3e, 0x6d, 0xce, 0x64, 0xe0, 0x91, 0x5f, 0xcb, 0xe9,
-	0x58, 0xe3, 0x7e, 0x00, 0xf4, 0x49, 0x09, 0x3d, 0x32, 0xf0, 0x5c, 0x5d, 0x30, 0x3f, 0xd3, 0x87,
-	0x00, 0x1f, 0x96, 0xeb, 0xa2, 0x6b, 0x07, 0xe8, 0x82, 0x81, 0x3f, 0x02, 0x78, 0x3d, 0x47, 0x97,
-	0x5c, 0x3a, 0xd6, 0xeb, 0x1f, 0x03, 0xbd, 0x9c, 0xa3, 0x8b, 0xae, 0x19, 0x57, 0xc9, 0x31, 0x59,
-	0xed, 0x68, 0xb3, 0x7e, 0x02, 0xfc, 0xaa, 0x39, 0x97, 0xad, 0xbe, 0xbf, 0x04, 0xae, 0x90, 0x79,
-	0x49, 0x06, 0x74, 0x82, 0xa7, 0x90, 0xa0, 0x62, 0xce, 0x66, 0x12, 0xf4, 0xb7, 0x82, 0x7c, 0xb2,
-	0xc8, 0xf5, 0xf0, 0x0c, 0xe8, 0x43, 0x92, 0xc9, 0x8a, 0x35, 0x71, 0x90, 0x3a, 0x18, 0xf5, 0x9f,
-	0x03, 0xbe, 0x96, 0xab, 0x8e, 0xae, 0x1d, 0xa4, 0x0e, 0x26, 0xc1, 0x0b, 0x48, 0x30, 0x9a, 0xa7,
-	0x4e, 0xee, 0xe9, 0xc1, 0x6e, 0x94, 0x97, 0x80, 0x2f, 0x49, 0x4e, 0x4f, 0xb4, 0x59, 0x72, 0x4e,
-	0x3e, 0x72, 0xc5, 0xbc, 0x02, 0xfa, 0xb8, 0xec, 0xe4, 0x8b, 0x55, 0x23, 0x9f, 0x2c, 0x72, 0xe7,
-	0xbc, 0x06, 0xf8, 0x84, 0x64, 0xb2, 0x62, 0xf7, 0xdc, 0x2e, 0x49, 0x85, 0x47, 0x6f, 0xa1, 0x37,
-	0x80, 0x3f, 0xcc, 0x16, 0xca, 0x8e, 0x28, 0xfa, 0xcf, 0xca, 0xf9, 0xad, 0xb3, 0x8e, 0xcb, 0xaf,
-	0x85, 0x96, 0xd2, 0x66, 0xbb, 0xaa, 0xc3, 0xbc, 0x96, 0xef, 0xc4, 0x5f, 0x11, 0xd7, 0x1b, 0x6a,
-	0x7b, 0xd7, 0x16, 0xf7, 0xed, 0x65, 0x87, 0xfa, 0xcb, 0x0e, 0x53, 0x39, 0x0d, 0xb8, 0xdd, 0xe2,
-	0x2d, 0x35, 0xf3, 0xc9, 0x62, 0x8d, 0x8a, 0xbf, 0xff, 0x02, 0x00, 0x00, 0xff, 0xff, 0x65, 0x92,
-	0xaa, 0xed, 0xce, 0x0c, 0x00, 0x00,
-}
-
-func init() {
-	xxx_Ext3_protoFile_FileDesc.Enums = xxx_Ext3_protoFile_EnumDescs[0:1]
-	xxx_Ext3_protoFile_FileDesc.Messages = xxx_Ext3_protoFile_MessageDescs[0:1]
-	var err error
-	Ext3_protoFile, err = prototype.NewFile(&xxx_Ext3_protoFile_FileDesc)
-	if err != nil {
-		panic(err)
-	}
-}
+	// 3278 bytes of the wire-encoded FileDescriptorProto
+	0x0a, 0x1c, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x33, 0x2f, 0x65, 0x78, 0x74, 0x33, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1f,
+	0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x65,
+	0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x1a,
+	0x20, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,
+	0x2f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x22, 0x09, 0x0a, 0x07, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2a, 0x10, 0x0a, 0x04,
+	0x45, 0x6e, 0x75, 0x6d, 0x12, 0x08, 0x0a, 0x04, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x3a, 0x47,
+	0x0a, 0x0e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x62, 0x6f, 0x6f, 0x6c,
+	0x12, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
+	0x75, 0x66, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e,
+	0x73, 0x18, 0xe9, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73,
+	0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x6f, 0x6c, 0x3a, 0x6e, 0x0a, 0x0e, 0x65, 0x78, 0x74, 0x65, 0x6e,
+	0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x12, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
+	0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65, 0x73, 0x73,
+	0x61, 0x67, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0xea, 0x07, 0x20, 0x01, 0x28,
+	0x0e, 0x32, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x63, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x33, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x0d, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73,
+	0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x75, 0x6d, 0x3a, 0x49, 0x0a, 0x0f, 0x65, 0x78, 0x74, 0x65, 0x6e,
+	0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x1f, 0x2e, 0x67, 0x6f, 0x6f,
+	0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65, 0x73,
+	0x73, 0x61, 0x67, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0xeb, 0x07, 0x20, 0x01,
+	0x28, 0x05, 0x52, 0x0e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x74,
+	0x33, 0x32, 0x3a, 0x4b, 0x0a, 0x10, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f,
+	0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,
+	0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0xec, 0x07, 0x20, 0x01, 0x28, 0x11, 0x52, 0x0f,
+	0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x3a,
+	0x4b, 0x0a, 0x10, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x75, 0x69, 0x6e,
+	0x74, 0x33, 0x32, 0x12, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4f, 0x70, 0x74,
+	0x69, 0x6f, 0x6e, 0x73, 0x18, 0xed, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x65, 0x78, 0x74,
+	0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x3a, 0x49, 0x0a, 0x0f,
+	0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x12,
+	0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
+	0x66, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73,
+	0x18, 0xee, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69,
+	0x6f, 0x6e, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x3a, 0x4b, 0x0a, 0x10, 0x65, 0x78, 0x74, 0x65, 0x6e,
+	0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x1f, 0x2e, 0x67, 0x6f,
+	0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65,
+	0x73, 0x73, 0x61, 0x67, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0xef, 0x07, 0x20,
+	0x01, 0x28, 0x12, 0x52, 0x0f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x69,
+	0x6e, 0x74, 0x36, 0x34, 0x3a, 0x4b, 0x0a, 0x10, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f,
+	0x6e, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
+	0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61,
+	0x67, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0xf0, 0x07, 0x20, 0x01, 0x28, 0x04,
+	0x52, 0x0f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x55, 0x69, 0x6e, 0x74, 0x36,
+	0x34, 0x3a, 0x4f, 0x0a, 0x12, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x73,
+	0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x12, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
+	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67,
+	0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0xf1, 0x07, 0x20, 0x01, 0x28, 0x0f, 0x52,
+	0x11, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x66, 0x69, 0x78, 0x65, 0x64,
+	0x33, 0x32, 0x3a, 0x4d, 0x0a, 0x11, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f,
+	0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x12, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
+	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67,
+	0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0xf2, 0x07, 0x20, 0x01, 0x28, 0x07, 0x52,
+	0x10, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x46, 0x69, 0x78, 0x65, 0x64, 0x33,
+	0x32, 0x3a, 0x49, 0x0a, 0x0f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x66,
+	0x6c, 0x6f, 0x61, 0x74, 0x12, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4f, 0x70,
+	0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0xf3, 0x07, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0e, 0x65, 0x78,
+	0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x3a, 0x4f, 0x0a, 0x12,
+	0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64,
+	0x36, 0x34, 0x12, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4f, 0x70, 0x74, 0x69,
+	0x6f, 0x6e, 0x73, 0x18, 0xf4, 0x07, 0x20, 0x01, 0x28, 0x10, 0x52, 0x11, 0x65, 0x78, 0x74, 0x65,
+	0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x3a, 0x4d, 0x0a,
+	0x11, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64,
+	0x36, 0x34, 0x12, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4f, 0x70, 0x74, 0x69,
+	0x6f, 0x6e, 0x73, 0x18, 0xf5, 0x07, 0x20, 0x01, 0x28, 0x06, 0x52, 0x10, 0x65, 0x78, 0x74, 0x65,
+	0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x46, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x3a, 0x4b, 0x0a, 0x10,
+	0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65,
+	0x12, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
+	0x75, 0x66, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e,
+	0x73, 0x18, 0xf6, 0x07, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73,
+	0x69, 0x6f, 0x6e, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x3a, 0x4b, 0x0a, 0x10, 0x65, 0x78, 0x74,
+	0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x1f, 0x2e,
+	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,
+	0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0xf7,
+	0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e,
+	0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x49, 0x0a, 0x0f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73,
+	0x69, 0x6f, 0x6e, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x12, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
+	0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65, 0x73, 0x73,
+	0x61, 0x67, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0xf8, 0x07, 0x20, 0x01, 0x28,
+	0x0c, 0x52, 0x0e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x74, 0x65,
+	0x73, 0x3a, 0x77, 0x0a, 0x11, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x4d,
+	0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,
+	0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0xf9, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28,
+	0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e,
+	0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+	0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x10, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73,
+	0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x3a, 0x58, 0x0a, 0x17, 0x72, 0x65,
+	0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e,
+	0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x12, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4f,
+	0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0xd1, 0x0f, 0x20, 0x03, 0x28, 0x08, 0x52, 0x15, 0x72,
+	0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e,
+	0x42, 0x6f, 0x6f, 0x6c, 0x3a, 0x7f, 0x0a, 0x17, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64,
+	0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x12,
+	0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
+	0x66, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73,
+	0x18, 0xd2, 0x0f, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69,
+	0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x15,
+	0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f,
+	0x6e, 0x45, 0x6e, 0x75, 0x6d, 0x3a, 0x5a, 0x0a, 0x18, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65,
+	0x64, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x74, 0x33,
+	0x32, 0x12, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f,
+	0x6e, 0x73, 0x18, 0xd3, 0x0f, 0x20, 0x03, 0x28, 0x05, 0x52, 0x16, 0x72, 0x65, 0x70, 0x65, 0x61,
+	0x74, 0x65, 0x64, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x74, 0x33,
+	0x32, 0x3a, 0x5c, 0x0a, 0x19, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x78,
+	0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x1f,
+	0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,
+	0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18,
+	0xd4, 0x0f, 0x20, 0x03, 0x28, 0x11, 0x52, 0x17, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64,
+	0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x3a,
+	0x5c, 0x0a, 0x19, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x78, 0x74, 0x65,
+	0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x1f, 0x2e, 0x67,
+	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4d,
+	0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0xd5, 0x0f,
+	0x20, 0x03, 0x28, 0x0d, 0x52, 0x17, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x78,
+	0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x3a, 0x5a, 0x0a,
+	0x18, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73,
+	0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
+	0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65, 0x73, 0x73,
+	0x61, 0x67, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0xd6, 0x0f, 0x20, 0x03, 0x28,
+	0x03, 0x52, 0x16, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x78, 0x74, 0x65, 0x6e,
+	0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x3a, 0x5c, 0x0a, 0x19, 0x72, 0x65, 0x70,
+	0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f,
+	0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,
+	0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0xd7, 0x0f, 0x20, 0x03, 0x28, 0x12, 0x52, 0x17,
+	0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f,
+	0x6e, 0x53, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x3a, 0x5c, 0x0a, 0x19, 0x72, 0x65, 0x70, 0x65, 0x61,
+	0x74, 0x65, 0x64, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x75, 0x69,
+	0x6e, 0x74, 0x36, 0x34, 0x12, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4f, 0x70,
+	0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0xd8, 0x0f, 0x20, 0x03, 0x28, 0x04, 0x52, 0x17, 0x72, 0x65,
+	0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x55,
+	0x69, 0x6e, 0x74, 0x36, 0x34, 0x3a, 0x60, 0x0a, 0x1b, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65,
+	0x64, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x66, 0x69, 0x78,
+	0x65, 0x64, 0x33, 0x32, 0x12, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4f, 0x70,
+	0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0xd9, 0x0f, 0x20, 0x03, 0x28, 0x0f, 0x52, 0x19, 0x72, 0x65,
+	0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x53,
+	0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x3a, 0x5e, 0x0a, 0x1a, 0x72, 0x65, 0x70, 0x65, 0x61,
+	0x74, 0x65, 0x64, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x66, 0x69,
+	0x78, 0x65, 0x64, 0x33, 0x32, 0x12, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4f,
+	0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0xda, 0x0f, 0x20, 0x03, 0x28, 0x07, 0x52, 0x18, 0x72,
+	0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e,
+	0x46, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x3a, 0x5a, 0x0a, 0x18, 0x72, 0x65, 0x70, 0x65, 0x61,
+	0x74, 0x65, 0x64, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x66, 0x6c,
+	0x6f, 0x61, 0x74, 0x12, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4f, 0x70, 0x74,
+	0x69, 0x6f, 0x6e, 0x73, 0x18, 0xdb, 0x0f, 0x20, 0x03, 0x28, 0x02, 0x52, 0x16, 0x72, 0x65, 0x70,
+	0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x46, 0x6c,
+	0x6f, 0x61, 0x74, 0x3a, 0x60, 0x0a, 0x1b, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f,
+	0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64,
+	0x36, 0x34, 0x12, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4f, 0x70, 0x74, 0x69,
+	0x6f, 0x6e, 0x73, 0x18, 0xdc, 0x0f, 0x20, 0x03, 0x28, 0x10, 0x52, 0x19, 0x72, 0x65, 0x70, 0x65,
+	0x61, 0x74, 0x65, 0x64, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x66, 0x69,
+	0x78, 0x65, 0x64, 0x36, 0x34, 0x3a, 0x5e, 0x0a, 0x1a, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65,
+	0x64, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x66, 0x69, 0x78, 0x65,
+	0x64, 0x36, 0x34, 0x12, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4f, 0x70, 0x74,
+	0x69, 0x6f, 0x6e, 0x73, 0x18, 0xdd, 0x0f, 0x20, 0x03, 0x28, 0x06, 0x52, 0x18, 0x72, 0x65, 0x70,
+	0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x46, 0x69,
+	0x78, 0x65, 0x64, 0x36, 0x34, 0x3a, 0x5c, 0x0a, 0x19, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65,
+	0x64, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x6f, 0x75, 0x62,
+	0x6c, 0x65, 0x12, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4f, 0x70, 0x74, 0x69,
+	0x6f, 0x6e, 0x73, 0x18, 0xde, 0x0f, 0x20, 0x03, 0x28, 0x01, 0x52, 0x17, 0x72, 0x65, 0x70, 0x65,
+	0x61, 0x74, 0x65, 0x64, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x44, 0x6f, 0x75,
+	0x62, 0x6c, 0x65, 0x3a, 0x5c, 0x0a, 0x19, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f,
+	0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67,
+	0x12, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
+	0x75, 0x66, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e,
+	0x73, 0x18, 0xdf, 0x0f, 0x20, 0x03, 0x28, 0x09, 0x52, 0x17, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74,
+	0x65, 0x64, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x72, 0x69, 0x6e,
+	0x67, 0x3a, 0x5a, 0x0a, 0x18, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x78,
+	0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x12, 0x1f, 0x2e,
+	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,
+	0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0xe0,
+	0x0f, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x16, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45,
+	0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x74, 0x65, 0x73, 0x3a, 0x88, 0x01,
+	0x0a, 0x1a, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e,
+	0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1f, 0x2e, 0x67,
+	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4d,
+	0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0xe1, 0x0f,
+	0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x18,
+	0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f,
+	0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x4c, 0x5a, 0x4a, 0x67, 0x69, 0x74, 0x68,
+	0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2f, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x76, 0x32, 0x2f, 0x63, 0x6d, 0x64, 0x2f, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x67, 0x6f, 0x2f, 0x74, 0x65, 0x73, 0x74,
+	0x64, 0x61, 0x74, 0x61, 0x2f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+}
+
+var fileDescriptor_3db31bb248c8865e_gzipped = func() []byte {
+	bb := new(bytes.Buffer)
+	zw, _ := gzip.NewWriterLevel(bb, gzip.NoCompression)
+	zw.Write(fileDescriptor_3db31bb248c8865e)
+	zw.Close()
+	return bb.Bytes()
+}()
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
 var Ext3_protoFile protoreflect.FileDescriptor
 
-var xxx_Ext3_protoFile_FileDesc = prototype.File{
-	Syntax:  protoreflect.Proto3,
-	Path:    "extensions/proto3/ext3.proto",
-	Package: "goproto.protoc.extension.proto3",
-	Imports: []protoreflect.FileImport{
-		{FileDescriptor: prototype.PlaceholderFile("google/protobuf/descriptor.proto", "google.protobuf")},
-	},
-}
-var xxx_Ext3_protoFile_EnumTypes = [1]protoreflect.EnumType{
-	prototype.GoEnum(
-		xxx_Ext3_protoFile_EnumDescs[0].Reference(),
-		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
-			return Enum(n)
-		},
-	),
-}
-var xxx_Ext3_protoFile_EnumDescs = [1]prototype.Enum{
-	{
-		Name: "Enum",
-		Values: []prototype.EnumValue{
-			{Name: "ZERO", Number: 0},
-		},
-	},
-}
-var xxx_Ext3_protoFile_MessageTypes = [1]protoimpl.MessageType{
-	{Type: prototype.GoMessage(
-		xxx_Ext3_protoFile_MessageDescs[0].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_Message{new(Message)}
-		},
-	)},
-}
-var xxx_Ext3_protoFile_MessageDescs = [1]prototype.Message{
-	{
-		Name: "Message",
-	},
+var xxx_Ext3_protoFile_enumTypes [1]protoreflect.EnumType
+var xxx_Ext3_protoFile_messageTypes [1]protoimpl.MessageType
+var xxx_Ext3_protoFile_goTypes = []interface{}{
+	(Enum)(0),                         // 0: goproto.protoc.extension.proto3.Enum
+	(*Message)(nil),                   // 1: goproto.protoc.extension.proto3.Message
+	(*descriptor.MessageOptions)(nil), // 2: google.protobuf.MessageOptions
+}
+var xxx_Ext3_protoFile_depIdxs = []int32{
+	2, // goproto.protoc.extension.proto3.extension_bool:extendee -> google.protobuf.MessageOptions
+	2, // goproto.protoc.extension.proto3.extension_enum:extendee -> google.protobuf.MessageOptions
+	2, // goproto.protoc.extension.proto3.extension_int32:extendee -> google.protobuf.MessageOptions
+	2, // goproto.protoc.extension.proto3.extension_sint32:extendee -> google.protobuf.MessageOptions
+	2, // goproto.protoc.extension.proto3.extension_uint32:extendee -> google.protobuf.MessageOptions
+	2, // goproto.protoc.extension.proto3.extension_int64:extendee -> google.protobuf.MessageOptions
+	2, // goproto.protoc.extension.proto3.extension_sint64:extendee -> google.protobuf.MessageOptions
+	2, // goproto.protoc.extension.proto3.extension_uint64:extendee -> google.protobuf.MessageOptions
+	2, // goproto.protoc.extension.proto3.extension_sfixed32:extendee -> google.protobuf.MessageOptions
+	2, // goproto.protoc.extension.proto3.extension_fixed32:extendee -> google.protobuf.MessageOptions
+	2, // goproto.protoc.extension.proto3.extension_float:extendee -> google.protobuf.MessageOptions
+	2, // goproto.protoc.extension.proto3.extension_sfixed64:extendee -> google.protobuf.MessageOptions
+	2, // goproto.protoc.extension.proto3.extension_fixed64:extendee -> google.protobuf.MessageOptions
+	2, // goproto.protoc.extension.proto3.extension_double:extendee -> google.protobuf.MessageOptions
+	2, // goproto.protoc.extension.proto3.extension_string:extendee -> google.protobuf.MessageOptions
+	2, // goproto.protoc.extension.proto3.extension_bytes:extendee -> google.protobuf.MessageOptions
+	2, // goproto.protoc.extension.proto3.extension_Message:extendee -> google.protobuf.MessageOptions
+	2, // goproto.protoc.extension.proto3.repeated_extension_bool:extendee -> google.protobuf.MessageOptions
+	2, // goproto.protoc.extension.proto3.repeated_extension_enum:extendee -> google.protobuf.MessageOptions
+	2, // goproto.protoc.extension.proto3.repeated_extension_int32:extendee -> google.protobuf.MessageOptions
+	2, // goproto.protoc.extension.proto3.repeated_extension_sint32:extendee -> google.protobuf.MessageOptions
+	2, // goproto.protoc.extension.proto3.repeated_extension_uint32:extendee -> google.protobuf.MessageOptions
+	2, // goproto.protoc.extension.proto3.repeated_extension_int64:extendee -> google.protobuf.MessageOptions
+	2, // goproto.protoc.extension.proto3.repeated_extension_sint64:extendee -> google.protobuf.MessageOptions
+	2, // goproto.protoc.extension.proto3.repeated_extension_uint64:extendee -> google.protobuf.MessageOptions
+	2, // goproto.protoc.extension.proto3.repeated_extension_sfixed32:extendee -> google.protobuf.MessageOptions
+	2, // goproto.protoc.extension.proto3.repeated_extension_fixed32:extendee -> google.protobuf.MessageOptions
+	2, // goproto.protoc.extension.proto3.repeated_extension_float:extendee -> google.protobuf.MessageOptions
+	2, // goproto.protoc.extension.proto3.repeated_extension_sfixed64:extendee -> google.protobuf.MessageOptions
+	2, // goproto.protoc.extension.proto3.repeated_extension_fixed64:extendee -> google.protobuf.MessageOptions
+	2, // goproto.protoc.extension.proto3.repeated_extension_double:extendee -> google.protobuf.MessageOptions
+	2, // goproto.protoc.extension.proto3.repeated_extension_string:extendee -> google.protobuf.MessageOptions
+	2, // goproto.protoc.extension.proto3.repeated_extension_bytes:extendee -> google.protobuf.MessageOptions
+	2, // goproto.protoc.extension.proto3.repeated_extension_Message:extendee -> google.protobuf.MessageOptions
+	0, // goproto.protoc.extension.proto3.extension_enum:type_name -> goproto.protoc.extension.proto3.Enum
+	1, // goproto.protoc.extension.proto3.extension_Message:type_name -> goproto.protoc.extension.proto3.Message
+	0, // goproto.protoc.extension.proto3.repeated_extension_enum:type_name -> goproto.protoc.extension.proto3.Enum
+	1, // goproto.protoc.extension.proto3.repeated_extension_Message:type_name -> goproto.protoc.extension.proto3.Message
+}
+
+func init() {
+	var messageTypes [1]protoreflect.MessageType
+	var extensionTypes [34]protoreflect.ExtensionType
+	Ext3_protoFile = protoimpl.FileBuilder{
+		RawDescriptor:        fileDescriptor_3db31bb248c8865e,
+		GoTypes:              xxx_Ext3_protoFile_goTypes,
+		DependencyIndexes:    xxx_Ext3_protoFile_depIdxs,
+		EnumOutputTypes:      xxx_Ext3_protoFile_enumTypes[:],
+		MessageOutputTypes:   messageTypes[:],
+		ExtensionOutputTypes: extensionTypes[:],
+	}.Init()
+	messageGoTypes := xxx_Ext3_protoFile_goTypes[1:][:1]
+	for i, mt := range messageTypes[:] {
+		xxx_Ext3_protoFile_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
+		xxx_Ext3_protoFile_messageTypes[i].PBType = mt
+	}
+	E_ExtensionBool.Type = extensionTypes[0]
+	E_ExtensionEnum.Type = extensionTypes[1]
+	E_ExtensionInt32.Type = extensionTypes[2]
+	E_ExtensionSint32.Type = extensionTypes[3]
+	E_ExtensionUint32.Type = extensionTypes[4]
+	E_ExtensionInt64.Type = extensionTypes[5]
+	E_ExtensionSint64.Type = extensionTypes[6]
+	E_ExtensionUint64.Type = extensionTypes[7]
+	E_ExtensionSfixed32.Type = extensionTypes[8]
+	E_ExtensionFixed32.Type = extensionTypes[9]
+	E_ExtensionFloat.Type = extensionTypes[10]
+	E_ExtensionSfixed64.Type = extensionTypes[11]
+	E_ExtensionFixed64.Type = extensionTypes[12]
+	E_ExtensionDouble.Type = extensionTypes[13]
+	E_ExtensionString.Type = extensionTypes[14]
+	E_ExtensionBytes.Type = extensionTypes[15]
+	E_Extension_Message.Type = extensionTypes[16]
+	E_RepeatedExtensionBool.Type = extensionTypes[17]
+	E_RepeatedExtensionEnum.Type = extensionTypes[18]
+	E_RepeatedExtensionInt32.Type = extensionTypes[19]
+	E_RepeatedExtensionSint32.Type = extensionTypes[20]
+	E_RepeatedExtensionUint32.Type = extensionTypes[21]
+	E_RepeatedExtensionInt64.Type = extensionTypes[22]
+	E_RepeatedExtensionSint64.Type = extensionTypes[23]
+	E_RepeatedExtensionUint64.Type = extensionTypes[24]
+	E_RepeatedExtensionSfixed32.Type = extensionTypes[25]
+	E_RepeatedExtensionFixed32.Type = extensionTypes[26]
+	E_RepeatedExtensionFloat.Type = extensionTypes[27]
+	E_RepeatedExtensionSfixed64.Type = extensionTypes[28]
+	E_RepeatedExtensionFixed64.Type = extensionTypes[29]
+	E_RepeatedExtensionDouble.Type = extensionTypes[30]
+	E_RepeatedExtensionString.Type = extensionTypes[31]
+	E_RepeatedExtensionBytes.Type = extensionTypes[32]
+	E_RepeatedExtension_Message.Type = extensionTypes[33]
+	xxx_Ext3_protoFile_goTypes = nil
+	xxx_Ext3_protoFile_depIdxs = nil
 }

+ 92 - 256
cmd/protoc-gen-go/testdata/fieldnames/fieldnames.pb.go

@@ -4,10 +4,12 @@
 package fieldnames
 
 import (
+	bytes "bytes"
+	gzip "compress/gzip"
 	proto "github.com/golang/protobuf/proto"
 	protoreflect "github.com/golang/protobuf/v2/reflect/protoreflect"
-	prototype "github.com/golang/protobuf/v2/reflect/prototype"
 	protoimpl "github.com/golang/protobuf/v2/runtime/protoimpl"
+	reflect "reflect"
 )
 
 // This is a compile-time assertion to ensure that this generated file
@@ -61,29 +63,14 @@ type Message struct {
 	XXX_sizecache        int32                    `json:"-"`
 }
 
-type xxx_Message struct{ m *Message }
-
 func (m *Message) ProtoReflect() protoreflect.Message {
-	return xxx_Message{m}
-}
-func (m xxx_Message) Type() protoreflect.MessageType {
-	return xxx_Fieldnames_protoFile_MessageTypes[0].Type
-}
-func (m xxx_Message) KnownFields() protoreflect.KnownFields {
-	return xxx_Fieldnames_protoFile_MessageTypes[0].KnownFieldsOf(m.m)
+	return xxx_Fieldnames_protoFile_messageTypes[0].MessageOf(m)
 }
-func (m xxx_Message) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Fieldnames_protoFile_MessageTypes[0].UnknownFieldsOf(m.m)
-}
-func (m xxx_Message) Interface() protoreflect.ProtoMessage {
-	return m.m
-}
-
 func (m *Message) Reset()         { *m = Message{} }
 func (m *Message) String() string { return proto.CompactTextString(m) }
 func (*Message) ProtoMessage()    {}
 func (*Message) Descriptor() ([]byte, []int) {
-	return fileDescriptor_6bbe3f70febb9403, []int{0}
+	return fileDescriptor_6bbe3f70febb9403_gzipped, []int{0}
 }
 
 func (m *Message) XXX_Unmarshal(b []byte) error {
@@ -303,29 +290,14 @@ type Message_OneofMessageConflict struct {
 	XXX_sizecache        int32    `json:"-"`
 }
 
-type xxx_Message_OneofMessageConflict struct{ m *Message_OneofMessageConflict }
-
 func (m *Message_OneofMessageConflict) ProtoReflect() protoreflect.Message {
-	return xxx_Message_OneofMessageConflict{m}
-}
-func (m xxx_Message_OneofMessageConflict) Type() protoreflect.MessageType {
-	return xxx_Fieldnames_protoFile_MessageTypes[1].Type
-}
-func (m xxx_Message_OneofMessageConflict) KnownFields() protoreflect.KnownFields {
-	return xxx_Fieldnames_protoFile_MessageTypes[1].KnownFieldsOf(m.m)
-}
-func (m xxx_Message_OneofMessageConflict) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Fieldnames_protoFile_MessageTypes[1].UnknownFieldsOf(m.m)
-}
-func (m xxx_Message_OneofMessageConflict) Interface() protoreflect.ProtoMessage {
-	return m.m
+	return xxx_Fieldnames_protoFile_messageTypes[1].MessageOf(m)
 }
-
 func (m *Message_OneofMessageConflict) Reset()         { *m = Message_OneofMessageConflict{} }
 func (m *Message_OneofMessageConflict) String() string { return proto.CompactTextString(m) }
 func (*Message_OneofMessageConflict) ProtoMessage()    {}
 func (*Message_OneofMessageConflict) Descriptor() ([]byte, []int) {
-	return fileDescriptor_6bbe3f70febb9403, []int{0, 0}
+	return fileDescriptor_6bbe3f70febb9403_gzipped, []int{0, 0}
 }
 
 func (m *Message_OneofMessageConflict) XXX_Unmarshal(b []byte) error {
@@ -347,235 +319,99 @@ func (m *Message_OneofMessageConflict) XXX_DiscardUnknown() {
 var xxx_messageInfo_Message_OneofMessageConflict proto.InternalMessageInfo
 
 func init() {
-	proto.RegisterFile("fieldnames/fieldnames.proto", fileDescriptor_6bbe3f70febb9403)
+	proto.RegisterFile("fieldnames/fieldnames.proto", fileDescriptor_6bbe3f70febb9403_gzipped)
 	proto.RegisterType((*Message)(nil), "goproto.protoc.fieldnames.Message")
 	proto.RegisterType((*Message_OneofMessageConflict)(nil), "goproto.protoc.fieldnames.Message.OneofMessageConflict")
 }
 
 var fileDescriptor_6bbe3f70febb9403 = []byte{
-	// 417 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x93, 0x4b, 0x6f, 0xd3, 0x40,
-	0x10, 0xc7, 0x49, 0x29, 0x6a, 0x32, 0x69, 0x79, 0xac, 0x42, 0xd8, 0x3e, 0x08, 0x08, 0x2e, 0x39,
-	0xd0, 0x58, 0x2a, 0x12, 0x27, 0x2e, 0x24, 0xa2, 0xe2, 0x42, 0x23, 0x45, 0x3d, 0x71, 0x59, 0x6d,
-	0x36, 0xe3, 0x8d, 0x25, 0x7b, 0xa7, 0xb2, 0xd7, 0xf0, 0xd5, 0xf8, 0x78, 0xc8, 0xb3, 0x7e, 0x54,
-	0xc1, 0xb7, 0x99, 0xdf, 0xff, 0x11, 0x8d, 0x57, 0x81, 0xcb, 0x38, 0xc1, 0x74, 0xe7, 0x74, 0x86,
-	0x45, 0xd4, 0x8d, 0x8b, 0x87, 0x9c, 0x3c, 0x89, 0x73, 0x4b, 0x3c, 0x84, 0xd5, 0x2c, 0x3a, 0xc3,
-	0x87, 0xbf, 0xcf, 0xe0, 0xe4, 0x27, 0x16, 0x85, 0xb6, 0x28, 0x2e, 0x61, 0xc4, 0x8a, 0x22, 0x87,
-	0x72, 0xf0, 0x7e, 0x30, 0x1f, 0x6d, 0x86, 0x0c, 0xd6, 0x0e, 0xc5, 0x05, 0x0c, 0x6f, 0xab, 0xf9,
-	0xfe, 0x0f, 0xc9, 0xa3, 0xa0, 0x35, 0xbb, 0x98, 0x01, 0xb0, 0xef, 0x7e, 0x9f, 0x23, 0xca, 0xa7,
-	0xac, 0x3e, 0x22, 0x62, 0x06, 0xe3, 0x50, 0xac, 0x62, 0x2a, 0x73, 0x79, 0xcc, 0x86, 0xf0, 0x5b,
-	0xb7, 0x54, 0xe6, 0x55, 0x7e, 0x87, 0x85, 0xc9, 0x93, 0x07, 0x4f, 0xb9, 0x84, 0x90, 0xef, 0x88,
-	0x90, 0x70, 0x92, 0xe9, 0xbc, 0xd8, 0xeb, 0x54, 0x8e, 0x59, 0x6c, 0x56, 0x71, 0x05, 0xa3, 0xd2,
-	0x35, 0xda, 0x69, 0xe8, 0x6d, 0x81, 0xf8, 0x08, 0x67, 0x7c, 0xb1, 0xca, 0xc2, 0x85, 0xf2, 0x8c,
-	0x1d, 0xa7, 0x0c, 0x9b, 0xab, 0xaf, 0x60, 0xb4, 0xd2, 0x19, 0xa6, 0x2b, 0x5d, 0xa0, 0x9c, 0x84,
-	0x8a, 0x16, 0x88, 0xb7, 0x00, 0xed, 0xa2, 0xe4, 0xeb, 0x1e, 0xd9, 0x54, 0x8b, 0x32, 0x55, 0x7a,
-	0x1a, 0x64, 0xd3, 0xca, 0x33, 0x18, 0x77, 0x69, 0x25, 0xdf, 0x1c, 0xc6, 0xcf, 0x61, 0x68, 0xd1,
-	0xab, 0xea, 0x29, 0xe4, 0x2c, 0x5c, 0x66, 0xd1, 0xdf, 0xe9, 0x0c, 0x85, 0x80, 0x63, 0xc6, 0xef,
-	0x18, 0xf3, 0x2c, 0xe6, 0xf0, 0x7c, 0xed, 0x90, 0xe2, 0x15, 0xb9, 0x38, 0x4d, 0x8c, 0xff, 0x26,
-	0xe7, 0x95, 0xfa, 0xe3, 0xc9, 0xe6, 0x80, 0x8b, 0x4f, 0xf0, 0x8a, 0x2a, 0xa2, 0x1c, 0x29, 0x53,
-	0x53, 0x79, 0xc3, 0xe6, 0xc1, 0xe6, 0x05, 0x4b, 0x77, 0xd4, 0xd8, 0xff, 0xeb, 0x5d, 0xca, 0xcf,
-	0xb5, 0xf5, 0x80, 0x8b, 0x2f, 0x30, 0x0d, 0xbd, 0xf5, 0x17, 0xed, 0xca, 0xbf, 0x72, 0xe2, 0x68,
-	0x33, 0x61, 0xbd, 0xfe, 0xb8, 0x4d, 0xf0, 0x62, 0x0a, 0x93, 0x75, 0x0f, 0x5f, 0x0a, 0x78, 0x19,
-	0xfa, 0x9a, 0x1e, 0xa5, 0x7b, 0xd8, 0xb6, 0x87, 0x99, 0xe5, 0xf7, 0x5f, 0x2b, 0x9b, 0xf8, 0x7d,
-	0xb9, 0x5d, 0x18, 0xca, 0x22, 0x4b, 0xa9, 0x76, 0x36, 0xe2, 0xa7, 0xdd, 0x96, 0x71, 0xf4, 0xfb,
-	0x26, 0x32, 0xd9, 0x2e, 0xec, 0xe6, 0xda, 0xa2, 0xbb, 0xb6, 0x14, 0x79, 0x2c, 0xfc, 0x4e, 0x7b,
-	0xfd, 0xe8, 0x2f, 0xf2, 0x2f, 0x00, 0x00, 0xff, 0xff, 0xbd, 0xee, 0x38, 0xe6, 0x3a, 0x03, 0x00,
-	0x00,
-}
-
-func init() {
-	xxx_Fieldnames_protoFile_FileDesc.Messages = xxx_Fieldnames_protoFile_MessageDescs[0:1]
-	xxx_Fieldnames_protoFile_MessageDescs[0].Messages = xxx_Fieldnames_protoFile_MessageDescs[1:2]
-	var err error
-	Fieldnames_protoFile, err = prototype.NewFile(&xxx_Fieldnames_protoFile_FileDesc)
-	if err != nil {
-		panic(err)
-	}
-}
+	// 826 bytes of the wire-encoded FileDescriptorProto
+	0x0a, 0x1b, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x2f, 0x66, 0x69, 0x65,
+	0x6c, 0x64, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x19, 0x67,
+	0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x66, 0x69,
+	0x65, 0x6c, 0x64, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x22, 0xb8, 0x05, 0x0a, 0x07, 0x4d, 0x65, 0x73,
+	0x73, 0x61, 0x67, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x6f, 0x6e,
+	0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x4f, 0x6e,
+	0x65, 0x12, 0x1a, 0x0a, 0x08, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x54, 0x77, 0x6f, 0x18, 0x02, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x08, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x54, 0x77, 0x6f, 0x12, 0x1e, 0x0a,
+	0x0a, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x54, 0x68, 0x72, 0x65, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x0a, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x54, 0x68, 0x72, 0x65, 0x65, 0x12, 0x1e, 0x0a,
+	0x0b, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x5f, 0x66, 0x6f, 0x75, 0x72, 0x18, 0x04, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x09, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x46, 0x6f, 0x75, 0x72, 0x12, 0x1e, 0x0a,
+	0x0a, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x0a, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x12, 0x18, 0x0a,
+	0x07, 0x6d, 0x61, 0x72, 0x73, 0x68, 0x61, 0x6c, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07,
+	0x6d, 0x61, 0x72, 0x73, 0x68, 0x61, 0x6c, 0x12, 0x1c, 0x0a, 0x09, 0x75, 0x6e, 0x6d, 0x61, 0x72,
+	0x73, 0x68, 0x61, 0x6c, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x75, 0x6e, 0x6d, 0x61,
+	0x72, 0x73, 0x68, 0x61, 0x6c, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x5f, 0x6d,
+	0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x43, 0x61,
+	0x6d, 0x65, 0x6c, 0x43, 0x61, 0x73, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x43,
+	0x61, 0x6d, 0x65, 0x6c, 0x43, 0x61, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x43, 0x61, 0x6d, 0x65,
+	0x6c, 0x43, 0x61, 0x73, 0x65, 0x5f, 0x18, 0x15, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x43, 0x61,
+	0x6d, 0x65, 0x6c, 0x43, 0x61, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x61, 0x6d, 0x65, 0x6c,
+	0x5f, 0x63, 0x61, 0x73, 0x65, 0x18, 0x16, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x61, 0x6d,
+	0x65, 0x6c, 0x43, 0x61, 0x73, 0x65, 0x12, 0x1e, 0x0a, 0x0b, 0x43, 0x61, 0x6d, 0x65, 0x6c, 0x43,
+	0x61, 0x73, 0x65, 0x5f, 0x5f, 0x18, 0x17, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x43, 0x61, 0x6d,
+	0x65, 0x6c, 0x43, 0x61, 0x73, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x65, 0x74, 0x5f, 0x6e, 0x61,
+	0x6d, 0x65, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x67, 0x65, 0x74, 0x4e, 0x61, 0x6d,
+	0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x0e, 0x4f, 0x6e, 0x65, 0x6f, 0x66, 0x43, 0x6f,
+	0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x41, 0x18, 0x28, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52,
+	0x0e, 0x4f, 0x6e, 0x65, 0x6f, 0x66, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x41, 0x12,
+	0x2c, 0x0a, 0x11, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x6e, 0x6f, 0x5f, 0x63, 0x6f, 0x6e, 0x66,
+	0x6c, 0x69, 0x63, 0x74, 0x18, 0x32, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x0f, 0x6f, 0x6e,
+	0x65, 0x6f, 0x66, 0x4e, 0x6f, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x12, 0x28, 0x0a,
+	0x0e, 0x4f, 0x6e, 0x65, 0x6f, 0x66, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x42, 0x18,
+	0x33, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x0e, 0x4f, 0x6e, 0x65, 0x6f, 0x66, 0x43, 0x6f,
+	0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x42, 0x12, 0x36, 0x0a, 0x16, 0x6f, 0x6e, 0x65, 0x6f, 0x66,
+	0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63,
+	0x74, 0x18, 0x3c, 0x20, 0x01, 0x28, 0x09, 0x48, 0x02, 0x52, 0x14, 0x6f, 0x6e, 0x65, 0x6f, 0x66,
+	0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x1a,
+	0x16, 0x0a, 0x14, 0x4f, 0x6e, 0x65, 0x6f, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x43,
+	0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x42, 0x12, 0x0a, 0x10, 0x6f, 0x6e, 0x65, 0x6f, 0x66,
+	0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x5f, 0x61, 0x42, 0x12, 0x0a, 0x10, 0x6f,
+	0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x5f, 0x62, 0x42,
+	0x12, 0x0a, 0x10, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63,
+	0x74, 0x5f, 0x63, 0x42, 0x45, 0x5a, 0x43, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f,
+	0x6d, 0x2f, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
+	0x66, 0x2f, 0x76, 0x32, 0x2f, 0x63, 0x6d, 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d,
+	0x67, 0x65, 0x6e, 0x2d, 0x67, 0x6f, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x64, 0x61, 0x74, 0x61, 0x2f,
+	0x66, 0x69, 0x65, 0x6c, 0x64, 0x6e, 0x61, 0x6d, 0x65, 0x73,
+}
+
+var fileDescriptor_6bbe3f70febb9403_gzipped = func() []byte {
+	bb := new(bytes.Buffer)
+	zw, _ := gzip.NewWriterLevel(bb, gzip.NoCompression)
+	zw.Write(fileDescriptor_6bbe3f70febb9403)
+	zw.Close()
+	return bb.Bytes()
+}()
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
 var Fieldnames_protoFile protoreflect.FileDescriptor
 
-var xxx_Fieldnames_protoFile_FileDesc = prototype.File{
-	Syntax:  protoreflect.Proto2,
-	Path:    "fieldnames/fieldnames.proto",
-	Package: "goproto.protoc.fieldnames",
-}
-var xxx_Fieldnames_protoFile_MessageTypes = [2]protoimpl.MessageType{
-	{Type: prototype.GoMessage(
-		xxx_Fieldnames_protoFile_MessageDescs[0].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_Message{new(Message)}
-		},
-	)},
-	{Type: prototype.GoMessage(
-		xxx_Fieldnames_protoFile_MessageDescs[1].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_Message_OneofMessageConflict{new(Message_OneofMessageConflict)}
-		},
-	)},
-}
-var xxx_Fieldnames_protoFile_MessageDescs = [2]prototype.Message{
-	{
-		Name: "Message",
-		Fields: []prototype.Field{
-			{
-				Name:        "field_one",
-				Number:      1,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.StringKind,
-				JSONName:    "fieldOne",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "FieldTwo",
-				Number:      2,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.StringKind,
-				JSONName:    "FieldTwo",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "fieldThree",
-				Number:      3,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.StringKind,
-				JSONName:    "fieldThree",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "field__four",
-				Number:      4,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.StringKind,
-				JSONName:    "fieldFour",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "descriptor",
-				Number:      10,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.StringKind,
-				JSONName:    "descriptor",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "marshal",
-				Number:      11,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.StringKind,
-				JSONName:    "marshal",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "unmarshal",
-				Number:      12,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.StringKind,
-				JSONName:    "unmarshal",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "proto_message",
-				Number:      13,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.StringKind,
-				JSONName:    "protoMessage",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "CamelCase",
-				Number:      20,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.StringKind,
-				JSONName:    "CamelCase",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "CamelCase_",
-				Number:      21,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.StringKind,
-				JSONName:    "CamelCase",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "camel_case",
-				Number:      22,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.StringKind,
-				JSONName:    "camelCase",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "CamelCase__",
-				Number:      23,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.StringKind,
-				JSONName:    "CamelCase",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "get_name",
-				Number:      30,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.StringKind,
-				JSONName:    "getName",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "name",
-				Number:      31,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.StringKind,
-				JSONName:    "name",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "OneofConflictA",
-				Number:      40,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.StringKind,
-				JSONName:    "OneofConflictA",
-				OneofName:   "oneof_conflict_a",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "oneof_no_conflict",
-				Number:      50,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.StringKind,
-				JSONName:    "oneofNoConflict",
-				OneofName:   "oneof_conflict_b",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "OneofConflictB",
-				Number:      51,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.StringKind,
-				JSONName:    "OneofConflictB",
-				OneofName:   "oneof_conflict_b",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "oneof_message_conflict",
-				Number:      60,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.StringKind,
-				JSONName:    "oneofMessageConflict",
-				OneofName:   "oneof_conflict_c",
-				IsPacked:    prototype.False,
-			},
-		},
-		Oneofs: []prototype.Oneof{
-			{Name: "oneof_conflict_a"},
-			{Name: "oneof_conflict_b"},
-			{Name: "oneof_conflict_c"},
-		},
-	},
-	{
-		Name: "OneofMessageConflict",
-	},
+var xxx_Fieldnames_protoFile_messageTypes [2]protoimpl.MessageType
+var xxx_Fieldnames_protoFile_goTypes = []interface{}{
+	(*Message)(nil),                      // 0: goproto.protoc.fieldnames.Message
+	(*Message_OneofMessageConflict)(nil), // 1: goproto.protoc.fieldnames.Message.OneofMessageConflict
+}
+var xxx_Fieldnames_protoFile_depIdxs = []int32{}
+
+func init() {
+	var messageTypes [2]protoreflect.MessageType
+	Fieldnames_protoFile = protoimpl.FileBuilder{
+		RawDescriptor:      fileDescriptor_6bbe3f70febb9403,
+		GoTypes:            xxx_Fieldnames_protoFile_goTypes,
+		DependencyIndexes:  xxx_Fieldnames_protoFile_depIdxs,
+		MessageOutputTypes: messageTypes[:],
+	}.Init()
+	messageGoTypes := xxx_Fieldnames_protoFile_goTypes[0:][:2]
+	for i, mt := range messageTypes[:] {
+		xxx_Fieldnames_protoFile_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
+		xxx_Fieldnames_protoFile_messageTypes[i].PBType = mt
+	}
+	xxx_Fieldnames_protoFile_goTypes = nil
+	xxx_Fieldnames_protoFile_depIdxs = nil
 }

+ 68 - 95
cmd/protoc-gen-go/testdata/import_public/a.pb.go

@@ -4,12 +4,14 @@
 package import_public
 
 import (
+	bytes "bytes"
+	gzip "compress/gzip"
 	proto "github.com/golang/protobuf/proto"
 	sub "github.com/golang/protobuf/v2/cmd/protoc-gen-go/testdata/import_public/sub"
 	sub2 "github.com/golang/protobuf/v2/cmd/protoc-gen-go/testdata/import_public/sub2"
 	protoreflect "github.com/golang/protobuf/v2/reflect/protoreflect"
-	prototype "github.com/golang/protobuf/v2/reflect/prototype"
 	protoimpl "github.com/golang/protobuf/v2/runtime/protoimpl"
+	reflect "reflect"
 )
 
 // This is a compile-time assertion to ensure that this generated file
@@ -69,29 +71,14 @@ type Public struct {
 	XXX_sizecache        int32    `json:"-"`
 }
 
-type xxx_Public struct{ m *Public }
-
 func (m *Public) ProtoReflect() protoreflect.Message {
-	return xxx_Public{m}
-}
-func (m xxx_Public) Type() protoreflect.MessageType {
-	return xxx_A_protoFile_MessageTypes[0].Type
-}
-func (m xxx_Public) KnownFields() protoreflect.KnownFields {
-	return xxx_A_protoFile_MessageTypes[0].KnownFieldsOf(m.m)
-}
-func (m xxx_Public) UnknownFields() protoreflect.UnknownFields {
-	return xxx_A_protoFile_MessageTypes[0].UnknownFieldsOf(m.m)
+	return xxx_A_protoFile_messageTypes[0].MessageOf(m)
 }
-func (m xxx_Public) Interface() protoreflect.ProtoMessage {
-	return m.m
-}
-
 func (m *Public) Reset()         { *m = Public{} }
 func (m *Public) String() string { return proto.CompactTextString(m) }
 func (*Public) ProtoMessage()    {}
 func (*Public) Descriptor() ([]byte, []int) {
-	return fileDescriptor_73b7577c95fa6b70, []int{0}
+	return fileDescriptor_73b7577c95fa6b70_gzipped, []int{0}
 }
 
 func (m *Public) XXX_Unmarshal(b []byte) error {
@@ -134,90 +121,76 @@ func (m *Public) GetLocal() *Local {
 }
 
 func init() {
-	proto.RegisterFile("import_public/a.proto", fileDescriptor_73b7577c95fa6b70)
+	proto.RegisterFile("import_public/a.proto", fileDescriptor_73b7577c95fa6b70_gzipped)
 	proto.RegisterType((*Public)(nil), "goproto.protoc.import_public.Public")
 }
 
 var fileDescriptor_73b7577c95fa6b70 = []byte{
-	// 210 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x12, 0xcd, 0xcc, 0x2d, 0xc8,
-	0x2f, 0x2a, 0x89, 0x2f, 0x28, 0x4d, 0xca, 0xc9, 0x4c, 0xd6, 0x4f, 0xd4, 0x2b, 0x28, 0xca, 0x2f,
-	0xc9, 0x17, 0x92, 0x49, 0xcf, 0x07, 0x33, 0x20, 0xdc, 0x64, 0x3d, 0x14, 0x55, 0x52, 0x92, 0xa8,
-	0x9a, 0x8a, 0x4b, 0x93, 0x60, 0x1a, 0xa5, 0xa4, 0x30, 0xa4, 0x8c, 0xe0, 0x72, 0x68, 0x76, 0x25,
-	0x41, 0x84, 0x95, 0x56, 0x32, 0x72, 0xb1, 0x05, 0x80, 0x85, 0x84, 0x0c, 0xb9, 0x18, 0x73, 0x25,
-	0x18, 0x15, 0x18, 0x35, 0xb8, 0x8d, 0x94, 0xf5, 0xf0, 0x39, 0x41, 0xaf, 0xb8, 0x34, 0x49, 0xcf,
-	0x37, 0x88, 0x31, 0x17, 0xa4, 0x25, 0x55, 0x82, 0x49, 0x81, 0x51, 0x83, 0x8f, 0x18, 0x2d, 0xae,
-	0x41, 0x8c, 0xa9, 0x42, 0x96, 0x5c, 0xac, 0x39, 0xf9, 0xc9, 0x89, 0x39, 0x12, 0xcc, 0xc4, 0xd8,
-	0xe4, 0x03, 0x52, 0x1a, 0x04, 0xd1, 0xe1, 0xe4, 0x11, 0xe5, 0x96, 0x9e, 0x59, 0x92, 0x51, 0x9a,
-	0xa4, 0x97, 0x9c, 0x9f, 0xab, 0x9f, 0x9e, 0x9f, 0x93, 0x98, 0x97, 0xae, 0x0f, 0xd6, 0x96, 0x54,
-	0x9a, 0xa6, 0x5f, 0x66, 0xa4, 0x9f, 0x9c, 0x9b, 0x02, 0xe1, 0x27, 0xeb, 0xa6, 0xa7, 0xe6, 0xe9,
-	0xa6, 0xe7, 0xeb, 0x97, 0xa4, 0x16, 0x97, 0xa4, 0x24, 0x96, 0x24, 0xea, 0xa3, 0x18, 0x1b, 0xc0,
-	0x10, 0xc0, 0x18, 0xc0, 0x04, 0x08, 0x00, 0x00, 0xff, 0xff, 0xb3, 0x41, 0x0a, 0x11, 0x7f, 0x01,
-	0x00, 0x00,
-}
-
-func init() {
-	xxx_A_protoFile_FileDesc.Messages = xxx_A_protoFile_MessageDescs[0:1]
-	xxx_A_protoFile_MessageDescs[0].Fields[0].MessageType = protoimpl.X.MessageTypeOf((*sub.M)(nil))
-	xxx_A_protoFile_MessageDescs[0].Fields[1].EnumType = protoimpl.X.EnumTypeOf(sub.E(0))
-	xxx_A_protoFile_MessageDescs[0].Fields[2].MessageType = protoimpl.X.MessageTypeOf((*Local)(nil))
-	var err error
-	A_protoFile, err = prototype.NewFile(&xxx_A_protoFile_FileDesc)
-	if err != nil {
-		panic(err)
-	}
-}
+	// 383 bytes of the wire-encoded FileDescriptorProto
+	0x0a, 0x15, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f,
+	0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1c, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x70,
+	0x75, 0x62, 0x6c, 0x69, 0x63, 0x1a, 0x19, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x70, 0x75,
+	0x62, 0x6c, 0x69, 0x63, 0x2f, 0x73, 0x75, 0x62, 0x2f, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x1a, 0x1a, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f,
+	0x73, 0x75, 0x62, 0x32, 0x2f, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x15, 0x69, 0x6d,
+	0x70, 0x6f, 0x72, 0x74, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f, 0x62, 0x2e, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x22, 0xa9, 0x01, 0x0a, 0x06, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x12, 0x31,
+	0x0a, 0x01, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x67, 0x6f, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x69, 0x6d, 0x70, 0x6f, 0x72,
+	0x74, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x4d, 0x52, 0x01,
+	0x6d, 0x12, 0x31, 0x0a, 0x01, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x23, 0x2e, 0x67,
+	0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x69, 0x6d,
+	0x70, 0x6f, 0x72, 0x74, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x73, 0x75, 0x62, 0x2e,
+	0x45, 0x52, 0x01, 0x65, 0x12, 0x39, 0x0a, 0x05, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x18, 0x03, 0x20,
+	0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x70, 0x75, 0x62, 0x6c,
+	0x69, 0x63, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x52, 0x05, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x42,
+	0x48, 0x5a, 0x46, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x6f,
+	0x6c, 0x61, 0x6e, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x76, 0x32,
+	0x2f, 0x63, 0x6d, 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d,
+	0x67, 0x6f, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x64, 0x61, 0x74, 0x61, 0x2f, 0x69, 0x6d, 0x70, 0x6f,
+	0x72, 0x74, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x50, 0x00, 0x50, 0x01, 0x50, 0x02,
+}
+
+var fileDescriptor_73b7577c95fa6b70_gzipped = func() []byte {
+	bb := new(bytes.Buffer)
+	zw, _ := gzip.NewWriterLevel(bb, gzip.NoCompression)
+	zw.Write(fileDescriptor_73b7577c95fa6b70)
+	zw.Close()
+	return bb.Bytes()
+}()
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
 var A_protoFile protoreflect.FileDescriptor
 
-var xxx_A_protoFile_FileDesc = prototype.File{
-	Syntax:  protoreflect.Proto2,
-	Path:    "import_public/a.proto",
-	Package: "goproto.protoc.import_public",
-	Imports: []protoreflect.FileImport{
-		{FileDescriptor: prototype.PlaceholderFile("import_public/sub/a.proto", "goproto.protoc.import_public.sub"), IsPublic: true},
-		{FileDescriptor: prototype.PlaceholderFile("import_public/sub2/a.proto", "goproto.protoc.import_public.sub2"), IsPublic: true},
-		{FileDescriptor: prototype.PlaceholderFile("import_public/b.proto", "goproto.protoc.import_public"), IsPublic: true},
-	},
-}
-var xxx_A_protoFile_MessageTypes = [1]protoimpl.MessageType{
-	{Type: prototype.GoMessage(
-		xxx_A_protoFile_MessageDescs[0].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_Public{new(Public)}
-		},
-	)},
-}
-var xxx_A_protoFile_MessageDescs = [1]prototype.Message{
-	{
-		Name: "Public",
-		Fields: []prototype.Field{
-			{
-				Name:        "m",
-				Number:      1,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.MessageKind,
-				JSONName:    "m",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "e",
-				Number:      2,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.EnumKind,
-				JSONName:    "e",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "local",
-				Number:      3,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.MessageKind,
-				JSONName:    "local",
-				IsPacked:    prototype.False,
-			},
-		},
-	},
+var xxx_A_protoFile_messageTypes [1]protoimpl.MessageType
+var xxx_A_protoFile_goTypes = []interface{}{
+	(*Public)(nil), // 0: goproto.protoc.import_public.Public
+	(*sub.M)(nil),  // 1: goproto.protoc.import_public.sub.M
+	(sub.E)(0),     // 2: goproto.protoc.import_public.sub.E
+	(*Local)(nil),  // 3: goproto.protoc.import_public.Local
+}
+var xxx_A_protoFile_depIdxs = []int32{
+	1, // goproto.protoc.import_public.Public.m:type_name -> goproto.protoc.import_public.sub.M
+	2, // goproto.protoc.import_public.Public.e:type_name -> goproto.protoc.import_public.sub.E
+	3, // goproto.protoc.import_public.Public.local:type_name -> goproto.protoc.import_public.Local
+}
+
+func init() {
+	var messageTypes [1]protoreflect.MessageType
+	A_protoFile = protoimpl.FileBuilder{
+		RawDescriptor:      fileDescriptor_73b7577c95fa6b70,
+		GoTypes:            xxx_A_protoFile_goTypes,
+		DependencyIndexes:  xxx_A_protoFile_depIdxs,
+		MessageOutputTypes: messageTypes[:],
+	}.Init()
+	messageGoTypes := xxx_A_protoFile_goTypes[0:][:1]
+	for i, mt := range messageTypes[:] {
+		xxx_A_protoFile_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
+		xxx_A_protoFile_messageTypes[i].PBType = mt
+	}
+	xxx_A_protoFile_goTypes = nil
+	xxx_A_protoFile_depIdxs = nil
 }

+ 57 - 79
cmd/protoc-gen-go/testdata/import_public/b.pb.go

@@ -4,11 +4,13 @@
 package import_public
 
 import (
+	bytes "bytes"
+	gzip "compress/gzip"
 	proto "github.com/golang/protobuf/proto"
 	sub "github.com/golang/protobuf/v2/cmd/protoc-gen-go/testdata/import_public/sub"
 	protoreflect "github.com/golang/protobuf/v2/reflect/protoreflect"
-	prototype "github.com/golang/protobuf/v2/reflect/prototype"
 	protoimpl "github.com/golang/protobuf/v2/runtime/protoimpl"
+	reflect "reflect"
 )
 
 // This is a compile-time assertion to ensure that this generated file
@@ -25,29 +27,14 @@ type Local struct {
 	XXX_sizecache        int32    `json:"-"`
 }
 
-type xxx_Local struct{ m *Local }
-
 func (m *Local) ProtoReflect() protoreflect.Message {
-	return xxx_Local{m}
-}
-func (m xxx_Local) Type() protoreflect.MessageType {
-	return xxx_B_protoFile_MessageTypes[0].Type
-}
-func (m xxx_Local) KnownFields() protoreflect.KnownFields {
-	return xxx_B_protoFile_MessageTypes[0].KnownFieldsOf(m.m)
-}
-func (m xxx_Local) UnknownFields() protoreflect.UnknownFields {
-	return xxx_B_protoFile_MessageTypes[0].UnknownFieldsOf(m.m)
+	return xxx_B_protoFile_messageTypes[0].MessageOf(m)
 }
-func (m xxx_Local) Interface() protoreflect.ProtoMessage {
-	return m.m
-}
-
 func (m *Local) Reset()         { *m = Local{} }
 func (m *Local) String() string { return proto.CompactTextString(m) }
 func (*Local) ProtoMessage()    {}
 func (*Local) Descriptor() ([]byte, []int) {
-	return fileDescriptor_84995586b3d09710, []int{0}
+	return fileDescriptor_84995586b3d09710_gzipped, []int{0}
 }
 
 func (m *Local) XXX_Unmarshal(b []byte) error {
@@ -83,76 +70,67 @@ func (m *Local) GetE() sub.E {
 }
 
 func init() {
-	proto.RegisterFile("import_public/b.proto", fileDescriptor_84995586b3d09710)
+	proto.RegisterFile("import_public/b.proto", fileDescriptor_84995586b3d09710_gzipped)
 	proto.RegisterType((*Local)(nil), "goproto.protoc.import_public.Local")
 }
 
 var fileDescriptor_84995586b3d09710 = []byte{
-	// 176 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x12, 0xcd, 0xcc, 0x2d, 0xc8,
-	0x2f, 0x2a, 0x89, 0x2f, 0x28, 0x4d, 0xca, 0xc9, 0x4c, 0xd6, 0x4f, 0xd2, 0x2b, 0x28, 0xca, 0x2f,
-	0xc9, 0x17, 0x92, 0x49, 0xcf, 0x07, 0x33, 0x20, 0xdc, 0x64, 0x3d, 0x14, 0x55, 0x52, 0x92, 0xa8,
-	0x9a, 0x8a, 0x4b, 0x93, 0xf4, 0x13, 0x21, 0x2a, 0x95, 0x72, 0xb9, 0x58, 0x7d, 0xf2, 0x93, 0x13,
-	0x73, 0x84, 0x0c, 0xb9, 0x18, 0x73, 0x25, 0x18, 0x15, 0x18, 0x35, 0xb8, 0x8d, 0x94, 0xf5, 0xf0,
-	0x99, 0xa6, 0x57, 0x5c, 0x9a, 0xa4, 0xe7, 0x1b, 0xc4, 0x98, 0x0b, 0xd2, 0x92, 0x2a, 0xc1, 0xa4,
-	0xc0, 0xa8, 0xc1, 0x47, 0x8c, 0x16, 0xd7, 0x20, 0xc6, 0x54, 0x27, 0x8f, 0x28, 0xb7, 0xf4, 0xcc,
-	0x92, 0x8c, 0xd2, 0x24, 0xbd, 0xe4, 0xfc, 0x5c, 0xfd, 0xf4, 0xfc, 0x9c, 0xc4, 0xbc, 0x74, 0x7d,
-	0xb0, 0x96, 0xa4, 0xd2, 0x34, 0xfd, 0x32, 0x23, 0xfd, 0xe4, 0xdc, 0x14, 0x08, 0x3f, 0x59, 0x37,
-	0x3d, 0x35, 0x4f, 0x37, 0x3d, 0x5f, 0xbf, 0x24, 0xb5, 0xb8, 0x24, 0x25, 0xb1, 0x24, 0x51, 0x1f,
-	0xc5, 0x48, 0x40, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0x34, 0xb9, 0xda, 0x09, 0x01, 0x00, 0x00,
-}
-
-func init() {
-	xxx_B_protoFile_FileDesc.Messages = xxx_B_protoFile_MessageDescs[0:1]
-	xxx_B_protoFile_MessageDescs[0].Fields[0].MessageType = protoimpl.X.MessageTypeOf((*sub.M)(nil))
-	xxx_B_protoFile_MessageDescs[0].Fields[1].EnumType = protoimpl.X.EnumTypeOf(sub.E(0))
-	var err error
-	B_protoFile, err = prototype.NewFile(&xxx_B_protoFile_FileDesc)
-	if err != nil {
-		panic(err)
-	}
-}
+	// 265 bytes of the wire-encoded FileDescriptorProto
+	0x0a, 0x15, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f,
+	0x62, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1c, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x70,
+	0x75, 0x62, 0x6c, 0x69, 0x63, 0x1a, 0x19, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x70, 0x75,
+	0x62, 0x6c, 0x69, 0x63, 0x2f, 0x73, 0x75, 0x62, 0x2f, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x22, 0x6d, 0x0a, 0x05, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x12, 0x31, 0x0a, 0x01, 0x6d, 0x18, 0x01,
+	0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x70, 0x75, 0x62,
+	0x6c, 0x69, 0x63, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x4d, 0x52, 0x01, 0x6d, 0x12, 0x31, 0x0a, 0x01,
+	0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x23, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x5f,
+	0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x45, 0x52, 0x01, 0x65, 0x42,
+	0x48, 0x5a, 0x46, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x6f,
+	0x6c, 0x61, 0x6e, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x76, 0x32,
+	0x2f, 0x63, 0x6d, 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d,
+	0x67, 0x6f, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x64, 0x61, 0x74, 0x61, 0x2f, 0x69, 0x6d, 0x70, 0x6f,
+	0x72, 0x74, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63,
+}
+
+var fileDescriptor_84995586b3d09710_gzipped = func() []byte {
+	bb := new(bytes.Buffer)
+	zw, _ := gzip.NewWriterLevel(bb, gzip.NoCompression)
+	zw.Write(fileDescriptor_84995586b3d09710)
+	zw.Close()
+	return bb.Bytes()
+}()
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
 var B_protoFile protoreflect.FileDescriptor
 
-var xxx_B_protoFile_FileDesc = prototype.File{
-	Syntax:  protoreflect.Proto2,
-	Path:    "import_public/b.proto",
-	Package: "goproto.protoc.import_public",
-	Imports: []protoreflect.FileImport{
-		{FileDescriptor: prototype.PlaceholderFile("import_public/sub/a.proto", "goproto.protoc.import_public.sub")},
-	},
+var xxx_B_protoFile_messageTypes [1]protoimpl.MessageType
+var xxx_B_protoFile_goTypes = []interface{}{
+	(*Local)(nil), // 0: goproto.protoc.import_public.Local
+	(*sub.M)(nil), // 1: goproto.protoc.import_public.sub.M
+	(sub.E)(0),    // 2: goproto.protoc.import_public.sub.E
 }
-var xxx_B_protoFile_MessageTypes = [1]protoimpl.MessageType{
-	{Type: prototype.GoMessage(
-		xxx_B_protoFile_MessageDescs[0].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_Local{new(Local)}
-		},
-	)},
+var xxx_B_protoFile_depIdxs = []int32{
+	1, // goproto.protoc.import_public.Local.m:type_name -> goproto.protoc.import_public.sub.M
+	2, // goproto.protoc.import_public.Local.e:type_name -> goproto.protoc.import_public.sub.E
 }
-var xxx_B_protoFile_MessageDescs = [1]prototype.Message{
-	{
-		Name: "Local",
-		Fields: []prototype.Field{
-			{
-				Name:        "m",
-				Number:      1,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.MessageKind,
-				JSONName:    "m",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "e",
-				Number:      2,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.EnumKind,
-				JSONName:    "e",
-				IsPacked:    prototype.False,
-			},
-		},
-	},
+
+func init() {
+	var messageTypes [1]protoreflect.MessageType
+	B_protoFile = protoimpl.FileBuilder{
+		RawDescriptor:      fileDescriptor_84995586b3d09710,
+		GoTypes:            xxx_B_protoFile_goTypes,
+		DependencyIndexes:  xxx_B_protoFile_depIdxs,
+		MessageOutputTypes: messageTypes[:],
+	}.Init()
+	messageGoTypes := xxx_B_protoFile_goTypes[0:][:1]
+	for i, mt := range messageTypes[:] {
+		xxx_B_protoFile_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
+		xxx_B_protoFile_messageTypes[i].PBType = mt
+	}
+	xxx_B_protoFile_goTypes = nil
+	xxx_B_protoFile_depIdxs = nil
 }

+ 104 - 236
cmd/protoc-gen-go/testdata/import_public/sub/a.pb.go

@@ -4,12 +4,14 @@
 package sub
 
 import (
+	bytes "bytes"
+	gzip "compress/gzip"
 	proto "github.com/golang/protobuf/proto"
 	sub2 "github.com/golang/protobuf/v2/cmd/protoc-gen-go/testdata/import_public/sub2"
 	protoreflect "github.com/golang/protobuf/v2/reflect/protoreflect"
-	prototype "github.com/golang/protobuf/v2/reflect/prototype"
 	protoimpl "github.com/golang/protobuf/v2/runtime/protoimpl"
 	math "math"
+	reflect "reflect"
 )
 
 // This is a compile-time assertion to ensure that this generated file
@@ -29,7 +31,7 @@ const (
 )
 
 func (e E) Type() protoreflect.EnumType {
-	return xxx_A_protoFile_EnumTypes[0]
+	return xxx_A_protoFile_enumTypes[0]
 }
 func (e E) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -63,7 +65,7 @@ func (x *E) UnmarshalJSON(data []byte) error {
 }
 
 func (E) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_382f7805394b5c4e, []int{0}
+	return fileDescriptor_382f7805394b5c4e_gzipped, []int{0}
 }
 
 type M_Subenum int32
@@ -73,7 +75,7 @@ const (
 )
 
 func (e M_Subenum) Type() protoreflect.EnumType {
-	return xxx_A_protoFile_EnumTypes[1]
+	return xxx_A_protoFile_enumTypes[1]
 }
 func (e M_Subenum) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -107,7 +109,7 @@ func (x *M_Subenum) UnmarshalJSON(data []byte) error {
 }
 
 func (M_Subenum) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_382f7805394b5c4e, []int{0, 0}
+	return fileDescriptor_382f7805394b5c4e_gzipped, []int{0, 0}
 }
 
 type M_Submessage_Submessage_Subenum int32
@@ -117,7 +119,7 @@ const (
 )
 
 func (e M_Submessage_Submessage_Subenum) Type() protoreflect.EnumType {
-	return xxx_A_protoFile_EnumTypes[2]
+	return xxx_A_protoFile_enumTypes[2]
 }
 func (e M_Submessage_Submessage_Subenum) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -151,7 +153,7 @@ func (x *M_Submessage_Submessage_Subenum) UnmarshalJSON(data []byte) error {
 }
 
 func (M_Submessage_Submessage_Subenum) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_382f7805394b5c4e, []int{0, 0, 0}
+	return fileDescriptor_382f7805394b5c4e_gzipped, []int{0, 0, 0}
 }
 
 type M struct {
@@ -170,29 +172,14 @@ type M struct {
 	XXX_sizecache                int32  `json:"-"`
 }
 
-type xxx_M struct{ m *M }
-
 func (m *M) ProtoReflect() protoreflect.Message {
-	return xxx_M{m}
-}
-func (m xxx_M) Type() protoreflect.MessageType {
-	return xxx_A_protoFile_MessageTypes[0].Type
-}
-func (m xxx_M) KnownFields() protoreflect.KnownFields {
-	return xxx_A_protoFile_MessageTypes[0].KnownFieldsOf(m.m)
+	return xxx_A_protoFile_messageTypes[0].MessageOf(m)
 }
-func (m xxx_M) UnknownFields() protoreflect.UnknownFields {
-	return xxx_A_protoFile_MessageTypes[0].UnknownFieldsOf(m.m)
-}
-func (m xxx_M) Interface() protoreflect.ProtoMessage {
-	return m.m
-}
-
 func (m *M) Reset()         { *m = M{} }
 func (m *M) String() string { return proto.CompactTextString(m) }
 func (*M) ProtoMessage()    {}
 func (*M) Descriptor() ([]byte, []int) {
-	return fileDescriptor_382f7805394b5c4e, []int{0}
+	return fileDescriptor_382f7805394b5c4e_gzipped, []int{0}
 }
 
 var extRange_M = []proto.ExtensionRange{
@@ -309,29 +296,14 @@ type M_Submessage struct {
 	XXX_sizecache        int32                               `json:"-"`
 }
 
-type xxx_M_Submessage struct{ m *M_Submessage }
-
 func (m *M_Submessage) ProtoReflect() protoreflect.Message {
-	return xxx_M_Submessage{m}
-}
-func (m xxx_M_Submessage) Type() protoreflect.MessageType {
-	return xxx_A_protoFile_MessageTypes[1].Type
-}
-func (m xxx_M_Submessage) KnownFields() protoreflect.KnownFields {
-	return xxx_A_protoFile_MessageTypes[1].KnownFieldsOf(m.m)
+	return xxx_A_protoFile_messageTypes[1].MessageOf(m)
 }
-func (m xxx_M_Submessage) UnknownFields() protoreflect.UnknownFields {
-	return xxx_A_protoFile_MessageTypes[1].UnknownFieldsOf(m.m)
-}
-func (m xxx_M_Submessage) Interface() protoreflect.ProtoMessage {
-	return m.m
-}
-
 func (m *M_Submessage) Reset()         { *m = M_Submessage{} }
 func (m *M_Submessage) String() string { return proto.CompactTextString(m) }
 func (*M_Submessage) ProtoMessage()    {}
 func (*M_Submessage) Descriptor() ([]byte, []int) {
-	return fileDescriptor_382f7805394b5c4e, []int{0, 0}
+	return fileDescriptor_382f7805394b5c4e_gzipped, []int{0, 0}
 }
 
 func (m *M_Submessage) XXX_Unmarshal(b []byte) error {
@@ -407,7 +379,7 @@ var E_ExtensionField = &proto.ExtensionDesc{
 }
 
 func init() {
-	proto.RegisterFile("import_public/sub/a.proto", fileDescriptor_382f7805394b5c4e)
+	proto.RegisterFile("import_public/sub/a.proto", fileDescriptor_382f7805394b5c4e_gzipped)
 	proto.RegisterEnum("goproto.protoc.import_public.sub.E", E_name, E_value)
 	proto.RegisterEnum("goproto.protoc.import_public.sub.M_Subenum", M_Subenum_name, M_Subenum_value)
 	proto.RegisterEnum("goproto.protoc.import_public.sub.M_Submessage_Submessage_Subenum", M_Submessage_Submessage_Subenum_name, M_Submessage_Submessage_Subenum_value)
@@ -417,203 +389,99 @@ func init() {
 }
 
 var fileDescriptor_382f7805394b5c4e = []byte{
-	// 410 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x92, 0xcd, 0x6e, 0x9b, 0x40,
-	0x14, 0x85, 0x73, 0x4d, 0x7e, 0xdc, 0x9b, 0xa6, 0x4d, 0x46, 0x75, 0x45, 0xbd, 0xa2, 0x6e, 0x17,
-	0x28, 0x55, 0x18, 0x89, 0x22, 0x16, 0xde, 0xd5, 0x92, 0xfb, 0xa7, 0xa0, 0x54, 0xa0, 0x6e, 0xb2,
-	0x41, 0x0c, 0x0c, 0x14, 0xc9, 0xcc, 0x58, 0x99, 0x99, 0xaa, 0x4b, 0x3f, 0x55, 0x5f, 0xa0, 0x2f,
-	0x56, 0x01, 0x71, 0xec, 0x28, 0xae, 0x9a, 0x1d, 0xf7, 0xdc, 0xf3, 0x9d, 0x83, 0xb8, 0xe0, 0xab,
-	0xba, 0x59, 0xca, 0x1b, 0x9d, 0x2e, 0x0d, 0x5b, 0xd4, 0x39, 0x55, 0x86, 0xd1, 0xcc, 0x5b, 0xde,
-	0x48, 0x2d, 0x89, 0x53, 0xc9, 0xee, 0xa1, 0x1f, 0x73, 0xef, 0x9e, 0xd3, 0x53, 0x86, 0x8d, 0x77,
-	0xc0, 0xac, 0x77, 0x8f, 0xc7, 0x0f, 0x56, 0xfe, 0x3a, 0x78, 0xf2, 0xdb, 0x42, 0x88, 0x48, 0x80,
-	0x83, 0xc6, 0xb7, 0xc1, 0x01, 0xf7, 0xd8, 0x7f, 0xeb, 0xfd, 0xaf, 0xcb, 0x8b, 0xfc, 0x78, 0xd0,
-	0xf8, 0x64, 0x84, 0xa0, 0xec, 0x7d, 0x07, 0xdc, 0x27, 0xd3, 0xa3, 0x82, 0x97, 0x99, 0x59, 0xe8,
-	0x18, 0x54, 0x2b, 0x33, 0xfb, 0xc0, 0x01, 0xf7, 0xe9, 0x96, 0xcc, 0xc8, 0x19, 0x42, 0x69, 0x1f,
-	0x3a, 0xe0, 0xc2, 0xd4, 0x12, 0x99, 0x88, 0xa1, 0x24, 0xaf, 0xf1, 0x58, 0x0a, 0x2e, 0xcb, 0xb4,
-	0x16, 0xfa, 0xbd, 0x6f, 0x0f, 0x1c, 0x70, 0x0f, 0x3e, 0xef, 0xc5, 0xd8, 0x89, 0x5f, 0x5a, 0xed,
-	0x9e, 0x25, 0x0c, 0x6c, 0xcb, 0x01, 0xd7, 0xda, 0xb6, 0x84, 0xc1, 0xf8, 0x0f, 0x20, 0x26, 0x86,
-	0x35, 0x5c, 0xa9, 0xac, 0xe2, 0x24, 0xc4, 0x97, 0xea, 0x6e, 0x4a, 0xb7, 0xf3, 0xe1, 0x36, 0xff,
-	0xc5, 0x66, 0x7f, 0xb5, 0x69, 0xfa, 0x07, 0x17, 0x06, 0xdd, 0x7b, 0x59, 0xbb, 0xb9, 0x30, 0x98,
-	0xbc, 0x43, 0xb2, 0x69, 0x4f, 0x13, 0xc3, 0xb8, 0x30, 0x0d, 0x19, 0xe1, 0x59, 0x94, 0x26, 0xdf,
-	0x67, 0xd1, 0x3c, 0x49, 0x3e, 0x7c, 0x9a, 0xa7, 0xd7, 0xf3, 0xf8, 0xea, 0x74, 0x6f, 0x66, 0xef,
-	0x28, 0x29, 0x6b, 0xbe, 0x28, 0x26, 0x23, 0x3c, 0x5a, 0xb3, 0x88, 0x87, 0xd1, 0x2d, 0x70, 0x3e,
-	0x1c, 0x16, 0xa7, 0xab, 0xd5, 0x6a, 0x35, 0x98, 0x9d, 0xac, 0xbf, 0x44, 0xe7, 0x3f, 0x3f, 0x41,
-	0x98, 0x93, 0x21, 0xee, 0xf7, 0xbe, 0xe9, 0x25, 0x3e, 0xe7, 0xbf, 0x34, 0x17, 0xaa, 0x96, 0xa2,
-	0x77, 0x90, 0x37, 0x8f, 0x38, 0xa4, 0x5d, 0xb4, 0xe7, 0x8b, 0x9f, 0xdd, 0xb1, 0x1f, 0x5b, 0x74,
-	0x76, 0x79, 0xfd, 0xb5, 0xaa, 0xf5, 0x0f, 0xc3, 0xbc, 0x5c, 0x36, 0xb4, 0x92, 0x8b, 0x4c, 0x54,
-	0xb4, 0x4b, 0x61, 0xa6, 0xa4, 0x3f, 0x7d, 0x9a, 0x37, 0x45, 0x3f, 0xe7, 0x17, 0x15, 0x17, 0x17,
-	0x95, 0xa4, 0x9a, 0x2b, 0x5d, 0x64, 0x3a, 0xa3, 0x0f, 0x7e, 0xb6, 0x6f, 0xf0, 0x37, 0x00, 0x00,
-	0xff, 0xff, 0x19, 0x27, 0xa9, 0x12, 0xda, 0x02, 0x00, 0x00,
-}
-
-func init() {
-	xxx_A_protoFile_FileDesc.Enums = xxx_A_protoFile_EnumDescs[0:1]
-	xxx_A_protoFile_FileDesc.Messages = xxx_A_protoFile_MessageDescs[0:1]
-	xxx_A_protoFile_MessageDescs[0].Enums = xxx_A_protoFile_EnumDescs[1:2]
-	xxx_A_protoFile_MessageDescs[0].Messages = xxx_A_protoFile_MessageDescs[1:2]
-	xxx_A_protoFile_MessageDescs[1].Enums = xxx_A_protoFile_EnumDescs[2:3]
-	xxx_A_protoFile_MessageDescs[0].Fields[0].MessageType = protoimpl.X.MessageTypeOf((*M2)(nil))
-	var err error
-	A_protoFile, err = prototype.NewFile(&xxx_A_protoFile_FileDesc)
-	if err != nil {
-		panic(err)
-	}
-}
+	// 730 bytes of the wire-encoded FileDescriptorProto
+	0x0a, 0x19, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f,
+	0x73, 0x75, 0x62, 0x2f, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x20, 0x67, 0x6f, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x69, 0x6d, 0x70, 0x6f,
+	0x72, 0x74, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x73, 0x75, 0x62, 0x1a, 0x19, 0x69,
+	0x6d, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f, 0x73, 0x75, 0x62,
+	0x2f, 0x62, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1a, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74,
+	0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f, 0x73, 0x75, 0x62, 0x32, 0x2f, 0x61, 0x2e, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x22, 0xb6, 0x03, 0x0a, 0x01, 0x4d, 0x12, 0x34, 0x0a, 0x02, 0x6d, 0x32,
+	0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x70,
+	0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x4d, 0x32, 0x52, 0x02, 0x6d, 0x32,
+	0x12, 0x15, 0x0a, 0x01, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x3a, 0x07, 0x64, 0x65, 0x66,
+	0x61, 0x75, 0x6c, 0x74, 0x52, 0x01, 0x73, 0x12, 0x15, 0x0a, 0x01, 0x62, 0x18, 0x05, 0x20, 0x01,
+	0x28, 0x0c, 0x3a, 0x07, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x01, 0x62, 0x12, 0x11,
+	0x0a, 0x01, 0x66, 0x18, 0x06, 0x20, 0x01, 0x28, 0x01, 0x3a, 0x03, 0x6e, 0x61, 0x6e, 0x52, 0x01,
+	0x66, 0x12, 0x21, 0x0a, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32,
+	0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x48, 0x00, 0x52, 0x0a, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x49,
+	0x6e, 0x74, 0x33, 0x32, 0x12, 0x21, 0x0a, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x69, 0x6e,
+	0x74, 0x36, 0x34, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x0a, 0x6f, 0x6e, 0x65,
+	0x6f, 0x66, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x1a, 0xc3, 0x01, 0x0a, 0x0a, 0x53, 0x75, 0x62, 0x6d,
+	0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x36, 0x0a, 0x16, 0x73, 0x75, 0x62, 0x6d, 0x65, 0x73,
+	0x73, 0x61, 0x67, 0x65, 0x5f, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32,
+	0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x48, 0x00, 0x52, 0x14, 0x73, 0x75, 0x62, 0x6d, 0x65, 0x73,
+	0x73, 0x61, 0x67, 0x65, 0x4f, 0x6e, 0x65, 0x6f, 0x66, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x36,
+	0x0a, 0x16, 0x73, 0x75, 0x62, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x6f, 0x6e, 0x65,
+	0x6f, 0x66, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00,
+	0x52, 0x14, 0x73, 0x75, 0x62, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4f, 0x6e, 0x65, 0x6f,
+	0x66, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x22, 0x2b, 0x0a, 0x12, 0x53, 0x75, 0x62, 0x6d, 0x65, 0x73,
+	0x73, 0x61, 0x67, 0x65, 0x5f, 0x53, 0x75, 0x62, 0x65, 0x6e, 0x75, 0x6d, 0x12, 0x15, 0x0a, 0x11,
+	0x4d, 0x5f, 0x53, 0x55, 0x42, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x5f, 0x5a, 0x45, 0x52,
+	0x4f, 0x10, 0x00, 0x42, 0x18, 0x0a, 0x16, 0x73, 0x75, 0x62, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67,
+	0x65, 0x5f, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x22, 0x15, 0x0a,
+	0x07, 0x53, 0x75, 0x62, 0x65, 0x6e, 0x75, 0x6d, 0x12, 0x0a, 0x0a, 0x06, 0x4d, 0x5f, 0x5a, 0x45,
+	0x52, 0x4f, 0x10, 0x00, 0x2a, 0x08, 0x08, 0x64, 0x10, 0x80, 0x80, 0x80, 0x80, 0x02, 0x42, 0x0d,
+	0x0a, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x2a, 0x0d, 0x0a,
+	0x01, 0x45, 0x12, 0x08, 0x0a, 0x04, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x3a, 0x4c, 0x0a, 0x0f,
+	0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x12,
+	0x23, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63,
+	0x2e, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x73,
+	0x75, 0x62, 0x2e, 0x4d, 0x18, 0x64, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x65, 0x78, 0x74, 0x65,
+	0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x42, 0x4c, 0x5a, 0x4a, 0x67, 0x69,
+	0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2f,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x76, 0x32, 0x2f, 0x63, 0x6d, 0x64, 0x2f,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x67, 0x6f, 0x2f, 0x74, 0x65,
+	0x73, 0x74, 0x64, 0x61, 0x74, 0x61, 0x2f, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x70, 0x75,
+	0x62, 0x6c, 0x69, 0x63, 0x2f, 0x73, 0x75, 0x62, 0x50, 0x01,
+}
+
+var fileDescriptor_382f7805394b5c4e_gzipped = func() []byte {
+	bb := new(bytes.Buffer)
+	zw, _ := gzip.NewWriterLevel(bb, gzip.NoCompression)
+	zw.Write(fileDescriptor_382f7805394b5c4e)
+	zw.Close()
+	return bb.Bytes()
+}()
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
 var A_protoFile protoreflect.FileDescriptor
 
-var xxx_A_protoFile_FileDesc = prototype.File{
-	Syntax:  protoreflect.Proto2,
-	Path:    "import_public/sub/a.proto",
-	Package: "goproto.protoc.import_public.sub",
-	Imports: []protoreflect.FileImport{
-		{FileDescriptor: prototype.PlaceholderFile("import_public/sub/b.proto", "goproto.protoc.import_public.sub")},
-		{FileDescriptor: prototype.PlaceholderFile("import_public/sub2/a.proto", "goproto.protoc.import_public.sub2"), IsPublic: true},
-	},
-}
-var xxx_A_protoFile_EnumTypes = [3]protoreflect.EnumType{
-	prototype.GoEnum(
-		xxx_A_protoFile_EnumDescs[0].Reference(),
-		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
-			return E(n)
-		},
-	),
-	prototype.GoEnum(
-		xxx_A_protoFile_EnumDescs[1].Reference(),
-		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
-			return M_Subenum(n)
-		},
-	),
-	prototype.GoEnum(
-		xxx_A_protoFile_EnumDescs[2].Reference(),
-		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
-			return M_Submessage_Submessage_Subenum(n)
-		},
-	),
-}
-var xxx_A_protoFile_EnumDescs = [3]prototype.Enum{
-	{
-		Name: "E",
-		Values: []prototype.EnumValue{
-			{Name: "ZERO", Number: 0},
-		},
-	},
-	{
-		Name: "Subenum",
-		Values: []prototype.EnumValue{
-			{Name: "M_ZERO", Number: 0},
-		},
-	},
-	{
-		Name: "Submessage_Subenum",
-		Values: []prototype.EnumValue{
-			{Name: "M_SUBMESSAGE_ZERO", Number: 0},
-		},
-	},
-}
-var xxx_A_protoFile_MessageTypes = [2]protoimpl.MessageType{
-	{Type: prototype.GoMessage(
-		xxx_A_protoFile_MessageDescs[0].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_M{new(M)}
-		},
-	)},
-	{Type: prototype.GoMessage(
-		xxx_A_protoFile_MessageDescs[1].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_M_Submessage{new(M_Submessage)}
-		},
-	)},
-}
-var xxx_A_protoFile_MessageDescs = [2]prototype.Message{
-	{
-		Name: "M",
-		Fields: []prototype.Field{
-			{
-				Name:        "m2",
-				Number:      1,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.MessageKind,
-				JSONName:    "m2",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "s",
-				Number:      4,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.StringKind,
-				JSONName:    "s",
-				Default:     protoreflect.ValueOf(string("default")),
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "b",
-				Number:      5,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.BytesKind,
-				JSONName:    "b",
-				Default:     protoreflect.ValueOf(("default")),
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "f",
-				Number:      6,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.DoubleKind,
-				JSONName:    "f",
-				Default:     protoreflect.ValueOf(float64(math.NaN())),
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "oneof_int32",
-				Number:      2,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Int32Kind,
-				JSONName:    "oneofInt32",
-				OneofName:   "oneof_field",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "oneof_int64",
-				Number:      3,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Int64Kind,
-				JSONName:    "oneofInt64",
-				OneofName:   "oneof_field",
-				IsPacked:    prototype.False,
-			},
-		},
-		Oneofs: []prototype.Oneof{
-			{Name: "oneof_field"},
-		},
-		ExtensionRanges: [][2]protoreflect.FieldNumber{{100, 536870912}},
-	},
-	{
-		Name: "Submessage",
-		Fields: []prototype.Field{
-			{
-				Name:        "submessage_oneof_int32",
-				Number:      1,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Int32Kind,
-				JSONName:    "submessageOneofInt32",
-				OneofName:   "submessage_oneof_field",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "submessage_oneof_int64",
-				Number:      2,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Int64Kind,
-				JSONName:    "submessageOneofInt64",
-				OneofName:   "submessage_oneof_field",
-				IsPacked:    prototype.False,
-			},
-		},
-		Oneofs: []prototype.Oneof{
-			{Name: "submessage_oneof_field"},
-		},
-	},
+var xxx_A_protoFile_enumTypes [3]protoreflect.EnumType
+var xxx_A_protoFile_messageTypes [2]protoimpl.MessageType
+var xxx_A_protoFile_goTypes = []interface{}{
+	(E)(0),                               // 0: goproto.protoc.import_public.sub.E
+	(M_Subenum)(0),                       // 1: goproto.protoc.import_public.sub.M.Subenum
+	(M_Submessage_Submessage_Subenum)(0), // 2: goproto.protoc.import_public.sub.M.Submessage.Submessage_Subenum
+	(*M)(nil),                            // 3: goproto.protoc.import_public.sub.M
+	(*M_Submessage)(nil),                 // 4: goproto.protoc.import_public.sub.M.Submessage
+	(*M2)(nil),                           // 5: goproto.protoc.import_public.sub.M2
+}
+var xxx_A_protoFile_depIdxs = []int32{
+	3, // goproto.protoc.import_public.sub.extension_field:extendee -> goproto.protoc.import_public.sub.M
+	5, // goproto.protoc.import_public.sub.M.m2:type_name -> goproto.protoc.import_public.sub.M2
+}
+
+func init() {
+	var messageTypes [2]protoreflect.MessageType
+	var extensionTypes [1]protoreflect.ExtensionType
+	A_protoFile = protoimpl.FileBuilder{
+		RawDescriptor:        fileDescriptor_382f7805394b5c4e,
+		GoTypes:              xxx_A_protoFile_goTypes,
+		DependencyIndexes:    xxx_A_protoFile_depIdxs,
+		EnumOutputTypes:      xxx_A_protoFile_enumTypes[:],
+		MessageOutputTypes:   messageTypes[:],
+		ExtensionOutputTypes: extensionTypes[:],
+	}.Init()
+	messageGoTypes := xxx_A_protoFile_goTypes[3:][:2]
+	for i, mt := range messageTypes[:] {
+		xxx_A_protoFile_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
+		xxx_A_protoFile_messageTypes[i].PBType = mt
+	}
+	E_ExtensionField.Type = extensionTypes[0]
+	xxx_A_protoFile_goTypes = nil
+	xxx_A_protoFile_depIdxs = nil
 }

+ 44 - 53
cmd/protoc-gen-go/testdata/import_public/sub/b.pb.go

@@ -4,10 +4,12 @@
 package sub
 
 import (
+	bytes "bytes"
+	gzip "compress/gzip"
 	proto "github.com/golang/protobuf/proto"
 	protoreflect "github.com/golang/protobuf/v2/reflect/protoreflect"
-	prototype "github.com/golang/protobuf/v2/reflect/prototype"
 	protoimpl "github.com/golang/protobuf/v2/runtime/protoimpl"
+	reflect "reflect"
 )
 
 // This is a compile-time assertion to ensure that this generated file
@@ -22,29 +24,14 @@ type M2 struct {
 	XXX_sizecache        int32    `json:"-"`
 }
 
-type xxx_M2 struct{ m *M2 }
-
 func (m *M2) ProtoReflect() protoreflect.Message {
-	return xxx_M2{m}
-}
-func (m xxx_M2) Type() protoreflect.MessageType {
-	return xxx_B_protoFile_MessageTypes[0].Type
-}
-func (m xxx_M2) KnownFields() protoreflect.KnownFields {
-	return xxx_B_protoFile_MessageTypes[0].KnownFieldsOf(m.m)
-}
-func (m xxx_M2) UnknownFields() protoreflect.UnknownFields {
-	return xxx_B_protoFile_MessageTypes[0].UnknownFieldsOf(m.m)
+	return xxx_B_protoFile_messageTypes[0].MessageOf(m)
 }
-func (m xxx_M2) Interface() protoreflect.ProtoMessage {
-	return m.m
-}
-
 func (m *M2) Reset()         { *m = M2{} }
 func (m *M2) String() string { return proto.CompactTextString(m) }
 func (*M2) ProtoMessage()    {}
 func (*M2) Descriptor() ([]byte, []int) {
-	return fileDescriptor_fc66afda3d7c2232, []int{0}
+	return fileDescriptor_fc66afda3d7c2232_gzipped, []int{0}
 }
 
 func (m *M2) XXX_Unmarshal(b []byte) error {
@@ -66,51 +53,55 @@ func (m *M2) XXX_DiscardUnknown() {
 var xxx_messageInfo_M2 proto.InternalMessageInfo
 
 func init() {
-	proto.RegisterFile("import_public/sub/b.proto", fileDescriptor_fc66afda3d7c2232)
+	proto.RegisterFile("import_public/sub/b.proto", fileDescriptor_fc66afda3d7c2232_gzipped)
 	proto.RegisterType((*M2)(nil), "goproto.protoc.import_public.sub.M2")
 }
 
 var fileDescriptor_fc66afda3d7c2232 = []byte{
-	// 129 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0xcc, 0xcc, 0x2d, 0xc8,
-	0x2f, 0x2a, 0x89, 0x2f, 0x28, 0x4d, 0xca, 0xc9, 0x4c, 0xd6, 0x2f, 0x2e, 0x4d, 0xd2, 0x4f, 0xd2,
-	0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x52, 0x48, 0xcf, 0x07, 0x33, 0x20, 0xdc, 0x64, 0x3d, 0x14,
-	0x95, 0x7a, 0xc5, 0xa5, 0x49, 0x4a, 0x2c, 0x5c, 0x4c, 0xbe, 0x46, 0x4e, 0x3e, 0x51, 0x5e, 0xe9,
-	0x99, 0x25, 0x19, 0xa5, 0x49, 0x7a, 0xc9, 0xf9, 0xb9, 0xfa, 0xe9, 0xf9, 0x39, 0x89, 0x79, 0xe9,
-	0xfa, 0x60, 0x3d, 0x49, 0xa5, 0x69, 0xfa, 0x65, 0x46, 0xfa, 0xc9, 0xb9, 0x29, 0x10, 0x7e, 0xb2,
-	0x6e, 0x7a, 0x6a, 0x9e, 0x6e, 0x7a, 0xbe, 0x7e, 0x49, 0x6a, 0x71, 0x49, 0x4a, 0x62, 0x49, 0xa2,
-	0x3e, 0x86, 0xed, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0xc7, 0x2d, 0x0b, 0x52, 0x91, 0x00, 0x00,
-	0x00,
+	// 145 bytes of the wire-encoded FileDescriptorProto
+	0x0a, 0x19, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f,
+	0x73, 0x75, 0x62, 0x2f, 0x62, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x20, 0x67, 0x6f, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x69, 0x6d, 0x70, 0x6f,
+	0x72, 0x74, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x73, 0x75, 0x62, 0x22, 0x04, 0x0a,
+	0x02, 0x4d, 0x32, 0x42, 0x4c, 0x5a, 0x4a, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f,
+	0x6d, 0x2f, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
+	0x66, 0x2f, 0x76, 0x32, 0x2f, 0x63, 0x6d, 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d,
+	0x67, 0x65, 0x6e, 0x2d, 0x67, 0x6f, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x64, 0x61, 0x74, 0x61, 0x2f,
+	0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f, 0x73, 0x75,
+	0x62,
 }
 
-func init() {
-	xxx_B_protoFile_FileDesc.Messages = xxx_B_protoFile_MessageDescs[0:1]
-	var err error
-	B_protoFile, err = prototype.NewFile(&xxx_B_protoFile_FileDesc)
-	if err != nil {
-		panic(err)
-	}
-}
+var fileDescriptor_fc66afda3d7c2232_gzipped = func() []byte {
+	bb := new(bytes.Buffer)
+	zw, _ := gzip.NewWriterLevel(bb, gzip.NoCompression)
+	zw.Write(fileDescriptor_fc66afda3d7c2232)
+	zw.Close()
+	return bb.Bytes()
+}()
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
 var B_protoFile protoreflect.FileDescriptor
 
-var xxx_B_protoFile_FileDesc = prototype.File{
-	Syntax:  protoreflect.Proto2,
-	Path:    "import_public/sub/b.proto",
-	Package: "goproto.protoc.import_public.sub",
-}
-var xxx_B_protoFile_MessageTypes = [1]protoimpl.MessageType{
-	{Type: prototype.GoMessage(
-		xxx_B_protoFile_MessageDescs[0].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_M2{new(M2)}
-		},
-	)},
+var xxx_B_protoFile_messageTypes [1]protoimpl.MessageType
+var xxx_B_protoFile_goTypes = []interface{}{
+	(*M2)(nil), // 0: goproto.protoc.import_public.sub.M2
 }
-var xxx_B_protoFile_MessageDescs = [1]prototype.Message{
-	{
-		Name: "M2",
-	},
+var xxx_B_protoFile_depIdxs = []int32{}
+
+func init() {
+	var messageTypes [1]protoreflect.MessageType
+	B_protoFile = protoimpl.FileBuilder{
+		RawDescriptor:      fileDescriptor_fc66afda3d7c2232,
+		GoTypes:            xxx_B_protoFile_goTypes,
+		DependencyIndexes:  xxx_B_protoFile_depIdxs,
+		MessageOutputTypes: messageTypes[:],
+	}.Init()
+	messageGoTypes := xxx_B_protoFile_goTypes[0:][:1]
+	for i, mt := range messageTypes[:] {
+		xxx_B_protoFile_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
+		xxx_B_protoFile_messageTypes[i].PBType = mt
+	}
+	xxx_B_protoFile_goTypes = nil
+	xxx_B_protoFile_depIdxs = nil
 }

+ 44 - 53
cmd/protoc-gen-go/testdata/import_public/sub2/a.pb.go

@@ -4,10 +4,12 @@
 package sub2
 
 import (
+	bytes "bytes"
+	gzip "compress/gzip"
 	proto "github.com/golang/protobuf/proto"
 	protoreflect "github.com/golang/protobuf/v2/reflect/protoreflect"
-	prototype "github.com/golang/protobuf/v2/reflect/prototype"
 	protoimpl "github.com/golang/protobuf/v2/runtime/protoimpl"
+	reflect "reflect"
 )
 
 // This is a compile-time assertion to ensure that this generated file
@@ -22,29 +24,14 @@ type Sub2Message struct {
 	XXX_sizecache        int32    `json:"-"`
 }
 
-type xxx_Sub2Message struct{ m *Sub2Message }
-
 func (m *Sub2Message) ProtoReflect() protoreflect.Message {
-	return xxx_Sub2Message{m}
-}
-func (m xxx_Sub2Message) Type() protoreflect.MessageType {
-	return xxx_A_protoFile_MessageTypes[0].Type
-}
-func (m xxx_Sub2Message) KnownFields() protoreflect.KnownFields {
-	return xxx_A_protoFile_MessageTypes[0].KnownFieldsOf(m.m)
-}
-func (m xxx_Sub2Message) UnknownFields() protoreflect.UnknownFields {
-	return xxx_A_protoFile_MessageTypes[0].UnknownFieldsOf(m.m)
+	return xxx_A_protoFile_messageTypes[0].MessageOf(m)
 }
-func (m xxx_Sub2Message) Interface() protoreflect.ProtoMessage {
-	return m.m
-}
-
 func (m *Sub2Message) Reset()         { *m = Sub2Message{} }
 func (m *Sub2Message) String() string { return proto.CompactTextString(m) }
 func (*Sub2Message) ProtoMessage()    {}
 func (*Sub2Message) Descriptor() ([]byte, []int) {
-	return fileDescriptor_7ac53d99328778ac, []int{0}
+	return fileDescriptor_7ac53d99328778ac_gzipped, []int{0}
 }
 
 func (m *Sub2Message) XXX_Unmarshal(b []byte) error {
@@ -66,51 +53,55 @@ func (m *Sub2Message) XXX_DiscardUnknown() {
 var xxx_messageInfo_Sub2Message proto.InternalMessageInfo
 
 func init() {
-	proto.RegisterFile("import_public/sub2/a.proto", fileDescriptor_7ac53d99328778ac)
+	proto.RegisterFile("import_public/sub2/a.proto", fileDescriptor_7ac53d99328778ac_gzipped)
 	proto.RegisterType((*Sub2Message)(nil), "goproto.protoc.import_public.sub2.Sub2Message")
 }
 
 var fileDescriptor_7ac53d99328778ac = []byte{
-	// 137 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x64, 0x8e, 0x31, 0x0b, 0xc2, 0x40,
-	0x0c, 0x46, 0xf7, 0x8a, 0x8b, 0xa3, 0x9b, 0xee, 0xbd, 0xc0, 0xfd, 0x04, 0x57, 0xe9, 0xe4, 0xe6,
-	0x22, 0x49, 0x7a, 0xc6, 0x83, 0x5e, 0x73, 0xf4, 0x12, 0x7f, 0xbf, 0xd8, 0x4e, 0xe2, 0xf6, 0x3d,
-	0x78, 0x1f, 0xbc, 0xee, 0x98, 0x4b, 0xd5, 0xc5, 0x1e, 0xd5, 0x69, 0xca, 0x0c, 0xcd, 0x29, 0x02,
-	0x86, 0xba, 0xa8, 0xe9, 0xe1, 0x24, 0xba, 0x8e, 0x0d, 0x39, 0xfc, 0xa8, 0xe1, 0xab, 0x9e, 0xf7,
-	0xdd, 0xee, 0xe6, 0x14, 0x87, 0xd4, 0x1a, 0x4a, 0xba, 0x0c, 0xf7, 0xab, 0x64, 0x7b, 0x39, 0x05,
-	0xd6, 0x02, 0xa2, 0x13, 0xce, 0x02, 0xeb, 0x9b, 0xfc, 0x09, 0xef, 0x08, 0x5c, 0xc6, 0x8d, 0xb9,
-	0x97, 0x34, 0xf7, 0xa2, 0x60, 0xa9, 0xd9, 0x88, 0x86, 0xf0, 0x1f, 0xf2, 0x09, 0x00, 0x00, 0xff,
-	0xff, 0xb4, 0xbf, 0x14, 0x77, 0x9d, 0x00, 0x00, 0x00,
+	// 157 bytes of the wire-encoded FileDescriptorProto
+	0x0a, 0x1a, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f,
+	0x73, 0x75, 0x62, 0x32, 0x2f, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x21, 0x67, 0x6f,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x69, 0x6d, 0x70,
+	0x6f, 0x72, 0x74, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x73, 0x75, 0x62, 0x32, 0x22,
+	0x0d, 0x0a, 0x0b, 0x53, 0x75, 0x62, 0x32, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x4d,
+	0x5a, 0x4b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x6f, 0x6c,
+	0x61, 0x6e, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x76, 0x32, 0x2f,
+	0x63, 0x6d, 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x67,
+	0x6f, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x64, 0x61, 0x74, 0x61, 0x2f, 0x69, 0x6d, 0x70, 0x6f, 0x72,
+	0x74, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f, 0x73, 0x75, 0x62, 0x32,
 }
 
-func init() {
-	xxx_A_protoFile_FileDesc.Messages = xxx_A_protoFile_MessageDescs[0:1]
-	var err error
-	A_protoFile, err = prototype.NewFile(&xxx_A_protoFile_FileDesc)
-	if err != nil {
-		panic(err)
-	}
-}
+var fileDescriptor_7ac53d99328778ac_gzipped = func() []byte {
+	bb := new(bytes.Buffer)
+	zw, _ := gzip.NewWriterLevel(bb, gzip.NoCompression)
+	zw.Write(fileDescriptor_7ac53d99328778ac)
+	zw.Close()
+	return bb.Bytes()
+}()
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
 var A_protoFile protoreflect.FileDescriptor
 
-var xxx_A_protoFile_FileDesc = prototype.File{
-	Syntax:  protoreflect.Proto2,
-	Path:    "import_public/sub2/a.proto",
-	Package: "goproto.protoc.import_public.sub2",
-}
-var xxx_A_protoFile_MessageTypes = [1]protoimpl.MessageType{
-	{Type: prototype.GoMessage(
-		xxx_A_protoFile_MessageDescs[0].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_Sub2Message{new(Sub2Message)}
-		},
-	)},
+var xxx_A_protoFile_messageTypes [1]protoimpl.MessageType
+var xxx_A_protoFile_goTypes = []interface{}{
+	(*Sub2Message)(nil), // 0: goproto.protoc.import_public.sub2.Sub2Message
 }
-var xxx_A_protoFile_MessageDescs = [1]prototype.Message{
-	{
-		Name: "Sub2Message",
-	},
+var xxx_A_protoFile_depIdxs = []int32{}
+
+func init() {
+	var messageTypes [1]protoreflect.MessageType
+	A_protoFile = protoimpl.FileBuilder{
+		RawDescriptor:      fileDescriptor_7ac53d99328778ac,
+		GoTypes:            xxx_A_protoFile_goTypes,
+		DependencyIndexes:  xxx_A_protoFile_depIdxs,
+		MessageOutputTypes: messageTypes[:],
+	}.Init()
+	messageGoTypes := xxx_A_protoFile_goTypes[0:][:1]
+	for i, mt := range messageTypes[:] {
+		xxx_A_protoFile_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
+		xxx_A_protoFile_messageTypes[i].PBType = mt
+	}
+	xxx_A_protoFile_goTypes = nil
+	xxx_A_protoFile_depIdxs = nil
 }

+ 41 - 51
cmd/protoc-gen-go/testdata/imports/fmt/m.pb.go

@@ -4,10 +4,12 @@
 package fmt
 
 import (
+	bytes "bytes"
+	gzip "compress/gzip"
 	proto "github.com/golang/protobuf/proto"
 	protoreflect "github.com/golang/protobuf/v2/reflect/protoreflect"
-	prototype "github.com/golang/protobuf/v2/reflect/prototype"
 	protoimpl "github.com/golang/protobuf/v2/runtime/protoimpl"
+	reflect "reflect"
 )
 
 // This is a compile-time assertion to ensure that this generated file
@@ -22,29 +24,14 @@ type M struct {
 	XXX_sizecache        int32    `json:"-"`
 }
 
-type xxx_M struct{ m *M }
-
 func (m *M) ProtoReflect() protoreflect.Message {
-	return xxx_M{m}
-}
-func (m xxx_M) Type() protoreflect.MessageType {
-	return xxx_M_protoFile_MessageTypes[0].Type
-}
-func (m xxx_M) KnownFields() protoreflect.KnownFields {
-	return xxx_M_protoFile_MessageTypes[0].KnownFieldsOf(m.m)
-}
-func (m xxx_M) UnknownFields() protoreflect.UnknownFields {
-	return xxx_M_protoFile_MessageTypes[0].UnknownFieldsOf(m.m)
+	return xxx_M_protoFile_messageTypes[0].MessageOf(m)
 }
-func (m xxx_M) Interface() protoreflect.ProtoMessage {
-	return m.m
-}
-
 func (m *M) Reset()         { *m = M{} }
 func (m *M) String() string { return proto.CompactTextString(m) }
 func (*M) ProtoMessage()    {}
 func (*M) Descriptor() ([]byte, []int) {
-	return fileDescriptor_72c126fcd452e392, []int{0}
+	return fileDescriptor_72c126fcd452e392_gzipped, []int{0}
 }
 
 func (m *M) XXX_Unmarshal(b []byte) error {
@@ -66,49 +53,52 @@ func (m *M) XXX_DiscardUnknown() {
 var xxx_messageInfo_M proto.InternalMessageInfo
 
 func init() {
-	proto.RegisterFile("imports/fmt/m.proto", fileDescriptor_72c126fcd452e392)
+	proto.RegisterFile("imports/fmt/m.proto", fileDescriptor_72c126fcd452e392_gzipped)
 	proto.RegisterType((*M)(nil), "fmt.M")
 }
 
 var fileDescriptor_72c126fcd452e392 = []byte{
-	// 109 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x12, 0xce, 0xcc, 0x2d, 0xc8,
-	0x2f, 0x2a, 0x29, 0xd6, 0x4f, 0xcb, 0x2d, 0xd1, 0xcf, 0xd5, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17,
-	0x62, 0x4e, 0xcb, 0x2d, 0x51, 0x62, 0xe6, 0x62, 0xf4, 0x75, 0xb2, 0x8f, 0xb2, 0x4d, 0xcf, 0x2c,
-	0xc9, 0x28, 0x4d, 0xd2, 0x4b, 0xce, 0xcf, 0xd5, 0x4f, 0xcf, 0xcf, 0x49, 0xcc, 0x4b, 0xd7, 0x07,
-	0x2b, 0x4a, 0x2a, 0x4d, 0x83, 0x30, 0x92, 0x75, 0xd3, 0x53, 0xf3, 0x74, 0xd3, 0xf3, 0xf5, 0x4b,
-	0x52, 0x8b, 0x4b, 0x52, 0x12, 0x4b, 0x12, 0xf5, 0x91, 0x8c, 0x4c, 0x62, 0x03, 0xab, 0x31, 0x06,
-	0x04, 0x00, 0x00, 0xff, 0xff, 0xc4, 0xc9, 0xee, 0xbe, 0x68, 0x00, 0x00, 0x00,
+	// 104 bytes of the wire-encoded FileDescriptorProto
+	0x0a, 0x13, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2f, 0x66, 0x6d, 0x74, 0x2f, 0x6d, 0x2e,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x03, 0x66, 0x6d, 0x74, 0x22, 0x03, 0x0a, 0x01, 0x4d, 0x42,
+	0x3f, 0x5a, 0x3d, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x6f,
+	0x6c, 0x61, 0x6e, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x67, 0x6f, 0x2f, 0x74, 0x65, 0x73, 0x74,
+	0x64, 0x61, 0x74, 0x61, 0x2f, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2f, 0x66, 0x6d, 0x74,
+	0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
 }
 
-func init() {
-	xxx_M_protoFile_FileDesc.Messages = xxx_M_protoFile_MessageDescs[0:1]
-	var err error
-	M_protoFile, err = prototype.NewFile(&xxx_M_protoFile_FileDesc)
-	if err != nil {
-		panic(err)
-	}
-}
+var fileDescriptor_72c126fcd452e392_gzipped = func() []byte {
+	bb := new(bytes.Buffer)
+	zw, _ := gzip.NewWriterLevel(bb, gzip.NoCompression)
+	zw.Write(fileDescriptor_72c126fcd452e392)
+	zw.Close()
+	return bb.Bytes()
+}()
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
 var M_protoFile protoreflect.FileDescriptor
 
-var xxx_M_protoFile_FileDesc = prototype.File{
-	Syntax:  protoreflect.Proto3,
-	Path:    "imports/fmt/m.proto",
-	Package: "fmt",
-}
-var xxx_M_protoFile_MessageTypes = [1]protoimpl.MessageType{
-	{Type: prototype.GoMessage(
-		xxx_M_protoFile_MessageDescs[0].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_M{new(M)}
-		},
-	)},
+var xxx_M_protoFile_messageTypes [1]protoimpl.MessageType
+var xxx_M_protoFile_goTypes = []interface{}{
+	(*M)(nil), // 0: fmt.M
 }
-var xxx_M_protoFile_MessageDescs = [1]prototype.Message{
-	{
-		Name: "M",
-	},
+var xxx_M_protoFile_depIdxs = []int32{}
+
+func init() {
+	var messageTypes [1]protoreflect.MessageType
+	M_protoFile = protoimpl.FileBuilder{
+		RawDescriptor:      fileDescriptor_72c126fcd452e392,
+		GoTypes:            xxx_M_protoFile_goTypes,
+		DependencyIndexes:  xxx_M_protoFile_depIdxs,
+		MessageOutputTypes: messageTypes[:],
+	}.Init()
+	messageGoTypes := xxx_M_protoFile_goTypes[0:][:1]
+	for i, mt := range messageTypes[:] {
+		xxx_M_protoFile_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
+		xxx_M_protoFile_messageTypes[i].PBType = mt
+	}
+	xxx_M_protoFile_goTypes = nil
+	xxx_M_protoFile_depIdxs = nil
 }

+ 58 - 114
cmd/protoc-gen-go/testdata/imports/test_a_1/m1.pb.go

@@ -4,10 +4,12 @@
 package test_a_1
 
 import (
+	bytes "bytes"
+	gzip "compress/gzip"
 	proto "github.com/golang/protobuf/proto"
 	protoreflect "github.com/golang/protobuf/v2/reflect/protoreflect"
-	prototype "github.com/golang/protobuf/v2/reflect/prototype"
 	protoimpl "github.com/golang/protobuf/v2/runtime/protoimpl"
+	reflect "reflect"
 )
 
 // This is a compile-time assertion to ensure that this generated file
@@ -23,7 +25,7 @@ const (
 )
 
 func (e E1) Type() protoreflect.EnumType {
-	return xxx_M1_protoFile_EnumTypes[0]
+	return xxx_M1_protoFile_enumTypes[0]
 }
 func (e E1) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -42,7 +44,7 @@ func (x E1) String() string {
 }
 
 func (E1) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_c1091de3fa870a14, []int{0}
+	return fileDescriptor_c1091de3fa870a14_gzipped, []int{0}
 }
 
 type M1 struct {
@@ -51,29 +53,14 @@ type M1 struct {
 	XXX_sizecache        int32    `json:"-"`
 }
 
-type xxx_M1 struct{ m *M1 }
-
 func (m *M1) ProtoReflect() protoreflect.Message {
-	return xxx_M1{m}
-}
-func (m xxx_M1) Type() protoreflect.MessageType {
-	return xxx_M1_protoFile_MessageTypes[0].Type
-}
-func (m xxx_M1) KnownFields() protoreflect.KnownFields {
-	return xxx_M1_protoFile_MessageTypes[0].KnownFieldsOf(m.m)
+	return xxx_M1_protoFile_messageTypes[0].MessageOf(m)
 }
-func (m xxx_M1) UnknownFields() protoreflect.UnknownFields {
-	return xxx_M1_protoFile_MessageTypes[0].UnknownFieldsOf(m.m)
-}
-func (m xxx_M1) Interface() protoreflect.ProtoMessage {
-	return m.m
-}
-
 func (m *M1) Reset()         { *m = M1{} }
 func (m *M1) String() string { return proto.CompactTextString(m) }
 func (*M1) ProtoMessage()    {}
 func (*M1) Descriptor() ([]byte, []int) {
-	return fileDescriptor_c1091de3fa870a14, []int{0}
+	return fileDescriptor_c1091de3fa870a14_gzipped, []int{0}
 }
 
 func (m *M1) XXX_Unmarshal(b []byte) error {
@@ -101,29 +88,14 @@ type M1_1 struct {
 	XXX_sizecache        int32    `json:"-"`
 }
 
-type xxx_M1_1 struct{ m *M1_1 }
-
 func (m *M1_1) ProtoReflect() protoreflect.Message {
-	return xxx_M1_1{m}
-}
-func (m xxx_M1_1) Type() protoreflect.MessageType {
-	return xxx_M1_protoFile_MessageTypes[1].Type
-}
-func (m xxx_M1_1) KnownFields() protoreflect.KnownFields {
-	return xxx_M1_protoFile_MessageTypes[1].KnownFieldsOf(m.m)
-}
-func (m xxx_M1_1) UnknownFields() protoreflect.UnknownFields {
-	return xxx_M1_protoFile_MessageTypes[1].UnknownFieldsOf(m.m)
-}
-func (m xxx_M1_1) Interface() protoreflect.ProtoMessage {
-	return m.m
+	return xxx_M1_protoFile_messageTypes[1].MessageOf(m)
 }
-
 func (m *M1_1) Reset()         { *m = M1_1{} }
 func (m *M1_1) String() string { return proto.CompactTextString(m) }
 func (*M1_1) ProtoMessage()    {}
 func (*M1_1) Descriptor() ([]byte, []int) {
-	return fileDescriptor_c1091de3fa870a14, []int{1}
+	return fileDescriptor_c1091de3fa870a14_gzipped, []int{1}
 }
 
 func (m *M1_1) XXX_Unmarshal(b []byte) error {
@@ -152,92 +124,64 @@ func (m *M1_1) GetM1() *M1 {
 }
 
 func init() {
-	proto.RegisterFile("imports/test_a_1/m1.proto", fileDescriptor_c1091de3fa870a14)
+	proto.RegisterFile("imports/test_a_1/m1.proto", fileDescriptor_c1091de3fa870a14_gzipped)
 	proto.RegisterEnum("test.a.E1", E1_name, E1_value)
 	proto.RegisterType((*M1)(nil), "test.a.M1")
 	proto.RegisterType((*M1_1)(nil), "test.a.M1_1")
 }
 
 var fileDescriptor_c1091de3fa870a14 = []byte{
-	// 165 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0xcc, 0xcc, 0x2d, 0xc8,
-	0x2f, 0x2a, 0x29, 0xd6, 0x2f, 0x49, 0x2d, 0x2e, 0x89, 0x4f, 0x8c, 0x37, 0xd4, 0xcf, 0x35, 0xd4,
-	0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x62, 0x03, 0x09, 0xe9, 0x25, 0x2a, 0xb1, 0x70, 0x31, 0xf9,
-	0x1a, 0x2a, 0x29, 0x71, 0xb1, 0xf8, 0x1a, 0xc6, 0x1b, 0x0a, 0x49, 0x71, 0x31, 0xe5, 0x1a, 0x4a,
-	0x30, 0x2a, 0x30, 0x6a, 0x70, 0x1b, 0x71, 0xe9, 0x41, 0x94, 0xe8, 0xf9, 0x1a, 0x06, 0x31, 0xe5,
-	0x1a, 0x6a, 0x09, 0x72, 0x31, 0xb9, 0x1a, 0x0a, 0x71, 0x73, 0xb1, 0xbb, 0x1a, 0xc6, 0x47, 0xb9,
-	0x06, 0xf9, 0x0b, 0x30, 0x38, 0xb9, 0x44, 0x39, 0xa5, 0x67, 0x96, 0x64, 0x94, 0x26, 0xe9, 0x25,
-	0xe7, 0xe7, 0xea, 0xa7, 0xe7, 0xe7, 0x24, 0xe6, 0xa5, 0xeb, 0x83, 0xcd, 0x4f, 0x2a, 0x4d, 0x83,
-	0x30, 0x92, 0x75, 0xd3, 0x53, 0xf3, 0x74, 0xd3, 0xf3, 0xc1, 0x4e, 0x48, 0x49, 0x2c, 0x49, 0xd4,
-	0x47, 0x77, 0x53, 0x12, 0x1b, 0x58, 0xa1, 0x31, 0x20, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xae, 0xc9,
-	0xcd, 0xae, 0x00, 0x00, 0x00,
-}
-
-func init() {
-	xxx_M1_protoFile_FileDesc.Enums = xxx_M1_protoFile_EnumDescs[0:1]
-	xxx_M1_protoFile_FileDesc.Messages = xxx_M1_protoFile_MessageDescs[0:2]
-	xxx_M1_protoFile_MessageDescs[1].Fields[0].MessageType = xxx_M1_protoFile_MessageTypes[0].Type
-	var err error
-	M1_protoFile, err = prototype.NewFile(&xxx_M1_protoFile_FileDesc)
-	if err != nil {
-		panic(err)
-	}
-}
+	// 174 bytes of the wire-encoded FileDescriptorProto
+	0x0a, 0x19, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x61,
+	0x5f, 0x31, 0x2f, 0x6d, 0x31, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x06, 0x74, 0x65, 0x73,
+	0x74, 0x2e, 0x61, 0x22, 0x04, 0x0a, 0x02, 0x4d, 0x31, 0x22, 0x22, 0x0a, 0x04, 0x4d, 0x31, 0x5f,
+	0x31, 0x12, 0x1a, 0x0a, 0x02, 0x6d, 0x31, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e,
+	0x74, 0x65, 0x73, 0x74, 0x2e, 0x61, 0x2e, 0x4d, 0x31, 0x52, 0x02, 0x6d, 0x31, 0x2a, 0x11, 0x0a,
+	0x02, 0x45, 0x31, 0x12, 0x0b, 0x0a, 0x07, 0x45, 0x31, 0x5f, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00,
+	0x42, 0x44, 0x5a, 0x42, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67,
+	0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x67, 0x6f, 0x2f, 0x74, 0x65, 0x73,
+	0x74, 0x64, 0x61, 0x74, 0x61, 0x2f, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2f, 0x74, 0x65,
+	0x73, 0x74, 0x5f, 0x61, 0x5f, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+}
+
+var fileDescriptor_c1091de3fa870a14_gzipped = func() []byte {
+	bb := new(bytes.Buffer)
+	zw, _ := gzip.NewWriterLevel(bb, gzip.NoCompression)
+	zw.Write(fileDescriptor_c1091de3fa870a14)
+	zw.Close()
+	return bb.Bytes()
+}()
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
 var M1_protoFile protoreflect.FileDescriptor
 
-var xxx_M1_protoFile_FileDesc = prototype.File{
-	Syntax:  protoreflect.Proto3,
-	Path:    "imports/test_a_1/m1.proto",
-	Package: "test.a",
-}
-var xxx_M1_protoFile_EnumTypes = [1]protoreflect.EnumType{
-	prototype.GoEnum(
-		xxx_M1_protoFile_EnumDescs[0].Reference(),
-		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
-			return E1(n)
-		},
-	),
-}
-var xxx_M1_protoFile_EnumDescs = [1]prototype.Enum{
-	{
-		Name: "E1",
-		Values: []prototype.EnumValue{
-			{Name: "E1_ZERO", Number: 0},
-		},
-	},
-}
-var xxx_M1_protoFile_MessageTypes = [2]protoimpl.MessageType{
-	{Type: prototype.GoMessage(
-		xxx_M1_protoFile_MessageDescs[0].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_M1{new(M1)}
-		},
-	)},
-	{Type: prototype.GoMessage(
-		xxx_M1_protoFile_MessageDescs[1].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_M1_1{new(M1_1)}
-		},
-	)},
-}
-var xxx_M1_protoFile_MessageDescs = [2]prototype.Message{
-	{
-		Name: "M1",
-	},
-	{
-		Name: "M1_1",
-		Fields: []prototype.Field{
-			{
-				Name:        "m1",
-				Number:      1,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.MessageKind,
-				JSONName:    "m1",
-				IsPacked:    prototype.False,
-			},
-		},
-	},
+var xxx_M1_protoFile_enumTypes [1]protoreflect.EnumType
+var xxx_M1_protoFile_messageTypes [2]protoimpl.MessageType
+var xxx_M1_protoFile_goTypes = []interface{}{
+	(E1)(0),      // 0: test.a.E1
+	(*M1)(nil),   // 1: test.a.M1
+	(*M1_1)(nil), // 2: test.a.M1_1
+}
+var xxx_M1_protoFile_depIdxs = []int32{
+	1, // test.a.M1_1.m1:type_name -> test.a.M1
+}
+
+func init() {
+	var messageTypes [2]protoreflect.MessageType
+	M1_protoFile = protoimpl.FileBuilder{
+		RawDescriptor:      fileDescriptor_c1091de3fa870a14,
+		GoTypes:            xxx_M1_protoFile_goTypes,
+		DependencyIndexes:  xxx_M1_protoFile_depIdxs,
+		EnumOutputTypes:    xxx_M1_protoFile_enumTypes[:],
+		MessageOutputTypes: messageTypes[:],
+	}.Init()
+	messageGoTypes := xxx_M1_protoFile_goTypes[1:][:2]
+	for i, mt := range messageTypes[:] {
+		xxx_M1_protoFile_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
+		xxx_M1_protoFile_messageTypes[i].PBType = mt
+	}
+	xxx_M1_protoFile_goTypes = nil
+	xxx_M1_protoFile_depIdxs = nil
 }

+ 42 - 52
cmd/protoc-gen-go/testdata/imports/test_a_1/m2.pb.go

@@ -4,10 +4,12 @@
 package test_a_1
 
 import (
+	bytes "bytes"
+	gzip "compress/gzip"
 	proto "github.com/golang/protobuf/proto"
 	protoreflect "github.com/golang/protobuf/v2/reflect/protoreflect"
-	prototype "github.com/golang/protobuf/v2/reflect/prototype"
 	protoimpl "github.com/golang/protobuf/v2/runtime/protoimpl"
+	reflect "reflect"
 )
 
 // This is a compile-time assertion to ensure that this generated file
@@ -22,29 +24,14 @@ type M2 struct {
 	XXX_sizecache        int32    `json:"-"`
 }
 
-type xxx_M2 struct{ m *M2 }
-
 func (m *M2) ProtoReflect() protoreflect.Message {
-	return xxx_M2{m}
-}
-func (m xxx_M2) Type() protoreflect.MessageType {
-	return xxx_M2_protoFile_MessageTypes[0].Type
-}
-func (m xxx_M2) KnownFields() protoreflect.KnownFields {
-	return xxx_M2_protoFile_MessageTypes[0].KnownFieldsOf(m.m)
-}
-func (m xxx_M2) UnknownFields() protoreflect.UnknownFields {
-	return xxx_M2_protoFile_MessageTypes[0].UnknownFieldsOf(m.m)
+	return xxx_M2_protoFile_messageTypes[0].MessageOf(m)
 }
-func (m xxx_M2) Interface() protoreflect.ProtoMessage {
-	return m.m
-}
-
 func (m *M2) Reset()         { *m = M2{} }
 func (m *M2) String() string { return proto.CompactTextString(m) }
 func (*M2) ProtoMessage()    {}
 func (*M2) Descriptor() ([]byte, []int) {
-	return fileDescriptor_20cf27515c0d621c, []int{0}
+	return fileDescriptor_20cf27515c0d621c_gzipped, []int{0}
 }
 
 func (m *M2) XXX_Unmarshal(b []byte) error {
@@ -66,50 +53,53 @@ func (m *M2) XXX_DiscardUnknown() {
 var xxx_messageInfo_M2 proto.InternalMessageInfo
 
 func init() {
-	proto.RegisterFile("imports/test_a_1/m2.proto", fileDescriptor_20cf27515c0d621c)
+	proto.RegisterFile("imports/test_a_1/m2.proto", fileDescriptor_20cf27515c0d621c_gzipped)
 	proto.RegisterType((*M2)(nil), "test.a.M2")
 }
 
 var fileDescriptor_20cf27515c0d621c = []byte{
-	// 114 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0xcc, 0xcc, 0x2d, 0xc8,
-	0x2f, 0x2a, 0x29, 0xd6, 0x2f, 0x49, 0x2d, 0x2e, 0x89, 0x4f, 0x8c, 0x37, 0xd4, 0xcf, 0x35, 0xd2,
-	0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x62, 0x03, 0x09, 0xe9, 0x25, 0x2a, 0xb1, 0x70, 0x31, 0xf9,
-	0x1a, 0x39, 0xb9, 0x44, 0x39, 0xa5, 0x67, 0x96, 0x64, 0x94, 0x26, 0xe9, 0x25, 0xe7, 0xe7, 0xea,
-	0xa7, 0xe7, 0xe7, 0x24, 0xe6, 0xa5, 0xeb, 0x83, 0x15, 0x26, 0x95, 0xa6, 0x41, 0x18, 0xc9, 0xba,
-	0xe9, 0xa9, 0x79, 0xba, 0xe9, 0xf9, 0x60, 0xb3, 0x52, 0x12, 0x4b, 0x12, 0xf5, 0xd1, 0x0d, 0x4f,
-	0x62, 0x03, 0x2b, 0x34, 0x06, 0x04, 0x00, 0x00, 0xff, 0xff, 0xe3, 0xe0, 0x7e, 0xc0, 0x77, 0x00,
-	0x00, 0x00,
+	// 119 bytes of the wire-encoded FileDescriptorProto
+	0x0a, 0x19, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x61,
+	0x5f, 0x31, 0x2f, 0x6d, 0x32, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x06, 0x74, 0x65, 0x73,
+	0x74, 0x2e, 0x61, 0x22, 0x04, 0x0a, 0x02, 0x4d, 0x32, 0x42, 0x44, 0x5a, 0x42, 0x67, 0x69, 0x74,
+	0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2f, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67,
+	0x65, 0x6e, 0x2d, 0x67, 0x6f, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x64, 0x61, 0x74, 0x61, 0x2f, 0x69,
+	0x6d, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x61, 0x5f, 0x31, 0x62,
+	0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
 }
 
-func init() {
-	xxx_M2_protoFile_FileDesc.Messages = xxx_M2_protoFile_MessageDescs[0:1]
-	var err error
-	M2_protoFile, err = prototype.NewFile(&xxx_M2_protoFile_FileDesc)
-	if err != nil {
-		panic(err)
-	}
-}
+var fileDescriptor_20cf27515c0d621c_gzipped = func() []byte {
+	bb := new(bytes.Buffer)
+	zw, _ := gzip.NewWriterLevel(bb, gzip.NoCompression)
+	zw.Write(fileDescriptor_20cf27515c0d621c)
+	zw.Close()
+	return bb.Bytes()
+}()
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
 var M2_protoFile protoreflect.FileDescriptor
 
-var xxx_M2_protoFile_FileDesc = prototype.File{
-	Syntax:  protoreflect.Proto3,
-	Path:    "imports/test_a_1/m2.proto",
-	Package: "test.a",
-}
-var xxx_M2_protoFile_MessageTypes = [1]protoimpl.MessageType{
-	{Type: prototype.GoMessage(
-		xxx_M2_protoFile_MessageDescs[0].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_M2{new(M2)}
-		},
-	)},
+var xxx_M2_protoFile_messageTypes [1]protoimpl.MessageType
+var xxx_M2_protoFile_goTypes = []interface{}{
+	(*M2)(nil), // 0: test.a.M2
 }
-var xxx_M2_protoFile_MessageDescs = [1]prototype.Message{
-	{
-		Name: "M2",
-	},
+var xxx_M2_protoFile_depIdxs = []int32{}
+
+func init() {
+	var messageTypes [1]protoreflect.MessageType
+	M2_protoFile = protoimpl.FileBuilder{
+		RawDescriptor:      fileDescriptor_20cf27515c0d621c,
+		GoTypes:            xxx_M2_protoFile_goTypes,
+		DependencyIndexes:  xxx_M2_protoFile_depIdxs,
+		MessageOutputTypes: messageTypes[:],
+	}.Init()
+	messageGoTypes := xxx_M2_protoFile_goTypes[0:][:1]
+	for i, mt := range messageTypes[:] {
+		xxx_M2_protoFile_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
+		xxx_M2_protoFile_messageTypes[i].PBType = mt
+	}
+	xxx_M2_protoFile_goTypes = nil
+	xxx_M2_protoFile_depIdxs = nil
 }

+ 42 - 52
cmd/protoc-gen-go/testdata/imports/test_a_2/m3.pb.go

@@ -4,10 +4,12 @@
 package test_a_2
 
 import (
+	bytes "bytes"
+	gzip "compress/gzip"
 	proto "github.com/golang/protobuf/proto"
 	protoreflect "github.com/golang/protobuf/v2/reflect/protoreflect"
-	prototype "github.com/golang/protobuf/v2/reflect/prototype"
 	protoimpl "github.com/golang/protobuf/v2/runtime/protoimpl"
+	reflect "reflect"
 )
 
 // This is a compile-time assertion to ensure that this generated file
@@ -22,29 +24,14 @@ type M3 struct {
 	XXX_sizecache        int32    `json:"-"`
 }
 
-type xxx_M3 struct{ m *M3 }
-
 func (m *M3) ProtoReflect() protoreflect.Message {
-	return xxx_M3{m}
-}
-func (m xxx_M3) Type() protoreflect.MessageType {
-	return xxx_M3_protoFile_MessageTypes[0].Type
-}
-func (m xxx_M3) KnownFields() protoreflect.KnownFields {
-	return xxx_M3_protoFile_MessageTypes[0].KnownFieldsOf(m.m)
-}
-func (m xxx_M3) UnknownFields() protoreflect.UnknownFields {
-	return xxx_M3_protoFile_MessageTypes[0].UnknownFieldsOf(m.m)
+	return xxx_M3_protoFile_messageTypes[0].MessageOf(m)
 }
-func (m xxx_M3) Interface() protoreflect.ProtoMessage {
-	return m.m
-}
-
 func (m *M3) Reset()         { *m = M3{} }
 func (m *M3) String() string { return proto.CompactTextString(m) }
 func (*M3) ProtoMessage()    {}
 func (*M3) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ff9d8f834875c9c5, []int{0}
+	return fileDescriptor_ff9d8f834875c9c5_gzipped, []int{0}
 }
 
 func (m *M3) XXX_Unmarshal(b []byte) error {
@@ -66,50 +53,53 @@ func (m *M3) XXX_DiscardUnknown() {
 var xxx_messageInfo_M3 proto.InternalMessageInfo
 
 func init() {
-	proto.RegisterFile("imports/test_a_2/m3.proto", fileDescriptor_ff9d8f834875c9c5)
+	proto.RegisterFile("imports/test_a_2/m3.proto", fileDescriptor_ff9d8f834875c9c5_gzipped)
 	proto.RegisterType((*M3)(nil), "test.a.M3")
 }
 
 var fileDescriptor_ff9d8f834875c9c5 = []byte{
-	// 114 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0xcc, 0xcc, 0x2d, 0xc8,
-	0x2f, 0x2a, 0x29, 0xd6, 0x2f, 0x49, 0x2d, 0x2e, 0x89, 0x4f, 0x8c, 0x37, 0xd2, 0xcf, 0x35, 0xd6,
-	0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x62, 0x03, 0x09, 0xe9, 0x25, 0x2a, 0xb1, 0x70, 0x31, 0xf9,
-	0x1a, 0x3b, 0xb9, 0x44, 0x39, 0xa5, 0x67, 0x96, 0x64, 0x94, 0x26, 0xe9, 0x25, 0xe7, 0xe7, 0xea,
-	0xa7, 0xe7, 0xe7, 0x24, 0xe6, 0xa5, 0xeb, 0x83, 0x15, 0x26, 0x95, 0xa6, 0x41, 0x18, 0xc9, 0xba,
-	0xe9, 0xa9, 0x79, 0xba, 0xe9, 0xf9, 0x60, 0xb3, 0x52, 0x12, 0x4b, 0x12, 0xf5, 0xd1, 0x0d, 0x4f,
-	0x62, 0x03, 0x2b, 0x34, 0x06, 0x04, 0x00, 0x00, 0xff, 0xff, 0x23, 0x86, 0x27, 0x47, 0x77, 0x00,
-	0x00, 0x00,
+	// 119 bytes of the wire-encoded FileDescriptorProto
+	0x0a, 0x19, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x61,
+	0x5f, 0x32, 0x2f, 0x6d, 0x33, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x06, 0x74, 0x65, 0x73,
+	0x74, 0x2e, 0x61, 0x22, 0x04, 0x0a, 0x02, 0x4d, 0x33, 0x42, 0x44, 0x5a, 0x42, 0x67, 0x69, 0x74,
+	0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2f, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67,
+	0x65, 0x6e, 0x2d, 0x67, 0x6f, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x64, 0x61, 0x74, 0x61, 0x2f, 0x69,
+	0x6d, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x61, 0x5f, 0x32, 0x62,
+	0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
 }
 
-func init() {
-	xxx_M3_protoFile_FileDesc.Messages = xxx_M3_protoFile_MessageDescs[0:1]
-	var err error
-	M3_protoFile, err = prototype.NewFile(&xxx_M3_protoFile_FileDesc)
-	if err != nil {
-		panic(err)
-	}
-}
+var fileDescriptor_ff9d8f834875c9c5_gzipped = func() []byte {
+	bb := new(bytes.Buffer)
+	zw, _ := gzip.NewWriterLevel(bb, gzip.NoCompression)
+	zw.Write(fileDescriptor_ff9d8f834875c9c5)
+	zw.Close()
+	return bb.Bytes()
+}()
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
 var M3_protoFile protoreflect.FileDescriptor
 
-var xxx_M3_protoFile_FileDesc = prototype.File{
-	Syntax:  protoreflect.Proto3,
-	Path:    "imports/test_a_2/m3.proto",
-	Package: "test.a",
-}
-var xxx_M3_protoFile_MessageTypes = [1]protoimpl.MessageType{
-	{Type: prototype.GoMessage(
-		xxx_M3_protoFile_MessageDescs[0].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_M3{new(M3)}
-		},
-	)},
+var xxx_M3_protoFile_messageTypes [1]protoimpl.MessageType
+var xxx_M3_protoFile_goTypes = []interface{}{
+	(*M3)(nil), // 0: test.a.M3
 }
-var xxx_M3_protoFile_MessageDescs = [1]prototype.Message{
-	{
-		Name: "M3",
-	},
+var xxx_M3_protoFile_depIdxs = []int32{}
+
+func init() {
+	var messageTypes [1]protoreflect.MessageType
+	M3_protoFile = protoimpl.FileBuilder{
+		RawDescriptor:      fileDescriptor_ff9d8f834875c9c5,
+		GoTypes:            xxx_M3_protoFile_goTypes,
+		DependencyIndexes:  xxx_M3_protoFile_depIdxs,
+		MessageOutputTypes: messageTypes[:],
+	}.Init()
+	messageGoTypes := xxx_M3_protoFile_goTypes[0:][:1]
+	for i, mt := range messageTypes[:] {
+		xxx_M3_protoFile_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
+		xxx_M3_protoFile_messageTypes[i].PBType = mt
+	}
+	xxx_M3_protoFile_goTypes = nil
+	xxx_M3_protoFile_depIdxs = nil
 }

+ 42 - 52
cmd/protoc-gen-go/testdata/imports/test_a_2/m4.pb.go

@@ -4,10 +4,12 @@
 package test_a_2
 
 import (
+	bytes "bytes"
+	gzip "compress/gzip"
 	proto "github.com/golang/protobuf/proto"
 	protoreflect "github.com/golang/protobuf/v2/reflect/protoreflect"
-	prototype "github.com/golang/protobuf/v2/reflect/prototype"
 	protoimpl "github.com/golang/protobuf/v2/runtime/protoimpl"
+	reflect "reflect"
 )
 
 // This is a compile-time assertion to ensure that this generated file
@@ -22,29 +24,14 @@ type M4 struct {
 	XXX_sizecache        int32    `json:"-"`
 }
 
-type xxx_M4 struct{ m *M4 }
-
 func (m *M4) ProtoReflect() protoreflect.Message {
-	return xxx_M4{m}
-}
-func (m xxx_M4) Type() protoreflect.MessageType {
-	return xxx_M4_protoFile_MessageTypes[0].Type
-}
-func (m xxx_M4) KnownFields() protoreflect.KnownFields {
-	return xxx_M4_protoFile_MessageTypes[0].KnownFieldsOf(m.m)
-}
-func (m xxx_M4) UnknownFields() protoreflect.UnknownFields {
-	return xxx_M4_protoFile_MessageTypes[0].UnknownFieldsOf(m.m)
+	return xxx_M4_protoFile_messageTypes[0].MessageOf(m)
 }
-func (m xxx_M4) Interface() protoreflect.ProtoMessage {
-	return m.m
-}
-
 func (m *M4) Reset()         { *m = M4{} }
 func (m *M4) String() string { return proto.CompactTextString(m) }
 func (*M4) ProtoMessage()    {}
 func (*M4) Descriptor() ([]byte, []int) {
-	return fileDescriptor_fdd24f82f6c5a786, []int{0}
+	return fileDescriptor_fdd24f82f6c5a786_gzipped, []int{0}
 }
 
 func (m *M4) XXX_Unmarshal(b []byte) error {
@@ -66,50 +53,53 @@ func (m *M4) XXX_DiscardUnknown() {
 var xxx_messageInfo_M4 proto.InternalMessageInfo
 
 func init() {
-	proto.RegisterFile("imports/test_a_2/m4.proto", fileDescriptor_fdd24f82f6c5a786)
+	proto.RegisterFile("imports/test_a_2/m4.proto", fileDescriptor_fdd24f82f6c5a786_gzipped)
 	proto.RegisterType((*M4)(nil), "test.a.M4")
 }
 
 var fileDescriptor_fdd24f82f6c5a786 = []byte{
-	// 114 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0xcc, 0xcc, 0x2d, 0xc8,
-	0x2f, 0x2a, 0x29, 0xd6, 0x2f, 0x49, 0x2d, 0x2e, 0x89, 0x4f, 0x8c, 0x37, 0xd2, 0xcf, 0x35, 0xd1,
-	0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x62, 0x03, 0x09, 0xe9, 0x25, 0x2a, 0xb1, 0x70, 0x31, 0xf9,
-	0x9a, 0x38, 0xb9, 0x44, 0x39, 0xa5, 0x67, 0x96, 0x64, 0x94, 0x26, 0xe9, 0x25, 0xe7, 0xe7, 0xea,
-	0xa7, 0xe7, 0xe7, 0x24, 0xe6, 0xa5, 0xeb, 0x83, 0x15, 0x26, 0x95, 0xa6, 0x41, 0x18, 0xc9, 0xba,
-	0xe9, 0xa9, 0x79, 0xba, 0xe9, 0xf9, 0x60, 0xb3, 0x52, 0x12, 0x4b, 0x12, 0xf5, 0xd1, 0x0d, 0x4f,
-	0x62, 0x03, 0x2b, 0x34, 0x06, 0x04, 0x00, 0x00, 0xff, 0xff, 0x58, 0xcb, 0x10, 0xc8, 0x77, 0x00,
-	0x00, 0x00,
+	// 119 bytes of the wire-encoded FileDescriptorProto
+	0x0a, 0x19, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x61,
+	0x5f, 0x32, 0x2f, 0x6d, 0x34, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x06, 0x74, 0x65, 0x73,
+	0x74, 0x2e, 0x61, 0x22, 0x04, 0x0a, 0x02, 0x4d, 0x34, 0x42, 0x44, 0x5a, 0x42, 0x67, 0x69, 0x74,
+	0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2f, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67,
+	0x65, 0x6e, 0x2d, 0x67, 0x6f, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x64, 0x61, 0x74, 0x61, 0x2f, 0x69,
+	0x6d, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x61, 0x5f, 0x32, 0x62,
+	0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
 }
 
-func init() {
-	xxx_M4_protoFile_FileDesc.Messages = xxx_M4_protoFile_MessageDescs[0:1]
-	var err error
-	M4_protoFile, err = prototype.NewFile(&xxx_M4_protoFile_FileDesc)
-	if err != nil {
-		panic(err)
-	}
-}
+var fileDescriptor_fdd24f82f6c5a786_gzipped = func() []byte {
+	bb := new(bytes.Buffer)
+	zw, _ := gzip.NewWriterLevel(bb, gzip.NoCompression)
+	zw.Write(fileDescriptor_fdd24f82f6c5a786)
+	zw.Close()
+	return bb.Bytes()
+}()
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
 var M4_protoFile protoreflect.FileDescriptor
 
-var xxx_M4_protoFile_FileDesc = prototype.File{
-	Syntax:  protoreflect.Proto3,
-	Path:    "imports/test_a_2/m4.proto",
-	Package: "test.a",
-}
-var xxx_M4_protoFile_MessageTypes = [1]protoimpl.MessageType{
-	{Type: prototype.GoMessage(
-		xxx_M4_protoFile_MessageDescs[0].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_M4{new(M4)}
-		},
-	)},
+var xxx_M4_protoFile_messageTypes [1]protoimpl.MessageType
+var xxx_M4_protoFile_goTypes = []interface{}{
+	(*M4)(nil), // 0: test.a.M4
 }
-var xxx_M4_protoFile_MessageDescs = [1]prototype.Message{
-	{
-		Name: "M4",
-	},
+var xxx_M4_protoFile_depIdxs = []int32{}
+
+func init() {
+	var messageTypes [1]protoreflect.MessageType
+	M4_protoFile = protoimpl.FileBuilder{
+		RawDescriptor:      fileDescriptor_fdd24f82f6c5a786,
+		GoTypes:            xxx_M4_protoFile_goTypes,
+		DependencyIndexes:  xxx_M4_protoFile_depIdxs,
+		MessageOutputTypes: messageTypes[:],
+	}.Init()
+	messageGoTypes := xxx_M4_protoFile_goTypes[0:][:1]
+	for i, mt := range messageTypes[:] {
+		xxx_M4_protoFile_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
+		xxx_M4_protoFile_messageTypes[i].PBType = mt
+	}
+	xxx_M4_protoFile_goTypes = nil
+	xxx_M4_protoFile_depIdxs = nil
 }

+ 43 - 52
cmd/protoc-gen-go/testdata/imports/test_b_1/m1.pb.go

@@ -4,10 +4,12 @@
 package beta
 
 import (
+	bytes "bytes"
+	gzip "compress/gzip"
 	proto "github.com/golang/protobuf/proto"
 	protoreflect "github.com/golang/protobuf/v2/reflect/protoreflect"
-	prototype "github.com/golang/protobuf/v2/reflect/prototype"
 	protoimpl "github.com/golang/protobuf/v2/runtime/protoimpl"
+	reflect "reflect"
 )
 
 // This is a compile-time assertion to ensure that this generated file
@@ -22,29 +24,14 @@ type M1 struct {
 	XXX_sizecache        int32    `json:"-"`
 }
 
-type xxx_M1 struct{ m *M1 }
-
 func (m *M1) ProtoReflect() protoreflect.Message {
-	return xxx_M1{m}
-}
-func (m xxx_M1) Type() protoreflect.MessageType {
-	return xxx_M1_protoFile_MessageTypes[0].Type
-}
-func (m xxx_M1) KnownFields() protoreflect.KnownFields {
-	return xxx_M1_protoFile_MessageTypes[0].KnownFieldsOf(m.m)
-}
-func (m xxx_M1) UnknownFields() protoreflect.UnknownFields {
-	return xxx_M1_protoFile_MessageTypes[0].UnknownFieldsOf(m.m)
+	return xxx_M1_protoFile_messageTypes[0].MessageOf(m)
 }
-func (m xxx_M1) Interface() protoreflect.ProtoMessage {
-	return m.m
-}
-
 func (m *M1) Reset()         { *m = M1{} }
 func (m *M1) String() string { return proto.CompactTextString(m) }
 func (*M1) ProtoMessage()    {}
 func (*M1) Descriptor() ([]byte, []int) {
-	return fileDescriptor_7f49573d035512a8, []int{0}
+	return fileDescriptor_7f49573d035512a8_gzipped, []int{0}
 }
 
 func (m *M1) XXX_Unmarshal(b []byte) error {
@@ -66,50 +53,54 @@ func (m *M1) XXX_DiscardUnknown() {
 var xxx_messageInfo_M1 proto.InternalMessageInfo
 
 func init() {
-	proto.RegisterFile("imports/test_b_1/m1.proto", fileDescriptor_7f49573d035512a8)
+	proto.RegisterFile("imports/test_b_1/m1.proto", fileDescriptor_7f49573d035512a8_gzipped)
 	proto.RegisterType((*M1)(nil), "test.b.part1.M1")
 }
 
 var fileDescriptor_7f49573d035512a8 = []byte{
-	// 125 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0xcc, 0xcc, 0x2d, 0xc8,
-	0x2f, 0x2a, 0x29, 0xd6, 0x2f, 0x49, 0x2d, 0x2e, 0x89, 0x4f, 0x8a, 0x37, 0xd4, 0xcf, 0x35, 0xd4,
-	0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0x01, 0x09, 0xe9, 0x25, 0xe9, 0x15, 0x24, 0x16, 0x95,
-	0x18, 0x2a, 0xb1, 0x70, 0x31, 0xf9, 0x1a, 0x3a, 0x79, 0x46, 0xb9, 0xa7, 0x67, 0x96, 0x64, 0x94,
-	0x26, 0xe9, 0x25, 0xe7, 0xe7, 0xea, 0xa7, 0xe7, 0xe7, 0x24, 0xe6, 0xa5, 0xeb, 0x83, 0x95, 0x27,
-	0x95, 0xa6, 0x41, 0x18, 0xc9, 0xba, 0xe9, 0xa9, 0x79, 0xba, 0xe9, 0xf9, 0x60, 0x13, 0x53, 0x12,
-	0x4b, 0x12, 0xf5, 0xd1, 0xad, 0xb0, 0x4e, 0x4a, 0x2d, 0x49, 0x4c, 0x62, 0x03, 0xab, 0x36, 0x06,
-	0x04, 0x00, 0x00, 0xff, 0xff, 0x4a, 0xf1, 0x3b, 0x7f, 0x82, 0x00, 0x00, 0x00,
+	// 130 bytes of the wire-encoded FileDescriptorProto
+	0x0a, 0x19, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x62,
+	0x5f, 0x31, 0x2f, 0x6d, 0x31, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0c, 0x74, 0x65, 0x73,
+	0x74, 0x2e, 0x62, 0x2e, 0x70, 0x61, 0x72, 0x74, 0x31, 0x22, 0x04, 0x0a, 0x02, 0x4d, 0x31, 0x42,
+	0x49, 0x5a, 0x47, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x6f,
+	0x6c, 0x61, 0x6e, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x67, 0x6f, 0x2f, 0x74, 0x65, 0x73, 0x74,
+	0x64, 0x61, 0x74, 0x61, 0x2f, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2f, 0x74, 0x65, 0x73,
+	0x74, 0x5f, 0x62, 0x5f, 0x31, 0x3b, 0x62, 0x65, 0x74, 0x61, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x33,
 }
 
-func init() {
-	xxx_M1_protoFile_FileDesc.Messages = xxx_M1_protoFile_MessageDescs[0:1]
-	var err error
-	M1_protoFile, err = prototype.NewFile(&xxx_M1_protoFile_FileDesc)
-	if err != nil {
-		panic(err)
-	}
-}
+var fileDescriptor_7f49573d035512a8_gzipped = func() []byte {
+	bb := new(bytes.Buffer)
+	zw, _ := gzip.NewWriterLevel(bb, gzip.NoCompression)
+	zw.Write(fileDescriptor_7f49573d035512a8)
+	zw.Close()
+	return bb.Bytes()
+}()
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
 var M1_protoFile protoreflect.FileDescriptor
 
-var xxx_M1_protoFile_FileDesc = prototype.File{
-	Syntax:  protoreflect.Proto3,
-	Path:    "imports/test_b_1/m1.proto",
-	Package: "test.b.part1",
-}
-var xxx_M1_protoFile_MessageTypes = [1]protoimpl.MessageType{
-	{Type: prototype.GoMessage(
-		xxx_M1_protoFile_MessageDescs[0].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_M1{new(M1)}
-		},
-	)},
+var xxx_M1_protoFile_messageTypes [1]protoimpl.MessageType
+var xxx_M1_protoFile_goTypes = []interface{}{
+	(*M1)(nil), // 0: test.b.part1.M1
 }
-var xxx_M1_protoFile_MessageDescs = [1]prototype.Message{
-	{
-		Name: "M1",
-	},
+var xxx_M1_protoFile_depIdxs = []int32{}
+
+func init() {
+	var messageTypes [1]protoreflect.MessageType
+	M1_protoFile = protoimpl.FileBuilder{
+		RawDescriptor:      fileDescriptor_7f49573d035512a8,
+		GoTypes:            xxx_M1_protoFile_goTypes,
+		DependencyIndexes:  xxx_M1_protoFile_depIdxs,
+		MessageOutputTypes: messageTypes[:],
+	}.Init()
+	messageGoTypes := xxx_M1_protoFile_goTypes[0:][:1]
+	for i, mt := range messageTypes[:] {
+		xxx_M1_protoFile_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
+		xxx_M1_protoFile_messageTypes[i].PBType = mt
+	}
+	xxx_M1_protoFile_goTypes = nil
+	xxx_M1_protoFile_depIdxs = nil
 }

+ 43 - 52
cmd/protoc-gen-go/testdata/imports/test_b_1/m2.pb.go

@@ -4,10 +4,12 @@
 package beta
 
 import (
+	bytes "bytes"
+	gzip "compress/gzip"
 	proto "github.com/golang/protobuf/proto"
 	protoreflect "github.com/golang/protobuf/v2/reflect/protoreflect"
-	prototype "github.com/golang/protobuf/v2/reflect/prototype"
 	protoimpl "github.com/golang/protobuf/v2/runtime/protoimpl"
+	reflect "reflect"
 )
 
 // This is a compile-time assertion to ensure that this generated file
@@ -22,29 +24,14 @@ type M2 struct {
 	XXX_sizecache        int32    `json:"-"`
 }
 
-type xxx_M2 struct{ m *M2 }
-
 func (m *M2) ProtoReflect() protoreflect.Message {
-	return xxx_M2{m}
-}
-func (m xxx_M2) Type() protoreflect.MessageType {
-	return xxx_M2_protoFile_MessageTypes[0].Type
-}
-func (m xxx_M2) KnownFields() protoreflect.KnownFields {
-	return xxx_M2_protoFile_MessageTypes[0].KnownFieldsOf(m.m)
-}
-func (m xxx_M2) UnknownFields() protoreflect.UnknownFields {
-	return xxx_M2_protoFile_MessageTypes[0].UnknownFieldsOf(m.m)
+	return xxx_M2_protoFile_messageTypes[0].MessageOf(m)
 }
-func (m xxx_M2) Interface() protoreflect.ProtoMessage {
-	return m.m
-}
-
 func (m *M2) Reset()         { *m = M2{} }
 func (m *M2) String() string { return proto.CompactTextString(m) }
 func (*M2) ProtoMessage()    {}
 func (*M2) Descriptor() ([]byte, []int) {
-	return fileDescriptor_a1becddceeb586f2, []int{0}
+	return fileDescriptor_a1becddceeb586f2_gzipped, []int{0}
 }
 
 func (m *M2) XXX_Unmarshal(b []byte) error {
@@ -66,50 +53,54 @@ func (m *M2) XXX_DiscardUnknown() {
 var xxx_messageInfo_M2 proto.InternalMessageInfo
 
 func init() {
-	proto.RegisterFile("imports/test_b_1/m2.proto", fileDescriptor_a1becddceeb586f2)
+	proto.RegisterFile("imports/test_b_1/m2.proto", fileDescriptor_a1becddceeb586f2_gzipped)
 	proto.RegisterType((*M2)(nil), "test.b.part2.M2")
 }
 
 var fileDescriptor_a1becddceeb586f2 = []byte{
-	// 125 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0xcc, 0xcc, 0x2d, 0xc8,
-	0x2f, 0x2a, 0x29, 0xd6, 0x2f, 0x49, 0x2d, 0x2e, 0x89, 0x4f, 0x8a, 0x37, 0xd4, 0xcf, 0x35, 0xd2,
-	0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0x01, 0x09, 0xe9, 0x25, 0xe9, 0x15, 0x24, 0x16, 0x95,
-	0x18, 0x29, 0xb1, 0x70, 0x31, 0xf9, 0x1a, 0x39, 0x79, 0x46, 0xb9, 0xa7, 0x67, 0x96, 0x64, 0x94,
-	0x26, 0xe9, 0x25, 0xe7, 0xe7, 0xea, 0xa7, 0xe7, 0xe7, 0x24, 0xe6, 0xa5, 0xeb, 0x83, 0x95, 0x27,
-	0x95, 0xa6, 0x41, 0x18, 0xc9, 0xba, 0xe9, 0xa9, 0x79, 0xba, 0xe9, 0xf9, 0x60, 0x13, 0x53, 0x12,
-	0x4b, 0x12, 0xf5, 0xd1, 0xad, 0xb0, 0x4e, 0x4a, 0x2d, 0x49, 0x4c, 0x62, 0x03, 0xab, 0x36, 0x06,
-	0x04, 0x00, 0x00, 0xff, 0xff, 0x44, 0x29, 0xbe, 0x6d, 0x82, 0x00, 0x00, 0x00,
+	// 130 bytes of the wire-encoded FileDescriptorProto
+	0x0a, 0x19, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x62,
+	0x5f, 0x31, 0x2f, 0x6d, 0x32, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0c, 0x74, 0x65, 0x73,
+	0x74, 0x2e, 0x62, 0x2e, 0x70, 0x61, 0x72, 0x74, 0x32, 0x22, 0x04, 0x0a, 0x02, 0x4d, 0x32, 0x42,
+	0x49, 0x5a, 0x47, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x6f,
+	0x6c, 0x61, 0x6e, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x67, 0x6f, 0x2f, 0x74, 0x65, 0x73, 0x74,
+	0x64, 0x61, 0x74, 0x61, 0x2f, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2f, 0x74, 0x65, 0x73,
+	0x74, 0x5f, 0x62, 0x5f, 0x31, 0x3b, 0x62, 0x65, 0x74, 0x61, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x33,
 }
 
-func init() {
-	xxx_M2_protoFile_FileDesc.Messages = xxx_M2_protoFile_MessageDescs[0:1]
-	var err error
-	M2_protoFile, err = prototype.NewFile(&xxx_M2_protoFile_FileDesc)
-	if err != nil {
-		panic(err)
-	}
-}
+var fileDescriptor_a1becddceeb586f2_gzipped = func() []byte {
+	bb := new(bytes.Buffer)
+	zw, _ := gzip.NewWriterLevel(bb, gzip.NoCompression)
+	zw.Write(fileDescriptor_a1becddceeb586f2)
+	zw.Close()
+	return bb.Bytes()
+}()
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
 var M2_protoFile protoreflect.FileDescriptor
 
-var xxx_M2_protoFile_FileDesc = prototype.File{
-	Syntax:  protoreflect.Proto3,
-	Path:    "imports/test_b_1/m2.proto",
-	Package: "test.b.part2",
-}
-var xxx_M2_protoFile_MessageTypes = [1]protoimpl.MessageType{
-	{Type: prototype.GoMessage(
-		xxx_M2_protoFile_MessageDescs[0].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_M2{new(M2)}
-		},
-	)},
+var xxx_M2_protoFile_messageTypes [1]protoimpl.MessageType
+var xxx_M2_protoFile_goTypes = []interface{}{
+	(*M2)(nil), // 0: test.b.part2.M2
 }
-var xxx_M2_protoFile_MessageDescs = [1]prototype.Message{
-	{
-		Name: "M2",
-	},
+var xxx_M2_protoFile_depIdxs = []int32{}
+
+func init() {
+	var messageTypes [1]protoreflect.MessageType
+	M2_protoFile = protoimpl.FileBuilder{
+		RawDescriptor:      fileDescriptor_a1becddceeb586f2,
+		GoTypes:            xxx_M2_protoFile_goTypes,
+		DependencyIndexes:  xxx_M2_protoFile_depIdxs,
+		MessageOutputTypes: messageTypes[:],
+	}.Init()
+	messageGoTypes := xxx_M2_protoFile_goTypes[0:][:1]
+	for i, mt := range messageTypes[:] {
+		xxx_M2_protoFile_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
+		xxx_M2_protoFile_messageTypes[i].PBType = mt
+	}
+	xxx_M2_protoFile_goTypes = nil
+	xxx_M2_protoFile_depIdxs = nil
 }

+ 49 - 69
cmd/protoc-gen-go/testdata/imports/test_import_a1m1.pb.go

@@ -4,11 +4,13 @@
 package imports
 
 import (
+	bytes "bytes"
+	gzip "compress/gzip"
 	proto "github.com/golang/protobuf/proto"
 	test_a_1 "github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_a_1"
 	protoreflect "github.com/golang/protobuf/v2/reflect/protoreflect"
-	prototype "github.com/golang/protobuf/v2/reflect/prototype"
 	protoimpl "github.com/golang/protobuf/v2/runtime/protoimpl"
+	reflect "reflect"
 )
 
 // This is a compile-time assertion to ensure that this generated file
@@ -24,29 +26,14 @@ type A1M1 struct {
 	XXX_sizecache        int32        `json:"-"`
 }
 
-type xxx_A1M1 struct{ m *A1M1 }
-
 func (m *A1M1) ProtoReflect() protoreflect.Message {
-	return xxx_A1M1{m}
-}
-func (m xxx_A1M1) Type() protoreflect.MessageType {
-	return xxx_TestImportA1M1_protoFile_MessageTypes[0].Type
-}
-func (m xxx_A1M1) KnownFields() protoreflect.KnownFields {
-	return xxx_TestImportA1M1_protoFile_MessageTypes[0].KnownFieldsOf(m.m)
-}
-func (m xxx_A1M1) UnknownFields() protoreflect.UnknownFields {
-	return xxx_TestImportA1M1_protoFile_MessageTypes[0].UnknownFieldsOf(m.m)
+	return xxx_TestImportA1M1_protoFile_messageTypes[0].MessageOf(m)
 }
-func (m xxx_A1M1) Interface() protoreflect.ProtoMessage {
-	return m.m
-}
-
 func (m *A1M1) Reset()         { *m = A1M1{} }
 func (m *A1M1) String() string { return proto.CompactTextString(m) }
 func (*A1M1) ProtoMessage()    {}
 func (*A1M1) Descriptor() ([]byte, []int) {
-	return fileDescriptor_3b904a47327455f3, []int{0}
+	return fileDescriptor_3b904a47327455f3_gzipped, []int{0}
 }
 
 func (m *A1M1) XXX_Unmarshal(b []byte) error {
@@ -75,66 +62,59 @@ func (m *A1M1) GetF() *test_a_1.M1 {
 }
 
 func init() {
-	proto.RegisterFile("imports/test_import_a1m1.proto", fileDescriptor_3b904a47327455f3)
+	proto.RegisterFile("imports/test_import_a1m1.proto", fileDescriptor_3b904a47327455f3_gzipped)
 	proto.RegisterType((*A1M1)(nil), "test.A1M1")
 }
 
 var fileDescriptor_3b904a47327455f3 = []byte{
-	// 149 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0xcb, 0xcc, 0x2d, 0xc8,
-	0x2f, 0x2a, 0x29, 0xd6, 0x2f, 0x49, 0x2d, 0x2e, 0x89, 0x87, 0x70, 0xe2, 0x13, 0x0d, 0x73, 0x0d,
-	0xf5, 0x0a, 0x8a, 0xf2, 0x4b, 0xf2, 0x85, 0x58, 0x40, 0xe2, 0x52, 0x92, 0x28, 0xaa, 0x12, 0xe3,
-	0x0d, 0xf5, 0x61, 0x0a, 0x94, 0x14, 0xb8, 0x58, 0x1c, 0x0d, 0x7d, 0x0d, 0x85, 0x24, 0xb8, 0x18,
-	0xd3, 0x24, 0x18, 0x15, 0x18, 0x35, 0xb8, 0x8d, 0xb8, 0xf4, 0x40, 0xca, 0xf4, 0x12, 0xf5, 0x7c,
-	0x0d, 0x83, 0x18, 0xd3, 0x9c, 0xac, 0xa3, 0x2c, 0xd3, 0x33, 0x4b, 0x32, 0x4a, 0x93, 0xf4, 0x92,
-	0xf3, 0x73, 0xf5, 0xd3, 0xf3, 0x73, 0x12, 0xf3, 0xd2, 0xf5, 0xc1, 0x9a, 0x93, 0x4a, 0xd3, 0x20,
-	0x8c, 0x64, 0xdd, 0xf4, 0xd4, 0x3c, 0xdd, 0xf4, 0x7c, 0xb0, 0xf9, 0x29, 0x89, 0x25, 0x89, 0xfa,
-	0x50, 0x0b, 0x93, 0xd8, 0xc0, 0xf2, 0xc6, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0x84, 0x2f, 0x18,
-	0x23, 0xa8, 0x00, 0x00, 0x00,
-}
-
-func init() {
-	xxx_TestImportA1M1_protoFile_FileDesc.Messages = xxx_TestImportA1M1_protoFile_MessageDescs[0:1]
-	xxx_TestImportA1M1_protoFile_MessageDescs[0].Fields[0].MessageType = protoimpl.X.MessageTypeOf((*test_a_1.M1)(nil))
-	var err error
-	TestImportA1M1_protoFile, err = prototype.NewFile(&xxx_TestImportA1M1_protoFile_FileDesc)
-	if err != nil {
-		panic(err)
-	}
-}
+	// 168 bytes of the wire-encoded FileDescriptorProto
+	0x0a, 0x1e, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x69,
+	0x6d, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x61, 0x31, 0x6d, 0x31, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x12, 0x04, 0x74, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2f,
+	0x74, 0x65, 0x73, 0x74, 0x5f, 0x61, 0x5f, 0x31, 0x2f, 0x6d, 0x31, 0x2e, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x22, 0x20, 0x0a, 0x04, 0x41, 0x31, 0x4d, 0x31, 0x12, 0x18, 0x0a, 0x01, 0x66, 0x18, 0x01,
+	0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x61, 0x2e, 0x4d, 0x31,
+	0x52, 0x01, 0x66, 0x42, 0x3b, 0x5a, 0x39, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f,
+	0x6d, 0x2f, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
+	0x66, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x67, 0x6f, 0x2f,
+	0x74, 0x65, 0x73, 0x74, 0x64, 0x61, 0x74, 0x61, 0x2f, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x73,
+	0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+}
+
+var fileDescriptor_3b904a47327455f3_gzipped = func() []byte {
+	bb := new(bytes.Buffer)
+	zw, _ := gzip.NewWriterLevel(bb, gzip.NoCompression)
+	zw.Write(fileDescriptor_3b904a47327455f3)
+	zw.Close()
+	return bb.Bytes()
+}()
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
 var TestImportA1M1_protoFile protoreflect.FileDescriptor
 
-var xxx_TestImportA1M1_protoFile_FileDesc = prototype.File{
-	Syntax:  protoreflect.Proto3,
-	Path:    "imports/test_import_a1m1.proto",
-	Package: "test",
-	Imports: []protoreflect.FileImport{
-		{FileDescriptor: prototype.PlaceholderFile("imports/test_a_1/m1.proto", "test.a")},
-	},
+var xxx_TestImportA1M1_protoFile_messageTypes [1]protoimpl.MessageType
+var xxx_TestImportA1M1_protoFile_goTypes = []interface{}{
+	(*A1M1)(nil),        // 0: test.A1M1
+	(*test_a_1.M1)(nil), // 1: test.a.M1
 }
-var xxx_TestImportA1M1_protoFile_MessageTypes = [1]protoimpl.MessageType{
-	{Type: prototype.GoMessage(
-		xxx_TestImportA1M1_protoFile_MessageDescs[0].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_A1M1{new(A1M1)}
-		},
-	)},
+var xxx_TestImportA1M1_protoFile_depIdxs = []int32{
+	1, // test.A1M1.f:type_name -> test.a.M1
 }
-var xxx_TestImportA1M1_protoFile_MessageDescs = [1]prototype.Message{
-	{
-		Name: "A1M1",
-		Fields: []prototype.Field{
-			{
-				Name:        "f",
-				Number:      1,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.MessageKind,
-				JSONName:    "f",
-				IsPacked:    prototype.False,
-			},
-		},
-	},
+
+func init() {
+	var messageTypes [1]protoreflect.MessageType
+	TestImportA1M1_protoFile = protoimpl.FileBuilder{
+		RawDescriptor:      fileDescriptor_3b904a47327455f3,
+		GoTypes:            xxx_TestImportA1M1_protoFile_goTypes,
+		DependencyIndexes:  xxx_TestImportA1M1_protoFile_depIdxs,
+		MessageOutputTypes: messageTypes[:],
+	}.Init()
+	messageGoTypes := xxx_TestImportA1M1_protoFile_goTypes[0:][:1]
+	for i, mt := range messageTypes[:] {
+		xxx_TestImportA1M1_protoFile_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
+		xxx_TestImportA1M1_protoFile_messageTypes[i].PBType = mt
+	}
+	xxx_TestImportA1M1_protoFile_goTypes = nil
+	xxx_TestImportA1M1_protoFile_depIdxs = nil
 }

+ 49 - 69
cmd/protoc-gen-go/testdata/imports/test_import_a1m2.pb.go

@@ -4,11 +4,13 @@
 package imports
 
 import (
+	bytes "bytes"
+	gzip "compress/gzip"
 	proto "github.com/golang/protobuf/proto"
 	test_a_1 "github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_a_1"
 	protoreflect "github.com/golang/protobuf/v2/reflect/protoreflect"
-	prototype "github.com/golang/protobuf/v2/reflect/prototype"
 	protoimpl "github.com/golang/protobuf/v2/runtime/protoimpl"
+	reflect "reflect"
 )
 
 // This is a compile-time assertion to ensure that this generated file
@@ -24,29 +26,14 @@ type A1M2 struct {
 	XXX_sizecache        int32        `json:"-"`
 }
 
-type xxx_A1M2 struct{ m *A1M2 }
-
 func (m *A1M2) ProtoReflect() protoreflect.Message {
-	return xxx_A1M2{m}
-}
-func (m xxx_A1M2) Type() protoreflect.MessageType {
-	return xxx_TestImportA1M2_protoFile_MessageTypes[0].Type
-}
-func (m xxx_A1M2) KnownFields() protoreflect.KnownFields {
-	return xxx_TestImportA1M2_protoFile_MessageTypes[0].KnownFieldsOf(m.m)
-}
-func (m xxx_A1M2) UnknownFields() protoreflect.UnknownFields {
-	return xxx_TestImportA1M2_protoFile_MessageTypes[0].UnknownFieldsOf(m.m)
+	return xxx_TestImportA1M2_protoFile_messageTypes[0].MessageOf(m)
 }
-func (m xxx_A1M2) Interface() protoreflect.ProtoMessage {
-	return m.m
-}
-
 func (m *A1M2) Reset()         { *m = A1M2{} }
 func (m *A1M2) String() string { return proto.CompactTextString(m) }
 func (*A1M2) ProtoMessage()    {}
 func (*A1M2) Descriptor() ([]byte, []int) {
-	return fileDescriptor_bdb27b114687957d, []int{0}
+	return fileDescriptor_bdb27b114687957d_gzipped, []int{0}
 }
 
 func (m *A1M2) XXX_Unmarshal(b []byte) error {
@@ -75,66 +62,59 @@ func (m *A1M2) GetF() *test_a_1.M2 {
 }
 
 func init() {
-	proto.RegisterFile("imports/test_import_a1m2.proto", fileDescriptor_bdb27b114687957d)
+	proto.RegisterFile("imports/test_import_a1m2.proto", fileDescriptor_bdb27b114687957d_gzipped)
 	proto.RegisterType((*A1M2)(nil), "test.A1M2")
 }
 
 var fileDescriptor_bdb27b114687957d = []byte{
-	// 149 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0xcb, 0xcc, 0x2d, 0xc8,
-	0x2f, 0x2a, 0x29, 0xd6, 0x2f, 0x49, 0x2d, 0x2e, 0x89, 0x87, 0x70, 0xe2, 0x13, 0x0d, 0x73, 0x8d,
-	0xf4, 0x0a, 0x8a, 0xf2, 0x4b, 0xf2, 0x85, 0x58, 0x40, 0xe2, 0x52, 0x92, 0x28, 0xaa, 0x12, 0xe3,
-	0x0d, 0xf5, 0x61, 0x0a, 0x94, 0x14, 0xb8, 0x58, 0x1c, 0x0d, 0x7d, 0x8d, 0x84, 0x24, 0xb8, 0x18,
-	0xd3, 0x24, 0x18, 0x15, 0x18, 0x35, 0xb8, 0x8d, 0xb8, 0xf4, 0x40, 0xca, 0xf4, 0x12, 0xf5, 0x7c,
-	0x8d, 0x82, 0x18, 0xd3, 0x9c, 0xac, 0xa3, 0x2c, 0xd3, 0x33, 0x4b, 0x32, 0x4a, 0x93, 0xf4, 0x92,
-	0xf3, 0x73, 0xf5, 0xd3, 0xf3, 0x73, 0x12, 0xf3, 0xd2, 0xf5, 0xc1, 0x9a, 0x93, 0x4a, 0xd3, 0x20,
-	0x8c, 0x64, 0xdd, 0xf4, 0xd4, 0x3c, 0xdd, 0xf4, 0x7c, 0xb0, 0xf9, 0x29, 0x89, 0x25, 0x89, 0xfa,
-	0x50, 0x0b, 0x93, 0xd8, 0xc0, 0xf2, 0xc6, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0x1f, 0x88, 0xfb,
-	0xea, 0xa8, 0x00, 0x00, 0x00,
-}
-
-func init() {
-	xxx_TestImportA1M2_protoFile_FileDesc.Messages = xxx_TestImportA1M2_protoFile_MessageDescs[0:1]
-	xxx_TestImportA1M2_protoFile_MessageDescs[0].Fields[0].MessageType = protoimpl.X.MessageTypeOf((*test_a_1.M2)(nil))
-	var err error
-	TestImportA1M2_protoFile, err = prototype.NewFile(&xxx_TestImportA1M2_protoFile_FileDesc)
-	if err != nil {
-		panic(err)
-	}
-}
+	// 168 bytes of the wire-encoded FileDescriptorProto
+	0x0a, 0x1e, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x69,
+	0x6d, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x61, 0x31, 0x6d, 0x32, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x12, 0x04, 0x74, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2f,
+	0x74, 0x65, 0x73, 0x74, 0x5f, 0x61, 0x5f, 0x31, 0x2f, 0x6d, 0x32, 0x2e, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x22, 0x20, 0x0a, 0x04, 0x41, 0x31, 0x4d, 0x32, 0x12, 0x18, 0x0a, 0x01, 0x66, 0x18, 0x01,
+	0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x61, 0x2e, 0x4d, 0x32,
+	0x52, 0x01, 0x66, 0x42, 0x3b, 0x5a, 0x39, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f,
+	0x6d, 0x2f, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
+	0x66, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x67, 0x6f, 0x2f,
+	0x74, 0x65, 0x73, 0x74, 0x64, 0x61, 0x74, 0x61, 0x2f, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x73,
+	0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+}
+
+var fileDescriptor_bdb27b114687957d_gzipped = func() []byte {
+	bb := new(bytes.Buffer)
+	zw, _ := gzip.NewWriterLevel(bb, gzip.NoCompression)
+	zw.Write(fileDescriptor_bdb27b114687957d)
+	zw.Close()
+	return bb.Bytes()
+}()
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
 var TestImportA1M2_protoFile protoreflect.FileDescriptor
 
-var xxx_TestImportA1M2_protoFile_FileDesc = prototype.File{
-	Syntax:  protoreflect.Proto3,
-	Path:    "imports/test_import_a1m2.proto",
-	Package: "test",
-	Imports: []protoreflect.FileImport{
-		{FileDescriptor: prototype.PlaceholderFile("imports/test_a_1/m2.proto", "test.a")},
-	},
+var xxx_TestImportA1M2_protoFile_messageTypes [1]protoimpl.MessageType
+var xxx_TestImportA1M2_protoFile_goTypes = []interface{}{
+	(*A1M2)(nil),        // 0: test.A1M2
+	(*test_a_1.M2)(nil), // 1: test.a.M2
 }
-var xxx_TestImportA1M2_protoFile_MessageTypes = [1]protoimpl.MessageType{
-	{Type: prototype.GoMessage(
-		xxx_TestImportA1M2_protoFile_MessageDescs[0].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_A1M2{new(A1M2)}
-		},
-	)},
+var xxx_TestImportA1M2_protoFile_depIdxs = []int32{
+	1, // test.A1M2.f:type_name -> test.a.M2
 }
-var xxx_TestImportA1M2_protoFile_MessageDescs = [1]prototype.Message{
-	{
-		Name: "A1M2",
-		Fields: []prototype.Field{
-			{
-				Name:        "f",
-				Number:      1,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.MessageKind,
-				JSONName:    "f",
-				IsPacked:    prototype.False,
-			},
-		},
-	},
+
+func init() {
+	var messageTypes [1]protoreflect.MessageType
+	TestImportA1M2_protoFile = protoimpl.FileBuilder{
+		RawDescriptor:      fileDescriptor_bdb27b114687957d,
+		GoTypes:            xxx_TestImportA1M2_protoFile_goTypes,
+		DependencyIndexes:  xxx_TestImportA1M2_protoFile_depIdxs,
+		MessageOutputTypes: messageTypes[:],
+	}.Init()
+	messageGoTypes := xxx_TestImportA1M2_protoFile_goTypes[0:][:1]
+	for i, mt := range messageTypes[:] {
+		xxx_TestImportA1M2_protoFile_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
+		xxx_TestImportA1M2_protoFile_messageTypes[i].PBType = mt
+	}
+	xxx_TestImportA1M2_protoFile_goTypes = nil
+	xxx_TestImportA1M2_protoFile_depIdxs = nil
 }

+ 77 - 119
cmd/protoc-gen-go/testdata/imports/test_import_all.pb.go

@@ -4,14 +4,16 @@
 package imports
 
 import (
+	bytes "bytes"
+	gzip "compress/gzip"
 	proto "github.com/golang/protobuf/proto"
 	fmt "github.com/golang/protobuf/protoc-gen-go/testdata/imports/fmt"
 	test_a_1 "github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_a_1"
 	_ "github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_a_2"
 	test_b_1 "github.com/golang/protobuf/protoc-gen-go/testdata/imports/test_b_1"
 	protoreflect "github.com/golang/protobuf/v2/reflect/protoreflect"
-	prototype "github.com/golang/protobuf/v2/reflect/prototype"
 	protoimpl "github.com/golang/protobuf/v2/runtime/protoimpl"
+	reflect "reflect"
 )
 
 // This is a compile-time assertion to ensure that this generated file
@@ -31,29 +33,14 @@ type All struct {
 	XXX_sizecache        int32        `json:"-"`
 }
 
-type xxx_All struct{ m *All }
-
 func (m *All) ProtoReflect() protoreflect.Message {
-	return xxx_All{m}
-}
-func (m xxx_All) Type() protoreflect.MessageType {
-	return xxx_TestImportAll_protoFile_MessageTypes[0].Type
-}
-func (m xxx_All) KnownFields() protoreflect.KnownFields {
-	return xxx_TestImportAll_protoFile_MessageTypes[0].KnownFieldsOf(m.m)
-}
-func (m xxx_All) UnknownFields() protoreflect.UnknownFields {
-	return xxx_TestImportAll_protoFile_MessageTypes[0].UnknownFieldsOf(m.m)
+	return xxx_TestImportAll_protoFile_messageTypes[0].MessageOf(m)
 }
-func (m xxx_All) Interface() protoreflect.ProtoMessage {
-	return m.m
-}
-
 func (m *All) Reset()         { *m = All{} }
 func (m *All) String() string { return proto.CompactTextString(m) }
 func (*All) ProtoMessage()    {}
 func (*All) Descriptor() ([]byte, []int) {
-	return fileDescriptor_324466f0afc16f77, []int{0}
+	return fileDescriptor_324466f0afc16f77_gzipped, []int{0}
 }
 
 func (m *All) XXX_Unmarshal(b []byte) error {
@@ -110,114 +97,85 @@ func (m *All) GetFmt() *fmt.M {
 }
 
 func init() {
-	proto.RegisterFile("imports/test_import_all.proto", fileDescriptor_324466f0afc16f77)
+	proto.RegisterFile("imports/test_import_all.proto", fileDescriptor_324466f0afc16f77_gzipped)
 	proto.RegisterType((*All)(nil), "test.All")
 }
 
 var fileDescriptor_324466f0afc16f77 = []byte{
-	// 242 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0xcf, 0xb1, 0x4e, 0xc3, 0x30,
-	0x10, 0x06, 0x60, 0x85, 0x40, 0x90, 0xcc, 0x82, 0xc2, 0x62, 0x10, 0x48, 0xa8, 0x13, 0x4b, 0x6d,
-	0xf9, 0xca, 0x82, 0x98, 0x60, 0xef, 0xd2, 0x91, 0x25, 0xf2, 0x95, 0xda, 0x54, 0xf2, 0xd5, 0x51,
-	0x7a, 0x7d, 0x22, 0x5e, 0x14, 0xd9, 0x06, 0x09, 0x68, 0xb2, 0x25, 0xff, 0xf7, 0xfb, 0x4e, 0x27,
-	0xee, 0xb6, 0xd4, 0xc7, 0x81, 0xf7, 0x9a, 0x37, 0x7b, 0xee, 0xca, 0x4f, 0x67, 0x43, 0x50, 0xfd,
-	0x10, 0x39, 0xb6, 0xa7, 0x29, 0xbe, 0xb9, 0xfe, 0x53, 0xb2, 0x9d, 0xd1, 0x64, 0x4a, 0x61, 0x8c,
-	0x60, 0x82, 0x40, 0xd3, 0x62, 0x9a, 0x1e, 0x47, 0x09, 0xa7, 0x77, 0xe1, 0xef, 0x5d, 0x57, 0x3f,
-	0xe4, 0x88, 0x35, 0x95, 0x70, 0xf6, 0x59, 0x89, 0xfa, 0x25, 0x84, 0xf6, 0x56, 0xd4, 0x96, 0x8c,
-	0xac, 0xee, 0xab, 0x87, 0x0b, 0x10, 0x2a, 0xbd, 0x56, 0x56, 0x2d, 0xcd, 0x2a, 0xc5, 0x45, 0x41,
-	0x9e, 0xfc, 0x53, 0x48, 0x0a, 0xed, 0x4c, 0xd4, 0x48, 0x46, 0x9e, 0x65, 0xbd, 0x2c, 0x8a, 0xaa,
-	0xb7, 0x03, 0x9b, 0x3c, 0x01, 0xc9, 0x94, 0x0e, 0xc8, 0xe6, 0xb8, 0x03, 0x79, 0x0e, 0x12, 0xb4,
-	0x52, 0xd4, 0x8e, 0x58, 0x9e, 0xe7, 0x4e, 0xa3, 0x1c, 0xb1, 0x5a, 0xae, 0x52, 0xf4, 0xfa, 0xfc,
-	0xf6, 0xe4, 0xb7, 0xfc, 0x71, 0x40, 0xb5, 0x8e, 0xa4, 0x7d, 0x0c, 0x76, 0xe7, 0x75, 0x3e, 0x00,
-	0x0f, 0xae, 0x7c, 0xac, 0xe7, 0x7e, 0xb3, 0x9b, 0xfb, 0x98, 0x0f, 0x7f, 0xb7, 0x6c, 0xf5, 0xf7,
-	0xb9, 0xd8, 0x64, 0x5f, 0x7c, 0x05, 0x00, 0x00, 0xff, 0xff, 0x88, 0x0e, 0xe2, 0x9f, 0xc7, 0x01,
-	0x00, 0x00,
-}
-
-func init() {
-	xxx_TestImportAll_protoFile_FileDesc.Messages = xxx_TestImportAll_protoFile_MessageDescs[0:1]
-	xxx_TestImportAll_protoFile_MessageDescs[0].Fields[0].MessageType = protoimpl.X.MessageTypeOf((*test_a_1.M1)(nil))
-	xxx_TestImportAll_protoFile_MessageDescs[0].Fields[1].MessageType = protoimpl.X.MessageTypeOf((*test_a_1.M2)(nil))
-	xxx_TestImportAll_protoFile_MessageDescs[0].Fields[2].MessageType = protoimpl.X.MessageTypeOf((*test_b_1.M1)(nil))
-	xxx_TestImportAll_protoFile_MessageDescs[0].Fields[3].MessageType = protoimpl.X.MessageTypeOf((*test_b_1.M2)(nil))
-	xxx_TestImportAll_protoFile_MessageDescs[0].Fields[4].MessageType = protoimpl.X.MessageTypeOf((*fmt.M)(nil))
-	var err error
-	TestImportAll_protoFile, err = prototype.NewFile(&xxx_TestImportAll_protoFile_FileDesc)
-	if err != nil {
-		panic(err)
-	}
-}
+	// 455 bytes of the wire-encoded FileDescriptorProto
+	0x0a, 0x1d, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x69,
+	0x6d, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x61, 0x6c, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12,
+	0x04, 0x74, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2f, 0x74,
+	0x65, 0x73, 0x74, 0x5f, 0x61, 0x5f, 0x31, 0x2f, 0x6d, 0x31, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x1a, 0x19, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x61,
+	0x5f, 0x31, 0x2f, 0x6d, 0x32, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x69, 0x6d, 0x70,
+	0x6f, 0x72, 0x74, 0x73, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x61, 0x5f, 0x32, 0x2f, 0x6d, 0x33,
+	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2f,
+	0x74, 0x65, 0x73, 0x74, 0x5f, 0x61, 0x5f, 0x32, 0x2f, 0x6d, 0x34, 0x2e, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x1a, 0x19, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x5f,
+	0x62, 0x5f, 0x31, 0x2f, 0x6d, 0x31, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x69, 0x6d,
+	0x70, 0x6f, 0x72, 0x74, 0x73, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x62, 0x5f, 0x31, 0x2f, 0x6d,
+	0x32, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x13, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x73,
+	0x2f, 0x66, 0x6d, 0x74, 0x2f, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xa3, 0x01, 0x0a,
+	0x03, 0x41, 0x6c, 0x6c, 0x12, 0x1c, 0x0a, 0x03, 0x61, 0x6d, 0x31, 0x18, 0x01, 0x20, 0x01, 0x28,
+	0x0b, 0x32, 0x0a, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x61, 0x2e, 0x4d, 0x31, 0x52, 0x03, 0x61,
+	0x6d, 0x31, 0x12, 0x1c, 0x0a, 0x03, 0x61, 0x6d, 0x32, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x0a, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x61, 0x2e, 0x4d, 0x32, 0x52, 0x03, 0x61, 0x6d, 0x32,
+	0x12, 0x22, 0x0a, 0x03, 0x62, 0x6d, 0x31, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e,
+	0x74, 0x65, 0x73, 0x74, 0x2e, 0x62, 0x2e, 0x70, 0x61, 0x72, 0x74, 0x31, 0x2e, 0x4d, 0x31, 0x52,
+	0x03, 0x62, 0x6d, 0x31, 0x12, 0x22, 0x0a, 0x03, 0x62, 0x6d, 0x32, 0x18, 0x06, 0x20, 0x01, 0x28,
+	0x0b, 0x32, 0x10, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x62, 0x2e, 0x70, 0x61, 0x72, 0x74, 0x32,
+	0x2e, 0x4d, 0x32, 0x52, 0x03, 0x62, 0x6d, 0x32, 0x12, 0x18, 0x0a, 0x03, 0x66, 0x6d, 0x74, 0x18,
+	0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x06, 0x2e, 0x66, 0x6d, 0x74, 0x2e, 0x4d, 0x52, 0x03, 0x66,
+	0x6d, 0x74, 0x42, 0x3b, 0x5a, 0x39, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d,
+	0x2f, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,
+	0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x67, 0x6f, 0x2f, 0x74,
+	0x65, 0x73, 0x74, 0x64, 0x61, 0x74, 0x61, 0x2f, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x62,
+	0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+}
+
+var fileDescriptor_324466f0afc16f77_gzipped = func() []byte {
+	bb := new(bytes.Buffer)
+	zw, _ := gzip.NewWriterLevel(bb, gzip.NoCompression)
+	zw.Write(fileDescriptor_324466f0afc16f77)
+	zw.Close()
+	return bb.Bytes()
+}()
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
 var TestImportAll_protoFile protoreflect.FileDescriptor
 
-var xxx_TestImportAll_protoFile_FileDesc = prototype.File{
-	Syntax:  protoreflect.Proto3,
-	Path:    "imports/test_import_all.proto",
-	Package: "test",
-	Imports: []protoreflect.FileImport{
-		{FileDescriptor: prototype.PlaceholderFile("imports/test_a_1/m1.proto", "test.a")},
-		{FileDescriptor: prototype.PlaceholderFile("imports/test_a_1/m2.proto", "test.a")},
-		{FileDescriptor: prototype.PlaceholderFile("imports/test_a_2/m3.proto", "test.a")},
-		{FileDescriptor: prototype.PlaceholderFile("imports/test_a_2/m4.proto", "test.a")},
-		{FileDescriptor: prototype.PlaceholderFile("imports/test_b_1/m1.proto", "test.b.part1")},
-		{FileDescriptor: prototype.PlaceholderFile("imports/test_b_1/m2.proto", "test.b.part2")},
-		{FileDescriptor: prototype.PlaceholderFile("imports/fmt/m.proto", "fmt")},
-	},
-}
-var xxx_TestImportAll_protoFile_MessageTypes = [1]protoimpl.MessageType{
-	{Type: prototype.GoMessage(
-		xxx_TestImportAll_protoFile_MessageDescs[0].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_All{new(All)}
-		},
-	)},
-}
-var xxx_TestImportAll_protoFile_MessageDescs = [1]prototype.Message{
-	{
-		Name: "All",
-		Fields: []prototype.Field{
-			{
-				Name:        "am1",
-				Number:      1,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.MessageKind,
-				JSONName:    "am1",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "am2",
-				Number:      2,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.MessageKind,
-				JSONName:    "am2",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "bm1",
-				Number:      5,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.MessageKind,
-				JSONName:    "bm1",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "bm2",
-				Number:      6,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.MessageKind,
-				JSONName:    "bm2",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "fmt",
-				Number:      7,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.MessageKind,
-				JSONName:    "fmt",
-				IsPacked:    prototype.False,
-			},
-		},
-	},
+var xxx_TestImportAll_protoFile_messageTypes [1]protoimpl.MessageType
+var xxx_TestImportAll_protoFile_goTypes = []interface{}{
+	(*All)(nil),         // 0: test.All
+	(*test_a_1.M1)(nil), // 1: test.a.M1
+	(*test_a_1.M2)(nil), // 2: test.a.M2
+	(*test_b_1.M1)(nil), // 3: test.b.part1.M1
+	(*test_b_1.M2)(nil), // 4: test.b.part2.M2
+	(*fmt.M)(nil),       // 5: fmt.M
+}
+var xxx_TestImportAll_protoFile_depIdxs = []int32{
+	1, // test.All.am1:type_name -> test.a.M1
+	2, // test.All.am2:type_name -> test.a.M2
+	3, // test.All.bm1:type_name -> test.b.part1.M1
+	4, // test.All.bm2:type_name -> test.b.part2.M2
+	5, // test.All.fmt:type_name -> fmt.M
+}
+
+func init() {
+	var messageTypes [1]protoreflect.MessageType
+	TestImportAll_protoFile = protoimpl.FileBuilder{
+		RawDescriptor:      fileDescriptor_324466f0afc16f77,
+		GoTypes:            xxx_TestImportAll_protoFile_goTypes,
+		DependencyIndexes:  xxx_TestImportAll_protoFile_depIdxs,
+		MessageOutputTypes: messageTypes[:],
+	}.Init()
+	messageGoTypes := xxx_TestImportAll_protoFile_goTypes[0:][:1]
+	for i, mt := range messageTypes[:] {
+		xxx_TestImportAll_protoFile_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
+		xxx_TestImportAll_protoFile_messageTypes[i].PBType = mt
+	}
+	xxx_TestImportAll_protoFile_goTypes = nil
+	xxx_TestImportAll_protoFile_depIdxs = nil
 }

+ 43 - 68
cmd/protoc-gen-go/testdata/issue780_oneof_conflict/test.pb.go

@@ -4,10 +4,12 @@
 package oneoftest
 
 import (
+	bytes "bytes"
+	gzip "compress/gzip"
 	proto "github.com/golang/protobuf/proto"
 	protoreflect "github.com/golang/protobuf/v2/reflect/protoreflect"
-	prototype "github.com/golang/protobuf/v2/reflect/prototype"
 	protoimpl "github.com/golang/protobuf/v2/runtime/protoimpl"
+	reflect "reflect"
 )
 
 // This is a compile-time assertion to ensure that this generated file
@@ -25,29 +27,14 @@ type Foo struct {
 	XXX_sizecache        int32     `json:"-"`
 }
 
-type xxx_Foo struct{ m *Foo }
-
 func (m *Foo) ProtoReflect() protoreflect.Message {
-	return xxx_Foo{m}
-}
-func (m xxx_Foo) Type() protoreflect.MessageType {
-	return xxx_Test_protoFile_MessageTypes[0].Type
-}
-func (m xxx_Foo) KnownFields() protoreflect.KnownFields {
-	return xxx_Test_protoFile_MessageTypes[0].KnownFieldsOf(m.m)
-}
-func (m xxx_Foo) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Test_protoFile_MessageTypes[0].UnknownFieldsOf(m.m)
+	return xxx_Test_protoFile_messageTypes[0].MessageOf(m)
 }
-func (m xxx_Foo) Interface() protoreflect.ProtoMessage {
-	return m.m
-}
-
 func (m *Foo) Reset()         { *m = Foo{} }
 func (m *Foo) String() string { return proto.CompactTextString(m) }
 func (*Foo) ProtoMessage()    {}
 func (*Foo) Descriptor() ([]byte, []int) {
-	return fileDescriptor_48462cafc802a68e, []int{0}
+	return fileDescriptor_48462cafc802a68e_gzipped, []int{0}
 }
 
 func (m *Foo) XXX_Unmarshal(b []byte) error {
@@ -100,63 +87,51 @@ func (*Foo) XXX_OneofWrappers() []interface{} {
 }
 
 func init() {
-	proto.RegisterFile("issue780_oneof_conflict/test.proto", fileDescriptor_48462cafc802a68e)
+	proto.RegisterFile("issue780_oneof_conflict/test.proto", fileDescriptor_48462cafc802a68e_gzipped)
 	proto.RegisterType((*Foo)(nil), "oneoftest.Foo")
 }
 
 var fileDescriptor_48462cafc802a68e = []byte{
-	// 107 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0xca, 0x2c, 0x2e, 0x2e,
-	0x4d, 0x35, 0xb7, 0x30, 0x88, 0xcf, 0xcf, 0x4b, 0xcd, 0x4f, 0x8b, 0x4f, 0xce, 0xcf, 0x4b, 0xcb,
-	0xc9, 0x4c, 0x2e, 0xd1, 0x2f, 0x49, 0x2d, 0x2e, 0xd1, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0xe2,
-	0x04, 0x4b, 0x81, 0x04, 0x94, 0xd4, 0xb9, 0x98, 0xdd, 0xf2, 0xf3, 0x85, 0x24, 0xb9, 0xd8, 0xd3,
-	0x53, 0x4b, 0xe2, 0x93, 0x12, 0x8b, 0x24, 0x18, 0x15, 0x18, 0x35, 0x38, 0x3d, 0x18, 0x82, 0xd8,
-	0xd2, 0x53, 0x4b, 0x9c, 0x12, 0x8b, 0x9c, 0x58, 0xb9, 0x98, 0x93, 0x12, 0x8b, 0x00, 0x01, 0x00,
-	0x00, 0xff, 0xff, 0x12, 0x66, 0x0c, 0x02, 0x58, 0x00, 0x00, 0x00,
-}
-
-func init() {
-	xxx_Test_protoFile_FileDesc.Messages = xxx_Test_protoFile_MessageDescs[0:1]
-	var err error
-	Test_protoFile, err = prototype.NewFile(&xxx_Test_protoFile_FileDesc)
-	if err != nil {
-		panic(err)
-	}
-}
+	// 88 bytes of the wire-encoded FileDescriptorProto
+	0x0a, 0x22, 0x69, 0x73, 0x73, 0x75, 0x65, 0x37, 0x38, 0x30, 0x5f, 0x6f, 0x6e, 0x65, 0x6f, 0x66,
+	0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x12, 0x09, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x74, 0x65, 0x73, 0x74, 0x22,
+	0x27, 0x0a, 0x03, 0x46, 0x6f, 0x6f, 0x12, 0x19, 0x0a, 0x07, 0x67, 0x65, 0x74, 0x5f, 0x62, 0x61,
+	0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x06, 0x67, 0x65, 0x74, 0x42, 0x61,
+	0x72, 0x42, 0x05, 0x0a, 0x03, 0x62, 0x61, 0x72,
+}
+
+var fileDescriptor_48462cafc802a68e_gzipped = func() []byte {
+	bb := new(bytes.Buffer)
+	zw, _ := gzip.NewWriterLevel(bb, gzip.NoCompression)
+	zw.Write(fileDescriptor_48462cafc802a68e)
+	zw.Close()
+	return bb.Bytes()
+}()
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
 var Test_protoFile protoreflect.FileDescriptor
 
-var xxx_Test_protoFile_FileDesc = prototype.File{
-	Syntax:  protoreflect.Proto2,
-	Path:    "issue780_oneof_conflict/test.proto",
-	Package: "oneoftest",
-}
-var xxx_Test_protoFile_MessageTypes = [1]protoimpl.MessageType{
-	{Type: prototype.GoMessage(
-		xxx_Test_protoFile_MessageDescs[0].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_Foo{new(Foo)}
-		},
-	)},
-}
-var xxx_Test_protoFile_MessageDescs = [1]prototype.Message{
-	{
-		Name: "Foo",
-		Fields: []prototype.Field{
-			{
-				Name:        "get_bar",
-				Number:      1,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.StringKind,
-				JSONName:    "getBar",
-				OneofName:   "bar",
-				IsPacked:    prototype.False,
-			},
-		},
-		Oneofs: []prototype.Oneof{
-			{Name: "bar"},
-		},
-	},
+var xxx_Test_protoFile_messageTypes [1]protoimpl.MessageType
+var xxx_Test_protoFile_goTypes = []interface{}{
+	(*Foo)(nil), // 0: oneoftest.Foo
+}
+var xxx_Test_protoFile_depIdxs = []int32{}
+
+func init() {
+	var messageTypes [1]protoreflect.MessageType
+	Test_protoFile = protoimpl.FileBuilder{
+		RawDescriptor:      fileDescriptor_48462cafc802a68e,
+		GoTypes:            xxx_Test_protoFile_goTypes,
+		DependencyIndexes:  xxx_Test_protoFile_depIdxs,
+		MessageOutputTypes: messageTypes[:],
+	}.Init()
+	messageGoTypes := xxx_Test_protoFile_goTypes[0:][:1]
+	for i, mt := range messageTypes[:] {
+		xxx_Test_protoFile_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
+		xxx_Test_protoFile_messageTypes[i].PBType = mt
+	}
+	xxx_Test_protoFile_goTypes = nil
+	xxx_Test_protoFile_depIdxs = nil
 }

+ 53 - 95
cmd/protoc-gen-go/testdata/nopackage/nopackage.pb.go

@@ -4,10 +4,12 @@
 package nopackage
 
 import (
+	bytes "bytes"
+	gzip "compress/gzip"
 	proto "github.com/golang/protobuf/proto"
 	protoreflect "github.com/golang/protobuf/v2/reflect/protoreflect"
-	prototype "github.com/golang/protobuf/v2/reflect/prototype"
 	protoimpl "github.com/golang/protobuf/v2/runtime/protoimpl"
+	reflect "reflect"
 )
 
 // This is a compile-time assertion to ensure that this generated file
@@ -23,7 +25,7 @@ const (
 )
 
 func (e Enum) Type() protoreflect.EnumType {
-	return xxx_Nopackage_protoFile_EnumTypes[0]
+	return xxx_Nopackage_protoFile_enumTypes[0]
 }
 func (e Enum) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -57,7 +59,7 @@ func (x *Enum) UnmarshalJSON(data []byte) error {
 }
 
 func (Enum) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_f33a1d5d178c43c9, []int{0}
+	return fileDescriptor_f33a1d5d178c43c9_gzipped, []int{0}
 }
 
 type Message struct {
@@ -68,29 +70,14 @@ type Message struct {
 	XXX_sizecache        int32    `json:"-"`
 }
 
-type xxx_Message struct{ m *Message }
-
 func (m *Message) ProtoReflect() protoreflect.Message {
-	return xxx_Message{m}
-}
-func (m xxx_Message) Type() protoreflect.MessageType {
-	return xxx_Nopackage_protoFile_MessageTypes[0].Type
-}
-func (m xxx_Message) KnownFields() protoreflect.KnownFields {
-	return xxx_Nopackage_protoFile_MessageTypes[0].KnownFieldsOf(m.m)
-}
-func (m xxx_Message) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Nopackage_protoFile_MessageTypes[0].UnknownFieldsOf(m.m)
-}
-func (m xxx_Message) Interface() protoreflect.ProtoMessage {
-	return m.m
+	return xxx_Nopackage_protoFile_messageTypes[0].MessageOf(m)
 }
-
 func (m *Message) Reset()         { *m = Message{} }
 func (m *Message) String() string { return proto.CompactTextString(m) }
 func (*Message) ProtoMessage()    {}
 func (*Message) Descriptor() ([]byte, []int) {
-	return fileDescriptor_f33a1d5d178c43c9, []int{0}
+	return fileDescriptor_f33a1d5d178c43c9_gzipped, []int{0}
 }
 
 func (m *Message) XXX_Unmarshal(b []byte) error {
@@ -128,89 +115,60 @@ func (m *Message) GetEnumField() Enum {
 }
 
 func init() {
-	proto.RegisterFile("nopackage/nopackage.proto", fileDescriptor_f33a1d5d178c43c9)
+	proto.RegisterFile("nopackage/nopackage.proto", fileDescriptor_f33a1d5d178c43c9_gzipped)
 	proto.RegisterEnum("Enum", Enum_name, Enum_value)
 	proto.RegisterType((*Message)(nil), "Message")
 }
 
 var fileDescriptor_f33a1d5d178c43c9 = []byte{
-	// 130 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0xcc, 0xcb, 0x2f, 0x48,
-	0x4c, 0xce, 0x4e, 0x4c, 0x4f, 0xd5, 0x87, 0xb3, 0xf4, 0x0a, 0x8a, 0xf2, 0x4b, 0xf2, 0x95, 0x22,
-	0xb8, 0xd8, 0x7d, 0x53, 0x8b, 0x8b, 0x13, 0xd3, 0x53, 0x85, 0x14, 0xb9, 0x78, 0x8a, 0x4b, 0x8a,
-	0x32, 0xf3, 0xd2, 0xe3, 0xd3, 0x32, 0x53, 0x73, 0x52, 0x24, 0x18, 0x15, 0x18, 0x35, 0x38, 0x83,
-	0xb8, 0x21, 0x62, 0x6e, 0x20, 0x21, 0x21, 0x2d, 0x2e, 0xae, 0xd4, 0xbc, 0xd2, 0x5c, 0xa8, 0x02,
-	0x26, 0x05, 0x46, 0x0d, 0x3e, 0x23, 0x56, 0x3d, 0xd7, 0xbc, 0xd2, 0x5c, 0x2b, 0x96, 0x28, 0xd7,
-	0x20, 0xff, 0x20, 0x4e, 0x90, 0x34, 0x58, 0xad, 0x96, 0x00, 0x17, 0x0b, 0x48, 0x42, 0x88, 0x83,
-	0x0b, 0x2c, 0x25, 0xc0, 0x00, 0x08, 0x00, 0x00, 0xff, 0xff, 0x31, 0x29, 0xe4, 0xb2, 0x87, 0x00,
-	0x00, 0x00,
-}
-
-func init() {
-	xxx_Nopackage_protoFile_FileDesc.Enums = xxx_Nopackage_protoFile_EnumDescs[0:1]
-	xxx_Nopackage_protoFile_FileDesc.Messages = xxx_Nopackage_protoFile_MessageDescs[0:1]
-	xxx_Nopackage_protoFile_MessageDescs[0].Fields[1].EnumType = xxx_Nopackage_protoFile_EnumTypes[0]
-	var err error
-	Nopackage_protoFile, err = prototype.NewFile(&xxx_Nopackage_protoFile_FileDesc)
-	if err != nil {
-		panic(err)
-	}
-}
+	// 135 bytes of the wire-encoded FileDescriptorProto
+	0x0a, 0x19, 0x6e, 0x6f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x2f, 0x6e, 0x6f, 0x70, 0x61,
+	0x63, 0x6b, 0x61, 0x67, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x58, 0x0a, 0x07, 0x4d,
+	0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67,
+	0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x74,
+	0x72, 0x69, 0x6e, 0x67, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x2a, 0x0a, 0x0a, 0x65, 0x6e, 0x75,
+	0x6d, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x05, 0x2e,
+	0x45, 0x6e, 0x75, 0x6d, 0x3a, 0x04, 0x5a, 0x45, 0x52, 0x4f, 0x52, 0x09, 0x65, 0x6e, 0x75, 0x6d,
+	0x46, 0x69, 0x65, 0x6c, 0x64, 0x2a, 0x10, 0x0a, 0x04, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x08, 0x0a,
+	0x04, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00,
+}
+
+var fileDescriptor_f33a1d5d178c43c9_gzipped = func() []byte {
+	bb := new(bytes.Buffer)
+	zw, _ := gzip.NewWriterLevel(bb, gzip.NoCompression)
+	zw.Write(fileDescriptor_f33a1d5d178c43c9)
+	zw.Close()
+	return bb.Bytes()
+}()
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
 var Nopackage_protoFile protoreflect.FileDescriptor
 
-var xxx_Nopackage_protoFile_FileDesc = prototype.File{
-	Syntax:  protoreflect.Proto2,
-	Path:    "nopackage/nopackage.proto",
-	Package: "",
-}
-var xxx_Nopackage_protoFile_EnumTypes = [1]protoreflect.EnumType{
-	prototype.GoEnum(
-		xxx_Nopackage_protoFile_EnumDescs[0].Reference(),
-		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
-			return Enum(n)
-		},
-	),
-}
-var xxx_Nopackage_protoFile_EnumDescs = [1]prototype.Enum{
-	{
-		Name: "Enum",
-		Values: []prototype.EnumValue{
-			{Name: "ZERO", Number: 0},
-		},
-	},
-}
-var xxx_Nopackage_protoFile_MessageTypes = [1]protoimpl.MessageType{
-	{Type: prototype.GoMessage(
-		xxx_Nopackage_protoFile_MessageDescs[0].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_Message{new(Message)}
-		},
-	)},
-}
-var xxx_Nopackage_protoFile_MessageDescs = [1]prototype.Message{
-	{
-		Name: "Message",
-		Fields: []prototype.Field{
-			{
-				Name:        "string_field",
-				Number:      1,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.StringKind,
-				JSONName:    "stringField",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "enum_field",
-				Number:      2,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.EnumKind,
-				JSONName:    "enumField",
-				Default:     protoreflect.ValueOf(string("ZERO")),
-				IsPacked:    prototype.False,
-			},
-		},
-	},
+var xxx_Nopackage_protoFile_enumTypes [1]protoreflect.EnumType
+var xxx_Nopackage_protoFile_messageTypes [1]protoimpl.MessageType
+var xxx_Nopackage_protoFile_goTypes = []interface{}{
+	(Enum)(0),       // 0: Enum
+	(*Message)(nil), // 1: Message
+}
+var xxx_Nopackage_protoFile_depIdxs = []int32{
+	0, // Message.enum_field:type_name -> Enum
+}
+
+func init() {
+	var messageTypes [1]protoreflect.MessageType
+	Nopackage_protoFile = protoimpl.FileBuilder{
+		RawDescriptor:      fileDescriptor_f33a1d5d178c43c9,
+		GoTypes:            xxx_Nopackage_protoFile_goTypes,
+		DependencyIndexes:  xxx_Nopackage_protoFile_depIdxs,
+		EnumOutputTypes:    xxx_Nopackage_protoFile_enumTypes[:],
+		MessageOutputTypes: messageTypes[:],
+	}.Init()
+	messageGoTypes := xxx_Nopackage_protoFile_goTypes[1:][:1]
+	for i, mt := range messageTypes[:] {
+		xxx_Nopackage_protoFile_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
+		xxx_Nopackage_protoFile_messageTypes[i].PBType = mt
+	}
+	xxx_Nopackage_protoFile_goTypes = nil
+	xxx_Nopackage_protoFile_depIdxs = nil
 }

+ 102 - 213
cmd/protoc-gen-go/testdata/proto2/enum.pb.go

@@ -4,10 +4,12 @@
 package proto2
 
 import (
+	bytes "bytes"
+	gzip "compress/gzip"
 	proto "github.com/golang/protobuf/proto"
 	protoreflect "github.com/golang/protobuf/v2/reflect/protoreflect"
-	prototype "github.com/golang/protobuf/v2/reflect/prototype"
 	protoimpl "github.com/golang/protobuf/v2/runtime/protoimpl"
+	reflect "reflect"
 )
 
 // This is a compile-time assertion to ensure that this generated file
@@ -27,7 +29,7 @@ const (
 )
 
 func (e EnumType1) Type() protoreflect.EnumType {
-	return xxx_Enum_protoFile_EnumTypes[0]
+	return xxx_Enum_protoFile_enumTypes[0]
 }
 func (e EnumType1) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -63,7 +65,7 @@ func (x *EnumType1) UnmarshalJSON(data []byte) error {
 }
 
 func (EnumType1) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_de9f68860d540858, []int{0}
+	return fileDescriptor_de9f68860d540858_gzipped, []int{0}
 }
 
 type EnumType2 int32
@@ -74,7 +76,7 @@ const (
 )
 
 func (e EnumType2) Type() protoreflect.EnumType {
-	return xxx_Enum_protoFile_EnumTypes[1]
+	return xxx_Enum_protoFile_enumTypes[1]
 }
 func (e EnumType2) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -110,7 +112,7 @@ func (x *EnumType2) UnmarshalJSON(data []byte) error {
 }
 
 func (EnumType2) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_de9f68860d540858, []int{1}
+	return fileDescriptor_de9f68860d540858_gzipped, []int{1}
 }
 
 // NestedEnumType1A comment.
@@ -122,7 +124,7 @@ const (
 )
 
 func (e EnumContainerMessage1_NestedEnumType1A) Type() protoreflect.EnumType {
-	return xxx_Enum_protoFile_EnumTypes[2]
+	return xxx_Enum_protoFile_enumTypes[2]
 }
 func (e EnumContainerMessage1_NestedEnumType1A) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -156,7 +158,7 @@ func (x *EnumContainerMessage1_NestedEnumType1A) UnmarshalJSON(data []byte) erro
 }
 
 func (EnumContainerMessage1_NestedEnumType1A) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_de9f68860d540858, []int{0, 0}
+	return fileDescriptor_de9f68860d540858_gzipped, []int{0, 0}
 }
 
 type EnumContainerMessage1_NestedEnumType1B int32
@@ -166,7 +168,7 @@ const (
 )
 
 func (e EnumContainerMessage1_NestedEnumType1B) Type() protoreflect.EnumType {
-	return xxx_Enum_protoFile_EnumTypes[3]
+	return xxx_Enum_protoFile_enumTypes[3]
 }
 func (e EnumContainerMessage1_NestedEnumType1B) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -200,7 +202,7 @@ func (x *EnumContainerMessage1_NestedEnumType1B) UnmarshalJSON(data []byte) erro
 }
 
 func (EnumContainerMessage1_NestedEnumType1B) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_de9f68860d540858, []int{0, 1}
+	return fileDescriptor_de9f68860d540858_gzipped, []int{0, 1}
 }
 
 // NestedEnumType2A comment.
@@ -212,7 +214,7 @@ const (
 )
 
 func (e EnumContainerMessage1_EnumContainerMessage2_NestedEnumType2A) Type() protoreflect.EnumType {
-	return xxx_Enum_protoFile_EnumTypes[4]
+	return xxx_Enum_protoFile_enumTypes[4]
 }
 func (e EnumContainerMessage1_EnumContainerMessage2_NestedEnumType2A) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -246,7 +248,7 @@ func (x *EnumContainerMessage1_EnumContainerMessage2_NestedEnumType2A) Unmarshal
 }
 
 func (EnumContainerMessage1_EnumContainerMessage2_NestedEnumType2A) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_de9f68860d540858, []int{0, 0, 0}
+	return fileDescriptor_de9f68860d540858_gzipped, []int{0, 0, 0}
 }
 
 type EnumContainerMessage1_EnumContainerMessage2_NestedEnumType2B int32
@@ -256,7 +258,7 @@ const (
 )
 
 func (e EnumContainerMessage1_EnumContainerMessage2_NestedEnumType2B) Type() protoreflect.EnumType {
-	return xxx_Enum_protoFile_EnumTypes[5]
+	return xxx_Enum_protoFile_enumTypes[5]
 }
 func (e EnumContainerMessage1_EnumContainerMessage2_NestedEnumType2B) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -290,7 +292,7 @@ func (x *EnumContainerMessage1_EnumContainerMessage2_NestedEnumType2B) Unmarshal
 }
 
 func (EnumContainerMessage1_EnumContainerMessage2_NestedEnumType2B) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_de9f68860d540858, []int{0, 0, 1}
+	return fileDescriptor_de9f68860d540858_gzipped, []int{0, 0, 1}
 }
 
 type EnumContainerMessage1 struct {
@@ -301,29 +303,14 @@ type EnumContainerMessage1 struct {
 	XXX_sizecache        int32      `json:"-"`
 }
 
-type xxx_EnumContainerMessage1 struct{ m *EnumContainerMessage1 }
-
 func (m *EnumContainerMessage1) ProtoReflect() protoreflect.Message {
-	return xxx_EnumContainerMessage1{m}
-}
-func (m xxx_EnumContainerMessage1) Type() protoreflect.MessageType {
-	return xxx_Enum_protoFile_MessageTypes[0].Type
-}
-func (m xxx_EnumContainerMessage1) KnownFields() protoreflect.KnownFields {
-	return xxx_Enum_protoFile_MessageTypes[0].KnownFieldsOf(m.m)
+	return xxx_Enum_protoFile_messageTypes[0].MessageOf(m)
 }
-func (m xxx_EnumContainerMessage1) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Enum_protoFile_MessageTypes[0].UnknownFieldsOf(m.m)
-}
-func (m xxx_EnumContainerMessage1) Interface() protoreflect.ProtoMessage {
-	return m.m
-}
-
 func (m *EnumContainerMessage1) Reset()         { *m = EnumContainerMessage1{} }
 func (m *EnumContainerMessage1) String() string { return proto.CompactTextString(m) }
 func (*EnumContainerMessage1) ProtoMessage()    {}
 func (*EnumContainerMessage1) Descriptor() ([]byte, []int) {
-	return fileDescriptor_de9f68860d540858, []int{0}
+	return fileDescriptor_de9f68860d540858_gzipped, []int{0}
 }
 
 func (m *EnumContainerMessage1) XXX_Unmarshal(b []byte) error {
@@ -367,26 +354,9 @@ type EnumContainerMessage1_EnumContainerMessage2 struct {
 	XXX_sizecache        int32    `json:"-"`
 }
 
-type xxx_EnumContainerMessage1_EnumContainerMessage2 struct {
-	m *EnumContainerMessage1_EnumContainerMessage2
-}
-
 func (m *EnumContainerMessage1_EnumContainerMessage2) ProtoReflect() protoreflect.Message {
-	return xxx_EnumContainerMessage1_EnumContainerMessage2{m}
-}
-func (m xxx_EnumContainerMessage1_EnumContainerMessage2) Type() protoreflect.MessageType {
-	return xxx_Enum_protoFile_MessageTypes[1].Type
-}
-func (m xxx_EnumContainerMessage1_EnumContainerMessage2) KnownFields() protoreflect.KnownFields {
-	return xxx_Enum_protoFile_MessageTypes[1].KnownFieldsOf(m.m)
-}
-func (m xxx_EnumContainerMessage1_EnumContainerMessage2) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Enum_protoFile_MessageTypes[1].UnknownFieldsOf(m.m)
-}
-func (m xxx_EnumContainerMessage1_EnumContainerMessage2) Interface() protoreflect.ProtoMessage {
-	return m.m
+	return xxx_Enum_protoFile_messageTypes[1].MessageOf(m)
 }
-
 func (m *EnumContainerMessage1_EnumContainerMessage2) Reset() {
 	*m = EnumContainerMessage1_EnumContainerMessage2{}
 }
@@ -395,7 +365,7 @@ func (m *EnumContainerMessage1_EnumContainerMessage2) String() string {
 }
 func (*EnumContainerMessage1_EnumContainerMessage2) ProtoMessage() {}
 func (*EnumContainerMessage1_EnumContainerMessage2) Descriptor() ([]byte, []int) {
-	return fileDescriptor_de9f68860d540858, []int{0, 0}
+	return fileDescriptor_de9f68860d540858_gzipped, []int{0, 0}
 }
 
 func (m *EnumContainerMessage1_EnumContainerMessage2) XXX_Unmarshal(b []byte) error {
@@ -417,7 +387,7 @@ func (m *EnumContainerMessage1_EnumContainerMessage2) XXX_DiscardUnknown() {
 var xxx_messageInfo_EnumContainerMessage1_EnumContainerMessage2 proto.InternalMessageInfo
 
 func init() {
-	proto.RegisterFile("proto2/enum.proto", fileDescriptor_de9f68860d540858)
+	proto.RegisterFile("proto2/enum.proto", fileDescriptor_de9f68860d540858_gzipped)
 	proto.RegisterEnum("goproto.protoc.proto2.EnumType1", EnumType1_name, EnumType1_value)
 	proto.RegisterEnum("goproto.protoc.proto2.EnumType2", EnumType2_name, EnumType2_value)
 	proto.RegisterEnum("goproto.protoc.proto2.EnumContainerMessage1_NestedEnumType1A", EnumContainerMessage1_NestedEnumType1A_name, EnumContainerMessage1_NestedEnumType1A_value)
@@ -429,172 +399,91 @@ func init() {
 }
 
 var fileDescriptor_de9f68860d540858 = []byte{
-	// 317 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0xd0, 0xd1, 0x4b, 0xc2, 0x40,
-	0x1c, 0x07, 0xf0, 0xb6, 0x09, 0xe9, 0x3d, 0xd8, 0xb9, 0x10, 0x44, 0x08, 0x64, 0x2f, 0x85, 0xe0,
-	0xc6, 0xfd, 0x1e, 0x7b, 0x89, 0x99, 0xf7, 0x56, 0x4a, 0x6a, 0x06, 0xf5, 0x20, 0xe7, 0x76, 0x5e,
-	0x03, 0x77, 0x27, 0xee, 0x2e, 0xe8, 0x9f, 0xe8, 0x6f, 0x0e, 0x5d, 0xcc, 0x45, 0x2b, 0xe8, 0x69,
-	0xdf, 0xdf, 0x6f, 0xdf, 0x7d, 0x60, 0x3f, 0xd4, 0xda, 0xee, 0x94, 0x56, 0x10, 0x70, 0x69, 0x52,
-	0xff, 0x90, 0xdd, 0xb6, 0x50, 0x87, 0x90, 0x8f, 0x51, 0xfe, 0x00, 0xef, 0xc3, 0x41, 0x6d, 0x2a,
-	0x4d, 0x7a, 0xab, 0xa4, 0x66, 0x89, 0xe4, 0xbb, 0x7b, 0x9e, 0x65, 0x4c, 0x70, 0xe2, 0xbe, 0x20,
-	0x37, 0xe6, 0x6b, 0x66, 0x36, 0x7a, 0x19, 0x9b, 0xed, 0x26, 0x89, 0x98, 0xe6, 0xa4, 0x63, 0xf5,
-	0xac, 0xab, 0x26, 0xf4, 0xfc, 0x4a, 0xcd, 0xdf, 0x4b, 0xf3, 0xf7, 0x2d, 0x87, 0x6b, 0x74, 0xfc,
-	0x66, 0xda, 0xfa, 0x72, 0x46, 0xc5, 0xaa, 0x12, 0x87, 0x8e, 0xfd, 0x6f, 0x1c, 0x7e, 0xe2, 0xd0,
-	0x4d, 0xaa, 0x7f, 0x09, 0xbc, 0x4b, 0x84, 0xc7, 0x3c, 0xd3, 0x3c, 0x2e, 0xa8, 0xd0, 0x3d, 0x47,
-	0x67, 0x63, 0x3a, 0x9b, 0xd3, 0xd1, 0x12, 0xc2, 0xe5, 0x22, 0xbc, 0x7b, 0xa4, 0xf8, 0xa4, 0xa2,
-	0x38, 0x2c, 0x17, 0x87, 0xbf, 0x17, 0x49, 0x59, 0x24, 0x7f, 0x88, 0xa4, 0x2c, 0x92, 0x42, 0xec,
-	0x5f, 0xa0, 0x46, 0x51, 0x71, 0x4f, 0x91, 0x33, 0x19, 0x53, 0x6c, 0xed, 0xc3, 0xfc, 0x69, 0x82,
-	0xed, 0xfe, 0xc3, 0xf1, 0x35, 0xb8, 0x4d, 0x54, 0x3a, 0x33, 0xb6, 0xbe, 0xcd, 0x80, 0xad, 0xae,
-	0x8d, 0x2d, 0xaf, 0x56, 0xb7, 0xb1, 0xed, 0xd5, 0xea, 0x0e, 0x76, 0xfa, 0x8d, 0x29, 0x9d, 0xd1,
-	0xe9, 0x82, 0x8e, 0xc8, 0x31, 0xc2, 0x30, 0x7c, 0xbe, 0x11, 0x89, 0x7e, 0x35, 0x2b, 0x3f, 0x52,
-	0x69, 0x20, 0xd4, 0x86, 0x49, 0x11, 0x1c, 0x6e, 0xbe, 0x32, 0xeb, 0xe0, 0x0d, 0x82, 0x28, 0x8d,
-	0xf3, 0x39, 0x1a, 0x08, 0x2e, 0x07, 0x42, 0x05, 0x9a, 0x67, 0x3a, 0x66, 0x9a, 0xe5, 0x6b, 0xf8,
-	0x0c, 0x00, 0x00, 0xff, 0xff, 0x8c, 0xcb, 0xe0, 0x01, 0x70, 0x02, 0x00, 0x00,
-}
-
-func init() {
-	xxx_Enum_protoFile_FileDesc.Enums = xxx_Enum_protoFile_EnumDescs[0:2]
-	xxx_Enum_protoFile_FileDesc.Messages = xxx_Enum_protoFile_MessageDescs[0:1]
-	xxx_Enum_protoFile_MessageDescs[0].Enums = xxx_Enum_protoFile_EnumDescs[2:4]
-	xxx_Enum_protoFile_MessageDescs[0].Messages = xxx_Enum_protoFile_MessageDescs[1:2]
-	xxx_Enum_protoFile_MessageDescs[1].Enums = xxx_Enum_protoFile_EnumDescs[4:6]
-	xxx_Enum_protoFile_MessageDescs[0].Fields[0].EnumType = xxx_Enum_protoFile_EnumTypes[1]
-	xxx_Enum_protoFile_MessageDescs[0].Fields[1].EnumType = xxx_Enum_protoFile_EnumTypes[1]
-	var err error
-	Enum_protoFile, err = prototype.NewFile(&xxx_Enum_protoFile_FileDesc)
-	if err != nil {
-		panic(err)
-	}
-}
+	// 624 bytes of the wire-encoded FileDescriptorProto
+	0x0a, 0x11, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2f, 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x12, 0x15, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x22, 0x8e, 0x03, 0x0a, 0x15, 0x45,
+	0x6e, 0x75, 0x6d, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x4d, 0x65, 0x73, 0x73,
+	0x61, 0x67, 0x65, 0x31, 0x12, 0x5b, 0x0a, 0x12, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f,
+	0x64, 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x31, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e,
+	0x32, 0x20, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x54, 0x79, 0x70,
+	0x65, 0x32, 0x3a, 0x0a, 0x64, 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x31, 0x52, 0x11,
+	0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x44, 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65,
+	0x31, 0x12, 0x5b, 0x0a, 0x12, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x64, 0x75, 0x70,
+	0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x32, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e,
+	0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x32, 0x3a,
+	0x0a, 0x64, 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x32, 0x52, 0x11, 0x64, 0x65, 0x66,
+	0x61, 0x75, 0x6c, 0x74, 0x44, 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x32, 0x1a, 0x69,
+	0x0a, 0x15, 0x45, 0x6e, 0x75, 0x6d, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x4d,
+	0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x32, 0x22, 0x27, 0x0a, 0x10, 0x4e, 0x65, 0x73, 0x74, 0x65,
+	0x64, 0x45, 0x6e, 0x75, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x32, 0x41, 0x12, 0x13, 0x0a, 0x0f, 0x4e,
+	0x45, 0x53, 0x54, 0x45, 0x44, 0x5f, 0x32, 0x41, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x10, 0x00,
+	0x22, 0x27, 0x0a, 0x10, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x54, 0x79,
+	0x70, 0x65, 0x32, 0x42, 0x12, 0x13, 0x0a, 0x0f, 0x4e, 0x45, 0x53, 0x54, 0x45, 0x44, 0x5f, 0x32,
+	0x42, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x10, 0x00, 0x22, 0x27, 0x0a, 0x10, 0x4e, 0x65, 0x73,
+	0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x31, 0x41, 0x12, 0x13, 0x0a,
+	0x0f, 0x4e, 0x45, 0x53, 0x54, 0x45, 0x44, 0x5f, 0x31, 0x41, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45,
+	0x10, 0x00, 0x22, 0x27, 0x0a, 0x10, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d,
+	0x54, 0x79, 0x70, 0x65, 0x31, 0x42, 0x12, 0x13, 0x0a, 0x0f, 0x4e, 0x45, 0x53, 0x54, 0x45, 0x44,
+	0x5f, 0x31, 0x42, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x10, 0x00, 0x2a, 0x1d, 0x0a, 0x09, 0x45,
+	0x6e, 0x75, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x31, 0x12, 0x07, 0x0a, 0x03, 0x4f, 0x4e, 0x45, 0x10,
+	0x01, 0x12, 0x07, 0x0a, 0x03, 0x54, 0x57, 0x4f, 0x10, 0x02, 0x2a, 0x51, 0x0a, 0x09, 0x45, 0x6e,
+	0x75, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x32, 0x12, 0x0e, 0x0a, 0x0a, 0x64, 0x75, 0x70, 0x6c, 0x69,
+	0x63, 0x61, 0x74, 0x65, 0x31, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x64, 0x75, 0x70, 0x6c, 0x69,
+	0x63, 0x61, 0x74, 0x65, 0x32, 0x10, 0x01, 0x1a, 0x02, 0x10, 0x01, 0x22, 0x04, 0x08, 0x02, 0x10,
+	0x02, 0x22, 0x04, 0x08, 0x03, 0x10, 0x03, 0x2a, 0x09, 0x52, 0x45, 0x53, 0x45, 0x52, 0x56, 0x45,
+	0x44, 0x31, 0x2a, 0x09, 0x52, 0x45, 0x53, 0x45, 0x52, 0x56, 0x45, 0x44, 0x32, 0x42, 0x41, 0x5a,
+	0x3f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x6f, 0x6c, 0x61,
+	0x6e, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x76, 0x32, 0x2f, 0x63,
+	0x6d, 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x67, 0x6f,
+	0x2f, 0x74, 0x65, 0x73, 0x74, 0x64, 0x61, 0x74, 0x61, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32,
+}
+
+var fileDescriptor_de9f68860d540858_gzipped = func() []byte {
+	bb := new(bytes.Buffer)
+	zw, _ := gzip.NewWriterLevel(bb, gzip.NoCompression)
+	zw.Write(fileDescriptor_de9f68860d540858)
+	zw.Close()
+	return bb.Bytes()
+}()
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
 var Enum_protoFile protoreflect.FileDescriptor
 
-var xxx_Enum_protoFile_FileDesc = prototype.File{
-	Syntax:  protoreflect.Proto2,
-	Path:    "proto2/enum.proto",
-	Package: "goproto.protoc.proto2",
-}
-var xxx_Enum_protoFile_EnumTypes = [6]protoreflect.EnumType{
-	prototype.GoEnum(
-		xxx_Enum_protoFile_EnumDescs[0].Reference(),
-		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
-			return EnumType1(n)
-		},
-	),
-	prototype.GoEnum(
-		xxx_Enum_protoFile_EnumDescs[1].Reference(),
-		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
-			return EnumType2(n)
-		},
-	),
-	prototype.GoEnum(
-		xxx_Enum_protoFile_EnumDescs[2].Reference(),
-		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
-			return EnumContainerMessage1_NestedEnumType1A(n)
-		},
-	),
-	prototype.GoEnum(
-		xxx_Enum_protoFile_EnumDescs[3].Reference(),
-		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
-			return EnumContainerMessage1_NestedEnumType1B(n)
-		},
-	),
-	prototype.GoEnum(
-		xxx_Enum_protoFile_EnumDescs[4].Reference(),
-		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
-			return EnumContainerMessage1_EnumContainerMessage2_NestedEnumType2A(n)
-		},
-	),
-	prototype.GoEnum(
-		xxx_Enum_protoFile_EnumDescs[5].Reference(),
-		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
-			return EnumContainerMessage1_EnumContainerMessage2_NestedEnumType2B(n)
-		},
-	),
-}
-var xxx_Enum_protoFile_EnumDescs = [6]prototype.Enum{
-	{
-		Name: "EnumType1",
-		Values: []prototype.EnumValue{
-			{Name: "ONE", Number: 1},
-			{Name: "TWO", Number: 2},
-		},
-	},
-	{
-		Name: "EnumType2",
-		Values: []prototype.EnumValue{
-			{Name: "duplicate1", Number: 1},
-			{Name: "duplicate2", Number: 1},
-		},
-		ReservedNames:  []protoreflect.Name{"RESERVED1", "RESERVED2"},
-		ReservedRanges: [][2]protoreflect.EnumNumber{{2, 2}, {3, 3}},
-	},
-	{
-		Name: "NestedEnumType1A",
-		Values: []prototype.EnumValue{
-			{Name: "NESTED_1A_VALUE", Number: 0},
-		},
-	},
-	{
-		Name: "NestedEnumType1B",
-		Values: []prototype.EnumValue{
-			{Name: "NESTED_1B_VALUE", Number: 0},
-		},
-	},
-	{
-		Name: "NestedEnumType2A",
-		Values: []prototype.EnumValue{
-			{Name: "NESTED_2A_VALUE", Number: 0},
-		},
-	},
-	{
-		Name: "NestedEnumType2B",
-		Values: []prototype.EnumValue{
-			{Name: "NESTED_2B_VALUE", Number: 0},
-		},
-	},
-}
-var xxx_Enum_protoFile_MessageTypes = [2]protoimpl.MessageType{
-	{Type: prototype.GoMessage(
-		xxx_Enum_protoFile_MessageDescs[0].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_EnumContainerMessage1{new(EnumContainerMessage1)}
-		},
-	)},
-	{Type: prototype.GoMessage(
-		xxx_Enum_protoFile_MessageDescs[1].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_EnumContainerMessage1_EnumContainerMessage2{new(EnumContainerMessage1_EnumContainerMessage2)}
-		},
-	)},
-}
-var xxx_Enum_protoFile_MessageDescs = [2]prototype.Message{
-	{
-		Name: "EnumContainerMessage1",
-		Fields: []prototype.Field{
-			{
-				Name:        "default_duplicate1",
-				Number:      1,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.EnumKind,
-				JSONName:    "defaultDuplicate1",
-				Default:     protoreflect.ValueOf(string("duplicate1")),
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "default_duplicate2",
-				Number:      2,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.EnumKind,
-				JSONName:    "defaultDuplicate2",
-				Default:     protoreflect.ValueOf(string("duplicate2")),
-				IsPacked:    prototype.False,
-			},
-		},
-	},
-	{
-		Name: "EnumContainerMessage2",
-	},
+var xxx_Enum_protoFile_enumTypes [6]protoreflect.EnumType
+var xxx_Enum_protoFile_messageTypes [2]protoimpl.MessageType
+var xxx_Enum_protoFile_goTypes = []interface{}{
+	(EnumType1)(0), // 0: goproto.protoc.proto2.EnumType1
+	(EnumType2)(0), // 1: goproto.protoc.proto2.EnumType2
+	(EnumContainerMessage1_NestedEnumType1A)(0),                       // 2: goproto.protoc.proto2.EnumContainerMessage1.NestedEnumType1A
+	(EnumContainerMessage1_NestedEnumType1B)(0),                       // 3: goproto.protoc.proto2.EnumContainerMessage1.NestedEnumType1B
+	(EnumContainerMessage1_EnumContainerMessage2_NestedEnumType2A)(0), // 4: goproto.protoc.proto2.EnumContainerMessage1.EnumContainerMessage2.NestedEnumType2A
+	(EnumContainerMessage1_EnumContainerMessage2_NestedEnumType2B)(0), // 5: goproto.protoc.proto2.EnumContainerMessage1.EnumContainerMessage2.NestedEnumType2B
+	(*EnumContainerMessage1)(nil),                                     // 6: goproto.protoc.proto2.EnumContainerMessage1
+	(*EnumContainerMessage1_EnumContainerMessage2)(nil),               // 7: goproto.protoc.proto2.EnumContainerMessage1.EnumContainerMessage2
+}
+var xxx_Enum_protoFile_depIdxs = []int32{
+	1, // goproto.protoc.proto2.EnumContainerMessage1.default_duplicate1:type_name -> goproto.protoc.proto2.EnumType2
+	1, // goproto.protoc.proto2.EnumContainerMessage1.default_duplicate2:type_name -> goproto.protoc.proto2.EnumType2
+}
+
+func init() {
+	var messageTypes [2]protoreflect.MessageType
+	Enum_protoFile = protoimpl.FileBuilder{
+		RawDescriptor:      fileDescriptor_de9f68860d540858,
+		GoTypes:            xxx_Enum_protoFile_goTypes,
+		DependencyIndexes:  xxx_Enum_protoFile_depIdxs,
+		EnumOutputTypes:    xxx_Enum_protoFile_enumTypes[:],
+		MessageOutputTypes: messageTypes[:],
+	}.Init()
+	messageGoTypes := xxx_Enum_protoFile_goTypes[6:][:2]
+	for i, mt := range messageTypes[:] {
+		xxx_Enum_protoFile_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
+		xxx_Enum_protoFile_messageTypes[i].PBType = mt
+	}
+	xxx_Enum_protoFile_goTypes = nil
+	xxx_Enum_protoFile_depIdxs = nil
 }

+ 449 - 1325
cmd/protoc-gen-go/testdata/proto2/fields.pb.go

@@ -4,11 +4,13 @@
 package proto2
 
 import (
+	bytes "bytes"
+	gzip "compress/gzip"
 	proto "github.com/golang/protobuf/proto"
 	protoreflect "github.com/golang/protobuf/v2/reflect/protoreflect"
-	prototype "github.com/golang/protobuf/v2/reflect/prototype"
 	protoimpl "github.com/golang/protobuf/v2/runtime/protoimpl"
 	math "math"
+	reflect "reflect"
 )
 
 // This is a compile-time assertion to ensure that this generated file
@@ -25,7 +27,7 @@ const (
 )
 
 func (e FieldTestMessage_Enum) Type() protoreflect.EnumType {
-	return xxx_Fields_protoFile_EnumTypes[0]
+	return xxx_Fields_protoFile_enumTypes[0]
 }
 func (e FieldTestMessage_Enum) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -61,7 +63,7 @@ func (x *FieldTestMessage_Enum) UnmarshalJSON(data []byte) error {
 }
 
 func (FieldTestMessage_Enum) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_fd8a9d72b841fd68, []int{0, 0}
+	return fileDescriptor_fd8a9d72b841fd68_gzipped, []int{0, 0}
 }
 
 type FieldTestMessage struct {
@@ -176,29 +178,14 @@ type FieldTestMessage struct {
 	XXX_sizecache        int32                       `json:"-"`
 }
 
-type xxx_FieldTestMessage struct{ m *FieldTestMessage }
-
 func (m *FieldTestMessage) ProtoReflect() protoreflect.Message {
-	return xxx_FieldTestMessage{m}
-}
-func (m xxx_FieldTestMessage) Type() protoreflect.MessageType {
-	return xxx_Fields_protoFile_MessageTypes[0].Type
-}
-func (m xxx_FieldTestMessage) KnownFields() protoreflect.KnownFields {
-	return xxx_Fields_protoFile_MessageTypes[0].KnownFieldsOf(m.m)
+	return xxx_Fields_protoFile_messageTypes[0].MessageOf(m)
 }
-func (m xxx_FieldTestMessage) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Fields_protoFile_MessageTypes[0].UnknownFieldsOf(m.m)
-}
-func (m xxx_FieldTestMessage) Interface() protoreflect.ProtoMessage {
-	return m.m
-}
-
 func (m *FieldTestMessage) Reset()         { *m = FieldTestMessage{} }
 func (m *FieldTestMessage) String() string { return proto.CompactTextString(m) }
 func (*FieldTestMessage) ProtoMessage()    {}
 func (*FieldTestMessage) Descriptor() ([]byte, []int) {
-	return fileDescriptor_fd8a9d72b841fd68, []int{0}
+	return fileDescriptor_fd8a9d72b841fd68_gzipped, []int{0}
 }
 
 func (m *FieldTestMessage) XXX_Unmarshal(b []byte) error {
@@ -1143,31 +1130,14 @@ type FieldTestMessage_OptionalGroup struct {
 	XXX_sizecache        int32    `json:"-"`
 }
 
-type xxx_FieldTestMessage_OptionalGroup struct {
-	m *FieldTestMessage_OptionalGroup
-}
-
 func (m *FieldTestMessage_OptionalGroup) ProtoReflect() protoreflect.Message {
-	return xxx_FieldTestMessage_OptionalGroup{m}
-}
-func (m xxx_FieldTestMessage_OptionalGroup) Type() protoreflect.MessageType {
-	return xxx_Fields_protoFile_MessageTypes[1].Type
-}
-func (m xxx_FieldTestMessage_OptionalGroup) KnownFields() protoreflect.KnownFields {
-	return xxx_Fields_protoFile_MessageTypes[1].KnownFieldsOf(m.m)
-}
-func (m xxx_FieldTestMessage_OptionalGroup) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Fields_protoFile_MessageTypes[1].UnknownFieldsOf(m.m)
-}
-func (m xxx_FieldTestMessage_OptionalGroup) Interface() protoreflect.ProtoMessage {
-	return m.m
+	return xxx_Fields_protoFile_messageTypes[1].MessageOf(m)
 }
-
 func (m *FieldTestMessage_OptionalGroup) Reset()         { *m = FieldTestMessage_OptionalGroup{} }
 func (m *FieldTestMessage_OptionalGroup) String() string { return proto.CompactTextString(m) }
 func (*FieldTestMessage_OptionalGroup) ProtoMessage()    {}
 func (*FieldTestMessage_OptionalGroup) Descriptor() ([]byte, []int) {
-	return fileDescriptor_fd8a9d72b841fd68, []int{0, 0}
+	return fileDescriptor_fd8a9d72b841fd68_gzipped, []int{0, 0}
 }
 
 func (m *FieldTestMessage_OptionalGroup) XXX_Unmarshal(b []byte) error {
@@ -1202,31 +1172,14 @@ type FieldTestMessage_RequiredGroup struct {
 	XXX_sizecache        int32    `json:"-"`
 }
 
-type xxx_FieldTestMessage_RequiredGroup struct {
-	m *FieldTestMessage_RequiredGroup
-}
-
 func (m *FieldTestMessage_RequiredGroup) ProtoReflect() protoreflect.Message {
-	return xxx_FieldTestMessage_RequiredGroup{m}
-}
-func (m xxx_FieldTestMessage_RequiredGroup) Type() protoreflect.MessageType {
-	return xxx_Fields_protoFile_MessageTypes[2].Type
-}
-func (m xxx_FieldTestMessage_RequiredGroup) KnownFields() protoreflect.KnownFields {
-	return xxx_Fields_protoFile_MessageTypes[2].KnownFieldsOf(m.m)
-}
-func (m xxx_FieldTestMessage_RequiredGroup) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Fields_protoFile_MessageTypes[2].UnknownFieldsOf(m.m)
+	return xxx_Fields_protoFile_messageTypes[2].MessageOf(m)
 }
-func (m xxx_FieldTestMessage_RequiredGroup) Interface() protoreflect.ProtoMessage {
-	return m.m
-}
-
 func (m *FieldTestMessage_RequiredGroup) Reset()         { *m = FieldTestMessage_RequiredGroup{} }
 func (m *FieldTestMessage_RequiredGroup) String() string { return proto.CompactTextString(m) }
 func (*FieldTestMessage_RequiredGroup) ProtoMessage()    {}
 func (*FieldTestMessage_RequiredGroup) Descriptor() ([]byte, []int) {
-	return fileDescriptor_fd8a9d72b841fd68, []int{0, 1}
+	return fileDescriptor_fd8a9d72b841fd68_gzipped, []int{0, 1}
 }
 
 func (m *FieldTestMessage_RequiredGroup) XXX_Unmarshal(b []byte) error {
@@ -1261,31 +1214,14 @@ type FieldTestMessage_RepeatedGroup struct {
 	XXX_sizecache        int32    `json:"-"`
 }
 
-type xxx_FieldTestMessage_RepeatedGroup struct {
-	m *FieldTestMessage_RepeatedGroup
-}
-
 func (m *FieldTestMessage_RepeatedGroup) ProtoReflect() protoreflect.Message {
-	return xxx_FieldTestMessage_RepeatedGroup{m}
-}
-func (m xxx_FieldTestMessage_RepeatedGroup) Type() protoreflect.MessageType {
-	return xxx_Fields_protoFile_MessageTypes[3].Type
-}
-func (m xxx_FieldTestMessage_RepeatedGroup) KnownFields() protoreflect.KnownFields {
-	return xxx_Fields_protoFile_MessageTypes[3].KnownFieldsOf(m.m)
+	return xxx_Fields_protoFile_messageTypes[3].MessageOf(m)
 }
-func (m xxx_FieldTestMessage_RepeatedGroup) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Fields_protoFile_MessageTypes[3].UnknownFieldsOf(m.m)
-}
-func (m xxx_FieldTestMessage_RepeatedGroup) Interface() protoreflect.ProtoMessage {
-	return m.m
-}
-
 func (m *FieldTestMessage_RepeatedGroup) Reset()         { *m = FieldTestMessage_RepeatedGroup{} }
 func (m *FieldTestMessage_RepeatedGroup) String() string { return proto.CompactTextString(m) }
 func (*FieldTestMessage_RepeatedGroup) ProtoMessage()    {}
 func (*FieldTestMessage_RepeatedGroup) Descriptor() ([]byte, []int) {
-	return fileDescriptor_fd8a9d72b841fd68, []int{0, 2}
+	return fileDescriptor_fd8a9d72b841fd68_gzipped, []int{0, 2}
 }
 
 func (m *FieldTestMessage_RepeatedGroup) XXX_Unmarshal(b []byte) error {
@@ -1320,29 +1256,14 @@ type FieldTestMessage_OneofGroup struct {
 	XXX_sizecache        int32    `json:"-"`
 }
 
-type xxx_FieldTestMessage_OneofGroup struct{ m *FieldTestMessage_OneofGroup }
-
 func (m *FieldTestMessage_OneofGroup) ProtoReflect() protoreflect.Message {
-	return xxx_FieldTestMessage_OneofGroup{m}
-}
-func (m xxx_FieldTestMessage_OneofGroup) Type() protoreflect.MessageType {
-	return xxx_Fields_protoFile_MessageTypes[7].Type
-}
-func (m xxx_FieldTestMessage_OneofGroup) KnownFields() protoreflect.KnownFields {
-	return xxx_Fields_protoFile_MessageTypes[7].KnownFieldsOf(m.m)
+	return xxx_Fields_protoFile_messageTypes[7].MessageOf(m)
 }
-func (m xxx_FieldTestMessage_OneofGroup) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Fields_protoFile_MessageTypes[7].UnknownFieldsOf(m.m)
-}
-func (m xxx_FieldTestMessage_OneofGroup) Interface() protoreflect.ProtoMessage {
-	return m.m
-}
-
 func (m *FieldTestMessage_OneofGroup) Reset()         { *m = FieldTestMessage_OneofGroup{} }
 func (m *FieldTestMessage_OneofGroup) String() string { return proto.CompactTextString(m) }
 func (*FieldTestMessage_OneofGroup) ProtoMessage()    {}
 func (*FieldTestMessage_OneofGroup) Descriptor() ([]byte, []int) {
-	return fileDescriptor_fd8a9d72b841fd68, []int{0, 6}
+	return fileDescriptor_fd8a9d72b841fd68_gzipped, []int{0, 6}
 }
 
 func (m *FieldTestMessage_OneofGroup) XXX_Unmarshal(b []byte) error {
@@ -1376,29 +1297,14 @@ type FieldTestMessage_Message struct {
 	XXX_sizecache        int32    `json:"-"`
 }
 
-type xxx_FieldTestMessage_Message struct{ m *FieldTestMessage_Message }
-
 func (m *FieldTestMessage_Message) ProtoReflect() protoreflect.Message {
-	return xxx_FieldTestMessage_Message{m}
-}
-func (m xxx_FieldTestMessage_Message) Type() protoreflect.MessageType {
-	return xxx_Fields_protoFile_MessageTypes[8].Type
-}
-func (m xxx_FieldTestMessage_Message) KnownFields() protoreflect.KnownFields {
-	return xxx_Fields_protoFile_MessageTypes[8].KnownFieldsOf(m.m)
+	return xxx_Fields_protoFile_messageTypes[8].MessageOf(m)
 }
-func (m xxx_FieldTestMessage_Message) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Fields_protoFile_MessageTypes[8].UnknownFieldsOf(m.m)
-}
-func (m xxx_FieldTestMessage_Message) Interface() protoreflect.ProtoMessage {
-	return m.m
-}
-
 func (m *FieldTestMessage_Message) Reset()         { *m = FieldTestMessage_Message{} }
 func (m *FieldTestMessage_Message) String() string { return proto.CompactTextString(m) }
 func (*FieldTestMessage_Message) ProtoMessage()    {}
 func (*FieldTestMessage_Message) Descriptor() ([]byte, []int) {
-	return fileDescriptor_fd8a9d72b841fd68, []int{0, 7}
+	return fileDescriptor_fd8a9d72b841fd68_gzipped, []int{0, 7}
 }
 
 func (m *FieldTestMessage_Message) XXX_Unmarshal(b []byte) error {
@@ -1420,7 +1326,7 @@ func (m *FieldTestMessage_Message) XXX_DiscardUnknown() {
 var xxx_messageInfo_FieldTestMessage_Message proto.InternalMessageInfo
 
 func init() {
-	proto.RegisterFile("proto2/fields.proto", fileDescriptor_fd8a9d72b841fd68)
+	proto.RegisterFile("proto2/fields.proto", fileDescriptor_fd8a9d72b841fd68_gzipped)
 	proto.RegisterEnum("goproto.protoc.proto2.FieldTestMessage_Enum", FieldTestMessage_Enum_name, FieldTestMessage_Enum_value)
 	proto.RegisterType((*FieldTestMessage)(nil), "goproto.protoc.proto2.FieldTestMessage")
 	proto.RegisterMapType((map[uint64]FieldTestMessage_Enum)(nil), "goproto.protoc.proto2.FieldTestMessage.MapFixed64EnumEntry")
@@ -1434,1222 +1340,440 @@ func init() {
 }
 
 var fileDescriptor_fd8a9d72b841fd68 = []byte{
-	// 1987 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x98, 0xdb, 0x73, 0x23, 0x47,
-	0xf5, 0xc7, 0x3d, 0x23, 0xf9, 0xa2, 0xb6, 0x64, 0xc9, 0xe3, 0xdd, 0x5f, 0xf5, 0x6f, 0x9f, 0x3a,
-	0x26, 0x90, 0x09, 0x59, 0xdb, 0xb1, 0x3c, 0x6e, 0x27, 0x02, 0x0a, 0xe2, 0x8a, 0x17, 0x93, 0x02,
-	0x19, 0x26, 0x76, 0x51, 0xb5, 0x71, 0x95, 0x6a, 0x6c, 0x8f, 0xb4, 0x22, 0xd2, 0x8c, 0x23, 0x8d,
-	0x76, 0x59, 0xfe, 0x8a, 0x6c, 0x80, 0xbf, 0x81, 0x27, 0xee, 0x77, 0x08, 0x7f, 0x00, 0xf7, 0xfb,
-	0x25, 0x09, 0x24, 0xdc, 0xaf, 0xaf, 0xc0, 0xeb, 0x52, 0xa7, 0x4f, 0x77, 0x4f, 0xf7, 0x68, 0x1f,
-	0xd6, 0x7e, 0xd8, 0x5a, 0xeb, 0xe8, 0x7b, 0xce, 0xb7, 0xbb, 0xa7, 0x3f, 0x47, 0x3d, 0x4d, 0x56,
-	0xce, 0x47, 0x69, 0x96, 0x36, 0x37, 0xba, 0xfd, 0x78, 0x70, 0x36, 0x5e, 0x17, 0x9f, 0xbc, 0xab,
-	0xbd, 0x54, 0xfc, 0x81, 0x1f, 0x4f, 0xf1, 0xbf, 0xe6, 0xea, 0x67, 0xd6, 0x48, 0xe3, 0x06, 0xe8,
-	0x0e, 0xe3, 0x71, 0xf6, 0xa1, 0x78, 0x3c, 0x8e, 0x7a, 0xb1, 0xf7, 0x36, 0x52, 0x4b, 0xcf, 0xb3,
-	0x7e, 0x9a, 0x44, 0x83, 0xce, 0x49, 0x9a, 0x0e, 0xa8, 0xc3, 0x1c, 0x7f, 0x21, 0xac, 0xaa, 0xe0,
-	0x6e, 0x9a, 0x0e, 0xbc, 0x8f, 0x18, 0xa2, 0x38, 0x99, 0x0c, 0xa9, 0xcb, 0x1c, 0x7f, 0xa9, 0x79,
-	0x7d, 0xfd, 0x81, 0x46, 0xeb, 0x45, 0x93, 0xf5, 0xbd, 0x64, 0x32, 0xcc, 0x4b, 0xc2, 0x27, 0xef,
-	0xed, 0x64, 0x49, 0x97, 0xec, 0x27, 0xd9, 0x56, 0x93, 0x96, 0x98, 0xe3, 0xcf, 0x86, 0xda, 0xe8,
-	0x03, 0x10, 0xf4, 0x1e, 0x23, 0x75, 0x2d, 0x1b, 0xa3, 0xae, 0xcc, 0x1c, 0x7f, 0x39, 0xd4, 0xd9,
-	0xcf, 0xf7, 0xa7, 0x84, 0x13, 0x14, 0xce, 0x32, 0xc7, 0xaf, 0xe5, 0xc2, 0x23, 0x14, 0x16, 0x8c,
-	0x79, 0x40, 0xe7, 0x98, 0xe3, 0x97, 0x2c, 0x63, 0x1e, 0x4c, 0x19, 0xf3, 0x80, 0xce, 0x33, 0xc7,
-	0xf7, 0x6c, 0xe3, 0x82, 0x70, 0x82, 0xc2, 0x05, 0xe6, 0xf8, 0x65, 0xdb, 0x98, 0x07, 0xde, 0x13,
-	0x64, 0x39, 0xaf, 0xd8, 0xed, 0x7f, 0x3c, 0x3e, 0xdb, 0x6a, 0xd2, 0x0a, 0x73, 0xfc, 0x7a, 0xd8,
-	0xd0, 0x35, 0x65, 0xdc, 0x7b, 0x9c, 0xe8, 0x58, 0x47, 0x69, 0x09, 0x73, 0xfc, 0xf9, 0x50, 0xbb,
-	0xdd, 0x90, 0x52, 0x73, 0x42, 0xdd, 0x41, 0x1a, 0x65, 0x74, 0x91, 0x39, 0xbe, 0x9b, 0x4f, 0xe8,
-	0x06, 0x04, 0x1f, 0x60, 0xcf, 0x03, 0x5a, 0x65, 0x8e, 0xdf, 0x28, 0xda, 0xf3, 0x60, 0xda, 0x9e,
-	0x07, 0xb4, 0xc6, 0x1c, 0x7f, 0xae, 0x60, 0x5f, 0x98, 0xff, 0x59, 0x3a, 0x39, 0x19, 0xc4, 0x74,
-	0x89, 0x39, 0xbe, 0x93, 0xcf, 0xff, 0x59, 0x11, 0xb5, 0x57, 0x34, 0x1b, 0xf5, 0x93, 0x1e, 0xad,
-	0x33, 0xc7, 0xaf, 0x18, 0x2b, 0x2a, 0xa2, 0xd6, 0x84, 0x4e, 0xee, 0x66, 0xf1, 0x98, 0x36, 0x98,
-	0xe3, 0x57, 0xf3, 0x09, 0xed, 0x42, 0xd0, 0xbb, 0x69, 0x8c, 0x51, 0x6e, 0x34, 0xba, 0xcc, 0x1c,
-	0x7f, 0xb1, 0xb9, 0xf1, 0xb0, 0xfb, 0x52, 0xfe, 0x9f, 0x4f, 0x4a, 0x51, 0xf1, 0x42, 0xbe, 0xe1,
-	0x7b, 0xa3, 0x74, 0x72, 0x4e, 0x3d, 0xe6, 0xf8, 0xa4, 0xb9, 0xfd, 0xb0, 0x85, 0x0f, 0x64, 0xf2,
-	0xfb, 0x21, 0x39, 0xb4, 0x6b, 0x01, 0x72, 0xa3, 0xf8, 0xa5, 0x49, 0x7f, 0x14, 0x9f, 0x21, 0x72,
-	0x31, 0x73, 0x01, 0x39, 0x15, 0x54, 0xc8, 0x69, 0x91, 0x40, 0xae, 0xcb, 0xdc, 0x8b, 0x23, 0xa7,
-	0x4a, 0x28, 0xe4, 0x74, 0x49, 0x24, 0xa4, 0xc7, 0x5c, 0x40, 0x4e, 0x45, 0x35, 0x72, 0x5a, 0x26,
-	0x91, 0xbb, 0xc5, 0x5c, 0x40, 0x4e, 0x85, 0x73, 0xe4, 0xb4, 0x50, 0x22, 0xd7, 0x67, 0x2e, 0x20,
-	0xa7, 0xc2, 0x39, 0x72, 0xa6, 0x31, 0x0f, 0xe8, 0xc7, 0x98, 0x0b, 0xc8, 0x19, 0xc6, 0xb8, 0x93,
-	0x2c, 0x63, 0x1e, 0xd0, 0x17, 0x99, 0x0b, 0xc8, 0x99, 0xc6, 0x05, 0xa1, 0x44, 0x6e, 0xc0, 0x5c,
-	0x40, 0xce, 0x34, 0x46, 0xe4, 0xf2, 0x8a, 0x0a, 0xa3, 0x21, 0x73, 0x01, 0x39, 0x5d, 0xd3, 0x40,
-	0x4e, 0x8b, 0x95, 0x36, 0x61, 0x2e, 0x20, 0xa7, 0xe2, 0x06, 0x72, 0xb9, 0x54, 0x20, 0x97, 0x32,
-	0x17, 0x90, 0xd3, 0x42, 0x85, 0x5c, 0xc1, 0x9e, 0x07, 0xf4, 0x9c, 0xb9, 0x80, 0x9c, 0x6d, 0x8f,
-	0xc8, 0xd9, 0xf6, 0x3c, 0xa0, 0x2f, 0x31, 0x17, 0x90, 0xb3, 0xec, 0x0b, 0xf3, 0x97, 0xc8, 0x8d,
-	0x98, 0x0b, 0xc8, 0xa9, 0x70, 0x8e, 0x5c, 0x3e, 0x00, 0x44, 0x6e, 0xcc, 0x5c, 0x40, 0x4e, 0xdb,
-	0x6b, 0xe4, 0xf2, 0x2d, 0x29, 0x90, 0xcb, 0x98, 0x0b, 0xc8, 0xe9, 0x3d, 0xa9, 0x90, 0xd3, 0x32,
-	0x85, 0xdc, 0x84, 0xb9, 0x97, 0x42, 0x4e, 0x15, 0x32, 0x90, 0x53, 0x21, 0x44, 0xee, 0x36, 0x73,
-	0x2f, 0x82, 0x5c, 0x28, 0x93, 0x25, 0x72, 0x56, 0x2d, 0xef, 0x51, 0x28, 0x7e, 0x1e, 0x47, 0x99,
-	0x42, 0xee, 0xbb, 0x0e, 0x2b, 0x21, 0x73, 0x18, 0x15, 0xcc, 0x85, 0x86, 0x4a, 0x30, 0xf7, 0x3d,
-	0x50, 0x5d, 0x02, 0x3a, 0xac, 0x21, 0xa0, 0x7b, 0x07, 0xac, 0xac, 0xac, 0x89, 0x8c, 0x7c, 0x1f,
-	0x8a, 0x0a, 0xea, 0x30, 0x8c, 0xd4, 0xf9, 0xf0, 0xa8, 0xa4, 0x4e, 0x52, 0xf7, 0x03, 0x10, 0x0a,
-	0xec, 0x30, 0x2e, 0xb1, 0x33, 0x95, 0x12, 0xbb, 0x1f, 0x82, 0xb2, 0x96, 0x2b, 0x25, 0x77, 0x05,
-	0x6f, 0x1e, 0xd0, 0x1f, 0x81, 0xb0, 0x64, 0x79, 0xf3, 0x60, 0xca, 0x9b, 0x07, 0xf4, 0xc7, 0x20,
-	0xf4, 0x6c, 0xef, 0x82, 0x52, 0x92, 0xf7, 0x13, 0x50, 0x96, 0x6d, 0x6f, 0x1e, 0x78, 0xd7, 0x61,
-	0xef, 0xab, 0x9a, 0x0a, 0xa7, 0x9f, 0x82, 0x56, 0xb0, 0x27, 0xab, 0x2a, 0xf6, 0xde, 0x49, 0x74,
-	0x4c, 0xb3, 0xf7, 0x33, 0x10, 0x0b, 0xf8, 0xf0, 0x0b, 0x05, 0x9f, 0x39, 0x2b, 0x84, 0xef, 0xe7,
-	0xa0, 0x74, 0xf3, 0x59, 0x21, 0x7d, 0xd3, 0x23, 0xe0, 0x01, 0xfd, 0x05, 0x48, 0x1b, 0xc5, 0x11,
-	0xf0, 0x60, 0x7a, 0x04, 0x3c, 0xa0, 0xbf, 0x04, 0xf1, 0x5c, 0x61, 0x04, 0x85, 0x55, 0x90, 0xfc,
-	0xfd, 0x0a, 0xa4, 0x4e, 0xbe, 0x0a, 0x12, 0x40, 0x6b, 0x65, 0x11, 0xc0, 0x5f, 0x83, 0xb2, 0x62,
-	0xac, 0x2c, 0x12, 0x68, 0xce, 0x0a, 0x09, 0xfc, 0x0d, 0x08, 0xab, 0xf9, 0xac, 0x10, 0xc1, 0x17,
-	0x8c, 0x71, 0x2a, 0x04, 0x5f, 0x03, 0xe5, 0xe5, 0x18, 0xc4, 0x4a, 0x8a, 0xc1, 0xe3, 0x1c, 0x00,
-	0x64, 0xf0, 0x75, 0xa8, 0x7c, 0x21, 0x08, 0x31, 0x5b, 0x43, 0x68, 0x14, 0xf3, 0x7c, 0x52, 0x3d,
-	0x8b, 0xbb, 0xd1, 0x64, 0x90, 0x21, 0x83, 0x9f, 0x85, 0x53, 0xe4, 0x42, 0xab, 0x9c, 0x8d, 0x26,
-	0x71, 0xb8, 0x28, 0xbf, 0x12, 0x20, 0x1e, 0xe5, 0x4a, 0xc1, 0xe1, 0xe7, 0x2e, 0x71, 0xde, 0x6c,
-	0x95, 0x0e, 0xda, 0x7b, 0xba, 0xac, 0x60, 0xf1, 0x31, 0x52, 0x53, 0x65, 0x91, 0x9b, 0xcf, 0x43,
-	0xdd, 0xd9, 0x96, 0xb3, 0x19, 0x2a, 0x3f, 0x84, 0xf1, 0x71, 0xb2, 0xa4, 0x84, 0x92, 0xc5, 0x2f,
-	0x80, 0x72, 0x19, 0x94, 0xaa, 0x84, 0xa4, 0xd1, 0x90, 0x4a, 0x18, 0xbf, 0x08, 0xd2, 0x9a, 0x29,
-	0x3d, 0x52, 0xbf, 0x97, 0xa6, 0x3d, 0x0f, 0xe8, 0x97, 0x40, 0x59, 0x2a, 0xd8, 0x8b, 0x9f, 0x02,
-	0xcb, 0x9e, 0x07, 0xf4, 0xcb, 0xa0, 0xf4, 0x8a, 0xf6, 0xb6, 0x54, 0xf2, 0xf8, 0x15, 0x90, 0x96,
-	0x8b, 0xf6, 0x3c, 0xf0, 0xd6, 0x48, 0x43, 0x57, 0x55, 0x8c, 0x7d, 0x15, 0xc4, 0x75, 0x10, 0xd7,
-	0x55, 0x5d, 0x85, 0xe4, 0x13, 0x44, 0x85, 0x34, 0x91, 0x5f, 0x03, 0xf5, 0x3c, 0xa8, 0x95, 0xe9,
-	0x0d, 0xcd, 0xaf, 0x9e, 0x1a, 0x22, 0xf9, 0x75, 0x90, 0xba, 0xad, 0xf2, 0xd6, 0xfa, 0x66, 0xa0,
-	0x67, 0x87, 0x5c, 0x4e, 0x8d, 0x83, 0x07, 0xf4, 0x1b, 0x20, 0x6f, 0x4c, 0x8f, 0x43, 0xfc, 0x86,
-	0xdb, 0xe3, 0xe0, 0x01, 0xfd, 0x26, 0xa8, 0xe7, 0xa6, 0xc6, 0xc1, 0x03, 0x6f, 0x3d, 0x5f, 0x0e,
-	0x09, 0xe6, 0xb7, 0x40, 0xeb, 0xb4, 0xe6, 0x60, 0x20, 0x9b, 0xdb, 0x7a, 0x4d, 0x24, 0x9f, 0x3b,
-	0xc6, 0x4a, 0x23, 0x9e, 0xdf, 0x06, 0x7d, 0xa5, 0x55, 0xbf, 0x15, 0x0f, 0x06, 0xe9, 0xf5, 0xd5,
-	0x3b, 0xe9, 0x68, 0x70, 0xf6, 0xc8, 0x2a, 0xc9, 0xd7, 0x1d, 0x71, 0x7d, 0x77, 0x3e, 0x61, 0xa4,
-	0xf5, 0x55, 0xc8, 0xab, 0xb6, 0xfe, 0x0f, 0xf3, 0x8e, 0xb7, 0xb6, 0xf8, 0x71, 0x73, 0x7b, 0xfb,
-	0xb8, 0xb9, 0xc3, 0x8f, 0xb7, 0xb6, 0x77, 0xf4, 0x12, 0x20, 0xc4, 0x9b, 0x64, 0x45, 0x65, 0x7f,
-	0x22, 0x1e, 0xa5, 0xca, 0xfb, 0x4d, 0xf4, 0x9e, 0x09, 0x97, 0xe5, 0xb7, 0x37, 0xe3, 0x51, 0x2a,
-	0x0d, 0x37, 0x88, 0x67, 0xa5, 0xa0, 0xeb, 0x5b, 0xe8, 0x3a, 0x13, 0x36, 0x8c, 0x0c, 0xf4, 0xd8,
-	0x21, 0x57, 0xac, 0x47, 0xd2, 0x49, 0xe2, 0x5e, 0x3f, 0xe9, 0xd2, 0x97, 0x4b, 0xf8, 0x64, 0xd6,
-	0xfa, 0x49, 0x37, 0xf4, 0xcc, 0x27, 0xd3, 0x16, 0x02, 0x8f, 0x17, 0x13, 0xcf, 0xd3, 0x31, 0x24,
-	0xde, 0xc3, 0xc4, 0xd2, 0x54, 0xde, 0x87, 0xc5, 0xf7, 0xde, 0x93, 0x64, 0xb9, 0x60, 0x18, 0x25,
-	0xf4, 0x15, 0x99, 0x94, 0x44, 0x89, 0x7e, 0xb4, 0x68, 0x16, 0x25, 0xde, 0xd3, 0xe4, 0xaa, 0xfd,
-	0xb4, 0xd4, 0x18, 0x3f, 0x59, 0x12, 0x0f, 0x0d, 0xc7, 0xb8, 0x62, 0x3d, 0x32, 0x39, 0xc8, 0xa7,
-	0xa6, 0x52, 0xe5, 0x28, 0x3f, 0x85, 0xa9, 0xa5, 0xe9, 0x4c, 0x39, 0xcc, 0x66, 0xbe, 0x90, 0xca,
-	0x34, 0x4a, 0xe8, 0xa7, 0x65, 0x1a, 0x8c, 0xb3, 0x61, 0x1b, 0x46, 0x89, 0x77, 0x4a, 0xea, 0xc3,
-	0xe8, 0x1c, 0x9b, 0x86, 0x64, 0xf7, 0xdf, 0x25, 0xd1, 0x73, 0x5b, 0x0f, 0xdd, 0x73, 0xa3, 0x73,
-	0xd1, 0x5b, 0x04, 0xe1, 0x7b, 0x49, 0x36, 0xba, 0x1b, 0xd6, 0x86, 0x66, 0xcc, 0x1b, 0x10, 0x0f,
-	0x4c, 0x70, 0x2f, 0x74, 0x86, 0xb2, 0xb7, 0xff, 0x07, 0x7d, 0xde, 0x73, 0x01, 0x1f, 0xdc, 0x31,
-	0x32, 0x80, 0x56, 0x8d, 0x61, 0x21, 0xec, 0x75, 0x09, 0xc4, 0x14, 0x52, 0xd8, 0x66, 0xff, 0x8b,
-	0x5e, 0xef, 0xba, 0x80, 0x97, 0x04, 0x0f, 0xda, 0x2b, 0x3a, 0x2d, 0x0d, 0xad, 0xa0, 0xc7, 0x08,
-	0x49, 0x93, 0x38, 0xed, 0x62, 0xcb, 0x7f, 0x0d, 0x5e, 0xde, 0x17, 0xf6, 0x67, 0xc2, 0x8a, 0x08,
-	0x8a, 0x66, 0xdf, 0x56, 0x0a, 0x31, 0x86, 0xd7, 0xcb, 0x17, 0x6f, 0xf5, 0xba, 0x9e, 0x70, 0x5c,
-	0x25, 0x8b, 0x58, 0x0f, 0xdb, 0xf1, 0x1b, 0x50, 0x70, 0x76, 0x7f, 0x26, 0x44, 0x17, 0x6c, 0xf0,
-	0x8f, 0x92, 0x2a, 0x6a, 0x64, 0x7b, 0xff, 0xad, 0xb8, 0x54, 0xd8, 0x9f, 0x09, 0x31, 0x55, 0xf6,
-	0x76, 0xad, 0x92, 0x9d, 0xfd, 0x77, 0xa0, 0xaa, 0x69, 0x95, 0x6c, 0xeb, 0xa6, 0x1f, 0x0f, 0xe8,
-	0x9b, 0x20, 0x2a, 0x99, 0x7e, 0x3c, 0xb0, 0xfd, 0x78, 0x40, 0xdf, 0x02, 0x91, 0x67, 0xf9, 0x99,
-	0x2a, 0xd9, 0xca, 0x7f, 0x0f, 0xaa, 0xb2, 0xe5, 0x27, 0x4e, 0x1f, 0x4b, 0xb2, 0x96, 0xea, 0xcb,
-	0x7f, 0x00, 0x5d, 0x7d, 0x7f, 0x26, 0xac, 0x61, 0xb5, 0xae, 0x3e, 0x29, 0x61, 0x40, 0x37, 0xf0,
-	0x3f, 0x82, 0x70, 0x7e, 0x7f, 0x26, 0x44, 0x1f, 0xd5, 0xbd, 0xf5, 0x0c, 0xb0, 0x77, 0xff, 0x09,
-	0x54, 0xae, 0x9e, 0x01, 0x76, 0xed, 0x82, 0x2b, 0x0f, 0xe8, 0x9f, 0x41, 0xd6, 0x28, 0xb8, 0xf2,
-	0xa0, 0xe0, 0xca, 0x03, 0xfa, 0x17, 0x10, 0xce, 0xd9, 0xae, 0xe6, 0x6c, 0x65, 0xa7, 0xfe, 0x2b,
-	0xc8, 0x1c, 0x3d, 0x5b, 0xd9, 0xa1, 0xf3, 0x95, 0xc3, 0x1e, 0xf9, 0x37, 0x50, 0x55, 0xf2, 0x95,
-	0xc3, 0xee, 0xa8, 0x67, 0x80, 0x6d, 0xf1, 0xef, 0x20, 0xaa, 0xea, 0x19, 0x60, 0x43, 0xfc, 0xa8,
-	0x1a, 0x97, 0x3a, 0x36, 0xfd, 0xa3, 0x7c, 0xa9, 0xdb, 0x02, 0x3d, 0x11, 0x85, 0xd2, 0x91, 0xdc,
-	0xc0, 0x78, 0x64, 0xfa, 0x67, 0x59, 0x5c, 0x15, 0x34, 0x1f, 0xfa, 0xaa, 0x00, 0x52, 0xc5, 0x79,
-	0x49, 0x8f, 0x17, 0x8f, 0x4b, 0x4f, 0x92, 0x65, 0x1c, 0xef, 0x20, 0x1a, 0xf5, 0xe2, 0x71, 0xd6,
-	0xc9, 0xa2, 0x1e, 0xbd, 0x7f, 0xff, 0xfe, 0x7d, 0x47, 0x6e, 0xe8, 0xba, 0xf8, 0xfa, 0x83, 0xf8,
-	0xed, 0x61, 0xd4, 0xf3, 0x1e, 0x51, 0xab, 0x90, 0xdd, 0x49, 0x3b, 0x9b, 0xf4, 0xd5, 0x59, 0x21,
-	0x74, 0x24, 0x1c, 0x87, 0x77, 0xd2, 0x4d, 0x5b, 0xd2, 0xa4, 0xdf, 0x99, 0x15, 0x9b, 0xd5, 0x90,
-	0x34, 0xaf, 0x71, 0x52, 0xb3, 0xae, 0x2f, 0xac, 0xfb, 0x18, 0x9c, 0xe3, 0x8a, 0xb8, 0xb7, 0xd1,
-	0xd7, 0x1a, 0x42, 0x06, 0x79, 0xd6, 0x3b, 0x98, 0xf5, 0x52, 0x89, 0x79, 0x77, 0xc4, 0xcb, 0xa7,
-	0x7e, 0x37, 0xc3, 0xbc, 0x1d, 0xc8, 0x33, 0x8e, 0x8d, 0xd6, 0x51, 0x18, 0xf3, 0xde, 0xc0, 0x33,
-	0xb3, 0x3e, 0x4f, 0x62, 0xe2, 0xfb, 0x88, 0x37, 0xdd, 0x55, 0xbd, 0x06, 0x29, 0xbd, 0x18, 0xdf,
-	0x15, 0xd7, 0x98, 0xb3, 0x21, 0xfc, 0xe9, 0x5d, 0x21, 0xb3, 0xb7, 0xa3, 0xc1, 0x24, 0x16, 0xb7,
-	0x96, 0xa5, 0x10, 0x3f, 0xb4, 0xdc, 0xa7, 0x9c, 0x6b, 0x19, 0xb9, 0xfa, 0xc0, 0x7e, 0x69, 0x16,
-	0xa9, 0x60, 0x91, 0x3d, 0xb3, 0xc8, 0x25, 0xce, 0xda, 0x86, 0x6b, 0x4a, 0x56, 0x1e, 0xd0, 0x39,
-	0x4d, 0xcf, 0x39, 0xf4, 0xdc, 0x35, 0x3d, 0x2f, 0xfa, 0x1a, 0x6a, 0x18, 0x3e, 0x4d, 0x48, 0xbe,
-	0xcb, 0xc4, 0x45, 0xa0, 0xd8, 0x02, 0x62, 0x6d, 0x3b, 0xe2, 0xe6, 0x98, 0xfe, 0x4b, 0x60, 0x25,
-	0xb7, 0x94, 0xd0, 0x89, 0xaa, 0xd7, 0x2a, 0x64, 0x5e, 0x56, 0x5d, 0xfd, 0x7f, 0x52, 0x16, 0xfd,
-	0x75, 0x81, 0x94, 0x6f, 0xee, 0x85, 0x07, 0x8d, 0x19, 0x6f, 0x9e, 0xc0, 0x19, 0xbb, 0xe1, 0xec,
-	0xd6, 0x74, 0x03, 0x81, 0xa4, 0xdd, 0x45, 0x52, 0xd1, 0x9b, 0xec, 0xb9, 0xb9, 0x85, 0x97, 0xdb,
-	0x8d, 0x7b, 0xed, 0xe7, 0xe6, 0x16, 0xee, 0xb5, 0x1b, 0xaf, 0xb4, 0xc3, 0xea, 0xe1, 0x5e, 0xbb,
-	0x73, 0xb8, 0x7f, 0x70, 0xf4, 0xfc, 0x33, 0xed, 0x67, 0xc3, 0x2b, 0xe6, 0xa7, 0x0e, 0xfc, 0x3b,
-	0x68, 0xef, 0xed, 0x3e, 0x73, 0xf3, 0xbd, 0xbd, 0x7e, 0x76, 0x6b, 0x72, 0xb2, 0x7e, 0x9a, 0x0e,
-	0x37, 0x7a, 0xe9, 0x20, 0x4a, 0x7a, 0x1b, 0x62, 0xb6, 0x27, 0x93, 0xee, 0xc6, 0xed, 0xe6, 0xc6,
-	0xe9, 0xf0, 0x0c, 0x3f, 0x9f, 0xae, 0xf5, 0xe2, 0x64, 0xad, 0x97, 0x6e, 0x64, 0xf1, 0x38, 0x3b,
-	0x8b, 0xb2, 0x08, 0xc3, 0xcd, 0xff, 0x05, 0x00, 0x00, 0xff, 0xff, 0x9f, 0x34, 0xd6, 0x88, 0x19,
-	0x17, 0x00, 0x00,
-}
-
-func init() {
-	xxx_Fields_protoFile_FileDesc.Messages = xxx_Fields_protoFile_MessageDescs[0:1]
-	xxx_Fields_protoFile_MessageDescs[0].Enums = xxx_Fields_protoFile_EnumDescs[0:1]
-	xxx_Fields_protoFile_MessageDescs[0].Messages = xxx_Fields_protoFile_MessageDescs[1:9]
-	xxx_Fields_protoFile_MessageDescs[0].Fields[1].EnumType = xxx_Fields_protoFile_EnumTypes[0]
-	xxx_Fields_protoFile_MessageDescs[0].Fields[16].MessageType = xxx_Fields_protoFile_MessageTypes[8].Type
-	xxx_Fields_protoFile_MessageDescs[0].Fields[17].MessageType = xxx_Fields_protoFile_MessageTypes[1].Type
-	xxx_Fields_protoFile_MessageDescs[0].Fields[19].EnumType = xxx_Fields_protoFile_EnumTypes[0]
-	xxx_Fields_protoFile_MessageDescs[0].Fields[34].MessageType = xxx_Fields_protoFile_MessageTypes[8].Type
-	xxx_Fields_protoFile_MessageDescs[0].Fields[35].MessageType = xxx_Fields_protoFile_MessageTypes[2].Type
-	xxx_Fields_protoFile_MessageDescs[0].Fields[37].EnumType = xxx_Fields_protoFile_EnumTypes[0]
-	xxx_Fields_protoFile_MessageDescs[0].Fields[52].MessageType = xxx_Fields_protoFile_MessageTypes[8].Type
-	xxx_Fields_protoFile_MessageDescs[0].Fields[53].MessageType = xxx_Fields_protoFile_MessageTypes[3].Type
-	xxx_Fields_protoFile_MessageDescs[0].Fields[55].EnumType = xxx_Fields_protoFile_EnumTypes[0]
-	xxx_Fields_protoFile_MessageDescs[0].Fields[78].MessageType = xxx_Fields_protoFile_MessageDescs[4].Reference()
-	xxx_Fields_protoFile_MessageDescs[0].Fields[79].MessageType = xxx_Fields_protoFile_MessageDescs[5].Reference()
-	xxx_Fields_protoFile_MessageDescs[0].Fields[80].MessageType = xxx_Fields_protoFile_MessageDescs[6].Reference()
-	xxx_Fields_protoFile_MessageDescs[0].Fields[82].EnumType = xxx_Fields_protoFile_EnumTypes[0]
-	xxx_Fields_protoFile_MessageDescs[0].Fields[97].MessageType = xxx_Fields_protoFile_MessageTypes[8].Type
-	xxx_Fields_protoFile_MessageDescs[0].Fields[98].MessageType = xxx_Fields_protoFile_MessageTypes[7].Type
-	xxx_Fields_protoFile_MessageDescs[5].Fields[1].MessageType = xxx_Fields_protoFile_MessageTypes[8].Type
-	xxx_Fields_protoFile_MessageDescs[6].Fields[1].EnumType = xxx_Fields_protoFile_EnumTypes[0]
-	var err error
-	Fields_protoFile, err = prototype.NewFile(&xxx_Fields_protoFile_FileDesc)
-	if err != nil {
-		panic(err)
-	}
-}
+	// 5913 bytes of the wire-encoded FileDescriptorProto
+	0x0a, 0x13, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x2e,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x15, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x22, 0xa7, 0x2d, 0x0a,
+	0x10, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x54, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67,
+	0x65, 0x12, 0x23, 0x0a, 0x0d, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x62, 0x6f,
+	0x6f, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e,
+	0x61, 0x6c, 0x42, 0x6f, 0x6f, 0x6c, 0x12, 0x51, 0x0a, 0x0d, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e,
+	0x61, 0x6c, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e,
+	0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x54, 0x65, 0x73, 0x74, 0x4d,
+	0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x0c, 0x6f, 0x70, 0x74,
+	0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x25, 0x0a, 0x0e, 0x6f, 0x70, 0x74,
+	0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x18, 0x03, 0x20, 0x01, 0x28,
+	0x05, 0x52, 0x0d, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x49, 0x6e, 0x74, 0x33, 0x32,
+	0x12, 0x27, 0x0a, 0x0f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x69, 0x6e,
+	0x74, 0x33, 0x32, 0x18, 0x04, 0x20, 0x01, 0x28, 0x11, 0x52, 0x0e, 0x6f, 0x70, 0x74, 0x69, 0x6f,
+	0x6e, 0x61, 0x6c, 0x53, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x27, 0x0a, 0x0f, 0x6f, 0x70, 0x74,
+	0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x18, 0x05, 0x20, 0x01,
+	0x28, 0x0d, 0x52, 0x0e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x55, 0x69, 0x6e, 0x74,
+	0x33, 0x32, 0x12, 0x25, 0x0a, 0x0e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x69,
+	0x6e, 0x74, 0x36, 0x34, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x6f, 0x70, 0x74, 0x69,
+	0x6f, 0x6e, 0x61, 0x6c, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x27, 0x0a, 0x0f, 0x6f, 0x70, 0x74,
+	0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x18, 0x07, 0x20, 0x01,
+	0x28, 0x12, 0x52, 0x0e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x53, 0x69, 0x6e, 0x74,
+	0x36, 0x34, 0x12, 0x27, 0x0a, 0x0f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x75,
+	0x69, 0x6e, 0x74, 0x36, 0x34, 0x18, 0x08, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x6f, 0x70, 0x74,
+	0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x2b, 0x0a, 0x11, 0x6f,
+	0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32,
+	0x18, 0x09, 0x20, 0x01, 0x28, 0x0f, 0x52, 0x10, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c,
+	0x53, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x12, 0x29, 0x0a, 0x10, 0x6f, 0x70, 0x74, 0x69,
+	0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x18, 0x0a, 0x20, 0x01,
+	0x28, 0x07, 0x52, 0x0f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x46, 0x69, 0x78, 0x65,
+	0x64, 0x33, 0x32, 0x12, 0x25, 0x0a, 0x0e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f,
+	0x66, 0x6c, 0x6f, 0x61, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0d, 0x6f, 0x70, 0x74,
+	0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x12, 0x2b, 0x0a, 0x11, 0x6f, 0x70,
+	0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x18,
+	0x0c, 0x20, 0x01, 0x28, 0x10, 0x52, 0x10, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x53,
+	0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x12, 0x29, 0x0a, 0x10, 0x6f, 0x70, 0x74, 0x69, 0x6f,
+	0x6e, 0x61, 0x6c, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x18, 0x0d, 0x20, 0x01, 0x28,
+	0x06, 0x52, 0x0f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x46, 0x69, 0x78, 0x65, 0x64,
+	0x36, 0x34, 0x12, 0x27, 0x0a, 0x0f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x64,
+	0x6f, 0x75, 0x62, 0x6c, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0e, 0x6f, 0x70, 0x74,
+	0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x6f,
+	0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x0f,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x53, 0x74,
+	0x72, 0x69, 0x6e, 0x67, 0x12, 0x25, 0x0a, 0x0e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c,
+	0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x6f, 0x70,
+	0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x5a, 0x0a, 0x10, 0x6f,
+	0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18,
+	0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x46, 0x69,
+	0x65, 0x6c, 0x64, 0x54, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d,
+	0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x0f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c,
+	0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x5b, 0x0a, 0x0d, 0x6f, 0x70, 0x74, 0x69, 0x6f,
+	0x6e, 0x61, 0x6c, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0a, 0x32, 0x35,
+	0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x54, 0x65, 0x73, 0x74,
+	0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c,
+	0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x0d, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x67,
+	0x72, 0x6f, 0x75, 0x70, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64,
+	0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x18, 0x65, 0x20, 0x02, 0x28, 0x08, 0x52, 0x0c, 0x72, 0x65, 0x71,
+	0x75, 0x69, 0x72, 0x65, 0x64, 0x42, 0x6f, 0x6f, 0x6c, 0x12, 0x51, 0x0a, 0x0d, 0x72, 0x65, 0x71,
+	0x75, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x18, 0x66, 0x20, 0x02, 0x28, 0x0e,
+	0x32, 0x2c, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x54, 0x65,
+	0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x0c,
+	0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x25, 0x0a, 0x0e,
+	0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x18, 0x67,
+	0x20, 0x02, 0x28, 0x05, 0x52, 0x0d, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x49, 0x6e,
+	0x74, 0x33, 0x32, 0x12, 0x27, 0x0a, 0x0f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x5f,
+	0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x18, 0x68, 0x20, 0x02, 0x28, 0x11, 0x52, 0x0e, 0x72, 0x65,
+	0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x53, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x27, 0x0a, 0x0f,
+	0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x18,
+	0x69, 0x20, 0x02, 0x28, 0x0d, 0x52, 0x0e, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x55,
+	0x69, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x25, 0x0a, 0x0e, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65,
+	0x64, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x18, 0x6a, 0x20, 0x02, 0x28, 0x03, 0x52, 0x0d, 0x72,
+	0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x27, 0x0a, 0x0f,
+	0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x18,
+	0x6b, 0x20, 0x02, 0x28, 0x12, 0x52, 0x0e, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x53,
+	0x69, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x27, 0x0a, 0x0f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65,
+	0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x18, 0x6c, 0x20, 0x02, 0x28, 0x04, 0x52, 0x0e,
+	0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x2b,
+	0x0a, 0x11, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65,
+	0x64, 0x33, 0x32, 0x18, 0x6d, 0x20, 0x02, 0x28, 0x0f, 0x52, 0x10, 0x72, 0x65, 0x71, 0x75, 0x69,
+	0x72, 0x65, 0x64, 0x53, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x12, 0x29, 0x0a, 0x10, 0x72,
+	0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x18,
+	0x6e, 0x20, 0x02, 0x28, 0x07, 0x52, 0x0f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x46,
+	0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x12, 0x25, 0x0a, 0x0e, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72,
+	0x65, 0x64, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x18, 0x6f, 0x20, 0x02, 0x28, 0x02, 0x52, 0x0d,
+	0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x12, 0x2b, 0x0a,
+	0x11, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64,
+	0x36, 0x34, 0x18, 0x70, 0x20, 0x02, 0x28, 0x10, 0x52, 0x10, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72,
+	0x65, 0x64, 0x53, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x12, 0x29, 0x0a, 0x10, 0x72, 0x65,
+	0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x18, 0x71,
+	0x20, 0x02, 0x28, 0x06, 0x52, 0x0f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x46, 0x69,
+	0x78, 0x65, 0x64, 0x36, 0x34, 0x12, 0x27, 0x0a, 0x0f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65,
+	0x64, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x18, 0x72, 0x20, 0x02, 0x28, 0x01, 0x52, 0x0e,
+	0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x12, 0x27,
+	0x0a, 0x0f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e,
+	0x67, 0x18, 0x73, 0x20, 0x02, 0x28, 0x09, 0x52, 0x0e, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65,
+	0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x25, 0x0a, 0x0e, 0x72, 0x65, 0x71, 0x75, 0x69,
+	0x72, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x74, 0x20, 0x02, 0x28, 0x0c, 0x52,
+	0x0d, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x5a,
+	0x0a, 0x10, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x4d, 0x65, 0x73, 0x73, 0x61,
+	0x67, 0x65, 0x18, 0x75, 0x20, 0x02, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32,
+	0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x54, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67,
+	0x65, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x0f, 0x72, 0x65, 0x71, 0x75, 0x69,
+	0x72, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x5b, 0x0a, 0x0d, 0x72, 0x65,
+	0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x76, 0x20, 0x02, 0x28,
+	0x0a, 0x32, 0x35, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x54,
+	0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x69,
+	0x72, 0x65, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x0d, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72,
+	0x65, 0x64, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x24, 0x0a, 0x0d, 0x72, 0x65, 0x70, 0x65, 0x61,
+	0x74, 0x65, 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x18, 0xc9, 0x01, 0x20, 0x03, 0x28, 0x08, 0x52,
+	0x0c, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x6f, 0x6f, 0x6c, 0x12, 0x52, 0x0a,
+	0x0d, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x18, 0xca,
+	0x01, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x46, 0x69,
+	0x65, 0x6c, 0x64, 0x54, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x45,
+	0x6e, 0x75, 0x6d, 0x52, 0x0c, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75,
+	0x6d, 0x12, 0x26, 0x0a, 0x0e, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e,
+	0x74, 0x33, 0x32, 0x18, 0xcb, 0x01, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0d, 0x72, 0x65, 0x70, 0x65,
+	0x61, 0x74, 0x65, 0x64, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x28, 0x0a, 0x0f, 0x72, 0x65, 0x70,
+	0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x18, 0xcc, 0x01, 0x20,
+	0x03, 0x28, 0x11, 0x52, 0x0e, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x6e,
+	0x74, 0x33, 0x32, 0x12, 0x28, 0x0a, 0x0f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f,
+	0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x18, 0xcd, 0x01, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x0e, 0x72,
+	0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x26, 0x0a,
+	0x0e, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x18,
+	0xce, 0x01, 0x20, 0x03, 0x28, 0x03, 0x52, 0x0d, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64,
+	0x49, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x28, 0x0a, 0x0f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65,
+	0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x18, 0xcf, 0x01, 0x20, 0x03, 0x28, 0x12, 0x52,
+	0x0e, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x12,
+	0x28, 0x0a, 0x0f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74,
+	0x36, 0x34, 0x18, 0xd0, 0x01, 0x20, 0x03, 0x28, 0x04, 0x52, 0x0e, 0x72, 0x65, 0x70, 0x65, 0x61,
+	0x74, 0x65, 0x64, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x2c, 0x0a, 0x11, 0x72, 0x65, 0x70,
+	0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x18, 0xd1,
+	0x01, 0x20, 0x03, 0x28, 0x0f, 0x52, 0x10, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53,
+	0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x12, 0x2a, 0x0a, 0x10, 0x72, 0x65, 0x70, 0x65, 0x61,
+	0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x18, 0xd2, 0x01, 0x20, 0x03,
+	0x28, 0x07, 0x52, 0x0f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x78, 0x65,
+	0x64, 0x33, 0x32, 0x12, 0x26, 0x0a, 0x0e, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f,
+	0x66, 0x6c, 0x6f, 0x61, 0x74, 0x18, 0xd3, 0x01, 0x20, 0x03, 0x28, 0x02, 0x52, 0x0d, 0x72, 0x65,
+	0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x12, 0x2c, 0x0a, 0x11, 0x72,
+	0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34,
+	0x18, 0xd4, 0x01, 0x20, 0x03, 0x28, 0x10, 0x52, 0x10, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65,
+	0x64, 0x53, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x12, 0x2a, 0x0a, 0x10, 0x72, 0x65, 0x70,
+	0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x18, 0xd5, 0x01,
+	0x20, 0x03, 0x28, 0x06, 0x52, 0x0f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69,
+	0x78, 0x65, 0x64, 0x36, 0x34, 0x12, 0x28, 0x0a, 0x0f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65,
+	0x64, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x18, 0xd6, 0x01, 0x20, 0x03, 0x28, 0x01, 0x52,
+	0x0e, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x12,
+	0x28, 0x0a, 0x0f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69,
+	0x6e, 0x67, 0x18, 0xd7, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x72, 0x65, 0x70, 0x65, 0x61,
+	0x74, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x26, 0x0a, 0x0e, 0x72, 0x65, 0x70,
+	0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0xd8, 0x01, 0x20, 0x03,
+	0x28, 0x0c, 0x52, 0x0d, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x74, 0x65,
+	0x73, 0x12, 0x5b, 0x0a, 0x10, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x4d, 0x65,
+	0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0xd9, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67,
+	0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x54, 0x65, 0x73, 0x74, 0x4d, 0x65,
+	0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x0f, 0x72,
+	0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x5c,
+	0x0a, 0x0d, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18,
+	0xda, 0x01, 0x20, 0x03, 0x28, 0x0a, 0x32, 0x35, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x46,
+	0x69, 0x65, 0x6c, 0x64, 0x54, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e,
+	0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x0d, 0x72,
+	0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x28, 0x0a, 0x0c,
+	0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x18, 0xad, 0x02, 0x20,
+	0x01, 0x28, 0x08, 0x3a, 0x04, 0x74, 0x72, 0x75, 0x65, 0x52, 0x0b, 0x64, 0x65, 0x66, 0x61, 0x75,
+	0x6c, 0x74, 0x42, 0x6f, 0x6f, 0x6c, 0x12, 0x55, 0x0a, 0x0c, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c,
+	0x74, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x18, 0xae, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e,
+	0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x54, 0x65, 0x73, 0x74, 0x4d,
+	0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x3a, 0x03, 0x4f, 0x4e, 0x45,
+	0x52, 0x0b, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x27, 0x0a,
+	0x0d, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x18, 0xaf,
+	0x02, 0x20, 0x01, 0x28, 0x05, 0x3a, 0x01, 0x31, 0x52, 0x0c, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c,
+	0x74, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x29, 0x0a, 0x0e, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c,
+	0x74, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x18, 0xb0, 0x02, 0x20, 0x01, 0x28, 0x11, 0x3a,
+	0x01, 0x31, 0x52, 0x0d, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x69, 0x6e, 0x74, 0x33,
+	0x32, 0x12, 0x29, 0x0a, 0x0e, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x75, 0x69, 0x6e,
+	0x74, 0x33, 0x32, 0x18, 0xb1, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x3a, 0x01, 0x31, 0x52, 0x0d, 0x64,
+	0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x27, 0x0a, 0x0d,
+	0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x18, 0xb2, 0x02,
+	0x20, 0x01, 0x28, 0x03, 0x3a, 0x01, 0x31, 0x52, 0x0c, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74,
+	0x49, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x29, 0x0a, 0x0e, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74,
+	0x5f, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x18, 0xb3, 0x02, 0x20, 0x01, 0x28, 0x12, 0x3a, 0x01,
+	0x31, 0x52, 0x0d, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x69, 0x6e, 0x74, 0x36, 0x34,
+	0x12, 0x29, 0x0a, 0x0e, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x75, 0x69, 0x6e, 0x74,
+	0x36, 0x34, 0x18, 0xb4, 0x02, 0x20, 0x01, 0x28, 0x04, 0x3a, 0x01, 0x31, 0x52, 0x0d, 0x64, 0x65,
+	0x66, 0x61, 0x75, 0x6c, 0x74, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x2d, 0x0a, 0x10, 0x64,
+	0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x18,
+	0xb5, 0x02, 0x20, 0x01, 0x28, 0x0f, 0x3a, 0x01, 0x31, 0x52, 0x0f, 0x64, 0x65, 0x66, 0x61, 0x75,
+	0x6c, 0x74, 0x53, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x12, 0x2b, 0x0a, 0x0f, 0x64, 0x65,
+	0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x18, 0xb6, 0x02,
+	0x20, 0x01, 0x28, 0x07, 0x3a, 0x01, 0x31, 0x52, 0x0e, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74,
+	0x46, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x12, 0x2a, 0x0a, 0x0d, 0x64, 0x65, 0x66, 0x61, 0x75,
+	0x6c, 0x74, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x18, 0xb7, 0x02, 0x20, 0x01, 0x28, 0x02, 0x3a,
+	0x04, 0x33, 0x2e, 0x31, 0x34, 0x52, 0x0c, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x46, 0x6c,
+	0x6f, 0x61, 0x74, 0x12, 0x2d, 0x0a, 0x10, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x73,
+	0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x18, 0xb8, 0x02, 0x20, 0x01, 0x28, 0x10, 0x3a, 0x01,
+	0x31, 0x52, 0x0f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x66, 0x69, 0x78, 0x65, 0x64,
+	0x36, 0x34, 0x12, 0x2b, 0x0a, 0x0f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x66, 0x69,
+	0x78, 0x65, 0x64, 0x36, 0x34, 0x18, 0xb9, 0x02, 0x20, 0x01, 0x28, 0x06, 0x3a, 0x01, 0x31, 0x52,
+	0x0e, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x46, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x12,
+	0x2e, 0x0a, 0x0e, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c,
+	0x65, 0x18, 0xba, 0x02, 0x20, 0x01, 0x28, 0x01, 0x3a, 0x06, 0x33, 0x2e, 0x31, 0x34, 0x31, 0x35,
+	0x52, 0x0d, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x12,
+	0x37, 0x0a, 0x0e, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e,
+	0x67, 0x18, 0xbb, 0x02, 0x20, 0x01, 0x28, 0x09, 0x3a, 0x0f, 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x2c,
+	0x22, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x21, 0x22, 0x0a, 0x52, 0x0d, 0x64, 0x65, 0x66, 0x61, 0x75,
+	0x6c, 0x74, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x3c, 0x0a, 0x0d, 0x64, 0x65, 0x66, 0x61,
+	0x75, 0x6c, 0x74, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0xbc, 0x02, 0x20, 0x01, 0x28, 0x0c,
+	0x3a, 0x16, 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x2c, 0x5c, 0x33, 0x33, 0x36, 0x5c, 0x32, 0x35, 0x35,
+	0x5c, 0x32, 0x37, 0x36, 0x5c, 0x33, 0x35, 0x37, 0x52, 0x0c, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c,
+	0x74, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x31, 0x0a, 0x13, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c,
+	0x74, 0x5f, 0x7a, 0x65, 0x72, 0x6f, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0xde, 0x02,
+	0x20, 0x01, 0x28, 0x09, 0x3a, 0x00, 0x52, 0x11, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5a,
+	0x65, 0x72, 0x6f, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x2f, 0x0a, 0x12, 0x64, 0x65, 0x66,
+	0x61, 0x75, 0x6c, 0x74, 0x5f, 0x7a, 0x65, 0x72, 0x6f, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18,
+	0xdf, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x3a, 0x00, 0x52, 0x10, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c,
+	0x74, 0x5a, 0x65, 0x72, 0x6f, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x37, 0x0a, 0x14, 0x64, 0x65,
+	0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x6e, 0x65, 0x67, 0x69,
+	0x6e, 0x66, 0x18, 0x90, 0x03, 0x20, 0x01, 0x28, 0x02, 0x3a, 0x04, 0x2d, 0x69, 0x6e, 0x66, 0x52,
+	0x12, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x4e, 0x65, 0x67,
+	0x69, 0x6e, 0x66, 0x12, 0x36, 0x0a, 0x14, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x66,
+	0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x6e, 0x66, 0x18, 0x91, 0x03, 0x20, 0x01,
+	0x28, 0x02, 0x3a, 0x03, 0x69, 0x6e, 0x66, 0x52, 0x12, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74,
+	0x46, 0x6c, 0x6f, 0x61, 0x74, 0x50, 0x6f, 0x73, 0x69, 0x6e, 0x66, 0x12, 0x30, 0x0a, 0x11, 0x64,
+	0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x6e, 0x61, 0x6e,
+	0x18, 0x92, 0x03, 0x20, 0x01, 0x28, 0x02, 0x3a, 0x03, 0x6e, 0x61, 0x6e, 0x52, 0x0f, 0x64, 0x65,
+	0x66, 0x61, 0x75, 0x6c, 0x74, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x4e, 0x61, 0x6e, 0x12, 0x39, 0x0a,
+	0x15, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f,
+	0x6e, 0x65, 0x67, 0x69, 0x6e, 0x66, 0x18, 0x93, 0x03, 0x20, 0x01, 0x28, 0x01, 0x3a, 0x04, 0x2d,
+	0x69, 0x6e, 0x66, 0x52, 0x13, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x44, 0x6f, 0x75, 0x62,
+	0x6c, 0x65, 0x4e, 0x65, 0x67, 0x69, 0x6e, 0x66, 0x12, 0x38, 0x0a, 0x15, 0x64, 0x65, 0x66, 0x61,
+	0x75, 0x6c, 0x74, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x6e,
+	0x66, 0x18, 0x94, 0x03, 0x20, 0x01, 0x28, 0x01, 0x3a, 0x03, 0x69, 0x6e, 0x66, 0x52, 0x13, 0x64,
+	0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x50, 0x6f, 0x73, 0x69,
+	0x6e, 0x66, 0x12, 0x32, 0x0a, 0x12, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x64, 0x6f,
+	0x75, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6e, 0x18, 0x95, 0x03, 0x20, 0x01, 0x28, 0x01, 0x3a,
+	0x03, 0x6e, 0x61, 0x6e, 0x52, 0x10, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x44, 0x6f, 0x75,
+	0x62, 0x6c, 0x65, 0x4e, 0x61, 0x6e, 0x12, 0x63, 0x0a, 0x0f, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e,
+	0x74, 0x33, 0x32, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x18, 0xf4, 0x03, 0x20, 0x03, 0x28, 0x0b,
+	0x32, 0x3a, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x54, 0x65,
+	0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74,
+	0x33, 0x32, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x6d, 0x61,
+	0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x6c, 0x0a, 0x12, 0x6d,
+	0x61, 0x70, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67,
+	0x65, 0x18, 0xf5, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32,
+	0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x54, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67,
+	0x65, 0x2e, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61,
+	0x67, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x10, 0x6d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69,
+	0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x66, 0x0a, 0x10, 0x6d, 0x61, 0x70,
+	0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x18, 0xf6, 0x03,
+	0x20, 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x46, 0x69, 0x65,
+	0x6c, 0x64, 0x54, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x61,
+	0x70, 0x46, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x45, 0x6e, 0x75, 0x6d, 0x45, 0x6e, 0x74, 0x72,
+	0x79, 0x52, 0x0e, 0x6d, 0x61, 0x70, 0x46, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x45, 0x6e, 0x75,
+	0x6d, 0x12, 0x20, 0x0a, 0x0a, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x18,
+	0xd9, 0x04, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x09, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x42,
+	0x6f, 0x6f, 0x6c, 0x12, 0x4e, 0x0a, 0x0a, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x65, 0x6e, 0x75,
+	0x6d, 0x18, 0xda, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32,
+	0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x54, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67,
+	0x65, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x48, 0x00, 0x52, 0x09, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x45,
+	0x6e, 0x75, 0x6d, 0x12, 0x22, 0x0a, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x69, 0x6e, 0x74,
+	0x33, 0x32, 0x18, 0xdb, 0x04, 0x20, 0x01, 0x28, 0x05, 0x48, 0x00, 0x52, 0x0a, 0x6f, 0x6e, 0x65,
+	0x6f, 0x66, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x24, 0x0a, 0x0c, 0x6f, 0x6e, 0x65, 0x6f, 0x66,
+	0x5f, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x18, 0xdc, 0x04, 0x20, 0x01, 0x28, 0x11, 0x48, 0x00,
+	0x52, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x53, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x24, 0x0a,
+	0x0c, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x18, 0xdd, 0x04,
+	0x20, 0x01, 0x28, 0x0d, 0x48, 0x00, 0x52, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x55, 0x69, 0x6e,
+	0x74, 0x33, 0x32, 0x12, 0x22, 0x0a, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x69, 0x6e, 0x74,
+	0x36, 0x34, 0x18, 0xde, 0x04, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x0a, 0x6f, 0x6e, 0x65,
+	0x6f, 0x66, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x24, 0x0a, 0x0c, 0x6f, 0x6e, 0x65, 0x6f, 0x66,
+	0x5f, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x18, 0xdf, 0x04, 0x20, 0x01, 0x28, 0x12, 0x48, 0x00,
+	0x52, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x53, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x24, 0x0a,
+	0x0c, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x18, 0xe0, 0x04,
+	0x20, 0x01, 0x28, 0x04, 0x48, 0x00, 0x52, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x55, 0x69, 0x6e,
+	0x74, 0x36, 0x34, 0x12, 0x28, 0x0a, 0x0e, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x73, 0x66, 0x69,
+	0x78, 0x65, 0x64, 0x33, 0x32, 0x18, 0xe1, 0x04, 0x20, 0x01, 0x28, 0x0f, 0x48, 0x00, 0x52, 0x0d,
+	0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x53, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x12, 0x26, 0x0a,
+	0x0d, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x18, 0xe2,
+	0x04, 0x20, 0x01, 0x28, 0x07, 0x48, 0x00, 0x52, 0x0c, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x46, 0x69,
+	0x78, 0x65, 0x64, 0x33, 0x32, 0x12, 0x22, 0x0a, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x66,
+	0x6c, 0x6f, 0x61, 0x74, 0x18, 0xe3, 0x04, 0x20, 0x01, 0x28, 0x02, 0x48, 0x00, 0x52, 0x0a, 0x6f,
+	0x6e, 0x65, 0x6f, 0x66, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x12, 0x28, 0x0a, 0x0e, 0x6f, 0x6e, 0x65,
+	0x6f, 0x66, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x18, 0xe4, 0x04, 0x20, 0x01,
+	0x28, 0x10, 0x48, 0x00, 0x52, 0x0d, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x53, 0x66, 0x69, 0x78, 0x65,
+	0x64, 0x36, 0x34, 0x12, 0x26, 0x0a, 0x0d, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x66, 0x69, 0x78,
+	0x65, 0x64, 0x36, 0x34, 0x18, 0xe5, 0x04, 0x20, 0x01, 0x28, 0x06, 0x48, 0x00, 0x52, 0x0c, 0x6f,
+	0x6e, 0x65, 0x6f, 0x66, 0x46, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x12, 0x24, 0x0a, 0x0c, 0x6f,
+	0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x18, 0xe6, 0x04, 0x20, 0x01,
+	0x28, 0x01, 0x48, 0x00, 0x52, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x44, 0x6f, 0x75, 0x62, 0x6c,
+	0x65, 0x12, 0x24, 0x0a, 0x0c, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e,
+	0x67, 0x18, 0xe7, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, 0x6f, 0x6e, 0x65, 0x6f,
+	0x66, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x22, 0x0a, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66,
+	0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0xe8, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52,
+	0x0a, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x57, 0x0a, 0x0d, 0x6f,
+	0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0xe9, 0x04, 0x20,
+	0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x46, 0x69, 0x65, 0x6c,
+	0x64, 0x54, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x65, 0x73,
+	0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0c, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x4d, 0x65, 0x73,
+	0x73, 0x61, 0x67, 0x65, 0x12, 0x55, 0x0a, 0x0a, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x67, 0x72, 0x6f,
+	0x75, 0x70, 0x18, 0xea, 0x04, 0x20, 0x01, 0x28, 0x0a, 0x32, 0x32, 0x2e, 0x67, 0x6f, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x32, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x54, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61,
+	0x67, 0x65, 0x2e, 0x4f, 0x6e, 0x65, 0x6f, 0x66, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x48, 0x00, 0x52,
+	0x0a, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x30, 0x0a, 0x11, 0x6f,
+	0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x6c, 0x61, 0x72, 0x67, 0x65, 0x73, 0x74, 0x5f, 0x74, 0x61, 0x67,
+	0x18, 0xff, 0xff, 0xff, 0xff, 0x01, 0x20, 0x01, 0x28, 0x05, 0x48, 0x00, 0x52, 0x0f, 0x6f, 0x6e,
+	0x65, 0x6f, 0x66, 0x4c, 0x61, 0x72, 0x67, 0x65, 0x73, 0x74, 0x54, 0x61, 0x67, 0x12, 0x21, 0x0a,
+	0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x74, 0x77, 0x6f, 0x5f, 0x31, 0x18, 0xbc, 0x05, 0x20,
+	0x01, 0x28, 0x05, 0x48, 0x01, 0x52, 0x09, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x54, 0x77, 0x6f, 0x31,
+	0x12, 0x21, 0x0a, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x74, 0x77, 0x6f, 0x5f, 0x32, 0x18,
+	0xbd, 0x05, 0x20, 0x01, 0x28, 0x03, 0x48, 0x01, 0x52, 0x09, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x54,
+	0x77, 0x6f, 0x32, 0x1a, 0x36, 0x0a, 0x0d, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x47,
+	0x72, 0x6f, 0x75, 0x70, 0x12, 0x25, 0x0a, 0x0e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c,
+	0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x13, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6f, 0x70,
+	0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x1a, 0x36, 0x0a, 0x0d, 0x52,
+	0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x25, 0x0a, 0x0e,
+	0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x77,
+	0x20, 0x02, 0x28, 0x09, 0x52, 0x0d, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x47, 0x72,
+	0x6f, 0x75, 0x70, 0x1a, 0x37, 0x0a, 0x0d, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x47,
+	0x72, 0x6f, 0x75, 0x70, 0x12, 0x26, 0x0a, 0x0e, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64,
+	0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0xdb, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x72,
+	0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x1a, 0x40, 0x0a, 0x12,
+	0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x45, 0x6e, 0x74,
+	0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52,
+	0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20,
+	0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x74,
+	0x0a, 0x15, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61,
+	0x67, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x45, 0x0a, 0x05, 0x76, 0x61, 0x6c,
+	0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32,
+	0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x54, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67,
+	0x65, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,
+	0x3a, 0x02, 0x38, 0x01, 0x1a, 0x6f, 0x0a, 0x13, 0x4d, 0x61, 0x70, 0x46, 0x69, 0x78, 0x65, 0x64,
+	0x36, 0x34, 0x45, 0x6e, 0x75, 0x6d, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b,
+	0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x06, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x42, 0x0a,
+	0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x67,
+	0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x54, 0x65, 0x73, 0x74, 0x4d, 0x65,
+	0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75,
+	0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x39, 0x0a, 0x0a, 0x4f, 0x6e, 0x65, 0x6f, 0x66, 0x47, 0x72,
+	0x6f, 0x75, 0x70, 0x12, 0x2b, 0x0a, 0x11, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x67, 0x72, 0x6f,
+	0x75, 0x70, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x18, 0xeb, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x0f, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x46, 0x69, 0x65, 0x6c, 0x64,
+	0x1a, 0x09, 0x0a, 0x07, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x19, 0x0a, 0x04, 0x45,
+	0x6e, 0x75, 0x6d, 0x12, 0x08, 0x0a, 0x04, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, 0x07, 0x0a,
+	0x03, 0x4f, 0x4e, 0x45, 0x10, 0x01, 0x42, 0x0d, 0x0a, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f,
+	0x66, 0x69, 0x65, 0x6c, 0x64, 0x42, 0x0b, 0x0a, 0x09, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x74,
+	0x77, 0x6f, 0x4a, 0x06, 0x08, 0x90, 0x4e, 0x10, 0x91, 0x4e, 0x4a, 0x06, 0x08, 0x91, 0x4e, 0x10,
+	0x92, 0x4e, 0x52, 0x0c, 0x54, 0x45, 0x4e, 0x5f, 0x54, 0x48, 0x4f, 0x55, 0x53, 0x41, 0x4e, 0x44,
+	0x52, 0x14, 0x54, 0x45, 0x4e, 0x5f, 0x54, 0x48, 0x4f, 0x55, 0x53, 0x41, 0x4e, 0x44, 0x5f, 0x41,
+	0x4e, 0x44, 0x5f, 0x4f, 0x4e, 0x45, 0x42, 0x41, 0x5a, 0x3f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62,
+	0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x62, 0x75, 0x66, 0x2f, 0x76, 0x32, 0x2f, 0x63, 0x6d, 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x67, 0x6f, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x64, 0x61,
+	0x74, 0x61, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32,
+}
+
+var fileDescriptor_fd8a9d72b841fd68_gzipped = func() []byte {
+	bb := new(bytes.Buffer)
+	zw, _ := gzip.NewWriterLevel(bb, gzip.NoCompression)
+	zw.Write(fileDescriptor_fd8a9d72b841fd68)
+	zw.Close()
+	return bb.Bytes()
+}()
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
 var Fields_protoFile protoreflect.FileDescriptor
 
-var xxx_Fields_protoFile_FileDesc = prototype.File{
-	Syntax:  protoreflect.Proto2,
-	Path:    "proto2/fields.proto",
-	Package: "goproto.protoc.proto2",
-}
-var xxx_Fields_protoFile_EnumTypes = [1]protoreflect.EnumType{
-	prototype.GoEnum(
-		xxx_Fields_protoFile_EnumDescs[0].Reference(),
-		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
-			return FieldTestMessage_Enum(n)
-		},
-	),
-}
-var xxx_Fields_protoFile_EnumDescs = [1]prototype.Enum{
-	{
-		Name: "Enum",
-		Values: []prototype.EnumValue{
-			{Name: "ZERO", Number: 0},
-			{Name: "ONE", Number: 1},
-		},
-	},
-}
-var xxx_Fields_protoFile_MessageTypes = [9]protoimpl.MessageType{
-	{Type: prototype.GoMessage(
-		xxx_Fields_protoFile_MessageDescs[0].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_FieldTestMessage{new(FieldTestMessage)}
-		},
-	)},
-	{Type: prototype.GoMessage(
-		xxx_Fields_protoFile_MessageDescs[1].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_FieldTestMessage_OptionalGroup{new(FieldTestMessage_OptionalGroup)}
-		},
-	)},
-	{Type: prototype.GoMessage(
-		xxx_Fields_protoFile_MessageDescs[2].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_FieldTestMessage_RequiredGroup{new(FieldTestMessage_RequiredGroup)}
-		},
-	)},
-	{Type: prototype.GoMessage(
-		xxx_Fields_protoFile_MessageDescs[3].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_FieldTestMessage_RepeatedGroup{new(FieldTestMessage_RepeatedGroup)}
-		},
-	)},
-	{ /* no message type for FieldTestMessage_MapInt32Int64Entry */ },
-	{ /* no message type for FieldTestMessage_MapStringMessageEntry */ },
-	{ /* no message type for FieldTestMessage_MapFixed64EnumEntry */ },
-	{Type: prototype.GoMessage(
-		xxx_Fields_protoFile_MessageDescs[7].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_FieldTestMessage_OneofGroup{new(FieldTestMessage_OneofGroup)}
-		},
-	)},
-	{Type: prototype.GoMessage(
-		xxx_Fields_protoFile_MessageDescs[8].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_FieldTestMessage_Message{new(FieldTestMessage_Message)}
-		},
-	)},
-}
-var xxx_Fields_protoFile_MessageDescs = [9]prototype.Message{
-	{
-		Name: "FieldTestMessage",
-		Fields: []prototype.Field{
-			{
-				Name:        "optional_bool",
-				Number:      1,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.BoolKind,
-				JSONName:    "optionalBool",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "optional_enum",
-				Number:      2,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.EnumKind,
-				JSONName:    "optionalEnum",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "optional_int32",
-				Number:      3,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Int32Kind,
-				JSONName:    "optionalInt32",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "optional_sint32",
-				Number:      4,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Sint32Kind,
-				JSONName:    "optionalSint32",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "optional_uint32",
-				Number:      5,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Uint32Kind,
-				JSONName:    "optionalUint32",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "optional_int64",
-				Number:      6,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Int64Kind,
-				JSONName:    "optionalInt64",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "optional_sint64",
-				Number:      7,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Sint64Kind,
-				JSONName:    "optionalSint64",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "optional_uint64",
-				Number:      8,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Uint64Kind,
-				JSONName:    "optionalUint64",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "optional_sfixed32",
-				Number:      9,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Sfixed32Kind,
-				JSONName:    "optionalSfixed32",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "optional_fixed32",
-				Number:      10,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Fixed32Kind,
-				JSONName:    "optionalFixed32",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "optional_float",
-				Number:      11,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.FloatKind,
-				JSONName:    "optionalFloat",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "optional_sfixed64",
-				Number:      12,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Sfixed64Kind,
-				JSONName:    "optionalSfixed64",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "optional_fixed64",
-				Number:      13,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Fixed64Kind,
-				JSONName:    "optionalFixed64",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "optional_double",
-				Number:      14,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.DoubleKind,
-				JSONName:    "optionalDouble",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "optional_string",
-				Number:      15,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.StringKind,
-				JSONName:    "optionalString",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "optional_bytes",
-				Number:      16,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.BytesKind,
-				JSONName:    "optionalBytes",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "optional_Message",
-				Number:      17,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.MessageKind,
-				JSONName:    "optionalMessage",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "optionalgroup",
-				Number:      18,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.GroupKind,
-				JSONName:    "optionalgroup",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "required_bool",
-				Number:      101,
-				Cardinality: protoreflect.Required,
-				Kind:        protoreflect.BoolKind,
-				JSONName:    "requiredBool",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "required_enum",
-				Number:      102,
-				Cardinality: protoreflect.Required,
-				Kind:        protoreflect.EnumKind,
-				JSONName:    "requiredEnum",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "required_int32",
-				Number:      103,
-				Cardinality: protoreflect.Required,
-				Kind:        protoreflect.Int32Kind,
-				JSONName:    "requiredInt32",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "required_sint32",
-				Number:      104,
-				Cardinality: protoreflect.Required,
-				Kind:        protoreflect.Sint32Kind,
-				JSONName:    "requiredSint32",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "required_uint32",
-				Number:      105,
-				Cardinality: protoreflect.Required,
-				Kind:        protoreflect.Uint32Kind,
-				JSONName:    "requiredUint32",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "required_int64",
-				Number:      106,
-				Cardinality: protoreflect.Required,
-				Kind:        protoreflect.Int64Kind,
-				JSONName:    "requiredInt64",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "required_sint64",
-				Number:      107,
-				Cardinality: protoreflect.Required,
-				Kind:        protoreflect.Sint64Kind,
-				JSONName:    "requiredSint64",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "required_uint64",
-				Number:      108,
-				Cardinality: protoreflect.Required,
-				Kind:        protoreflect.Uint64Kind,
-				JSONName:    "requiredUint64",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "required_sfixed32",
-				Number:      109,
-				Cardinality: protoreflect.Required,
-				Kind:        protoreflect.Sfixed32Kind,
-				JSONName:    "requiredSfixed32",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "required_fixed32",
-				Number:      110,
-				Cardinality: protoreflect.Required,
-				Kind:        protoreflect.Fixed32Kind,
-				JSONName:    "requiredFixed32",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "required_float",
-				Number:      111,
-				Cardinality: protoreflect.Required,
-				Kind:        protoreflect.FloatKind,
-				JSONName:    "requiredFloat",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "required_sfixed64",
-				Number:      112,
-				Cardinality: protoreflect.Required,
-				Kind:        protoreflect.Sfixed64Kind,
-				JSONName:    "requiredSfixed64",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "required_fixed64",
-				Number:      113,
-				Cardinality: protoreflect.Required,
-				Kind:        protoreflect.Fixed64Kind,
-				JSONName:    "requiredFixed64",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "required_double",
-				Number:      114,
-				Cardinality: protoreflect.Required,
-				Kind:        protoreflect.DoubleKind,
-				JSONName:    "requiredDouble",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "required_string",
-				Number:      115,
-				Cardinality: protoreflect.Required,
-				Kind:        protoreflect.StringKind,
-				JSONName:    "requiredString",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "required_bytes",
-				Number:      116,
-				Cardinality: protoreflect.Required,
-				Kind:        protoreflect.BytesKind,
-				JSONName:    "requiredBytes",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "required_Message",
-				Number:      117,
-				Cardinality: protoreflect.Required,
-				Kind:        protoreflect.MessageKind,
-				JSONName:    "requiredMessage",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "requiredgroup",
-				Number:      118,
-				Cardinality: protoreflect.Required,
-				Kind:        protoreflect.GroupKind,
-				JSONName:    "requiredgroup",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "repeated_bool",
-				Number:      201,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.BoolKind,
-				JSONName:    "repeatedBool",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "repeated_enum",
-				Number:      202,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.EnumKind,
-				JSONName:    "repeatedEnum",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "repeated_int32",
-				Number:      203,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.Int32Kind,
-				JSONName:    "repeatedInt32",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "repeated_sint32",
-				Number:      204,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.Sint32Kind,
-				JSONName:    "repeatedSint32",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "repeated_uint32",
-				Number:      205,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.Uint32Kind,
-				JSONName:    "repeatedUint32",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "repeated_int64",
-				Number:      206,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.Int64Kind,
-				JSONName:    "repeatedInt64",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "repeated_sint64",
-				Number:      207,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.Sint64Kind,
-				JSONName:    "repeatedSint64",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "repeated_uint64",
-				Number:      208,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.Uint64Kind,
-				JSONName:    "repeatedUint64",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "repeated_sfixed32",
-				Number:      209,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.Sfixed32Kind,
-				JSONName:    "repeatedSfixed32",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "repeated_fixed32",
-				Number:      210,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.Fixed32Kind,
-				JSONName:    "repeatedFixed32",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "repeated_float",
-				Number:      211,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.FloatKind,
-				JSONName:    "repeatedFloat",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "repeated_sfixed64",
-				Number:      212,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.Sfixed64Kind,
-				JSONName:    "repeatedSfixed64",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "repeated_fixed64",
-				Number:      213,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.Fixed64Kind,
-				JSONName:    "repeatedFixed64",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "repeated_double",
-				Number:      214,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.DoubleKind,
-				JSONName:    "repeatedDouble",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "repeated_string",
-				Number:      215,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.StringKind,
-				JSONName:    "repeatedString",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "repeated_bytes",
-				Number:      216,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.BytesKind,
-				JSONName:    "repeatedBytes",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "repeated_Message",
-				Number:      217,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.MessageKind,
-				JSONName:    "repeatedMessage",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "repeatedgroup",
-				Number:      218,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.GroupKind,
-				JSONName:    "repeatedgroup",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "default_bool",
-				Number:      301,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.BoolKind,
-				JSONName:    "defaultBool",
-				Default:     protoreflect.ValueOf(bool(true)),
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "default_enum",
-				Number:      302,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.EnumKind,
-				JSONName:    "defaultEnum",
-				Default:     protoreflect.ValueOf(string("ONE")),
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "default_int32",
-				Number:      303,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Int32Kind,
-				JSONName:    "defaultInt32",
-				Default:     protoreflect.ValueOf(int32(1)),
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "default_sint32",
-				Number:      304,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Sint32Kind,
-				JSONName:    "defaultSint32",
-				Default:     protoreflect.ValueOf(int32(1)),
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "default_uint32",
-				Number:      305,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Uint32Kind,
-				JSONName:    "defaultUint32",
-				Default:     protoreflect.ValueOf(uint32(1)),
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "default_int64",
-				Number:      306,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Int64Kind,
-				JSONName:    "defaultInt64",
-				Default:     protoreflect.ValueOf(int64(1)),
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "default_sint64",
-				Number:      307,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Sint64Kind,
-				JSONName:    "defaultSint64",
-				Default:     protoreflect.ValueOf(int64(1)),
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "default_uint64",
-				Number:      308,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Uint64Kind,
-				JSONName:    "defaultUint64",
-				Default:     protoreflect.ValueOf(uint64(1)),
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "default_sfixed32",
-				Number:      309,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Sfixed32Kind,
-				JSONName:    "defaultSfixed32",
-				Default:     protoreflect.ValueOf(int32(1)),
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "default_fixed32",
-				Number:      310,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Fixed32Kind,
-				JSONName:    "defaultFixed32",
-				Default:     protoreflect.ValueOf(uint32(1)),
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "default_float",
-				Number:      311,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.FloatKind,
-				JSONName:    "defaultFloat",
-				Default:     protoreflect.ValueOf(float32(3.14)),
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "default_sfixed64",
-				Number:      312,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Sfixed64Kind,
-				JSONName:    "defaultSfixed64",
-				Default:     protoreflect.ValueOf(int64(1)),
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "default_fixed64",
-				Number:      313,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Fixed64Kind,
-				JSONName:    "defaultFixed64",
-				Default:     protoreflect.ValueOf(uint64(1)),
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "default_double",
-				Number:      314,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.DoubleKind,
-				JSONName:    "defaultDouble",
-				Default:     protoreflect.ValueOf(float64(3.1415)),
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "default_string",
-				Number:      315,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.StringKind,
-				JSONName:    "defaultString",
-				Default:     protoreflect.ValueOf(string("hello,\"world!\"\n")),
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "default_bytes",
-				Number:      316,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.BytesKind,
-				JSONName:    "defaultBytes",
-				Default:     protoreflect.ValueOf(("hello,ޭ\xbe\xef")),
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "default_zero_string",
-				Number:      350,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.StringKind,
-				JSONName:    "defaultZeroString",
-				Default:     protoreflect.ValueOf(string("")),
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "default_zero_bytes",
-				Number:      351,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.BytesKind,
-				JSONName:    "defaultZeroBytes",
-				Default:     protoreflect.ValueOf(("")),
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "default_float_neginf",
-				Number:      400,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.FloatKind,
-				JSONName:    "defaultFloatNeginf",
-				Default:     protoreflect.ValueOf(float32(math.Inf(-1))),
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "default_float_posinf",
-				Number:      401,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.FloatKind,
-				JSONName:    "defaultFloatPosinf",
-				Default:     protoreflect.ValueOf(float32(math.Inf(+1))),
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "default_float_nan",
-				Number:      402,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.FloatKind,
-				JSONName:    "defaultFloatNan",
-				Default:     protoreflect.ValueOf(float32(math.NaN())),
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "default_double_neginf",
-				Number:      403,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.DoubleKind,
-				JSONName:    "defaultDoubleNeginf",
-				Default:     protoreflect.ValueOf(float64(math.Inf(-1))),
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "default_double_posinf",
-				Number:      404,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.DoubleKind,
-				JSONName:    "defaultDoublePosinf",
-				Default:     protoreflect.ValueOf(float64(math.Inf(+1))),
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "default_double_nan",
-				Number:      405,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.DoubleKind,
-				JSONName:    "defaultDoubleNan",
-				Default:     protoreflect.ValueOf(float64(math.NaN())),
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "map_int32_int64",
-				Number:      500,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.MessageKind,
-				JSONName:    "mapInt32Int64",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "map_string_message",
-				Number:      501,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.MessageKind,
-				JSONName:    "mapStringMessage",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "map_fixed64_enum",
-				Number:      502,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.MessageKind,
-				JSONName:    "mapFixed64Enum",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "oneof_bool",
-				Number:      601,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.BoolKind,
-				JSONName:    "oneofBool",
-				OneofName:   "oneof_field",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "oneof_enum",
-				Number:      602,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.EnumKind,
-				JSONName:    "oneofEnum",
-				OneofName:   "oneof_field",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "oneof_int32",
-				Number:      603,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Int32Kind,
-				JSONName:    "oneofInt32",
-				OneofName:   "oneof_field",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "oneof_sint32",
-				Number:      604,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Sint32Kind,
-				JSONName:    "oneofSint32",
-				OneofName:   "oneof_field",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "oneof_uint32",
-				Number:      605,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Uint32Kind,
-				JSONName:    "oneofUint32",
-				OneofName:   "oneof_field",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "oneof_int64",
-				Number:      606,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Int64Kind,
-				JSONName:    "oneofInt64",
-				OneofName:   "oneof_field",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "oneof_sint64",
-				Number:      607,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Sint64Kind,
-				JSONName:    "oneofSint64",
-				OneofName:   "oneof_field",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "oneof_uint64",
-				Number:      608,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Uint64Kind,
-				JSONName:    "oneofUint64",
-				OneofName:   "oneof_field",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "oneof_sfixed32",
-				Number:      609,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Sfixed32Kind,
-				JSONName:    "oneofSfixed32",
-				OneofName:   "oneof_field",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "oneof_fixed32",
-				Number:      610,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Fixed32Kind,
-				JSONName:    "oneofFixed32",
-				OneofName:   "oneof_field",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "oneof_float",
-				Number:      611,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.FloatKind,
-				JSONName:    "oneofFloat",
-				OneofName:   "oneof_field",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "oneof_sfixed64",
-				Number:      612,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Sfixed64Kind,
-				JSONName:    "oneofSfixed64",
-				OneofName:   "oneof_field",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "oneof_fixed64",
-				Number:      613,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Fixed64Kind,
-				JSONName:    "oneofFixed64",
-				OneofName:   "oneof_field",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "oneof_double",
-				Number:      614,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.DoubleKind,
-				JSONName:    "oneofDouble",
-				OneofName:   "oneof_field",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "oneof_string",
-				Number:      615,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.StringKind,
-				JSONName:    "oneofString",
-				OneofName:   "oneof_field",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "oneof_bytes",
-				Number:      616,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.BytesKind,
-				JSONName:    "oneofBytes",
-				OneofName:   "oneof_field",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "oneof_Message",
-				Number:      617,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.MessageKind,
-				JSONName:    "oneofMessage",
-				OneofName:   "oneof_field",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "oneofgroup",
-				Number:      618,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.GroupKind,
-				JSONName:    "oneofgroup",
-				OneofName:   "oneof_field",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "oneof_largest_tag",
-				Number:      536870911,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Int32Kind,
-				JSONName:    "oneofLargestTag",
-				OneofName:   "oneof_field",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "oneof_two_1",
-				Number:      700,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Int32Kind,
-				JSONName:    "oneofTwo1",
-				OneofName:   "oneof_two",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "oneof_two_2",
-				Number:      701,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Int64Kind,
-				JSONName:    "oneofTwo2",
-				OneofName:   "oneof_two",
-				IsPacked:    prototype.False,
-			},
-		},
-		Oneofs: []prototype.Oneof{
-			{Name: "oneof_field"},
-			{Name: "oneof_two"},
-		},
-		ReservedNames:  []protoreflect.Name{"TEN_THOUSAND", "TEN_THOUSAND_AND_ONE"},
-		ReservedRanges: [][2]protoreflect.FieldNumber{{10000, 10001}, {10001, 10002}},
-	},
-	{
-		Name: "OptionalGroup",
-		Fields: []prototype.Field{
-			{
-				Name:        "optional_group",
-				Number:      19,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.StringKind,
-				JSONName:    "optionalGroup",
-				IsPacked:    prototype.False,
-			},
-		},
-	},
-	{
-		Name: "RequiredGroup",
-		Fields: []prototype.Field{
-			{
-				Name:        "required_group",
-				Number:      119,
-				Cardinality: protoreflect.Required,
-				Kind:        protoreflect.StringKind,
-				JSONName:    "requiredGroup",
-				IsPacked:    prototype.False,
-			},
-		},
-	},
-	{
-		Name: "RepeatedGroup",
-		Fields: []prototype.Field{
-			{
-				Name:        "repeated_group",
-				Number:      219,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.StringKind,
-				JSONName:    "repeatedGroup",
-				IsPacked:    prototype.False,
-			},
-		},
-	},
-	{
-		Name: "MapInt32Int64Entry",
-		Fields: []prototype.Field{
-			{
-				Name:        "key",
-				Number:      1,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Int32Kind,
-				JSONName:    "key",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "value",
-				Number:      2,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Int64Kind,
-				JSONName:    "value",
-				IsPacked:    prototype.False,
-			},
-		},
-		IsMapEntry: true,
-	},
-	{
-		Name: "MapStringMessageEntry",
-		Fields: []prototype.Field{
-			{
-				Name:        "key",
-				Number:      1,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.StringKind,
-				JSONName:    "key",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "value",
-				Number:      2,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.MessageKind,
-				JSONName:    "value",
-				IsPacked:    prototype.False,
-			},
-		},
-		IsMapEntry: true,
-	},
-	{
-		Name: "MapFixed64EnumEntry",
-		Fields: []prototype.Field{
-			{
-				Name:        "key",
-				Number:      1,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Fixed64Kind,
-				JSONName:    "key",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "value",
-				Number:      2,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.EnumKind,
-				JSONName:    "value",
-				IsPacked:    prototype.False,
-			},
-		},
-		IsMapEntry: true,
-	},
-	{
-		Name: "OneofGroup",
-		Fields: []prototype.Field{
-			{
-				Name:        "oneof_group_field",
-				Number:      619,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.StringKind,
-				JSONName:    "oneofGroupField",
-				IsPacked:    prototype.False,
-			},
-		},
-	},
-	{
-		Name: "Message",
-	},
+var xxx_Fields_protoFile_enumTypes [1]protoreflect.EnumType
+var xxx_Fields_protoFile_messageTypes [9]protoimpl.MessageType
+var xxx_Fields_protoFile_goTypes = []interface{}{
+	(FieldTestMessage_Enum)(0),             // 0: goproto.protoc.proto2.FieldTestMessage.Enum
+	(*FieldTestMessage)(nil),               // 1: goproto.protoc.proto2.FieldTestMessage
+	(*FieldTestMessage_OptionalGroup)(nil), // 2: goproto.protoc.proto2.FieldTestMessage.OptionalGroup
+	(*FieldTestMessage_RequiredGroup)(nil), // 3: goproto.protoc.proto2.FieldTestMessage.RequiredGroup
+	(*FieldTestMessage_RepeatedGroup)(nil), // 4: goproto.protoc.proto2.FieldTestMessage.RepeatedGroup
+	nil,                                    // 5: goproto.protoc.proto2.FieldTestMessage.MapInt32Int64Entry
+	nil,                                    // 6: goproto.protoc.proto2.FieldTestMessage.MapStringMessageEntry
+	nil,                                    // 7: goproto.protoc.proto2.FieldTestMessage.MapFixed64EnumEntry
+	(*FieldTestMessage_OneofGroup)(nil),    // 8: goproto.protoc.proto2.FieldTestMessage.OneofGroup
+	(*FieldTestMessage_Message)(nil),       // 9: goproto.protoc.proto2.FieldTestMessage.Message
+}
+var xxx_Fields_protoFile_depIdxs = []int32{
+	0, // goproto.protoc.proto2.FieldTestMessage.optional_enum:type_name -> goproto.protoc.proto2.FieldTestMessage.Enum
+	9, // goproto.protoc.proto2.FieldTestMessage.optional_Message:type_name -> goproto.protoc.proto2.FieldTestMessage.Message
+	2, // goproto.protoc.proto2.FieldTestMessage.optionalgroup:type_name -> goproto.protoc.proto2.FieldTestMessage.OptionalGroup
+	0, // goproto.protoc.proto2.FieldTestMessage.required_enum:type_name -> goproto.protoc.proto2.FieldTestMessage.Enum
+	9, // goproto.protoc.proto2.FieldTestMessage.required_Message:type_name -> goproto.protoc.proto2.FieldTestMessage.Message
+	3, // goproto.protoc.proto2.FieldTestMessage.requiredgroup:type_name -> goproto.protoc.proto2.FieldTestMessage.RequiredGroup
+	0, // goproto.protoc.proto2.FieldTestMessage.repeated_enum:type_name -> goproto.protoc.proto2.FieldTestMessage.Enum
+	9, // goproto.protoc.proto2.FieldTestMessage.repeated_Message:type_name -> goproto.protoc.proto2.FieldTestMessage.Message
+	4, // goproto.protoc.proto2.FieldTestMessage.repeatedgroup:type_name -> goproto.protoc.proto2.FieldTestMessage.RepeatedGroup
+	0, // goproto.protoc.proto2.FieldTestMessage.default_enum:type_name -> goproto.protoc.proto2.FieldTestMessage.Enum
+	5, // goproto.protoc.proto2.FieldTestMessage.map_int32_int64:type_name -> goproto.protoc.proto2.FieldTestMessage.MapInt32Int64Entry
+	6, // goproto.protoc.proto2.FieldTestMessage.map_string_message:type_name -> goproto.protoc.proto2.FieldTestMessage.MapStringMessageEntry
+	7, // goproto.protoc.proto2.FieldTestMessage.map_fixed64_enum:type_name -> goproto.protoc.proto2.FieldTestMessage.MapFixed64EnumEntry
+	0, // goproto.protoc.proto2.FieldTestMessage.oneof_enum:type_name -> goproto.protoc.proto2.FieldTestMessage.Enum
+	9, // goproto.protoc.proto2.FieldTestMessage.oneof_Message:type_name -> goproto.protoc.proto2.FieldTestMessage.Message
+	8, // goproto.protoc.proto2.FieldTestMessage.oneofgroup:type_name -> goproto.protoc.proto2.FieldTestMessage.OneofGroup
+	9, // goproto.protoc.proto2.FieldTestMessage.MapStringMessageEntry.value:type_name -> goproto.protoc.proto2.FieldTestMessage.Message
+	0, // goproto.protoc.proto2.FieldTestMessage.MapFixed64EnumEntry.value:type_name -> goproto.protoc.proto2.FieldTestMessage.Enum
+}
+
+func init() {
+	var messageTypes [9]protoreflect.MessageType
+	Fields_protoFile = protoimpl.FileBuilder{
+		RawDescriptor:      fileDescriptor_fd8a9d72b841fd68,
+		GoTypes:            xxx_Fields_protoFile_goTypes,
+		DependencyIndexes:  xxx_Fields_protoFile_depIdxs,
+		EnumOutputTypes:    xxx_Fields_protoFile_enumTypes[:],
+		MessageOutputTypes: messageTypes[:],
+	}.Init()
+	messageGoTypes := xxx_Fields_protoFile_goTypes[1:][:9]
+	for i, mt := range messageTypes[:] {
+		xxx_Fields_protoFile_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
+		xxx_Fields_protoFile_messageTypes[i].PBType = mt
+	}
+	xxx_Fields_protoFile_goTypes = nil
+	xxx_Fields_protoFile_depIdxs = nil
 }

+ 68 - 144
cmd/protoc-gen-go/testdata/proto2/nested_messages.pb.go

@@ -4,10 +4,12 @@
 package proto2
 
 import (
+	bytes "bytes"
+	gzip "compress/gzip"
 	proto "github.com/golang/protobuf/proto"
 	protoreflect "github.com/golang/protobuf/v2/reflect/protoreflect"
-	prototype "github.com/golang/protobuf/v2/reflect/prototype"
 	protoimpl "github.com/golang/protobuf/v2/runtime/protoimpl"
+	reflect "reflect"
 )
 
 // This is a compile-time assertion to ensure that this generated file
@@ -24,29 +26,14 @@ type Layer1 struct {
 	XXX_sizecache        int32                 `json:"-"`
 }
 
-type xxx_Layer1 struct{ m *Layer1 }
-
 func (m *Layer1) ProtoReflect() protoreflect.Message {
-	return xxx_Layer1{m}
-}
-func (m xxx_Layer1) Type() protoreflect.MessageType {
-	return xxx_NestedMessages_protoFile_MessageTypes[0].Type
-}
-func (m xxx_Layer1) KnownFields() protoreflect.KnownFields {
-	return xxx_NestedMessages_protoFile_MessageTypes[0].KnownFieldsOf(m.m)
-}
-func (m xxx_Layer1) UnknownFields() protoreflect.UnknownFields {
-	return xxx_NestedMessages_protoFile_MessageTypes[0].UnknownFieldsOf(m.m)
+	return xxx_NestedMessages_protoFile_messageTypes[0].MessageOf(m)
 }
-func (m xxx_Layer1) Interface() protoreflect.ProtoMessage {
-	return m.m
-}
-
 func (m *Layer1) Reset()         { *m = Layer1{} }
 func (m *Layer1) String() string { return proto.CompactTextString(m) }
 func (*Layer1) ProtoMessage()    {}
 func (*Layer1) Descriptor() ([]byte, []int) {
-	return fileDescriptor_7417ee157699d191, []int{0}
+	return fileDescriptor_7417ee157699d191_gzipped, []int{0}
 }
 
 func (m *Layer1) XXX_Unmarshal(b []byte) error {
@@ -88,29 +75,14 @@ type Layer1_Layer2 struct {
 	XXX_sizecache        int32                 `json:"-"`
 }
 
-type xxx_Layer1_Layer2 struct{ m *Layer1_Layer2 }
-
 func (m *Layer1_Layer2) ProtoReflect() protoreflect.Message {
-	return xxx_Layer1_Layer2{m}
+	return xxx_NestedMessages_protoFile_messageTypes[1].MessageOf(m)
 }
-func (m xxx_Layer1_Layer2) Type() protoreflect.MessageType {
-	return xxx_NestedMessages_protoFile_MessageTypes[1].Type
-}
-func (m xxx_Layer1_Layer2) KnownFields() protoreflect.KnownFields {
-	return xxx_NestedMessages_protoFile_MessageTypes[1].KnownFieldsOf(m.m)
-}
-func (m xxx_Layer1_Layer2) UnknownFields() protoreflect.UnknownFields {
-	return xxx_NestedMessages_protoFile_MessageTypes[1].UnknownFieldsOf(m.m)
-}
-func (m xxx_Layer1_Layer2) Interface() protoreflect.ProtoMessage {
-	return m.m
-}
-
 func (m *Layer1_Layer2) Reset()         { *m = Layer1_Layer2{} }
 func (m *Layer1_Layer2) String() string { return proto.CompactTextString(m) }
 func (*Layer1_Layer2) ProtoMessage()    {}
 func (*Layer1_Layer2) Descriptor() ([]byte, []int) {
-	return fileDescriptor_7417ee157699d191, []int{0, 0}
+	return fileDescriptor_7417ee157699d191_gzipped, []int{0, 0}
 }
 
 func (m *Layer1_Layer2) XXX_Unmarshal(b []byte) error {
@@ -144,29 +116,14 @@ type Layer1_Layer2_Layer3 struct {
 	XXX_sizecache        int32    `json:"-"`
 }
 
-type xxx_Layer1_Layer2_Layer3 struct{ m *Layer1_Layer2_Layer3 }
-
 func (m *Layer1_Layer2_Layer3) ProtoReflect() protoreflect.Message {
-	return xxx_Layer1_Layer2_Layer3{m}
-}
-func (m xxx_Layer1_Layer2_Layer3) Type() protoreflect.MessageType {
-	return xxx_NestedMessages_protoFile_MessageTypes[2].Type
+	return xxx_NestedMessages_protoFile_messageTypes[2].MessageOf(m)
 }
-func (m xxx_Layer1_Layer2_Layer3) KnownFields() protoreflect.KnownFields {
-	return xxx_NestedMessages_protoFile_MessageTypes[2].KnownFieldsOf(m.m)
-}
-func (m xxx_Layer1_Layer2_Layer3) UnknownFields() protoreflect.UnknownFields {
-	return xxx_NestedMessages_protoFile_MessageTypes[2].UnknownFieldsOf(m.m)
-}
-func (m xxx_Layer1_Layer2_Layer3) Interface() protoreflect.ProtoMessage {
-	return m.m
-}
-
 func (m *Layer1_Layer2_Layer3) Reset()         { *m = Layer1_Layer2_Layer3{} }
 func (m *Layer1_Layer2_Layer3) String() string { return proto.CompactTextString(m) }
 func (*Layer1_Layer2_Layer3) ProtoMessage()    {}
 func (*Layer1_Layer2_Layer3) Descriptor() ([]byte, []int) {
-	return fileDescriptor_7417ee157699d191, []int{0, 0, 0}
+	return fileDescriptor_7417ee157699d191_gzipped, []int{0, 0, 0}
 }
 
 func (m *Layer1_Layer2_Layer3) XXX_Unmarshal(b []byte) error {
@@ -188,107 +145,74 @@ func (m *Layer1_Layer2_Layer3) XXX_DiscardUnknown() {
 var xxx_messageInfo_Layer1_Layer2_Layer3 proto.InternalMessageInfo
 
 func init() {
-	proto.RegisterFile("proto2/nested_messages.proto", fileDescriptor_7417ee157699d191)
+	proto.RegisterFile("proto2/nested_messages.proto", fileDescriptor_7417ee157699d191_gzipped)
 	proto.RegisterType((*Layer1)(nil), "goproto.protoc.proto2.Layer1")
 	proto.RegisterType((*Layer1_Layer2)(nil), "goproto.protoc.proto2.Layer1.Layer2")
 	proto.RegisterType((*Layer1_Layer2_Layer3)(nil), "goproto.protoc.proto2.Layer1.Layer2.Layer3")
 }
 
 var fileDescriptor_7417ee157699d191 = []byte{
-	// 190 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x29, 0x28, 0xca, 0x2f,
-	0xc9, 0x37, 0xd2, 0xcf, 0x4b, 0x2d, 0x2e, 0x49, 0x4d, 0x89, 0xcf, 0x4d, 0x2d, 0x2e, 0x4e, 0x4c,
-	0x4f, 0x2d, 0xd6, 0x03, 0x0b, 0x0b, 0x89, 0xa6, 0xe7, 0x83, 0x19, 0x10, 0x6e, 0x32, 0x84, 0x32,
-	0x52, 0x3a, 0xc3, 0xc8, 0xc5, 0xe6, 0x93, 0x58, 0x99, 0x5a, 0x64, 0x28, 0x64, 0xc2, 0xc5, 0x94,
-	0x63, 0x24, 0xc1, 0xa8, 0xc0, 0xa8, 0xc1, 0x6d, 0xa4, 0xa2, 0x87, 0x55, 0xb9, 0x1e, 0x44, 0x29,
-	0x84, 0x32, 0x0a, 0x62, 0xca, 0x31, 0x12, 0xb2, 0xe6, 0x62, 0xca, 0x31, 0x96, 0x60, 0x02, 0xeb,
-	0xd2, 0x26, 0x46, 0x17, 0x84, 0x32, 0x0e, 0x62, 0xca, 0x31, 0x96, 0xf2, 0x87, 0x5a, 0x0e, 0x33,
-	0x86, 0x91, 0x3c, 0x63, 0x38, 0xa0, 0xc6, 0x18, 0x3b, 0x39, 0x46, 0xd9, 0xa7, 0x67, 0x96, 0x64,
-	0x94, 0x26, 0xe9, 0x25, 0xe7, 0xe7, 0xea, 0xa7, 0xe7, 0xe7, 0x24, 0xe6, 0xa5, 0xeb, 0x83, 0xb5,
-	0x27, 0x95, 0xa6, 0xe9, 0x97, 0x19, 0xe9, 0x27, 0xe7, 0xa6, 0x40, 0xf8, 0xc9, 0xba, 0xe9, 0xa9,
-	0x79, 0xba, 0xe9, 0xf9, 0xfa, 0x25, 0xa9, 0xc5, 0x25, 0x29, 0x89, 0x25, 0x89, 0x10, 0x61, 0x23,
-	0x40, 0x00, 0x00, 0x00, 0xff, 0xff, 0x11, 0x21, 0xb0, 0x06, 0x47, 0x01, 0x00, 0x00,
-}
-
-func init() {
-	xxx_NestedMessages_protoFile_FileDesc.Messages = xxx_NestedMessages_protoFile_MessageDescs[0:1]
-	xxx_NestedMessages_protoFile_MessageDescs[0].Messages = xxx_NestedMessages_protoFile_MessageDescs[1:2]
-	xxx_NestedMessages_protoFile_MessageDescs[1].Messages = xxx_NestedMessages_protoFile_MessageDescs[2:3]
-	xxx_NestedMessages_protoFile_MessageDescs[0].Fields[0].MessageType = xxx_NestedMessages_protoFile_MessageTypes[1].Type
-	xxx_NestedMessages_protoFile_MessageDescs[0].Fields[1].MessageType = xxx_NestedMessages_protoFile_MessageTypes[2].Type
-	xxx_NestedMessages_protoFile_MessageDescs[1].Fields[0].MessageType = xxx_NestedMessages_protoFile_MessageTypes[2].Type
-	var err error
-	NestedMessages_protoFile, err = prototype.NewFile(&xxx_NestedMessages_protoFile_FileDesc)
-	if err != nil {
-		panic(err)
-	}
-}
+	// 327 bytes of the wire-encoded FileDescriptorProto
+	0x0a, 0x1c, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f,
+	0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x15,
+	0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x32, 0x22, 0xcc, 0x01, 0x0a, 0x06, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x31,
+	0x12, 0x34, 0x0a, 0x02, 0x6c, 0x32, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67,
+	0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x31, 0x2e, 0x4c, 0x61, 0x79, 0x65,
+	0x72, 0x32, 0x52, 0x02, 0x6c, 0x32, 0x12, 0x3b, 0x0a, 0x02, 0x6c, 0x33, 0x18, 0x02, 0x20, 0x01,
+	0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x4c, 0x61, 0x79, 0x65, 0x72,
+	0x31, 0x2e, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x32, 0x2e, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x33, 0x52,
+	0x02, 0x6c, 0x33, 0x1a, 0x4f, 0x0a, 0x06, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x32, 0x12, 0x3b, 0x0a,
+	0x02, 0x6c, 0x33, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x32, 0x2e, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x31, 0x2e, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x32, 0x2e,
+	0x4c, 0x61, 0x79, 0x65, 0x72, 0x33, 0x52, 0x02, 0x6c, 0x33, 0x1a, 0x08, 0x0a, 0x06, 0x4c, 0x61,
+	0x79, 0x65, 0x72, 0x33, 0x42, 0x41, 0x5a, 0x3f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63,
+	0x6f, 0x6d, 0x2f, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
+	0x75, 0x66, 0x2f, 0x76, 0x32, 0x2f, 0x63, 0x6d, 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63,
+	0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x67, 0x6f, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x64, 0x61, 0x74, 0x61,
+	0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32,
+}
+
+var fileDescriptor_7417ee157699d191_gzipped = func() []byte {
+	bb := new(bytes.Buffer)
+	zw, _ := gzip.NewWriterLevel(bb, gzip.NoCompression)
+	zw.Write(fileDescriptor_7417ee157699d191)
+	zw.Close()
+	return bb.Bytes()
+}()
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
 var NestedMessages_protoFile protoreflect.FileDescriptor
 
-var xxx_NestedMessages_protoFile_FileDesc = prototype.File{
-	Syntax:  protoreflect.Proto2,
-	Path:    "proto2/nested_messages.proto",
-	Package: "goproto.protoc.proto2",
-}
-var xxx_NestedMessages_protoFile_MessageTypes = [3]protoimpl.MessageType{
-	{Type: prototype.GoMessage(
-		xxx_NestedMessages_protoFile_MessageDescs[0].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_Layer1{new(Layer1)}
-		},
-	)},
-	{Type: prototype.GoMessage(
-		xxx_NestedMessages_protoFile_MessageDescs[1].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_Layer1_Layer2{new(Layer1_Layer2)}
-		},
-	)},
-	{Type: prototype.GoMessage(
-		xxx_NestedMessages_protoFile_MessageDescs[2].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_Layer1_Layer2_Layer3{new(Layer1_Layer2_Layer3)}
-		},
-	)},
-}
-var xxx_NestedMessages_protoFile_MessageDescs = [3]prototype.Message{
-	{
-		Name: "Layer1",
-		Fields: []prototype.Field{
-			{
-				Name:        "l2",
-				Number:      1,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.MessageKind,
-				JSONName:    "l2",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "l3",
-				Number:      2,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.MessageKind,
-				JSONName:    "l3",
-				IsPacked:    prototype.False,
-			},
-		},
-	},
-	{
-		Name: "Layer2",
-		Fields: []prototype.Field{
-			{
-				Name:        "l3",
-				Number:      1,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.MessageKind,
-				JSONName:    "l3",
-				IsPacked:    prototype.False,
-			},
-		},
-	},
-	{
-		Name: "Layer3",
-	},
+var xxx_NestedMessages_protoFile_messageTypes [3]protoimpl.MessageType
+var xxx_NestedMessages_protoFile_goTypes = []interface{}{
+	(*Layer1)(nil),               // 0: goproto.protoc.proto2.Layer1
+	(*Layer1_Layer2)(nil),        // 1: goproto.protoc.proto2.Layer1.Layer2
+	(*Layer1_Layer2_Layer3)(nil), // 2: goproto.protoc.proto2.Layer1.Layer2.Layer3
+}
+var xxx_NestedMessages_protoFile_depIdxs = []int32{
+	1, // goproto.protoc.proto2.Layer1.l2:type_name -> goproto.protoc.proto2.Layer1.Layer2
+	2, // goproto.protoc.proto2.Layer1.l3:type_name -> goproto.protoc.proto2.Layer1.Layer2.Layer3
+	2, // goproto.protoc.proto2.Layer1.Layer2.l3:type_name -> goproto.protoc.proto2.Layer1.Layer2.Layer3
+}
+
+func init() {
+	var messageTypes [3]protoreflect.MessageType
+	NestedMessages_protoFile = protoimpl.FileBuilder{
+		RawDescriptor:      fileDescriptor_7417ee157699d191,
+		GoTypes:            xxx_NestedMessages_protoFile_goTypes,
+		DependencyIndexes:  xxx_NestedMessages_protoFile_depIdxs,
+		MessageOutputTypes: messageTypes[:],
+	}.Init()
+	messageGoTypes := xxx_NestedMessages_protoFile_goTypes[0:][:3]
+	for i, mt := range messageTypes[:] {
+		xxx_NestedMessages_protoFile_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
+		xxx_NestedMessages_protoFile_messageTypes[i].PBType = mt
+	}
+	xxx_NestedMessages_protoFile_goTypes = nil
+	xxx_NestedMessages_protoFile_depIdxs = nil
 }

+ 49 - 74
cmd/protoc-gen-go/testdata/proto2/proto2.pb.go

@@ -4,10 +4,12 @@
 package proto2
 
 import (
+	bytes "bytes"
+	gzip "compress/gzip"
 	proto "github.com/golang/protobuf/proto"
 	protoreflect "github.com/golang/protobuf/v2/reflect/protoreflect"
-	prototype "github.com/golang/protobuf/v2/reflect/prototype"
 	protoimpl "github.com/golang/protobuf/v2/runtime/protoimpl"
+	reflect "reflect"
 )
 
 // This is a compile-time assertion to ensure that this generated file
@@ -24,29 +26,14 @@ type Message struct {
 	XXX_sizecache        int32    `json:"-"`
 }
 
-type xxx_Message struct{ m *Message }
-
 func (m *Message) ProtoReflect() protoreflect.Message {
-	return xxx_Message{m}
-}
-func (m xxx_Message) Type() protoreflect.MessageType {
-	return xxx_Proto2_protoFile_MessageTypes[0].Type
-}
-func (m xxx_Message) KnownFields() protoreflect.KnownFields {
-	return xxx_Proto2_protoFile_MessageTypes[0].KnownFieldsOf(m.m)
-}
-func (m xxx_Message) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Proto2_protoFile_MessageTypes[0].UnknownFieldsOf(m.m)
+	return xxx_Proto2_protoFile_messageTypes[0].MessageOf(m)
 }
-func (m xxx_Message) Interface() protoreflect.ProtoMessage {
-	return m.m
-}
-
 func (m *Message) Reset()         { *m = Message{} }
 func (m *Message) String() string { return proto.CompactTextString(m) }
 func (*Message) ProtoMessage()    {}
 func (*Message) Descriptor() ([]byte, []int) {
-	return fileDescriptor_d756bbe8817c03c1, []int{0}
+	return fileDescriptor_d756bbe8817c03c1_gzipped, []int{0}
 }
 
 func (m *Message) XXX_Unmarshal(b []byte) error {
@@ -82,71 +69,59 @@ func (m *Message) GetM() *Message {
 }
 
 func init() {
-	proto.RegisterFile("proto2/proto2.proto", fileDescriptor_d756bbe8817c03c1)
+	proto.RegisterFile("proto2/proto2.proto", fileDescriptor_d756bbe8817c03c1_gzipped)
 	proto.RegisterType((*Message)(nil), "goproto.protoc.proto2.Message")
 }
 
 var fileDescriptor_d756bbe8817c03c1 = []byte{
-	// 152 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x12, 0x2e, 0x28, 0xca, 0x2f,
-	0xc9, 0x37, 0xd2, 0x87, 0x50, 0x7a, 0x60, 0x4a, 0x48, 0x34, 0x3d, 0x1f, 0xcc, 0x80, 0x70, 0x93,
-	0x21, 0x94, 0x91, 0x92, 0x27, 0x17, 0xbb, 0x6f, 0x6a, 0x71, 0x71, 0x62, 0x7a, 0xaa, 0x90, 0x00,
-	0x17, 0x73, 0xa6, 0xb1, 0x91, 0x04, 0xa3, 0x02, 0xa3, 0x06, 0x6b, 0x10, 0x88, 0x29, 0xa4, 0xc3,
-	0xc5, 0x98, 0x2b, 0xc1, 0xa4, 0xc0, 0xa8, 0xc1, 0x6d, 0x24, 0xa7, 0x87, 0x55, 0xbf, 0x1e, 0x54,
-	0x73, 0x10, 0x63, 0xae, 0x93, 0x63, 0x94, 0x7d, 0x7a, 0x66, 0x49, 0x46, 0x69, 0x92, 0x5e, 0x72,
-	0x7e, 0xae, 0x7e, 0x7a, 0x7e, 0x4e, 0x62, 0x5e, 0x3a, 0xc4, 0x0d, 0x49, 0xa5, 0x69, 0xfa, 0x65,
-	0x46, 0xfa, 0xc9, 0xb9, 0x29, 0x10, 0x7e, 0xb2, 0x6e, 0x7a, 0x6a, 0x9e, 0x6e, 0x7a, 0xbe, 0x7e,
-	0x49, 0x6a, 0x71, 0x49, 0x4a, 0x62, 0x49, 0x22, 0xd4, 0xa9, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff,
-	0x85, 0x42, 0x0d, 0x5f, 0xba, 0x00, 0x00, 0x00,
-}
-
-func init() {
-	xxx_Proto2_protoFile_FileDesc.Messages = xxx_Proto2_protoFile_MessageDescs[0:1]
-	xxx_Proto2_protoFile_MessageDescs[0].Fields[1].MessageType = xxx_Proto2_protoFile_MessageTypes[0].Type
-	var err error
-	Proto2_protoFile, err = prototype.NewFile(&xxx_Proto2_protoFile_FileDesc)
-	if err != nil {
-		panic(err)
-	}
-}
+	// 186 bytes of the wire-encoded FileDescriptorProto
+	0x0a, 0x13, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x15, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x22, 0x49, 0x0a, 0x07,
+	0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x33, 0x32, 0x18, 0x01,
+	0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x69, 0x33, 0x32, 0x12, 0x2c, 0x0a, 0x01, 0x6d, 0x18, 0x02,
+	0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x4d, 0x65, 0x73,
+	0x73, 0x61, 0x67, 0x65, 0x52, 0x01, 0x6d, 0x42, 0x41, 0x5a, 0x3f, 0x67, 0x69, 0x74, 0x68, 0x75,
+	0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2f, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x76, 0x32, 0x2f, 0x63, 0x6d, 0x64, 0x2f, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x67, 0x6f, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x64,
+	0x61, 0x74, 0x61, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32,
+}
+
+var fileDescriptor_d756bbe8817c03c1_gzipped = func() []byte {
+	bb := new(bytes.Buffer)
+	zw, _ := gzip.NewWriterLevel(bb, gzip.NoCompression)
+	zw.Write(fileDescriptor_d756bbe8817c03c1)
+	zw.Close()
+	return bb.Bytes()
+}()
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
 var Proto2_protoFile protoreflect.FileDescriptor
 
-var xxx_Proto2_protoFile_FileDesc = prototype.File{
-	Syntax:  protoreflect.Proto2,
-	Path:    "proto2/proto2.proto",
-	Package: "goproto.protoc.proto2",
+var xxx_Proto2_protoFile_messageTypes [1]protoimpl.MessageType
+var xxx_Proto2_protoFile_goTypes = []interface{}{
+	(*Message)(nil), // 0: goproto.protoc.proto2.Message
 }
-var xxx_Proto2_protoFile_MessageTypes = [1]protoimpl.MessageType{
-	{Type: prototype.GoMessage(
-		xxx_Proto2_protoFile_MessageDescs[0].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_Message{new(Message)}
-		},
-	)},
+var xxx_Proto2_protoFile_depIdxs = []int32{
+	0, // goproto.protoc.proto2.Message.m:type_name -> goproto.protoc.proto2.Message
 }
-var xxx_Proto2_protoFile_MessageDescs = [1]prototype.Message{
-	{
-		Name: "Message",
-		Fields: []prototype.Field{
-			{
-				Name:        "i32",
-				Number:      1,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Int32Kind,
-				JSONName:    "i32",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "m",
-				Number:      2,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.MessageKind,
-				JSONName:    "m",
-				IsPacked:    prototype.False,
-			},
-		},
-	},
+
+func init() {
+	var messageTypes [1]protoreflect.MessageType
+	Proto2_protoFile = protoimpl.FileBuilder{
+		RawDescriptor:      fileDescriptor_d756bbe8817c03c1,
+		GoTypes:            xxx_Proto2_protoFile_goTypes,
+		DependencyIndexes:  xxx_Proto2_protoFile_depIdxs,
+		MessageOutputTypes: messageTypes[:],
+	}.Init()
+	messageGoTypes := xxx_Proto2_protoFile_goTypes[0:][:1]
+	for i, mt := range messageTypes[:] {
+		xxx_Proto2_protoFile_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
+		xxx_Proto2_protoFile_messageTypes[i].PBType = mt
+	}
+	xxx_Proto2_protoFile_goTypes = nil
+	xxx_Proto2_protoFile_depIdxs = nil
 }

+ 37 - 43
cmd/protoc-gen-go/testdata/proto3/enum.pb.go

@@ -4,9 +4,10 @@
 package proto3
 
 import (
+	bytes "bytes"
+	gzip "compress/gzip"
 	proto "github.com/golang/protobuf/proto"
 	protoreflect "github.com/golang/protobuf/v2/reflect/protoreflect"
-	prototype "github.com/golang/protobuf/v2/reflect/prototype"
 	protoimpl "github.com/golang/protobuf/v2/runtime/protoimpl"
 )
 
@@ -25,7 +26,7 @@ const (
 )
 
 func (e Enum) Type() protoreflect.EnumType {
-	return xxx_Enum_protoFile_EnumTypes[0]
+	return xxx_Enum_protoFile_enumTypes[0]
 }
 func (e Enum) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -48,60 +49,53 @@ func (x Enum) String() string {
 }
 
 func (Enum) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_b4b9b1e8d161a9a6, []int{0}
+	return fileDescriptor_b4b9b1e8d161a9a6_gzipped, []int{0}
 }
 
 func init() {
-	proto.RegisterFile("proto3/enum.proto", fileDescriptor_b4b9b1e8d161a9a6)
+	proto.RegisterFile("proto3/enum.proto", fileDescriptor_b4b9b1e8d161a9a6_gzipped)
 	proto.RegisterEnum("goproto.protoc.proto3.Enum", Enum_name, Enum_value)
 }
 
 var fileDescriptor_b4b9b1e8d161a9a6 = []byte{
-	// 144 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x12, 0x2c, 0x28, 0xca, 0x2f,
-	0xc9, 0x37, 0xd6, 0x4f, 0xcd, 0x2b, 0xcd, 0xd5, 0x03, 0xb3, 0x85, 0x44, 0xd3, 0xf3, 0xc1, 0x0c,
-	0x08, 0x37, 0x19, 0x42, 0x19, 0x6b, 0x29, 0x71, 0xb1, 0xb8, 0xe6, 0x95, 0xe6, 0x0a, 0x71, 0x70,
-	0xb1, 0x44, 0xb9, 0x06, 0xf9, 0x0b, 0x30, 0x08, 0xb1, 0x73, 0x31, 0xfb, 0xfb, 0xb9, 0x0a, 0x30,
-	0x82, 0x18, 0x21, 0xe1, 0xfe, 0x02, 0x4c, 0x4e, 0x8e, 0x51, 0xf6, 0xe9, 0x99, 0x25, 0x19, 0xa5,
-	0x49, 0x7a, 0xc9, 0xf9, 0xb9, 0xfa, 0xe9, 0xf9, 0x39, 0x89, 0x79, 0xe9, 0xfa, 0x60, 0xfd, 0x49,
-	0xa5, 0x69, 0xfa, 0x65, 0x46, 0xfa, 0xc9, 0xb9, 0x29, 0x10, 0x7e, 0xb2, 0x6e, 0x7a, 0x6a, 0x9e,
-	0x6e, 0x7a, 0xbe, 0x7e, 0x49, 0x6a, 0x71, 0x49, 0x4a, 0x62, 0x49, 0x22, 0x44, 0xd8, 0x38, 0x89,
-	0x0d, 0x42, 0x03, 0x02, 0x00, 0x00, 0xff, 0xff, 0x96, 0x4a, 0x7d, 0xc7, 0x99, 0x00, 0x00, 0x00,
+	// 153 bytes of the wire-encoded FileDescriptorProto
+	0x0a, 0x11, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2f, 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x12, 0x15, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2a, 0x22, 0x0a, 0x04, 0x45, 0x6e,
+	0x75, 0x6d, 0x12, 0x08, 0x0a, 0x04, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03,
+	0x4f, 0x4e, 0x45, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x54, 0x57, 0x4f, 0x10, 0x02, 0x42, 0x41,
+	0x5a, 0x3f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x6f, 0x6c,
+	0x61, 0x6e, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x76, 0x32, 0x2f,
+	0x63, 0x6d, 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x67,
+	0x6f, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x64, 0x61, 0x74, 0x61, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x33, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
 }
 
-func init() {
-	xxx_Enum_protoFile_FileDesc.Enums = xxx_Enum_protoFile_EnumDescs[0:1]
-	var err error
-	Enum_protoFile, err = prototype.NewFile(&xxx_Enum_protoFile_FileDesc)
-	if err != nil {
-		panic(err)
-	}
-}
+var fileDescriptor_b4b9b1e8d161a9a6_gzipped = func() []byte {
+	bb := new(bytes.Buffer)
+	zw, _ := gzip.NewWriterLevel(bb, gzip.NoCompression)
+	zw.Write(fileDescriptor_b4b9b1e8d161a9a6)
+	zw.Close()
+	return bb.Bytes()
+}()
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
 var Enum_protoFile protoreflect.FileDescriptor
 
-var xxx_Enum_protoFile_FileDesc = prototype.File{
-	Syntax:  protoreflect.Proto3,
-	Path:    "proto3/enum.proto",
-	Package: "goproto.protoc.proto3",
-}
-var xxx_Enum_protoFile_EnumTypes = [1]protoreflect.EnumType{
-	prototype.GoEnum(
-		xxx_Enum_protoFile_EnumDescs[0].Reference(),
-		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
-			return Enum(n)
-		},
-	),
+var xxx_Enum_protoFile_enumTypes [1]protoreflect.EnumType
+var xxx_Enum_protoFile_goTypes = []interface{}{
+	(Enum)(0), // 0: goproto.protoc.proto3.Enum
 }
-var xxx_Enum_protoFile_EnumDescs = [1]prototype.Enum{
-	{
-		Name: "Enum",
-		Values: []prototype.EnumValue{
-			{Name: "ZERO", Number: 0},
-			{Name: "ONE", Number: 1},
-			{Name: "TWO", Number: 2},
-		},
-	},
+var xxx_Enum_protoFile_depIdxs = []int32{}
+
+func init() {
+	Enum_protoFile = protoimpl.FileBuilder{
+		RawDescriptor:     fileDescriptor_b4b9b1e8d161a9a6,
+		GoTypes:           xxx_Enum_protoFile_goTypes,
+		DependencyIndexes: xxx_Enum_protoFile_depIdxs,
+		EnumOutputTypes:   xxx_Enum_protoFile_enumTypes[:],
+	}.Init()
+	xxx_Enum_protoFile_goTypes = nil
+	xxx_Enum_protoFile_depIdxs = nil
 }

+ 207 - 521
cmd/protoc-gen-go/testdata/proto3/fields.pb.go

@@ -4,10 +4,12 @@
 package proto3
 
 import (
+	bytes "bytes"
+	gzip "compress/gzip"
 	proto "github.com/golang/protobuf/proto"
 	protoreflect "github.com/golang/protobuf/v2/reflect/protoreflect"
-	prototype "github.com/golang/protobuf/v2/reflect/prototype"
 	protoimpl "github.com/golang/protobuf/v2/runtime/protoimpl"
+	reflect "reflect"
 )
 
 // This is a compile-time assertion to ensure that this generated file
@@ -23,7 +25,7 @@ const (
 )
 
 func (e FieldTestMessage_Enum) Type() protoreflect.EnumType {
-	return xxx_Fields_protoFile_EnumTypes[0]
+	return xxx_Fields_protoFile_enumTypes[0]
 }
 func (e FieldTestMessage_Enum) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -42,7 +44,7 @@ func (x FieldTestMessage_Enum) String() string {
 }
 
 func (FieldTestMessage_Enum) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_f1e3ea068187307c, []int{0, 0}
+	return fileDescriptor_f1e3ea068187307c_gzipped, []int{0, 0}
 }
 
 type FieldTestMessage struct {
@@ -88,29 +90,14 @@ type FieldTestMessage struct {
 	XXX_sizecache        int32                                `json:"-"`
 }
 
-type xxx_FieldTestMessage struct{ m *FieldTestMessage }
-
 func (m *FieldTestMessage) ProtoReflect() protoreflect.Message {
-	return xxx_FieldTestMessage{m}
-}
-func (m xxx_FieldTestMessage) Type() protoreflect.MessageType {
-	return xxx_Fields_protoFile_MessageTypes[0].Type
-}
-func (m xxx_FieldTestMessage) KnownFields() protoreflect.KnownFields {
-	return xxx_Fields_protoFile_MessageTypes[0].KnownFieldsOf(m.m)
-}
-func (m xxx_FieldTestMessage) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Fields_protoFile_MessageTypes[0].UnknownFieldsOf(m.m)
-}
-func (m xxx_FieldTestMessage) Interface() protoreflect.ProtoMessage {
-	return m.m
+	return xxx_Fields_protoFile_messageTypes[0].MessageOf(m)
 }
-
 func (m *FieldTestMessage) Reset()         { *m = FieldTestMessage{} }
 func (m *FieldTestMessage) String() string { return proto.CompactTextString(m) }
 func (*FieldTestMessage) ProtoMessage()    {}
 func (*FieldTestMessage) Descriptor() ([]byte, []int) {
-	return fileDescriptor_f1e3ea068187307c, []int{0}
+	return fileDescriptor_f1e3ea068187307c_gzipped, []int{0}
 }
 
 func (m *FieldTestMessage) XXX_Unmarshal(b []byte) error {
@@ -396,29 +383,14 @@ type FieldTestMessage_Message struct {
 	XXX_sizecache        int32    `json:"-"`
 }
 
-type xxx_FieldTestMessage_Message struct{ m *FieldTestMessage_Message }
-
 func (m *FieldTestMessage_Message) ProtoReflect() protoreflect.Message {
-	return xxx_FieldTestMessage_Message{m}
-}
-func (m xxx_FieldTestMessage_Message) Type() protoreflect.MessageType {
-	return xxx_Fields_protoFile_MessageTypes[4].Type
-}
-func (m xxx_FieldTestMessage_Message) KnownFields() protoreflect.KnownFields {
-	return xxx_Fields_protoFile_MessageTypes[4].KnownFieldsOf(m.m)
-}
-func (m xxx_FieldTestMessage_Message) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Fields_protoFile_MessageTypes[4].UnknownFieldsOf(m.m)
+	return xxx_Fields_protoFile_messageTypes[4].MessageOf(m)
 }
-func (m xxx_FieldTestMessage_Message) Interface() protoreflect.ProtoMessage {
-	return m.m
-}
-
 func (m *FieldTestMessage_Message) Reset()         { *m = FieldTestMessage_Message{} }
 func (m *FieldTestMessage_Message) String() string { return proto.CompactTextString(m) }
 func (*FieldTestMessage_Message) ProtoMessage()    {}
 func (*FieldTestMessage_Message) Descriptor() ([]byte, []int) {
-	return fileDescriptor_f1e3ea068187307c, []int{0, 3}
+	return fileDescriptor_f1e3ea068187307c_gzipped, []int{0, 3}
 }
 
 func (m *FieldTestMessage_Message) XXX_Unmarshal(b []byte) error {
@@ -440,7 +412,7 @@ func (m *FieldTestMessage_Message) XXX_DiscardUnknown() {
 var xxx_messageInfo_FieldTestMessage_Message proto.InternalMessageInfo
 
 func init() {
-	proto.RegisterFile("proto3/fields.proto", fileDescriptor_f1e3ea068187307c)
+	proto.RegisterFile("proto3/fields.proto", fileDescriptor_f1e3ea068187307c_gzipped)
 	proto.RegisterEnum("goproto.protoc.proto3.FieldTestMessage_Enum", FieldTestMessage_Enum_name, FieldTestMessage_Enum_value)
 	proto.RegisterType((*FieldTestMessage)(nil), "goproto.protoc.proto3.FieldTestMessage")
 	proto.RegisterMapType((map[uint64]FieldTestMessage_Enum)(nil), "goproto.protoc.proto3.FieldTestMessage.MapFixed64EnumEntry")
@@ -450,492 +422,206 @@ func init() {
 }
 
 var fileDescriptor_f1e3ea068187307c = []byte{
-	// 832 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x95, 0xc9, 0x6f, 0xdb, 0x38,
-	0x14, 0xc6, 0x87, 0x5e, 0x63, 0xc6, 0x8b, 0xcc, 0x4c, 0x00, 0x22, 0x27, 0x22, 0xb3, 0x71, 0x66,
-	0x12, 0x1b, 0xb0, 0x05, 0x61, 0x90, 0x41, 0xd1, 0xd6, 0xa8, 0x03, 0xf4, 0x50, 0x14, 0x55, 0xdb,
-	0x4b, 0x7a, 0x08, 0x64, 0x5b, 0x56, 0x8d, 0x6a, 0x31, 0x6c, 0x29, 0x68, 0xfe, 0xc4, 0xee, 0xe9,
-	0xde, 0xfe, 0x1f, 0x6d, 0xcf, 0x05, 0x45, 0x8a, 0xa2, 0x64, 0x1f, 0xe2, 0x9c, 0x64, 0x3e, 0x7f,
-	0xfa, 0x7e, 0x7c, 0xd4, 0xfb, 0x24, 0xb8, 0x33, 0x5f, 0x04, 0x61, 0xd0, 0xef, 0x4e, 0x67, 0xb6,
-	0x3b, 0x59, 0x76, 0xe2, 0x15, 0xda, 0x75, 0x82, 0xf8, 0x07, 0x5f, 0x8e, 0xf9, 0xa5, 0xbf, 0x7f,
-	0xd1, 0x86, 0xda, 0x31, 0xd3, 0x3d, 0xb0, 0x97, 0xe1, 0x1d, 0x7b, 0xb9, 0xb4, 0x1c, 0x1b, 0xfd,
-	0x06, 0x1b, 0xc1, 0x3c, 0x9c, 0x05, 0xbe, 0xe5, 0x9e, 0x8e, 0x82, 0xc0, 0xc5, 0x80, 0x00, 0x5a,
-	0x33, 0xeb, 0x49, 0x71, 0x10, 0x04, 0x2e, 0xba, 0xa7, 0x88, 0x6c, 0x3f, 0xf2, 0x70, 0x81, 0x00,
-	0xda, 0xec, 0x1d, 0x74, 0xd6, 0x82, 0x3a, 0x79, 0x48, 0x67, 0xe8, 0x47, 0x5e, 0x6a, 0xc9, 0x56,
-	0xe8, 0x0f, 0xd8, 0x94, 0x96, 0x33, 0x3f, 0xec, 0xf7, 0x70, 0x91, 0x00, 0x5a, 0x36, 0x25, 0xe8,
-	0x36, 0x2b, 0xa2, 0xbf, 0x60, 0x4b, 0xca, 0x96, 0x5c, 0x57, 0x22, 0x80, 0xb6, 0x4d, 0x79, 0xf7,
-	0xfd, 0xd9, 0x8a, 0x30, 0xe2, 0xc2, 0x32, 0x01, 0xb4, 0x91, 0x0a, 0x1f, 0x72, 0x61, 0x0e, 0x6c,
-	0xe8, 0xb8, 0x42, 0x00, 0x2d, 0x66, 0xc0, 0x86, 0xbe, 0x02, 0x36, 0x74, 0x5c, 0x25, 0x80, 0xa2,
-	0x2c, 0x38, 0x27, 0x8c, 0xb8, 0x70, 0x8b, 0x00, 0x5a, 0xca, 0x82, 0x0d, 0x1d, 0xfd, 0x0b, 0xdb,
-	0xa9, 0xe3, 0x74, 0xf6, 0xd4, 0x9e, 0xf4, 0x7b, 0xb8, 0x46, 0x00, 0x6d, 0x99, 0x9a, 0xf4, 0x14,
-	0x75, 0xf4, 0x37, 0x94, 0xb5, 0xd3, 0x44, 0x0b, 0x09, 0xa0, 0x55, 0x53, 0xd2, 0x8e, 0x85, 0x54,
-	0x6d, 0x68, 0xea, 0x06, 0x56, 0x88, 0xb7, 0x09, 0xa0, 0x85, 0xb4, 0xa1, 0x63, 0x56, 0x5c, 0x83,
-	0x37, 0x74, 0x5c, 0x27, 0x80, 0x6a, 0x79, 0xbc, 0xa1, 0xaf, 0xe2, 0x0d, 0x1d, 0x37, 0x08, 0xa0,
-	0x95, 0x1c, 0x3e, 0xd7, 0xff, 0x24, 0x88, 0x46, 0xae, 0x8d, 0x9b, 0x04, 0x50, 0x90, 0xf6, 0x7f,
-	0x2b, 0xae, 0x66, 0x4f, 0x34, 0x5c, 0xcc, 0x7c, 0x07, 0xb7, 0xe2, 0x59, 0x4b, 0x4f, 0x34, 0xae,
-	0x66, 0x1a, 0x1a, 0x9d, 0x87, 0xf6, 0x12, 0x6b, 0x04, 0xd0, 0x7a, 0xda, 0xd0, 0x80, 0x15, 0xd1,
-	0x89, 0xb2, 0x47, 0x31, 0x68, 0xb8, 0x4d, 0x00, 0xdd, 0xee, 0x75, 0x2f, 0x3b, 0x97, 0xe2, 0x9a,
-	0x36, 0x95, 0xa4, 0xe2, 0x77, 0xd8, 0x58, 0xd8, 0x73, 0xdb, 0x0a, 0xed, 0x09, 0x4f, 0xc5, 0x33,
-	0x40, 0x8a, 0x74, 0xcb, 0xac, 0x27, 0xd5, 0x38, 0x16, 0xa6, 0xa2, 0x8a, 0x63, 0xf1, 0x9c, 0xa9,
-	0x36, 0xce, 0x45, 0xe2, 0x11, 0xe7, 0xe2, 0x4f, 0xd8, 0x94, 0x9e, 0x7c, 0x8c, 0x5f, 0x30, 0xd3,
-	0xb2, 0x29, 0x51, 0x3c, 0x18, 0x14, 0xb6, 0xa4, 0x4e, 0x04, 0xe3, 0x25, 0x13, 0xb6, 0x4d, 0x79,
-	0xbf, 0x48, 0x86, 0xaa, 0x14, 0xc9, 0x78, 0xc5, 0x94, 0x8d, 0x54, 0x29, 0xa2, 0x91, 0x63, 0x1b,
-	0x3a, 0x7e, 0xcd, 0x84, 0xc5, 0x0c, 0xdb, 0xd0, 0x57, 0xd8, 0x86, 0x8e, 0xdf, 0x30, 0x21, 0xca,
-	0xb2, 0x73, 0x4a, 0x11, 0x8e, 0x0b, 0xa6, 0x2c, 0x65, 0xd9, 0x86, 0x8e, 0x0e, 0x60, 0x3b, 0xf5,
-	0x4c, 0x26, 0xfe, 0x2d, 0xd3, 0xb6, 0x4c, 0x4d, 0xba, 0x26, 0xf1, 0xf8, 0x07, 0xca, 0x9a, 0x8c,
-	0xc7, 0x3b, 0x26, 0xae, 0x9a, 0x12, 0x98, 0xe4, 0x43, 0xed, 0x8a, 0xe7, 0xe3, 0x3d, 0x53, 0x16,
-	0xd2, 0xae, 0x78, 0x40, 0x56, 0x77, 0x60, 0xe8, 0xf8, 0x03, 0x93, 0x6a, 0xf9, 0x1d, 0x18, 0xfa,
-	0xea, 0x0e, 0x0c, 0x1d, 0x7f, 0x64, 0xe2, 0x4a, 0x6e, 0x07, 0xb9, 0x53, 0x10, 0x11, 0xf9, 0xc4,
-	0xa4, 0x20, 0x3d, 0x05, 0x91, 0x91, 0xcc, 0xc9, 0xf2, 0x8c, 0x7c, 0x66, 0xca, 0x9a, 0x72, 0xb2,
-	0x3c, 0x24, 0x6a, 0x57, 0x3c, 0x24, 0x5f, 0x98, 0xb0, 0x9e, 0x76, 0xc5, 0x53, 0xf2, 0x48, 0xd9,
-	0x67, 0x92, 0x92, 0xaf, 0x4c, 0x79, 0x95, 0x98, 0x24, 0x4e, 0x49, 0x4c, 0xc6, 0xb0, 0xe5, 0x59,
-	0x73, 0x3e, 0xa7, 0x62, 0x62, 0xbe, 0x15, 0x63, 0xef, 0xa3, 0x4b, 0x7b, 0x5b, 0xf3, 0x78, 0xa0,
-	0xe3, 0xc9, 0x1a, 0xfa, 0xe1, 0xe2, 0xdc, 0x6c, 0x78, 0x6a, 0x0d, 0xb9, 0x10, 0x31, 0x08, 0x3f,
-	0x8e, 0x53, 0x4f, 0xf4, 0xf0, 0x9d, 0x73, 0xae, 0x6d, 0xc0, 0xe1, 0x27, 0x27, 0x0a, 0x1c, 0xa5,
-	0x79, 0xb9, 0x32, 0x9a, 0x42, 0x56, 0x4b, 0x1e, 0x29, 0x8f, 0xf5, 0x0f, 0xce, 0xfa, 0x7f, 0x03,
-	0x96, 0x78, 0xf4, 0x2c, 0xd2, 0x9c, 0xd4, 0xf4, 0x32, 0xc5, 0xbd, 0x1b, 0x10, 0xad, 0xb6, 0x8e,
-	0x34, 0x58, 0x7c, 0x62, 0x9f, 0xc7, 0xdf, 0xe0, 0xb2, 0xc9, 0x7e, 0xa2, 0x5f, 0x61, 0xf9, 0xcc,
-	0x72, 0x23, 0x3b, 0xfe, 0xe4, 0x16, 0x4d, 0xbe, 0x38, 0x2a, 0xfc, 0x07, 0xf6, 0x42, 0xb8, 0xbb,
-	0xb6, 0x29, 0xd5, 0xa4, 0xc6, 0x4d, 0x86, 0xaa, 0xc9, 0x15, 0x1e, 0xbc, 0x42, 0x0d, 0xe0, 0xce,
-	0x9a, 0xf6, 0x54, 0x66, 0x85, 0x33, 0x07, 0x2a, 0x73, 0xd3, 0x77, 0xa2, 0x02, 0xac, 0xc1, 0xaa,
-	0xf8, 0x6b, 0x5f, 0x83, 0xa5, 0xf8, 0x1d, 0xb9, 0x05, 0x4b, 0x27, 0x43, 0xf3, 0xae, 0xf6, 0xcb,
-	0xe0, 0xe6, 0xc9, 0x75, 0x67, 0x16, 0x3e, 0x8e, 0x46, 0x9d, 0x71, 0xe0, 0x75, 0x9d, 0xc0, 0xb5,
-	0x7c, 0xa7, 0x1b, 0x3b, 0x8f, 0xa2, 0x69, 0xf7, 0xac, 0xd7, 0x1d, 0x7b, 0x13, 0xbe, 0x1e, 0x1f,
-	0x3a, 0xb6, 0x7f, 0xe8, 0x04, 0xdd, 0xd0, 0x5e, 0x86, 0x13, 0x2b, 0xb4, 0x78, 0xb9, 0x3f, 0xaa,
-	0xf0, 0xeb, 0xcf, 0x00, 0x00, 0x00, 0xff, 0xff, 0xbb, 0x1c, 0x0b, 0xbf, 0x4a, 0x09, 0x00, 0x00,
-}
-
-func init() {
-	xxx_Fields_protoFile_FileDesc.Messages = xxx_Fields_protoFile_MessageDescs[0:1]
-	xxx_Fields_protoFile_MessageDescs[0].Enums = xxx_Fields_protoFile_EnumDescs[0:1]
-	xxx_Fields_protoFile_MessageDescs[0].Messages = xxx_Fields_protoFile_MessageDescs[1:5]
-	xxx_Fields_protoFile_MessageDescs[0].Fields[1].EnumType = xxx_Fields_protoFile_EnumTypes[0]
-	xxx_Fields_protoFile_MessageDescs[0].Fields[16].MessageType = xxx_Fields_protoFile_MessageTypes[4].Type
-	xxx_Fields_protoFile_MessageDescs[0].Fields[18].EnumType = xxx_Fields_protoFile_EnumTypes[0]
-	xxx_Fields_protoFile_MessageDescs[0].Fields[33].MessageType = xxx_Fields_protoFile_MessageTypes[4].Type
-	xxx_Fields_protoFile_MessageDescs[0].Fields[34].MessageType = xxx_Fields_protoFile_MessageDescs[1].Reference()
-	xxx_Fields_protoFile_MessageDescs[0].Fields[35].MessageType = xxx_Fields_protoFile_MessageDescs[2].Reference()
-	xxx_Fields_protoFile_MessageDescs[0].Fields[36].MessageType = xxx_Fields_protoFile_MessageDescs[3].Reference()
-	xxx_Fields_protoFile_MessageDescs[2].Fields[1].MessageType = xxx_Fields_protoFile_MessageTypes[4].Type
-	xxx_Fields_protoFile_MessageDescs[3].Fields[1].EnumType = xxx_Fields_protoFile_EnumTypes[0]
-	var err error
-	Fields_protoFile, err = prototype.NewFile(&xxx_Fields_protoFile_FileDesc)
-	if err != nil {
-		panic(err)
-	}
-}
+	// 2378 bytes of the wire-encoded FileDescriptorProto
+	0x0a, 0x13, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x2e,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x15, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x22, 0xd0, 0x11, 0x0a,
+	0x10, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x54, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67,
+	0x65, 0x12, 0x23, 0x0a, 0x0d, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x62, 0x6f,
+	0x6f, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e,
+	0x61, 0x6c, 0x42, 0x6f, 0x6f, 0x6c, 0x12, 0x51, 0x0a, 0x0d, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e,
+	0x61, 0x6c, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e,
+	0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x54, 0x65, 0x73, 0x74, 0x4d,
+	0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x0c, 0x6f, 0x70, 0x74,
+	0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x25, 0x0a, 0x0e, 0x6f, 0x70, 0x74,
+	0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x18, 0x03, 0x20, 0x01, 0x28,
+	0x05, 0x52, 0x0d, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x49, 0x6e, 0x74, 0x33, 0x32,
+	0x12, 0x27, 0x0a, 0x0f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x69, 0x6e,
+	0x74, 0x33, 0x32, 0x18, 0x04, 0x20, 0x01, 0x28, 0x11, 0x52, 0x0e, 0x6f, 0x70, 0x74, 0x69, 0x6f,
+	0x6e, 0x61, 0x6c, 0x53, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x27, 0x0a, 0x0f, 0x6f, 0x70, 0x74,
+	0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x18, 0x05, 0x20, 0x01,
+	0x28, 0x0d, 0x52, 0x0e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x55, 0x69, 0x6e, 0x74,
+	0x33, 0x32, 0x12, 0x25, 0x0a, 0x0e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x69,
+	0x6e, 0x74, 0x36, 0x34, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x6f, 0x70, 0x74, 0x69,
+	0x6f, 0x6e, 0x61, 0x6c, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x27, 0x0a, 0x0f, 0x6f, 0x70, 0x74,
+	0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x18, 0x07, 0x20, 0x01,
+	0x28, 0x12, 0x52, 0x0e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x53, 0x69, 0x6e, 0x74,
+	0x36, 0x34, 0x12, 0x27, 0x0a, 0x0f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x75,
+	0x69, 0x6e, 0x74, 0x36, 0x34, 0x18, 0x08, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x6f, 0x70, 0x74,
+	0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x2b, 0x0a, 0x11, 0x6f,
+	0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32,
+	0x18, 0x09, 0x20, 0x01, 0x28, 0x0f, 0x52, 0x10, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c,
+	0x53, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x12, 0x29, 0x0a, 0x10, 0x6f, 0x70, 0x74, 0x69,
+	0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x18, 0x0a, 0x20, 0x01,
+	0x28, 0x07, 0x52, 0x0f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x46, 0x69, 0x78, 0x65,
+	0x64, 0x33, 0x32, 0x12, 0x25, 0x0a, 0x0e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f,
+	0x66, 0x6c, 0x6f, 0x61, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0d, 0x6f, 0x70, 0x74,
+	0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x12, 0x2b, 0x0a, 0x11, 0x6f, 0x70,
+	0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x18,
+	0x0c, 0x20, 0x01, 0x28, 0x10, 0x52, 0x10, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x53,
+	0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x12, 0x29, 0x0a, 0x10, 0x6f, 0x70, 0x74, 0x69, 0x6f,
+	0x6e, 0x61, 0x6c, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x18, 0x0d, 0x20, 0x01, 0x28,
+	0x06, 0x52, 0x0f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x46, 0x69, 0x78, 0x65, 0x64,
+	0x36, 0x34, 0x12, 0x27, 0x0a, 0x0f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x64,
+	0x6f, 0x75, 0x62, 0x6c, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0e, 0x6f, 0x70, 0x74,
+	0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x6f,
+	0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x0f,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x53, 0x74,
+	0x72, 0x69, 0x6e, 0x67, 0x12, 0x25, 0x0a, 0x0e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c,
+	0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x6f, 0x70,
+	0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x5a, 0x0a, 0x10, 0x6f,
+	0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18,
+	0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x46, 0x69,
+	0x65, 0x6c, 0x64, 0x54, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d,
+	0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x0f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c,
+	0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x72, 0x65, 0x70, 0x65, 0x61,
+	0x74, 0x65, 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x18, 0xc9, 0x01, 0x20, 0x03, 0x28, 0x08, 0x52,
+	0x0c, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x6f, 0x6f, 0x6c, 0x12, 0x52, 0x0a,
+	0x0d, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x18, 0xca,
+	0x01, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x46, 0x69,
+	0x65, 0x6c, 0x64, 0x54, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x45,
+	0x6e, 0x75, 0x6d, 0x52, 0x0c, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75,
+	0x6d, 0x12, 0x26, 0x0a, 0x0e, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e,
+	0x74, 0x33, 0x32, 0x18, 0xcb, 0x01, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0d, 0x72, 0x65, 0x70, 0x65,
+	0x61, 0x74, 0x65, 0x64, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x28, 0x0a, 0x0f, 0x72, 0x65, 0x70,
+	0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x18, 0xcc, 0x01, 0x20,
+	0x03, 0x28, 0x11, 0x52, 0x0e, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x6e,
+	0x74, 0x33, 0x32, 0x12, 0x28, 0x0a, 0x0f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f,
+	0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x18, 0xcd, 0x01, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x0e, 0x72,
+	0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x26, 0x0a,
+	0x0e, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x18,
+	0xce, 0x01, 0x20, 0x03, 0x28, 0x03, 0x52, 0x0d, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64,
+	0x49, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x28, 0x0a, 0x0f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65,
+	0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x18, 0xcf, 0x01, 0x20, 0x03, 0x28, 0x12, 0x52,
+	0x0e, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x12,
+	0x28, 0x0a, 0x0f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74,
+	0x36, 0x34, 0x18, 0xd0, 0x01, 0x20, 0x03, 0x28, 0x04, 0x52, 0x0e, 0x72, 0x65, 0x70, 0x65, 0x61,
+	0x74, 0x65, 0x64, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x2c, 0x0a, 0x11, 0x72, 0x65, 0x70,
+	0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x18, 0xd1,
+	0x01, 0x20, 0x03, 0x28, 0x0f, 0x52, 0x10, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53,
+	0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x12, 0x2a, 0x0a, 0x10, 0x72, 0x65, 0x70, 0x65, 0x61,
+	0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x18, 0xd2, 0x01, 0x20, 0x03,
+	0x28, 0x07, 0x52, 0x0f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x78, 0x65,
+	0x64, 0x33, 0x32, 0x12, 0x26, 0x0a, 0x0e, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f,
+	0x66, 0x6c, 0x6f, 0x61, 0x74, 0x18, 0xd3, 0x01, 0x20, 0x03, 0x28, 0x02, 0x52, 0x0d, 0x72, 0x65,
+	0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x12, 0x2c, 0x0a, 0x11, 0x72,
+	0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34,
+	0x18, 0xd4, 0x01, 0x20, 0x03, 0x28, 0x10, 0x52, 0x10, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65,
+	0x64, 0x53, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x12, 0x2a, 0x0a, 0x10, 0x72, 0x65, 0x70,
+	0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x18, 0xd5, 0x01,
+	0x20, 0x03, 0x28, 0x06, 0x52, 0x0f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69,
+	0x78, 0x65, 0x64, 0x36, 0x34, 0x12, 0x28, 0x0a, 0x0f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65,
+	0x64, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x18, 0xd6, 0x01, 0x20, 0x03, 0x28, 0x01, 0x52,
+	0x0e, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x12,
+	0x28, 0x0a, 0x0f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69,
+	0x6e, 0x67, 0x18, 0xd7, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x72, 0x65, 0x70, 0x65, 0x61,
+	0x74, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x26, 0x0a, 0x0e, 0x72, 0x65, 0x70,
+	0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0xd8, 0x01, 0x20, 0x03,
+	0x28, 0x0c, 0x52, 0x0d, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x74, 0x65,
+	0x73, 0x12, 0x5b, 0x0a, 0x10, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x4d, 0x65,
+	0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0xd9, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67,
+	0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x54, 0x65, 0x73, 0x74, 0x4d, 0x65,
+	0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x0f, 0x72,
+	0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x63,
+	0x0a, 0x0f, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x69, 0x6e, 0x74, 0x36,
+	0x34, 0x18, 0xf4, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+	0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x54, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67,
+	0x65, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x45,
+	0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x49, 0x6e,
+	0x74, 0x36, 0x34, 0x12, 0x6c, 0x0a, 0x12, 0x6d, 0x61, 0x70, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e,
+	0x67, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0xf5, 0x03, 0x20, 0x03, 0x28, 0x0b,
+	0x32, 0x3d, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x54, 0x65,
+	0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72,
+	0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52,
+	0x10, 0x6d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67,
+	0x65, 0x12, 0x66, 0x0a, 0x10, 0x6d, 0x61, 0x70, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34,
+	0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x18, 0xf6, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x67,
+	0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x54, 0x65, 0x73, 0x74, 0x4d, 0x65,
+	0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x61, 0x70, 0x46, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34,
+	0x45, 0x6e, 0x75, 0x6d, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x6d, 0x61, 0x70, 0x46, 0x69,
+	0x78, 0x65, 0x64, 0x36, 0x34, 0x45, 0x6e, 0x75, 0x6d, 0x1a, 0x40, 0x0a, 0x12, 0x4d, 0x61, 0x70,
+	0x49, 0x6e, 0x74, 0x33, 0x32, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12,
+	0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65,
+	0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03,
+	0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x74, 0x0a, 0x15, 0x4d,
+	0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x45,
+	0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x45, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18,
+	0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x46, 0x69,
+	0x65, 0x6c, 0x64, 0x54, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d,
+	0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38,
+	0x01, 0x1a, 0x6f, 0x0a, 0x13, 0x4d, 0x61, 0x70, 0x46, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x45,
+	0x6e, 0x75, 0x6d, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x06, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x42, 0x0a, 0x05, 0x76, 0x61,
+	0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x67, 0x6f, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x33, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x54, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61,
+	0x67, 0x65, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02,
+	0x38, 0x01, 0x1a, 0x09, 0x0a, 0x07, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x10, 0x0a,
+	0x04, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x08, 0x0a, 0x04, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x42,
+	0x41, 0x5a, 0x3f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x6f,
+	0x6c, 0x61, 0x6e, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x76, 0x32,
+	0x2f, 0x63, 0x6d, 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d,
+	0x67, 0x6f, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x64, 0x61, 0x74, 0x61, 0x2f, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x33, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+}
+
+var fileDescriptor_f1e3ea068187307c_gzipped = func() []byte {
+	bb := new(bytes.Buffer)
+	zw, _ := gzip.NewWriterLevel(bb, gzip.NoCompression)
+	zw.Write(fileDescriptor_f1e3ea068187307c)
+	zw.Close()
+	return bb.Bytes()
+}()
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
 var Fields_protoFile protoreflect.FileDescriptor
 
-var xxx_Fields_protoFile_FileDesc = prototype.File{
-	Syntax:  protoreflect.Proto3,
-	Path:    "proto3/fields.proto",
-	Package: "goproto.protoc.proto3",
-}
-var xxx_Fields_protoFile_EnumTypes = [1]protoreflect.EnumType{
-	prototype.GoEnum(
-		xxx_Fields_protoFile_EnumDescs[0].Reference(),
-		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
-			return FieldTestMessage_Enum(n)
-		},
-	),
-}
-var xxx_Fields_protoFile_EnumDescs = [1]prototype.Enum{
-	{
-		Name: "Enum",
-		Values: []prototype.EnumValue{
-			{Name: "ZERO", Number: 0},
-		},
-	},
-}
-var xxx_Fields_protoFile_MessageTypes = [5]protoimpl.MessageType{
-	{Type: prototype.GoMessage(
-		xxx_Fields_protoFile_MessageDescs[0].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_FieldTestMessage{new(FieldTestMessage)}
-		},
-	)},
-	{ /* no message type for FieldTestMessage_MapInt32Int64Entry */ },
-	{ /* no message type for FieldTestMessage_MapStringMessageEntry */ },
-	{ /* no message type for FieldTestMessage_MapFixed64EnumEntry */ },
-	{Type: prototype.GoMessage(
-		xxx_Fields_protoFile_MessageDescs[4].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_FieldTestMessage_Message{new(FieldTestMessage_Message)}
-		},
-	)},
-}
-var xxx_Fields_protoFile_MessageDescs = [5]prototype.Message{
-	{
-		Name: "FieldTestMessage",
-		Fields: []prototype.Field{
-			{
-				Name:        "optional_bool",
-				Number:      1,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.StringKind,
-				JSONName:    "optionalBool",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "optional_enum",
-				Number:      2,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.EnumKind,
-				JSONName:    "optionalEnum",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "optional_int32",
-				Number:      3,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Int32Kind,
-				JSONName:    "optionalInt32",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "optional_sint32",
-				Number:      4,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Sint32Kind,
-				JSONName:    "optionalSint32",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "optional_uint32",
-				Number:      5,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Uint32Kind,
-				JSONName:    "optionalUint32",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "optional_int64",
-				Number:      6,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Int64Kind,
-				JSONName:    "optionalInt64",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "optional_sint64",
-				Number:      7,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Sint64Kind,
-				JSONName:    "optionalSint64",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "optional_uint64",
-				Number:      8,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Uint64Kind,
-				JSONName:    "optionalUint64",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "optional_sfixed32",
-				Number:      9,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Sfixed32Kind,
-				JSONName:    "optionalSfixed32",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "optional_fixed32",
-				Number:      10,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Fixed32Kind,
-				JSONName:    "optionalFixed32",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "optional_float",
-				Number:      11,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.FloatKind,
-				JSONName:    "optionalFloat",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "optional_sfixed64",
-				Number:      12,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Sfixed64Kind,
-				JSONName:    "optionalSfixed64",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "optional_fixed64",
-				Number:      13,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Fixed64Kind,
-				JSONName:    "optionalFixed64",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "optional_double",
-				Number:      14,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.DoubleKind,
-				JSONName:    "optionalDouble",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "optional_string",
-				Number:      15,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.StringKind,
-				JSONName:    "optionalString",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "optional_bytes",
-				Number:      16,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.BytesKind,
-				JSONName:    "optionalBytes",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "optional_Message",
-				Number:      17,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.MessageKind,
-				JSONName:    "optionalMessage",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "repeated_bool",
-				Number:      201,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.BoolKind,
-				JSONName:    "repeatedBool",
-				IsPacked:    prototype.True,
-			},
-			{
-				Name:        "repeated_enum",
-				Number:      202,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.EnumKind,
-				JSONName:    "repeatedEnum",
-				IsPacked:    prototype.True,
-			},
-			{
-				Name:        "repeated_int32",
-				Number:      203,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.Int32Kind,
-				JSONName:    "repeatedInt32",
-				IsPacked:    prototype.True,
-			},
-			{
-				Name:        "repeated_sint32",
-				Number:      204,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.Sint32Kind,
-				JSONName:    "repeatedSint32",
-				IsPacked:    prototype.True,
-			},
-			{
-				Name:        "repeated_uint32",
-				Number:      205,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.Uint32Kind,
-				JSONName:    "repeatedUint32",
-				IsPacked:    prototype.True,
-			},
-			{
-				Name:        "repeated_int64",
-				Number:      206,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.Int64Kind,
-				JSONName:    "repeatedInt64",
-				IsPacked:    prototype.True,
-			},
-			{
-				Name:        "repeated_sint64",
-				Number:      207,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.Sint64Kind,
-				JSONName:    "repeatedSint64",
-				IsPacked:    prototype.True,
-			},
-			{
-				Name:        "repeated_uint64",
-				Number:      208,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.Uint64Kind,
-				JSONName:    "repeatedUint64",
-				IsPacked:    prototype.True,
-			},
-			{
-				Name:        "repeated_sfixed32",
-				Number:      209,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.Sfixed32Kind,
-				JSONName:    "repeatedSfixed32",
-				IsPacked:    prototype.True,
-			},
-			{
-				Name:        "repeated_fixed32",
-				Number:      210,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.Fixed32Kind,
-				JSONName:    "repeatedFixed32",
-				IsPacked:    prototype.True,
-			},
-			{
-				Name:        "repeated_float",
-				Number:      211,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.FloatKind,
-				JSONName:    "repeatedFloat",
-				IsPacked:    prototype.True,
-			},
-			{
-				Name:        "repeated_sfixed64",
-				Number:      212,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.Sfixed64Kind,
-				JSONName:    "repeatedSfixed64",
-				IsPacked:    prototype.True,
-			},
-			{
-				Name:        "repeated_fixed64",
-				Number:      213,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.Fixed64Kind,
-				JSONName:    "repeatedFixed64",
-				IsPacked:    prototype.True,
-			},
-			{
-				Name:        "repeated_double",
-				Number:      214,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.DoubleKind,
-				JSONName:    "repeatedDouble",
-				IsPacked:    prototype.True,
-			},
-			{
-				Name:        "repeated_string",
-				Number:      215,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.StringKind,
-				JSONName:    "repeatedString",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "repeated_bytes",
-				Number:      216,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.BytesKind,
-				JSONName:    "repeatedBytes",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "repeated_Message",
-				Number:      217,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.MessageKind,
-				JSONName:    "repeatedMessage",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "map_int32_int64",
-				Number:      500,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.MessageKind,
-				JSONName:    "mapInt32Int64",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "map_string_message",
-				Number:      501,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.MessageKind,
-				JSONName:    "mapStringMessage",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "map_fixed64_enum",
-				Number:      502,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.MessageKind,
-				JSONName:    "mapFixed64Enum",
-				IsPacked:    prototype.False,
-			},
-		},
-	},
-	{
-		Name: "MapInt32Int64Entry",
-		Fields: []prototype.Field{
-			{
-				Name:        "key",
-				Number:      1,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Int32Kind,
-				JSONName:    "key",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "value",
-				Number:      2,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Int64Kind,
-				JSONName:    "value",
-				IsPacked:    prototype.False,
-			},
-		},
-		IsMapEntry: true,
-	},
-	{
-		Name: "MapStringMessageEntry",
-		Fields: []prototype.Field{
-			{
-				Name:        "key",
-				Number:      1,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.StringKind,
-				JSONName:    "key",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "value",
-				Number:      2,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.MessageKind,
-				JSONName:    "value",
-				IsPacked:    prototype.False,
-			},
-		},
-		IsMapEntry: true,
-	},
-	{
-		Name: "MapFixed64EnumEntry",
-		Fields: []prototype.Field{
-			{
-				Name:        "key",
-				Number:      1,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Fixed64Kind,
-				JSONName:    "key",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "value",
-				Number:      2,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.EnumKind,
-				JSONName:    "value",
-				IsPacked:    prototype.False,
-			},
-		},
-		IsMapEntry: true,
-	},
-	{
-		Name: "Message",
-	},
+var xxx_Fields_protoFile_enumTypes [1]protoreflect.EnumType
+var xxx_Fields_protoFile_messageTypes [5]protoimpl.MessageType
+var xxx_Fields_protoFile_goTypes = []interface{}{
+	(FieldTestMessage_Enum)(0),       // 0: goproto.protoc.proto3.FieldTestMessage.Enum
+	(*FieldTestMessage)(nil),         // 1: goproto.protoc.proto3.FieldTestMessage
+	nil,                              // 2: goproto.protoc.proto3.FieldTestMessage.MapInt32Int64Entry
+	nil,                              // 3: goproto.protoc.proto3.FieldTestMessage.MapStringMessageEntry
+	nil,                              // 4: goproto.protoc.proto3.FieldTestMessage.MapFixed64EnumEntry
+	(*FieldTestMessage_Message)(nil), // 5: goproto.protoc.proto3.FieldTestMessage.Message
+}
+var xxx_Fields_protoFile_depIdxs = []int32{
+	0, // goproto.protoc.proto3.FieldTestMessage.optional_enum:type_name -> goproto.protoc.proto3.FieldTestMessage.Enum
+	5, // goproto.protoc.proto3.FieldTestMessage.optional_Message:type_name -> goproto.protoc.proto3.FieldTestMessage.Message
+	0, // goproto.protoc.proto3.FieldTestMessage.repeated_enum:type_name -> goproto.protoc.proto3.FieldTestMessage.Enum
+	5, // goproto.protoc.proto3.FieldTestMessage.repeated_Message:type_name -> goproto.protoc.proto3.FieldTestMessage.Message
+	2, // goproto.protoc.proto3.FieldTestMessage.map_int32_int64:type_name -> goproto.protoc.proto3.FieldTestMessage.MapInt32Int64Entry
+	3, // goproto.protoc.proto3.FieldTestMessage.map_string_message:type_name -> goproto.protoc.proto3.FieldTestMessage.MapStringMessageEntry
+	4, // goproto.protoc.proto3.FieldTestMessage.map_fixed64_enum:type_name -> goproto.protoc.proto3.FieldTestMessage.MapFixed64EnumEntry
+	5, // goproto.protoc.proto3.FieldTestMessage.MapStringMessageEntry.value:type_name -> goproto.protoc.proto3.FieldTestMessage.Message
+	0, // goproto.protoc.proto3.FieldTestMessage.MapFixed64EnumEntry.value:type_name -> goproto.protoc.proto3.FieldTestMessage.Enum
+}
+
+func init() {
+	var messageTypes [5]protoreflect.MessageType
+	Fields_protoFile = protoimpl.FileBuilder{
+		RawDescriptor:      fileDescriptor_f1e3ea068187307c,
+		GoTypes:            xxx_Fields_protoFile_goTypes,
+		DependencyIndexes:  xxx_Fields_protoFile_depIdxs,
+		EnumOutputTypes:    xxx_Fields_protoFile_enumTypes[:],
+		MessageOutputTypes: messageTypes[:],
+	}.Init()
+	messageGoTypes := xxx_Fields_protoFile_goTypes[1:][:5]
+	for i, mt := range messageTypes[:] {
+		xxx_Fields_protoFile_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
+		xxx_Fields_protoFile_messageTypes[i].PBType = mt
+	}
+	xxx_Fields_protoFile_goTypes = nil
+	xxx_Fields_protoFile_depIdxs = nil
 }

+ 584 - 1617
encoding/textpb/testprotos/pb2/test.pb.go

@@ -4,6 +4,8 @@
 package pb2
 
 import (
+	bytes "bytes"
+	gzip "compress/gzip"
 	proto "github.com/golang/protobuf/proto"
 	any "github.com/golang/protobuf/ptypes/any"
 	duration "github.com/golang/protobuf/ptypes/duration"
@@ -12,8 +14,8 @@ import (
 	timestamp "github.com/golang/protobuf/ptypes/timestamp"
 	wrappers "github.com/golang/protobuf/ptypes/wrappers"
 	protoreflect "github.com/golang/protobuf/v2/reflect/protoreflect"
-	prototype "github.com/golang/protobuf/v2/reflect/prototype"
 	protoimpl "github.com/golang/protobuf/v2/runtime/protoimpl"
+	reflect "reflect"
 )
 
 // This is a compile-time assertion to ensure that this generated file
@@ -32,7 +34,7 @@ const (
 )
 
 func (e Enum) Type() protoreflect.EnumType {
-	return xxx_Test_protoFile_EnumTypes[0]
+	return xxx_Test_protoFile_enumTypes[0]
 }
 func (e Enum) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -72,7 +74,7 @@ func (x *Enum) UnmarshalJSON(data []byte) error {
 }
 
 func (Enum) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_c8d7acc1bcec9a72, []int{0}
+	return fileDescriptor_c8d7acc1bcec9a72_gzipped, []int{0}
 }
 
 type Enums_NestedEnum int32
@@ -84,7 +86,7 @@ const (
 )
 
 func (e Enums_NestedEnum) Type() protoreflect.EnumType {
-	return xxx_Test_protoFile_EnumTypes[1]
+	return xxx_Test_protoFile_enumTypes[1]
 }
 func (e Enums_NestedEnum) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -122,7 +124,7 @@ func (x *Enums_NestedEnum) UnmarshalJSON(data []byte) error {
 }
 
 func (Enums_NestedEnum) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_c8d7acc1bcec9a72, []int{2, 0}
+	return fileDescriptor_c8d7acc1bcec9a72_gzipped, []int{2, 0}
 }
 
 // Scalars contains optional scalar fields.
@@ -147,29 +149,14 @@ type Scalars struct {
 	XXX_sizecache        int32    `json:"-"`
 }
 
-type xxx_Scalars struct{ m *Scalars }
-
 func (m *Scalars) ProtoReflect() protoreflect.Message {
-	return xxx_Scalars{m}
-}
-func (m xxx_Scalars) Type() protoreflect.MessageType {
-	return xxx_Test_protoFile_MessageTypes[0].Type
-}
-func (m xxx_Scalars) KnownFields() protoreflect.KnownFields {
-	return xxx_Test_protoFile_MessageTypes[0].KnownFieldsOf(m.m)
-}
-func (m xxx_Scalars) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Test_protoFile_MessageTypes[0].UnknownFieldsOf(m.m)
+	return xxx_Test_protoFile_messageTypes[0].MessageOf(m)
 }
-func (m xxx_Scalars) Interface() protoreflect.ProtoMessage {
-	return m.m
-}
-
 func (m *Scalars) Reset()         { *m = Scalars{} }
 func (m *Scalars) String() string { return proto.CompactTextString(m) }
 func (*Scalars) ProtoMessage()    {}
 func (*Scalars) Descriptor() ([]byte, []int) {
-	return fileDescriptor_c8d7acc1bcec9a72, []int{0}
+	return fileDescriptor_c8d7acc1bcec9a72_gzipped, []int{0}
 }
 
 func (m *Scalars) XXX_Unmarshal(b []byte) error {
@@ -311,29 +298,14 @@ type Repeats struct {
 	XXX_sizecache        int32     `json:"-"`
 }
 
-type xxx_Repeats struct{ m *Repeats }
-
 func (m *Repeats) ProtoReflect() protoreflect.Message {
-	return xxx_Repeats{m}
-}
-func (m xxx_Repeats) Type() protoreflect.MessageType {
-	return xxx_Test_protoFile_MessageTypes[1].Type
+	return xxx_Test_protoFile_messageTypes[1].MessageOf(m)
 }
-func (m xxx_Repeats) KnownFields() protoreflect.KnownFields {
-	return xxx_Test_protoFile_MessageTypes[1].KnownFieldsOf(m.m)
-}
-func (m xxx_Repeats) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Test_protoFile_MessageTypes[1].UnknownFieldsOf(m.m)
-}
-func (m xxx_Repeats) Interface() protoreflect.ProtoMessage {
-	return m.m
-}
-
 func (m *Repeats) Reset()         { *m = Repeats{} }
 func (m *Repeats) String() string { return proto.CompactTextString(m) }
 func (*Repeats) ProtoMessage()    {}
 func (*Repeats) Descriptor() ([]byte, []int) {
-	return fileDescriptor_c8d7acc1bcec9a72, []int{1}
+	return fileDescriptor_c8d7acc1bcec9a72_gzipped, []int{1}
 }
 
 func (m *Repeats) XXX_Unmarshal(b []byte) error {
@@ -428,29 +400,14 @@ type Enums struct {
 	XXX_sizecache        int32              `json:"-"`
 }
 
-type xxx_Enums struct{ m *Enums }
-
 func (m *Enums) ProtoReflect() protoreflect.Message {
-	return xxx_Enums{m}
-}
-func (m xxx_Enums) Type() protoreflect.MessageType {
-	return xxx_Test_protoFile_MessageTypes[2].Type
-}
-func (m xxx_Enums) KnownFields() protoreflect.KnownFields {
-	return xxx_Test_protoFile_MessageTypes[2].KnownFieldsOf(m.m)
-}
-func (m xxx_Enums) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Test_protoFile_MessageTypes[2].UnknownFieldsOf(m.m)
+	return xxx_Test_protoFile_messageTypes[2].MessageOf(m)
 }
-func (m xxx_Enums) Interface() protoreflect.ProtoMessage {
-	return m.m
-}
-
 func (m *Enums) Reset()         { *m = Enums{} }
 func (m *Enums) String() string { return proto.CompactTextString(m) }
 func (*Enums) ProtoMessage()    {}
 func (*Enums) Descriptor() ([]byte, []int) {
-	return fileDescriptor_c8d7acc1bcec9a72, []int{2}
+	return fileDescriptor_c8d7acc1bcec9a72_gzipped, []int{2}
 }
 
 func (m *Enums) XXX_Unmarshal(b []byte) error {
@@ -510,29 +467,14 @@ type Nests struct {
 	XXX_sizecache        int32             `json:"-"`
 }
 
-type xxx_Nests struct{ m *Nests }
-
 func (m *Nests) ProtoReflect() protoreflect.Message {
-	return xxx_Nests{m}
-}
-func (m xxx_Nests) Type() protoreflect.MessageType {
-	return xxx_Test_protoFile_MessageTypes[3].Type
+	return xxx_Test_protoFile_messageTypes[3].MessageOf(m)
 }
-func (m xxx_Nests) KnownFields() protoreflect.KnownFields {
-	return xxx_Test_protoFile_MessageTypes[3].KnownFieldsOf(m.m)
-}
-func (m xxx_Nests) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Test_protoFile_MessageTypes[3].UnknownFieldsOf(m.m)
-}
-func (m xxx_Nests) Interface() protoreflect.ProtoMessage {
-	return m.m
-}
-
 func (m *Nests) Reset()         { *m = Nests{} }
 func (m *Nests) String() string { return proto.CompactTextString(m) }
 func (*Nests) ProtoMessage()    {}
 func (*Nests) Descriptor() ([]byte, []int) {
-	return fileDescriptor_c8d7acc1bcec9a72, []int{3}
+	return fileDescriptor_c8d7acc1bcec9a72_gzipped, []int{3}
 }
 
 func (m *Nests) XXX_Unmarshal(b []byte) error {
@@ -590,29 +532,14 @@ type Nested struct {
 	XXX_sizecache        int32    `json:"-"`
 }
 
-type xxx_Nested struct{ m *Nested }
-
 func (m *Nested) ProtoReflect() protoreflect.Message {
-	return xxx_Nested{m}
-}
-func (m xxx_Nested) Type() protoreflect.MessageType {
-	return xxx_Test_protoFile_MessageTypes[4].Type
-}
-func (m xxx_Nested) KnownFields() protoreflect.KnownFields {
-	return xxx_Test_protoFile_MessageTypes[4].KnownFieldsOf(m.m)
-}
-func (m xxx_Nested) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Test_protoFile_MessageTypes[4].UnknownFieldsOf(m.m)
+	return xxx_Test_protoFile_messageTypes[4].MessageOf(m)
 }
-func (m xxx_Nested) Interface() protoreflect.ProtoMessage {
-	return m.m
-}
-
 func (m *Nested) Reset()         { *m = Nested{} }
 func (m *Nested) String() string { return proto.CompactTextString(m) }
 func (*Nested) ProtoMessage()    {}
 func (*Nested) Descriptor() ([]byte, []int) {
-	return fileDescriptor_c8d7acc1bcec9a72, []int{4}
+	return fileDescriptor_c8d7acc1bcec9a72_gzipped, []int{4}
 }
 
 func (m *Nested) XXX_Unmarshal(b []byte) error {
@@ -665,29 +592,14 @@ type Requireds struct {
 	XXX_sizecache        int32    `json:"-"`
 }
 
-type xxx_Requireds struct{ m *Requireds }
-
 func (m *Requireds) ProtoReflect() protoreflect.Message {
-	return xxx_Requireds{m}
+	return xxx_Test_protoFile_messageTypes[5].MessageOf(m)
 }
-func (m xxx_Requireds) Type() protoreflect.MessageType {
-	return xxx_Test_protoFile_MessageTypes[5].Type
-}
-func (m xxx_Requireds) KnownFields() protoreflect.KnownFields {
-	return xxx_Test_protoFile_MessageTypes[5].KnownFieldsOf(m.m)
-}
-func (m xxx_Requireds) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Test_protoFile_MessageTypes[5].UnknownFieldsOf(m.m)
-}
-func (m xxx_Requireds) Interface() protoreflect.ProtoMessage {
-	return m.m
-}
-
 func (m *Requireds) Reset()         { *m = Requireds{} }
 func (m *Requireds) String() string { return proto.CompactTextString(m) }
 func (*Requireds) ProtoMessage()    {}
 func (*Requireds) Descriptor() ([]byte, []int) {
-	return fileDescriptor_c8d7acc1bcec9a72, []int{5}
+	return fileDescriptor_c8d7acc1bcec9a72_gzipped, []int{5}
 }
 
 func (m *Requireds) XXX_Unmarshal(b []byte) error {
@@ -794,29 +706,14 @@ type PartialRequired struct {
 	XXX_sizecache        int32    `json:"-"`
 }
 
-type xxx_PartialRequired struct{ m *PartialRequired }
-
 func (m *PartialRequired) ProtoReflect() protoreflect.Message {
-	return xxx_PartialRequired{m}
-}
-func (m xxx_PartialRequired) Type() protoreflect.MessageType {
-	return xxx_Test_protoFile_MessageTypes[6].Type
-}
-func (m xxx_PartialRequired) KnownFields() protoreflect.KnownFields {
-	return xxx_Test_protoFile_MessageTypes[6].KnownFieldsOf(m.m)
+	return xxx_Test_protoFile_messageTypes[6].MessageOf(m)
 }
-func (m xxx_PartialRequired) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Test_protoFile_MessageTypes[6].UnknownFieldsOf(m.m)
-}
-func (m xxx_PartialRequired) Interface() protoreflect.ProtoMessage {
-	return m.m
-}
-
 func (m *PartialRequired) Reset()         { *m = PartialRequired{} }
 func (m *PartialRequired) String() string { return proto.CompactTextString(m) }
 func (*PartialRequired) ProtoMessage()    {}
 func (*PartialRequired) Descriptor() ([]byte, []int) {
-	return fileDescriptor_c8d7acc1bcec9a72, []int{6}
+	return fileDescriptor_c8d7acc1bcec9a72_gzipped, []int{6}
 }
 
 func (m *PartialRequired) XXX_Unmarshal(b []byte) error {
@@ -862,29 +759,14 @@ type Oneofs struct {
 	XXX_sizecache        int32          `json:"-"`
 }
 
-type xxx_Oneofs struct{ m *Oneofs }
-
 func (m *Oneofs) ProtoReflect() protoreflect.Message {
-	return xxx_Oneofs{m}
-}
-func (m xxx_Oneofs) Type() protoreflect.MessageType {
-	return xxx_Test_protoFile_MessageTypes[7].Type
-}
-func (m xxx_Oneofs) KnownFields() protoreflect.KnownFields {
-	return xxx_Test_protoFile_MessageTypes[7].KnownFieldsOf(m.m)
-}
-func (m xxx_Oneofs) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Test_protoFile_MessageTypes[7].UnknownFieldsOf(m.m)
-}
-func (m xxx_Oneofs) Interface() protoreflect.ProtoMessage {
-	return m.m
+	return xxx_Test_protoFile_messageTypes[7].MessageOf(m)
 }
-
 func (m *Oneofs) Reset()         { *m = Oneofs{} }
 func (m *Oneofs) String() string { return proto.CompactTextString(m) }
 func (*Oneofs) ProtoMessage()    {}
 func (*Oneofs) Descriptor() ([]byte, []int) {
-	return fileDescriptor_c8d7acc1bcec9a72, []int{7}
+	return fileDescriptor_c8d7acc1bcec9a72_gzipped, []int{7}
 }
 
 func (m *Oneofs) XXX_Unmarshal(b []byte) error {
@@ -963,29 +845,14 @@ type Maps struct {
 	XXX_sizecache        int32              `json:"-"`
 }
 
-type xxx_Maps struct{ m *Maps }
-
 func (m *Maps) ProtoReflect() protoreflect.Message {
-	return xxx_Maps{m}
-}
-func (m xxx_Maps) Type() protoreflect.MessageType {
-	return xxx_Test_protoFile_MessageTypes[8].Type
-}
-func (m xxx_Maps) KnownFields() protoreflect.KnownFields {
-	return xxx_Test_protoFile_MessageTypes[8].KnownFieldsOf(m.m)
+	return xxx_Test_protoFile_messageTypes[8].MessageOf(m)
 }
-func (m xxx_Maps) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Test_protoFile_MessageTypes[8].UnknownFieldsOf(m.m)
-}
-func (m xxx_Maps) Interface() protoreflect.ProtoMessage {
-	return m.m
-}
-
 func (m *Maps) Reset()         { *m = Maps{} }
 func (m *Maps) String() string { return proto.CompactTextString(m) }
 func (*Maps) ProtoMessage()    {}
 func (*Maps) Descriptor() ([]byte, []int) {
-	return fileDescriptor_c8d7acc1bcec9a72, []int{8}
+	return fileDescriptor_c8d7acc1bcec9a72_gzipped, []int{8}
 }
 
 func (m *Maps) XXX_Unmarshal(b []byte) error {
@@ -1055,29 +922,14 @@ type NestedWithRequired struct {
 	XXX_sizecache        int32    `json:"-"`
 }
 
-type xxx_NestedWithRequired struct{ m *NestedWithRequired }
-
 func (m *NestedWithRequired) ProtoReflect() protoreflect.Message {
-	return xxx_NestedWithRequired{m}
+	return xxx_Test_protoFile_messageTypes[9].MessageOf(m)
 }
-func (m xxx_NestedWithRequired) Type() protoreflect.MessageType {
-	return xxx_Test_protoFile_MessageTypes[9].Type
-}
-func (m xxx_NestedWithRequired) KnownFields() protoreflect.KnownFields {
-	return xxx_Test_protoFile_MessageTypes[9].KnownFieldsOf(m.m)
-}
-func (m xxx_NestedWithRequired) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Test_protoFile_MessageTypes[9].UnknownFieldsOf(m.m)
-}
-func (m xxx_NestedWithRequired) Interface() protoreflect.ProtoMessage {
-	return m.m
-}
-
 func (m *NestedWithRequired) Reset()         { *m = NestedWithRequired{} }
 func (m *NestedWithRequired) String() string { return proto.CompactTextString(m) }
 func (*NestedWithRequired) ProtoMessage()    {}
 func (*NestedWithRequired) Descriptor() ([]byte, []int) {
-	return fileDescriptor_c8d7acc1bcec9a72, []int{9}
+	return fileDescriptor_c8d7acc1bcec9a72_gzipped, []int{9}
 }
 
 func (m *NestedWithRequired) XXX_Unmarshal(b []byte) error {
@@ -1114,29 +966,14 @@ type IndirectRequired struct {
 	XXX_sizecache        int32                          `json:"-"`
 }
 
-type xxx_IndirectRequired struct{ m *IndirectRequired }
-
 func (m *IndirectRequired) ProtoReflect() protoreflect.Message {
-	return xxx_IndirectRequired{m}
-}
-func (m xxx_IndirectRequired) Type() protoreflect.MessageType {
-	return xxx_Test_protoFile_MessageTypes[10].Type
+	return xxx_Test_protoFile_messageTypes[10].MessageOf(m)
 }
-func (m xxx_IndirectRequired) KnownFields() protoreflect.KnownFields {
-	return xxx_Test_protoFile_MessageTypes[10].KnownFieldsOf(m.m)
-}
-func (m xxx_IndirectRequired) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Test_protoFile_MessageTypes[10].UnknownFieldsOf(m.m)
-}
-func (m xxx_IndirectRequired) Interface() protoreflect.ProtoMessage {
-	return m.m
-}
-
 func (m *IndirectRequired) Reset()         { *m = IndirectRequired{} }
 func (m *IndirectRequired) String() string { return proto.CompactTextString(m) }
 func (*IndirectRequired) ProtoMessage()    {}
 func (*IndirectRequired) Descriptor() ([]byte, []int) {
-	return fileDescriptor_c8d7acc1bcec9a72, []int{10}
+	return fileDescriptor_c8d7acc1bcec9a72_gzipped, []int{10}
 }
 
 func (m *IndirectRequired) XXX_Unmarshal(b []byte) error {
@@ -1188,29 +1025,14 @@ type Extensions struct {
 	XXX_sizecache                int32  `json:"-"`
 }
 
-type xxx_Extensions struct{ m *Extensions }
-
 func (m *Extensions) ProtoReflect() protoreflect.Message {
-	return xxx_Extensions{m}
-}
-func (m xxx_Extensions) Type() protoreflect.MessageType {
-	return xxx_Test_protoFile_MessageTypes[11].Type
-}
-func (m xxx_Extensions) KnownFields() protoreflect.KnownFields {
-	return xxx_Test_protoFile_MessageTypes[11].KnownFieldsOf(m.m)
-}
-func (m xxx_Extensions) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Test_protoFile_MessageTypes[11].UnknownFieldsOf(m.m)
+	return xxx_Test_protoFile_messageTypes[11].MessageOf(m)
 }
-func (m xxx_Extensions) Interface() protoreflect.ProtoMessage {
-	return m.m
-}
-
 func (m *Extensions) Reset()         { *m = Extensions{} }
 func (m *Extensions) String() string { return proto.CompactTextString(m) }
 func (*Extensions) ProtoMessage()    {}
 func (*Extensions) Descriptor() ([]byte, []int) {
-	return fileDescriptor_c8d7acc1bcec9a72, []int{11}
+	return fileDescriptor_c8d7acc1bcec9a72_gzipped, []int{11}
 }
 
 var extRange_Extensions = []proto.ExtensionRange{
@@ -1266,29 +1088,14 @@ type ExtensionsContainer struct {
 	XXX_sizecache        int32    `json:"-"`
 }
 
-type xxx_ExtensionsContainer struct{ m *ExtensionsContainer }
-
 func (m *ExtensionsContainer) ProtoReflect() protoreflect.Message {
-	return xxx_ExtensionsContainer{m}
-}
-func (m xxx_ExtensionsContainer) Type() protoreflect.MessageType {
-	return xxx_Test_protoFile_MessageTypes[12].Type
+	return xxx_Test_protoFile_messageTypes[12].MessageOf(m)
 }
-func (m xxx_ExtensionsContainer) KnownFields() protoreflect.KnownFields {
-	return xxx_Test_protoFile_MessageTypes[12].KnownFieldsOf(m.m)
-}
-func (m xxx_ExtensionsContainer) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Test_protoFile_MessageTypes[12].UnknownFieldsOf(m.m)
-}
-func (m xxx_ExtensionsContainer) Interface() protoreflect.ProtoMessage {
-	return m.m
-}
-
 func (m *ExtensionsContainer) Reset()         { *m = ExtensionsContainer{} }
 func (m *ExtensionsContainer) String() string { return proto.CompactTextString(m) }
 func (*ExtensionsContainer) ProtoMessage()    {}
 func (*ExtensionsContainer) Descriptor() ([]byte, []int) {
-	return fileDescriptor_c8d7acc1bcec9a72, []int{12}
+	return fileDescriptor_c8d7acc1bcec9a72_gzipped, []int{12}
 }
 
 func (m *ExtensionsContainer) XXX_Unmarshal(b []byte) error {
@@ -1316,29 +1123,14 @@ type MessageSet struct {
 	XXX_sizecache                int32  `json:"-"`
 }
 
-type xxx_MessageSet struct{ m *MessageSet }
-
 func (m *MessageSet) ProtoReflect() protoreflect.Message {
-	return xxx_MessageSet{m}
-}
-func (m xxx_MessageSet) Type() protoreflect.MessageType {
-	return xxx_Test_protoFile_MessageTypes[13].Type
-}
-func (m xxx_MessageSet) KnownFields() protoreflect.KnownFields {
-	return xxx_Test_protoFile_MessageTypes[13].KnownFieldsOf(m.m)
-}
-func (m xxx_MessageSet) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Test_protoFile_MessageTypes[13].UnknownFieldsOf(m.m)
+	return xxx_Test_protoFile_messageTypes[13].MessageOf(m)
 }
-func (m xxx_MessageSet) Interface() protoreflect.ProtoMessage {
-	return m.m
-}
-
 func (m *MessageSet) Reset()         { *m = MessageSet{} }
 func (m *MessageSet) String() string { return proto.CompactTextString(m) }
 func (*MessageSet) ProtoMessage()    {}
 func (*MessageSet) Descriptor() ([]byte, []int) {
-	return fileDescriptor_c8d7acc1bcec9a72, []int{13}
+	return fileDescriptor_c8d7acc1bcec9a72_gzipped, []int{13}
 }
 
 var extRange_MessageSet = []proto.ExtensionRange{
@@ -1374,29 +1166,14 @@ type MessageSetExtension struct {
 	XXX_sizecache        int32    `json:"-"`
 }
 
-type xxx_MessageSetExtension struct{ m *MessageSetExtension }
-
 func (m *MessageSetExtension) ProtoReflect() protoreflect.Message {
-	return xxx_MessageSetExtension{m}
-}
-func (m xxx_MessageSetExtension) Type() protoreflect.MessageType {
-	return xxx_Test_protoFile_MessageTypes[14].Type
+	return xxx_Test_protoFile_messageTypes[14].MessageOf(m)
 }
-func (m xxx_MessageSetExtension) KnownFields() protoreflect.KnownFields {
-	return xxx_Test_protoFile_MessageTypes[14].KnownFieldsOf(m.m)
-}
-func (m xxx_MessageSetExtension) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Test_protoFile_MessageTypes[14].UnknownFieldsOf(m.m)
-}
-func (m xxx_MessageSetExtension) Interface() protoreflect.ProtoMessage {
-	return m.m
-}
-
 func (m *MessageSetExtension) Reset()         { *m = MessageSetExtension{} }
 func (m *MessageSetExtension) String() string { return proto.CompactTextString(m) }
 func (*MessageSetExtension) ProtoMessage()    {}
 func (*MessageSetExtension) Descriptor() ([]byte, []int) {
-	return fileDescriptor_c8d7acc1bcec9a72, []int{14}
+	return fileDescriptor_c8d7acc1bcec9a72_gzipped, []int{14}
 }
 
 func (m *MessageSetExtension) XXX_Unmarshal(b []byte) error {
@@ -1447,29 +1224,14 @@ type KnownTypes struct {
 	XXX_sizecache        int32                 `json:"-"`
 }
 
-type xxx_KnownTypes struct{ m *KnownTypes }
-
 func (m *KnownTypes) ProtoReflect() protoreflect.Message {
-	return xxx_KnownTypes{m}
-}
-func (m xxx_KnownTypes) Type() protoreflect.MessageType {
-	return xxx_Test_protoFile_MessageTypes[15].Type
-}
-func (m xxx_KnownTypes) KnownFields() protoreflect.KnownFields {
-	return xxx_Test_protoFile_MessageTypes[15].KnownFieldsOf(m.m)
+	return xxx_Test_protoFile_messageTypes[15].MessageOf(m)
 }
-func (m xxx_KnownTypes) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Test_protoFile_MessageTypes[15].UnknownFieldsOf(m.m)
-}
-func (m xxx_KnownTypes) Interface() protoreflect.ProtoMessage {
-	return m.m
-}
-
 func (m *KnownTypes) Reset()         { *m = KnownTypes{} }
 func (m *KnownTypes) String() string { return proto.CompactTextString(m) }
 func (*KnownTypes) ProtoMessage()    {}
 func (*KnownTypes) Descriptor() ([]byte, []int) {
-	return fileDescriptor_c8d7acc1bcec9a72, []int{15}
+	return fileDescriptor_c8d7acc1bcec9a72_gzipped, []int{15}
 }
 
 func (m *KnownTypes) XXX_Unmarshal(b []byte) error {
@@ -1612,29 +1374,14 @@ type Nests_OptGroup struct {
 	XXX_sizecache        int32                          `json:"-"`
 }
 
-type xxx_Nests_OptGroup struct{ m *Nests_OptGroup }
-
 func (m *Nests_OptGroup) ProtoReflect() protoreflect.Message {
-	return xxx_Nests_OptGroup{m}
-}
-func (m xxx_Nests_OptGroup) Type() protoreflect.MessageType {
-	return xxx_Test_protoFile_MessageTypes[16].Type
-}
-func (m xxx_Nests_OptGroup) KnownFields() protoreflect.KnownFields {
-	return xxx_Test_protoFile_MessageTypes[16].KnownFieldsOf(m.m)
-}
-func (m xxx_Nests_OptGroup) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Test_protoFile_MessageTypes[16].UnknownFieldsOf(m.m)
-}
-func (m xxx_Nests_OptGroup) Interface() protoreflect.ProtoMessage {
-	return m.m
+	return xxx_Test_protoFile_messageTypes[16].MessageOf(m)
 }
-
 func (m *Nests_OptGroup) Reset()         { *m = Nests_OptGroup{} }
 func (m *Nests_OptGroup) String() string { return proto.CompactTextString(m) }
 func (*Nests_OptGroup) ProtoMessage()    {}
 func (*Nests_OptGroup) Descriptor() ([]byte, []int) {
-	return fileDescriptor_c8d7acc1bcec9a72, []int{3, 0}
+	return fileDescriptor_c8d7acc1bcec9a72_gzipped, []int{3, 0}
 }
 
 func (m *Nests_OptGroup) XXX_Unmarshal(b []byte) error {
@@ -1690,29 +1437,14 @@ type Nests_RptGroup struct {
 	XXX_sizecache        int32    `json:"-"`
 }
 
-type xxx_Nests_RptGroup struct{ m *Nests_RptGroup }
-
 func (m *Nests_RptGroup) ProtoReflect() protoreflect.Message {
-	return xxx_Nests_RptGroup{m}
-}
-func (m xxx_Nests_RptGroup) Type() protoreflect.MessageType {
-	return xxx_Test_protoFile_MessageTypes[17].Type
-}
-func (m xxx_Nests_RptGroup) KnownFields() protoreflect.KnownFields {
-	return xxx_Test_protoFile_MessageTypes[17].KnownFieldsOf(m.m)
+	return xxx_Test_protoFile_messageTypes[17].MessageOf(m)
 }
-func (m xxx_Nests_RptGroup) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Test_protoFile_MessageTypes[17].UnknownFieldsOf(m.m)
-}
-func (m xxx_Nests_RptGroup) Interface() protoreflect.ProtoMessage {
-	return m.m
-}
-
 func (m *Nests_RptGroup) Reset()         { *m = Nests_RptGroup{} }
 func (m *Nests_RptGroup) String() string { return proto.CompactTextString(m) }
 func (*Nests_RptGroup) ProtoMessage()    {}
 func (*Nests_RptGroup) Descriptor() ([]byte, []int) {
-	return fileDescriptor_c8d7acc1bcec9a72, []int{3, 1}
+	return fileDescriptor_c8d7acc1bcec9a72_gzipped, []int{3, 1}
 }
 
 func (m *Nests_RptGroup) XXX_Unmarshal(b []byte) error {
@@ -1747,31 +1479,14 @@ type Nests_OptGroup_OptNestedGroup struct {
 	XXX_sizecache        int32    `json:"-"`
 }
 
-type xxx_Nests_OptGroup_OptNestedGroup struct {
-	m *Nests_OptGroup_OptNestedGroup
-}
-
 func (m *Nests_OptGroup_OptNestedGroup) ProtoReflect() protoreflect.Message {
-	return xxx_Nests_OptGroup_OptNestedGroup{m}
-}
-func (m xxx_Nests_OptGroup_OptNestedGroup) Type() protoreflect.MessageType {
-	return xxx_Test_protoFile_MessageTypes[18].Type
-}
-func (m xxx_Nests_OptGroup_OptNestedGroup) KnownFields() protoreflect.KnownFields {
-	return xxx_Test_protoFile_MessageTypes[18].KnownFieldsOf(m.m)
-}
-func (m xxx_Nests_OptGroup_OptNestedGroup) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Test_protoFile_MessageTypes[18].UnknownFieldsOf(m.m)
+	return xxx_Test_protoFile_messageTypes[18].MessageOf(m)
 }
-func (m xxx_Nests_OptGroup_OptNestedGroup) Interface() protoreflect.ProtoMessage {
-	return m.m
-}
-
 func (m *Nests_OptGroup_OptNestedGroup) Reset()         { *m = Nests_OptGroup_OptNestedGroup{} }
 func (m *Nests_OptGroup_OptNestedGroup) String() string { return proto.CompactTextString(m) }
 func (*Nests_OptGroup_OptNestedGroup) ProtoMessage()    {}
 func (*Nests_OptGroup_OptNestedGroup) Descriptor() ([]byte, []int) {
-	return fileDescriptor_c8d7acc1bcec9a72, []int{3, 0, 0}
+	return fileDescriptor_c8d7acc1bcec9a72_gzipped, []int{3, 0, 0}
 }
 
 func (m *Nests_OptGroup_OptNestedGroup) XXX_Unmarshal(b []byte) error {
@@ -1953,7 +1668,7 @@ var E_MessageSetExtension_ExtNested = &proto.ExtensionDesc{
 }
 
 func init() {
-	proto.RegisterFile("encoding/textpb/testprotos/pb2/test.proto", fileDescriptor_c8d7acc1bcec9a72)
+	proto.RegisterFile("encoding/textpb/testprotos/pb2/test.proto", fileDescriptor_c8d7acc1bcec9a72_gzipped)
 	proto.RegisterEnum("pb2.Enum", Enum_name, Enum_value)
 	proto.RegisterEnum("pb2.Enums_NestedEnum", Enums_NestedEnum_name, Enums_NestedEnum_value)
 	proto.RegisterType((*Scalars)(nil), "pb2.Scalars")
@@ -2002,1295 +1717,547 @@ func init() {
 }
 
 var fileDescriptor_c8d7acc1bcec9a72 = []byte{
-	// 1945 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x58, 0xdb, 0x6e, 0x1b, 0xc9,
-	0x11, 0xdd, 0x99, 0xe1, 0xb5, 0xa9, 0x0b, 0x3d, 0x92, 0xbd, 0x14, 0xbd, 0xbb, 0x1a, 0x13, 0x9b,
-	0x80, 0x11, 0xb0, 0x12, 0x32, 0xa2, 0x19, 0x81, 0x5a, 0xdb, 0xb0, 0xd6, 0xf4, 0xae, 0xd7, 0x59,
-	0x29, 0x20, 0xe9, 0x18, 0x58, 0x20, 0x10, 0x48, 0xb1, 0xc5, 0x1d, 0x84, 0x9c, 0x1e, 0xf6, 0x34,
-	0x6d, 0xe9, 0x3f, 0xf2, 0x0d, 0xc9, 0x1f, 0xe4, 0x21, 0xf9, 0x93, 0xfc, 0x44, 0x5e, 0xf2, 0x10,
-	0x20, 0x0f, 0x0e, 0xaa, 0x7a, 0x2e, 0xcd, 0x19, 0xde, 0xde, 0xa6, 0xbb, 0xea, 0x9c, 0xaa, 0xae,
-	0xea, 0xae, 0xea, 0x69, 0xf2, 0x1b, 0xea, 0xde, 0xb0, 0xa1, 0xe3, 0x8e, 0x4e, 0x04, 0xbd, 0x13,
-	0xde, 0xe0, 0x44, 0x50, 0x5f, 0x78, 0x9c, 0x09, 0xe6, 0x9f, 0x78, 0x03, 0x1b, 0x87, 0xc7, 0x38,
-	0x36, 0x0d, 0x6f, 0x60, 0x57, 0x0f, 0x46, 0x8c, 0x8d, 0xc6, 0xf4, 0x04, 0xa7, 0x06, 0xb3, 0xdb,
-	0x93, 0xbe, 0x7b, 0x2f, 0xe5, 0xd5, 0xc7, 0x49, 0x11, 0x9d, 0x78, 0x22, 0x14, 0x7e, 0x95, 0x14,
-	0x0e, 0x67, 0xbc, 0x2f, 0x1c, 0xe6, 0x06, 0xf2, 0x2f, 0x92, 0x72, 0x5f, 0xf0, 0xd9, 0x4d, 0x60,
-	0xba, 0x7a, 0x98, 0x94, 0x0a, 0x67, 0x42, 0x7d, 0xd1, 0x9f, 0x78, 0xcb, 0xe8, 0x3f, 0xf2, 0xbe,
-	0xe7, 0x51, 0xee, 0x4b, 0x79, 0xed, 0x5f, 0x06, 0xc9, 0x77, 0x6f, 0xfa, 0xe3, 0x3e, 0xf7, 0xcd,
-	0x03, 0x52, 0x60, 0x9e, 0xb8, 0x1e, 0x30, 0x36, 0xae, 0x68, 0x96, 0x56, 0x2f, 0x74, 0xf2, 0xcc,
-	0x13, 0x17, 0x8c, 0x8d, 0xcd, 0xc7, 0xa4, 0x08, 0x22, 0xc7, 0x15, 0xa7, 0x76, 0x45, 0xb7, 0xb4,
-	0x7a, 0xb6, 0x03, 0xba, 0x6f, 0x60, 0xac, 0x08, 0x9b, 0x8d, 0x8a, 0x61, 0x69, 0x75, 0x23, 0x14,
-	0x36, 0x1b, 0xe6, 0x97, 0x84, 0x80, 0x70, 0x26, 0xa1, 0x19, 0x4b, 0xab, 0x6f, 0x77, 0x40, 0xfd,
-	0x1d, 0x4e, 0xa8, 0xe2, 0x66, 0xa3, 0x92, 0xb5, 0xb4, 0x7a, 0x26, 0x12, 0xc7, 0x68, 0x5f, 0xa2,
-	0x73, 0x96, 0x56, 0x7f, 0x80, 0xe2, 0xee, 0x1c, 0xda, 0x97, 0xe8, 0xbc, 0xa5, 0xd5, 0xcd, 0x48,
-	0xdc, 0x6c, 0x98, 0x87, 0xa4, 0x04, 0xe2, 0x5b, 0xe7, 0x8e, 0x0e, 0x4f, 0xed, 0x4a, 0xc1, 0xd2,
-	0xea, 0xf9, 0x0e, 0x20, 0x5e, 0xcb, 0x99, 0x39, 0x85, 0x66, 0xa3, 0x52, 0xb4, 0xb4, 0x7a, 0x2e,
-	0x56, 0x68, 0x36, 0xcc, 0x27, 0x64, 0x0b, 0x0d, 0x84, 0x14, 0xc4, 0xd2, 0xea, 0xbb, 0x1d, 0x00,
-	0x75, 0x83, 0xa9, 0x79, 0x95, 0x66, 0xa3, 0x52, 0xb2, 0xb4, 0x7a, 0x59, 0x51, 0x69, 0x36, 0xc2,
-	0x00, 0xdd, 0x8e, 0x59, 0x5f, 0x54, 0xf6, 0x2d, 0xad, 0xae, 0x63, 0x80, 0x5e, 0xc3, 0x38, 0x5c,
-	0xc3, 0x90, 0xcd, 0x06, 0x63, 0x5a, 0x79, 0x68, 0x69, 0x75, 0x0d, 0xd7, 0xf0, 0x0a, 0x27, 0x42,
-	0xec, 0xe0, 0x5e, 0x50, 0xbf, 0xb2, 0x63, 0x69, 0xf5, 0x2d, 0xc4, 0x5e, 0xc0, 0x38, 0x5a, 0xbf,
-	0xe0, 0x8e, 0x3b, 0xaa, 0x6c, 0x5b, 0x5a, 0xbd, 0x28, 0xd7, 0x8f, 0x13, 0xb5, 0xbf, 0xe8, 0x24,
-	0xdf, 0xa1, 0x1e, 0xed, 0x0b, 0x4c, 0x2e, 0x8f, 0x93, 0x6b, 0x40, 0x72, 0x79, 0x9c, 0x5c, 0xae,
-	0x24, 0xd7, 0x80, 0xe4, 0x72, 0x25, 0xb9, 0x5c, 0x49, 0xae, 0x01, 0xc9, 0xe5, 0x4a, 0x72, 0xb9,
-	0x9a, 0x5c, 0x03, 0x92, 0xcb, 0xd5, 0xe4, 0x72, 0x35, 0xb9, 0x06, 0x24, 0x97, 0x47, 0xc9, 0x0d,
-	0xa8, 0x65, 0x58, 0x72, 0x96, 0x01, 0x61, 0xe1, 0x4a, 0x58, 0x78, 0x1c, 0x96, 0xbc, 0x65, 0x40,
-	0x58, 0x78, 0x14, 0x96, 0x40, 0x1c, 0xac, 0x7c, 0xd7, 0x32, 0x60, 0xe5, 0x3c, 0x5c, 0x79, 0x48,
-	0x1d, 0x46, 0xcd, 0x80, 0xa8, 0xf1, 0x20, 0x6a, 0xb5, 0xff, 0x69, 0x24, 0xdb, 0x76, 0x67, 0x13,
-	0xdf, 0xfc, 0x5a, 0xee, 0x78, 0xea, 0xce, 0x26, 0xb8, 0xe3, 0x77, 0xec, 0xe2, 0xb1, 0x37, 0xb0,
-	0x8f, 0x41, 0x8a, 0x9b, 0x1f, 0x3e, 0x40, 0x8b, 0x87, 0x5a, 0x10, 0x9e, 0x79, 0x2d, 0x1e, 0x68,
-	0x3d, 0x23, 0xbb, 0xc0, 0xe5, 0x52, 0x5f, 0xd0, 0xa1, 0x54, 0x36, 0x90, 0xf2, 0x61, 0xa4, 0xec,
-	0x1f, 0x5f, 0xa2, 0x14, 0x81, 0xdb, 0xcc, 0x13, 0xf1, 0x10, 0xe0, 0x3c, 0x01, 0xcf, 0xa0, 0xad,
-	0x65, 0x70, 0xae, 0xc2, 0x6b, 0x75, 0x42, 0x14, 0xb2, 0x3c, 0x31, 0xde, 0x5d, 0x5e, 0x95, 0x35,
-	0xf8, 0x78, 0x75, 0xd5, 0x2d, 0xeb, 0x66, 0x81, 0x64, 0x5e, 0xbd, 0x69, 0xff, 0x5c, 0x26, 0xb5,
-	0x7f, 0x1b, 0x24, 0x0b, 0xaa, 0xbe, 0x79, 0x24, 0x77, 0x8f, 0x34, 0x89, 0xeb, 0x2f, 0xd9, 0x25,
-	0xb4, 0x26, 0xa9, 0x70, 0x2b, 0xc9, 0x4f, 0xf3, 0x04, 0x23, 0x35, 0xe2, 0x6c, 0xe6, 0xe1, 0xf9,
-	0x27, 0xf6, 0x5e, 0xa4, 0xe9, 0x1f, 0x5f, 0x79, 0xe2, 0x7b, 0x10, 0x75, 0x22, 0x25, 0x20, 0x8f,
-	0xd7, 0x83, 0x1b, 0x27, 0x49, 0xce, 0x55, 0x72, 0x1e, 0x92, 0xc3, 0xa2, 0xe7, 0xc9, 0x3b, 0x11,
-	0x79, 0xa8, 0x54, 0xfd, 0x8f, 0x46, 0x0a, 0xa1, 0xcd, 0x55, 0x65, 0x6b, 0xfe, 0x7c, 0xe8, 0x89,
-	0xf3, 0x91, 0x08, 0x80, 0xb1, 0x32, 0x00, 0x3f, 0x92, 0x1d, 0xe6, 0x09, 0xa9, 0x1a, 0x7a, 0x0a,
-	0x61, 0xa8, 0x2d, 0x08, 0x03, 0x7c, 0x48, 0x98, 0x74, 0x3c, 0x81, 0xac, 0x36, 0xc9, 0xce, 0xbc,
-	0xc6, 0x66, 0x1b, 0xb1, 0xfa, 0x2b, 0x52, 0xe8, 0x28, 0xab, 0x5e, 0x72, 0x9e, 0x3b, 0x3b, 0x9c,
-	0xfa, 0x94, 0x7f, 0xa0, 0xc3, 0xeb, 0x5b, 0x87, 0x8e, 0x87, 0xb5, 0x2e, 0xc9, 0x05, 0x8b, 0x98,
-	0x8f, 0x87, 0xb6, 0x3a, 0x1e, 0xfa, 0xaa, 0x78, 0xd4, 0xfe, 0xab, 0x93, 0x62, 0x87, 0x4e, 0x67,
-	0x0e, 0xa7, 0x43, 0x59, 0x5d, 0xe8, 0x34, 0xf4, 0x46, 0x47, 0x6f, 0xe8, 0x14, 0x73, 0x70, 0x48,
-	0x4a, 0x20, 0x0a, 0x2b, 0xa8, 0x6e, 0xe9, 0x50, 0x84, 0x39, 0x9d, 0x2a, 0x45, 0x38, 0x52, 0xc0,
-	0x1a, 0xa3, 0x43, 0x11, 0x0e, 0x15, 0x64, 0x11, 0x06, 0x85, 0xa8, 0x08, 0x67, 0x2c, 0x1d, 0x8a,
-	0x30, 0xa7, 0x53, 0xb5, 0x08, 0xc7, 0x2a, 0x58, 0x6b, 0x74, 0x28, 0xc2, 0x91, 0x4a, 0x50, 0x6d,
-	0xc0, 0x4c, 0x50, 0x6d, 0x74, 0xac, 0x36, 0x74, 0x1a, 0x57, 0x1b, 0x3a, 0x8d, 0xab, 0x8d, 0x8e,
-	0xd5, 0x86, 0x4e, 0x95, 0x6a, 0x03, 0xf4, 0x32, 0x6e, 0x05, 0x4b, 0xc7, 0x6a, 0x43, 0xa7, 0x4a,
-	0xb5, 0x81, 0xd5, 0x63, 0xb5, 0x29, 0x5a, 0x3a, 0x56, 0x1b, 0x3a, 0x95, 0x35, 0xfa, 0x6b, 0x19,
-	0x1a, 0x4c, 0x2d, 0xb1, 0xf4, 0x64, 0xf5, 0xa0, 0x53, 0x3c, 0xb1, 0x47, 0xd2, 0x42, 0x10, 0xfa,
-	0x92, 0xa5, 0xa7, 0x8f, 0x0b, 0x9d, 0x06, 0xa1, 0xbf, 0x22, 0xbb, 0x7f, 0xe8, 0x73, 0xe1, 0xf4,
-	0xc7, 0x61, 0x02, 0x12, 0x0e, 0x6a, 0x49, 0x07, 0x57, 0x9f, 0x83, 0xda, 0x6b, 0x92, 0xbb, 0x72,
-	0x29, 0xbb, 0xf5, 0x4d, 0x93, 0x18, 0xbe, 0xe0, 0x72, 0x67, 0xfc, 0xf0, 0x59, 0x07, 0x06, 0xe6,
-	0x21, 0x31, 0x26, 0xfe, 0x68, 0xc1, 0x76, 0x00, 0x85, 0x89, 0x3f, 0xba, 0xc8, 0x93, 0xec, 0xcc,
-	0x75, 0x98, 0x5b, 0xfb, 0x67, 0x8e, 0x64, 0x7e, 0xea, 0x7b, 0xbe, 0x79, 0x4e, 0xb6, 0xb0, 0x03,
-	0x5c, 0x0b, 0x76, 0x2d, 0xf9, 0xe0, 0xf8, 0x1f, 0x20, 0x16, 0x14, 0x8e, 0xb1, 0xb7, 0xf4, 0x58,
-	0x57, 0xf0, 0xb6, 0x2b, 0xf8, 0x7d, 0x87, 0x38, 0xd1, 0x84, 0xf9, 0x3d, 0x29, 0x87, 0x79, 0x04,
-	0x3c, 0xee, 0x29, 0x1d, 0x09, 0xbe, 0x8c, 0x09, 0xc2, 0xb4, 0xf6, 0x18, 0x6c, 0x32, 0x49, 0xb2,
-	0xe3, 0xcf, 0x4d, 0x9a, 0x2f, 0xc9, 0x0e, 0x80, 0x81, 0x24, 0xe8, 0x50, 0xb2, 0x0c, 0x3d, 0x8e,
-	0x69, 0x40, 0xaf, 0xc7, 0x64, 0xbb, 0x92, 0x24, 0x5b, 0x03, 0x65, 0x0a, 0x28, 0x64, 0xf7, 0x02,
-	0x92, 0xa8, 0x28, 0xcf, 0x51, 0xc8, 0x66, 0xd6, 0x63, 0x90, 0xc6, 0x80, 0x62, 0xa6, 0x4c, 0x99,
-	0xcf, 0xc9, 0xb6, 0x2f, 0x38, 0xe0, 0x83, 0xe4, 0x66, 0x91, 0xa1, 0xaa, 0xac, 0x45, 0xf0, 0x1e,
-	0x0b, 0xab, 0x37, 0x10, 0x94, 0xfc, 0x78, 0x46, 0xc1, 0x33, 0xcc, 0x11, 0x76, 0xca, 0x34, 0x5e,
-	0x26, 0x50, 0xc5, 0xcb, 0x99, 0xea, 0x33, 0xb2, 0x9b, 0x88, 0xb6, 0x59, 0x26, 0xc6, 0x9f, 0xe9,
-	0x3d, 0x66, 0x39, 0xdb, 0x81, 0x4f, 0x73, 0x9f, 0x64, 0x3f, 0xf4, 0xc7, 0x33, 0x1a, 0xec, 0x0d,
-	0x39, 0x68, 0xe9, 0x67, 0x5a, 0xf5, 0x25, 0xd9, 0x5b, 0x10, 0x6b, 0x95, 0xa2, 0xbc, 0x80, 0xa2,
-	0xa0, 0x52, 0xbc, 0x20, 0x0f, 0x52, 0x71, 0x56, 0x09, 0x0a, 0x0b, 0x08, 0xb6, 0x55, 0x82, 0x1f,
-	0xc9, 0x83, 0x54, 0x94, 0x55, 0x82, 0x8c, 0x24, 0x38, 0x54, 0x09, 0xe6, 0x8e, 0x99, 0xc2, 0xf5,
-	0x96, 0x94, 0x93, 0xf1, 0x56, 0xa9, 0x8a, 0x92, 0xea, 0x89, 0x4a, 0x95, 0x38, 0x89, 0x0b, 0xc8,
-	0x94, 0xe0, 0x6f, 0x4a, 0x26, 0x21, 0x0a, 0x59, 0xed, 0x94, 0x98, 0xd2, 0xc2, 0x7b, 0x47, 0xfc,
-	0xb2, 0xe1, 0xc9, 0xae, 0xfd, 0x4d, 0x27, 0xe5, 0x37, 0xee, 0xd0, 0xe1, 0xf4, 0x46, 0x44, 0x98,
-	0xe6, 0x82, 0xc6, 0xfe, 0xb9, 0xb2, 0x04, 0xd5, 0x80, 0xda, 0xe3, 0x9a, 0x73, 0x3d, 0x5b, 0x9e,
-	0xb9, 0xe5, 0x38, 0xae, 0xf4, 0xc6, 0xc4, 0x16, 0x97, 0xe7, 0xec, 0xd7, 0x08, 0x4d, 0x7a, 0xb7,
-	0x7a, 0xbb, 0x57, 0xdf, 0x6f, 0x94, 0x9f, 0x6f, 0xe6, 0x43, 0xba, 0xd4, 0x49, 0x25, 0xbc, 0x0e,
-	0x21, 0xed, 0x3b, 0x41, 0x5d, 0xdf, 0x61, 0xae, 0xbf, 0xae, 0x13, 0xaa, 0x77, 0x0a, 0xba, 0xf9,
-	0xaf, 0xd0, 0x51, 0xa6, 0xb0, 0x5f, 0xa6, 0xb5, 0x7f, 0x18, 0x64, 0x2f, 0xb6, 0xf5, 0x1d, 0x73,
-	0x45, 0xdf, 0x71, 0x29, 0xb7, 0x7f, 0x2b, 0x7f, 0x15, 0xe8, 0x9d, 0x64, 0x36, 0x77, 0xe5, 0x0e,
-	0x8d, 0x34, 0x2b, 0xa7, 0x68, 0x0a, 0x3c, 0x6b, 0xdf, 0xa1, 0x35, 0xfb, 0x29, 0x5e, 0x3b, 0x10,
-	0x22, 0x7d, 0x4d, 0x83, 0x1a, 0xe8, 0xfc, 0x96, 0x04, 0x49, 0xff, 0xed, 0x6f, 0x63, 0x4b, 0x50,
-	0xb5, 0xd2, 0xa0, 0xa7, 0xc9, 0x23, 0x12, 0x18, 0x85, 0x6f, 0xfb, 0x22, 0x36, 0x2a, 0x13, 0x9a,
-	0xc6, 0x37, 0xd3, 0xe7, 0x22, 0xf0, 0x40, 0x8e, 0xc0, 0x71, 0xbe, 0xc6, 0xf1, 0x67, 0x78, 0x6b,
-	0xdf, 0xe2, 0x09, 0xc7, 0xf9, 0x4a, 0xc7, 0x9f, 0x27, 0x2f, 0xe0, 0x84, 0xcf, 0x39, 0xce, 0xd7,
-	0x38, 0xfe, 0x22, 0x7d, 0x13, 0x0d, 0x3c, 0x08, 0xba, 0x6b, 0x95, 0x90, 0x9f, 0xa8, 0xef, 0xf7,
-	0x47, 0xb4, 0x4b, 0xc5, 0x51, 0xa1, 0x90, 0x29, 0x7f, 0xfa, 0xf4, 0xe9, 0x53, 0xbe, 0xa5, 0x17,
-	0xb4, 0xda, 0xdf, 0x75, 0xb2, 0x17, 0x0b, 0x23, 0xd6, 0x35, 0xbb, 0xc9, 0xfe, 0x13, 0x79, 0x38,
-	0x91, 0xa8, 0x6b, 0x9f, 0xa2, 0x7b, 0x01, 0x4e, 0x7a, 0x17, 0x33, 0xe2, 0xff, 0x65, 0xc9, 0xae,
-	0x24, 0xa6, 0x23, 0x43, 0x9d, 0xbd, 0x49, 0x7a, 0xd2, 0x1e, 0x92, 0x03, 0x97, 0x89, 0xeb, 0x0d,
-	0x4d, 0xec, 0xaf, 0x31, 0xf1, 0xc8, 0x65, 0x62, 0xc1, 0xbc, 0x7d, 0x4e, 0x48, 0x2a, 0xae, 0x0a,
-	0xed, 0x57, 0x0b, 0x6e, 0x8b, 0x34, 0x0a, 0xea, 0x5f, 0xf3, 0x84, 0xbc, 0x75, 0xd9, 0x47, 0xb7,
-	0x77, 0xef, 0x51, 0xdf, 0x7c, 0x9a, 0xb8, 0xb2, 0x43, 0x3b, 0x93, 0x0f, 0x15, 0xc7, 0xe1, 0x43,
-	0x05, 0xb6, 0xe6, 0x3f, 0xc2, 0xe9, 0x8d, 0x8f, 0xde, 0x59, 0xf2, 0xe8, 0x41, 0x23, 0x4e, 0xe2,
-	0xf0, 0x20, 0x4a, 0x60, 0xfc, 0x44, 0x71, 0x96, 0x7c, 0xa2, 0x58, 0x82, 0x6c, 0x36, 0xe6, 0x90,
-	0xcd, 0x86, 0x79, 0x9e, 0x7a, 0xbf, 0x28, 0xd9, 0x5f, 0xa4, 0xa0, 0xef, 0x14, 0xab, 0xca, 0xeb,
-	0xc6, 0x79, 0xea, 0x75, 0x63, 0x19, 0x38, 0x34, 0xac, 0xbc, 0x7d, 0x9c, 0xa9, 0xaf, 0x06, 0xb9,
-	0x25, 0x3e, 0xe3, 0xf5, 0x35, 0xf6, 0x59, 0xde, 0x66, 0xcf, 0xe7, 0x9e, 0x14, 0xf2, 0x4b, 0xcc,
-	0xca, 0xbb, 0x6d, 0x6c, 0x36, 0xb8, 0xeb, 0x9e, 0xcf, 0xed, 0xe5, 0xc2, 0x12, 0xb0, 0xdc, 0xd9,
-	0x31, 0x38, 0xa8, 0x9b, 0x67, 0xea, 0x6b, 0x45, 0x71, 0x89, 0xcf, 0x78, 0x2f, 0x8e, 0x7d, 0x96,
-	0xd7, 0xe4, 0xa0, 0x62, 0x85, 0xaf, 0x5f, 0xc1, 0x36, 0x3d, 0x48, 0x7b, 0x1d, 0x28, 0xe0, 0x0b,
-	0x4b, 0x38, 0x30, 0x5f, 0x10, 0xf8, 0x9d, 0xbe, 0x8e, 0x5e, 0xbf, 0xf0, 0x1d, 0x65, 0xd1, 0xae,
-	0xea, 0x85, 0x1a, 0x58, 0xae, 0xa2, 0x51, 0xd8, 0x32, 0xe5, 0xe3, 0x5a, 0xe5, 0x20, 0xe8, 0x2a,
-	0x0b, 0x56, 0x3d, 0xbb, 0x11, 0xe1, 0x82, 0x67, 0x37, 0x22, 0xdc, 0xc9, 0x63, 0xc7, 0x17, 0x95,
-	0xea, 0x12, 0x9b, 0xbf, 0x77, 0x7c, 0x11, 0xef, 0x64, 0x18, 0x99, 0xa7, 0x32, 0x4e, 0xb2, 0x87,
-	0x3d, 0x46, 0xdc, 0xa3, 0x14, 0x2e, 0x0e, 0x11, 0x7e, 0x85, 0x20, 0x7c, 0x3d, 0x0c, 0xce, 0x5b,
-	0x1a, 0xd4, 0x06, 0x29, 0x82, 0xf0, 0xcb, 0xfc, 0x86, 0x80, 0xd1, 0xeb, 0xbe, 0x7b, 0x5f, 0xb1,
-	0x10, 0xb2, 0x9f, 0x82, 0xbc, 0x74, 0xef, 0x3b, 0x39, 0xe6, 0x89, 0x97, 0xee, 0xfd, 0xd1, 0x53,
-	0x92, 0xc1, 0x5b, 0x6b, 0x89, 0xe4, 0xdf, 0x5d, 0xbe, 0xbd, 0xbc, 0x7a, 0x7f, 0x59, 0xfe, 0xcc,
-	0x2c, 0x92, 0xec, 0xeb, 0x37, 0x9d, 0x6e, 0xaf, 0xac, 0x99, 0x84, 0xe4, 0xba, 0xed, 0xef, 0xae,
-	0x2e, 0x5f, 0x95, 0x75, 0x98, 0xee, 0xb5, 0x2f, 0x7b, 0x3f, 0x94, 0x49, 0x6b, 0x6d, 0x67, 0x7b,
-	0x98, 0xec, 0x6c, 0xad, 0x0d, 0x3a, 0xdb, 0xa3, 0x74, 0x67, 0x6b, 0xad, 0xed, 0x6c, 0x9f, 0xaf,
-	0xe8, 0x6c, 0xad, 0x0d, 0x3a, 0x5b, 0x65, 0x4d, 0x67, 0x6b, 0xfd, 0x4e, 0xbe, 0xd4, 0x00, 0x47,
-	0xf8, 0xfb, 0x99, 0x22, 0x39, 0xb4, 0x8c, 0x7a, 0x1e, 0xdf, 0x68, 0xda, 0x77, 0xe1, 0x6b, 0x63,
-	0x6b, 0x6d, 0x6f, 0xb3, 0x56, 0xf4, 0xb6, 0xd6, 0x06, 0xbd, 0xed, 0xc9, 0x9a, 0xde, 0x76, 0xf1,
-	0xfc, 0xe7, 0x6f, 0x47, 0x8e, 0xf8, 0x65, 0x36, 0x38, 0xbe, 0x61, 0x93, 0x93, 0x11, 0x1b, 0xf7,
-	0xdd, 0x51, 0xfc, 0x34, 0xfc, 0xc1, 0x3e, 0x59, 0xfd, 0xe8, 0xfd, 0xff, 0x00, 0x00, 0x00, 0xff,
-	0xff, 0x59, 0x20, 0x4f, 0x36, 0x15, 0x17, 0x00, 0x00,
-}
-
-func init() {
-	xxx_Test_protoFile_FileDesc.Enums = xxx_Test_protoFile_EnumDescs[0:1]
-	xxx_Test_protoFile_FileDesc.Messages = xxx_Test_protoFile_MessageDescs[0:16]
-	xxx_Test_protoFile_MessageDescs[2].Enums = xxx_Test_protoFile_EnumDescs[1:2]
-	xxx_Test_protoFile_MessageDescs[3].Messages = xxx_Test_protoFile_MessageDescs[16:18]
-	xxx_Test_protoFile_MessageDescs[8].Messages = xxx_Test_protoFile_MessageDescs[19:25]
-	xxx_Test_protoFile_MessageDescs[10].Messages = xxx_Test_protoFile_MessageDescs[25:26]
-	xxx_Test_protoFile_MessageDescs[16].Messages = xxx_Test_protoFile_MessageDescs[18:19]
-	xxx_Test_protoFile_MessageDescs[2].Fields[0].EnumType = xxx_Test_protoFile_EnumTypes[0]
-	xxx_Test_protoFile_MessageDescs[2].Fields[1].EnumType = xxx_Test_protoFile_EnumTypes[0]
-	xxx_Test_protoFile_MessageDescs[2].Fields[2].EnumType = xxx_Test_protoFile_EnumTypes[1]
-	xxx_Test_protoFile_MessageDescs[2].Fields[3].EnumType = xxx_Test_protoFile_EnumTypes[1]
-	xxx_Test_protoFile_MessageDescs[3].Fields[0].MessageType = xxx_Test_protoFile_MessageTypes[4].Type
-	xxx_Test_protoFile_MessageDescs[3].Fields[1].MessageType = xxx_Test_protoFile_MessageTypes[16].Type
-	xxx_Test_protoFile_MessageDescs[3].Fields[2].MessageType = xxx_Test_protoFile_MessageTypes[4].Type
-	xxx_Test_protoFile_MessageDescs[3].Fields[3].MessageType = xxx_Test_protoFile_MessageTypes[17].Type
-	xxx_Test_protoFile_MessageDescs[4].Fields[1].MessageType = xxx_Test_protoFile_MessageTypes[4].Type
-	xxx_Test_protoFile_MessageDescs[5].Fields[9].EnumType = xxx_Test_protoFile_EnumTypes[0]
-	xxx_Test_protoFile_MessageDescs[5].Fields[10].MessageType = xxx_Test_protoFile_MessageTypes[4].Type
-	xxx_Test_protoFile_MessageDescs[7].Fields[1].MessageType = xxx_Test_protoFile_MessageTypes[4].Type
-	xxx_Test_protoFile_MessageDescs[8].Fields[0].MessageType = xxx_Test_protoFile_MessageDescs[19].Reference()
-	xxx_Test_protoFile_MessageDescs[8].Fields[1].MessageType = xxx_Test_protoFile_MessageDescs[20].Reference()
-	xxx_Test_protoFile_MessageDescs[8].Fields[2].MessageType = xxx_Test_protoFile_MessageDescs[21].Reference()
-	xxx_Test_protoFile_MessageDescs[8].Fields[3].MessageType = xxx_Test_protoFile_MessageDescs[22].Reference()
-	xxx_Test_protoFile_MessageDescs[8].Fields[4].MessageType = xxx_Test_protoFile_MessageDescs[23].Reference()
-	xxx_Test_protoFile_MessageDescs[8].Fields[5].MessageType = xxx_Test_protoFile_MessageDescs[24].Reference()
-	xxx_Test_protoFile_MessageDescs[10].Fields[0].MessageType = xxx_Test_protoFile_MessageTypes[9].Type
-	xxx_Test_protoFile_MessageDescs[10].Fields[1].MessageType = xxx_Test_protoFile_MessageTypes[9].Type
-	xxx_Test_protoFile_MessageDescs[10].Fields[2].MessageType = xxx_Test_protoFile_MessageDescs[25].Reference()
-	xxx_Test_protoFile_MessageDescs[15].Fields[0].MessageType = protoimpl.X.MessageTypeOf((*wrappers.BoolValue)(nil))
-	xxx_Test_protoFile_MessageDescs[15].Fields[1].MessageType = protoimpl.X.MessageTypeOf((*wrappers.Int32Value)(nil))
-	xxx_Test_protoFile_MessageDescs[15].Fields[2].MessageType = protoimpl.X.MessageTypeOf((*wrappers.Int64Value)(nil))
-	xxx_Test_protoFile_MessageDescs[15].Fields[3].MessageType = protoimpl.X.MessageTypeOf((*wrappers.UInt32Value)(nil))
-	xxx_Test_protoFile_MessageDescs[15].Fields[4].MessageType = protoimpl.X.MessageTypeOf((*wrappers.UInt64Value)(nil))
-	xxx_Test_protoFile_MessageDescs[15].Fields[5].MessageType = protoimpl.X.MessageTypeOf((*wrappers.FloatValue)(nil))
-	xxx_Test_protoFile_MessageDescs[15].Fields[6].MessageType = protoimpl.X.MessageTypeOf((*wrappers.DoubleValue)(nil))
-	xxx_Test_protoFile_MessageDescs[15].Fields[7].MessageType = protoimpl.X.MessageTypeOf((*wrappers.StringValue)(nil))
-	xxx_Test_protoFile_MessageDescs[15].Fields[8].MessageType = protoimpl.X.MessageTypeOf((*wrappers.BytesValue)(nil))
-	xxx_Test_protoFile_MessageDescs[15].Fields[9].MessageType = protoimpl.X.MessageTypeOf((*duration.Duration)(nil))
-	xxx_Test_protoFile_MessageDescs[15].Fields[10].MessageType = protoimpl.X.MessageTypeOf((*timestamp.Timestamp)(nil))
-	xxx_Test_protoFile_MessageDescs[15].Fields[11].MessageType = protoimpl.X.MessageTypeOf((*_struct.Struct)(nil))
-	xxx_Test_protoFile_MessageDescs[15].Fields[12].MessageType = protoimpl.X.MessageTypeOf((*_struct.ListValue)(nil))
-	xxx_Test_protoFile_MessageDescs[15].Fields[13].MessageType = protoimpl.X.MessageTypeOf((*_struct.Value)(nil))
-	xxx_Test_protoFile_MessageDescs[15].Fields[14].MessageType = protoimpl.X.MessageTypeOf((*empty.Empty)(nil))
-	xxx_Test_protoFile_MessageDescs[15].Fields[15].MessageType = protoimpl.X.MessageTypeOf((*any.Any)(nil))
-	xxx_Test_protoFile_MessageDescs[16].Fields[2].MessageType = xxx_Test_protoFile_MessageTypes[4].Type
-	xxx_Test_protoFile_MessageDescs[16].Fields[3].MessageType = xxx_Test_protoFile_MessageTypes[18].Type
-	xxx_Test_protoFile_MessageDescs[18].Fields[0].EnumType = xxx_Test_protoFile_EnumTypes[0]
-	xxx_Test_protoFile_MessageDescs[22].Fields[1].EnumType = xxx_Test_protoFile_EnumTypes[0]
-	xxx_Test_protoFile_MessageDescs[23].Fields[1].MessageType = xxx_Test_protoFile_MessageTypes[4].Type
-	xxx_Test_protoFile_MessageDescs[24].Fields[1].MessageType = xxx_Test_protoFile_MessageTypes[7].Type
-	xxx_Test_protoFile_MessageDescs[25].Fields[1].MessageType = xxx_Test_protoFile_MessageTypes[9].Type
-	var err error
-	Test_protoFile, err = prototype.NewFile(&xxx_Test_protoFile_FileDesc)
-	if err != nil {
-		panic(err)
-	}
-}
+	// 5909 bytes of the wire-encoded FileDescriptorProto
+	0x0a, 0x29, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x2f, 0x74, 0x65, 0x78, 0x74, 0x70,
+	0x62, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x2f, 0x70, 0x62, 0x32,
+	0x2f, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x03, 0x70, 0x62, 0x32,
+	0x1a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
+	0x66, 0x2f, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x67, 0x6f, 0x6f,
+	0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70,
+	0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
+	0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69,
+	0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
+	0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74,
+	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d,
+	0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72,
+	0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xda, 0x03, 0x0a, 0x07, 0x53, 0x63, 0x61, 0x6c,
+	0x61, 0x72, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x6f, 0x70, 0x74, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x42, 0x6f, 0x6f, 0x6c, 0x12, 0x1b,
+	0x0a, 0x09, 0x6f, 0x70, 0x74, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x18, 0x02, 0x20, 0x01, 0x28,
+	0x05, 0x52, 0x08, 0x6f, 0x70, 0x74, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x1b, 0x0a, 0x09, 0x6f,
+	0x70, 0x74, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08,
+	0x6f, 0x70, 0x74, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x1d, 0x0a, 0x0a, 0x6f, 0x70, 0x74, 0x5f,
+	0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x6f, 0x70,
+	0x74, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x1d, 0x0a, 0x0a, 0x6f, 0x70, 0x74, 0x5f, 0x75,
+	0x69, 0x6e, 0x74, 0x36, 0x34, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x6f, 0x70, 0x74,
+	0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x1d, 0x0a, 0x0a, 0x6f, 0x70, 0x74, 0x5f, 0x73, 0x69,
+	0x6e, 0x74, 0x33, 0x32, 0x18, 0x06, 0x20, 0x01, 0x28, 0x11, 0x52, 0x09, 0x6f, 0x70, 0x74, 0x53,
+	0x69, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x1d, 0x0a, 0x0a, 0x6f, 0x70, 0x74, 0x5f, 0x73, 0x69, 0x6e,
+	0x74, 0x36, 0x34, 0x18, 0x07, 0x20, 0x01, 0x28, 0x12, 0x52, 0x09, 0x6f, 0x70, 0x74, 0x53, 0x69,
+	0x6e, 0x74, 0x36, 0x34, 0x12, 0x1f, 0x0a, 0x0b, 0x6f, 0x70, 0x74, 0x5f, 0x66, 0x69, 0x78, 0x65,
+	0x64, 0x33, 0x32, 0x18, 0x08, 0x20, 0x01, 0x28, 0x07, 0x52, 0x0a, 0x6f, 0x70, 0x74, 0x46, 0x69,
+	0x78, 0x65, 0x64, 0x33, 0x32, 0x12, 0x1f, 0x0a, 0x0b, 0x6f, 0x70, 0x74, 0x5f, 0x66, 0x69, 0x78,
+	0x65, 0x64, 0x36, 0x34, 0x18, 0x09, 0x20, 0x01, 0x28, 0x06, 0x52, 0x0a, 0x6f, 0x70, 0x74, 0x46,
+	0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x12, 0x21, 0x0a, 0x0c, 0x6f, 0x70, 0x74, 0x5f, 0x73, 0x66,
+	0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0f, 0x52, 0x0b, 0x6f, 0x70,
+	0x74, 0x53, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x12, 0x21, 0x0a, 0x0c, 0x6f, 0x70, 0x74,
+	0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x10, 0x52,
+	0x0b, 0x6f, 0x70, 0x74, 0x53, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x12, 0x1b, 0x0a, 0x09,
+	0x6f, 0x70, 0x74, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x18, 0x14, 0x20, 0x01, 0x28, 0x02, 0x52,
+	0x08, 0x6f, 0x70, 0x74, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x6f, 0x70, 0x74,
+	0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x18, 0x15, 0x20, 0x01, 0x28, 0x01, 0x52, 0x09, 0x6f,
+	0x70, 0x74, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x6f, 0x70, 0x74, 0x5f,
+	0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x6f, 0x70, 0x74,
+	0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x6f, 0x70, 0x74, 0x5f, 0x73, 0x74, 0x72,
+	0x69, 0x6e, 0x67, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6f, 0x70, 0x74, 0x53, 0x74,
+	0x72, 0x69, 0x6e, 0x67, 0x22, 0x94, 0x02, 0x0a, 0x07, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x73,
+	0x12, 0x19, 0x0a, 0x08, 0x72, 0x70, 0x74, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x03,
+	0x28, 0x08, 0x52, 0x07, 0x72, 0x70, 0x74, 0x42, 0x6f, 0x6f, 0x6c, 0x12, 0x1b, 0x0a, 0x09, 0x72,
+	0x70, 0x74, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x18, 0x02, 0x20, 0x03, 0x28, 0x05, 0x52, 0x08,
+	0x72, 0x70, 0x74, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x70, 0x74, 0x5f,
+	0x69, 0x6e, 0x74, 0x36, 0x34, 0x18, 0x03, 0x20, 0x03, 0x28, 0x03, 0x52, 0x08, 0x72, 0x70, 0x74,
+	0x49, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x70, 0x74, 0x5f, 0x75, 0x69, 0x6e,
+	0x74, 0x33, 0x32, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x09, 0x72, 0x70, 0x74, 0x55, 0x69,
+	0x6e, 0x74, 0x33, 0x32, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x70, 0x74, 0x5f, 0x75, 0x69, 0x6e, 0x74,
+	0x36, 0x34, 0x18, 0x05, 0x20, 0x03, 0x28, 0x04, 0x52, 0x09, 0x72, 0x70, 0x74, 0x55, 0x69, 0x6e,
+	0x74, 0x36, 0x34, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x70, 0x74, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74,
+	0x18, 0x06, 0x20, 0x03, 0x28, 0x02, 0x52, 0x08, 0x72, 0x70, 0x74, 0x46, 0x6c, 0x6f, 0x61, 0x74,
+	0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x70, 0x74, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x18, 0x07,
+	0x20, 0x03, 0x28, 0x01, 0x52, 0x09, 0x72, 0x70, 0x74, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x12,
+	0x1d, 0x0a, 0x0a, 0x72, 0x70, 0x74, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x0f, 0x20,
+	0x03, 0x28, 0x09, 0x52, 0x09, 0x72, 0x70, 0x74, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x1b,
+	0x0a, 0x09, 0x72, 0x70, 0x74, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x0e, 0x20, 0x03, 0x28,
+	0x0c, 0x52, 0x08, 0x72, 0x70, 0x74, 0x42, 0x79, 0x74, 0x65, 0x73, 0x22, 0xfb, 0x01, 0x0a, 0x05,
+	0x45, 0x6e, 0x75, 0x6d, 0x73, 0x12, 0x24, 0x0a, 0x08, 0x6f, 0x70, 0x74, 0x5f, 0x65, 0x6e, 0x75,
+	0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x09, 0x2e, 0x70, 0x62, 0x32, 0x2e, 0x45, 0x6e,
+	0x75, 0x6d, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x24, 0x0a, 0x08, 0x72,
+	0x70, 0x74, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x09, 0x2e,
+	0x70, 0x62, 0x32, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x07, 0x72, 0x70, 0x74, 0x45, 0x6e, 0x75,
+	0x6d, 0x12, 0x3d, 0x0a, 0x0f, 0x6f, 0x70, 0x74, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f,
+	0x65, 0x6e, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x70, 0x62, 0x32,
+	0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x73, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75,
+	0x6d, 0x52, 0x0d, 0x6f, 0x70, 0x74, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d,
+	0x12, 0x3d, 0x0a, 0x0f, 0x72, 0x70, 0x74, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x65,
+	0x6e, 0x75, 0x6d, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x70, 0x62, 0x32, 0x2e,
+	0x45, 0x6e, 0x75, 0x6d, 0x73, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d,
+	0x52, 0x0d, 0x72, 0x70, 0x74, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x22,
+	0x28, 0x0a, 0x0a, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x07, 0x0a,
+	0x03, 0x55, 0x4e, 0x4f, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x44, 0x4f, 0x53, 0x10, 0x02, 0x12,
+	0x08, 0x0a, 0x04, 0x44, 0x49, 0x45, 0x5a, 0x10, 0x0a, 0x22, 0xef, 0x03, 0x0a, 0x05, 0x4e, 0x65,
+	0x73, 0x74, 0x73, 0x12, 0x2a, 0x0a, 0x0a, 0x6f, 0x70, 0x74, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65,
+	0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x70, 0x62, 0x32, 0x2e, 0x4e, 0x65,
+	0x73, 0x74, 0x65, 0x64, 0x52, 0x09, 0x6f, 0x70, 0x74, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12,
+	0x2f, 0x0a, 0x08, 0x6f, 0x70, 0x74, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28,
+	0x0a, 0x32, 0x13, 0x2e, 0x70, 0x62, 0x32, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x73, 0x2e, 0x4f, 0x70,
+	0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x08, 0x6f, 0x70, 0x74, 0x67, 0x72, 0x6f, 0x75, 0x70,
+	0x12, 0x2a, 0x0a, 0x0a, 0x72, 0x70, 0x74, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x18, 0x03,
+	0x20, 0x03, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x70, 0x62, 0x32, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65,
+	0x64, 0x52, 0x09, 0x72, 0x70, 0x74, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x2f, 0x0a, 0x08,
+	0x72, 0x70, 0x74, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0a, 0x32, 0x13,
+	0x2e, 0x70, 0x62, 0x32, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x73, 0x2e, 0x52, 0x70, 0x74, 0x47, 0x72,
+	0x6f, 0x75, 0x70, 0x52, 0x08, 0x72, 0x70, 0x74, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x1a, 0xf4, 0x01,
+	0x0a, 0x08, 0x4f, 0x70, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x19, 0x0a, 0x08, 0x6f, 0x70,
+	0x74, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x6f, 0x70,
+	0x74, 0x42, 0x6f, 0x6f, 0x6c, 0x12, 0x1d, 0x0a, 0x0a, 0x6f, 0x70, 0x74, 0x5f, 0x73, 0x74, 0x72,
+	0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6f, 0x70, 0x74, 0x53, 0x74,
+	0x72, 0x69, 0x6e, 0x67, 0x12, 0x2a, 0x0a, 0x0a, 0x6f, 0x70, 0x74, 0x5f, 0x6e, 0x65, 0x73, 0x74,
+	0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x70, 0x62, 0x32, 0x2e, 0x4e,
+	0x65, 0x73, 0x74, 0x65, 0x64, 0x52, 0x09, 0x6f, 0x70, 0x74, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64,
+	0x12, 0x4a, 0x0a, 0x0e, 0x6f, 0x70, 0x74, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x67, 0x72, 0x6f,
+	0x75, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0a, 0x32, 0x22, 0x2e, 0x70, 0x62, 0x32, 0x2e, 0x4e,
+	0x65, 0x73, 0x74, 0x73, 0x2e, 0x4f, 0x70, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x4f, 0x70,
+	0x74, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x0e, 0x6f, 0x70,
+	0x74, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x1a, 0x36, 0x0a, 0x0e,
+	0x4f, 0x70, 0x74, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x24,
+	0x0a, 0x08, 0x6f, 0x70, 0x74, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e,
+	0x32, 0x09, 0x2e, 0x70, 0x62, 0x32, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x07, 0x6f, 0x70, 0x74,
+	0x45, 0x6e, 0x75, 0x6d, 0x1a, 0x25, 0x0a, 0x08, 0x52, 0x70, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70,
+	0x12, 0x19, 0x0a, 0x08, 0x72, 0x70, 0x74, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x03,
+	0x28, 0x08, 0x52, 0x07, 0x72, 0x70, 0x74, 0x42, 0x6f, 0x6f, 0x6c, 0x52, 0x0e, 0x72, 0x65, 0x73,
+	0x65, 0x72, 0x76, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x22, 0x53, 0x0a, 0x06, 0x4e,
+	0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x6f, 0x70, 0x74, 0x5f, 0x73, 0x74, 0x72,
+	0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6f, 0x70, 0x74, 0x53, 0x74,
+	0x72, 0x69, 0x6e, 0x67, 0x12, 0x2a, 0x0a, 0x0a, 0x6f, 0x70, 0x74, 0x5f, 0x6e, 0x65, 0x73, 0x74,
+	0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x70, 0x62, 0x32, 0x2e, 0x4e,
+	0x65, 0x73, 0x74, 0x65, 0x64, 0x52, 0x09, 0x6f, 0x70, 0x74, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64,
+	0x22, 0xf8, 0x02, 0x0a, 0x09, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x73, 0x12, 0x19,
+	0x0a, 0x08, 0x72, 0x65, 0x71, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x02, 0x28, 0x08,
+	0x52, 0x07, 0x72, 0x65, 0x71, 0x42, 0x6f, 0x6f, 0x6c, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x71,
+	0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x18, 0x02, 0x20, 0x02, 0x28, 0x07, 0x52, 0x0a,
+	0x72, 0x65, 0x71, 0x46, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65,
+	0x71, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x18, 0x03, 0x20, 0x02, 0x28, 0x06, 0x52,
+	0x0a, 0x72, 0x65, 0x71, 0x46, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x12, 0x21, 0x0a, 0x0c, 0x72,
+	0x65, 0x71, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x18, 0x04, 0x20, 0x02, 0x28,
+	0x0f, 0x52, 0x0b, 0x72, 0x65, 0x71, 0x53, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x12, 0x21,
+	0x0a, 0x0c, 0x72, 0x65, 0x71, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x18, 0x05,
+	0x20, 0x02, 0x28, 0x10, 0x52, 0x0b, 0x72, 0x65, 0x71, 0x53, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36,
+	0x34, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x71, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x18, 0x06,
+	0x20, 0x02, 0x28, 0x02, 0x52, 0x08, 0x72, 0x65, 0x71, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x12, 0x1d,
+	0x0a, 0x0a, 0x72, 0x65, 0x71, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x18, 0x07, 0x20, 0x02,
+	0x28, 0x01, 0x52, 0x09, 0x72, 0x65, 0x71, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x12, 0x1d, 0x0a,
+	0x0a, 0x72, 0x65, 0x71, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x08, 0x20, 0x02, 0x28,
+	0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x1b, 0x0a, 0x09,
+	0x72, 0x65, 0x71, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x09, 0x20, 0x02, 0x28, 0x0c, 0x52,
+	0x08, 0x72, 0x65, 0x71, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x24, 0x0a, 0x08, 0x72, 0x65, 0x71,
+	0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x18, 0x0a, 0x20, 0x02, 0x28, 0x0e, 0x32, 0x09, 0x2e, 0x70, 0x62,
+	0x32, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x07, 0x72, 0x65, 0x71, 0x45, 0x6e, 0x75, 0x6d, 0x12,
+	0x2a, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x18, 0x0b, 0x20,
+	0x02, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x70, 0x62, 0x32, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64,
+	0x52, 0x09, 0x72, 0x65, 0x71, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x22, 0x4f, 0x0a, 0x0f, 0x50,
+	0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x12, 0x1d,
+	0x0a, 0x0a, 0x72, 0x65, 0x71, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x02,
+	0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x1d, 0x0a,
+	0x0a, 0x6f, 0x70, 0x74, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x09, 0x6f, 0x70, 0x74, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x22, 0x46, 0x0a, 0x06,
+	0x4f, 0x6e, 0x65, 0x6f, 0x66, 0x73, 0x12, 0x12, 0x0a, 0x03, 0x73, 0x74, 0x72, 0x18, 0x01, 0x20,
+	0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x03, 0x73, 0x74, 0x72, 0x12, 0x1f, 0x0a, 0x03, 0x6d, 0x73,
+	0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x70, 0x62, 0x32, 0x2e, 0x4e, 0x65,
+	0x73, 0x74, 0x65, 0x64, 0x48, 0x00, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x42, 0x07, 0x0a, 0x05, 0x75,
+	0x6e, 0x69, 0x6f, 0x6e, 0x22, 0xbb, 0x06, 0x0a, 0x04, 0x4d, 0x61, 0x70, 0x73, 0x12, 0x3b, 0x0a,
+	0x0c, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x74, 0x6f, 0x5f, 0x73, 0x74, 0x72, 0x18, 0x01, 0x20,
+	0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x62, 0x32, 0x2e, 0x4d, 0x61, 0x70, 0x73, 0x2e, 0x49,
+	0x6e, 0x74, 0x33, 0x32, 0x54, 0x6f, 0x53, 0x74, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a,
+	0x69, 0x6e, 0x74, 0x33, 0x32, 0x54, 0x6f, 0x53, 0x74, 0x72, 0x12, 0x47, 0x0a, 0x10, 0x73, 0x66,
+	0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x74, 0x6f, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x18, 0x02,
+	0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x70, 0x62, 0x32, 0x2e, 0x4d, 0x61, 0x70, 0x73, 0x2e,
+	0x53, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x54, 0x6f, 0x42, 0x6f, 0x6f, 0x6c, 0x45, 0x6e,
+	0x74, 0x72, 0x79, 0x52, 0x0e, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x54, 0x6f, 0x42,
+	0x6f, 0x6f, 0x6c, 0x12, 0x41, 0x0a, 0x0e, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x74, 0x6f, 0x5f, 0x75,
+	0x69, 0x6e, 0x74, 0x33, 0x32, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x62,
+	0x32, 0x2e, 0x4d, 0x61, 0x70, 0x73, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x54, 0x6f, 0x55, 0x69, 0x6e,
+	0x74, 0x33, 0x32, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x62, 0x6f, 0x6f, 0x6c, 0x54, 0x6f,
+	0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x41, 0x0a, 0x0e, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34,
+	0x5f, 0x74, 0x6f, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b,
+	0x2e, 0x70, 0x62, 0x32, 0x2e, 0x4d, 0x61, 0x70, 0x73, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34,
+	0x54, 0x6f, 0x45, 0x6e, 0x75, 0x6d, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x75, 0x69, 0x6e,
+	0x74, 0x36, 0x34, 0x54, 0x6f, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x3e, 0x0a, 0x0d, 0x73, 0x74, 0x72,
+	0x5f, 0x74, 0x6f, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b,
+	0x32, 0x1a, 0x2e, 0x70, 0x62, 0x32, 0x2e, 0x4d, 0x61, 0x70, 0x73, 0x2e, 0x53, 0x74, 0x72, 0x54,
+	0x6f, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x73, 0x74,
+	0x72, 0x54, 0x6f, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x3e, 0x0a, 0x0d, 0x73, 0x74, 0x72,
+	0x5f, 0x74, 0x6f, 0x5f, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b,
+	0x32, 0x1a, 0x2e, 0x70, 0x62, 0x32, 0x2e, 0x4d, 0x61, 0x70, 0x73, 0x2e, 0x53, 0x74, 0x72, 0x54,
+	0x6f, 0x4f, 0x6e, 0x65, 0x6f, 0x66, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x73, 0x74,
+	0x72, 0x54, 0x6f, 0x4f, 0x6e, 0x65, 0x6f, 0x66, 0x73, 0x1a, 0x3d, 0x0a, 0x0f, 0x49, 0x6e, 0x74,
+	0x33, 0x32, 0x54, 0x6f, 0x53, 0x74, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03,
+	0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14,
+	0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76,
+	0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x41, 0x0a, 0x13, 0x53, 0x66, 0x69, 0x78,
+	0x65, 0x64, 0x36, 0x34, 0x54, 0x6f, 0x42, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12,
+	0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x10, 0x52, 0x03, 0x6b, 0x65,
+	0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08,
+	0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3f, 0x0a, 0x11, 0x42,
+	0x6f, 0x6f, 0x6c, 0x54, 0x6f, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x45, 0x6e, 0x74, 0x72, 0x79,
+	0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x6b,
+	0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
+	0x0d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x4a, 0x0a, 0x11,
+	0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x54, 0x6f, 0x45, 0x6e, 0x75, 0x6d, 0x45, 0x6e, 0x74, 0x72,
+	0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03,
+	0x6b, 0x65, 0x79, 0x12, 0x1f, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01,
+	0x28, 0x0e, 0x32, 0x09, 0x2e, 0x70, 0x62, 0x32, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x05, 0x76,
+	0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x4b, 0x0a, 0x10, 0x53, 0x74, 0x72, 0x54,
+	0x6f, 0x4e, 0x65, 0x73, 0x74, 0x65, 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, 0x21,
+	0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e,
+	0x70, 0x62, 0x32, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75,
+	0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x4b, 0x0a, 0x10, 0x53, 0x74, 0x72, 0x54, 0x6f, 0x4f, 0x6e,
+	0x65, 0x6f, 0x66, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79,
+	0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x21, 0x0a, 0x05, 0x76,
+	0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x70, 0x62, 0x32,
+	0x2e, 0x4f, 0x6e, 0x65, 0x6f, 0x66, 0x73, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02,
+	0x38, 0x01, 0x22, 0x33, 0x0a, 0x12, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x57, 0x69, 0x74, 0x68,
+	0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x5f,
+	0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x02, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65,
+	0x71, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x22, 0xa7, 0x02, 0x0a, 0x10, 0x49, 0x6e, 0x64, 0x69,
+	0x72, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x12, 0x36, 0x0a, 0x0a,
+	0x6f, 0x70, 0x74, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b,
+	0x32, 0x17, 0x2e, 0x70, 0x62, 0x32, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x57, 0x69, 0x74,
+	0x68, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x52, 0x09, 0x6f, 0x70, 0x74, 0x4e, 0x65,
+	0x73, 0x74, 0x65, 0x64, 0x12, 0x36, 0x0a, 0x0a, 0x72, 0x70, 0x74, 0x5f, 0x6e, 0x65, 0x73, 0x74,
+	0x65, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x62, 0x32, 0x2e, 0x4e,
+	0x65, 0x73, 0x74, 0x65, 0x64, 0x57, 0x69, 0x74, 0x68, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65,
+	0x64, 0x52, 0x09, 0x72, 0x70, 0x74, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x4a, 0x0a, 0x0d,
+	0x73, 0x74, 0x72, 0x5f, 0x74, 0x6f, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20,
+	0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x62, 0x32, 0x2e, 0x49, 0x6e, 0x64, 0x69, 0x72, 0x65,
+	0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x2e, 0x53, 0x74, 0x72, 0x54, 0x6f,
+	0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x73, 0x74, 0x72,
+	0x54, 0x6f, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x1a, 0x57, 0x0a, 0x10, 0x53, 0x74, 0x72, 0x54,
+	0x6f, 0x4e, 0x65, 0x73, 0x74, 0x65, 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, 0x2d,
+	0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e,
+	0x70, 0x62, 0x32, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x57, 0x69, 0x74, 0x68, 0x52, 0x65,
+	0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38,
+	0x01, 0x22, 0x69, 0x0a, 0x0a, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12,
+	0x1d, 0x0a, 0x0a, 0x6f, 0x70, 0x74, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x09, 0x6f, 0x70, 0x74, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x19,
+	0x0a, 0x08, 0x6f, 0x70, 0x74, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x18, 0x65, 0x20, 0x01, 0x28, 0x08,
+	0x52, 0x07, 0x6f, 0x70, 0x74, 0x42, 0x6f, 0x6f, 0x6c, 0x12, 0x1b, 0x0a, 0x09, 0x6f, 0x70, 0x74,
+	0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x6f, 0x70,
+	0x74, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x2a, 0x04, 0x08, 0x14, 0x10, 0x65, 0x22, 0xba, 0x03, 0x0a,
+	0x13, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x61,
+	0x69, 0x6e, 0x65, 0x72, 0x32, 0x31, 0x0a, 0x0c, 0x6f, 0x70, 0x74, 0x5f, 0x65, 0x78, 0x74, 0x5f,
+	0x62, 0x6f, 0x6f, 0x6c, 0x12, 0x0f, 0x2e, 0x70, 0x62, 0x32, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e,
+	0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x33, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x6f, 0x70, 0x74,
+	0x45, 0x78, 0x74, 0x42, 0x6f, 0x6f, 0x6c, 0x32, 0x35, 0x0a, 0x0e, 0x6f, 0x70, 0x74, 0x5f, 0x65,
+	0x78, 0x74, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x0f, 0x2e, 0x70, 0x62, 0x32, 0x2e,
+	0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x34, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x0c, 0x6f, 0x70, 0x74, 0x45, 0x78, 0x74, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x32, 0x3c,
+	0x0a, 0x0c, 0x6f, 0x70, 0x74, 0x5f, 0x65, 0x78, 0x74, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x12, 0x0f,
+	0x2e, 0x70, 0x62, 0x32, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18,
+	0x35, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x09, 0x2e, 0x70, 0x62, 0x32, 0x2e, 0x45, 0x6e, 0x75, 0x6d,
+	0x52, 0x0a, 0x6f, 0x70, 0x74, 0x45, 0x78, 0x74, 0x45, 0x6e, 0x75, 0x6d, 0x32, 0x42, 0x0a, 0x0e,
+	0x6f, 0x70, 0x74, 0x5f, 0x65, 0x78, 0x74, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x0f,
+	0x2e, 0x70, 0x62, 0x32, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18,
+	0x36, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x70, 0x62, 0x32, 0x2e, 0x4e, 0x65, 0x73, 0x74,
+	0x65, 0x64, 0x52, 0x0c, 0x6f, 0x70, 0x74, 0x45, 0x78, 0x74, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64,
+	0x32, 0x35, 0x0a, 0x0e, 0x72, 0x70, 0x74, 0x5f, 0x65, 0x78, 0x74, 0x5f, 0x73, 0x74, 0x72, 0x69,
+	0x6e, 0x67, 0x12, 0x0f, 0x2e, 0x70, 0x62, 0x32, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69,
+	0x6f, 0x6e, 0x73, 0x18, 0x3d, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x70, 0x74, 0x45, 0x78,
+	0x74, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x32, 0x3c, 0x0a, 0x0c, 0x72, 0x70, 0x74, 0x5f, 0x65,
+	0x78, 0x74, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x12, 0x0f, 0x2e, 0x70, 0x62, 0x32, 0x2e, 0x45, 0x78,
+	0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x3e, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x09,
+	0x2e, 0x70, 0x62, 0x32, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x0a, 0x72, 0x70, 0x74, 0x45, 0x78,
+	0x74, 0x45, 0x6e, 0x75, 0x6d, 0x32, 0x42, 0x0a, 0x0e, 0x72, 0x70, 0x74, 0x5f, 0x65, 0x78, 0x74,
+	0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x0f, 0x2e, 0x70, 0x62, 0x32, 0x2e, 0x45, 0x78,
+	0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x3f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0b,
+	0x2e, 0x70, 0x62, 0x32, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x52, 0x0c, 0x72, 0x70, 0x74,
+	0x45, 0x78, 0x74, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x22, 0x1a, 0x0a, 0x0a, 0x4d, 0x65, 0x73,
+	0x73, 0x61, 0x67, 0x65, 0x53, 0x65, 0x74, 0x2a, 0x08, 0x08, 0x04, 0x10, 0xff, 0xff, 0xff, 0xff,
+	0x07, 0x3a, 0x02, 0x08, 0x01, 0x22, 0xb6, 0x02, 0x0a, 0x13, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67,
+	0x65, 0x53, 0x65, 0x74, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a,
+	0x0a, 0x6f, 0x70, 0x74, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x09, 0x6f, 0x70, 0x74, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x32, 0x5d, 0x0a, 0x15,
+	0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x65, 0x78, 0x74, 0x65,
+	0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x0f, 0x2e, 0x70, 0x62, 0x32, 0x2e, 0x4d, 0x65, 0x73, 0x73,
+	0x61, 0x67, 0x65, 0x53, 0x65, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x70,
+	0x62, 0x32, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x65, 0x74, 0x45, 0x78, 0x74,
+	0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53,
+	0x65, 0x74, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x32, 0x64, 0x0a, 0x19, 0x6e,
+	0x6f, 0x74, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x65,
+	0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x0f, 0x2e, 0x70, 0x62, 0x32, 0x2e, 0x4d,
+	0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x65, 0x74, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x18, 0x2e, 0x70, 0x62, 0x32, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x65, 0x74,
+	0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x16, 0x6e, 0x6f, 0x74, 0x4d, 0x65,
+	0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x65, 0x74, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f,
+	0x6e, 0x32, 0x3b, 0x0a, 0x0a, 0x65, 0x78, 0x74, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12,
+	0x0f, 0x2e, 0x70, 0x62, 0x32, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x65, 0x74,
+	0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x70, 0x62, 0x32, 0x2e, 0x4e, 0x65, 0x73,
+	0x74, 0x65, 0x64, 0x52, 0x09, 0x65, 0x78, 0x74, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x22, 0xa6,
+	0x07, 0x0a, 0x0a, 0x4b, 0x6e, 0x6f, 0x77, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x35, 0x0a,
+	0x08, 0x6f, 0x70, 0x74, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
+	0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x07, 0x6f, 0x70, 0x74,
+	0x42, 0x6f, 0x6f, 0x6c, 0x12, 0x38, 0x0a, 0x09, 0x6f, 0x70, 0x74, 0x5f, 0x69, 0x6e, 0x74, 0x33,
+	0x32, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
+	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56,
+	0x61, 0x6c, 0x75, 0x65, 0x52, 0x08, 0x6f, 0x70, 0x74, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x38,
+	0x0a, 0x09, 0x6f, 0x70, 0x74, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x18, 0x03, 0x20, 0x01, 0x28,
+	0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x08,
+	0x6f, 0x70, 0x74, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x3b, 0x0a, 0x0a, 0x6f, 0x70, 0x74, 0x5f,
+	0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67,
+	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55,
+	0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x09, 0x6f, 0x70, 0x74, 0x55,
+	0x69, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x3b, 0x0a, 0x0a, 0x6f, 0x70, 0x74, 0x5f, 0x75, 0x69, 0x6e,
+	0x74, 0x36, 0x34, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
+	0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74,
+	0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x09, 0x6f, 0x70, 0x74, 0x55, 0x69, 0x6e, 0x74,
+	0x36, 0x34, 0x12, 0x38, 0x0a, 0x09, 0x6f, 0x70, 0x74, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x18,
+	0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c,
+	0x75, 0x65, 0x52, 0x08, 0x6f, 0x70, 0x74, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x12, 0x3b, 0x0a, 0x0a,
+	0x6f, 0x70, 0x74, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b,
+	0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
+	0x75, 0x66, 0x2e, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x09,
+	0x6f, 0x70, 0x74, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x12, 0x3b, 0x0a, 0x0a, 0x6f, 0x70, 0x74,
+	0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e,
+	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,
+	0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x09, 0x6f, 0x70, 0x74,
+	0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x38, 0x0a, 0x09, 0x6f, 0x70, 0x74, 0x5f, 0x62, 0x79,
+	0x74, 0x65, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
+	0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x79, 0x74, 0x65,
+	0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x08, 0x6f, 0x70, 0x74, 0x42, 0x79, 0x74, 0x65, 0x73,
+	0x12, 0x3c, 0x0a, 0x0c, 0x6f, 0x70, 0x74, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+	0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f,
+	0x6e, 0x52, 0x0b, 0x6f, 0x70, 0x74, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3f,
+	0x0a, 0x0d, 0x6f, 0x70, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18,
+	0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d,
+	0x70, 0x52, 0x0c, 0x6f, 0x70, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12,
+	0x36, 0x0a, 0x0a, 0x6f, 0x70, 0x74, 0x5f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x18, 0x19, 0x20,
+	0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x09, 0x6f, 0x70,
+	0x74, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x12, 0x35, 0x0a, 0x08, 0x6f, 0x70, 0x74, 0x5f, 0x6c,
+	0x69, 0x73, 0x74, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
+	0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4c, 0x69, 0x73, 0x74,
+	0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x33,
+	0x0a, 0x09, 0x6f, 0x70, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1b, 0x20, 0x01, 0x28,
+	0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x08, 0x6f, 0x70, 0x74, 0x56, 0x61,
+	0x6c, 0x75, 0x65, 0x12, 0x33, 0x0a, 0x09, 0x6f, 0x70, 0x74, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79,
+	0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x08,
+	0x6f, 0x70, 0x74, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x2d, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x5f,
+	0x61, 0x6e, 0x79, 0x18, 0x20, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
+	0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52,
+	0x06, 0x6f, 0x70, 0x74, 0x41, 0x6e, 0x79, 0x2a, 0x35, 0x0a, 0x04, 0x45, 0x6e, 0x75, 0x6d, 0x12,
+	0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05,
+	0x46, 0x49, 0x52, 0x53, 0x54, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x45, 0x43, 0x4f, 0x4e,
+	0x44, 0x10, 0x02, 0x12, 0x09, 0x0a, 0x05, 0x54, 0x45, 0x4e, 0x54, 0x48, 0x10, 0x0a, 0x3a, 0x31,
+	0x0a, 0x0c, 0x6f, 0x70, 0x74, 0x5f, 0x65, 0x78, 0x74, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x12, 0x0f,
+	0x2e, 0x70, 0x62, 0x32, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18,
+	0x15, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x6f, 0x70, 0x74, 0x45, 0x78, 0x74, 0x42, 0x6f, 0x6f,
+	0x6c, 0x3a, 0x35, 0x0a, 0x0e, 0x6f, 0x70, 0x74, 0x5f, 0x65, 0x78, 0x74, 0x5f, 0x73, 0x74, 0x72,
+	0x69, 0x6e, 0x67, 0x12, 0x0f, 0x2e, 0x70, 0x62, 0x32, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73,
+	0x69, 0x6f, 0x6e, 0x73, 0x18, 0x16, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6f, 0x70, 0x74, 0x45,
+	0x78, 0x74, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x3c, 0x0a, 0x0c, 0x6f, 0x70, 0x74, 0x5f,
+	0x65, 0x78, 0x74, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x12, 0x0f, 0x2e, 0x70, 0x62, 0x32, 0x2e, 0x45,
+	0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0e, 0x32,
+	0x09, 0x2e, 0x70, 0x62, 0x32, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x0a, 0x6f, 0x70, 0x74, 0x45,
+	0x78, 0x74, 0x45, 0x6e, 0x75, 0x6d, 0x3a, 0x42, 0x0a, 0x0e, 0x6f, 0x70, 0x74, 0x5f, 0x65, 0x78,
+	0x74, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x0f, 0x2e, 0x70, 0x62, 0x32, 0x2e, 0x45,
+	0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x18, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x0b, 0x2e, 0x70, 0x62, 0x32, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x52, 0x0c, 0x6f, 0x70,
+	0x74, 0x45, 0x78, 0x74, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x3a, 0x37, 0x0a, 0x0f, 0x72, 0x70,
+	0x74, 0x5f, 0x65, 0x78, 0x74, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x12, 0x0f, 0x2e,
+	0x70, 0x62, 0x32, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x1f,
+	0x20, 0x03, 0x28, 0x07, 0x52, 0x0d, 0x72, 0x70, 0x74, 0x45, 0x78, 0x74, 0x46, 0x69, 0x78, 0x65,
+	0x64, 0x33, 0x32, 0x3a, 0x3c, 0x0a, 0x0c, 0x72, 0x70, 0x74, 0x5f, 0x65, 0x78, 0x74, 0x5f, 0x65,
+	0x6e, 0x75, 0x6d, 0x12, 0x0f, 0x2e, 0x70, 0x62, 0x32, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73,
+	0x69, 0x6f, 0x6e, 0x73, 0x18, 0x20, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x09, 0x2e, 0x70, 0x62, 0x32,
+	0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x0a, 0x72, 0x70, 0x74, 0x45, 0x78, 0x74, 0x45, 0x6e, 0x75,
+	0x6d, 0x3a, 0x42, 0x0a, 0x0e, 0x72, 0x70, 0x74, 0x5f, 0x65, 0x78, 0x74, 0x5f, 0x6e, 0x65, 0x73,
+	0x74, 0x65, 0x64, 0x12, 0x0f, 0x2e, 0x70, 0x62, 0x32, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73,
+	0x69, 0x6f, 0x6e, 0x73, 0x18, 0x21, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x70, 0x62, 0x32,
+	0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x52, 0x0c, 0x72, 0x70, 0x74, 0x45, 0x78, 0x74, 0x4e,
+	0x65, 0x73, 0x74, 0x65, 0x64, 0x42, 0x3e, 0x5a, 0x3c, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e,
+	0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x62, 0x75, 0x66, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x2f,
+	0x74, 0x65, 0x78, 0x74, 0x70, 0x62, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x73, 0x2f, 0x70, 0x62, 0x32,
+}
+
+var fileDescriptor_c8d7acc1bcec9a72_gzipped = func() []byte {
+	bb := new(bytes.Buffer)
+	zw, _ := gzip.NewWriterLevel(bb, gzip.NoCompression)
+	zw.Write(fileDescriptor_c8d7acc1bcec9a72)
+	zw.Close()
+	return bb.Bytes()
+}()
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
 var Test_protoFile protoreflect.FileDescriptor
 
-var xxx_Test_protoFile_FileDesc = prototype.File{
-	Syntax:  protoreflect.Proto2,
-	Path:    "encoding/textpb/testprotos/pb2/test.proto",
-	Package: "pb2",
-	Imports: []protoreflect.FileImport{
-		{FileDescriptor: prototype.PlaceholderFile("google/protobuf/any.proto", "google.protobuf")},
-		{FileDescriptor: prototype.PlaceholderFile("google/protobuf/empty.proto", "google.protobuf")},
-		{FileDescriptor: prototype.PlaceholderFile("google/protobuf/duration.proto", "google.protobuf")},
-		{FileDescriptor: prototype.PlaceholderFile("google/protobuf/struct.proto", "google.protobuf")},
-		{FileDescriptor: prototype.PlaceholderFile("google/protobuf/timestamp.proto", "google.protobuf")},
-		{FileDescriptor: prototype.PlaceholderFile("google/protobuf/wrappers.proto", "google.protobuf")},
-	},
-}
-var xxx_Test_protoFile_EnumTypes = [2]protoreflect.EnumType{
-	prototype.GoEnum(
-		xxx_Test_protoFile_EnumDescs[0].Reference(),
-		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
-			return Enum(n)
-		},
-	),
-	prototype.GoEnum(
-		xxx_Test_protoFile_EnumDescs[1].Reference(),
-		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
-			return Enums_NestedEnum(n)
-		},
-	),
-}
-var xxx_Test_protoFile_EnumDescs = [2]prototype.Enum{
-	{
-		Name: "Enum",
-		Values: []prototype.EnumValue{
-			{Name: "UNKNOWN", Number: 0},
-			{Name: "FIRST", Number: 1},
-			{Name: "SECOND", Number: 2},
-			{Name: "TENTH", Number: 10},
-		},
-	},
-	{
-		Name: "NestedEnum",
-		Values: []prototype.EnumValue{
-			{Name: "UNO", Number: 1},
-			{Name: "DOS", Number: 2},
-			{Name: "DIEZ", Number: 10},
-		},
-	},
-}
-var xxx_Test_protoFile_MessageTypes = [26]protoimpl.MessageType{
-	{Type: prototype.GoMessage(
-		xxx_Test_protoFile_MessageDescs[0].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_Scalars{new(Scalars)}
-		},
-	)},
-	{Type: prototype.GoMessage(
-		xxx_Test_protoFile_MessageDescs[1].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_Repeats{new(Repeats)}
-		},
-	)},
-	{Type: prototype.GoMessage(
-		xxx_Test_protoFile_MessageDescs[2].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_Enums{new(Enums)}
-		},
-	)},
-	{Type: prototype.GoMessage(
-		xxx_Test_protoFile_MessageDescs[3].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_Nests{new(Nests)}
-		},
-	)},
-	{Type: prototype.GoMessage(
-		xxx_Test_protoFile_MessageDescs[4].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_Nested{new(Nested)}
-		},
-	)},
-	{Type: prototype.GoMessage(
-		xxx_Test_protoFile_MessageDescs[5].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_Requireds{new(Requireds)}
-		},
-	)},
-	{Type: prototype.GoMessage(
-		xxx_Test_protoFile_MessageDescs[6].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_PartialRequired{new(PartialRequired)}
-		},
-	)},
-	{Type: prototype.GoMessage(
-		xxx_Test_protoFile_MessageDescs[7].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_Oneofs{new(Oneofs)}
-		},
-	)},
-	{Type: prototype.GoMessage(
-		xxx_Test_protoFile_MessageDescs[8].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_Maps{new(Maps)}
-		},
-	)},
-	{Type: prototype.GoMessage(
-		xxx_Test_protoFile_MessageDescs[9].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_NestedWithRequired{new(NestedWithRequired)}
-		},
-	)},
-	{Type: prototype.GoMessage(
-		xxx_Test_protoFile_MessageDescs[10].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_IndirectRequired{new(IndirectRequired)}
-		},
-	)},
-	{Type: prototype.GoMessage(
-		xxx_Test_protoFile_MessageDescs[11].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_Extensions{new(Extensions)}
-		},
-	)},
-	{Type: prototype.GoMessage(
-		xxx_Test_protoFile_MessageDescs[12].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_ExtensionsContainer{new(ExtensionsContainer)}
-		},
-	)},
-	{Type: prototype.GoMessage(
-		xxx_Test_protoFile_MessageDescs[13].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_MessageSet{new(MessageSet)}
-		},
-	)},
-	{Type: prototype.GoMessage(
-		xxx_Test_protoFile_MessageDescs[14].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_MessageSetExtension{new(MessageSetExtension)}
-		},
-	)},
-	{Type: prototype.GoMessage(
-		xxx_Test_protoFile_MessageDescs[15].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_KnownTypes{new(KnownTypes)}
-		},
-	)},
-	{Type: prototype.GoMessage(
-		xxx_Test_protoFile_MessageDescs[16].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_Nests_OptGroup{new(Nests_OptGroup)}
-		},
-	)},
-	{Type: prototype.GoMessage(
-		xxx_Test_protoFile_MessageDescs[17].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_Nests_RptGroup{new(Nests_RptGroup)}
-		},
-	)},
-	{Type: prototype.GoMessage(
-		xxx_Test_protoFile_MessageDescs[18].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_Nests_OptGroup_OptNestedGroup{new(Nests_OptGroup_OptNestedGroup)}
-		},
-	)},
-	{ /* no message type for Maps_Int32ToStrEntry */ },
-	{ /* no message type for Maps_Sfixed64ToBoolEntry */ },
-	{ /* no message type for Maps_BoolToUint32Entry */ },
-	{ /* no message type for Maps_Uint64ToEnumEntry */ },
-	{ /* no message type for Maps_StrToNestedEntry */ },
-	{ /* no message type for Maps_StrToOneofsEntry */ },
-	{ /* no message type for IndirectRequired_StrToNestedEntry */ },
-}
-var xxx_Test_protoFile_MessageDescs = [26]prototype.Message{
-	{
-		Name: "Scalars",
-		Fields: []prototype.Field{
-			{
-				Name:        "opt_bool",
-				Number:      1,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.BoolKind,
-				JSONName:    "optBool",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "opt_int32",
-				Number:      2,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Int32Kind,
-				JSONName:    "optInt32",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "opt_int64",
-				Number:      3,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Int64Kind,
-				JSONName:    "optInt64",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "opt_uint32",
-				Number:      4,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Uint32Kind,
-				JSONName:    "optUint32",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "opt_uint64",
-				Number:      5,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Uint64Kind,
-				JSONName:    "optUint64",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "opt_sint32",
-				Number:      6,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Sint32Kind,
-				JSONName:    "optSint32",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "opt_sint64",
-				Number:      7,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Sint64Kind,
-				JSONName:    "optSint64",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "opt_fixed32",
-				Number:      8,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Fixed32Kind,
-				JSONName:    "optFixed32",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "opt_fixed64",
-				Number:      9,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Fixed64Kind,
-				JSONName:    "optFixed64",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "opt_sfixed32",
-				Number:      10,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Sfixed32Kind,
-				JSONName:    "optSfixed32",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "opt_sfixed64",
-				Number:      11,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Sfixed64Kind,
-				JSONName:    "optSfixed64",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "opt_float",
-				Number:      20,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.FloatKind,
-				JSONName:    "optFloat",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "opt_double",
-				Number:      21,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.DoubleKind,
-				JSONName:    "optDouble",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "opt_bytes",
-				Number:      14,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.BytesKind,
-				JSONName:    "optBytes",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "opt_string",
-				Number:      13,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.StringKind,
-				JSONName:    "optString",
-				IsPacked:    prototype.False,
-			},
-		},
-	},
-	{
-		Name: "Repeats",
-		Fields: []prototype.Field{
-			{
-				Name:        "rpt_bool",
-				Number:      1,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.BoolKind,
-				JSONName:    "rptBool",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "rpt_int32",
-				Number:      2,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.Int32Kind,
-				JSONName:    "rptInt32",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "rpt_int64",
-				Number:      3,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.Int64Kind,
-				JSONName:    "rptInt64",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "rpt_uint32",
-				Number:      4,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.Uint32Kind,
-				JSONName:    "rptUint32",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "rpt_uint64",
-				Number:      5,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.Uint64Kind,
-				JSONName:    "rptUint64",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "rpt_float",
-				Number:      6,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.FloatKind,
-				JSONName:    "rptFloat",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "rpt_double",
-				Number:      7,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.DoubleKind,
-				JSONName:    "rptDouble",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "rpt_string",
-				Number:      15,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.StringKind,
-				JSONName:    "rptString",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "rpt_bytes",
-				Number:      14,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.BytesKind,
-				JSONName:    "rptBytes",
-				IsPacked:    prototype.False,
-			},
-		},
-	},
-	{
-		Name: "Enums",
-		Fields: []prototype.Field{
-			{
-				Name:        "opt_enum",
-				Number:      1,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.EnumKind,
-				JSONName:    "optEnum",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "rpt_enum",
-				Number:      2,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.EnumKind,
-				JSONName:    "rptEnum",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "opt_nested_enum",
-				Number:      3,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.EnumKind,
-				JSONName:    "optNestedEnum",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "rpt_nested_enum",
-				Number:      4,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.EnumKind,
-				JSONName:    "rptNestedEnum",
-				IsPacked:    prototype.False,
-			},
-		},
-	},
-	{
-		Name: "Nests",
-		Fields: []prototype.Field{
-			{
-				Name:        "opt_nested",
-				Number:      1,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.MessageKind,
-				JSONName:    "optNested",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "optgroup",
-				Number:      2,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.GroupKind,
-				JSONName:    "optgroup",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "rpt_nested",
-				Number:      3,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.MessageKind,
-				JSONName:    "rptNested",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "rptgroup",
-				Number:      4,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.GroupKind,
-				JSONName:    "rptgroup",
-				IsPacked:    prototype.False,
-			},
-		},
-		ReservedNames: []protoreflect.Name{"reserved_field"},
-	},
-	{
-		Name: "Nested",
-		Fields: []prototype.Field{
-			{
-				Name:        "opt_string",
-				Number:      1,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.StringKind,
-				JSONName:    "optString",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "opt_nested",
-				Number:      2,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.MessageKind,
-				JSONName:    "optNested",
-				IsPacked:    prototype.False,
-			},
-		},
-	},
-	{
-		Name: "Requireds",
-		Fields: []prototype.Field{
-			{
-				Name:        "req_bool",
-				Number:      1,
-				Cardinality: protoreflect.Required,
-				Kind:        protoreflect.BoolKind,
-				JSONName:    "reqBool",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "req_fixed32",
-				Number:      2,
-				Cardinality: protoreflect.Required,
-				Kind:        protoreflect.Fixed32Kind,
-				JSONName:    "reqFixed32",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "req_fixed64",
-				Number:      3,
-				Cardinality: protoreflect.Required,
-				Kind:        protoreflect.Fixed64Kind,
-				JSONName:    "reqFixed64",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "req_sfixed32",
-				Number:      4,
-				Cardinality: protoreflect.Required,
-				Kind:        protoreflect.Sfixed32Kind,
-				JSONName:    "reqSfixed32",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "req_sfixed64",
-				Number:      5,
-				Cardinality: protoreflect.Required,
-				Kind:        protoreflect.Sfixed64Kind,
-				JSONName:    "reqSfixed64",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "req_float",
-				Number:      6,
-				Cardinality: protoreflect.Required,
-				Kind:        protoreflect.FloatKind,
-				JSONName:    "reqFloat",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "req_double",
-				Number:      7,
-				Cardinality: protoreflect.Required,
-				Kind:        protoreflect.DoubleKind,
-				JSONName:    "reqDouble",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "req_string",
-				Number:      8,
-				Cardinality: protoreflect.Required,
-				Kind:        protoreflect.StringKind,
-				JSONName:    "reqString",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "req_bytes",
-				Number:      9,
-				Cardinality: protoreflect.Required,
-				Kind:        protoreflect.BytesKind,
-				JSONName:    "reqBytes",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "req_enum",
-				Number:      10,
-				Cardinality: protoreflect.Required,
-				Kind:        protoreflect.EnumKind,
-				JSONName:    "reqEnum",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "req_nested",
-				Number:      11,
-				Cardinality: protoreflect.Required,
-				Kind:        protoreflect.MessageKind,
-				JSONName:    "reqNested",
-				IsPacked:    prototype.False,
-			},
-		},
-	},
-	{
-		Name: "PartialRequired",
-		Fields: []prototype.Field{
-			{
-				Name:        "req_string",
-				Number:      1,
-				Cardinality: protoreflect.Required,
-				Kind:        protoreflect.StringKind,
-				JSONName:    "reqString",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "opt_string",
-				Number:      2,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.StringKind,
-				JSONName:    "optString",
-				IsPacked:    prototype.False,
-			},
-		},
-	},
-	{
-		Name: "Oneofs",
-		Fields: []prototype.Field{
-			{
-				Name:        "str",
-				Number:      1,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.StringKind,
-				JSONName:    "str",
-				OneofName:   "union",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "msg",
-				Number:      2,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.MessageKind,
-				JSONName:    "msg",
-				OneofName:   "union",
-				IsPacked:    prototype.False,
-			},
-		},
-		Oneofs: []prototype.Oneof{
-			{Name: "union"},
-		},
-	},
-	{
-		Name: "Maps",
-		Fields: []prototype.Field{
-			{
-				Name:        "int32_to_str",
-				Number:      1,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.MessageKind,
-				JSONName:    "int32ToStr",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "sfixed64_to_bool",
-				Number:      2,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.MessageKind,
-				JSONName:    "sfixed64ToBool",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "bool_to_uint32",
-				Number:      3,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.MessageKind,
-				JSONName:    "boolToUint32",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "uint64_to_enum",
-				Number:      4,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.MessageKind,
-				JSONName:    "uint64ToEnum",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "str_to_nested",
-				Number:      5,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.MessageKind,
-				JSONName:    "strToNested",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "str_to_oneofs",
-				Number:      6,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.MessageKind,
-				JSONName:    "strToOneofs",
-				IsPacked:    prototype.False,
-			},
-		},
-	},
-	{
-		Name: "NestedWithRequired",
-		Fields: []prototype.Field{
-			{
-				Name:        "req_string",
-				Number:      1,
-				Cardinality: protoreflect.Required,
-				Kind:        protoreflect.StringKind,
-				JSONName:    "reqString",
-				IsPacked:    prototype.False,
-			},
-		},
-	},
-	{
-		Name: "IndirectRequired",
-		Fields: []prototype.Field{
-			{
-				Name:        "opt_nested",
-				Number:      1,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.MessageKind,
-				JSONName:    "optNested",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "rpt_nested",
-				Number:      2,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.MessageKind,
-				JSONName:    "rptNested",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "str_to_nested",
-				Number:      3,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.MessageKind,
-				JSONName:    "strToNested",
-				IsPacked:    prototype.False,
-			},
-		},
-	},
-	{
-		Name: "Extensions",
-		Fields: []prototype.Field{
-			{
-				Name:        "opt_string",
-				Number:      1,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.StringKind,
-				JSONName:    "optString",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "opt_bool",
-				Number:      101,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.BoolKind,
-				JSONName:    "optBool",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "opt_int32",
-				Number:      2,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Int32Kind,
-				JSONName:    "optInt32",
-				IsPacked:    prototype.False,
-			},
-		},
-		ExtensionRanges: [][2]protoreflect.FieldNumber{{20, 101}},
-	},
-	{
-		Name: "ExtensionsContainer",
-	},
-	{
-		Name:            "MessageSet",
-		ExtensionRanges: [][2]protoreflect.FieldNumber{{4, 2147483647}},
-	},
-	{
-		Name: "MessageSetExtension",
-		Fields: []prototype.Field{
-			{
-				Name:        "opt_string",
-				Number:      1,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.StringKind,
-				JSONName:    "optString",
-				IsPacked:    prototype.False,
-			},
-		},
-	},
-	{
-		Name: "KnownTypes",
-		Fields: []prototype.Field{
-			{
-				Name:        "opt_bool",
-				Number:      1,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.MessageKind,
-				JSONName:    "optBool",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "opt_int32",
-				Number:      2,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.MessageKind,
-				JSONName:    "optInt32",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "opt_int64",
-				Number:      3,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.MessageKind,
-				JSONName:    "optInt64",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "opt_uint32",
-				Number:      4,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.MessageKind,
-				JSONName:    "optUint32",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "opt_uint64",
-				Number:      5,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.MessageKind,
-				JSONName:    "optUint64",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "opt_float",
-				Number:      6,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.MessageKind,
-				JSONName:    "optFloat",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "opt_double",
-				Number:      7,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.MessageKind,
-				JSONName:    "optDouble",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "opt_string",
-				Number:      8,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.MessageKind,
-				JSONName:    "optString",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "opt_bytes",
-				Number:      9,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.MessageKind,
-				JSONName:    "optBytes",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "opt_duration",
-				Number:      20,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.MessageKind,
-				JSONName:    "optDuration",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "opt_timestamp",
-				Number:      21,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.MessageKind,
-				JSONName:    "optTimestamp",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "opt_struct",
-				Number:      25,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.MessageKind,
-				JSONName:    "optStruct",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "opt_list",
-				Number:      26,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.MessageKind,
-				JSONName:    "optList",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "opt_value",
-				Number:      27,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.MessageKind,
-				JSONName:    "optValue",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "opt_empty",
-				Number:      30,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.MessageKind,
-				JSONName:    "optEmpty",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "opt_any",
-				Number:      32,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.MessageKind,
-				JSONName:    "optAny",
-				IsPacked:    prototype.False,
-			},
-		},
-	},
-	{
-		Name: "OptGroup",
-		Fields: []prototype.Field{
-			{
-				Name:        "opt_bool",
-				Number:      1,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.BoolKind,
-				JSONName:    "optBool",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "opt_string",
-				Number:      2,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.StringKind,
-				JSONName:    "optString",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "opt_nested",
-				Number:      3,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.MessageKind,
-				JSONName:    "optNested",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "optnestedgroup",
-				Number:      4,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.GroupKind,
-				JSONName:    "optnestedgroup",
-				IsPacked:    prototype.False,
-			},
-		},
-	},
-	{
-		Name: "RptGroup",
-		Fields: []prototype.Field{
-			{
-				Name:        "rpt_bool",
-				Number:      1,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.BoolKind,
-				JSONName:    "rptBool",
-				IsPacked:    prototype.False,
-			},
-		},
-	},
-	{
-		Name: "OptNestedGroup",
-		Fields: []prototype.Field{
-			{
-				Name:        "opt_enum",
-				Number:      1,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.EnumKind,
-				JSONName:    "optEnum",
-				IsPacked:    prototype.False,
-			},
-		},
-	},
-	{
-		Name: "Int32ToStrEntry",
-		Fields: []prototype.Field{
-			{
-				Name:        "key",
-				Number:      1,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Int32Kind,
-				JSONName:    "key",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "value",
-				Number:      2,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.StringKind,
-				JSONName:    "value",
-				IsPacked:    prototype.False,
-			},
-		},
-		IsMapEntry: true,
-	},
-	{
-		Name: "Sfixed64ToBoolEntry",
-		Fields: []prototype.Field{
-			{
-				Name:        "key",
-				Number:      1,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Sfixed64Kind,
-				JSONName:    "key",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "value",
-				Number:      2,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.BoolKind,
-				JSONName:    "value",
-				IsPacked:    prototype.False,
-			},
-		},
-		IsMapEntry: true,
-	},
-	{
-		Name: "BoolToUint32Entry",
-		Fields: []prototype.Field{
-			{
-				Name:        "key",
-				Number:      1,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.BoolKind,
-				JSONName:    "key",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "value",
-				Number:      2,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Uint32Kind,
-				JSONName:    "value",
-				IsPacked:    prototype.False,
-			},
-		},
-		IsMapEntry: true,
-	},
-	{
-		Name: "Uint64ToEnumEntry",
-		Fields: []prototype.Field{
-			{
-				Name:        "key",
-				Number:      1,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Uint64Kind,
-				JSONName:    "key",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "value",
-				Number:      2,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.EnumKind,
-				JSONName:    "value",
-				IsPacked:    prototype.False,
-			},
-		},
-		IsMapEntry: true,
-	},
-	{
-		Name: "StrToNestedEntry",
-		Fields: []prototype.Field{
-			{
-				Name:        "key",
-				Number:      1,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.StringKind,
-				JSONName:    "key",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "value",
-				Number:      2,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.MessageKind,
-				JSONName:    "value",
-				IsPacked:    prototype.False,
-			},
-		},
-		IsMapEntry: true,
-	},
-	{
-		Name: "StrToOneofsEntry",
-		Fields: []prototype.Field{
-			{
-				Name:        "key",
-				Number:      1,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.StringKind,
-				JSONName:    "key",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "value",
-				Number:      2,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.MessageKind,
-				JSONName:    "value",
-				IsPacked:    prototype.False,
-			},
-		},
-		IsMapEntry: true,
-	},
-	{
-		Name: "StrToNestedEntry",
-		Fields: []prototype.Field{
-			{
-				Name:        "key",
-				Number:      1,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.StringKind,
-				JSONName:    "key",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "value",
-				Number:      2,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.MessageKind,
-				JSONName:    "value",
-				IsPacked:    prototype.False,
-			},
-		},
-		IsMapEntry: true,
-	},
+var xxx_Test_protoFile_enumTypes [2]protoreflect.EnumType
+var xxx_Test_protoFile_messageTypes [26]protoimpl.MessageType
+var xxx_Test_protoFile_goTypes = []interface{}{
+	(Enum)(0),                             // 0: pb2.Enum
+	(Enums_NestedEnum)(0),                 // 1: pb2.Enums.NestedEnum
+	(*Scalars)(nil),                       // 2: pb2.Scalars
+	(*Repeats)(nil),                       // 3: pb2.Repeats
+	(*Enums)(nil),                         // 4: pb2.Enums
+	(*Nests)(nil),                         // 5: pb2.Nests
+	(*Nested)(nil),                        // 6: pb2.Nested
+	(*Requireds)(nil),                     // 7: pb2.Requireds
+	(*PartialRequired)(nil),               // 8: pb2.PartialRequired
+	(*Oneofs)(nil),                        // 9: pb2.Oneofs
+	(*Maps)(nil),                          // 10: pb2.Maps
+	(*NestedWithRequired)(nil),            // 11: pb2.NestedWithRequired
+	(*IndirectRequired)(nil),              // 12: pb2.IndirectRequired
+	(*Extensions)(nil),                    // 13: pb2.Extensions
+	(*ExtensionsContainer)(nil),           // 14: pb2.ExtensionsContainer
+	(*MessageSet)(nil),                    // 15: pb2.MessageSet
+	(*MessageSetExtension)(nil),           // 16: pb2.MessageSetExtension
+	(*KnownTypes)(nil),                    // 17: pb2.KnownTypes
+	(*Nests_OptGroup)(nil),                // 18: pb2.Nests.OptGroup
+	(*Nests_RptGroup)(nil),                // 19: pb2.Nests.RptGroup
+	(*Nests_OptGroup_OptNestedGroup)(nil), // 20: pb2.Nests.OptGroup.OptNestedGroup
+	nil,                                   // 21: pb2.Maps.Int32ToStrEntry
+	nil,                                   // 22: pb2.Maps.Sfixed64ToBoolEntry
+	nil,                                   // 23: pb2.Maps.BoolToUint32Entry
+	nil,                                   // 24: pb2.Maps.Uint64ToEnumEntry
+	nil,                                   // 25: pb2.Maps.StrToNestedEntry
+	nil,                                   // 26: pb2.Maps.StrToOneofsEntry
+	nil,                                   // 27: pb2.IndirectRequired.StrToNestedEntry
+	(*wrappers.BoolValue)(nil),            // 28: google.protobuf.BoolValue
+	(*wrappers.Int32Value)(nil),           // 29: google.protobuf.Int32Value
+	(*wrappers.Int64Value)(nil),           // 30: google.protobuf.Int64Value
+	(*wrappers.UInt32Value)(nil),          // 31: google.protobuf.UInt32Value
+	(*wrappers.UInt64Value)(nil),          // 32: google.protobuf.UInt64Value
+	(*wrappers.FloatValue)(nil),           // 33: google.protobuf.FloatValue
+	(*wrappers.DoubleValue)(nil),          // 34: google.protobuf.DoubleValue
+	(*wrappers.StringValue)(nil),          // 35: google.protobuf.StringValue
+	(*wrappers.BytesValue)(nil),           // 36: google.protobuf.BytesValue
+	(*duration.Duration)(nil),             // 37: google.protobuf.Duration
+	(*timestamp.Timestamp)(nil),           // 38: google.protobuf.Timestamp
+	(*_struct.Struct)(nil),                // 39: google.protobuf.Struct
+	(*_struct.ListValue)(nil),             // 40: google.protobuf.ListValue
+	(*_struct.Value)(nil),                 // 41: google.protobuf.Value
+	(*empty.Empty)(nil),                   // 42: google.protobuf.Empty
+	(*any.Any)(nil),                       // 43: google.protobuf.Any
+}
+var xxx_Test_protoFile_depIdxs = []int32{
+	13, // pb2.opt_ext_bool:extendee -> pb2.Extensions
+	13, // pb2.opt_ext_string:extendee -> pb2.Extensions
+	13, // pb2.opt_ext_enum:extendee -> pb2.Extensions
+	13, // pb2.opt_ext_nested:extendee -> pb2.Extensions
+	13, // pb2.rpt_ext_fixed32:extendee -> pb2.Extensions
+	13, // pb2.rpt_ext_enum:extendee -> pb2.Extensions
+	13, // pb2.rpt_ext_nested:extendee -> pb2.Extensions
+	13, // pb2.ExtensionsContainer.opt_ext_bool:extendee -> pb2.Extensions
+	13, // pb2.ExtensionsContainer.opt_ext_string:extendee -> pb2.Extensions
+	13, // pb2.ExtensionsContainer.opt_ext_enum:extendee -> pb2.Extensions
+	13, // pb2.ExtensionsContainer.opt_ext_nested:extendee -> pb2.Extensions
+	13, // pb2.ExtensionsContainer.rpt_ext_string:extendee -> pb2.Extensions
+	13, // pb2.ExtensionsContainer.rpt_ext_enum:extendee -> pb2.Extensions
+	13, // pb2.ExtensionsContainer.rpt_ext_nested:extendee -> pb2.Extensions
+	15, // pb2.MessageSetExtension.message_set_extension:extendee -> pb2.MessageSet
+	15, // pb2.MessageSetExtension.not_message_set_extension:extendee -> pb2.MessageSet
+	15, // pb2.MessageSetExtension.ext_nested:extendee -> pb2.MessageSet
+	0,  // pb2.Enums.opt_enum:type_name -> pb2.Enum
+	0,  // pb2.Enums.rpt_enum:type_name -> pb2.Enum
+	1,  // pb2.Enums.opt_nested_enum:type_name -> pb2.Enums.NestedEnum
+	1,  // pb2.Enums.rpt_nested_enum:type_name -> pb2.Enums.NestedEnum
+	6,  // pb2.Nests.opt_nested:type_name -> pb2.Nested
+	18, // pb2.Nests.optgroup:type_name -> pb2.Nests.OptGroup
+	6,  // pb2.Nests.rpt_nested:type_name -> pb2.Nested
+	19, // pb2.Nests.rptgroup:type_name -> pb2.Nests.RptGroup
+	6,  // pb2.Nested.opt_nested:type_name -> pb2.Nested
+	0,  // pb2.Requireds.req_enum:type_name -> pb2.Enum
+	6,  // pb2.Requireds.req_nested:type_name -> pb2.Nested
+	6,  // pb2.Oneofs.msg:type_name -> pb2.Nested
+	21, // pb2.Maps.int32_to_str:type_name -> pb2.Maps.Int32ToStrEntry
+	22, // pb2.Maps.sfixed64_to_bool:type_name -> pb2.Maps.Sfixed64ToBoolEntry
+	23, // pb2.Maps.bool_to_uint32:type_name -> pb2.Maps.BoolToUint32Entry
+	24, // pb2.Maps.uint64_to_enum:type_name -> pb2.Maps.Uint64ToEnumEntry
+	25, // pb2.Maps.str_to_nested:type_name -> pb2.Maps.StrToNestedEntry
+	26, // pb2.Maps.str_to_oneofs:type_name -> pb2.Maps.StrToOneofsEntry
+	11, // pb2.IndirectRequired.opt_nested:type_name -> pb2.NestedWithRequired
+	11, // pb2.IndirectRequired.rpt_nested:type_name -> pb2.NestedWithRequired
+	27, // pb2.IndirectRequired.str_to_nested:type_name -> pb2.IndirectRequired.StrToNestedEntry
+	28, // pb2.KnownTypes.opt_bool:type_name -> google.protobuf.BoolValue
+	29, // pb2.KnownTypes.opt_int32:type_name -> google.protobuf.Int32Value
+	30, // pb2.KnownTypes.opt_int64:type_name -> google.protobuf.Int64Value
+	31, // pb2.KnownTypes.opt_uint32:type_name -> google.protobuf.UInt32Value
+	32, // pb2.KnownTypes.opt_uint64:type_name -> google.protobuf.UInt64Value
+	33, // pb2.KnownTypes.opt_float:type_name -> google.protobuf.FloatValue
+	34, // pb2.KnownTypes.opt_double:type_name -> google.protobuf.DoubleValue
+	35, // pb2.KnownTypes.opt_string:type_name -> google.protobuf.StringValue
+	36, // pb2.KnownTypes.opt_bytes:type_name -> google.protobuf.BytesValue
+	37, // pb2.KnownTypes.opt_duration:type_name -> google.protobuf.Duration
+	38, // pb2.KnownTypes.opt_timestamp:type_name -> google.protobuf.Timestamp
+	39, // pb2.KnownTypes.opt_struct:type_name -> google.protobuf.Struct
+	40, // pb2.KnownTypes.opt_list:type_name -> google.protobuf.ListValue
+	41, // pb2.KnownTypes.opt_value:type_name -> google.protobuf.Value
+	42, // pb2.KnownTypes.opt_empty:type_name -> google.protobuf.Empty
+	43, // pb2.KnownTypes.opt_any:type_name -> google.protobuf.Any
+	6,  // pb2.Nests.OptGroup.opt_nested:type_name -> pb2.Nested
+	20, // pb2.Nests.OptGroup.optnestedgroup:type_name -> pb2.Nests.OptGroup.OptNestedGroup
+	0,  // pb2.Nests.OptGroup.OptNestedGroup.opt_enum:type_name -> pb2.Enum
+	0,  // pb2.Maps.Uint64ToEnumEntry.value:type_name -> pb2.Enum
+	6,  // pb2.Maps.StrToNestedEntry.value:type_name -> pb2.Nested
+	9,  // pb2.Maps.StrToOneofsEntry.value:type_name -> pb2.Oneofs
+	11, // pb2.IndirectRequired.StrToNestedEntry.value:type_name -> pb2.NestedWithRequired
+	0,  // pb2.opt_ext_enum:type_name -> pb2.Enum
+	6,  // pb2.opt_ext_nested:type_name -> pb2.Nested
+	0,  // pb2.rpt_ext_enum:type_name -> pb2.Enum
+	6,  // pb2.rpt_ext_nested:type_name -> pb2.Nested
+	0,  // pb2.ExtensionsContainer.opt_ext_enum:type_name -> pb2.Enum
+	6,  // pb2.ExtensionsContainer.opt_ext_nested:type_name -> pb2.Nested
+	0,  // pb2.ExtensionsContainer.rpt_ext_enum:type_name -> pb2.Enum
+	6,  // pb2.ExtensionsContainer.rpt_ext_nested:type_name -> pb2.Nested
+	16, // pb2.MessageSetExtension.message_set_extension:type_name -> pb2.MessageSetExtension
+	16, // pb2.MessageSetExtension.not_message_set_extension:type_name -> pb2.MessageSetExtension
+	6,  // pb2.MessageSetExtension.ext_nested:type_name -> pb2.Nested
+}
+
+func init() {
+	var messageTypes [26]protoreflect.MessageType
+	var extensionTypes [17]protoreflect.ExtensionType
+	Test_protoFile = protoimpl.FileBuilder{
+		RawDescriptor:        fileDescriptor_c8d7acc1bcec9a72,
+		GoTypes:              xxx_Test_protoFile_goTypes,
+		DependencyIndexes:    xxx_Test_protoFile_depIdxs,
+		EnumOutputTypes:      xxx_Test_protoFile_enumTypes[:],
+		MessageOutputTypes:   messageTypes[:],
+		ExtensionOutputTypes: extensionTypes[:],
+	}.Init()
+	messageGoTypes := xxx_Test_protoFile_goTypes[2:][:26]
+	for i, mt := range messageTypes[:] {
+		xxx_Test_protoFile_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
+		xxx_Test_protoFile_messageTypes[i].PBType = mt
+	}
+	E_OptExtBool.Type = extensionTypes[0]
+	E_OptExtString.Type = extensionTypes[1]
+	E_OptExtEnum.Type = extensionTypes[2]
+	E_OptExtNested.Type = extensionTypes[3]
+	E_RptExtFixed32.Type = extensionTypes[4]
+	E_RptExtEnum.Type = extensionTypes[5]
+	E_RptExtNested.Type = extensionTypes[6]
+	E_ExtensionsContainer_OptExtBool.Type = extensionTypes[7]
+	E_ExtensionsContainer_OptExtString.Type = extensionTypes[8]
+	E_ExtensionsContainer_OptExtEnum.Type = extensionTypes[9]
+	E_ExtensionsContainer_OptExtNested.Type = extensionTypes[10]
+	E_ExtensionsContainer_RptExtString.Type = extensionTypes[11]
+	E_ExtensionsContainer_RptExtEnum.Type = extensionTypes[12]
+	E_ExtensionsContainer_RptExtNested.Type = extensionTypes[13]
+	E_MessageSetExtension_MessageSetExtension.Type = extensionTypes[14]
+	E_MessageSetExtension_NotMessageSetExtension.Type = extensionTypes[15]
+	E_MessageSetExtension_ExtNested.Type = extensionTypes[16]
+	xxx_Test_protoFile_goTypes = nil
+	xxx_Test_protoFile_depIdxs = nil
 }

+ 113 - 369
encoding/textpb/testprotos/pb3/test.pb.go

@@ -4,10 +4,12 @@
 package pb3
 
 import (
+	bytes "bytes"
+	gzip "compress/gzip"
 	proto "github.com/golang/protobuf/proto"
 	protoreflect "github.com/golang/protobuf/v2/reflect/protoreflect"
-	prototype "github.com/golang/protobuf/v2/reflect/prototype"
 	protoimpl "github.com/golang/protobuf/v2/runtime/protoimpl"
+	reflect "reflect"
 )
 
 // This is a compile-time assertion to ensure that this generated file
@@ -26,7 +28,7 @@ const (
 )
 
 func (e Enum) Type() protoreflect.EnumType {
-	return xxx_Test_protoFile_EnumTypes[0]
+	return xxx_Test_protoFile_enumTypes[0]
 }
 func (e Enum) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -51,7 +53,7 @@ func (x Enum) String() string {
 }
 
 func (Enum) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_0854715c5b41c422, []int{0}
+	return fileDescriptor_0854715c5b41c422_gzipped, []int{0}
 }
 
 type Enums_NestedEnum int32
@@ -64,7 +66,7 @@ const (
 )
 
 func (e Enums_NestedEnum) Type() protoreflect.EnumType {
-	return xxx_Test_protoFile_EnumTypes[1]
+	return xxx_Test_protoFile_enumTypes[1]
 }
 func (e Enums_NestedEnum) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -89,7 +91,7 @@ func (x Enums_NestedEnum) String() string {
 }
 
 func (Enums_NestedEnum) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_0854715c5b41c422, []int{1, 0}
+	return fileDescriptor_0854715c5b41c422_gzipped, []int{1, 0}
 }
 
 // Scalars contains scalar field types.
@@ -114,29 +116,14 @@ type Scalars struct {
 	XXX_sizecache        int32    `json:"-"`
 }
 
-type xxx_Scalars struct{ m *Scalars }
-
 func (m *Scalars) ProtoReflect() protoreflect.Message {
-	return xxx_Scalars{m}
-}
-func (m xxx_Scalars) Type() protoreflect.MessageType {
-	return xxx_Test_protoFile_MessageTypes[0].Type
-}
-func (m xxx_Scalars) KnownFields() protoreflect.KnownFields {
-	return xxx_Test_protoFile_MessageTypes[0].KnownFieldsOf(m.m)
-}
-func (m xxx_Scalars) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Test_protoFile_MessageTypes[0].UnknownFieldsOf(m.m)
-}
-func (m xxx_Scalars) Interface() protoreflect.ProtoMessage {
-	return m.m
+	return xxx_Test_protoFile_messageTypes[0].MessageOf(m)
 }
-
 func (m *Scalars) Reset()         { *m = Scalars{} }
 func (m *Scalars) String() string { return proto.CompactTextString(m) }
 func (*Scalars) ProtoMessage()    {}
 func (*Scalars) Descriptor() ([]byte, []int) {
-	return fileDescriptor_0854715c5b41c422, []int{0}
+	return fileDescriptor_0854715c5b41c422_gzipped, []int{0}
 }
 
 func (m *Scalars) XXX_Unmarshal(b []byte) error {
@@ -271,29 +258,14 @@ type Enums struct {
 	XXX_sizecache        int32            `json:"-"`
 }
 
-type xxx_Enums struct{ m *Enums }
-
 func (m *Enums) ProtoReflect() protoreflect.Message {
-	return xxx_Enums{m}
-}
-func (m xxx_Enums) Type() protoreflect.MessageType {
-	return xxx_Test_protoFile_MessageTypes[1].Type
-}
-func (m xxx_Enums) KnownFields() protoreflect.KnownFields {
-	return xxx_Test_protoFile_MessageTypes[1].KnownFieldsOf(m.m)
+	return xxx_Test_protoFile_messageTypes[1].MessageOf(m)
 }
-func (m xxx_Enums) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Test_protoFile_MessageTypes[1].UnknownFieldsOf(m.m)
-}
-func (m xxx_Enums) Interface() protoreflect.ProtoMessage {
-	return m.m
-}
-
 func (m *Enums) Reset()         { *m = Enums{} }
 func (m *Enums) String() string { return proto.CompactTextString(m) }
 func (*Enums) ProtoMessage()    {}
 func (*Enums) Descriptor() ([]byte, []int) {
-	return fileDescriptor_0854715c5b41c422, []int{1}
+	return fileDescriptor_0854715c5b41c422_gzipped, []int{1}
 }
 
 func (m *Enums) XXX_Unmarshal(b []byte) error {
@@ -336,29 +308,14 @@ type Nests struct {
 	XXX_sizecache        int32    `json:"-"`
 }
 
-type xxx_Nests struct{ m *Nests }
-
 func (m *Nests) ProtoReflect() protoreflect.Message {
-	return xxx_Nests{m}
-}
-func (m xxx_Nests) Type() protoreflect.MessageType {
-	return xxx_Test_protoFile_MessageTypes[2].Type
-}
-func (m xxx_Nests) KnownFields() protoreflect.KnownFields {
-	return xxx_Test_protoFile_MessageTypes[2].KnownFieldsOf(m.m)
-}
-func (m xxx_Nests) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Test_protoFile_MessageTypes[2].UnknownFieldsOf(m.m)
-}
-func (m xxx_Nests) Interface() protoreflect.ProtoMessage {
-	return m.m
+	return xxx_Test_protoFile_messageTypes[2].MessageOf(m)
 }
-
 func (m *Nests) Reset()         { *m = Nests{} }
 func (m *Nests) String() string { return proto.CompactTextString(m) }
 func (*Nests) ProtoMessage()    {}
 func (*Nests) Descriptor() ([]byte, []int) {
-	return fileDescriptor_0854715c5b41c422, []int{2}
+	return fileDescriptor_0854715c5b41c422_gzipped, []int{2}
 }
 
 func (m *Nests) XXX_Unmarshal(b []byte) error {
@@ -395,29 +352,14 @@ type Nested struct {
 	XXX_sizecache        int32    `json:"-"`
 }
 
-type xxx_Nested struct{ m *Nested }
-
 func (m *Nested) ProtoReflect() protoreflect.Message {
-	return xxx_Nested{m}
-}
-func (m xxx_Nested) Type() protoreflect.MessageType {
-	return xxx_Test_protoFile_MessageTypes[3].Type
-}
-func (m xxx_Nested) KnownFields() protoreflect.KnownFields {
-	return xxx_Test_protoFile_MessageTypes[3].KnownFieldsOf(m.m)
-}
-func (m xxx_Nested) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Test_protoFile_MessageTypes[3].UnknownFieldsOf(m.m)
+	return xxx_Test_protoFile_messageTypes[3].MessageOf(m)
 }
-func (m xxx_Nested) Interface() protoreflect.ProtoMessage {
-	return m.m
-}
-
 func (m *Nested) Reset()         { *m = Nested{} }
 func (m *Nested) String() string { return proto.CompactTextString(m) }
 func (*Nested) ProtoMessage()    {}
 func (*Nested) Descriptor() ([]byte, []int) {
-	return fileDescriptor_0854715c5b41c422, []int{3}
+	return fileDescriptor_0854715c5b41c422_gzipped, []int{3}
 }
 
 func (m *Nested) XXX_Unmarshal(b []byte) error {
@@ -453,7 +395,7 @@ func (m *Nested) GetSNested() *Nested {
 }
 
 func init() {
-	proto.RegisterFile("encoding/textpb/testprotos/pb3/test.proto", fileDescriptor_0854715c5b41c422)
+	proto.RegisterFile("encoding/textpb/testprotos/pb3/test.proto", fileDescriptor_0854715c5b41c422_gzipped)
 	proto.RegisterEnum("pb3.Enum", Enum_name, Enum_value)
 	proto.RegisterEnum("pb3.Enums_NestedEnum", Enums_NestedEnum_name, Enums_NestedEnum_value)
 	proto.RegisterType((*Scalars)(nil), "pb3.Scalars")
@@ -463,304 +405,106 @@ func init() {
 }
 
 var fileDescriptor_0854715c5b41c422 = []byte{
-	// 503 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x93, 0xdf, 0xab, 0xd3, 0x30,
-	0x14, 0xc7, 0xcd, 0xba, 0xb6, 0x5b, 0xe6, 0xbd, 0xd6, 0xe0, 0x30, 0x22, 0x42, 0xd8, 0x83, 0x44,
-	0x85, 0x15, 0xda, 0x52, 0x10, 0xc4, 0x87, 0xb9, 0x5d, 0xb8, 0x08, 0x1b, 0x64, 0x5e, 0x84, 0xbd,
-	0x94, 0x75, 0xeb, 0xe6, 0xa0, 0x6b, 0xc6, 0x4e, 0x2a, 0xd7, 0xff, 0xc4, 0x27, 0xff, 0x56, 0x49,
-	0xb2, 0x9f, 0x0f, 0xfa, 0xd4, 0xf3, 0xed, 0x27, 0xdf, 0x73, 0xbe, 0x87, 0x10, 0xfc, 0xae, 0xa8,
-	0x16, 0x72, 0xb9, 0xa9, 0xd6, 0xa1, 0x2a, 0x1e, 0xd5, 0x2e, 0x0f, 0x55, 0x01, 0x6a, 0xb7, 0x97,
-	0x4a, 0x42, 0xb8, 0xcb, 0x63, 0x23, 0xfb, 0x46, 0x13, 0x67, 0x97, 0xc7, 0xbd, 0x3f, 0x0e, 0xf6,
-	0xa7, 0x8b, 0x79, 0x39, 0xdf, 0x03, 0xe9, 0x62, 0x0f, 0xb2, 0x5c, 0xca, 0x92, 0x22, 0x86, 0x78,
-	0x4b, 0xb8, 0x30, 0x90, 0xb2, 0x24, 0x2f, 0xb1, 0x0f, 0xd9, 0xa6, 0x52, 0x71, 0x44, 0x1b, 0x0c,
-	0x71, 0x57, 0x78, 0x70, 0xaf, 0xd5, 0x09, 0xa4, 0x09, 0x75, 0x18, 0xe2, 0x8e, 0x05, 0x69, 0x42,
-	0x5e, 0xe1, 0x16, 0x64, 0xb5, 0xb5, 0x34, 0x19, 0xe2, 0x37, 0xc2, 0x87, 0x07, 0x23, 0xcf, 0x28,
-	0x4d, 0xa8, 0xcb, 0x10, 0x6f, 0x1e, 0xd0, 0xd1, 0x05, 0xd6, 0xe5, 0x31, 0xc4, 0x9f, 0x0b, 0x1f,
-	0xa6, 0x17, 0x2e, 0xb0, 0x2e, 0x9f, 0x21, 0x4e, 0x0e, 0x28, 0x4d, 0xc8, 0x6b, 0xdc, 0x86, 0x6c,
-	0xb5, 0x79, 0x2c, 0x96, 0x71, 0x44, 0x5b, 0x0c, 0x71, 0x5f, 0xb4, 0xe0, 0xce, 0xea, 0x0b, 0x98,
-	0x26, 0xb4, 0xcd, 0x10, 0xf7, 0x8e, 0x30, 0x4d, 0xc8, 0x1b, 0x8c, 0x21, 0x83, 0xa3, 0x15, 0x33,
-	0xc4, 0x9f, 0x89, 0x36, 0x4c, 0x0f, 0x3f, 0x2e, 0x71, 0x9a, 0xd0, 0x0e, 0x43, 0x3c, 0x38, 0xe1,
-	0x34, 0xb1, 0xcb, 0xaf, 0x4a, 0x39, 0x57, 0xf4, 0x05, 0x43, 0xbc, 0x21, 0x3c, 0xb8, 0xd3, 0xca,
-	0x66, 0x5d, 0xca, 0x3a, 0x2f, 0x0b, 0xda, 0x65, 0x88, 0x23, 0xe1, 0xc3, 0xd0, 0x48, 0xeb, 0xc9,
-	0x7f, 0xa9, 0x02, 0xe8, 0x2d, 0x43, 0xfc, 0xa9, 0xf0, 0x60, 0xa0, 0xd5, 0x61, 0x3f, 0xb5, 0xdf,
-	0x54, 0x6b, 0x7a, 0xc3, 0x10, 0x6f, 0xeb, 0xfd, 0x8c, 0xec, 0xfd, 0x46, 0xd8, 0x1d, 0x55, 0xf5,
-	0x16, 0x08, 0xd3, 0xd7, 0x53, 0x54, 0xf5, 0xd6, 0x5c, 0xcf, 0x6d, 0xd4, 0xee, 0xef, 0xf2, 0xb8,
-	0xaf, 0x99, 0x70, 0x41, 0x7f, 0xc8, 0x47, 0x7c, 0x03, 0x59, 0x55, 0x80, 0x2a, 0x96, 0xf6, 0xa0,
-	0x63, 0x0e, 0x76, 0x4f, 0x07, 0xa1, 0x3f, 0x36, 0xd4, 0x98, 0x3a, 0x70, 0x16, 0xbd, 0x08, 0xe3,
-	0xb3, 0x22, 0x2d, 0xdc, 0xfc, 0x32, 0x12, 0x93, 0xe0, 0x09, 0xf1, 0xb1, 0xf3, 0x30, 0x9e, 0x04,
-	0x48, 0x17, 0xc3, 0xc9, 0x34, 0x68, 0x68, 0x36, 0xbc, 0x1f, 0xcd, 0x02, 0xdc, 0x0b, 0xb1, 0xab,
-	0x3d, 0x40, 0xde, 0xea, 0xf8, 0x76, 0xae, 0xc9, 0xd6, 0x89, 0x3a, 0x66, 0xa4, 0xed, 0x28, 0xfc,
-	0xc3, 0xa0, 0xde, 0x57, 0xec, 0xd9, 0xea, 0x6a, 0x61, 0x74, 0xb5, 0xf0, 0x55, 0xb3, 0xc6, 0xbf,
-	0x9b, 0xbd, 0xff, 0x80, 0x9b, 0xc7, 0xac, 0xb3, 0x53, 0xd6, 0xc9, 0x78, 0x64, 0xb3, 0x7e, 0xfb,
-	0x3e, 0x09, 0x1a, 0xa6, 0x18, 0x8d, 0x03, 0x3c, 0xf8, 0x3c, 0xfb, 0xb4, 0xde, 0xa8, 0x1f, 0x75,
-	0xde, 0x5f, 0xc8, 0x6d, 0xb8, 0x96, 0xe5, 0xbc, 0x5a, 0x87, 0xe6, 0x19, 0xe4, 0xf5, 0x2a, 0xfc,
-	0x19, 0x85, 0xff, 0x7f, 0x36, 0xb9, 0x67, 0xea, 0xf8, 0x6f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xd9,
-	0x7d, 0x94, 0x3a, 0x5f, 0x03, 0x00, 0x00,
-}
-
-func init() {
-	xxx_Test_protoFile_FileDesc.Enums = xxx_Test_protoFile_EnumDescs[0:1]
-	xxx_Test_protoFile_FileDesc.Messages = xxx_Test_protoFile_MessageDescs[0:4]
-	xxx_Test_protoFile_MessageDescs[1].Enums = xxx_Test_protoFile_EnumDescs[1:2]
-	xxx_Test_protoFile_MessageDescs[1].Fields[0].EnumType = xxx_Test_protoFile_EnumTypes[0]
-	xxx_Test_protoFile_MessageDescs[1].Fields[1].EnumType = xxx_Test_protoFile_EnumTypes[1]
-	xxx_Test_protoFile_MessageDescs[2].Fields[0].MessageType = xxx_Test_protoFile_MessageTypes[3].Type
-	xxx_Test_protoFile_MessageDescs[3].Fields[1].MessageType = xxx_Test_protoFile_MessageTypes[3].Type
-	var err error
-	Test_protoFile, err = prototype.NewFile(&xxx_Test_protoFile_FileDesc)
-	if err != nil {
-		panic(err)
-	}
-}
+	// 863 bytes of the wire-encoded FileDescriptorProto
+	0x0a, 0x29, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x2f, 0x74, 0x65, 0x78, 0x74, 0x70,
+	0x62, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x2f, 0x70, 0x62, 0x33,
+	0x2f, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x03, 0x70, 0x62, 0x33,
+	0x22, 0x9e, 0x03, 0x0a, 0x07, 0x53, 0x63, 0x61, 0x6c, 0x61, 0x72, 0x73, 0x12, 0x15, 0x0a, 0x06,
+	0x73, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x73, 0x42,
+	0x6f, 0x6f, 0x6c, 0x12, 0x17, 0x0a, 0x07, 0x73, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x18, 0x02,
+	0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x73, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x17, 0x0a, 0x07,
+	0x73, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x73,
+	0x49, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33,
+	0x32, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x73, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32,
+	0x12, 0x19, 0x0a, 0x08, 0x73, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x18, 0x05, 0x20, 0x01,
+	0x28, 0x04, 0x52, 0x07, 0x73, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x19, 0x0a, 0x08, 0x73,
+	0x5f, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x18, 0x06, 0x20, 0x01, 0x28, 0x11, 0x52, 0x07, 0x73,
+	0x53, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x5f, 0x73, 0x69, 0x6e, 0x74,
+	0x36, 0x34, 0x18, 0x07, 0x20, 0x01, 0x28, 0x12, 0x52, 0x07, 0x73, 0x53, 0x69, 0x6e, 0x74, 0x36,
+	0x34, 0x12, 0x1b, 0x0a, 0x09, 0x73, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x18, 0x08,
+	0x20, 0x01, 0x28, 0x07, 0x52, 0x08, 0x73, 0x46, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x12, 0x1b,
+	0x0a, 0x09, 0x73, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x18, 0x09, 0x20, 0x01, 0x28,
+	0x06, 0x52, 0x08, 0x73, 0x46, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x12, 0x1d, 0x0a, 0x0a, 0x73,
+	0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0f, 0x52,
+	0x09, 0x73, 0x53, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x5f,
+	0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x10, 0x52, 0x09,
+	0x73, 0x53, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x12, 0x17, 0x0a, 0x07, 0x73, 0x5f, 0x66,
+	0x6c, 0x6f, 0x61, 0x74, 0x18, 0x14, 0x20, 0x01, 0x28, 0x02, 0x52, 0x06, 0x73, 0x46, 0x6c, 0x6f,
+	0x61, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x18, 0x15,
+	0x20, 0x01, 0x28, 0x01, 0x52, 0x07, 0x73, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x12, 0x17, 0x0a,
+	0x07, 0x73, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06,
+	0x73, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x5f, 0x73, 0x74, 0x72, 0x69,
+	0x6e, 0x67, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e,
+	0x67, 0x22, 0x98, 0x01, 0x0a, 0x05, 0x45, 0x6e, 0x75, 0x6d, 0x73, 0x12, 0x20, 0x0a, 0x06, 0x73,
+	0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x09, 0x2e, 0x70, 0x62,
+	0x33, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x05, 0x73, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x39, 0x0a,
+	0x0d, 0x73, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x18, 0x03,
+	0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x70, 0x62, 0x33, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x73,
+	0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x0b, 0x73, 0x4e, 0x65,
+	0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x22, 0x32, 0x0a, 0x0a, 0x4e, 0x65, 0x73, 0x74,
+	0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x08, 0x0a, 0x04, 0x43, 0x45, 0x52, 0x4f, 0x10, 0x00,
+	0x12, 0x07, 0x0a, 0x03, 0x55, 0x4e, 0x4f, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x44, 0x4f, 0x53,
+	0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x44, 0x49, 0x45, 0x5a, 0x10, 0x0a, 0x22, 0x2f, 0x0a, 0x05,
+	0x4e, 0x65, 0x73, 0x74, 0x73, 0x12, 0x26, 0x0a, 0x08, 0x73, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65,
+	0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x70, 0x62, 0x33, 0x2e, 0x4e, 0x65,
+	0x73, 0x74, 0x65, 0x64, 0x52, 0x07, 0x73, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x22, 0x4b, 0x0a,
+	0x06, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x5f, 0x73, 0x74, 0x72,
+	0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x53, 0x74, 0x72, 0x69,
+	0x6e, 0x67, 0x12, 0x26, 0x0a, 0x08, 0x73, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x18, 0x02,
+	0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x70, 0x62, 0x33, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65,
+	0x64, 0x52, 0x07, 0x73, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2a, 0x2b, 0x0a, 0x04, 0x45, 0x6e,
+	0x75, 0x6d, 0x12, 0x08, 0x0a, 0x04, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03,
+	0x4f, 0x4e, 0x45, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x54, 0x57, 0x4f, 0x10, 0x02, 0x12, 0x07,
+	0x0a, 0x03, 0x54, 0x45, 0x4e, 0x10, 0x0a, 0x42, 0x3e, 0x5a, 0x3c, 0x67, 0x69, 0x74, 0x68, 0x75,
+	0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2f, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e,
+	0x67, 0x2f, 0x74, 0x65, 0x78, 0x74, 0x70, 0x62, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x73, 0x2f, 0x70, 0x62, 0x33, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+}
+
+var fileDescriptor_0854715c5b41c422_gzipped = func() []byte {
+	bb := new(bytes.Buffer)
+	zw, _ := gzip.NewWriterLevel(bb, gzip.NoCompression)
+	zw.Write(fileDescriptor_0854715c5b41c422)
+	zw.Close()
+	return bb.Bytes()
+}()
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
 var Test_protoFile protoreflect.FileDescriptor
 
-var xxx_Test_protoFile_FileDesc = prototype.File{
-	Syntax:  protoreflect.Proto3,
-	Path:    "encoding/textpb/testprotos/pb3/test.proto",
-	Package: "pb3",
-}
-var xxx_Test_protoFile_EnumTypes = [2]protoreflect.EnumType{
-	prototype.GoEnum(
-		xxx_Test_protoFile_EnumDescs[0].Reference(),
-		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
-			return Enum(n)
-		},
-	),
-	prototype.GoEnum(
-		xxx_Test_protoFile_EnumDescs[1].Reference(),
-		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
-			return Enums_NestedEnum(n)
-		},
-	),
-}
-var xxx_Test_protoFile_EnumDescs = [2]prototype.Enum{
-	{
-		Name: "Enum",
-		Values: []prototype.EnumValue{
-			{Name: "ZERO", Number: 0},
-			{Name: "ONE", Number: 1},
-			{Name: "TWO", Number: 2},
-			{Name: "TEN", Number: 10},
-		},
-	},
-	{
-		Name: "NestedEnum",
-		Values: []prototype.EnumValue{
-			{Name: "CERO", Number: 0},
-			{Name: "UNO", Number: 1},
-			{Name: "DOS", Number: 2},
-			{Name: "DIEZ", Number: 10},
-		},
-	},
-}
-var xxx_Test_protoFile_MessageTypes = [4]protoimpl.MessageType{
-	{Type: prototype.GoMessage(
-		xxx_Test_protoFile_MessageDescs[0].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_Scalars{new(Scalars)}
-		},
-	)},
-	{Type: prototype.GoMessage(
-		xxx_Test_protoFile_MessageDescs[1].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_Enums{new(Enums)}
-		},
-	)},
-	{Type: prototype.GoMessage(
-		xxx_Test_protoFile_MessageDescs[2].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_Nests{new(Nests)}
-		},
-	)},
-	{Type: prototype.GoMessage(
-		xxx_Test_protoFile_MessageDescs[3].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_Nested{new(Nested)}
-		},
-	)},
-}
-var xxx_Test_protoFile_MessageDescs = [4]prototype.Message{
-	{
-		Name: "Scalars",
-		Fields: []prototype.Field{
-			{
-				Name:        "s_bool",
-				Number:      1,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.BoolKind,
-				JSONName:    "sBool",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "s_int32",
-				Number:      2,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Int32Kind,
-				JSONName:    "sInt32",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "s_int64",
-				Number:      3,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Int64Kind,
-				JSONName:    "sInt64",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "s_uint32",
-				Number:      4,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Uint32Kind,
-				JSONName:    "sUint32",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "s_uint64",
-				Number:      5,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Uint64Kind,
-				JSONName:    "sUint64",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "s_sint32",
-				Number:      6,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Sint32Kind,
-				JSONName:    "sSint32",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "s_sint64",
-				Number:      7,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Sint64Kind,
-				JSONName:    "sSint64",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "s_fixed32",
-				Number:      8,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Fixed32Kind,
-				JSONName:    "sFixed32",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "s_fixed64",
-				Number:      9,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Fixed64Kind,
-				JSONName:    "sFixed64",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "s_sfixed32",
-				Number:      10,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Sfixed32Kind,
-				JSONName:    "sSfixed32",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "s_sfixed64",
-				Number:      11,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Sfixed64Kind,
-				JSONName:    "sSfixed64",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "s_float",
-				Number:      20,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.FloatKind,
-				JSONName:    "sFloat",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "s_double",
-				Number:      21,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.DoubleKind,
-				JSONName:    "sDouble",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "s_bytes",
-				Number:      14,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.BytesKind,
-				JSONName:    "sBytes",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "s_string",
-				Number:      13,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.StringKind,
-				JSONName:    "sString",
-				IsPacked:    prototype.False,
-			},
-		},
-	},
-	{
-		Name: "Enums",
-		Fields: []prototype.Field{
-			{
-				Name:        "s_enum",
-				Number:      1,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.EnumKind,
-				JSONName:    "sEnum",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "s_nested_enum",
-				Number:      3,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.EnumKind,
-				JSONName:    "sNestedEnum",
-				IsPacked:    prototype.False,
-			},
-		},
-	},
-	{
-		Name: "Nests",
-		Fields: []prototype.Field{
-			{
-				Name:        "s_nested",
-				Number:      1,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.MessageKind,
-				JSONName:    "sNested",
-				IsPacked:    prototype.False,
-			},
-		},
-	},
-	{
-		Name: "Nested",
-		Fields: []prototype.Field{
-			{
-				Name:        "s_string",
-				Number:      1,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.StringKind,
-				JSONName:    "sString",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "s_nested",
-				Number:      2,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.MessageKind,
-				JSONName:    "sNested",
-				IsPacked:    prototype.False,
-			},
-		},
-	},
+var xxx_Test_protoFile_enumTypes [2]protoreflect.EnumType
+var xxx_Test_protoFile_messageTypes [4]protoimpl.MessageType
+var xxx_Test_protoFile_goTypes = []interface{}{
+	(Enum)(0),             // 0: pb3.Enum
+	(Enums_NestedEnum)(0), // 1: pb3.Enums.NestedEnum
+	(*Scalars)(nil),       // 2: pb3.Scalars
+	(*Enums)(nil),         // 3: pb3.Enums
+	(*Nests)(nil),         // 4: pb3.Nests
+	(*Nested)(nil),        // 5: pb3.Nested
+}
+var xxx_Test_protoFile_depIdxs = []int32{
+	0, // pb3.Enums.s_enum:type_name -> pb3.Enum
+	1, // pb3.Enums.s_nested_enum:type_name -> pb3.Enums.NestedEnum
+	5, // pb3.Nests.s_nested:type_name -> pb3.Nested
+	5, // pb3.Nested.s_nested:type_name -> pb3.Nested
+}
+
+func init() {
+	var messageTypes [4]protoreflect.MessageType
+	Test_protoFile = protoimpl.FileBuilder{
+		RawDescriptor:      fileDescriptor_0854715c5b41c422,
+		GoTypes:            xxx_Test_protoFile_goTypes,
+		DependencyIndexes:  xxx_Test_protoFile_depIdxs,
+		EnumOutputTypes:    xxx_Test_protoFile_enumTypes[:],
+		MessageOutputTypes: messageTypes[:],
+	}.Init()
+	messageGoTypes := xxx_Test_protoFile_goTypes[2:][:4]
+	for i, mt := range messageTypes[:] {
+		xxx_Test_protoFile_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
+		xxx_Test_protoFile_messageTypes[i].PBType = mt
+	}
+	xxx_Test_protoFile_goTypes = nil
+	xxx_Test_protoFile_depIdxs = nil
 }

+ 93 - 0
internal/cmd/generate-types/main.go

@@ -26,6 +26,7 @@ var run = flag.Bool("execute", false, "Write generated files to destination.")
 func main() {
 	flag.Parse()
 	chdirRoot()
+	writeSource("internal/fileinit/desc_list_gen.go", generateFileinitDescList())
 	writeSource("proto/decode_gen.go", generateProtoDecode())
 	writeSource("reflect/prototype/protofile_list_gen.go", generateListTypes())
 }
@@ -186,6 +187,98 @@ var listTypesTemplate = template.Must(template.New("").Funcs(template.FuncMap{
 	{{- end}}
 `))
 
+func generateFileinitDescList() string {
+	return mustExecute(fileinitDescListTemplate, []DescriptorType{
+		EnumDesc, EnumValueDesc, MessageDesc, FieldDesc, OneofDesc, ExtensionDesc, ServiceDesc, MethodDesc,
+	})
+}
+
+var fileinitDescListTemplate = template.Must(template.New("").Funcs(template.FuncMap{
+	"unexport": func(t DescriptorType) Expr {
+		return Expr(string(unicode.ToLower(rune(t[0]))) + string(t[1:]))
+	},
+}).Parse(`
+	{{- range .}}
+	{{$nameList := (printf "%sDescs" (unexport .))}} {{/* e.g., "messageDescs" */}}
+	{{$nameDesc := (printf "%sDesc"  (unexport .))}} {{/* e.g., "messageDesc" */}}
+
+	type {{$nameList}} struct {
+		list   []{{$nameDesc}}
+		once   sync.Once
+		byName map[protoreflect.Name]*{{$nameDesc}} // protected by once
+		{{- if (eq . "Field")}}
+		byJSON map[string]*{{$nameDesc}}            // protected by once
+		{{- end}}
+		{{- if .NumberExpr}}
+		byNum  map[{{.NumberExpr}}]*{{$nameDesc}}   // protected by once
+		{{- end}}
+	}
+
+	func (p *{{$nameList}}) Len() int {
+		return len(p.list)
+	}
+	func (p *{{$nameList}}) Get(i int) {{.Expr}} {
+		return &p.list[i]
+	}
+	func (p *{{$nameList}}) ByName(s protoreflect.Name) {{.Expr}} {
+		if d := p.lazyInit().byName[s]; d != nil {
+			return d
+		}
+		return nil
+	}
+	{{- if (eq . "Field")}}
+	func (p *{{$nameList}}) ByJSONName(s string) {{.Expr}} {
+		if d := p.lazyInit().byJSON[s]; d != nil {
+			return d
+		}
+		return nil
+	}
+	{{- end}}
+	{{- if .NumberExpr}}
+	func (p *{{$nameList}}) ByNumber(n {{.NumberExpr}}) {{.Expr}} {
+		if d := p.lazyInit().byNum[n]; d != nil {
+			return d
+		}
+		return nil
+	}
+	{{- end}}
+	func (p *{{$nameList}}) Format(s fmt.State, r rune) {
+		typefmt.FormatList(s, r, p)
+	}
+	func (p *{{$nameList}}) ProtoInternal(pragma.DoNotImplement) {}
+	func (p *{{$nameList}}) lazyInit() *{{$nameList}} {
+		p.once.Do(func() {
+			if len(p.list) > 0 {
+				p.byName = make(map[protoreflect.Name]*{{$nameDesc}}, len(p.list))
+				{{- if (eq . "Field")}}
+				p.byJSON = make(map[string]*{{$nameDesc}}, len(p.list))
+				{{- end}}
+				{{- if .NumberExpr}}
+				p.byNum = make(map[{{.NumberExpr}}]*{{$nameDesc}}, len(p.list))
+				{{- end}}
+				for i := range p.list {
+					d := &p.list[i]
+					if _, ok := p.byName[d.Name()]; !ok {
+						p.byName[d.Name()] = d
+					}
+					{{- if (eq . "Field")}}
+					if _, ok := p.byJSON[d.JSONName()]; !ok {
+						p.byJSON[d.JSONName()] = d
+					}
+					{{- end}}
+					{{- if .NumberExpr}}
+					if _, ok := p.byNum[d.Number()]; !ok {
+						p.byNum[d.Number()] = d
+					}
+					{{- end}}
+				}
+			}
+		})
+		return p
+	}
+	{{- end}}
+`))
+
 func mustExecute(t *template.Template, data interface{}) string {
 	var b bytes.Buffer
 	if err := t.Execute(&b, data); err != nil {

+ 474 - 0
internal/fileinit/desc.go

@@ -0,0 +1,474 @@
+// Copyright 2018 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Package fileinit constructs protoreflect.FileDescriptors from the encoded
+// file descriptor proto messages. This package uses a custom proto unmarshaler
+// 1) to avoid a dependency on the descriptor proto 2) for performance to keep
+// the initialization cost as low as possible.
+package fileinit
+
+import (
+	"fmt"
+	"reflect"
+	"sync"
+
+	pragma "github.com/golang/protobuf/v2/internal/pragma"
+	pfmt "github.com/golang/protobuf/v2/internal/typefmt"
+	"github.com/golang/protobuf/v2/proto"
+	pref "github.com/golang/protobuf/v2/reflect/protoreflect"
+	ptype "github.com/golang/protobuf/v2/reflect/prototype"
+)
+
+// FileBuilder construct a protoreflect.FileDescriptor from the
+// raw file descriptor and the Go types for declarations and dependencies.
+//
+//
+// Flattened Ordering
+//
+// The protobuf type system represents declarations as a tree. Certain nodes in
+// the tree require us to either associate it with a concrete Go type or to
+// resolve a dependency, which is information that must be provided separately
+// since it cannot be derived from the file descriptor alone.
+//
+// However, representing a tree as Go literals is difficult to simply do in a
+// space and time efficient way. Thus, we store them as a flattened list of
+// objects where the serialization order from the tree-based form is important.
+//
+// The "flattened ordering" is defined as a tree traversal of all enum, message,
+// extension, and service declarations using the following algorithm:
+//
+//	def VisitFileDecls(fd):
+//		for e in fd.Enums:      yield e
+//		for m in fd.Messages:   yield m
+//		for x in fd.Extensions: yield x
+//		for s in fd.Services:   yield s
+//		for m in fd.Messages:   yield from VisitMessageDecls(m)
+//
+//	def VisitMessageDecls(md):
+//		for e in md.Enums:      yield e
+//		for m in md.Messages:   yield m
+//		for x in md.Extensions: yield x
+//		for m in md.Messages:   yield from VisitMessageDecls(m)
+//
+// The traversal starts at the root file descriptor and yields each direct
+// declaration within each node before traversing into sub-declarations
+// that children themselves may have.
+type FileBuilder struct {
+	// RawDescriptor is the wire-encoded bytes of FileDescriptorProto.
+	RawDescriptor []byte
+
+	// GoTypes is a unique set of the Go types for all declarations and
+	// dependencies. Each type is represented as a zero value of the Go type.
+	//
+	// Declarations are Go types generated for enums and messages directly
+	// declared (not publicly imported) in the proto source file.
+	// Messages for map entries are included, but represented by nil.
+	// Enum declarations in "flattened ordering" come first, followed by
+	// message declarations in "flattened ordering". The length of each sub-list
+	// is len(EnumOutputTypes) and len(MessageOutputTypes), respectively.
+	//
+	// Dependencies are Go types for enums or messages referenced by
+	// message fields (excluding weak fields), for parent extended messages of
+	// extension fields, for enums or messages referenced by extension fields,
+	// and for input and output messages referenced by service methods.
+	// Dependencies must come after declarations, but the ordering of
+	// dependencies themselves is unspecified.
+	GoTypes []interface{}
+
+	// DependencyIndexes is an ordered list of indexes into GoTypes for the
+	// dependencies of messages, extensions, or services. There are 4 sub-lists
+	// each in "flattened ordering" concatenated back-to-back:
+	//	* Extension field targets: list of the extended parent message of
+	//	every extension. Length is len(ExtensionOutputTypes).
+	//	* Message field dependencies: list of the enum or message type
+	//	referred to by every message field.
+	//	* Extension field dependencies: list of the enum or message type
+	//	referred to by every extension field.
+	//	* Service method dependencies: list of the input and output message type
+	//	referred to by every service method.
+	DependencyIndexes []int32
+
+	// TODO: Provide a list of imported files.
+	// FileDependencies []pref.FileDescriptor
+
+	// TODO: Provide a list of extension types for options extensions.
+	// OptionDependencies []pref.ExtensionType
+
+	// EnumOutputTypes is where Init stores all initialized enum types
+	// in "flattened ordering".
+	EnumOutputTypes []pref.EnumType
+	// MessageOutputTypes is where Init stores all initialized message types
+	// in "flattened ordering"; this includes map entry types.
+	MessageOutputTypes []pref.MessageType
+	// ExtensionOutputTypes is where Init stores all initialized extension types
+	// in "flattened ordering".
+	ExtensionOutputTypes []pref.ExtensionType
+
+	// TODO: Provide ability for FileBuilder to handle registration?
+	// FilesRegistry *pref.Files
+	// TypesRegistry *pref.Types
+}
+
+// Init constructs a FileDescriptor given the parameters set in FileBuilder.
+// It assumes that the inputs are well-formed and panics if any inconsistencies
+// are encountered.
+func (fb FileBuilder) Init() pref.FileDescriptor {
+	fd := newFileDesc(fb)
+
+	for i := range fd.allEnums {
+		fb.EnumOutputTypes[i] = &fd.allEnums[i]
+	}
+	for i := range fd.allMessages {
+		fb.MessageOutputTypes[i] = &fd.allMessages[i]
+	}
+	for i := range fd.allExtensions {
+		fb.ExtensionOutputTypes[i] = &fd.allExtensions[i]
+	}
+	return fd
+}
+
+type (
+	// fileInit contains a copy of certain fields in FileBuilder for use during
+	// lazy initialization upon first use.
+	fileInit struct {
+		RawDescriptor     []byte
+		GoTypes           []interface{}
+		DependencyIndexes []int32
+	}
+	fileDesc struct {
+		fileInit
+
+		path         string
+		protoPackage pref.FullName
+
+		fileDecls
+
+		enums      enumDescs
+		messages   messageDescs
+		extensions extensionDescs
+		services   serviceDescs
+
+		once sync.Once
+		lazy *fileLazy // protected by once
+	}
+	fileDecls struct {
+		allEnums      []enumDesc
+		allMessages   []messageDesc
+		allExtensions []extensionDesc
+	}
+	fileLazy struct {
+		syntax  pref.Syntax
+		imports fileImports
+		byName  map[pref.FullName]pref.Descriptor
+		options []byte
+	}
+)
+
+func (fd *fileDesc) Parent() (pref.Descriptor, bool) { return nil, false }
+func (fd *fileDesc) Index() int                      { return 0 }
+func (fd *fileDesc) Syntax() pref.Syntax             { return fd.lazyInit().syntax }
+func (fd *fileDesc) Name() pref.Name                 { return fd.Package().Name() }
+func (fd *fileDesc) FullName() pref.FullName         { return fd.Package() }
+func (fd *fileDesc) IsPlaceholder() bool             { return false }
+func (fd *fileDesc) Options() pref.OptionsMessage {
+	return unmarshalOptions(ptype.X.FileOptions(), fd.lazyInit().options)
+}
+func (fd *fileDesc) Path() string                                     { return fd.path }
+func (fd *fileDesc) Package() pref.FullName                           { return fd.protoPackage }
+func (fd *fileDesc) Imports() pref.FileImports                        { return &fd.lazyInit().imports }
+func (fd *fileDesc) Enums() pref.EnumDescriptors                      { return &fd.enums }
+func (fd *fileDesc) Messages() pref.MessageDescriptors                { return &fd.messages }
+func (fd *fileDesc) Extensions() pref.ExtensionDescriptors            { return &fd.extensions }
+func (fd *fileDesc) Services() pref.ServiceDescriptors                { return &fd.services }
+func (fd *fileDesc) DescriptorByName(s pref.FullName) pref.Descriptor { return fd.lazyInit().byName[s] }
+func (fd *fileDesc) Format(s fmt.State, r rune)                       { pfmt.FormatDesc(s, r, fd) }
+func (fd *fileDesc) ProtoType(pref.FileDescriptor)                    {}
+func (fd *fileDesc) ProtoInternal(pragma.DoNotImplement)              {}
+
+type (
+	enumDesc struct {
+		baseDesc
+
+		lazy *enumLazy // protected by fileDesc.once
+	}
+	enumLazy struct {
+		typ reflect.Type
+		new func(pref.EnumNumber) pref.Enum
+
+		values     enumValueDescs
+		resvNames  names
+		resvRanges enumRanges
+		options    []byte
+	}
+	enumValueDesc struct {
+		baseDesc
+
+		number  pref.EnumNumber
+		options []byte
+	}
+)
+
+func (ed *enumDesc) GoType() reflect.Type            { return ed.lazyInit().typ }
+func (ed *enumDesc) New(n pref.EnumNumber) pref.Enum { return ed.lazyInit().new(n) }
+func (ed *enumDesc) Options() pref.OptionsMessage {
+	return unmarshalOptions(ptype.X.EnumOptions(), ed.lazyInit().options)
+}
+func (ed *enumDesc) Values() pref.EnumValueDescriptors { return &ed.lazyInit().values }
+func (ed *enumDesc) ReservedNames() pref.Names         { return &ed.lazyInit().resvNames }
+func (ed *enumDesc) ReservedRanges() pref.EnumRanges   { return &ed.lazyInit().resvRanges }
+func (ed *enumDesc) Format(s fmt.State, r rune)        { pfmt.FormatDesc(s, r, ed) }
+func (ed *enumDesc) ProtoType(pref.EnumDescriptor)     {}
+func (ed *enumDesc) lazyInit() *enumLazy {
+	ed.parentFile.lazyInit() // implicitly initializes enumLazy
+	return ed.lazy
+}
+
+func (ed *enumValueDesc) Options() pref.OptionsMessage {
+	return unmarshalOptions(ptype.X.EnumValueOptions(), ed.options)
+}
+func (ed *enumValueDesc) Number() pref.EnumNumber            { return ed.number }
+func (ed *enumValueDesc) Format(s fmt.State, r rune)         { pfmt.FormatDesc(s, r, ed) }
+func (ed *enumValueDesc) ProtoType(pref.EnumValueDescriptor) {}
+
+type (
+	messageDesc struct {
+		baseDesc
+
+		enums      enumDescs
+		messages   messageDescs
+		extensions extensionDescs
+
+		lazy *messageLazy // protected by fileDesc.once
+	}
+	messageLazy struct {
+		typ reflect.Type
+		new func() pref.Message
+
+		isMapEntry      bool
+		fields          fieldDescs
+		oneofs          oneofDescs
+		resvNames       names
+		resvRanges      fieldRanges
+		reqNumbers      fieldNumbers
+		extRanges       fieldRanges
+		extRangeOptions [][]byte
+		options         []byte
+	}
+	fieldDesc struct {
+		baseDesc
+
+		number      pref.FieldNumber
+		cardinality pref.Cardinality
+		kind        pref.Kind
+		hasJSONName bool
+		jsonName    string
+		hasPacked   bool
+		isPacked    bool
+		isWeak      bool
+		isMap       bool
+		defVal      defaultValue
+		oneofType   pref.OneofDescriptor
+		enumType    pref.EnumDescriptor
+		messageType pref.MessageDescriptor
+		options     []byte
+	}
+	oneofDesc struct {
+		baseDesc
+
+		fields  oneofFields
+		options []byte
+	}
+)
+
+func (md *messageDesc) GoType() reflect.Type { return md.lazyInit().typ }
+func (md *messageDesc) New() pref.Message    { return md.lazyInit().new() }
+func (md *messageDesc) Options() pref.OptionsMessage {
+	return unmarshalOptions(ptype.X.MessageOptions(), md.lazyInit().options)
+}
+func (md *messageDesc) IsMapEntry() bool                   { return md.lazyInit().isMapEntry }
+func (md *messageDesc) Fields() pref.FieldDescriptors      { return &md.lazyInit().fields }
+func (md *messageDesc) Oneofs() pref.OneofDescriptors      { return &md.lazyInit().oneofs }
+func (md *messageDesc) ReservedNames() pref.Names          { return &md.lazyInit().resvNames }
+func (md *messageDesc) ReservedRanges() pref.FieldRanges   { return &md.lazyInit().resvRanges }
+func (md *messageDesc) RequiredNumbers() pref.FieldNumbers { return &md.lazyInit().reqNumbers }
+func (md *messageDesc) ExtensionRanges() pref.FieldRanges  { return &md.lazyInit().extRanges }
+func (md *messageDesc) ExtensionRangeOptions(i int) pref.OptionsMessage {
+	return unmarshalOptions(ptype.X.ExtensionRangeOptions(), md.lazyInit().extRangeOptions[i])
+}
+func (md *messageDesc) Enums() pref.EnumDescriptors           { return &md.enums }
+func (md *messageDesc) Messages() pref.MessageDescriptors     { return &md.messages }
+func (md *messageDesc) Extensions() pref.ExtensionDescriptors { return &md.extensions }
+func (md *messageDesc) Format(s fmt.State, r rune)            { pfmt.FormatDesc(s, r, md) }
+func (md *messageDesc) ProtoType(pref.MessageDescriptor)      {}
+func (md *messageDesc) lazyInit() *messageLazy {
+	md.parentFile.lazyInit() // implicitly initializes messageLazy
+	return md.lazy
+}
+
+func (fd *fieldDesc) Options() pref.OptionsMessage {
+	return unmarshalOptions(ptype.X.FieldOptions(), fd.options)
+}
+func (fd *fieldDesc) Number() pref.FieldNumber                   { return fd.number }
+func (fd *fieldDesc) Cardinality() pref.Cardinality              { return fd.cardinality }
+func (fd *fieldDesc) Kind() pref.Kind                            { return fd.kind }
+func (fd *fieldDesc) HasJSONName() bool                          { return fd.hasJSONName }
+func (fd *fieldDesc) JSONName() string                           { return fd.jsonName }
+func (fd *fieldDesc) IsPacked() bool                             { return fd.isPacked }
+func (fd *fieldDesc) IsWeak() bool                               { return fd.isWeak }
+func (fd *fieldDesc) IsMap() bool                                { return fd.isMap }
+func (fd *fieldDesc) HasDefault() bool                           { return fd.defVal.has }
+func (fd *fieldDesc) Default() pref.Value                        { return fd.defVal.get() }
+func (fd *fieldDesc) DefaultEnumValue() pref.EnumValueDescriptor { return fd.defVal.enum }
+func (fd *fieldDesc) OneofType() pref.OneofDescriptor            { return fd.oneofType }
+func (fd *fieldDesc) ExtendedType() pref.MessageDescriptor       { return nil }
+func (fd *fieldDesc) EnumType() pref.EnumDescriptor              { return fd.enumType }
+func (fd *fieldDesc) MessageType() pref.MessageDescriptor        { return fd.messageType }
+func (fd *fieldDesc) Format(s fmt.State, r rune)                 { pfmt.FormatDesc(s, r, fd) }
+func (fd *fieldDesc) ProtoType(pref.FieldDescriptor)             {}
+
+func (od *oneofDesc) Options() pref.OptionsMessage {
+	return unmarshalOptions(ptype.X.OneofOptions(), od.options)
+}
+func (od *oneofDesc) Fields() pref.FieldDescriptors  { return &od.fields }
+func (od *oneofDesc) Format(s fmt.State, r rune)     { pfmt.FormatDesc(s, r, od) }
+func (od *oneofDesc) ProtoType(pref.OneofDescriptor) {}
+
+type (
+	extensionDesc struct {
+		baseDesc
+
+		number       pref.FieldNumber
+		extendedType pref.MessageDescriptor
+
+		lazy *extensionLazy // protected by fileDesc.once
+	}
+	extensionLazy struct {
+		typ         reflect.Type
+		new         func() pref.Value
+		valueOf     func(interface{}) pref.Value
+		interfaceOf func(pref.Value) interface{}
+
+		cardinality pref.Cardinality
+		kind        pref.Kind
+		// Extensions should not have JSON names, but older versions of protoc
+		// used to set one on the descriptor. Preserve it for now to maintain
+		// the property that protoc 3.6.1 descriptors can round-trip through
+		// this package losslessly.
+		//
+		// TODO: Consider whether to drop JSONName parsing from extensions.
+		hasJSONName bool
+		jsonName    string
+		isPacked    bool
+		defVal      defaultValue
+		enumType    pref.EnumType
+		messageType pref.MessageType
+		options     []byte
+	}
+)
+
+func (xd *extensionDesc) GoType() reflect.Type                 { return xd.lazyInit().typ }
+func (xd *extensionDesc) New() pref.Value                      { return xd.lazyInit().new() }
+func (xd *extensionDesc) ValueOf(v interface{}) pref.Value     { return xd.lazyInit().valueOf(v) }
+func (xd *extensionDesc) InterfaceOf(v pref.Value) interface{} { return xd.lazyInit().interfaceOf(v) }
+func (xd *extensionDesc) Options() pref.OptionsMessage {
+	return unmarshalOptions(ptype.X.FieldOptions(), xd.lazyInit().options)
+}
+func (xd *extensionDesc) Number() pref.FieldNumber                   { return xd.number }
+func (xd *extensionDesc) Cardinality() pref.Cardinality              { return xd.lazyInit().cardinality }
+func (xd *extensionDesc) Kind() pref.Kind                            { return xd.lazyInit().kind }
+func (xd *extensionDesc) HasJSONName() bool                          { return xd.lazyInit().hasJSONName }
+func (xd *extensionDesc) JSONName() string                           { return xd.lazyInit().jsonName }
+func (xd *extensionDesc) IsPacked() bool                             { return xd.lazyInit().isPacked }
+func (xd *extensionDesc) IsWeak() bool                               { return false }
+func (xd *extensionDesc) IsMap() bool                                { return false }
+func (xd *extensionDesc) HasDefault() bool                           { return xd.lazyInit().defVal.has }
+func (xd *extensionDesc) Default() pref.Value                        { return xd.lazyInit().defVal.get() }
+func (xd *extensionDesc) DefaultEnumValue() pref.EnumValueDescriptor { return xd.lazyInit().defVal.enum }
+func (xd *extensionDesc) OneofType() pref.OneofDescriptor            { return nil }
+func (xd *extensionDesc) ExtendedType() pref.MessageDescriptor       { return xd.extendedType }
+func (xd *extensionDesc) EnumType() pref.EnumDescriptor              { return xd.lazyInit().enumType }
+func (xd *extensionDesc) MessageType() pref.MessageDescriptor        { return xd.lazyInit().messageType }
+func (xd *extensionDesc) Format(s fmt.State, r rune)                 { pfmt.FormatDesc(s, r, xd) }
+func (xd *extensionDesc) ProtoType(pref.FieldDescriptor)             {}
+func (xd *extensionDesc) ProtoInternal(pragma.DoNotImplement)        {}
+func (xd *extensionDesc) lazyInit() *extensionLazy {
+	xd.parentFile.lazyInit() // implicitly initializes extensionLazy
+	return xd.lazy
+}
+
+type (
+	serviceDesc struct {
+		baseDesc
+
+		lazy *serviceLazy // protected by fileDesc.once
+	}
+	serviceLazy struct {
+		methods methodDescs
+		options []byte
+	}
+	methodDesc struct {
+		baseDesc
+
+		inputType         pref.MessageDescriptor
+		outputType        pref.MessageDescriptor
+		isStreamingClient bool
+		isStreamingServer bool
+		options           []byte
+	}
+)
+
+func (sd *serviceDesc) Options() pref.OptionsMessage {
+	return unmarshalOptions(ptype.X.ServiceOptions(), sd.lazyInit().options)
+}
+func (sd *serviceDesc) Methods() pref.MethodDescriptors     { return &sd.lazyInit().methods }
+func (sd *serviceDesc) Format(s fmt.State, r rune)          { pfmt.FormatDesc(s, r, sd) }
+func (sd *serviceDesc) ProtoType(pref.ServiceDescriptor)    {}
+func (sd *serviceDesc) ProtoInternal(pragma.DoNotImplement) {}
+func (sd *serviceDesc) lazyInit() *serviceLazy {
+	sd.parentFile.lazyInit() // implicitly initializes serviceLazy
+	return sd.lazy
+}
+
+func (md *methodDesc) Options() pref.OptionsMessage {
+	return unmarshalOptions(ptype.X.MethodOptions(), md.options)
+}
+func (md *methodDesc) InputType() pref.MessageDescriptor   { return md.inputType }
+func (md *methodDesc) OutputType() pref.MessageDescriptor  { return md.outputType }
+func (md *methodDesc) IsStreamingClient() bool             { return md.isStreamingClient }
+func (md *methodDesc) IsStreamingServer() bool             { return md.isStreamingServer }
+func (md *methodDesc) Format(s fmt.State, r rune)          { pfmt.FormatDesc(s, r, md) }
+func (md *methodDesc) ProtoType(pref.MethodDescriptor)     {}
+func (md *methodDesc) ProtoInternal(pragma.DoNotImplement) {}
+
+type baseDesc struct {
+	parentFile *fileDesc
+	parent     pref.Descriptor
+	index      int
+	fullName
+}
+
+func (d *baseDesc) Parent() (pref.Descriptor, bool)     { return d.parent, true }
+func (d *baseDesc) Index() int                          { return d.index }
+func (d *baseDesc) Syntax() pref.Syntax                 { return d.parentFile.Syntax() }
+func (d *baseDesc) IsPlaceholder() bool                 { return false }
+func (d *baseDesc) ProtoInternal(pragma.DoNotImplement) {}
+
+type fullName struct {
+	shortLen int
+	fullName pref.FullName
+}
+
+func (s *fullName) Name() pref.Name         { return pref.Name(s.fullName[len(s.fullName)-s.shortLen:]) }
+func (s *fullName) FullName() pref.FullName { return s.fullName }
+
+func unmarshalOptions(p pref.OptionsMessage, b []byte) pref.OptionsMessage {
+	if b != nil {
+		// TODO: Consider caching the unmarshaled options message.
+		p = reflect.New(reflect.TypeOf(p).Elem()).Interface().(pref.OptionsMessage)
+		if err := proto.Unmarshal(b, p.(proto.Message)); err != nil {
+			panic(err)
+		}
+	}
+	return p.(proto.Message)
+}

+ 356 - 0
internal/fileinit/desc_init.go

@@ -0,0 +1,356 @@
+// Copyright 2018 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package fileinit
+
+import (
+	wire "github.com/golang/protobuf/v2/internal/encoding/wire"
+	pref "github.com/golang/protobuf/v2/reflect/protoreflect"
+)
+
+func newFileDesc(fb FileBuilder) *fileDesc {
+	file := &fileDesc{fileInit: fileInit{
+		RawDescriptor:     fb.RawDescriptor,
+		GoTypes:           fb.GoTypes,
+		DependencyIndexes: fb.DependencyIndexes,
+	}}
+	file.initDecls(len(fb.EnumOutputTypes), len(fb.MessageOutputTypes), len(fb.ExtensionOutputTypes))
+	file.unmarshalSeed(fb.RawDescriptor)
+
+	// Extended message dependencies are eagerly handled since registration
+	// needs this information at program init time.
+	for i := range file.allExtensions {
+		xd := &file.allExtensions[i]
+		xd.extendedType = file.popMessageDependency()
+	}
+
+	file.checkDecls()
+	return file
+}
+
+// initDecls pre-allocates slices for the exact number of enums, messages
+// (excluding map entries), and extensions declared in the proto file.
+// This is done to avoid regrowing the slice, which would change the address
+// for any previously seen declaration.
+//
+// The alloc methods "allocates" slices by pulling from the capacity.
+func (fd *fileDecls) initDecls(numEnums, numMessages, numExtensions int) {
+	*fd = fileDecls{
+		allEnums:      make([]enumDesc, 0, numEnums),
+		allMessages:   make([]messageDesc, 0, numMessages),
+		allExtensions: make([]extensionDesc, 0, numExtensions),
+	}
+}
+
+func (fd *fileDecls) allocEnums(n int) []enumDesc {
+	total := len(fd.allEnums)
+	es := fd.allEnums[total : total+n]
+	fd.allEnums = fd.allEnums[:total+n]
+	return es
+}
+func (fd *fileDecls) allocMessages(n int) []messageDesc {
+	total := len(fd.allMessages)
+	ms := fd.allMessages[total : total+n]
+	fd.allMessages = fd.allMessages[:total+n]
+	return ms
+}
+func (fd *fileDecls) allocExtensions(n int) []extensionDesc {
+	total := len(fd.allExtensions)
+	xs := fd.allExtensions[total : total+n]
+	fd.allExtensions = fd.allExtensions[:total+n]
+	return xs
+}
+
+// checkDecls performs a sanity check that the expected number of expected
+// declarations matches the number that were found in the descriptor proto.
+func (fd *fileDecls) checkDecls() {
+	if len(fd.allEnums) != cap(fd.allEnums) ||
+		len(fd.allMessages) != cap(fd.allMessages) ||
+		len(fd.allExtensions) != cap(fd.allExtensions) {
+		panic("mismatching cardinality")
+	}
+}
+
+func (fd *fileDesc) unmarshalSeed(b []byte) {
+	nb := getNameBuilder()
+	defer putNameBuilder(nb)
+
+	var prevField pref.FieldNumber
+	var numEnums, numMessages, numExtensions, numServices int
+	var posEnums, posMessages, posExtensions, posServices int
+	b0 := b
+	for len(b) > 0 {
+		num, typ, n := wire.ConsumeTag(b)
+		b = b[n:]
+		switch typ {
+		case wire.BytesType:
+			v, m := wire.ConsumeBytes(b)
+			b = b[m:]
+			switch num {
+			case fileDesc_Name:
+				fd.path = nb.MakeString(v)
+			case fileDesc_Package:
+				fd.protoPackage = pref.FullName(nb.MakeString(v))
+			case fileDesc_Enums:
+				if prevField != fileDesc_Enums {
+					if numEnums > 0 {
+						panic("non-contiguous repeated field")
+					}
+					posEnums = len(b0) - len(b) - n - m
+				}
+				numEnums++
+			case fileDesc_Messages:
+				if prevField != fileDesc_Messages {
+					if numMessages > 0 {
+						panic("non-contiguous repeated field")
+					}
+					posMessages = len(b0) - len(b) - n - m
+				}
+				numMessages++
+			case fileDesc_Extensions:
+				if prevField != fileDesc_Extensions {
+					if numExtensions > 0 {
+						panic("non-contiguous repeated field")
+					}
+					posExtensions = len(b0) - len(b) - n - m
+				}
+				numExtensions++
+			case fileDesc_Services:
+				if prevField != fileDesc_Services {
+					if numServices > 0 {
+						panic("non-contiguous repeated field")
+					}
+					posServices = len(b0) - len(b) - n - m
+				}
+				numServices++
+			}
+			prevField = num
+		default:
+			m := wire.ConsumeFieldValue(num, typ, b)
+			b = b[m:]
+			prevField = -1 // ignore known field numbers of unknown wire type
+		}
+	}
+
+	// Must allocate all declarations before parsing each descriptor type
+	// to ensure we handled all descriptors in "flattened ordering".
+	if numEnums > 0 {
+		fd.enums.list = fd.allocEnums(numEnums)
+	}
+	if numMessages > 0 {
+		fd.messages.list = fd.allocMessages(numMessages)
+	}
+	if numExtensions > 0 {
+		fd.extensions.list = fd.allocExtensions(numExtensions)
+	}
+	if numServices > 0 {
+		fd.services.list = make([]serviceDesc, numServices)
+	}
+
+	if numEnums > 0 {
+		b := b0[posEnums:]
+		for i := range fd.enums.list {
+			_, n := wire.ConsumeVarint(b)
+			v, m := wire.ConsumeBytes(b[n:])
+			fd.enums.list[i].unmarshalSeed(v, nb, fd, fd, i)
+			b = b[n+m:]
+		}
+	}
+	if numMessages > 0 {
+		b := b0[posMessages:]
+		for i := range fd.messages.list {
+			_, n := wire.ConsumeVarint(b)
+			v, m := wire.ConsumeBytes(b[n:])
+			fd.messages.list[i].unmarshalSeed(v, nb, fd, fd, i)
+			b = b[n+m:]
+		}
+	}
+	if numExtensions > 0 {
+		b := b0[posExtensions:]
+		for i := range fd.extensions.list {
+			_, n := wire.ConsumeVarint(b)
+			v, m := wire.ConsumeBytes(b[n:])
+			fd.extensions.list[i].unmarshalSeed(v, nb, fd, fd, i)
+			b = b[n+m:]
+		}
+	}
+	if numServices > 0 {
+		b := b0[posServices:]
+		for i := range fd.services.list {
+			_, n := wire.ConsumeVarint(b)
+			v, m := wire.ConsumeBytes(b[n:])
+			fd.services.list[i].unmarshalSeed(v, nb, fd, fd, i)
+			b = b[n+m:]
+		}
+	}
+}
+
+func (ed *enumDesc) unmarshalSeed(b []byte, nb *nameBuilder, pf *fileDesc, pd pref.Descriptor, i int) {
+	ed.parentFile = pf
+	ed.parent = pd
+	ed.index = i
+
+	for len(b) > 0 {
+		num, typ, n := wire.ConsumeTag(b)
+		b = b[n:]
+		switch typ {
+		case wire.BytesType:
+			v, m := wire.ConsumeBytes(b)
+			b = b[m:]
+			switch num {
+			case enumDesc_Name:
+				ed.fullName = nb.AppendFullName(pd.FullName(), v)
+			}
+		default:
+			m := wire.ConsumeFieldValue(num, typ, b)
+			b = b[m:]
+		}
+	}
+}
+
+func (md *messageDesc) unmarshalSeed(b []byte, nb *nameBuilder, pf *fileDesc, pd pref.Descriptor, i int) {
+	md.parentFile = pf
+	md.parent = pd
+	md.index = i
+
+	var prevField pref.FieldNumber
+	var numEnums, numMessages, numExtensions int
+	var posEnums, posMessages, posExtensions int
+	b0 := b
+	for len(b) > 0 {
+		num, typ, n := wire.ConsumeTag(b)
+		b = b[n:]
+		switch typ {
+		case wire.BytesType:
+			v, m := wire.ConsumeBytes(b)
+			b = b[m:]
+			switch num {
+			case messageDesc_Name:
+				md.fullName = nb.AppendFullName(pd.FullName(), v)
+			case messageDesc_Enums:
+				if prevField != messageDesc_Enums {
+					if numEnums > 0 {
+						panic("non-contiguous repeated field")
+					}
+					posEnums = len(b0) - len(b) - n - m
+				}
+				numEnums++
+			case messageDesc_Messages:
+				if prevField != messageDesc_Messages {
+					if numMessages > 0 {
+						panic("non-contiguous repeated field")
+					}
+					posMessages = len(b0) - len(b) - n - m
+				}
+				numMessages++
+			case messageDesc_Extensions:
+				if prevField != messageDesc_Extensions {
+					if numExtensions > 0 {
+						panic("non-contiguous repeated field")
+					}
+					posExtensions = len(b0) - len(b) - n - m
+				}
+				numExtensions++
+			}
+			prevField = num
+		default:
+			m := wire.ConsumeFieldValue(num, typ, b)
+			b = b[m:]
+			prevField = -1 // ignore known field numbers of unknown wire type
+		}
+	}
+
+	// Must allocate all declarations before parsing each descriptor type
+	// to ensure we handled all descriptors in "flattened ordering".
+	if numEnums > 0 {
+		md.enums.list = md.parentFile.allocEnums(numEnums)
+	}
+	if numMessages > 0 {
+		md.messages.list = md.parentFile.allocMessages(numMessages)
+	}
+	if numExtensions > 0 {
+		md.extensions.list = md.parentFile.allocExtensions(numExtensions)
+	}
+
+	if numEnums > 0 {
+		b := b0[posEnums:]
+		for i := range md.enums.list {
+			_, n := wire.ConsumeVarint(b)
+			v, m := wire.ConsumeBytes(b[n:])
+			md.enums.list[i].unmarshalSeed(v, nb, pf, md, i)
+			b = b[n+m:]
+		}
+	}
+	if numMessages > 0 {
+		b := b0[posMessages:]
+		for i := range md.messages.list {
+			_, n := wire.ConsumeVarint(b)
+			v, m := wire.ConsumeBytes(b[n:])
+			md.messages.list[i].unmarshalSeed(v, nb, pf, md, i)
+			b = b[n+m:]
+		}
+	}
+	if numExtensions > 0 {
+		b := b0[posExtensions:]
+		for i := range md.extensions.list {
+			_, n := wire.ConsumeVarint(b)
+			v, m := wire.ConsumeBytes(b[n:])
+			md.extensions.list[i].unmarshalSeed(v, nb, pf, md, i)
+			b = b[n+m:]
+		}
+	}
+}
+
+func (xd *extensionDesc) unmarshalSeed(b []byte, nb *nameBuilder, pf *fileDesc, pd pref.Descriptor, i int) {
+	xd.parentFile = pf
+	xd.parent = pd
+	xd.index = i
+
+	for len(b) > 0 {
+		num, typ, n := wire.ConsumeTag(b)
+		b = b[n:]
+		switch typ {
+		case wire.VarintType:
+			v, m := wire.ConsumeVarint(b)
+			b = b[m:]
+			switch num {
+			case fieldDesc_Number:
+				xd.number = pref.FieldNumber(v)
+			}
+		case wire.BytesType:
+			v, m := wire.ConsumeBytes(b)
+			b = b[m:]
+			switch num {
+			case fieldDesc_Name:
+				xd.fullName = nb.AppendFullName(pd.FullName(), v)
+			}
+		default:
+			m := wire.ConsumeFieldValue(num, typ, b)
+			b = b[m:]
+		}
+	}
+}
+
+func (sd *serviceDesc) unmarshalSeed(b []byte, nb *nameBuilder, pf *fileDesc, pd pref.Descriptor, i int) {
+	sd.parentFile = pf
+	sd.parent = pd
+	sd.index = i
+
+	for len(b) > 0 {
+		num, typ, n := wire.ConsumeTag(b)
+		b = b[n:]
+		switch typ {
+		case wire.BytesType:
+			v, m := wire.ConsumeBytes(b)
+			b = b[m:]
+			switch num {
+			case serviceDesc_Name:
+				sd.fullName = nb.AppendFullName(pd.FullName(), v)
+			}
+		default:
+			m := wire.ConsumeFieldValue(num, typ, b)
+			b = b[m:]
+		}
+	}
+}

+ 878 - 0
internal/fileinit/desc_lazy.go

@@ -0,0 +1,878 @@
+// Copyright 2018 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package fileinit
+
+import (
+	"bytes"
+	"fmt"
+	"reflect"
+
+	defval "github.com/golang/protobuf/v2/internal/encoding/defval"
+	wire "github.com/golang/protobuf/v2/internal/encoding/wire"
+	pimpl "github.com/golang/protobuf/v2/internal/impl"
+	pvalue "github.com/golang/protobuf/v2/internal/value"
+	pref "github.com/golang/protobuf/v2/reflect/protoreflect"
+	ptype "github.com/golang/protobuf/v2/reflect/prototype"
+)
+
+func (file *fileDesc) lazyInit() *fileLazy {
+	file.once.Do(func() {
+		file.unmarshalFull(file.RawDescriptor)
+		file.resolveImports()
+		file.resolveEnums()
+		file.resolveMessages()
+		file.resolveExtensions()
+		file.resolveServices()
+		file.finishInit()
+	})
+	return file.lazy
+}
+
+func (file *fileDesc) resolveImports() {
+	// TODO: Resolve file dependencies.
+}
+
+func (file *fileDesc) resolveEnums() {
+	enumDecls := file.GoTypes[:len(file.allEnums)]
+	for i := range file.allEnums {
+		ed := &file.allEnums[i]
+
+		// Associate the EnumType with a concrete Go type.
+		enumCache := map[pref.EnumNumber]pref.Enum{}
+		ed.lazy.typ = reflect.TypeOf(enumDecls[i])
+		ed.lazy.new = func(n pref.EnumNumber) pref.Enum {
+			if v, ok := enumCache[n]; ok {
+				return v
+			}
+			v := reflect.New(ed.lazy.typ).Elem()
+			v.SetInt(int64(n))
+			return v.Interface().(pref.Enum)
+		}
+		for i := range ed.lazy.values.list {
+			n := ed.lazy.values.list[i].number
+			enumCache[n] = ed.lazy.new(n)
+		}
+	}
+}
+
+func (file *fileDesc) resolveMessages() {
+	messageDecls := file.GoTypes[len(file.allEnums):]
+	for i := range file.allMessages {
+		md := &file.allMessages[i]
+
+		// Associate the MessageType with a concrete Go type.
+		//
+		// Note that descriptors for map entries, which have no associated
+		// Go type, also implement the protoreflect.MessageType interface,
+		// but have a GoType accessor that reports nil. Calling New results
+		// in a panic, which is sensible behavior.
+		md.lazy.typ = reflect.TypeOf(messageDecls[i])
+		md.lazy.new = func() pref.Message {
+			t := md.lazy.typ.Elem()
+			return reflect.New(t).Interface().(pref.ProtoMessage).ProtoReflect()
+		}
+
+		// Resolve message field dependencies.
+		for j := range md.lazy.fields.list {
+			fd := &md.lazy.fields.list[j]
+			if fd.isWeak {
+				continue
+			}
+
+			switch fd.kind {
+			case pref.EnumKind:
+				fd.enumType = file.popEnumDependency()
+			case pref.MessageKind, pref.GroupKind:
+				fd.messageType = file.popMessageDependency()
+			}
+			fd.isMap = file.isMapEntry(fd.messageType)
+			if !fd.hasPacked && file.lazy.syntax != pref.Proto2 && fd.cardinality == pref.Repeated {
+				switch fd.kind {
+				case pref.StringKind, pref.BytesKind, pref.MessageKind, pref.GroupKind:
+					fd.isPacked = false
+				default:
+					fd.isPacked = true
+				}
+			}
+			fd.defVal.lazyInit(fd.kind, file.enumValuesOf(fd.enumType))
+		}
+	}
+}
+
+func (file *fileDesc) resolveExtensions() {
+	for i := range file.allExtensions {
+		xd := &file.allExtensions[i]
+
+		// Associate the ExtensionType with a concrete Go type.
+		var typ reflect.Type
+		switch xd.lazy.kind {
+		case pref.EnumKind, pref.MessageKind, pref.GroupKind:
+			typ = reflect.TypeOf(file.GoTypes[file.DependencyIndexes[0]])
+		default:
+			typ = goTypeForPBKind[xd.lazy.kind]
+		}
+		switch xd.lazy.cardinality {
+		case pref.Optional:
+			switch xd.lazy.kind {
+			case pref.EnumKind:
+				xd.lazy.typ = typ
+				xd.lazy.new = func() pref.Value {
+					return xd.lazy.defVal.get()
+				}
+				xd.lazy.valueOf = func(v interface{}) pref.Value {
+					ev := v.(pref.Enum)
+					return pref.ValueOf(ev.Number())
+				}
+				xd.lazy.interfaceOf = func(pv pref.Value) interface{} {
+					return xd.lazy.enumType.New(pv.Enum())
+				}
+			case pref.MessageKind, pref.GroupKind:
+				xd.lazy.typ = typ
+				xd.lazy.new = func() pref.Value {
+					return pref.ValueOf(xd.lazy.messageType.New())
+				}
+				xd.lazy.valueOf = func(v interface{}) pref.Value {
+					mv := v.(pref.ProtoMessage).ProtoReflect()
+					return pref.ValueOf(mv)
+				}
+				xd.lazy.interfaceOf = func(pv pref.Value) interface{} {
+					return pv.Message().Interface()
+				}
+			default:
+				xd.lazy.typ = goTypeForPBKind[xd.lazy.kind]
+				xd.lazy.new = func() pref.Value {
+					return xd.lazy.defVal.get()
+				}
+				xd.lazy.valueOf = func(v interface{}) pref.Value {
+					return pref.ValueOf(v)
+				}
+				xd.lazy.interfaceOf = func(pv pref.Value) interface{} {
+					return pv.Interface()
+				}
+			}
+		case pref.Repeated:
+			c := pvalue.NewConverter(typ, xd.lazy.kind)
+			xd.lazy.typ = reflect.PtrTo(reflect.SliceOf(typ))
+			xd.lazy.new = func() pref.Value {
+				v := reflect.New(xd.lazy.typ.Elem()).Interface()
+				return pref.ValueOf(pvalue.ListOf(v, c))
+			}
+			xd.lazy.valueOf = func(v interface{}) pref.Value {
+				return pref.ValueOf(pvalue.ListOf(v, c))
+			}
+			xd.lazy.interfaceOf = func(pv pref.Value) interface{} {
+				return pv.List().(pvalue.Unwrapper).ProtoUnwrap()
+			}
+		default:
+			panic(fmt.Sprintf("invalid cardinality: %v", xd.lazy.cardinality))
+		}
+
+		// Resolve extension field dependency.
+		switch xd.lazy.kind {
+		case pref.EnumKind:
+			xd.lazy.enumType = file.popEnumDependency()
+		case pref.MessageKind, pref.GroupKind:
+			xd.lazy.messageType = file.popMessageDependency()
+		}
+		xd.lazy.defVal.lazyInit(xd.lazy.kind, file.enumValuesOf(xd.lazy.enumType))
+	}
+}
+
+var goTypeForPBKind = map[pref.Kind]reflect.Type{
+	pref.BoolKind:     reflect.TypeOf(bool(false)),
+	pref.Int32Kind:    reflect.TypeOf(int32(0)),
+	pref.Sint32Kind:   reflect.TypeOf(int32(0)),
+	pref.Sfixed32Kind: reflect.TypeOf(int32(0)),
+	pref.Int64Kind:    reflect.TypeOf(int64(0)),
+	pref.Sint64Kind:   reflect.TypeOf(int64(0)),
+	pref.Sfixed64Kind: reflect.TypeOf(int64(0)),
+	pref.Uint32Kind:   reflect.TypeOf(uint32(0)),
+	pref.Fixed32Kind:  reflect.TypeOf(uint32(0)),
+	pref.Uint64Kind:   reflect.TypeOf(uint64(0)),
+	pref.Fixed64Kind:  reflect.TypeOf(uint64(0)),
+	pref.FloatKind:    reflect.TypeOf(float32(0)),
+	pref.DoubleKind:   reflect.TypeOf(float64(0)),
+	pref.StringKind:   reflect.TypeOf(string("")),
+	pref.BytesKind:    reflect.TypeOf([]byte(nil)),
+}
+
+func (file *fileDesc) resolveServices() {
+	for i := range file.services.list {
+		sd := &file.services.list[i]
+
+		// Resolve method dependencies.
+		for j := range sd.lazy.methods.list {
+			md := &sd.lazy.methods.list[j]
+			md.inputType = file.popMessageDependency()
+			md.outputType = file.popMessageDependency()
+		}
+	}
+}
+
+// isMapEntry reports whether the message is a map entry, being careful to
+// avoid calling the IsMapEntry method if the message is declared
+// within the same file (which would cause a recursive init deadlock).
+func (fd *fileDesc) isMapEntry(md pref.MessageDescriptor) bool {
+	if md == nil {
+		return false
+	}
+	if md, ok := md.(*messageDesc); ok && md.parentFile == fd {
+		return md.lazy.isMapEntry
+	}
+	return md.IsMapEntry()
+}
+
+// enumValuesOf retrieves the list of enum values for the given enum,
+// being careful to avoid calling the Values method if the enum is declared
+// within the same file (which would cause a recursive init deadlock).
+func (fd *fileDesc) enumValuesOf(ed pref.EnumDescriptor) pref.EnumValueDescriptors {
+	if ed == nil {
+		return nil
+	}
+	if ed, ok := ed.(*enumDesc); ok && ed.parentFile == fd {
+		return &ed.lazy.values
+	}
+	return ed.Values()
+}
+
+func (fd *fileDesc) popEnumDependency() pref.EnumType {
+	depIdx := fd.popDependencyIndex()
+	if depIdx < len(fd.allEnums)+len(fd.allMessages) {
+		return &fd.allEnums[depIdx]
+	} else {
+		return pimpl.Export{}.EnumTypeOf(fd.GoTypes[depIdx])
+	}
+}
+
+func (fd *fileDesc) popMessageDependency() pref.MessageType {
+	depIdx := fd.popDependencyIndex()
+	if depIdx < len(fd.allEnums)+len(fd.allMessages) {
+		return &fd.allMessages[depIdx-len(fd.allEnums)]
+	} else {
+		return pimpl.Export{}.MessageTypeOf(fd.GoTypes[depIdx])
+	}
+}
+
+func (fi *fileInit) popDependencyIndex() int {
+	depIdx := fi.DependencyIndexes[0]
+	fi.DependencyIndexes = fi.DependencyIndexes[1:]
+	return int(depIdx)
+}
+
+func (fi *fileInit) finishInit() {
+	if len(fi.DependencyIndexes) > 0 {
+		panic("unused dependencies")
+	}
+	*fi = fileInit{} // clear fileInit for GC to reclaim resources
+}
+
+type defaultValue struct {
+	has   bool
+	val   pref.Value
+	enum  pref.EnumValueDescriptor
+	check func() // only set for non-empty bytes
+}
+
+func (dv *defaultValue) get() pref.Value {
+	if dv.check != nil {
+		dv.check()
+	}
+	return dv.val
+}
+
+func (dv *defaultValue) lazyInit(k pref.Kind, eds pref.EnumValueDescriptors) {
+	if dv.has {
+		switch k {
+		case pref.EnumKind:
+			// File descriptors always store default enums by name.
+			dv.enum = eds.ByName(pref.Name(dv.val.String()))
+			dv.val = pref.ValueOf(dv.enum.Number())
+		case pref.BytesKind:
+			// Store a copy of the default bytes, so that we can detect
+			// accidental mutations of the original value.
+			b := append([]byte(nil), dv.val.Bytes()...)
+			dv.check = func() {
+				if !bytes.Equal(b, dv.val.Bytes()) {
+					// TODO: Avoid panic if we're running with the race detector
+					// and instead spawn a goroutine that periodically resets
+					// this value back to the original to induce a race.
+					panic("detected mutation on the default bytes")
+				}
+			}
+		}
+	} else {
+		switch k {
+		case pref.BoolKind:
+			dv.val = pref.ValueOf(false)
+		case pref.Int32Kind, pref.Sint32Kind, pref.Sfixed32Kind:
+			dv.val = pref.ValueOf(int32(0))
+		case pref.Int64Kind, pref.Sint64Kind, pref.Sfixed64Kind:
+			dv.val = pref.ValueOf(int64(0))
+		case pref.Uint32Kind, pref.Fixed32Kind:
+			dv.val = pref.ValueOf(uint32(0))
+		case pref.Uint64Kind, pref.Fixed64Kind:
+			dv.val = pref.ValueOf(uint64(0))
+		case pref.FloatKind:
+			dv.val = pref.ValueOf(float32(0))
+		case pref.DoubleKind:
+			dv.val = pref.ValueOf(float64(0))
+		case pref.StringKind:
+			dv.val = pref.ValueOf(string(""))
+		case pref.BytesKind:
+			dv.val = pref.ValueOf([]byte(nil))
+		case pref.EnumKind:
+			dv.enum = eds.Get(0)
+			dv.val = pref.ValueOf(dv.enum.Number())
+		}
+	}
+}
+
+func (fd *fileDesc) unmarshalFull(b []byte) {
+	nb := getNameBuilder()
+	defer putNameBuilder(nb)
+
+	var hasSyntax bool
+	var enumIdx, messageIdx, extensionIdx, serviceIdx int
+	fd.lazy = &fileLazy{byName: make(map[pref.FullName]pref.Descriptor)}
+	for len(b) > 0 {
+		num, typ, n := wire.ConsumeTag(b)
+		b = b[n:]
+		switch typ {
+		case wire.VarintType:
+			v, m := wire.ConsumeVarint(b)
+			b = b[m:]
+			switch num {
+			case fileDesc_PublicImports:
+				fd.lazy.imports[v].IsPublic = true
+			case fileDesc_WeakImports:
+				fd.lazy.imports[v].IsWeak = true
+			}
+		case wire.BytesType:
+			v, m := wire.ConsumeBytes(b)
+			b = b[m:]
+			switch num {
+			case fileDesc_Syntax:
+				hasSyntax = true
+				switch string(v) {
+				case "proto2":
+					fd.lazy.syntax = pref.Proto2
+				case "proto3":
+					fd.lazy.syntax = pref.Proto3
+				default:
+					panic("invalid syntax")
+				}
+			case fileDesc_Imports:
+				fd.lazy.imports = append(fd.lazy.imports, pref.FileImport{
+					FileDescriptor: ptype.PlaceholderFile(nb.MakeString(v), ""),
+				})
+			case fileDesc_Enums:
+				fd.enums.list[enumIdx].unmarshalFull(v, nb)
+				enumIdx++
+			case fileDesc_Messages:
+				fd.messages.list[messageIdx].unmarshalFull(v, nb)
+				messageIdx++
+			case fileDesc_Extensions:
+				fd.extensions.list[extensionIdx].unmarshalFull(v, nb)
+				extensionIdx++
+			case fileDesc_Services:
+				fd.services.list[serviceIdx].unmarshalFull(v, nb)
+				serviceIdx++
+			case fileDesc_Options:
+				fd.lazy.options = append(fd.lazy.options, v...)
+			}
+		default:
+			m := wire.ConsumeFieldValue(num, typ, b)
+			b = b[m:]
+		}
+	}
+
+	// If syntax is missing, it is assumed to be proto2.
+	if !hasSyntax {
+		fd.lazy.syntax = pref.Proto2
+	}
+}
+
+func (ed *enumDesc) unmarshalFull(b []byte, nb *nameBuilder) {
+	var rawValues [][]byte
+	ed.lazy = new(enumLazy)
+	for len(b) > 0 {
+		num, typ, n := wire.ConsumeTag(b)
+		b = b[n:]
+		switch typ {
+		case wire.BytesType:
+			v, m := wire.ConsumeBytes(b)
+			b = b[m:]
+			switch num {
+			case enumDesc_Values:
+				rawValues = append(rawValues, v)
+			case enumDesc_ReservedNames:
+				ed.lazy.resvNames.list = append(ed.lazy.resvNames.list, pref.Name(nb.MakeString(v)))
+			case enumDesc_ReservedRanges:
+				ed.lazy.resvRanges.list = append(ed.lazy.resvRanges.list, unmarshalEnumReservedRange(v))
+			case enumDesc_Options:
+				ed.lazy.options = append(ed.lazy.options, v...)
+			}
+		default:
+			m := wire.ConsumeFieldValue(num, typ, b)
+			b = b[m:]
+		}
+	}
+
+	if len(rawValues) > 0 {
+		ed.lazy.values.list = make([]enumValueDesc, len(rawValues))
+		for i, b := range rawValues {
+			ed.lazy.values.list[i].unmarshalFull(b, nb, ed.parentFile, ed, i)
+		}
+	}
+
+	ed.parentFile.lazy.byName[ed.FullName()] = ed
+}
+
+func unmarshalEnumReservedRange(b []byte) (r [2]pref.EnumNumber) {
+	for len(b) > 0 {
+		num, typ, n := wire.ConsumeTag(b)
+		b = b[n:]
+		switch typ {
+		case wire.VarintType:
+			v, m := wire.ConsumeVarint(b)
+			b = b[m:]
+			switch num {
+			case enumReservedRange_Start:
+				r[0] = pref.EnumNumber(v)
+			case enumReservedRange_End:
+				r[1] = pref.EnumNumber(v)
+			}
+		default:
+			m := wire.ConsumeFieldValue(num, typ, b)
+			b = b[m:]
+		}
+	}
+	return r
+}
+
+func (vd *enumValueDesc) unmarshalFull(b []byte, nb *nameBuilder, pf *fileDesc, pd pref.Descriptor, i int) {
+	vd.parentFile = pf
+	vd.parent = pd
+	vd.index = i
+
+	for len(b) > 0 {
+		num, typ, n := wire.ConsumeTag(b)
+		b = b[n:]
+		switch typ {
+		case wire.VarintType:
+			v, m := wire.ConsumeVarint(b)
+			b = b[m:]
+			switch num {
+			case enumValueDesc_Number:
+				vd.number = pref.EnumNumber(v)
+			}
+		case wire.BytesType:
+			v, m := wire.ConsumeBytes(b)
+			b = b[m:]
+			switch num {
+			case enumValueDesc_Name:
+				vd.fullName = nb.AppendFullName(pd.FullName(), v)
+			case enumValueDesc_Options:
+				vd.options = append(vd.options, v...)
+			}
+		default:
+			m := wire.ConsumeFieldValue(num, typ, b)
+			b = b[m:]
+		}
+	}
+
+	vd.parentFile.lazy.byName[vd.FullName()] = vd
+}
+
+func (md *messageDesc) unmarshalFull(b []byte, nb *nameBuilder) {
+	var rawFields, rawOneofs [][]byte
+	var enumIdx, messageIdx, extensionIdx int
+	md.lazy = new(messageLazy)
+	for len(b) > 0 {
+		num, typ, n := wire.ConsumeTag(b)
+		b = b[n:]
+		switch typ {
+		case wire.BytesType:
+			v, m := wire.ConsumeBytes(b)
+			b = b[m:]
+			switch num {
+			case messageDesc_Fields:
+				rawFields = append(rawFields, v)
+			case messageDesc_Oneofs:
+				rawOneofs = append(rawOneofs, v)
+			case messageDesc_ReservedNames:
+				md.lazy.resvNames.list = append(md.lazy.resvNames.list, pref.Name(nb.MakeString(v)))
+			case messageDesc_ReservedRanges:
+				md.lazy.resvRanges.list = append(md.lazy.resvRanges.list, unmarshalMessageReservedRange(v))
+			case messageDesc_ExtensionRanges:
+				r, opts := unmarshalMessageExtensionRange(v)
+				md.lazy.extRanges.list = append(md.lazy.extRanges.list, r)
+				md.lazy.extRangeOptions = append(md.lazy.extRangeOptions, opts)
+			case messageDesc_Enums:
+				md.enums.list[enumIdx].unmarshalFull(v, nb)
+				enumIdx++
+			case messageDesc_Messages:
+				md.messages.list[messageIdx].unmarshalFull(v, nb)
+				messageIdx++
+			case messageDesc_Extensions:
+				md.extensions.list[extensionIdx].unmarshalFull(v, nb)
+				extensionIdx++
+			case messageDesc_Options:
+				md.unmarshalOptions(v)
+			}
+		default:
+			m := wire.ConsumeFieldValue(num, typ, b)
+			b = b[m:]
+		}
+	}
+
+	if len(rawFields) > 0 || len(rawOneofs) > 0 {
+		md.lazy.fields.list = make([]fieldDesc, len(rawFields))
+		md.lazy.oneofs.list = make([]oneofDesc, len(rawOneofs))
+		for i, b := range rawFields {
+			fd := &md.lazy.fields.list[i]
+			fd.unmarshalFull(b, nb, md.parentFile, md, i)
+			if fd.cardinality == pref.Required {
+				md.lazy.reqNumbers.list = append(md.lazy.reqNumbers.list, fd.number)
+			}
+		}
+		for i, b := range rawOneofs {
+			od := &md.lazy.oneofs.list[i]
+			od.unmarshalFull(b, nb, md.parentFile, md, i)
+		}
+	}
+
+	md.parentFile.lazy.byName[md.FullName()] = md
+}
+
+func (md *messageDesc) unmarshalOptions(b []byte) {
+	md.lazy.options = append(md.lazy.options, b...)
+	for len(b) > 0 {
+		num, typ, n := wire.ConsumeTag(b)
+		b = b[n:]
+		switch typ {
+		case wire.VarintType:
+			v, m := wire.ConsumeVarint(b)
+			b = b[m:]
+			switch num {
+			case messageOptions_IsMapEntry:
+				md.lazy.isMapEntry = wire.DecodeBool(v)
+			}
+		default:
+			m := wire.ConsumeFieldValue(num, typ, b)
+			b = b[m:]
+		}
+	}
+}
+
+func unmarshalMessageReservedRange(b []byte) (r [2]pref.FieldNumber) {
+	for len(b) > 0 {
+		num, typ, n := wire.ConsumeTag(b)
+		b = b[n:]
+		switch typ {
+		case wire.VarintType:
+			v, m := wire.ConsumeVarint(b)
+			b = b[m:]
+			switch num {
+			case messageReservedRange_Start:
+				r[0] = pref.FieldNumber(v)
+			case messageReservedRange_End:
+				r[1] = pref.FieldNumber(v)
+			}
+		default:
+			m := wire.ConsumeFieldValue(num, typ, b)
+			b = b[m:]
+		}
+	}
+	return r
+}
+
+func unmarshalMessageExtensionRange(b []byte) (r [2]pref.FieldNumber, opts []byte) {
+	for len(b) > 0 {
+		num, typ, n := wire.ConsumeTag(b)
+		b = b[n:]
+		switch typ {
+		case wire.VarintType:
+			v, m := wire.ConsumeVarint(b)
+			b = b[m:]
+			switch num {
+			case messageExtensionRange_Start:
+				r[0] = pref.FieldNumber(v)
+			case messageExtensionRange_End:
+				r[1] = pref.FieldNumber(v)
+			}
+		case wire.BytesType:
+			v, m := wire.ConsumeBytes(b)
+			b = b[m:]
+			switch num {
+			case messageExtensionRange_Options:
+				opts = append(opts, v...)
+			}
+		default:
+			m := wire.ConsumeFieldValue(num, typ, b)
+			b = b[m:]
+		}
+	}
+	return r, opts
+}
+
+func (fd *fieldDesc) unmarshalFull(b []byte, nb *nameBuilder, pf *fileDesc, pd pref.Descriptor, i int) {
+	fd.parentFile = pf
+	fd.parent = pd
+	fd.index = i
+
+	var rawDefVal []byte
+	var rawTypeName []byte
+	for len(b) > 0 {
+		num, typ, n := wire.ConsumeTag(b)
+		b = b[n:]
+		switch typ {
+		case wire.VarintType:
+			v, m := wire.ConsumeVarint(b)
+			b = b[m:]
+			switch num {
+			case fieldDesc_Number:
+				fd.number = pref.FieldNumber(v)
+			case fieldDesc_Cardinality:
+				fd.cardinality = pref.Cardinality(v)
+			case fieldDesc_Kind:
+				fd.kind = pref.Kind(v)
+			case fieldDesc_OneofIndex:
+				// In messageDesc.UnmarshalFull, we allocate slices for both
+				// the field and oneof descriptors before unmarshaling either
+				// of them. This ensures pointers to slice elements are stable.
+				od := &pd.(*messageDesc).lazy.oneofs.list[v]
+				od.fields.list = append(od.fields.list, fd)
+				if fd.oneofType != nil {
+					panic("oneof type already set")
+				}
+				fd.oneofType = od
+			}
+		case wire.BytesType:
+			v, m := wire.ConsumeBytes(b)
+			b = b[m:]
+			switch num {
+			case fieldDesc_Name:
+				fd.fullName = nb.AppendFullName(pd.FullName(), v)
+			case fieldDesc_JSONName:
+				fd.hasJSONName = true
+				fd.jsonName = nb.MakeString(v)
+			case fieldDesc_Default:
+				fd.defVal.has = true
+				rawDefVal = v
+			case fieldDesc_TypeName:
+				rawTypeName = v
+			case fieldDesc_Options:
+				fd.unmarshalOptions(v)
+			}
+		default:
+			m := wire.ConsumeFieldValue(num, typ, b)
+			b = b[m:]
+		}
+	}
+
+	if !fd.hasJSONName {
+		fd.jsonName = nb.MakeJSONName(fd.Name())
+	}
+	if rawDefVal != nil {
+		var err error
+		fd.defVal.val, err = defval.Unmarshal(string(rawDefVal), fd.kind, defval.Descriptor)
+		if err != nil {
+			panic(err)
+		}
+	}
+	if fd.isWeak {
+		if len(rawTypeName) == 0 || rawTypeName[0] != '.' {
+			panic("weak target name must be fully qualified")
+		}
+		fd.messageType = ptype.PlaceholderMessage(pref.FullName(rawTypeName[1:]))
+	}
+
+	fd.parentFile.lazy.byName[fd.FullName()] = fd
+}
+
+func (fd *fieldDesc) unmarshalOptions(b []byte) {
+	fd.options = append(fd.options, b...)
+	for len(b) > 0 {
+		num, typ, n := wire.ConsumeTag(b)
+		b = b[n:]
+		switch typ {
+		case wire.VarintType:
+			v, m := wire.ConsumeVarint(b)
+			b = b[m:]
+			switch num {
+			case fieldOptions_IsPacked:
+				fd.hasPacked = true
+				fd.isPacked = wire.DecodeBool(v)
+			case fieldOptions_IsWeak:
+				fd.isWeak = wire.DecodeBool(v)
+			}
+		default:
+			m := wire.ConsumeFieldValue(num, typ, b)
+			b = b[m:]
+		}
+	}
+}
+
+func (od *oneofDesc) unmarshalFull(b []byte, nb *nameBuilder, pf *fileDesc, pd pref.Descriptor, i int) {
+	od.parentFile = pf
+	od.parent = pd
+	od.index = i
+
+	for len(b) > 0 {
+		num, typ, n := wire.ConsumeTag(b)
+		b = b[n:]
+		switch typ {
+		case wire.BytesType:
+			v, m := wire.ConsumeBytes(b)
+			b = b[m:]
+			switch num {
+			case oneofDesc_Name:
+				od.fullName = nb.AppendFullName(pd.FullName(), v)
+			case oneofDesc_Options:
+				od.options = append(od.options, v...)
+			}
+		default:
+			m := wire.ConsumeFieldValue(num, typ, b)
+			b = b[m:]
+		}
+	}
+
+	od.parentFile.lazy.byName[od.FullName()] = od
+}
+
+func (xd *extensionDesc) unmarshalFull(b []byte, nb *nameBuilder) {
+	var rawDefVal []byte
+	xd.lazy = new(extensionLazy)
+	for len(b) > 0 {
+		num, typ, n := wire.ConsumeTag(b)
+		b = b[n:]
+		switch typ {
+		case wire.VarintType:
+			v, m := wire.ConsumeVarint(b)
+			b = b[m:]
+			switch num {
+			case fieldDesc_Cardinality:
+				xd.lazy.cardinality = pref.Cardinality(v)
+			case fieldDesc_Kind:
+				xd.lazy.kind = pref.Kind(v)
+			}
+		case wire.BytesType:
+			v, m := wire.ConsumeBytes(b)
+			b = b[m:]
+			switch num {
+			case fieldDesc_JSONName:
+				xd.lazy.hasJSONName = true
+				xd.lazy.jsonName = nb.MakeString(v)
+			case fieldDesc_Default:
+				xd.lazy.defVal.has = true
+				rawDefVal = v
+			case fieldDesc_Options:
+				xd.unmarshalOptions(v)
+			}
+		default:
+			m := wire.ConsumeFieldValue(num, typ, b)
+			b = b[m:]
+		}
+	}
+
+	if rawDefVal != nil {
+		var err error
+		xd.lazy.defVal.val, err = defval.Unmarshal(string(rawDefVal), xd.lazy.kind, defval.Descriptor)
+		if err != nil {
+			panic(err)
+		}
+	}
+
+	xd.parentFile.lazy.byName[xd.FullName()] = xd
+}
+
+func (xd *extensionDesc) unmarshalOptions(b []byte) {
+	xd.lazy.options = append(xd.lazy.options, b...)
+	for len(b) > 0 {
+		num, typ, n := wire.ConsumeTag(b)
+		b = b[n:]
+		switch typ {
+		case wire.VarintType:
+			v, m := wire.ConsumeVarint(b)
+			b = b[m:]
+			switch num {
+			case fieldOptions_IsPacked:
+				xd.lazy.isPacked = wire.DecodeBool(v)
+			}
+		default:
+			m := wire.ConsumeFieldValue(num, typ, b)
+			b = b[m:]
+		}
+	}
+}
+
+func (sd *serviceDesc) unmarshalFull(b []byte, nb *nameBuilder) {
+	var rawMethods [][]byte
+	sd.lazy = new(serviceLazy)
+	for len(b) > 0 {
+		num, typ, n := wire.ConsumeTag(b)
+		b = b[n:]
+		switch typ {
+		case wire.BytesType:
+			v, m := wire.ConsumeBytes(b)
+			b = b[m:]
+			switch num {
+			case serviceDesc_Methods:
+				rawMethods = append(rawMethods, v)
+			case serviceDesc_Options:
+				sd.lazy.options = append(sd.lazy.options, v...)
+			}
+		default:
+			m := wire.ConsumeFieldValue(num, typ, b)
+			b = b[m:]
+		}
+	}
+
+	if len(rawMethods) > 0 {
+		sd.lazy.methods.list = make([]methodDesc, len(rawMethods))
+		for i, b := range rawMethods {
+			sd.lazy.methods.list[i].unmarshalFull(b, nb, sd.parentFile, sd, i)
+		}
+	}
+
+	sd.parentFile.lazy.byName[sd.FullName()] = sd
+}
+
+func (md *methodDesc) unmarshalFull(b []byte, nb *nameBuilder, pf *fileDesc, pd pref.Descriptor, i int) {
+	md.parentFile = pf
+	md.parent = pd
+	md.index = i
+
+	for len(b) > 0 {
+		num, typ, n := wire.ConsumeTag(b)
+		b = b[n:]
+		switch typ {
+		case wire.VarintType:
+			v, m := wire.ConsumeVarint(b)
+			b = b[m:]
+			switch num {
+			case methodDesc_IsStreamingClient:
+				md.isStreamingClient = wire.DecodeBool(v)
+			case methodDesc_IsStreamingServer:
+				md.isStreamingServer = wire.DecodeBool(v)
+			}
+		case wire.BytesType:
+			v, m := wire.ConsumeBytes(b)
+			b = b[m:]
+			switch num {
+			case methodDesc_Name:
+				md.fullName = nb.AppendFullName(pd.FullName(), v)
+			case methodDesc_Options:
+				md.options = append(md.options, v...)
+			}
+		default:
+			m := wire.ConsumeFieldValue(num, typ, b)
+			b = b[m:]
+		}
+	}
+
+	md.parentFile.lazy.byName[md.FullName()] = md
+}

+ 189 - 0
internal/fileinit/desc_list.go

@@ -0,0 +1,189 @@
+// Copyright 2018 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package fileinit
+
+import (
+	"fmt"
+	"sort"
+	"sync"
+
+	pragma "github.com/golang/protobuf/v2/internal/pragma"
+	pfmt "github.com/golang/protobuf/v2/internal/typefmt"
+	pref "github.com/golang/protobuf/v2/reflect/protoreflect"
+)
+
+type fileImports []pref.FileImport
+
+func (p *fileImports) Len() int                            { return len(*p) }
+func (p *fileImports) Get(i int) pref.FileImport           { return (*p)[i] }
+func (p *fileImports) Format(s fmt.State, r rune)          { pfmt.FormatList(s, r, p) }
+func (p *fileImports) ProtoInternal(pragma.DoNotImplement) {}
+
+type names struct {
+	list []pref.Name
+	once sync.Once
+	has  map[pref.Name]struct{} // protected by once
+}
+
+func (p *names) Len() int            { return len(p.list) }
+func (p *names) Get(i int) pref.Name { return p.list[i] }
+func (p *names) Has(s pref.Name) bool {
+	p.once.Do(func() {
+		if len(p.list) > 0 {
+			p.has = make(map[pref.Name]struct{}, len(p.list))
+			for _, s := range p.list {
+				p.has[s] = struct{}{}
+			}
+		}
+	})
+	_, ok := p.has[s]
+	return ok
+}
+func (p *names) Format(s fmt.State, r rune)          { pfmt.FormatList(s, r, p) }
+func (p *names) ProtoInternal(pragma.DoNotImplement) {}
+
+type enumRanges struct {
+	list   [][2]pref.EnumNumber // start inclusive; end inclusive
+	once   sync.Once
+	sorted [][2]pref.EnumNumber         // protected by once
+	has    map[pref.EnumNumber]struct{} // protected by once
+}
+
+func (p *enumRanges) Len() int                     { return len(p.list) }
+func (p *enumRanges) Get(i int) [2]pref.EnumNumber { return p.list[i] }
+func (p *enumRanges) Has(n pref.EnumNumber) bool {
+	p.once.Do(func() {
+		for _, r := range p.list {
+			if r[0] == r[1]-0 {
+				if p.has == nil {
+					p.has = make(map[pref.EnumNumber]struct{}, len(p.list))
+				}
+				p.has[r[0]] = struct{}{}
+			} else {
+				p.sorted = append(p.sorted, r)
+			}
+		}
+		sort.Slice(p.sorted, func(i, j int) bool {
+			return p.sorted[i][0] < p.sorted[j][0]
+		})
+	})
+	if _, ok := p.has[n]; ok {
+		return true
+	}
+	for ls := p.sorted; len(ls) > 0; {
+		i := len(ls) / 2
+		switch r := ls[i]; {
+		case n < r[0]:
+			ls = ls[:i] // search lower
+		case n >= r[1]:
+			ls = ls[i+1:] // search upper
+		default:
+			return true
+		}
+	}
+	return false
+}
+func (p *enumRanges) Format(s fmt.State, r rune)          { pfmt.FormatList(s, r, p) }
+func (p *enumRanges) ProtoInternal(pragma.DoNotImplement) {}
+
+type fieldRanges struct {
+	list   [][2]pref.FieldNumber // start inclusive; end exclusive
+	once   sync.Once
+	sorted [][2]pref.FieldNumber         // protected by once
+	has    map[pref.FieldNumber]struct{} // protected by once
+}
+
+func (p *fieldRanges) Len() int                      { return len(p.list) }
+func (p *fieldRanges) Get(i int) [2]pref.FieldNumber { return p.list[i] }
+func (p *fieldRanges) Has(n pref.FieldNumber) bool {
+	p.once.Do(func() {
+		for _, r := range p.list {
+			if r[0] == r[1]-1 {
+				if p.has == nil {
+					p.has = make(map[pref.FieldNumber]struct{}, len(p.list))
+				}
+				p.has[r[0]] = struct{}{}
+			} else {
+				p.sorted = append(p.sorted, r)
+			}
+		}
+		sort.Slice(p.sorted, func(i, j int) bool {
+			return p.sorted[i][0] < p.sorted[j][0]
+		})
+	})
+	if _, ok := p.has[n]; ok {
+		return true
+	}
+	for ls := p.sorted; len(ls) > 0; {
+		i := len(ls) / 2
+		switch r := ls[i]; {
+		case n < r[0]:
+			ls = ls[:i] // search lower
+		case n > r[1]:
+			ls = ls[i+1:] // search higher
+		default:
+			return true
+		}
+	}
+	return false
+}
+func (p *fieldRanges) Format(s fmt.State, r rune)          { pfmt.FormatList(s, r, p) }
+func (p *fieldRanges) ProtoInternal(pragma.DoNotImplement) {}
+
+type fieldNumbers struct {
+	list []pref.FieldNumber
+	once sync.Once
+	has  map[pref.FieldNumber]struct{} // protected by once
+}
+
+func (p *fieldNumbers) Len() int                   { return len(p.list) }
+func (p *fieldNumbers) Get(i int) pref.FieldNumber { return p.list[i] }
+func (p *fieldNumbers) Has(n pref.FieldNumber) bool {
+	p.once.Do(func() {
+		if len(p.list) > 0 {
+			p.has = make(map[pref.FieldNumber]struct{}, len(p.list))
+			for _, n := range p.list {
+				p.has[n] = struct{}{}
+			}
+		}
+	})
+	_, ok := p.has[n]
+	return ok
+}
+func (p *fieldNumbers) Format(s fmt.State, r rune)          { pfmt.FormatList(s, r, p) }
+func (p *fieldNumbers) ProtoInternal(pragma.DoNotImplement) {}
+
+type oneofFields struct {
+	list   []pref.FieldDescriptor
+	once   sync.Once
+	byName map[pref.Name]pref.FieldDescriptor        // protected by once
+	byJSON map[string]pref.FieldDescriptor           // protected by once
+	byNum  map[pref.FieldNumber]pref.FieldDescriptor // protected by once
+}
+
+func (p *oneofFields) Len() int                                         { return len(p.list) }
+func (p *oneofFields) Get(i int) pref.FieldDescriptor                   { return p.list[i] }
+func (p *oneofFields) ByName(s pref.Name) pref.FieldDescriptor          { return p.lazyInit().byName[s] }
+func (p *oneofFields) ByJSONName(s string) pref.FieldDescriptor         { return p.lazyInit().byJSON[s] }
+func (p *oneofFields) ByNumber(n pref.FieldNumber) pref.FieldDescriptor { return p.lazyInit().byNum[n] }
+func (p *oneofFields) Format(s fmt.State, r rune)                       { pfmt.FormatList(s, r, p) }
+func (p *oneofFields) ProtoInternal(pragma.DoNotImplement)              {}
+
+func (p *oneofFields) lazyInit() *oneofFields {
+	p.once.Do(func() {
+		if len(p.list) > 0 {
+			p.byName = make(map[pref.Name]pref.FieldDescriptor, len(p.list))
+			p.byJSON = make(map[string]pref.FieldDescriptor, len(p.list))
+			p.byNum = make(map[pref.FieldNumber]pref.FieldDescriptor, len(p.list))
+			for _, f := range p.list {
+				// Field names and numbers are guaranteed to be unique.
+				p.byName[f.Name()] = f
+				p.byJSON[f.JSONName()] = f
+				p.byNum[f.Number()] = f
+			}
+		}
+	})
+	return p
+}

+ 345 - 0
internal/fileinit/desc_list_gen.go

@@ -0,0 +1,345 @@
+// Copyright 2018 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style.
+// license that can be found in the LICENSE file.
+
+// Code generated by generate-types. DO NOT EDIT.
+
+package fileinit
+
+import (
+	"fmt"
+	"sync"
+
+	"github.com/golang/protobuf/v2/internal/pragma"
+	"github.com/golang/protobuf/v2/internal/typefmt"
+	"github.com/golang/protobuf/v2/reflect/protoreflect"
+)
+
+type enumDescs struct {
+	list   []enumDesc
+	once   sync.Once
+	byName map[protoreflect.Name]*enumDesc // protected by once
+}
+
+func (p *enumDescs) Len() int {
+	return len(p.list)
+}
+func (p *enumDescs) Get(i int) protoreflect.EnumDescriptor {
+	return &p.list[i]
+}
+func (p *enumDescs) ByName(s protoreflect.Name) protoreflect.EnumDescriptor {
+	if d := p.lazyInit().byName[s]; d != nil {
+		return d
+	}
+	return nil
+}
+func (p *enumDescs) Format(s fmt.State, r rune) {
+	typefmt.FormatList(s, r, p)
+}
+func (p *enumDescs) ProtoInternal(pragma.DoNotImplement) {}
+func (p *enumDescs) lazyInit() *enumDescs {
+	p.once.Do(func() {
+		if len(p.list) > 0 {
+			p.byName = make(map[protoreflect.Name]*enumDesc, len(p.list))
+			for i := range p.list {
+				d := &p.list[i]
+				if _, ok := p.byName[d.Name()]; !ok {
+					p.byName[d.Name()] = d
+				}
+			}
+		}
+	})
+	return p
+}
+
+type enumValueDescs struct {
+	list   []enumValueDesc
+	once   sync.Once
+	byName map[protoreflect.Name]*enumValueDesc       // protected by once
+	byNum  map[protoreflect.EnumNumber]*enumValueDesc // protected by once
+}
+
+func (p *enumValueDescs) Len() int {
+	return len(p.list)
+}
+func (p *enumValueDescs) Get(i int) protoreflect.EnumValueDescriptor {
+	return &p.list[i]
+}
+func (p *enumValueDescs) ByName(s protoreflect.Name) protoreflect.EnumValueDescriptor {
+	if d := p.lazyInit().byName[s]; d != nil {
+		return d
+	}
+	return nil
+}
+func (p *enumValueDescs) ByNumber(n protoreflect.EnumNumber) protoreflect.EnumValueDescriptor {
+	if d := p.lazyInit().byNum[n]; d != nil {
+		return d
+	}
+	return nil
+}
+func (p *enumValueDescs) Format(s fmt.State, r rune) {
+	typefmt.FormatList(s, r, p)
+}
+func (p *enumValueDescs) ProtoInternal(pragma.DoNotImplement) {}
+func (p *enumValueDescs) lazyInit() *enumValueDescs {
+	p.once.Do(func() {
+		if len(p.list) > 0 {
+			p.byName = make(map[protoreflect.Name]*enumValueDesc, len(p.list))
+			p.byNum = make(map[protoreflect.EnumNumber]*enumValueDesc, len(p.list))
+			for i := range p.list {
+				d := &p.list[i]
+				if _, ok := p.byName[d.Name()]; !ok {
+					p.byName[d.Name()] = d
+				}
+				if _, ok := p.byNum[d.Number()]; !ok {
+					p.byNum[d.Number()] = d
+				}
+			}
+		}
+	})
+	return p
+}
+
+type messageDescs struct {
+	list   []messageDesc
+	once   sync.Once
+	byName map[protoreflect.Name]*messageDesc // protected by once
+}
+
+func (p *messageDescs) Len() int {
+	return len(p.list)
+}
+func (p *messageDescs) Get(i int) protoreflect.MessageDescriptor {
+	return &p.list[i]
+}
+func (p *messageDescs) ByName(s protoreflect.Name) protoreflect.MessageDescriptor {
+	if d := p.lazyInit().byName[s]; d != nil {
+		return d
+	}
+	return nil
+}
+func (p *messageDescs) Format(s fmt.State, r rune) {
+	typefmt.FormatList(s, r, p)
+}
+func (p *messageDescs) ProtoInternal(pragma.DoNotImplement) {}
+func (p *messageDescs) lazyInit() *messageDescs {
+	p.once.Do(func() {
+		if len(p.list) > 0 {
+			p.byName = make(map[protoreflect.Name]*messageDesc, len(p.list))
+			for i := range p.list {
+				d := &p.list[i]
+				if _, ok := p.byName[d.Name()]; !ok {
+					p.byName[d.Name()] = d
+				}
+			}
+		}
+	})
+	return p
+}
+
+type fieldDescs struct {
+	list   []fieldDesc
+	once   sync.Once
+	byName map[protoreflect.Name]*fieldDesc        // protected by once
+	byJSON map[string]*fieldDesc                   // protected by once
+	byNum  map[protoreflect.FieldNumber]*fieldDesc // protected by once
+}
+
+func (p *fieldDescs) Len() int {
+	return len(p.list)
+}
+func (p *fieldDescs) Get(i int) protoreflect.FieldDescriptor {
+	return &p.list[i]
+}
+func (p *fieldDescs) ByName(s protoreflect.Name) protoreflect.FieldDescriptor {
+	if d := p.lazyInit().byName[s]; d != nil {
+		return d
+	}
+	return nil
+}
+func (p *fieldDescs) ByJSONName(s string) protoreflect.FieldDescriptor {
+	if d := p.lazyInit().byJSON[s]; d != nil {
+		return d
+	}
+	return nil
+}
+func (p *fieldDescs) ByNumber(n protoreflect.FieldNumber) protoreflect.FieldDescriptor {
+	if d := p.lazyInit().byNum[n]; d != nil {
+		return d
+	}
+	return nil
+}
+func (p *fieldDescs) Format(s fmt.State, r rune) {
+	typefmt.FormatList(s, r, p)
+}
+func (p *fieldDescs) ProtoInternal(pragma.DoNotImplement) {}
+func (p *fieldDescs) lazyInit() *fieldDescs {
+	p.once.Do(func() {
+		if len(p.list) > 0 {
+			p.byName = make(map[protoreflect.Name]*fieldDesc, len(p.list))
+			p.byJSON = make(map[string]*fieldDesc, len(p.list))
+			p.byNum = make(map[protoreflect.FieldNumber]*fieldDesc, len(p.list))
+			for i := range p.list {
+				d := &p.list[i]
+				if _, ok := p.byName[d.Name()]; !ok {
+					p.byName[d.Name()] = d
+				}
+				if _, ok := p.byJSON[d.JSONName()]; !ok {
+					p.byJSON[d.JSONName()] = d
+				}
+				if _, ok := p.byNum[d.Number()]; !ok {
+					p.byNum[d.Number()] = d
+				}
+			}
+		}
+	})
+	return p
+}
+
+type oneofDescs struct {
+	list   []oneofDesc
+	once   sync.Once
+	byName map[protoreflect.Name]*oneofDesc // protected by once
+}
+
+func (p *oneofDescs) Len() int {
+	return len(p.list)
+}
+func (p *oneofDescs) Get(i int) protoreflect.OneofDescriptor {
+	return &p.list[i]
+}
+func (p *oneofDescs) ByName(s protoreflect.Name) protoreflect.OneofDescriptor {
+	if d := p.lazyInit().byName[s]; d != nil {
+		return d
+	}
+	return nil
+}
+func (p *oneofDescs) Format(s fmt.State, r rune) {
+	typefmt.FormatList(s, r, p)
+}
+func (p *oneofDescs) ProtoInternal(pragma.DoNotImplement) {}
+func (p *oneofDescs) lazyInit() *oneofDescs {
+	p.once.Do(func() {
+		if len(p.list) > 0 {
+			p.byName = make(map[protoreflect.Name]*oneofDesc, len(p.list))
+			for i := range p.list {
+				d := &p.list[i]
+				if _, ok := p.byName[d.Name()]; !ok {
+					p.byName[d.Name()] = d
+				}
+			}
+		}
+	})
+	return p
+}
+
+type extensionDescs struct {
+	list   []extensionDesc
+	once   sync.Once
+	byName map[protoreflect.Name]*extensionDesc // protected by once
+}
+
+func (p *extensionDescs) Len() int {
+	return len(p.list)
+}
+func (p *extensionDescs) Get(i int) protoreflect.ExtensionDescriptor {
+	return &p.list[i]
+}
+func (p *extensionDescs) ByName(s protoreflect.Name) protoreflect.ExtensionDescriptor {
+	if d := p.lazyInit().byName[s]; d != nil {
+		return d
+	}
+	return nil
+}
+func (p *extensionDescs) Format(s fmt.State, r rune) {
+	typefmt.FormatList(s, r, p)
+}
+func (p *extensionDescs) ProtoInternal(pragma.DoNotImplement) {}
+func (p *extensionDescs) lazyInit() *extensionDescs {
+	p.once.Do(func() {
+		if len(p.list) > 0 {
+			p.byName = make(map[protoreflect.Name]*extensionDesc, len(p.list))
+			for i := range p.list {
+				d := &p.list[i]
+				if _, ok := p.byName[d.Name()]; !ok {
+					p.byName[d.Name()] = d
+				}
+			}
+		}
+	})
+	return p
+}
+
+type serviceDescs struct {
+	list   []serviceDesc
+	once   sync.Once
+	byName map[protoreflect.Name]*serviceDesc // protected by once
+}
+
+func (p *serviceDescs) Len() int {
+	return len(p.list)
+}
+func (p *serviceDescs) Get(i int) protoreflect.ServiceDescriptor {
+	return &p.list[i]
+}
+func (p *serviceDescs) ByName(s protoreflect.Name) protoreflect.ServiceDescriptor {
+	if d := p.lazyInit().byName[s]; d != nil {
+		return d
+	}
+	return nil
+}
+func (p *serviceDescs) Format(s fmt.State, r rune) {
+	typefmt.FormatList(s, r, p)
+}
+func (p *serviceDescs) ProtoInternal(pragma.DoNotImplement) {}
+func (p *serviceDescs) lazyInit() *serviceDescs {
+	p.once.Do(func() {
+		if len(p.list) > 0 {
+			p.byName = make(map[protoreflect.Name]*serviceDesc, len(p.list))
+			for i := range p.list {
+				d := &p.list[i]
+				if _, ok := p.byName[d.Name()]; !ok {
+					p.byName[d.Name()] = d
+				}
+			}
+		}
+	})
+	return p
+}
+
+type methodDescs struct {
+	list   []methodDesc
+	once   sync.Once
+	byName map[protoreflect.Name]*methodDesc // protected by once
+}
+
+func (p *methodDescs) Len() int {
+	return len(p.list)
+}
+func (p *methodDescs) Get(i int) protoreflect.MethodDescriptor {
+	return &p.list[i]
+}
+func (p *methodDescs) ByName(s protoreflect.Name) protoreflect.MethodDescriptor {
+	if d := p.lazyInit().byName[s]; d != nil {
+		return d
+	}
+	return nil
+}
+func (p *methodDescs) Format(s fmt.State, r rune) {
+	typefmt.FormatList(s, r, p)
+}
+func (p *methodDescs) ProtoInternal(pragma.DoNotImplement) {}
+func (p *methodDescs) lazyInit() *methodDescs {
+	p.once.Do(func() {
+		if len(p.list) > 0 {
+			p.byName = make(map[protoreflect.Name]*methodDesc, len(p.list))
+			for i := range p.list {
+				d := &p.list[i]
+				if _, ok := p.byName[d.Name()]; !ok {
+					p.byName[d.Name()] = d
+				}
+			}
+		}
+	})
+	return p
+}

+ 94 - 0
internal/fileinit/desc_wire.go

@@ -0,0 +1,94 @@
+// Copyright 2018 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package fileinit
+
+// Constants for field numbers of messages declared in descriptor.proto.
+const (
+	// FileDescriptorProto field numbers
+	fileDesc_Syntax        = 12 // optional string
+	fileDesc_Name          = 1  // optional string
+	fileDesc_Package       = 2  // optional string
+	fileDesc_Imports       = 3  // repeated string
+	fileDesc_PublicImports = 10 // repeated int32
+	fileDesc_WeakImports   = 11 // repeated int32
+	fileDesc_Enums         = 5  // repeated EnumDescriptorProto
+	fileDesc_Messages      = 4  // repeated DescriptorProto
+	fileDesc_Extensions    = 7  // repeated FieldDescriptorProto
+	fileDesc_Services      = 6  // repeated ServiceDescriptorProto
+	fileDesc_Options       = 8  // optional FileOptions
+
+	// EnumDescriptorProto field numbers
+	enumDesc_Name           = 1 // optional string
+	enumDesc_Values         = 2 // repeated EnumValueDescriptorProto
+	enumDesc_ReservedNames  = 5 // repeated string
+	enumDesc_ReservedRanges = 4 // repeated EnumReservedRange
+	enumDesc_Options        = 3 // optional EnumOptions
+
+	// EnumReservedRange field numbers
+	enumReservedRange_Start = 1 // optional int32
+	enumReservedRange_End   = 2 // optional int32
+
+	// EnumValueDescriptorProto field numbers
+	enumValueDesc_Name    = 1 // optional string
+	enumValueDesc_Number  = 2 // optional int32
+	enumValueDesc_Options = 3 // optional EnumValueOptions
+
+	// DescriptorProto field numbers
+	messageDesc_Name            = 1  // optional string
+	messageDesc_Fields          = 2  // repeated FieldDescriptorProto
+	messageDesc_Oneofs          = 8  // repeated OneofDescriptorProto
+	messageDesc_ReservedNames   = 10 // repeated string
+	messageDesc_ReservedRanges  = 9  // repeated ReservedRange
+	messageDesc_ExtensionRanges = 5  // repeated ExtensionRange
+	messageDesc_Enums           = 4  // repeated EnumDescriptorProto
+	messageDesc_Messages        = 3  // repeated DescriptorProto
+	messageDesc_Extensions      = 6  // repeated FieldDescriptorProto
+	messageDesc_Options         = 7  // optional MessageOptions
+
+	// ReservedRange field numbers
+	messageReservedRange_Start = 1 // optional int32
+	messageReservedRange_End   = 2 // optional int32
+
+	// ExtensionRange field numbers
+	messageExtensionRange_Start   = 1 // optional int32
+	messageExtensionRange_End     = 2 // optional int32
+	messageExtensionRange_Options = 3 // optional ExtensionRangeOptions
+
+	// MessageOptions field numbers
+	messageOptions_IsMapEntry = 7 // optional bool
+
+	// FieldDescriptorProto field numbers
+	fieldDesc_Name         = 1  // optional string
+	fieldDesc_Number       = 3  // optional int32
+	fieldDesc_Cardinality  = 4  // optional Label
+	fieldDesc_Kind         = 5  // optional Type
+	fieldDesc_JSONName     = 10 // optional string
+	fieldDesc_Default      = 7  // optional string
+	fieldDesc_OneofIndex   = 9  // optional int32
+	fieldDesc_TypeName     = 6  // optional string
+	fieldDesc_ExtendedType = 2  // optional string
+	fieldDesc_Options      = 8  // optional FieldOptions
+
+	// FieldOptions field numbers
+	fieldOptions_IsPacked = 2  // optional bool
+	fieldOptions_IsWeak   = 10 // optional bool
+
+	// OneofDescriptorProto field numbers
+	oneofDesc_Name    = 1 // optional string
+	oneofDesc_Options = 2 // optional OneofOptions
+
+	// ServiceDescriptorProto field numbers
+	serviceDesc_Name    = 1 // optional string
+	serviceDesc_Methods = 2 // repeated MethodDescriptorProto
+	serviceDesc_Options = 3 // optional ServiceOptions
+
+	// MethodDescriptorProto field numbers
+	methodDesc_Name              = 1 // optional string
+	methodDesc_InputType         = 2 // optional string
+	methodDesc_OutputType        = 3 // optional string
+	methodDesc_IsStreamingClient = 5 // optional bool
+	methodDesc_IsStreamingServer = 6 // optional bool
+	methodDesc_Options           = 4 // optional MethodOptions
+)

+ 46 - 0
internal/fileinit/name_pure.go

@@ -0,0 +1,46 @@
+// Copyright 2018 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// +build purego appengine
+
+package fileinit
+
+import pref "github.com/golang/protobuf/v2/reflect/protoreflect"
+
+func getNameBuilder() *nameBuilder { return nil }
+func putNameBuilder(*nameBuilder)  {}
+
+type nameBuilder struct{}
+
+// AppendFullName is equivalent to protoreflect.FullName.Append.
+func (*nameBuilder) AppendFullName(prefix pref.FullName, name []byte) fullName {
+	return fullName{
+		shortLen: len(name),
+		fullName: prefix.Append(pref.Name(name)),
+	}
+}
+
+// MakeString is equivalent to string(b), but optimized for large batches
+// with a shared lifetime.
+func (*nameBuilder) MakeString(b []byte) string {
+	return string(b)
+}
+
+// MakeJSONName creates a JSON name from the protobuf short name.
+func (*nameBuilder) MakeJSONName(s pref.Name) string {
+	var b []byte
+	var wasUnderscore bool
+	for i := 0; i < len(s); i++ { // proto identifiers are always ASCII
+		c := s[i]
+		if c != '_' {
+			isLower := 'a' <= c && c <= 'z'
+			if wasUnderscore && isLower {
+				c -= 'a' - 'A'
+			}
+			b = append(b, c)
+		}
+		wasUnderscore = c == '_'
+	}
+	return string(b)
+}

+ 138 - 0
internal/fileinit/name_unsafe.go

@@ -0,0 +1,138 @@
+// Copyright 2018 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// +build !purego,!appengine
+
+package fileinit
+
+import (
+	"sync"
+	"unsafe"
+
+	pref "github.com/golang/protobuf/v2/reflect/protoreflect"
+)
+
+var nameBuilderPool = sync.Pool{
+	New: func() interface{} { return new(nameBuilder) },
+}
+
+func getNameBuilder() *nameBuilder {
+	return nameBuilderPool.Get().(*nameBuilder)
+}
+func putNameBuilder(b *nameBuilder) {
+	nameBuilderPool.Put(b)
+}
+
+type nameBuilder struct {
+	sb stringBuilder
+}
+
+// AppendFullName is equivalent to protoreflect.FullName.Append,
+// but optimized for large batches where each name has a shared lifetime.
+func (nb *nameBuilder) AppendFullName(prefix pref.FullName, name []byte) fullName {
+	n := len(prefix) + len(".") + len(name)
+	if len(prefix) == 0 {
+		n -= len(".")
+	}
+	nb.grow(n)
+	nb.sb.WriteString(string(prefix))
+	nb.sb.WriteByte('.')
+	nb.sb.Write(name)
+	return fullName{
+		shortLen: len(name),
+		fullName: pref.FullName(nb.last(n)),
+	}
+}
+
+// MakeString is equivalent to string(b), but optimized for large batches
+// with a shared lifetime.
+func (nb *nameBuilder) MakeString(b []byte) string {
+	nb.grow(len(b))
+	nb.sb.Write(b)
+	return nb.last(len(b))
+}
+
+// MakeJSONName creates a JSON name from the protobuf short name.
+func (nb *nameBuilder) MakeJSONName(s pref.Name) string {
+	nb.grow(len(s))
+	var n int
+	var wasUnderscore bool
+	for i := 0; i < len(s); i++ { // proto identifiers are always ASCII
+		c := s[i]
+		if c != '_' {
+			isLower := 'a' <= c && c <= 'z'
+			if wasUnderscore && isLower {
+				c -= 'a' - 'A'
+			}
+			nb.sb.WriteByte(c)
+			n++
+		}
+		wasUnderscore = c == '_'
+	}
+	return nb.last(n)
+}
+
+func (nb *nameBuilder) last(n int) string {
+	s := nb.sb.String()
+	return s[len(s)-n:]
+}
+
+func (nb *nameBuilder) grow(n int) {
+	const batchSize = 1 << 16
+	if nb.sb.Cap()-nb.sb.Len() < n {
+		nb.sb.Reset()
+		nb.sb.Grow(batchSize)
+	}
+}
+
+// stringsBuilder is a simplified copy of the strings.Builder from Go1.12:
+//	* removed the shallow copy check
+//	* removed methods that we do not use (e.g. WriteRune)
+//
+// A forked version is used:
+//	* to enable Go1.9 support, but strings.Builder was added in Go1.10
+//	* for the Cap method, which was missing until Go1.12
+//
+// TODO: Remove this when Go1.12 is the minimally supported toolchain version.
+type stringBuilder struct {
+	buf []byte
+}
+
+func (b *stringBuilder) String() string {
+	return *(*string)(unsafe.Pointer(&b.buf))
+}
+func (b *stringBuilder) Len() int {
+	return len(b.buf)
+}
+func (b *stringBuilder) Cap() int {
+	return cap(b.buf)
+}
+func (b *stringBuilder) Reset() {
+	b.buf = nil
+}
+func (b *stringBuilder) grow(n int) {
+	buf := make([]byte, len(b.buf), 2*cap(b.buf)+n)
+	copy(buf, b.buf)
+	b.buf = buf
+}
+func (b *stringBuilder) Grow(n int) {
+	if n < 0 {
+		panic("stringBuilder.Grow: negative count")
+	}
+	if cap(b.buf)-len(b.buf) < n {
+		b.grow(n)
+	}
+}
+func (b *stringBuilder) Write(p []byte) (int, error) {
+	b.buf = append(b.buf, p...)
+	return len(p), nil
+}
+func (b *stringBuilder) WriteByte(c byte) error {
+	b.buf = append(b.buf, c)
+	return nil
+}
+func (b *stringBuilder) WriteString(s string) (int, error) {
+	b.buf = append(b.buf, s...)
+	return len(s), nil
+}

+ 3 - 3
internal/impl/legacy_extension.go

@@ -153,10 +153,10 @@ func (p legacyExtensionTypes) Len() (n int) {
 }
 
 func (p legacyExtensionTypes) Register(t pref.ExtensionType) {
-	if p.mi.Type.FullName() != t.ExtendedType().FullName() {
+	if p.mi.PBType.FullName() != t.ExtendedType().FullName() {
 		panic("extended type mismatch")
 	}
-	if !p.mi.Type.ExtensionRanges().Has(t.Number()) {
+	if !p.mi.PBType.ExtensionRanges().Has(t.Number()) {
 		panic("invalid extension field number")
 	}
 	x := p.x.Get(t.Number())
@@ -173,7 +173,7 @@ func (p legacyExtensionTypes) Register(t pref.ExtensionType) {
 }
 
 func (p legacyExtensionTypes) Remove(t pref.ExtensionType) {
-	if !p.mi.Type.ExtensionRanges().Has(t.Number()) {
+	if !p.mi.PBType.ExtensionRanges().Has(t.Number()) {
 		return
 	}
 	x := p.x.Get(t.Number())

+ 1 - 1
internal/impl/legacy_test.go

@@ -279,7 +279,7 @@ var (
 	enumV1Type    = pimpl.Export{}.EnumTypeOf(proto2_20180125.Message_ChildEnum(0))
 	messageV1Type = pimpl.Export{}.MessageTypeOf((*proto2_20180125.Message_ChildMessage)(nil))
 	enumV2Type    = enumProto2Type
-	messageV2Type = enumMessagesType.Type
+	messageV2Type = enumMessagesType.PBType
 
 	extensionTypes = []pref.ExtensionType{
 		mustMakeExtensionType(&ptype.StandaloneExtension{

+ 1 - 1
internal/impl/legacy_unknown.go

@@ -36,7 +36,7 @@ func makeLegacyUnknownFieldsFunc(t reflect.Type) func(p *messageDataType) pref.U
 				return emptyUnknownFields{}
 			}
 			return &legacyUnknownBytesAndExtensionMap{
-				unkFunc(p), extFunc(p), p.mi.Type.ExtensionRanges(),
+				unkFunc(p), extFunc(p), p.mi.PBType.ExtensionRanges(),
 			}
 		}
 	}

+ 27 - 28
internal/impl/message.go

@@ -19,13 +19,15 @@ import (
 // that represents a message. A given instance of MessageType is tied to
 // exactly one Go type, which must be a pointer to a struct type.
 type MessageType struct {
-	// Type is the underlying message type and must be populated.
+	// GoType is the underlying message Go type and must be populated.
 	// Once set, this field must never be mutated.
-	Type pref.MessageType
+	GoType reflect.Type // pointer to struct
 
-	once sync.Once // protects all unexported fields
+	// PBType is the underlying message descriptor type and must be populated.
+	// Once set, this field must never be mutated.
+	PBType pref.MessageType
 
-	goType reflect.Type // pointer to struct
+	once sync.Once // protects all unexported fields
 
 	// TODO: Split fields into dense and sparse maps similar to the current
 	// table-driven implementation in v1?
@@ -35,30 +37,17 @@ type MessageType struct {
 	extensionFields func(*messageDataType) pref.KnownFields
 }
 
-// init lazily initializes the MessageType upon first use and
-// also checks that the provided pointer p is of the correct Go type.
-//
-// It must be called at the start of every exported method.
-func (mi *MessageType) init(p interface{}) {
+func (mi *MessageType) init() {
 	mi.once.Do(func() {
-		t := reflect.TypeOf(p)
+		t := mi.GoType
 		if t.Kind() != reflect.Ptr && t.Elem().Kind() != reflect.Struct {
 			panic(fmt.Sprintf("got %v, want *struct kind", t))
 		}
-		mi.goType = t
 
 		mi.makeKnownFieldsFunc(t.Elem())
 		mi.makeUnknownFieldsFunc(t.Elem())
 		mi.makeExtensionFieldsFunc(t.Elem())
 	})
-
-	// TODO: Remove this check? This API is primarily used by generated code,
-	// and should not violate this assumption. Leave this check in for now to
-	// provide some sanity checks during development. This can be removed if
-	// it proves to be detrimental to performance.
-	if reflect.TypeOf(p) != mi.goType {
-		panic(fmt.Sprintf("type mismatch: got %T, want %v", p, mi.goType))
-	}
 }
 
 // makeKnownFieldsFunc generates functions for operations that can be performed
@@ -113,8 +102,8 @@ fieldLoop:
 	}
 
 	mi.fields = map[pref.FieldNumber]*fieldInfo{}
-	for i := 0; i < mi.Type.Fields().Len(); i++ {
-		fd := mi.Type.Fields().Get(i)
+	for i := 0; i < mi.PBType.Fields().Len(); i++ {
+		fd := mi.PBType.Fields().Get(i)
 		fs := fields[fd.Number()]
 		var fi fieldInfo
 		switch {
@@ -160,15 +149,23 @@ func (mi *MessageType) MessageOf(p interface{}) pref.Message {
 }
 
 func (mi *MessageType) KnownFieldsOf(p interface{}) pref.KnownFields {
+	mi.init()
 	return (*knownFields)(mi.dataTypeOf(p))
 }
 
 func (mi *MessageType) UnknownFieldsOf(p interface{}) pref.UnknownFields {
+	mi.init()
 	return mi.unknownFields(mi.dataTypeOf(p))
 }
 
 func (mi *MessageType) dataTypeOf(p interface{}) *messageDataType {
-	mi.init(p)
+	// TODO: Remove this check? This API is primarily used by generated code,
+	// and should not violate this assumption. Leave this check in for now to
+	// provide some sanity checks during development. This can be removed if
+	// it proves to be detrimental to performance.
+	if reflect.TypeOf(p) != mi.GoType {
+		panic(fmt.Sprintf("type mismatch: got %T, want %v", p, mi.GoType))
+	}
 	return &messageDataType{pointerOfIface(p), mi}
 }
 
@@ -181,7 +178,7 @@ func (mi *MessageType) dataTypeOf(p interface{}) *messageDataType {
 // with reflect.NamedOf (see https://golang.org/issues/16522).
 //
 // With that hypothetical API, we could dynamically create a new named type
-// that has the same underlying type as MessageType.goType, and
+// that has the same underlying type as MessageType.GoType, and
 // dynamically create methods that close over MessageType.
 // Since the new type would have the same underlying type, we could directly
 // convert between pointers of those types, giving us an efficient way to swap
@@ -198,12 +195,14 @@ type messageDataType struct {
 type messageWrapper messageDataType
 
 func (m *messageWrapper) Type() pref.MessageType {
-	return m.mi.Type
+	return m.mi.PBType
 }
 func (m *messageWrapper) KnownFields() pref.KnownFields {
+	m.mi.init()
 	return (*knownFields)(m)
 }
 func (m *messageWrapper) UnknownFields() pref.UnknownFields {
+	m.mi.init()
 	return m.mi.unknownFields((*messageDataType)(m))
 }
 func (m *messageWrapper) Interface() pref.ProtoMessage {
@@ -216,7 +215,7 @@ func (m *messageWrapper) ProtoReflect() pref.Message {
 	return m
 }
 func (m *messageWrapper) ProtoUnwrap() interface{} {
-	return m.p.AsIfaceOf(m.mi.goType.Elem())
+	return m.p.AsIfaceOf(m.mi.GoType.Elem())
 }
 func (m *messageWrapper) ProtoMutable() {}
 
@@ -249,7 +248,7 @@ func (fs *knownFields) Set(n pref.FieldNumber, v pref.Value) {
 		fi.set(fs.p, v)
 		return
 	}
-	if fs.mi.Type.ExtensionRanges().Has(n) {
+	if fs.mi.PBType.ExtensionRanges().Has(n) {
 		fs.extensionFields().Set(n, v)
 		return
 	}
@@ -260,7 +259,7 @@ func (fs *knownFields) Clear(n pref.FieldNumber) {
 		fi.clear(fs.p)
 		return
 	}
-	if fs.mi.Type.ExtensionRanges().Has(n) {
+	if fs.mi.PBType.ExtensionRanges().Has(n) {
 		fs.extensionFields().Clear(n)
 		return
 	}
@@ -279,7 +278,7 @@ func (fs *knownFields) NewMessage(n pref.FieldNumber) pref.Message {
 	if fi := fs.mi.fields[n]; fi != nil {
 		return fi.newMessage()
 	}
-	if fs.mi.Type.ExtensionRanges().Has(n) {
+	if fs.mi.PBType.ExtensionRanges().Has(n) {
 		return fs.extensionFields().NewMessage(n)
 	}
 	panic(fmt.Sprintf("invalid field: %d", n))

+ 17 - 16
internal/impl/message_test.go

@@ -7,6 +7,7 @@ package impl_test
 import (
 	"fmt"
 	"math"
+	"reflect"
 	"strings"
 	"testing"
 
@@ -189,7 +190,7 @@ type (
 	MapBytes   map[MyString]MyBytes
 )
 
-var scalarProto2Type = pimpl.MessageType{Type: ptype.GoMessage(
+var scalarProto2Type = pimpl.MessageType{GoType: reflect.TypeOf(new(ScalarProto2)), PBType: ptype.GoMessage(
 	mustMakeMessageDesc(ptype.StandaloneMessage{
 		Syntax:   pref.Proto2,
 		FullName: "ScalarProto2",
@@ -224,7 +225,7 @@ var scalarProto2Type = pimpl.MessageType{Type: ptype.GoMessage(
 	},
 )}
 
-func (m *ScalarProto2) Type() pref.MessageType            { return scalarProto2Type.Type }
+func (m *ScalarProto2) Type() pref.MessageType            { return scalarProto2Type.PBType }
 func (m *ScalarProto2) KnownFields() pref.KnownFields     { return scalarProto2Type.KnownFieldsOf(m) }
 func (m *ScalarProto2) UnknownFields() pref.UnknownFields { return scalarProto2Type.UnknownFieldsOf(m) }
 func (m *ScalarProto2) Interface() pref.ProtoMessage      { return m }
@@ -295,7 +296,7 @@ type ScalarProto3 struct {
 	MyBytesA  MyString  `protobuf:"22"`
 }
 
-var scalarProto3Type = pimpl.MessageType{Type: ptype.GoMessage(
+var scalarProto3Type = pimpl.MessageType{GoType: reflect.TypeOf(new(ScalarProto3)), PBType: ptype.GoMessage(
 	mustMakeMessageDesc(ptype.StandaloneMessage{
 		Syntax:   pref.Proto3,
 		FullName: "ScalarProto3",
@@ -330,7 +331,7 @@ var scalarProto3Type = pimpl.MessageType{Type: ptype.GoMessage(
 	},
 )}
 
-func (m *ScalarProto3) Type() pref.MessageType            { return scalarProto3Type.Type }
+func (m *ScalarProto3) Type() pref.MessageType            { return scalarProto3Type.PBType }
 func (m *ScalarProto3) KnownFields() pref.KnownFields     { return scalarProto3Type.KnownFieldsOf(m) }
 func (m *ScalarProto3) UnknownFields() pref.UnknownFields { return scalarProto3Type.UnknownFieldsOf(m) }
 func (m *ScalarProto3) Interface() pref.ProtoMessage      { return m }
@@ -414,7 +415,7 @@ type ListScalars struct {
 	MyBytes4   ListStrings `protobuf:"19"`
 }
 
-var listScalarsType = pimpl.MessageType{Type: ptype.GoMessage(
+var listScalarsType = pimpl.MessageType{GoType: reflect.TypeOf(new(ListScalars)), PBType: ptype.GoMessage(
 	mustMakeMessageDesc(ptype.StandaloneMessage{
 		Syntax:   pref.Proto2,
 		FullName: "ListScalars",
@@ -447,7 +448,7 @@ var listScalarsType = pimpl.MessageType{Type: ptype.GoMessage(
 	},
 )}
 
-func (m *ListScalars) Type() pref.MessageType            { return listScalarsType.Type }
+func (m *ListScalars) Type() pref.MessageType            { return listScalarsType.PBType }
 func (m *ListScalars) KnownFields() pref.KnownFields     { return listScalarsType.KnownFieldsOf(m) }
 func (m *ListScalars) UnknownFields() pref.UnknownFields { return listScalarsType.UnknownFieldsOf(m) }
 func (m *ListScalars) Interface() pref.ProtoMessage      { return m }
@@ -598,7 +599,7 @@ func mustMakeMapEntry(n pref.FieldNumber, keyKind, valKind pref.Kind) ptype.Fiel
 	}
 }
 
-var mapScalarsType = pimpl.MessageType{Type: ptype.GoMessage(
+var mapScalarsType = pimpl.MessageType{GoType: reflect.TypeOf(new(MapScalars)), PBType: ptype.GoMessage(
 	mustMakeMessageDesc(ptype.StandaloneMessage{
 		Syntax:   pref.Proto2,
 		FullName: "MapScalars",
@@ -638,7 +639,7 @@ var mapScalarsType = pimpl.MessageType{Type: ptype.GoMessage(
 	},
 )}
 
-func (m *MapScalars) Type() pref.MessageType            { return mapScalarsType.Type }
+func (m *MapScalars) Type() pref.MessageType            { return mapScalarsType.PBType }
 func (m *MapScalars) KnownFields() pref.KnownFields     { return mapScalarsType.KnownFieldsOf(m) }
 func (m *MapScalars) UnknownFields() pref.UnknownFields { return mapScalarsType.UnknownFieldsOf(m) }
 func (m *MapScalars) Interface() pref.ProtoMessage      { return m }
@@ -770,7 +771,7 @@ type OneofScalars struct {
 	Union isOneofScalars_Union `protobuf_oneof:"union"`
 }
 
-var oneofScalarsType = pimpl.MessageType{Type: ptype.GoMessage(
+var oneofScalarsType = pimpl.MessageType{GoType: reflect.TypeOf(new(OneofScalars)), PBType: ptype.GoMessage(
 	mustMakeMessageDesc(ptype.StandaloneMessage{
 		Syntax:   pref.Proto2,
 		FullName: "OneofScalars",
@@ -796,7 +797,7 @@ var oneofScalarsType = pimpl.MessageType{Type: ptype.GoMessage(
 	},
 )}
 
-func (m *OneofScalars) Type() pref.MessageType            { return oneofScalarsType.Type }
+func (m *OneofScalars) Type() pref.MessageType            { return oneofScalarsType.PBType }
 func (m *OneofScalars) KnownFields() pref.KnownFields     { return oneofScalarsType.KnownFieldsOf(m) }
 func (m *OneofScalars) UnknownFields() pref.UnknownFields { return oneofScalarsType.UnknownFieldsOf(m) }
 func (m *OneofScalars) Interface() pref.ProtoMessage      { return m }
@@ -974,7 +975,7 @@ type EnumMessages struct {
 	Union         isEnumMessages_Union     `protobuf_oneof:"union"`
 }
 
-var enumMessagesType = pimpl.MessageType{Type: ptype.GoMessage(
+var enumMessagesType = pimpl.MessageType{GoType: reflect.TypeOf(new(EnumMessages)), PBType: ptype.GoMessage(
 	mustMakeMessageDesc(ptype.StandaloneMessage{
 		Syntax:   pref.Proto2,
 		FullName: "EnumMessages",
@@ -984,13 +985,13 @@ var enumMessagesType = pimpl.MessageType{Type: ptype.GoMessage(
 			{Name: "f3", Number: 3, Cardinality: pref.Optional, Kind: pref.MessageKind, MessageType: pimpl.Export{}.MessageOf(new(proto2_20180125.Message)).Type()},
 			{Name: "f4", Number: 4, Cardinality: pref.Optional, Kind: pref.MessageKind, MessageType: ptype.PlaceholderMessage("EnumMessages")},
 			{Name: "f5", Number: 5, Cardinality: pref.Repeated, Kind: pref.EnumKind, EnumType: enumProto2Type},
-			{Name: "f6", Number: 6, Cardinality: pref.Repeated, Kind: pref.MessageKind, MessageType: scalarProto2Type.Type},
+			{Name: "f6", Number: 6, Cardinality: pref.Repeated, Kind: pref.MessageKind, MessageType: scalarProto2Type.PBType},
 			{Name: "f7", Number: 7, Cardinality: pref.Repeated, Kind: pref.MessageKind, MessageType: enumMapDesc},
 			{Name: "f8", Number: 8, Cardinality: pref.Repeated, Kind: pref.MessageKind, MessageType: messageMapDesc},
 			{Name: "f9", Number: 9, Cardinality: pref.Optional, Kind: pref.EnumKind, Default: V("BEEF"), OneofName: "union", EnumType: enumProto2Type},
 			{Name: "f10", Number: 10, Cardinality: pref.Optional, Kind: pref.EnumKind, Default: V("BRAVO"), OneofName: "union", EnumType: enumProto3Type},
-			{Name: "f11", Number: 11, Cardinality: pref.Optional, Kind: pref.MessageKind, OneofName: "union", MessageType: scalarProto2Type.Type},
-			{Name: "f12", Number: 12, Cardinality: pref.Optional, Kind: pref.MessageKind, OneofName: "union", MessageType: scalarProto3Type.Type},
+			{Name: "f11", Number: 11, Cardinality: pref.Optional, Kind: pref.MessageKind, OneofName: "union", MessageType: scalarProto2Type.PBType},
+			{Name: "f12", Number: 12, Cardinality: pref.Optional, Kind: pref.MessageKind, OneofName: "union", MessageType: scalarProto3Type.PBType},
 		},
 		Oneofs: []ptype.Oneof{{Name: "union"}},
 	}),
@@ -1015,13 +1016,13 @@ var messageMapDesc = mustMakeMessageDesc(ptype.StandaloneMessage{
 	FullName: "EnumMessages.F8Entry",
 	Fields: []ptype.Field{
 		{Name: "key", Number: 1, Cardinality: pref.Optional, Kind: pref.StringKind},
-		{Name: "value", Number: 2, Cardinality: pref.Optional, Kind: pref.MessageKind, MessageType: scalarProto3Type.Type},
+		{Name: "value", Number: 2, Cardinality: pref.Optional, Kind: pref.MessageKind, MessageType: scalarProto3Type.PBType},
 	},
 	Options:    &descriptorpb.MessageOptions{MapEntry: scalar.Bool(true)},
 	IsMapEntry: true,
 })
 
-func (m *EnumMessages) Type() pref.MessageType            { return enumMessagesType.Type }
+func (m *EnumMessages) Type() pref.MessageType            { return enumMessagesType.PBType }
 func (m *EnumMessages) KnownFields() pref.KnownFields     { return enumMessagesType.KnownFieldsOf(m) }
 func (m *EnumMessages) UnknownFields() pref.UnknownFields { return enumMessagesType.UnknownFieldsOf(m) }
 func (m *EnumMessages) Interface() pref.ProtoMessage      { return m }

+ 1 - 1
internal/legacy/export.go

@@ -30,7 +30,7 @@ func (Export) MessageOf(m interface{}) pvalue.LegacyMessage {
 }
 
 func (Export) MessageTypeOf(m interface{}) pref.MessageType {
-	return loadMessageType(reflect.TypeOf(m)).Type
+	return loadMessageType(reflect.TypeOf(m)).PBType
 }
 
 func (Export) ExtensionTypeOf(d pref.ExtensionDescriptor, t interface{}) pref.ExtensionType {

+ 2 - 1
internal/legacy/message.go

@@ -40,7 +40,8 @@ func loadMessageType(t reflect.Type) *pimpl.MessageType {
 	// Slow-path: derive message descriptor and initialize MessageType.
 	md := loadMessageDesc(t)
 	mt := new(pimpl.MessageType)
-	mt.Type = ptype.GoMessage(md, func(pref.MessageType) pref.Message {
+	mt.GoType = t
+	mt.PBType = ptype.GoMessage(md, func(pref.MessageType) pref.Message {
 		p := reflect.New(t.Elem()).Interface()
 		return mt.MessageOf(p)
 	})

+ 783 - 1340
internal/testprotos/test/test.pb.go

@@ -4,10 +4,12 @@
 package test
 
 import (
+	bytes "bytes"
+	gzip "compress/gzip"
 	proto "github.com/golang/protobuf/proto"
 	protoreflect "github.com/golang/protobuf/v2/reflect/protoreflect"
-	prototype "github.com/golang/protobuf/v2/reflect/prototype"
 	protoimpl "github.com/golang/protobuf/v2/runtime/protoimpl"
+	reflect "reflect"
 )
 
 // This is a compile-time assertion to ensure that this generated file
@@ -26,7 +28,7 @@ const (
 )
 
 func (e TestAllTypes_NestedEnum) Type() protoreflect.EnumType {
-	return xxx_Test_protoFile_EnumTypes[0]
+	return xxx_Test_protoFile_enumTypes[0]
 }
 func (e TestAllTypes_NestedEnum) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -66,7 +68,7 @@ func (x *TestAllTypes_NestedEnum) UnmarshalJSON(data []byte) error {
 }
 
 func (TestAllTypes_NestedEnum) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_c161fcfdc0c3ff1e, []int{0, 0}
+	return fileDescriptor_c161fcfdc0c3ff1e_gzipped, []int{0, 0}
 }
 
 type TestAllTypes struct {
@@ -139,29 +141,14 @@ type TestAllTypes struct {
 	XXX_sizecache        int32                     `json:"-"`
 }
 
-type xxx_TestAllTypes struct{ m *TestAllTypes }
-
 func (m *TestAllTypes) ProtoReflect() protoreflect.Message {
-	return xxx_TestAllTypes{m}
-}
-func (m xxx_TestAllTypes) Type() protoreflect.MessageType {
-	return xxx_Test_protoFile_MessageTypes[0].Type
-}
-func (m xxx_TestAllTypes) KnownFields() protoreflect.KnownFields {
-	return xxx_Test_protoFile_MessageTypes[0].KnownFieldsOf(m.m)
-}
-func (m xxx_TestAllTypes) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Test_protoFile_MessageTypes[0].UnknownFieldsOf(m.m)
+	return xxx_Test_protoFile_messageTypes[0].MessageOf(m)
 }
-func (m xxx_TestAllTypes) Interface() protoreflect.ProtoMessage {
-	return m.m
-}
-
 func (m *TestAllTypes) Reset()         { *m = TestAllTypes{} }
 func (m *TestAllTypes) String() string { return proto.CompactTextString(m) }
 func (*TestAllTypes) ProtoMessage()    {}
 func (*TestAllTypes) Descriptor() ([]byte, []int) {
-	return fileDescriptor_c161fcfdc0c3ff1e, []int{0}
+	return fileDescriptor_c161fcfdc0c3ff1e_gzipped, []int{0}
 }
 
 func (m *TestAllTypes) XXX_Unmarshal(b []byte) error {
@@ -703,29 +690,14 @@ type TestAllExtensions struct {
 	XXX_sizecache                int32  `json:"-"`
 }
 
-type xxx_TestAllExtensions struct{ m *TestAllExtensions }
-
 func (m *TestAllExtensions) ProtoReflect() protoreflect.Message {
-	return xxx_TestAllExtensions{m}
+	return xxx_Test_protoFile_messageTypes[1].MessageOf(m)
 }
-func (m xxx_TestAllExtensions) Type() protoreflect.MessageType {
-	return xxx_Test_protoFile_MessageTypes[1].Type
-}
-func (m xxx_TestAllExtensions) KnownFields() protoreflect.KnownFields {
-	return xxx_Test_protoFile_MessageTypes[1].KnownFieldsOf(m.m)
-}
-func (m xxx_TestAllExtensions) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Test_protoFile_MessageTypes[1].UnknownFieldsOf(m.m)
-}
-func (m xxx_TestAllExtensions) Interface() protoreflect.ProtoMessage {
-	return m.m
-}
-
 func (m *TestAllExtensions) Reset()         { *m = TestAllExtensions{} }
 func (m *TestAllExtensions) String() string { return proto.CompactTextString(m) }
 func (*TestAllExtensions) ProtoMessage()    {}
 func (*TestAllExtensions) Descriptor() ([]byte, []int) {
-	return fileDescriptor_c161fcfdc0c3ff1e, []int{1}
+	return fileDescriptor_c161fcfdc0c3ff1e_gzipped, []int{1}
 }
 
 var extRange_TestAllExtensions = []proto.ExtensionRange{
@@ -761,29 +733,14 @@ type OptionalGroupExtension struct {
 	XXX_sizecache        int32    `json:"-"`
 }
 
-type xxx_OptionalGroupExtension struct{ m *OptionalGroupExtension }
-
 func (m *OptionalGroupExtension) ProtoReflect() protoreflect.Message {
-	return xxx_OptionalGroupExtension{m}
+	return xxx_Test_protoFile_messageTypes[2].MessageOf(m)
 }
-func (m xxx_OptionalGroupExtension) Type() protoreflect.MessageType {
-	return xxx_Test_protoFile_MessageTypes[2].Type
-}
-func (m xxx_OptionalGroupExtension) KnownFields() protoreflect.KnownFields {
-	return xxx_Test_protoFile_MessageTypes[2].KnownFieldsOf(m.m)
-}
-func (m xxx_OptionalGroupExtension) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Test_protoFile_MessageTypes[2].UnknownFieldsOf(m.m)
-}
-func (m xxx_OptionalGroupExtension) Interface() protoreflect.ProtoMessage {
-	return m.m
-}
-
 func (m *OptionalGroupExtension) Reset()         { *m = OptionalGroupExtension{} }
 func (m *OptionalGroupExtension) String() string { return proto.CompactTextString(m) }
 func (*OptionalGroupExtension) ProtoMessage()    {}
 func (*OptionalGroupExtension) Descriptor() ([]byte, []int) {
-	return fileDescriptor_c161fcfdc0c3ff1e, []int{2}
+	return fileDescriptor_c161fcfdc0c3ff1e_gzipped, []int{2}
 }
 
 func (m *OptionalGroupExtension) XXX_Unmarshal(b []byte) error {
@@ -818,29 +775,14 @@ type RepeatedGroupExtension struct {
 	XXX_sizecache        int32    `json:"-"`
 }
 
-type xxx_RepeatedGroupExtension struct{ m *RepeatedGroupExtension }
-
 func (m *RepeatedGroupExtension) ProtoReflect() protoreflect.Message {
-	return xxx_RepeatedGroupExtension{m}
-}
-func (m xxx_RepeatedGroupExtension) Type() protoreflect.MessageType {
-	return xxx_Test_protoFile_MessageTypes[3].Type
+	return xxx_Test_protoFile_messageTypes[3].MessageOf(m)
 }
-func (m xxx_RepeatedGroupExtension) KnownFields() protoreflect.KnownFields {
-	return xxx_Test_protoFile_MessageTypes[3].KnownFieldsOf(m.m)
-}
-func (m xxx_RepeatedGroupExtension) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Test_protoFile_MessageTypes[3].UnknownFieldsOf(m.m)
-}
-func (m xxx_RepeatedGroupExtension) Interface() protoreflect.ProtoMessage {
-	return m.m
-}
-
 func (m *RepeatedGroupExtension) Reset()         { *m = RepeatedGroupExtension{} }
 func (m *RepeatedGroupExtension) String() string { return proto.CompactTextString(m) }
 func (*RepeatedGroupExtension) ProtoMessage()    {}
 func (*RepeatedGroupExtension) Descriptor() ([]byte, []int) {
-	return fileDescriptor_c161fcfdc0c3ff1e, []int{3}
+	return fileDescriptor_c161fcfdc0c3ff1e_gzipped, []int{3}
 }
 
 func (m *RepeatedGroupExtension) XXX_Unmarshal(b []byte) error {
@@ -876,29 +818,14 @@ type TestAllTypes_NestedMessage struct {
 	XXX_sizecache        int32         `json:"-"`
 }
 
-type xxx_TestAllTypes_NestedMessage struct{ m *TestAllTypes_NestedMessage }
-
 func (m *TestAllTypes_NestedMessage) ProtoReflect() protoreflect.Message {
-	return xxx_TestAllTypes_NestedMessage{m}
-}
-func (m xxx_TestAllTypes_NestedMessage) Type() protoreflect.MessageType {
-	return xxx_Test_protoFile_MessageTypes[4].Type
+	return xxx_Test_protoFile_messageTypes[4].MessageOf(m)
 }
-func (m xxx_TestAllTypes_NestedMessage) KnownFields() protoreflect.KnownFields {
-	return xxx_Test_protoFile_MessageTypes[4].KnownFieldsOf(m.m)
-}
-func (m xxx_TestAllTypes_NestedMessage) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Test_protoFile_MessageTypes[4].UnknownFieldsOf(m.m)
-}
-func (m xxx_TestAllTypes_NestedMessage) Interface() protoreflect.ProtoMessage {
-	return m.m
-}
-
 func (m *TestAllTypes_NestedMessage) Reset()         { *m = TestAllTypes_NestedMessage{} }
 func (m *TestAllTypes_NestedMessage) String() string { return proto.CompactTextString(m) }
 func (*TestAllTypes_NestedMessage) ProtoMessage()    {}
 func (*TestAllTypes_NestedMessage) Descriptor() ([]byte, []int) {
-	return fileDescriptor_c161fcfdc0c3ff1e, []int{0, 0}
+	return fileDescriptor_c161fcfdc0c3ff1e_gzipped, []int{0, 0}
 }
 
 func (m *TestAllTypes_NestedMessage) XXX_Unmarshal(b []byte) error {
@@ -940,29 +867,14 @@ type TestAllTypes_OptionalGroup struct {
 	XXX_sizecache        int32    `json:"-"`
 }
 
-type xxx_TestAllTypes_OptionalGroup struct{ m *TestAllTypes_OptionalGroup }
-
 func (m *TestAllTypes_OptionalGroup) ProtoReflect() protoreflect.Message {
-	return xxx_TestAllTypes_OptionalGroup{m}
-}
-func (m xxx_TestAllTypes_OptionalGroup) Type() protoreflect.MessageType {
-	return xxx_Test_protoFile_MessageTypes[5].Type
-}
-func (m xxx_TestAllTypes_OptionalGroup) KnownFields() protoreflect.KnownFields {
-	return xxx_Test_protoFile_MessageTypes[5].KnownFieldsOf(m.m)
+	return xxx_Test_protoFile_messageTypes[5].MessageOf(m)
 }
-func (m xxx_TestAllTypes_OptionalGroup) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Test_protoFile_MessageTypes[5].UnknownFieldsOf(m.m)
-}
-func (m xxx_TestAllTypes_OptionalGroup) Interface() protoreflect.ProtoMessage {
-	return m.m
-}
-
 func (m *TestAllTypes_OptionalGroup) Reset()         { *m = TestAllTypes_OptionalGroup{} }
 func (m *TestAllTypes_OptionalGroup) String() string { return proto.CompactTextString(m) }
 func (*TestAllTypes_OptionalGroup) ProtoMessage()    {}
 func (*TestAllTypes_OptionalGroup) Descriptor() ([]byte, []int) {
-	return fileDescriptor_c161fcfdc0c3ff1e, []int{0, 1}
+	return fileDescriptor_c161fcfdc0c3ff1e_gzipped, []int{0, 1}
 }
 
 func (m *TestAllTypes_OptionalGroup) XXX_Unmarshal(b []byte) error {
@@ -997,29 +909,14 @@ type TestAllTypes_RepeatedGroup struct {
 	XXX_sizecache        int32    `json:"-"`
 }
 
-type xxx_TestAllTypes_RepeatedGroup struct{ m *TestAllTypes_RepeatedGroup }
-
 func (m *TestAllTypes_RepeatedGroup) ProtoReflect() protoreflect.Message {
-	return xxx_TestAllTypes_RepeatedGroup{m}
-}
-func (m xxx_TestAllTypes_RepeatedGroup) Type() protoreflect.MessageType {
-	return xxx_Test_protoFile_MessageTypes[6].Type
-}
-func (m xxx_TestAllTypes_RepeatedGroup) KnownFields() protoreflect.KnownFields {
-	return xxx_Test_protoFile_MessageTypes[6].KnownFieldsOf(m.m)
+	return xxx_Test_protoFile_messageTypes[6].MessageOf(m)
 }
-func (m xxx_TestAllTypes_RepeatedGroup) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Test_protoFile_MessageTypes[6].UnknownFieldsOf(m.m)
-}
-func (m xxx_TestAllTypes_RepeatedGroup) Interface() protoreflect.ProtoMessage {
-	return m.m
-}
-
 func (m *TestAllTypes_RepeatedGroup) Reset()         { *m = TestAllTypes_RepeatedGroup{} }
 func (m *TestAllTypes_RepeatedGroup) String() string { return proto.CompactTextString(m) }
 func (*TestAllTypes_RepeatedGroup) ProtoMessage()    {}
 func (*TestAllTypes_RepeatedGroup) Descriptor() ([]byte, []int) {
-	return fileDescriptor_c161fcfdc0c3ff1e, []int{0, 2}
+	return fileDescriptor_c161fcfdc0c3ff1e_gzipped, []int{0, 2}
 }
 
 func (m *TestAllTypes_RepeatedGroup) XXX_Unmarshal(b []byte) error {
@@ -1372,7 +1269,7 @@ var E_RepeatedNestedEnumExtension = &proto.ExtensionDesc{
 }
 
 func init() {
-	proto.RegisterFile("test.proto", fileDescriptor_c161fcfdc0c3ff1e)
+	proto.RegisterFile("test.proto", fileDescriptor_c161fcfdc0c3ff1e_gzipped)
 	proto.RegisterEnum("goproto.proto.test.TestAllTypes_NestedEnum", TestAllTypes_NestedEnum_name, TestAllTypes_NestedEnum_value)
 	proto.RegisterType((*TestAllTypes)(nil), "goproto.proto.test.TestAllTypes")
 	proto.RegisterMapType((map[bool]bool)(nil), "goproto.proto.test.TestAllTypes.MapBoolBoolEntry")
@@ -1437,1226 +1334,772 @@ func init() {
 }
 
 var fileDescriptor_c161fcfdc0c3ff1e = []byte{
-	// 2015 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x59, 0x5f, 0x53, 0xdb, 0xce,
-	0x15, 0x45, 0x88, 0xbf, 0x0b, 0x06, 0xa3, 0x1f, 0xd8, 0x22, 0xcc, 0x2f, 0xd9, 0x90, 0xa6, 0x51,
-	0x92, 0xd6, 0xb4, 0xa0, 0xaa, 0x49, 0x9a, 0xa6, 0xc1, 0x05, 0x42, 0x66, 0x9a, 0x64, 0x46, 0x24,
-	0x2f, 0xe9, 0xa4, 0x8c, 0x01, 0xe1, 0x7a, 0x6a, 0x5b, 0xae, 0x65, 0x93, 0xf0, 0xc6, 0x7b, 0x3f,
-	0x40, 0x5f, 0xfb, 0x91, 0xfa, 0x8d, 0xda, 0xd9, 0xbd, 0xda, 0xd5, 0xde, 0xf5, 0x1a, 0x2c, 0x65,
-	0x26, 0xc6, 0xbe, 0xba, 0x3a, 0x67, 0x77, 0xb5, 0x67, 0xaf, 0x76, 0x0f, 0x21, 0x83, 0x28, 0x19,
-	0xd4, 0x7a, 0xfd, 0x78, 0x10, 0x3b, 0x4e, 0x33, 0xe6, 0x5f, 0xe0, 0x67, 0x8d, 0x5d, 0xd9, 0xfe,
-	0xef, 0x33, 0xb2, 0xfc, 0x39, 0x4a, 0x06, 0xfb, 0xed, 0xf6, 0xe7, 0xeb, 0x5e, 0x94, 0x38, 0x8f,
-	0xc9, 0x4a, 0xdc, 0x1b, 0xb4, 0xe2, 0x6e, 0xa3, 0x7d, 0xda, 0xea, 0x0e, 0xf6, 0x76, 0x5d, 0x8b,
-	0x5a, 0xde, 0x6c, 0x58, 0x12, 0xd1, 0xf7, 0x2c, 0xa8, 0xa7, 0x05, 0xbe, 0x3b, 0x4d, 0x2d, 0xcf,
-	0x46, 0x69, 0x81, 0xef, 0x3c, 0x21, 0xab, 0x32, 0x6d, 0x08, 0x70, 0x36, 0xb5, 0xbc, 0x52, 0x28,
-	0xef, 0xfe, 0xc2, 0xa3, 0x23, 0x89, 0x81, 0xef, 0xce, 0x50, 0xcb, 0x9b, 0xc1, 0x89, 0x1a, 0x62,
-	0x02, 0x88, 0xb3, 0xd4, 0xf2, 0xd6, 0xb2, 0xc4, 0x93, 0x51, 0xc4, 0x04, 0x10, 0xe7, 0xa8, 0xe5,
-	0x39, 0x38, 0x31, 0xf0, 0x9d, 0xa7, 0xa4, 0x2c, 0x13, 0x2f, 0x5b, 0x3f, 0xa2, 0x8b, 0xbd, 0x5d,
-	0x77, 0x9e, 0x5a, 0xde, 0x7c, 0x28, 0x01, 0x8e, 0x20, 0x3c, 0x9a, 0x1a, 0xf8, 0xee, 0x02, 0xb5,
-	0xbc, 0x39, 0x2d, 0x35, 0xf0, 0x9d, 0xe7, 0x64, 0x2d, 0xa3, 0x17, 0xb0, 0x8b, 0xd4, 0xf2, 0x56,
-	0x43, 0x89, 0x71, 0x92, 0xc6, 0x0d, 0xc9, 0x81, 0xef, 0x12, 0x6a, 0x79, 0x65, 0x3d, 0x39, 0xf0,
-	0xd1, 0xd0, 0x5f, 0xb6, 0xe3, 0xc6, 0xc0, 0x5d, 0xa2, 0x96, 0x37, 0x9d, 0x0d, 0xfd, 0x11, 0x0b,
-	0xa2, 0xfe, 0x5f, 0xc4, 0xc3, 0xb3, 0x76, 0xe4, 0x2e, 0x53, 0xcb, 0xb3, 0xb2, 0xfe, 0x1f, 0xf0,
-	0xa8, 0xf3, 0x88, 0xc8, 0x3b, 0x4f, 0xcf, 0xe2, 0xb8, 0xed, 0x96, 0xa8, 0xe5, 0x2d, 0x84, 0xcb,
-	0x22, 0x58, 0x8f, 0xe3, 0x36, 0x1e, 0xcd, 0x41, 0xbf, 0xd5, 0x6d, 0xba, 0x2b, 0xd4, 0xf2, 0x16,
-	0x95, 0xd1, 0xe4, 0x51, 0xd4, 0xba, 0xb3, 0xeb, 0x41, 0x94, 0xb8, 0xab, 0xd4, 0xf2, 0x96, 0xb3,
-	0xd6, 0xd5, 0x59, 0xd0, 0xf9, 0x9c, 0x91, 0x36, 0xfb, 0xf1, 0xb0, 0xe7, 0x96, 0xa9, 0xe5, 0x91,
-	0xdd, 0x5a, 0x6d, 0x74, 0x8e, 0xd6, 0xd4, 0xf9, 0x59, 0xfb, 0x94, 0xde, 0xf5, 0x8e, 0xdd, 0x15,
-	0x62, 0x10, 0xe7, 0x92, 0x54, 0x25, 0x79, 0x37, 0x4a, 0x06, 0xd1, 0xc5, 0x69, 0x27, 0x4a, 0x92,
-	0x46, 0x33, 0x72, 0x1d, 0x6a, 0x79, 0x4b, 0x13, 0xe0, 0x7f, 0xe4, 0xb7, 0x7d, 0x80, 0xbb, 0xc2,
-	0x0d, 0x01, 0x87, 0xc2, 0xce, 0x37, 0xb2, 0xae, 0xf3, 0x44, 0xdd, 0x61, 0xc7, 0xdd, 0xa0, 0x96,
-	0xb7, 0xb2, 0xfb, 0x7c, 0x42, 0x92, 0xc3, 0xee, 0xb0, 0x13, 0x3a, 0x98, 0x81, 0xc5, 0xd8, 0x18,
-	0xf6, 0xa3, 0x5e, 0xd4, 0x60, 0xb8, 0x30, 0xc5, 0x1f, 0x50, 0x9b, 0x69, 0x50, 0x44, 0xa5, 0x06,
-	0xd5, 0xb4, 0xc0, 0x77, 0x29, 0xb5, 0x99, 0x06, 0x95, 0x34, 0x50, 0x8c, 0x4c, 0x4b, 0x35, 0xf8,
-	0x90, 0xda, 0x4c, 0x83, 0x22, 0x9c, 0x69, 0x10, 0x25, 0x06, 0xbe, 0xbb, 0x4d, 0x6d, 0xa6, 0x41,
-	0x35, 0x51, 0x43, 0x4c, 0x35, 0xf8, 0x88, 0xda, 0x4c, 0x83, 0x22, 0x7c, 0x32, 0x8a, 0x98, 0x6a,
-	0xf0, 0x17, 0xd4, 0x66, 0x1a, 0x54, 0x13, 0x41, 0x83, 0x32, 0x51, 0x88, 0xe5, 0x31, 0xb5, 0x99,
-	0x06, 0x45, 0x5c, 0xd1, 0x20, 0x4e, 0x0d, 0x7c, 0xf7, 0x97, 0xd4, 0x66, 0x1a, 0x44, 0xa9, 0xa0,
-	0xc1, 0x8c, 0x5e, 0xc0, 0x3e, 0xa1, 0x36, 0xd3, 0xa0, 0x6c, 0x80, 0xa2, 0x41, 0x2d, 0x39, 0xf0,
-	0x5d, 0x8f, 0xda, 0x4c, 0x83, 0x38, 0x19, 0x34, 0x98, 0x35, 0x82, 0x6b, 0xf0, 0x29, 0xb5, 0x99,
-	0x06, 0x65, 0x13, 0x84, 0x06, 0x65, 0x5a, 0xaa, 0xc1, 0x67, 0xd4, 0x66, 0x1a, 0x14, 0xe1, 0x4c,
-	0x83, 0x32, 0x91, 0x6b, 0xf0, 0x39, 0xb5, 0x99, 0x06, 0x45, 0x50, 0x68, 0x30, 0x6b, 0x21, 0x68,
-	0xf0, 0x57, 0xd4, 0x66, 0x1a, 0x94, 0xed, 0x93, 0x1a, 0xcc, 0xd0, 0xb8, 0x06, 0x7f, 0x4d, 0x6d,
-	0xa6, 0x41, 0x09, 0x27, 0x34, 0x28, 0x02, 0xa0, 0xc1, 0x1a, 0xb5, 0x27, 0xd2, 0x60, 0x98, 0xde,
-	0x95, 0x6a, 0x10, 0x81, 0x30, 0x0d, 0x4a, 0x72, 0x4d, 0x83, 0xbf, 0xa1, 0x76, 0x11, 0x0d, 0x0a,
-	0xb8, 0x11, 0x0d, 0xea, 0x3c, 0x5c, 0x83, 0x7b, 0xd4, 0xce, 0xad, 0x41, 0xcc, 0xc0, 0x35, 0xf8,
-	0x57, 0xb2, 0xda, 0x69, 0xf4, 0x40, 0x7e, 0xa9, 0x08, 0x5f, 0xf0, 0xe6, 0xef, 0xdd, 0x89, 0xfc,
-	0xa1, 0xd1, 0xe3, 0x02, 0xe5, 0x1f, 0x87, 0xdd, 0x41, 0xff, 0x3a, 0x2c, 0x75, 0xd4, 0x98, 0x02,
-	0x1e, 0xf8, 0xa9, 0x74, 0x5f, 0xe6, 0x02, 0x0f, 0x7c, 0xfe, 0x81, 0xc0, 0xd3, 0x98, 0xd3, 0x20,
-	0x6b, 0x0c, 0x1c, 0xa4, 0x2e, 0x14, 0xff, 0x8a, 0xc3, 0xff, 0x6e, 0x12, 0x78, 0x58, 0x0d, 0xe0,
-	0x13, 0x08, 0x58, 0x63, 0xd5, 0xa8, 0x4a, 0x11, 0xf8, 0x62, 0xad, 0xf8, 0x43, 0x3e, 0x8a, 0xc0,
-	0x87, 0x4f, 0x4c, 0x21, 0xa2, 0x82, 0x02, 0x96, 0x17, 0xb1, 0xca, 0xbc, 0x9e, 0x9c, 0x02, 0x56,
-	0xa0, 0x13, 0xad, 0x17, 0x6a, 0x54, 0xa5, 0x08, 0x7c, 0xb1, 0x3e, 0xfd, 0x31, 0x1f, 0x45, 0xe0,
-	0x9f, 0x68, 0xbd, 0x50, 0xa3, 0x4e, 0x93, 0xfc, 0xc4, 0x28, 0xd2, 0x35, 0x46, 0x2e, 0x6d, 0x6f,
-	0x38, 0xc9, 0xef, 0x27, 0x21, 0x49, 0x97, 0xbd, 0xf4, 0x0f, 0xd0, 0xb0, 0x66, 0xe3, 0x38, 0x22,
-	0x0a, 0x7c, 0xb9, 0x30, 0xfe, 0x29, 0x27, 0x51, 0xe0, 0xa7, 0x7f, 0x34, 0x22, 0x19, 0x77, 0x3a,
-	0x64, 0x83, 0x0f, 0x9a, 0xe8, 0x92, 0x5c, 0x57, 0xdf, 0x72, 0xaa, 0x97, 0x13, 0x0d, 0x5c, 0x7a,
-	0x8f, 0xf8, 0x0b, 0x64, 0xac, 0x03, 0xfa, 0x15, 0x4c, 0xc7, 0x9e, 0x92, 0xe8, 0xd9, 0x7e, 0x5e,
-	0xba, 0xc0, 0x17, 0x7f, 0x75, 0xba, 0xec, 0x0a, 0x56, 0x3d, 0x2c, 0xec, 0xf5, 0x9c, 0xaa, 0xe7,
-	0x2b, 0xbf, 0xa6, 0x7a, 0xa8, 0x06, 0x7f, 0x23, 0xe5, 0x0c, 0x3c, 0x2d, 0x07, 0x7f, 0xe6, 0xe8,
-	0xfe, 0xc4, 0xe8, 0x50, 0x2f, 0x00, 0x7e, 0xa5, 0x83, 0x82, 0xce, 0x17, 0xc2, 0x08, 0x79, 0xfd,
-	0x80, 0x22, 0x72, 0xc0, 0xc1, 0x7f, 0x3b, 0x09, 0x38, 0x2b, 0x30, 0xec, 0x3f, 0x20, 0x2f, 0x75,
-	0xb2, 0x88, 0x94, 0x09, 0xaf, 0x2d, 0xa2, 0xf0, 0x1c, 0xe6, 0x90, 0x09, 0xbf, 0x03, 0x3e, 0x15,
-	0x99, 0x28, 0x51, 0x31, 0x32, 0x29, 0x05, 0x94, 0xac, 0xa3, 0xc9, 0x47, 0x06, 0x50, 0x78, 0x51,
-	0xcb, 0x46, 0x46, 0x09, 0x3a, 0xdf, 0xc9, 0xa6, 0x82, 0xaf, 0x55, 0xa5, 0x77, 0x9c, 0xe8, 0xf5,
-	0xe4, 0x44, 0xa8, 0x0e, 0x01, 0x61, 0xa5, 0x63, 0xbc, 0xe8, 0x74, 0x49, 0x65, 0x94, 0x98, 0x97,
-	0xa9, 0xf7, 0x39, 0xe6, 0xaf, 0x02, 0xcc, 0x6a, 0x93, 0x32, 0x7f, 0xb5, 0x2b, 0xce, 0x23, 0xb2,
-	0x1c, 0x77, 0xa3, 0xf8, 0x52, 0x2c, 0xfb, 0x31, 0xdb, 0x6c, 0x1d, 0x4f, 0x85, 0x4b, 0x3c, 0x9a,
-	0xae, 0xde, 0x67, 0x64, 0x1d, 0x92, 0xb4, 0x81, 0xe8, 0x15, 0x79, 0x45, 0x3e, 0x9e, 0x0a, 0x1d,
-	0x8e, 0x86, 0x3b, 0x2e, 0x1b, 0x92, 0xce, 0x97, 0x7f, 0xb2, 0xcd, 0x82, 0x6c, 0x48, 0xfa, 0xd8,
-	0x1f, 0x12, 0xf8, 0x99, 0x3e, 0xf1, 0x3e, 0xdb, 0x28, 0x1c, 0x4f, 0x85, 0x84, 0x07, 0xe1, 0xc9,
-	0x3d, 0x20, 0x24, 0x4d, 0x61, 0x13, 0x3a, 0x61, 0x3b, 0x93, 0xe3, 0xa9, 0x70, 0x11, 0x32, 0xd8,
-	0xec, 0x44, 0x3d, 0x0e, 0x7c, 0x77, 0xc0, 0x76, 0x8d, 0xa8, 0xc7, 0x81, 0x9f, 0x11, 0x81, 0xa4,
-	0x87, 0x6c, 0xbf, 0x24, 0x89, 0x40, 0x9c, 0x12, 0x27, 0x15, 0xe6, 0x15, 0xdb, 0x2b, 0x49, 0x9c,
-	0x54, 0x61, 0x7f, 0x11, 0xad, 0xe1, 0x8f, 0xf0, 0x7b, 0xee, 0xb7, 0x7d, 0xd9, 0x74, 0xf6, 0xe3,
-	0x5e, 0x83, 0x94, 0xf0, 0xa0, 0x2d, 0x13, 0xab, 0x91, 0x6e, 0xb7, 0xad, 0x86, 0x53, 0x27, 0x4b,
-	0xe7, 0x71, 0x3f, 0x3a, 0x1f, 0xf6, 0x93, 0xd6, 0x55, 0xc4, 0xf7, 0xd7, 0x4b, 0xbb, 0xf4, 0x2e,
-	0xb6, 0x50, 0xbd, 0xe9, 0xde, 0xcf, 0xa4, 0x84, 0x36, 0x4c, 0x40, 0xb1, 0x96, 0x52, 0xb0, 0xcb,
-	0xe8, 0x5d, 0x0e, 0x2e, 0xef, 0x88, 0xcb, 0x6f, 0x89, 0x33, 0xfa, 0x2e, 0xe3, 0x94, 0x89, 0xfd,
-	0x8f, 0xe8, 0x3a, 0x6d, 0x27, 0xfb, 0xea, 0xac, 0x93, 0xd9, 0xab, 0x46, 0x7b, 0x08, 0x6d, 0x9c,
-	0x0d, 0xe1, 0xc7, 0xab, 0xe9, 0x17, 0x56, 0x86, 0xa0, 0xbe, 0xb0, 0xa8, 0x08, 0xb6, 0x01, 0xc1,
-	0x56, 0x11, 0xea, 0x64, 0xdd, 0xf4, 0x4e, 0xa2, 0x62, 0x94, 0x0c, 0x18, 0x25, 0x33, 0x06, 0x7a,
-	0xe9, 0x50, 0x31, 0x66, 0x0c, 0x18, 0x33, 0xa3, 0x18, 0x23, 0x6f, 0x15, 0x2a, 0xc6, 0x9a, 0x01,
-	0x63, 0xcd, 0x8c, 0x81, 0x5e, 0x1b, 0x54, 0x0c, 0xc7, 0x80, 0xe1, 0xa8, 0x18, 0x07, 0xa4, 0x62,
-	0x7e, 0x2b, 0x50, 0x51, 0xe6, 0x0d, 0x28, 0xf3, 0x63, 0x50, 0x70, 0xc9, 0x57, 0x51, 0xe6, 0x0c,
-	0x28, 0x73, 0x2a, 0xca, 0x11, 0x71, 0xc7, 0x55, 0x73, 0x15, 0x67, 0xd5, 0x80, 0xb3, 0x3a, 0x0e,
-	0x47, 0x2b, 0xd3, 0x2a, 0x4e, 0xd9, 0x80, 0x53, 0x36, 0xce, 0x36, 0xb5, 0x0a, 0xdf, 0x35, 0x5f,
-	0xa7, 0x55, 0x84, 0x7d, 0xf2, 0x93, 0xa1, 0xd2, 0xde, 0x05, 0x61, 0xa9, 0x10, 0x6f, 0x48, 0x59,
-	0xaf, 0xa7, 0xea, 0xfd, 0x0b, 0x86, 0xfb, 0x17, 0x0c, 0x93, 0x44, 0x2f, 0x9a, 0x2a, 0xc6, 0xa2,
-	0x01, 0x63, 0x71, 0xb4, 0x1b, 0x7a, 0x59, 0xbc, 0x0b, 0x62, 0x59, 0x85, 0xb8, 0x26, 0x5b, 0xb7,
-	0x14, 0x3c, 0x03, 0xd4, 0x81, 0x0a, 0x95, 0x7f, 0x97, 0xa7, 0x50, 0x27, 0x30, 0x1d, 0x4c, 0x55,
-	0xcf, 0xc0, 0xbb, 0xaf, 0xf2, 0xe6, 0xdc, 0xf8, 0x65, 0xa4, 0xdb, 0x2f, 0x09, 0x51, 0xea, 0xe8,
-	0x3c, 0xb1, 0x8f, 0x3e, 0x7d, 0x2a, 0x4f, 0xb1, 0x2f, 0xf5, 0xfd, 0xb0, 0x6c, 0xc1, 0x97, 0xaf,
-	0xe5, 0x69, 0xd6, 0x82, 0x8f, 0x87, 0xef, 0xca, 0xff, 0x13, 0xff, 0xac, 0x7a, 0x49, 0x56, 0x97,
-	0x56, 0xd4, 0xbe, 0xd8, 0xfe, 0x99, 0xac, 0xa5, 0x7c, 0x87, 0x3f, 0x06, 0x51, 0x37, 0x69, 0xc5,
-	0xdd, 0xe4, 0xd9, 0xc2, 0x82, 0x55, 0xbe, 0xb9, 0xb9, 0xb9, 0x99, 0xde, 0x7e, 0x42, 0xaa, 0x68,
-	0x49, 0x3e, 0x8d, 0x44, 0x16, 0x5e, 0x9c, 0x59, 0x22, 0x5a, 0x9c, 0xf5, 0x44, 0xb1, 0x4c, 0xbf,
-	0x3a, 0x25, 0x2e, 0x3e, 0xb2, 0x55, 0x32, 0x1f, 0xdf, 0x32, 0x1c, 0x59, 0xf3, 0xd2, 0x99, 0x5d,
-	0x41, 0x67, 0xbc, 0xf2, 0xb2, 0x4e, 0x10, 0xf8, 0xf9, 0x09, 0x60, 0x5d, 0xaf, 0xa0, 0xd3, 0xe1,
-	0x8c, 0xa0, 0x41, 0x36, 0xb5, 0x63, 0xe2, 0xfc, 0x0c, 0x70, 0xae, 0x5c, 0xc5, 0xe7, 0xca, 0xe3,
-	0x29, 0x8a, 0x74, 0x02, 0x4e, 0xa4, 0xab, 0xf8, 0x44, 0xda, 0x4c, 0x91, 0x14, 0xec, 0x05, 0x9c,
-	0x65, 0x57, 0xf1, 0x59, 0xf6, 0x78, 0x8a, 0x22, 0xbd, 0x80, 0x53, 0xf0, 0x2a, 0x3e, 0x05, 0xcf,
-	0x28, 0xce, 0xc9, 0x3d, 0xfd, 0x38, 0x3c, 0x3f, 0x07, 0x9c, 0x9f, 0xbb, 0xda, 0xf9, 0xf9, 0x2d,
-	0x24, 0x45, 0x3a, 0x02, 0x27, 0xef, 0xae, 0x76, 0xf2, 0x9e, 0x91, 0x44, 0x64, 0x6b, 0xe4, 0x08,
-	0x3e, 0x3f, 0x0b, 0x9c, 0xd9, 0x6f, 0xea, 0x67, 0xf6, 0xb7, 0xd1, 0x14, 0xe9, 0x0c, 0x9c, 0xf6,
-	0x6f, 0xea, 0xa7, 0xfd, 0x66, 0x11, 0xf2, 0xd7, 0xd8, 0xfc, 0x1c, 0xe0, 0x13, 0x54, 0x90, 0x4f,
-	0x60, 0x9e, 0x5b, 0xf0, 0x12, 0x9c, 0x9f, 0x01, 0x1c, 0x86, 0x2a, 0x76, 0x18, 0x32, 0x8a, 0x6f,
-	0xca, 0xf9, 0x3c, 0xdf, 0xa6, 0xe6, 0x26, 0x00, 0x6f, 0x62, 0x43, 0xf5, 0x26, 0xc6, 0xa8, 0x03,
-	0xb6, 0x5c, 0xb9, 0x09, 0xc0, 0xd5, 0xa8, 0x62, 0x57, 0xc3, 0xfc, 0x14, 0xf8, 0xae, 0x25, 0x3f,
-	0x03, 0xf8, 0x21, 0x15, 0xe4, 0x87, 0x64, 0x04, 0xff, 0xb2, 0xb2, 0x31, 0x6a, 0x6a, 0xcb, 0xfe,
-	0x84, 0x04, 0x60, 0xa5, 0x18, 0x0b, 0xe1, 0x98, 0xca, 0x93, 0xb5, 0x86, 0x53, 0x66, 0xad, 0xf9,
-	0x8f, 0x45, 0x1e, 0x8e, 0x71, 0x54, 0xf2, 0xb7, 0xab, 0x98, 0x05, 0x73, 0xdf, 0x68, 0xc1, 0x64,
-	0x4d, 0xfc, 0xb7, 0x45, 0xee, 0x9b, 0xcc, 0x98, 0xfc, 0xed, 0x2b, 0xe0, 0xde, 0x6c, 0x8d, 0xba,
-	0x37, 0x68, 0xae, 0x60, 0x1b, 0x27, 0x7f, 0x93, 0xc0, 0xf7, 0xa9, 0x20, 0xdf, 0x67, 0x2c, 0x41,
-	0x91, 0x65, 0x07, 0x1c, 0xa3, 0x0a, 0x72, 0x8c, 0x90, 0xa0, 0x34, 0xeb, 0x28, 0x3f, 0x03, 0x78,
-	0x4d, 0x55, 0xec, 0x35, 0x8d, 0xa7, 0x28, 0xd2, 0x09, 0x70, 0xa9, 0xaa, 0xd8, 0xa5, 0x32, 0x53,
-	0x14, 0xad, 0xcb, 0xe0, 0x6f, 0x55, 0xb1, 0xbf, 0x35, 0x9e, 0xa2, 0x48, 0x2f, 0xc0, 0x19, 0xab,
-	0x62, 0x67, 0x0c, 0x95, 0x4c, 0xdd, 0x22, 0xcb, 0xcf, 0x01, 0x9e, 0x9a, 0xab, 0x79, 0x6a, 0xb7,
-	0x90, 0x14, 0xe9, 0x08, 0xb8, 0x71, 0xae, 0xe6, 0xc6, 0xa1, 0x82, 0x39, 0x62, 0xcb, 0xe5, 0x67,
-	0x01, 0x1f, 0x6f, 0x53, 0xf7, 0xf1, 0x6e, 0xa3, 0x29, 0xd2, 0x19, 0x70, 0x00, 0x37, 0x75, 0x07,
-	0xd0, 0x2c, 0xc2, 0x82, 0x75, 0x19, 0xbc, 0xc3, 0x0a, 0xf2, 0x0e, 0xcd, 0x73, 0xab, 0x68, 0x5d,
-	0x06, 0xd7, 0xb1, 0x8a, 0x5d, 0x47, 0x54, 0x97, 0x91, 0xfd, 0x98, 0x9f, 0x00, 0xfc, 0xca, 0x0d,
-	0xd5, 0xaf, 0x1c, 0xa3, 0x8e, 0x82, 0x75, 0x19, 0x9c, 0xce, 0x2a, 0x76, 0x3a, 0xcd, 0x4f, 0xa1,
-	0x60, 0x5d, 0x06, 0x8f, 0xb4, 0x82, 0x3c, 0x52, 0x5c, 0x97, 0x91, 0xd1, 0x99, 0x9f, 0x00, 0xec,
-	0x55, 0x63, 0x7d, 0x19, 0xb3, 0xd1, 0xcb, 0x5a, 0x63, 0xa8, 0xcb, 0x63, 0x5c, 0xd6, 0xfc, 0xed,
-	0x2a, 0x66, 0xcb, 0xde, 0x37, 0xda, 0xb2, 0xb8, 0x2e, 0x9b, 0x0c, 0xda, 0xfc, 0xed, 0x2b, 0xe0,
-	0xe8, 0x6e, 0x8d, 0x3a, 0xba, 0x12, 0xb0, 0xfe, 0xe2, 0x6b, 0xd0, 0x6c, 0x0d, 0xfe, 0x3e, 0x3c,
-	0xab, 0x9d, 0xc7, 0x9d, 0x9d, 0x66, 0xdc, 0x6e, 0x74, 0x9b, 0x3b, 0x1c, 0xf4, 0x6c, 0x78, 0xb9,
-	0x73, 0xb5, 0xbb, 0xd3, 0xea, 0x0e, 0xa2, 0x7e, 0xb7, 0xd1, 0xde, 0x61, 0x1c, 0xfc, 0x42, 0xc2,
-	0xbf, 0xfe, 0x3f, 0x00, 0x00, 0xff, 0xff, 0xf6, 0x2d, 0x9b, 0x88, 0x4e, 0x25, 0x00, 0x00,
-}
-
-func init() {
-	xxx_Test_protoFile_FileDesc.Messages = xxx_Test_protoFile_MessageDescs[0:4]
-	xxx_Test_protoFile_MessageDescs[0].Enums = xxx_Test_protoFile_EnumDescs[0:1]
-	xxx_Test_protoFile_MessageDescs[0].Messages = xxx_Test_protoFile_MessageDescs[4:24]
-	xxx_Test_protoFile_MessageDescs[0].Fields[15].MessageType = xxx_Test_protoFile_MessageTypes[5].Type
-	xxx_Test_protoFile_MessageDescs[0].Fields[16].MessageType = xxx_Test_protoFile_MessageTypes[4].Type
-	xxx_Test_protoFile_MessageDescs[0].Fields[17].EnumType = xxx_Test_protoFile_EnumTypes[0]
-	xxx_Test_protoFile_MessageDescs[0].Fields[33].MessageType = xxx_Test_protoFile_MessageTypes[6].Type
-	xxx_Test_protoFile_MessageDescs[0].Fields[34].MessageType = xxx_Test_protoFile_MessageTypes[4].Type
-	xxx_Test_protoFile_MessageDescs[0].Fields[35].EnumType = xxx_Test_protoFile_EnumTypes[0]
-	xxx_Test_protoFile_MessageDescs[0].Fields[36].MessageType = xxx_Test_protoFile_MessageDescs[7].Reference()
-	xxx_Test_protoFile_MessageDescs[0].Fields[37].MessageType = xxx_Test_protoFile_MessageDescs[8].Reference()
-	xxx_Test_protoFile_MessageDescs[0].Fields[38].MessageType = xxx_Test_protoFile_MessageDescs[9].Reference()
-	xxx_Test_protoFile_MessageDescs[0].Fields[39].MessageType = xxx_Test_protoFile_MessageDescs[10].Reference()
-	xxx_Test_protoFile_MessageDescs[0].Fields[40].MessageType = xxx_Test_protoFile_MessageDescs[11].Reference()
-	xxx_Test_protoFile_MessageDescs[0].Fields[41].MessageType = xxx_Test_protoFile_MessageDescs[12].Reference()
-	xxx_Test_protoFile_MessageDescs[0].Fields[42].MessageType = xxx_Test_protoFile_MessageDescs[13].Reference()
-	xxx_Test_protoFile_MessageDescs[0].Fields[43].MessageType = xxx_Test_protoFile_MessageDescs[14].Reference()
-	xxx_Test_protoFile_MessageDescs[0].Fields[44].MessageType = xxx_Test_protoFile_MessageDescs[15].Reference()
-	xxx_Test_protoFile_MessageDescs[0].Fields[45].MessageType = xxx_Test_protoFile_MessageDescs[16].Reference()
-	xxx_Test_protoFile_MessageDescs[0].Fields[46].MessageType = xxx_Test_protoFile_MessageDescs[17].Reference()
-	xxx_Test_protoFile_MessageDescs[0].Fields[47].MessageType = xxx_Test_protoFile_MessageDescs[18].Reference()
-	xxx_Test_protoFile_MessageDescs[0].Fields[48].MessageType = xxx_Test_protoFile_MessageDescs[19].Reference()
-	xxx_Test_protoFile_MessageDescs[0].Fields[49].MessageType = xxx_Test_protoFile_MessageDescs[20].Reference()
-	xxx_Test_protoFile_MessageDescs[0].Fields[50].MessageType = xxx_Test_protoFile_MessageDescs[21].Reference()
-	xxx_Test_protoFile_MessageDescs[0].Fields[51].MessageType = xxx_Test_protoFile_MessageDescs[22].Reference()
-	xxx_Test_protoFile_MessageDescs[0].Fields[52].MessageType = xxx_Test_protoFile_MessageDescs[23].Reference()
-	xxx_Test_protoFile_MessageDescs[0].Fields[54].MessageType = xxx_Test_protoFile_MessageTypes[4].Type
-	xxx_Test_protoFile_MessageDescs[0].Fields[61].EnumType = xxx_Test_protoFile_EnumTypes[0]
-	xxx_Test_protoFile_MessageDescs[4].Fields[1].MessageType = xxx_Test_protoFile_MessageTypes[0].Type
-	xxx_Test_protoFile_MessageDescs[22].Fields[1].MessageType = xxx_Test_protoFile_MessageTypes[4].Type
-	xxx_Test_protoFile_MessageDescs[23].Fields[1].EnumType = xxx_Test_protoFile_EnumTypes[0]
-	var err error
-	Test_protoFile, err = prototype.NewFile(&xxx_Test_protoFile_FileDesc)
-	if err != nil {
-		panic(err)
-	}
-}
+	// 9550 bytes of the wire-encoded FileDescriptorProto
+	0x0a, 0x0a, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x12, 0x67, 0x6f,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74,
+	0x22, 0xd0, 0x2a, 0x0a, 0x0c, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65,
+	0x73, 0x12, 0x25, 0x0a, 0x0e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x69, 0x6e,
+	0x74, 0x33, 0x32, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x6f, 0x70, 0x74, 0x69, 0x6f,
+	0x6e, 0x61, 0x6c, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x25, 0x0a, 0x0e, 0x6f, 0x70, 0x74, 0x69,
+	0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03,
+	0x52, 0x0d, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x12,
+	0x27, 0x0a, 0x0f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x75, 0x69, 0x6e, 0x74,
+	0x33, 0x32, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e,
+	0x61, 0x6c, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x27, 0x0a, 0x0f, 0x6f, 0x70, 0x74, 0x69,
+	0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x18, 0x04, 0x20, 0x01, 0x28,
+	0x04, 0x52, 0x0e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x55, 0x69, 0x6e, 0x74, 0x36,
+	0x34, 0x12, 0x27, 0x0a, 0x0f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x69,
+	0x6e, 0x74, 0x33, 0x32, 0x18, 0x05, 0x20, 0x01, 0x28, 0x11, 0x52, 0x0e, 0x6f, 0x70, 0x74, 0x69,
+	0x6f, 0x6e, 0x61, 0x6c, 0x53, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x27, 0x0a, 0x0f, 0x6f, 0x70,
+	0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x18, 0x06, 0x20,
+	0x01, 0x28, 0x12, 0x52, 0x0e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x53, 0x69, 0x6e,
+	0x74, 0x36, 0x34, 0x12, 0x29, 0x0a, 0x10, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f,
+	0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x18, 0x07, 0x20, 0x01, 0x28, 0x07, 0x52, 0x0f, 0x6f,
+	0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x46, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x12, 0x29,
+	0x0a, 0x10, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64,
+	0x36, 0x34, 0x18, 0x08, 0x20, 0x01, 0x28, 0x06, 0x52, 0x0f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e,
+	0x61, 0x6c, 0x46, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x12, 0x2b, 0x0a, 0x11, 0x6f, 0x70, 0x74,
+	0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x18, 0x09,
+	0x20, 0x01, 0x28, 0x0f, 0x52, 0x10, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x53, 0x66,
+	0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x12, 0x2b, 0x0a, 0x11, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e,
+	0x61, 0x6c, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x18, 0x0a, 0x20, 0x01, 0x28,
+	0x10, 0x52, 0x10, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x53, 0x66, 0x69, 0x78, 0x65,
+	0x64, 0x36, 0x34, 0x12, 0x25, 0x0a, 0x0e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f,
+	0x66, 0x6c, 0x6f, 0x61, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0d, 0x6f, 0x70, 0x74,
+	0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x6f, 0x70,
+	0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x18, 0x0c, 0x20,
+	0x01, 0x28, 0x01, 0x52, 0x0e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x44, 0x6f, 0x75,
+	0x62, 0x6c, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f,
+	0x62, 0x6f, 0x6f, 0x6c, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x6f, 0x70, 0x74, 0x69,
+	0x6f, 0x6e, 0x61, 0x6c, 0x42, 0x6f, 0x6f, 0x6c, 0x12, 0x27, 0x0a, 0x0f, 0x6f, 0x70, 0x74, 0x69,
+	0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x0e, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x0e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x53, 0x74, 0x72, 0x69, 0x6e,
+	0x67, 0x12, 0x25, 0x0a, 0x0e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x62, 0x79,
+	0x74, 0x65, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x6f, 0x70, 0x74, 0x69, 0x6f,
+	0x6e, 0x61, 0x6c, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x54, 0x0a, 0x0d, 0x6f, 0x70, 0x74, 0x69,
+	0x6f, 0x6e, 0x61, 0x6c, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0a, 0x32,
+	0x2e, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
+	0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65,
+	0x73, 0x2e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52,
+	0x0d, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x66,
+	0x0a, 0x17, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65,
+	0x64, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x2e, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
+	0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65,
+	0x73, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52,
+	0x15, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x4d,
+	0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x5d, 0x0a, 0x14, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e,
+	0x61, 0x6c, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x18, 0x15,
+	0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c,
+	0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75,
+	0x6d, 0x52, 0x12, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4e, 0x65, 0x73, 0x74, 0x65,
+	0x64, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x25, 0x0a, 0x0e, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65,
+	0x64, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x18, 0x1f, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0d, 0x72,
+	0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x25, 0x0a, 0x0e,
+	0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x18, 0x20,
+	0x20, 0x03, 0x28, 0x03, 0x52, 0x0d, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x49, 0x6e,
+	0x74, 0x36, 0x34, 0x12, 0x27, 0x0a, 0x0f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f,
+	0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x18, 0x21, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x0e, 0x72, 0x65,
+	0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x27, 0x0a, 0x0f,
+	0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x18,
+	0x22, 0x20, 0x03, 0x28, 0x04, 0x52, 0x0e, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x55,
+	0x69, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x27, 0x0a, 0x0f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65,
+	0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x18, 0x23, 0x20, 0x03, 0x28, 0x11, 0x52, 0x0e,
+	0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x27,
+	0x0a, 0x0f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x36,
+	0x34, 0x18, 0x24, 0x20, 0x03, 0x28, 0x12, 0x52, 0x0e, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65,
+	0x64, 0x53, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x29, 0x0a, 0x10, 0x72, 0x65, 0x70, 0x65, 0x61,
+	0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x18, 0x25, 0x20, 0x03, 0x28,
+	0x07, 0x52, 0x0f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x78, 0x65, 0x64,
+	0x33, 0x32, 0x12, 0x29, 0x0a, 0x10, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66,
+	0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x18, 0x26, 0x20, 0x03, 0x28, 0x06, 0x52, 0x0f, 0x72, 0x65,
+	0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x12, 0x2b, 0x0a,
+	0x11, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64,
+	0x33, 0x32, 0x18, 0x27, 0x20, 0x03, 0x28, 0x0f, 0x52, 0x10, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74,
+	0x65, 0x64, 0x53, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x12, 0x2b, 0x0a, 0x11, 0x72, 0x65,
+	0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x18,
+	0x28, 0x20, 0x03, 0x28, 0x10, 0x52, 0x10, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53,
+	0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x12, 0x25, 0x0a, 0x0e, 0x72, 0x65, 0x70, 0x65, 0x61,
+	0x74, 0x65, 0x64, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x18, 0x29, 0x20, 0x03, 0x28, 0x02, 0x52,
+	0x0d, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x12, 0x27,
+	0x0a, 0x0f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c,
+	0x65, 0x18, 0x2a, 0x20, 0x03, 0x28, 0x01, 0x52, 0x0e, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65,
+	0x64, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x70, 0x65, 0x61,
+	0x74, 0x65, 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x18, 0x2b, 0x20, 0x03, 0x28, 0x08, 0x52, 0x0c,
+	0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x6f, 0x6f, 0x6c, 0x12, 0x27, 0x0a, 0x0f,
+	0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18,
+	0x2c, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53,
+	0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x25, 0x0a, 0x0e, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65,
+	0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x2d, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x0d, 0x72,
+	0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x54, 0x0a, 0x0d,
+	0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x2e, 0x20,
+	0x03, 0x28, 0x0a, 0x32, 0x2e, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c,
+	0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x47, 0x72,
+	0x6f, 0x75, 0x70, 0x52, 0x0d, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x67, 0x72, 0x6f,
+	0x75, 0x70, 0x12, 0x66, 0x0a, 0x17, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x6e,
+	0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x30, 0x20,
+	0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c,
+	0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73,
+	0x61, 0x67, 0x65, 0x52, 0x15, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x4e, 0x65, 0x73,
+	0x74, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x5d, 0x0a, 0x14, 0x72, 0x65,
+	0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e,
+	0x75, 0x6d, 0x18, 0x33, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65,
+	0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65,
+	0x64, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x12, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x4e,
+	0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x5b, 0x0a, 0x0f, 0x6d, 0x61, 0x70,
+	0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x18, 0x38, 0x20, 0x03,
+	0x28, 0x0b, 0x32, 0x33, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54,
+	0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x49, 0x6e, 0x74,
+	0x33, 0x32, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33,
+	0x32, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x5b, 0x0a, 0x0f, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e,
+	0x74, 0x36, 0x34, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x18, 0x39, 0x20, 0x03, 0x28, 0x0b, 0x32,
+	0x33, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
+	0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65,
+	0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x45,
+	0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x49, 0x6e,
+	0x74, 0x36, 0x34, 0x12, 0x61, 0x0a, 0x11, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33,
+	0x32, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x18, 0x3a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35,
+	0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74,
+	0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73,
+	0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32,
+	0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0f, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32,
+	0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x61, 0x0a, 0x11, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69,
+	0x6e, 0x74, 0x36, 0x34, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x18, 0x3b, 0x20, 0x03, 0x28,
+	0x0b, 0x32, 0x35, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79,
+	0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x55, 0x69, 0x6e,
+	0x74, 0x36, 0x34, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0f, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e,
+	0x74, 0x36, 0x34, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x61, 0x0a, 0x11, 0x6d, 0x61, 0x70,
+	0x5f, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x18, 0x3c,
+	0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c,
+	0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x53, 0x69, 0x6e, 0x74, 0x33, 0x32,
+	0x53, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0f, 0x6d, 0x61, 0x70,
+	0x53, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x53, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x61, 0x0a, 0x11,
+	0x6d, 0x61, 0x70, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x36,
+	0x34, 0x18, 0x3d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73,
+	0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x53, 0x69, 0x6e,
+	0x74, 0x36, 0x34, 0x53, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0f,
+	0x6d, 0x61, 0x70, 0x53, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x53, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x12,
+	0x67, 0x0a, 0x13, 0x6d, 0x61, 0x70, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x66,
+	0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x18, 0x3e, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x67,
+	0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73,
+	0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d,
+	0x61, 0x70, 0x46, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x46, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32,
+	0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x6d, 0x61, 0x70, 0x46, 0x69, 0x78, 0x65, 0x64, 0x33,
+	0x32, 0x46, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x12, 0x67, 0x0a, 0x13, 0x6d, 0x61, 0x70, 0x5f,
+	0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x18,
+	0x3f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41,
+	0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x46, 0x69, 0x78, 0x65, 0x64,
+	0x36, 0x34, 0x46, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11,
+	0x6d, 0x61, 0x70, 0x46, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x46, 0x69, 0x78, 0x65, 0x64, 0x36,
+	0x34, 0x12, 0x6d, 0x0a, 0x15, 0x6d, 0x61, 0x70, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33,
+	0x32, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x18, 0x40, 0x20, 0x03, 0x28, 0x0b,
+	0x32, 0x39, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70,
+	0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x53, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x53, 0x66,
+	0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x13, 0x6d, 0x61, 0x70,
+	0x53, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x53, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32,
+	0x12, 0x6d, 0x0a, 0x15, 0x6d, 0x61, 0x70, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34,
+	0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x18, 0x41, 0x20, 0x03, 0x28, 0x0b, 0x32,
+	0x39, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
+	0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65,
+	0x73, 0x2e, 0x4d, 0x61, 0x70, 0x53, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x53, 0x66, 0x69,
+	0x78, 0x65, 0x64, 0x36, 0x34, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x13, 0x6d, 0x61, 0x70, 0x53,
+	0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x53, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x12,
+	0x5b, 0x0a, 0x0f, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x66, 0x6c, 0x6f,
+	0x61, 0x74, 0x18, 0x42, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65,
+	0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e,
+	0x74, 0x33, 0x32, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x6d,
+	0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x12, 0x5e, 0x0a, 0x10,
+	0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65,
+	0x18, 0x43, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74,
+	0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33,
+	0x32, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x6d, 0x61,
+	0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x12, 0x55, 0x0a, 0x0d,
+	0x6d, 0x61, 0x70, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x18, 0x44, 0x20,
+	0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c,
+	0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x42, 0x6f, 0x6f,
+	0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x6d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x42,
+	0x6f, 0x6f, 0x6c, 0x12, 0x61, 0x0a, 0x11, 0x6d, 0x61, 0x70, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e,
+	0x67, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x45, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35,
+	0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74,
+	0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73,
+	0x2e, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67,
+	0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0f, 0x6d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67,
+	0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x5e, 0x0a, 0x10, 0x6d, 0x61, 0x70, 0x5f, 0x73, 0x74,
+	0x72, 0x69, 0x6e, 0x67, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x46, 0x20, 0x03, 0x28, 0x0b,
+	0x32, 0x34, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70,
+	0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x42, 0x79, 0x74, 0x65,
+	0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x6d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e,
+	0x67, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x77, 0x0a, 0x19, 0x6d, 0x61, 0x70, 0x5f, 0x73, 0x74,
+	0x72, 0x69, 0x6e, 0x67, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x6d, 0x65, 0x73, 0x73,
+	0x61, 0x67, 0x65, 0x18, 0x47, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x67, 0x6f, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54,
+	0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x53,
+	0x74, 0x72, 0x69, 0x6e, 0x67, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61,
+	0x67, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x16, 0x6d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69,
+	0x6e, 0x67, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12,
+	0x6e, 0x0a, 0x16, 0x6d, 0x61, 0x70, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x6e, 0x65,
+	0x73, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x18, 0x49, 0x20, 0x03, 0x28, 0x0b, 0x32,
+	0x39, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
+	0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65,
+	0x73, 0x2e, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4e, 0x65, 0x73, 0x74, 0x65,
+	0x64, 0x45, 0x6e, 0x75, 0x6d, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x13, 0x6d, 0x61, 0x70, 0x53,
+	0x74, 0x72, 0x69, 0x6e, 0x67, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x12,
+	0x23, 0x0a, 0x0c, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x18,
+	0x6f, 0x20, 0x01, 0x28, 0x0d, 0x48, 0x00, 0x52, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x55, 0x69,
+	0x6e, 0x74, 0x33, 0x32, 0x12, 0x62, 0x0a, 0x14, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x6e, 0x65,
+	0x73, 0x74, 0x65, 0x64, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x70, 0x20, 0x01,
+	0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54,
+	0x79, 0x70, 0x65, 0x73, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61,
+	0x67, 0x65, 0x48, 0x00, 0x52, 0x12, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x4e, 0x65, 0x73, 0x74, 0x65,
+	0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x23, 0x0a, 0x0c, 0x6f, 0x6e, 0x65, 0x6f,
+	0x66, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x71, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00,
+	0x52, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x21, 0x0a,
+	0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x72, 0x20, 0x01,
+	0x28, 0x0c, 0x48, 0x00, 0x52, 0x0a, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x42, 0x79, 0x74, 0x65, 0x73,
+	0x12, 0x1f, 0x0a, 0x0a, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x18, 0x73,
+	0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x09, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x42, 0x6f, 0x6f,
+	0x6c, 0x12, 0x23, 0x0a, 0x0c, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36,
+	0x34, 0x18, 0x74, 0x20, 0x01, 0x28, 0x04, 0x48, 0x00, 0x52, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66,
+	0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x21, 0x0a, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f,
+	0x66, 0x6c, 0x6f, 0x61, 0x74, 0x18, 0x75, 0x20, 0x01, 0x28, 0x02, 0x48, 0x00, 0x52, 0x0a, 0x6f,
+	0x6e, 0x65, 0x6f, 0x66, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x12, 0x23, 0x0a, 0x0c, 0x6f, 0x6e, 0x65,
+	0x6f, 0x66, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x18, 0x76, 0x20, 0x01, 0x28, 0x01, 0x48,
+	0x00, 0x52, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x12, 0x4c,
+	0x0a, 0x0a, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x18, 0x77, 0x20, 0x01,
+	0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54,
+	0x79, 0x70, 0x65, 0x73, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x48,
+	0x00, 0x52, 0x09, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x45, 0x6e, 0x75, 0x6d, 0x1a, 0x61, 0x0a, 0x0d,
+	0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x0c, 0x0a,
+	0x01, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x01, 0x61, 0x12, 0x42, 0x0a, 0x0b, 0x63,
+	0x6f, 0x72, 0x65, 0x63, 0x75, 0x72, 0x73, 0x69, 0x76, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b,
+	0x32, 0x20, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70,
+	0x65, 0x73, 0x52, 0x0b, 0x63, 0x6f, 0x72, 0x65, 0x63, 0x75, 0x72, 0x73, 0x69, 0x76, 0x65, 0x1a,
+	0x1d, 0x0a, 0x0d, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x47, 0x72, 0x6f, 0x75, 0x70,
+	0x12, 0x0c, 0x0a, 0x01, 0x61, 0x18, 0x11, 0x20, 0x01, 0x28, 0x05, 0x52, 0x01, 0x61, 0x1a, 0x1d,
+	0x0a, 0x0d, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12,
+	0x0c, 0x0a, 0x01, 0x61, 0x18, 0x2f, 0x20, 0x01, 0x28, 0x05, 0x52, 0x01, 0x61, 0x1a, 0x40, 0x0a,
+	0x12, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x45, 0x6e,
+	0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05,
+	0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02,
+	0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a,
+	0x40, 0x0a, 0x12, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x49, 0x6e, 0x74, 0x36, 0x34,
+	0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01,
+	0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,
+	0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38,
+	0x01, 0x1a, 0x42, 0x0a, 0x14, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x55, 0x69,
+	0x6e, 0x74, 0x33, 0x32, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79,
+	0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76,
+	0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75,
+	0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x42, 0x0a, 0x14, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74,
+	0x36, 0x34, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a,
+	0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12,
+	0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05,
+	0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x42, 0x0a, 0x14, 0x4d, 0x61, 0x70,
+	0x53, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x53, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x45, 0x6e, 0x74, 0x72,
+	0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x11, 0x52, 0x03,
+	0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01,
+	0x28, 0x11, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x42, 0x0a,
+	0x14, 0x4d, 0x61, 0x70, 0x53, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x53, 0x69, 0x6e, 0x74, 0x36, 0x34,
+	0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01,
+	0x28, 0x12, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,
+	0x18, 0x02, 0x20, 0x01, 0x28, 0x12, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38,
+	0x01, 0x1a, 0x44, 0x0a, 0x16, 0x4d, 0x61, 0x70, 0x46, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x46,
+	0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b,
+	0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x07, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a,
+	0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x07, 0x52, 0x05, 0x76, 0x61,
+	0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x44, 0x0a, 0x16, 0x4d, 0x61, 0x70, 0x46, 0x69,
+	0x78, 0x65, 0x64, 0x36, 0x34, 0x46, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x45, 0x6e, 0x74, 0x72,
+	0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x06, 0x52, 0x03,
+	0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01,
+	0x28, 0x06, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x46, 0x0a,
+	0x18, 0x4d, 0x61, 0x70, 0x53, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x53, 0x66, 0x69, 0x78,
+	0x65, 0x64, 0x33, 0x32, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79,
+	0x18, 0x01, 0x20, 0x01, 0x28, 0x0f, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76,
+	0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0f, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75,
+	0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x46, 0x0a, 0x18, 0x4d, 0x61, 0x70, 0x53, 0x66, 0x69, 0x78,
+	0x65, 0x64, 0x36, 0x34, 0x53, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x45, 0x6e, 0x74, 0x72,
+	0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x10, 0x52, 0x03,
+	0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01,
+	0x28, 0x10, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x40, 0x0a,
+	0x12, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x45, 0x6e,
+	0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05,
+	0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02,
+	0x20, 0x01, 0x28, 0x02, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a,
+	0x41, 0x0a, 0x13, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x44, 0x6f, 0x75, 0x62, 0x6c,
+	0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20,
+	0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75,
+	0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02,
+	0x38, 0x01, 0x1a, 0x3e, 0x0a, 0x10, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x42, 0x6f, 0x6f,
+	0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20,
+	0x01, 0x28, 0x08, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75,
+	0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02,
+	0x38, 0x01, 0x1a, 0x42, 0x0a, 0x14, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x53,
+	0x74, 0x72, 0x69, 0x6e, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65,
+	0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05,
+	0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c,
+	0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x41, 0x0a, 0x13, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72,
+	0x69, 0x6e, 0x67, 0x42, 0x79, 0x74, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a,
+	0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12,
+	0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05,
+	0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x79, 0x0a, 0x1b, 0x4d, 0x61, 0x70,
+	0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73,
+	0x61, 0x67, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x44, 0x0a, 0x05, 0x76, 0x61,
+	0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x67, 0x6f, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54,
+	0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4e, 0x65, 0x73, 0x74,
+	0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,
+	0x3a, 0x02, 0x38, 0x01, 0x1a, 0x73, 0x0a, 0x18, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e,
+	0x67, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x45, 0x6e, 0x74, 0x72, 0x79,
+	0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b,
+	0x65, 0x79, 0x12, 0x41, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
+	0x0e, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79,
+	0x70, 0x65, 0x73, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x05,
+	0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x39, 0x0a, 0x0a, 0x4e, 0x65, 0x73,
+	0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x07, 0x0a, 0x03, 0x46, 0x4f, 0x4f, 0x10, 0x00,
+	0x12, 0x07, 0x0a, 0x03, 0x42, 0x41, 0x52, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x42, 0x41, 0x5a,
+	0x10, 0x02, 0x12, 0x10, 0x0a, 0x03, 0x4e, 0x45, 0x47, 0x10, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0x01, 0x42, 0x0d, 0x0a, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x66, 0x69,
+	0x65, 0x6c, 0x64, 0x22, 0x1d, 0x0a, 0x11, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78,
+	0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2a, 0x08, 0x08, 0x01, 0x10, 0x80, 0x80, 0x80,
+	0x80, 0x02, 0x22, 0x27, 0x0a, 0x17, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x47, 0x72,
+	0x6f, 0x75, 0x70, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x0c, 0x0a,
+	0x01, 0x61, 0x18, 0x11, 0x20, 0x01, 0x28, 0x05, 0x52, 0x01, 0x61, 0x22, 0x27, 0x0a, 0x17, 0x52,
+	0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x65, 0x78, 0x74,
+	0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x0c, 0x0a, 0x01, 0x61, 0x18, 0x2f, 0x20, 0x01, 0x28,
+	0x05, 0x52, 0x01, 0x61, 0x3a, 0x5f, 0x0a, 0x18, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c,
+	0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e,
+	0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74,
+	0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x16, 0x6f,
+	0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x45, 0x78, 0x74, 0x65,
+	0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x5f, 0x0a, 0x18, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61,
+	0x6c, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f,
+	0x6e, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78,
+	0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x16,
+	0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x45, 0x78, 0x74,
+	0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x61, 0x0a, 0x19, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e,
+	0x61, 0x6c, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73,
+	0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c,
+	0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d,
+	0x52, 0x17, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32,
+	0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x61, 0x0a, 0x19, 0x6f, 0x70, 0x74,
+	0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x65, 0x78, 0x74,
+	0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74,
+	0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20,
+	0x01, 0x28, 0x04, 0x52, 0x17, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x55, 0x69, 0x6e,
+	0x74, 0x36, 0x34, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x61, 0x0a, 0x19,
+	0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f,
+	0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54,
+	0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73,
+	0x18, 0x05, 0x20, 0x01, 0x28, 0x11, 0x52, 0x17, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c,
+	0x53, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3a,
+	0x61, 0x0a, 0x19, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x69, 0x6e, 0x74,
+	0x36, 0x34, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x67,
+	0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73,
+	0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69,
+	0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x12, 0x52, 0x17, 0x6f, 0x70, 0x74, 0x69, 0x6f,
+	0x6e, 0x61, 0x6c, 0x53, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69,
+	0x6f, 0x6e, 0x3a, 0x63, 0x0a, 0x1a, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x66,
+	0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e,
+	0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74,
+	0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x07, 0x52, 0x18, 0x6f,
+	0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x46, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x45, 0x78,
+	0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x63, 0x0a, 0x1a, 0x6f, 0x70, 0x74, 0x69, 0x6f,
+	0x6e, 0x61, 0x6c, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x65, 0x78, 0x74, 0x65,
+	0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41,
+	0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x08, 0x20, 0x01,
+	0x28, 0x06, 0x52, 0x18, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x46, 0x69, 0x78, 0x65,
+	0x64, 0x36, 0x34, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x65, 0x0a, 0x1b,
+	0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33,
+	0x32, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x67, 0x6f,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74,
+	0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f,
+	0x6e, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0f, 0x52, 0x19, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e,
+	0x61, 0x6c, 0x53, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73,
+	0x69, 0x6f, 0x6e, 0x3a, 0x65, 0x0a, 0x1b, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f,
+	0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69,
+	0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45,
+	0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x10, 0x52,
+	0x19, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x53, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36,
+	0x34, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x5f, 0x0a, 0x18, 0x6f, 0x70,
+	0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x65, 0x78, 0x74,
+	0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74,
+	0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0b, 0x20,
+	0x01, 0x28, 0x02, 0x52, 0x16, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x46, 0x6c, 0x6f,
+	0x61, 0x74, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x61, 0x0a, 0x19, 0x6f,
+	0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x65,
+	0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65,
+	0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18,
+	0x0c, 0x20, 0x01, 0x28, 0x01, 0x52, 0x17, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x44,
+	0x6f, 0x75, 0x62, 0x6c, 0x65, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x5d,
+	0x0a, 0x17, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f,
+	0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54,
+	0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73,
+	0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c,
+	0x42, 0x6f, 0x6f, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x61, 0x0a,
+	0x19, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67,
+	0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e,
+	0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e,
+	0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x17, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61,
+	0x6c, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e,
+	0x3a, 0x5f, 0x0a, 0x18, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x62, 0x79, 0x74,
+	0x65, 0x73, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x67,
+	0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73,
+	0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69,
+	0x6f, 0x6e, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x16, 0x6f, 0x70, 0x74, 0x69, 0x6f,
+	0x6e, 0x61, 0x6c, 0x42, 0x79, 0x74, 0x65, 0x73, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f,
+	0x6e, 0x3a, 0x8b, 0x01, 0x0a, 0x17, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x67, 0x72,
+	0x6f, 0x75, 0x70, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e,
+	0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65,
+	0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73,
+	0x69, 0x6f, 0x6e, 0x73, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0a, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e,
+	0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x65, 0x78,
+	0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x16, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61,
+	0x6c, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3a,
+	0xa0, 0x01, 0x0a, 0x21, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x6e, 0x65, 0x73,
+	0x74, 0x65, 0x64, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x65, 0x78, 0x74, 0x65,
+	0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41,
+	0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x12, 0x20, 0x01,
+	0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54,
+	0x79, 0x70, 0x65, 0x73, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61,
+	0x67, 0x65, 0x52, 0x1e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4e, 0x65, 0x73, 0x74,
+	0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69,
+	0x6f, 0x6e, 0x3a, 0x97, 0x01, 0x0a, 0x1e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f,
+	0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x65, 0x78, 0x74, 0x65,
+	0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41,
+	0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x15, 0x20, 0x01,
+	0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54,
+	0x79, 0x70, 0x65, 0x73, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x52,
+	0x1b, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45,
+	0x6e, 0x75, 0x6d, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x5f, 0x0a, 0x18,
+	0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x65,
+	0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65,
+	0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18,
+	0x1f, 0x20, 0x03, 0x28, 0x05, 0x52, 0x16, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x49,
+	0x6e, 0x74, 0x33, 0x32, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x5f, 0x0a,
+	0x18, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f,
+	0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54,
+	0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73,
+	0x18, 0x20, 0x20, 0x03, 0x28, 0x03, 0x52, 0x16, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64,
+	0x49, 0x6e, 0x74, 0x36, 0x34, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x61,
+	0x0a, 0x19, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33,
+	0x32, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x67, 0x6f,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74,
+	0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f,
+	0x6e, 0x73, 0x18, 0x21, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x17, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74,
+	0x65, 0x64, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f,
+	0x6e, 0x3a, 0x61, 0x0a, 0x19, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69,
+	0x6e, 0x74, 0x36, 0x34, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x25,
+	0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74,
+	0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e,
+	0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x22, 0x20, 0x03, 0x28, 0x04, 0x52, 0x17, 0x72, 0x65, 0x70,
+	0x65, 0x61, 0x74, 0x65, 0x64, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x45, 0x78, 0x74, 0x65, 0x6e,
+	0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x61, 0x0a, 0x19, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64,
+	0x5f, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f,
+	0x6e, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78,
+	0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x23, 0x20, 0x03, 0x28, 0x11, 0x52, 0x17,
+	0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x45, 0x78,
+	0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x61, 0x0a, 0x19, 0x72, 0x65, 0x70, 0x65, 0x61,
+	0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e,
+	0x73, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c,
+	0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x24, 0x20, 0x03, 0x28,
+	0x12, 0x52, 0x17, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x6e, 0x74, 0x36,
+	0x34, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x63, 0x0a, 0x1a, 0x72, 0x65,
+	0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x65,
+	0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65,
+	0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18,
+	0x25, 0x20, 0x03, 0x28, 0x07, 0x52, 0x18, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46,
+	0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3a,
+	0x63, 0x0a, 0x1a, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65,
+	0x64, 0x36, 0x34, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e,
+	0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65,
+	0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73,
+	0x69, 0x6f, 0x6e, 0x73, 0x18, 0x26, 0x20, 0x03, 0x28, 0x06, 0x52, 0x18, 0x72, 0x65, 0x70, 0x65,
+	0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x45, 0x78, 0x74, 0x65, 0x6e,
+	0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x65, 0x0a, 0x1b, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64,
+	0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73,
+	0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c,
+	0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x27, 0x20, 0x03, 0x28, 0x0f,
+	0x52, 0x19, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x66, 0x69, 0x78, 0x65, 0x64,
+	0x33, 0x32, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x65, 0x0a, 0x1b, 0x72,
+	0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34,
+	0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e,
+	0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e,
+	0x73, 0x18, 0x28, 0x20, 0x03, 0x28, 0x10, 0x52, 0x19, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65,
+	0x64, 0x53, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69,
+	0x6f, 0x6e, 0x3a, 0x5f, 0x0a, 0x18, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66,
+	0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x25,
+	0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74,
+	0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e,
+	0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x29, 0x20, 0x03, 0x28, 0x02, 0x52, 0x16, 0x72, 0x65, 0x70,
+	0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73,
+	0x69, 0x6f, 0x6e, 0x3a, 0x61, 0x0a, 0x19, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f,
+	0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e,
+	0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74,
+	0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x2a, 0x20, 0x03, 0x28, 0x01, 0x52, 0x17, 0x72,
+	0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x45, 0x78, 0x74,
+	0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x5d, 0x0a, 0x17, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74,
+	0x65, 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f,
+	0x6e, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78,
+	0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x2b, 0x20, 0x03, 0x28, 0x08, 0x52, 0x15,
+	0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x6f, 0x6f, 0x6c, 0x45, 0x78, 0x74, 0x65,
+	0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x61, 0x0a, 0x19, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65,
+	0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69,
+	0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45,
+	0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x2c, 0x20, 0x03, 0x28, 0x09, 0x52,
+	0x17, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x45,
+	0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x5f, 0x0a, 0x18, 0x72, 0x65, 0x70, 0x65,
+	0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e,
+	0x73, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c,
+	0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x2d, 0x20, 0x03, 0x28,
+	0x0c, 0x52, 0x16, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x74, 0x65, 0x73,
+	0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x8b, 0x01, 0x0a, 0x17, 0x72, 0x65,
+	0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x65, 0x78, 0x74, 0x65,
+	0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41,
+	0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x2e, 0x20, 0x03,
+	0x28, 0x0a, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64,
+	0x47, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52,
+	0x16, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x45, 0x78,
+	0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0xa0, 0x01, 0x0a, 0x21, 0x72, 0x65, 0x70, 0x65,
+	0x61, 0x74, 0x65, 0x64, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x6d, 0x65, 0x73, 0x73,
+	0x61, 0x67, 0x65, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e,
+	0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65,
+	0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73,
+	0x69, 0x6f, 0x6e, 0x73, 0x18, 0x30, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x67, 0x6f, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e,
+	0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4e, 0x65, 0x73,
+	0x74, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x1e, 0x72, 0x65, 0x70, 0x65,
+	0x61, 0x74, 0x65, 0x64, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67,
+	0x65, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x97, 0x01, 0x0a, 0x1e, 0x72,
+	0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x65,
+	0x6e, 0x75, 0x6d, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e,
+	0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65,
+	0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73,
+	0x69, 0x6f, 0x6e, 0x73, 0x18, 0x33, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e,
+	0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4e, 0x65, 0x73,
+	0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x1b, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65,
+	0x64, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x45, 0x78, 0x74, 0x65, 0x6e,
+	0x73, 0x69, 0x6f, 0x6e, 0x42, 0x38, 0x5a, 0x36, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63,
+	0x6f, 0x6d, 0x2f, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
+	0x75, 0x66, 0x2f, 0x76, 0x32, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x74,
+	0x65, 0x73, 0x74, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x2f, 0x74, 0x65, 0x73, 0x74,
+}
+
+var fileDescriptor_c161fcfdc0c3ff1e_gzipped = func() []byte {
+	bb := new(bytes.Buffer)
+	zw, _ := gzip.NewWriterLevel(bb, gzip.NoCompression)
+	zw.Write(fileDescriptor_c161fcfdc0c3ff1e)
+	zw.Close()
+	return bb.Bytes()
+}()
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
 var Test_protoFile protoreflect.FileDescriptor
 
-var xxx_Test_protoFile_FileDesc = prototype.File{
-	Syntax:  protoreflect.Proto2,
-	Path:    "test.proto",
-	Package: "goproto.proto.test",
-}
-var xxx_Test_protoFile_EnumTypes = [1]protoreflect.EnumType{
-	prototype.GoEnum(
-		xxx_Test_protoFile_EnumDescs[0].Reference(),
-		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
-			return TestAllTypes_NestedEnum(n)
-		},
-	),
-}
-var xxx_Test_protoFile_EnumDescs = [1]prototype.Enum{
-	{
-		Name: "NestedEnum",
-		Values: []prototype.EnumValue{
-			{Name: "FOO", Number: 0},
-			{Name: "BAR", Number: 1},
-			{Name: "BAZ", Number: 2},
-			{Name: "NEG", Number: -1},
-		},
-	},
-}
-var xxx_Test_protoFile_MessageTypes = [24]protoimpl.MessageType{
-	{Type: prototype.GoMessage(
-		xxx_Test_protoFile_MessageDescs[0].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_TestAllTypes{new(TestAllTypes)}
-		},
-	)},
-	{Type: prototype.GoMessage(
-		xxx_Test_protoFile_MessageDescs[1].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_TestAllExtensions{new(TestAllExtensions)}
-		},
-	)},
-	{Type: prototype.GoMessage(
-		xxx_Test_protoFile_MessageDescs[2].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_OptionalGroupExtension{new(OptionalGroupExtension)}
-		},
-	)},
-	{Type: prototype.GoMessage(
-		xxx_Test_protoFile_MessageDescs[3].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_RepeatedGroupExtension{new(RepeatedGroupExtension)}
-		},
-	)},
-	{Type: prototype.GoMessage(
-		xxx_Test_protoFile_MessageDescs[4].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_TestAllTypes_NestedMessage{new(TestAllTypes_NestedMessage)}
-		},
-	)},
-	{Type: prototype.GoMessage(
-		xxx_Test_protoFile_MessageDescs[5].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_TestAllTypes_OptionalGroup{new(TestAllTypes_OptionalGroup)}
-		},
-	)},
-	{Type: prototype.GoMessage(
-		xxx_Test_protoFile_MessageDescs[6].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_TestAllTypes_RepeatedGroup{new(TestAllTypes_RepeatedGroup)}
-		},
-	)},
-	{ /* no message type for TestAllTypes_MapInt32Int32Entry */ },
-	{ /* no message type for TestAllTypes_MapInt64Int64Entry */ },
-	{ /* no message type for TestAllTypes_MapUint32Uint32Entry */ },
-	{ /* no message type for TestAllTypes_MapUint64Uint64Entry */ },
-	{ /* no message type for TestAllTypes_MapSint32Sint32Entry */ },
-	{ /* no message type for TestAllTypes_MapSint64Sint64Entry */ },
-	{ /* no message type for TestAllTypes_MapFixed32Fixed32Entry */ },
-	{ /* no message type for TestAllTypes_MapFixed64Fixed64Entry */ },
-	{ /* no message type for TestAllTypes_MapSfixed32Sfixed32Entry */ },
-	{ /* no message type for TestAllTypes_MapSfixed64Sfixed64Entry */ },
-	{ /* no message type for TestAllTypes_MapInt32FloatEntry */ },
-	{ /* no message type for TestAllTypes_MapInt32DoubleEntry */ },
-	{ /* no message type for TestAllTypes_MapBoolBoolEntry */ },
-	{ /* no message type for TestAllTypes_MapStringStringEntry */ },
-	{ /* no message type for TestAllTypes_MapStringBytesEntry */ },
-	{ /* no message type for TestAllTypes_MapStringNestedMessageEntry */ },
-	{ /* no message type for TestAllTypes_MapStringNestedEnumEntry */ },
-}
-var xxx_Test_protoFile_MessageDescs = [24]prototype.Message{
-	{
-		Name: "TestAllTypes",
-		Fields: []prototype.Field{
-			{
-				Name:        "optional_int32",
-				Number:      1,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Int32Kind,
-				JSONName:    "optionalInt32",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "optional_int64",
-				Number:      2,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Int64Kind,
-				JSONName:    "optionalInt64",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "optional_uint32",
-				Number:      3,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Uint32Kind,
-				JSONName:    "optionalUint32",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "optional_uint64",
-				Number:      4,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Uint64Kind,
-				JSONName:    "optionalUint64",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "optional_sint32",
-				Number:      5,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Sint32Kind,
-				JSONName:    "optionalSint32",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "optional_sint64",
-				Number:      6,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Sint64Kind,
-				JSONName:    "optionalSint64",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "optional_fixed32",
-				Number:      7,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Fixed32Kind,
-				JSONName:    "optionalFixed32",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "optional_fixed64",
-				Number:      8,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Fixed64Kind,
-				JSONName:    "optionalFixed64",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "optional_sfixed32",
-				Number:      9,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Sfixed32Kind,
-				JSONName:    "optionalSfixed32",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "optional_sfixed64",
-				Number:      10,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Sfixed64Kind,
-				JSONName:    "optionalSfixed64",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "optional_float",
-				Number:      11,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.FloatKind,
-				JSONName:    "optionalFloat",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "optional_double",
-				Number:      12,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.DoubleKind,
-				JSONName:    "optionalDouble",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "optional_bool",
-				Number:      13,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.BoolKind,
-				JSONName:    "optionalBool",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "optional_string",
-				Number:      14,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.StringKind,
-				JSONName:    "optionalString",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "optional_bytes",
-				Number:      15,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.BytesKind,
-				JSONName:    "optionalBytes",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "optionalgroup",
-				Number:      16,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.GroupKind,
-				JSONName:    "optionalgroup",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "optional_nested_message",
-				Number:      18,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.MessageKind,
-				JSONName:    "optionalNestedMessage",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "optional_nested_enum",
-				Number:      21,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.EnumKind,
-				JSONName:    "optionalNestedEnum",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "repeated_int32",
-				Number:      31,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.Int32Kind,
-				JSONName:    "repeatedInt32",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "repeated_int64",
-				Number:      32,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.Int64Kind,
-				JSONName:    "repeatedInt64",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "repeated_uint32",
-				Number:      33,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.Uint32Kind,
-				JSONName:    "repeatedUint32",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "repeated_uint64",
-				Number:      34,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.Uint64Kind,
-				JSONName:    "repeatedUint64",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "repeated_sint32",
-				Number:      35,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.Sint32Kind,
-				JSONName:    "repeatedSint32",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "repeated_sint64",
-				Number:      36,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.Sint64Kind,
-				JSONName:    "repeatedSint64",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "repeated_fixed32",
-				Number:      37,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.Fixed32Kind,
-				JSONName:    "repeatedFixed32",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "repeated_fixed64",
-				Number:      38,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.Fixed64Kind,
-				JSONName:    "repeatedFixed64",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "repeated_sfixed32",
-				Number:      39,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.Sfixed32Kind,
-				JSONName:    "repeatedSfixed32",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "repeated_sfixed64",
-				Number:      40,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.Sfixed64Kind,
-				JSONName:    "repeatedSfixed64",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "repeated_float",
-				Number:      41,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.FloatKind,
-				JSONName:    "repeatedFloat",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "repeated_double",
-				Number:      42,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.DoubleKind,
-				JSONName:    "repeatedDouble",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "repeated_bool",
-				Number:      43,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.BoolKind,
-				JSONName:    "repeatedBool",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "repeated_string",
-				Number:      44,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.StringKind,
-				JSONName:    "repeatedString",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "repeated_bytes",
-				Number:      45,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.BytesKind,
-				JSONName:    "repeatedBytes",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "repeatedgroup",
-				Number:      46,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.GroupKind,
-				JSONName:    "repeatedgroup",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "repeated_nested_message",
-				Number:      48,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.MessageKind,
-				JSONName:    "repeatedNestedMessage",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "repeated_nested_enum",
-				Number:      51,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.EnumKind,
-				JSONName:    "repeatedNestedEnum",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "map_int32_int32",
-				Number:      56,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.MessageKind,
-				JSONName:    "mapInt32Int32",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "map_int64_int64",
-				Number:      57,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.MessageKind,
-				JSONName:    "mapInt64Int64",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "map_uint32_uint32",
-				Number:      58,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.MessageKind,
-				JSONName:    "mapUint32Uint32",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "map_uint64_uint64",
-				Number:      59,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.MessageKind,
-				JSONName:    "mapUint64Uint64",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "map_sint32_sint32",
-				Number:      60,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.MessageKind,
-				JSONName:    "mapSint32Sint32",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "map_sint64_sint64",
-				Number:      61,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.MessageKind,
-				JSONName:    "mapSint64Sint64",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "map_fixed32_fixed32",
-				Number:      62,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.MessageKind,
-				JSONName:    "mapFixed32Fixed32",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "map_fixed64_fixed64",
-				Number:      63,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.MessageKind,
-				JSONName:    "mapFixed64Fixed64",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "map_sfixed32_sfixed32",
-				Number:      64,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.MessageKind,
-				JSONName:    "mapSfixed32Sfixed32",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "map_sfixed64_sfixed64",
-				Number:      65,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.MessageKind,
-				JSONName:    "mapSfixed64Sfixed64",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "map_int32_float",
-				Number:      66,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.MessageKind,
-				JSONName:    "mapInt32Float",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "map_int32_double",
-				Number:      67,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.MessageKind,
-				JSONName:    "mapInt32Double",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "map_bool_bool",
-				Number:      68,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.MessageKind,
-				JSONName:    "mapBoolBool",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "map_string_string",
-				Number:      69,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.MessageKind,
-				JSONName:    "mapStringString",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "map_string_bytes",
-				Number:      70,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.MessageKind,
-				JSONName:    "mapStringBytes",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "map_string_nested_message",
-				Number:      71,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.MessageKind,
-				JSONName:    "mapStringNestedMessage",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "map_string_nested_enum",
-				Number:      73,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.MessageKind,
-				JSONName:    "mapStringNestedEnum",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "oneof_uint32",
-				Number:      111,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Uint32Kind,
-				JSONName:    "oneofUint32",
-				OneofName:   "oneof_field",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "oneof_nested_message",
-				Number:      112,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.MessageKind,
-				JSONName:    "oneofNestedMessage",
-				OneofName:   "oneof_field",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "oneof_string",
-				Number:      113,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.StringKind,
-				JSONName:    "oneofString",
-				OneofName:   "oneof_field",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "oneof_bytes",
-				Number:      114,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.BytesKind,
-				JSONName:    "oneofBytes",
-				OneofName:   "oneof_field",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "oneof_bool",
-				Number:      115,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.BoolKind,
-				JSONName:    "oneofBool",
-				OneofName:   "oneof_field",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "oneof_uint64",
-				Number:      116,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Uint64Kind,
-				JSONName:    "oneofUint64",
-				OneofName:   "oneof_field",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "oneof_float",
-				Number:      117,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.FloatKind,
-				JSONName:    "oneofFloat",
-				OneofName:   "oneof_field",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "oneof_double",
-				Number:      118,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.DoubleKind,
-				JSONName:    "oneofDouble",
-				OneofName:   "oneof_field",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "oneof_enum",
-				Number:      119,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.EnumKind,
-				JSONName:    "oneofEnum",
-				OneofName:   "oneof_field",
-				IsPacked:    prototype.False,
-			},
-		},
-		Oneofs: []prototype.Oneof{
-			{Name: "oneof_field"},
-		},
-	},
-	{
-		Name:            "TestAllExtensions",
-		ExtensionRanges: [][2]protoreflect.FieldNumber{{1, 536870912}},
-	},
-	{
-		Name: "OptionalGroup_extension",
-		Fields: []prototype.Field{
-			{
-				Name:        "a",
-				Number:      17,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Int32Kind,
-				JSONName:    "a",
-				IsPacked:    prototype.False,
-			},
-		},
-	},
-	{
-		Name: "RepeatedGroup_extension",
-		Fields: []prototype.Field{
-			{
-				Name:        "a",
-				Number:      47,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Int32Kind,
-				JSONName:    "a",
-				IsPacked:    prototype.False,
-			},
-		},
-	},
-	{
-		Name: "NestedMessage",
-		Fields: []prototype.Field{
-			{
-				Name:        "a",
-				Number:      1,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Int32Kind,
-				JSONName:    "a",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "corecursive",
-				Number:      2,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.MessageKind,
-				JSONName:    "corecursive",
-				IsPacked:    prototype.False,
-			},
-		},
-	},
-	{
-		Name: "OptionalGroup",
-		Fields: []prototype.Field{
-			{
-				Name:        "a",
-				Number:      17,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Int32Kind,
-				JSONName:    "a",
-				IsPacked:    prototype.False,
-			},
-		},
-	},
-	{
-		Name: "RepeatedGroup",
-		Fields: []prototype.Field{
-			{
-				Name:        "a",
-				Number:      47,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Int32Kind,
-				JSONName:    "a",
-				IsPacked:    prototype.False,
-			},
-		},
-	},
-	{
-		Name: "MapInt32Int32Entry",
-		Fields: []prototype.Field{
-			{
-				Name:        "key",
-				Number:      1,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Int32Kind,
-				JSONName:    "key",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "value",
-				Number:      2,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Int32Kind,
-				JSONName:    "value",
-				IsPacked:    prototype.False,
-			},
-		},
-		IsMapEntry: true,
-	},
-	{
-		Name: "MapInt64Int64Entry",
-		Fields: []prototype.Field{
-			{
-				Name:        "key",
-				Number:      1,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Int64Kind,
-				JSONName:    "key",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "value",
-				Number:      2,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Int64Kind,
-				JSONName:    "value",
-				IsPacked:    prototype.False,
-			},
-		},
-		IsMapEntry: true,
-	},
-	{
-		Name: "MapUint32Uint32Entry",
-		Fields: []prototype.Field{
-			{
-				Name:        "key",
-				Number:      1,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Uint32Kind,
-				JSONName:    "key",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "value",
-				Number:      2,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Uint32Kind,
-				JSONName:    "value",
-				IsPacked:    prototype.False,
-			},
-		},
-		IsMapEntry: true,
-	},
-	{
-		Name: "MapUint64Uint64Entry",
-		Fields: []prototype.Field{
-			{
-				Name:        "key",
-				Number:      1,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Uint64Kind,
-				JSONName:    "key",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "value",
-				Number:      2,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Uint64Kind,
-				JSONName:    "value",
-				IsPacked:    prototype.False,
-			},
-		},
-		IsMapEntry: true,
-	},
-	{
-		Name: "MapSint32Sint32Entry",
-		Fields: []prototype.Field{
-			{
-				Name:        "key",
-				Number:      1,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Sint32Kind,
-				JSONName:    "key",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "value",
-				Number:      2,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Sint32Kind,
-				JSONName:    "value",
-				IsPacked:    prototype.False,
-			},
-		},
-		IsMapEntry: true,
-	},
-	{
-		Name: "MapSint64Sint64Entry",
-		Fields: []prototype.Field{
-			{
-				Name:        "key",
-				Number:      1,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Sint64Kind,
-				JSONName:    "key",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "value",
-				Number:      2,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Sint64Kind,
-				JSONName:    "value",
-				IsPacked:    prototype.False,
-			},
-		},
-		IsMapEntry: true,
-	},
-	{
-		Name: "MapFixed32Fixed32Entry",
-		Fields: []prototype.Field{
-			{
-				Name:        "key",
-				Number:      1,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Fixed32Kind,
-				JSONName:    "key",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "value",
-				Number:      2,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Fixed32Kind,
-				JSONName:    "value",
-				IsPacked:    prototype.False,
-			},
-		},
-		IsMapEntry: true,
-	},
-	{
-		Name: "MapFixed64Fixed64Entry",
-		Fields: []prototype.Field{
-			{
-				Name:        "key",
-				Number:      1,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Fixed64Kind,
-				JSONName:    "key",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "value",
-				Number:      2,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Fixed64Kind,
-				JSONName:    "value",
-				IsPacked:    prototype.False,
-			},
-		},
-		IsMapEntry: true,
-	},
-	{
-		Name: "MapSfixed32Sfixed32Entry",
-		Fields: []prototype.Field{
-			{
-				Name:        "key",
-				Number:      1,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Sfixed32Kind,
-				JSONName:    "key",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "value",
-				Number:      2,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Sfixed32Kind,
-				JSONName:    "value",
-				IsPacked:    prototype.False,
-			},
-		},
-		IsMapEntry: true,
-	},
-	{
-		Name: "MapSfixed64Sfixed64Entry",
-		Fields: []prototype.Field{
-			{
-				Name:        "key",
-				Number:      1,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Sfixed64Kind,
-				JSONName:    "key",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "value",
-				Number:      2,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Sfixed64Kind,
-				JSONName:    "value",
-				IsPacked:    prototype.False,
-			},
-		},
-		IsMapEntry: true,
-	},
-	{
-		Name: "MapInt32FloatEntry",
-		Fields: []prototype.Field{
-			{
-				Name:        "key",
-				Number:      1,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Int32Kind,
-				JSONName:    "key",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "value",
-				Number:      2,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.FloatKind,
-				JSONName:    "value",
-				IsPacked:    prototype.False,
-			},
-		},
-		IsMapEntry: true,
-	},
-	{
-		Name: "MapInt32DoubleEntry",
-		Fields: []prototype.Field{
-			{
-				Name:        "key",
-				Number:      1,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Int32Kind,
-				JSONName:    "key",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "value",
-				Number:      2,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.DoubleKind,
-				JSONName:    "value",
-				IsPacked:    prototype.False,
-			},
-		},
-		IsMapEntry: true,
-	},
-	{
-		Name: "MapBoolBoolEntry",
-		Fields: []prototype.Field{
-			{
-				Name:        "key",
-				Number:      1,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.BoolKind,
-				JSONName:    "key",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "value",
-				Number:      2,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.BoolKind,
-				JSONName:    "value",
-				IsPacked:    prototype.False,
-			},
-		},
-		IsMapEntry: true,
-	},
-	{
-		Name: "MapStringStringEntry",
-		Fields: []prototype.Field{
-			{
-				Name:        "key",
-				Number:      1,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.StringKind,
-				JSONName:    "key",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "value",
-				Number:      2,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.StringKind,
-				JSONName:    "value",
-				IsPacked:    prototype.False,
-			},
-		},
-		IsMapEntry: true,
-	},
-	{
-		Name: "MapStringBytesEntry",
-		Fields: []prototype.Field{
-			{
-				Name:        "key",
-				Number:      1,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.StringKind,
-				JSONName:    "key",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "value",
-				Number:      2,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.BytesKind,
-				JSONName:    "value",
-				IsPacked:    prototype.False,
-			},
-		},
-		IsMapEntry: true,
-	},
-	{
-		Name: "MapStringNestedMessageEntry",
-		Fields: []prototype.Field{
-			{
-				Name:        "key",
-				Number:      1,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.StringKind,
-				JSONName:    "key",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "value",
-				Number:      2,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.MessageKind,
-				JSONName:    "value",
-				IsPacked:    prototype.False,
-			},
-		},
-		IsMapEntry: true,
-	},
-	{
-		Name: "MapStringNestedEnumEntry",
-		Fields: []prototype.Field{
-			{
-				Name:        "key",
-				Number:      1,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.StringKind,
-				JSONName:    "key",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "value",
-				Number:      2,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.EnumKind,
-				JSONName:    "value",
-				IsPacked:    prototype.False,
-			},
-		},
-		IsMapEntry: true,
-	},
+var xxx_Test_protoFile_enumTypes [1]protoreflect.EnumType
+var xxx_Test_protoFile_messageTypes [24]protoimpl.MessageType
+var xxx_Test_protoFile_goTypes = []interface{}{
+	(TestAllTypes_NestedEnum)(0),       // 0: goproto.proto.test.TestAllTypes.NestedEnum
+	(*TestAllTypes)(nil),               // 1: goproto.proto.test.TestAllTypes
+	(*TestAllExtensions)(nil),          // 2: goproto.proto.test.TestAllExtensions
+	(*OptionalGroupExtension)(nil),     // 3: goproto.proto.test.OptionalGroup_extension
+	(*RepeatedGroupExtension)(nil),     // 4: goproto.proto.test.RepeatedGroup_extension
+	(*TestAllTypes_NestedMessage)(nil), // 5: goproto.proto.test.TestAllTypes.NestedMessage
+	(*TestAllTypes_OptionalGroup)(nil), // 6: goproto.proto.test.TestAllTypes.OptionalGroup
+	(*TestAllTypes_RepeatedGroup)(nil), // 7: goproto.proto.test.TestAllTypes.RepeatedGroup
+	nil,                                // 8: goproto.proto.test.TestAllTypes.MapInt32Int32Entry
+	nil,                                // 9: goproto.proto.test.TestAllTypes.MapInt64Int64Entry
+	nil,                                // 10: goproto.proto.test.TestAllTypes.MapUint32Uint32Entry
+	nil,                                // 11: goproto.proto.test.TestAllTypes.MapUint64Uint64Entry
+	nil,                                // 12: goproto.proto.test.TestAllTypes.MapSint32Sint32Entry
+	nil,                                // 13: goproto.proto.test.TestAllTypes.MapSint64Sint64Entry
+	nil,                                // 14: goproto.proto.test.TestAllTypes.MapFixed32Fixed32Entry
+	nil,                                // 15: goproto.proto.test.TestAllTypes.MapFixed64Fixed64Entry
+	nil,                                // 16: goproto.proto.test.TestAllTypes.MapSfixed32Sfixed32Entry
+	nil,                                // 17: goproto.proto.test.TestAllTypes.MapSfixed64Sfixed64Entry
+	nil,                                // 18: goproto.proto.test.TestAllTypes.MapInt32FloatEntry
+	nil,                                // 19: goproto.proto.test.TestAllTypes.MapInt32DoubleEntry
+	nil,                                // 20: goproto.proto.test.TestAllTypes.MapBoolBoolEntry
+	nil,                                // 21: goproto.proto.test.TestAllTypes.MapStringStringEntry
+	nil,                                // 22: goproto.proto.test.TestAllTypes.MapStringBytesEntry
+	nil,                                // 23: goproto.proto.test.TestAllTypes.MapStringNestedMessageEntry
+	nil,                                // 24: goproto.proto.test.TestAllTypes.MapStringNestedEnumEntry
+}
+var xxx_Test_protoFile_depIdxs = []int32{
+	2,  // goproto.proto.test.optional_int32_extension:extendee -> goproto.proto.test.TestAllExtensions
+	2,  // goproto.proto.test.optional_int64_extension:extendee -> goproto.proto.test.TestAllExtensions
+	2,  // goproto.proto.test.optional_uint32_extension:extendee -> goproto.proto.test.TestAllExtensions
+	2,  // goproto.proto.test.optional_uint64_extension:extendee -> goproto.proto.test.TestAllExtensions
+	2,  // goproto.proto.test.optional_sint32_extension:extendee -> goproto.proto.test.TestAllExtensions
+	2,  // goproto.proto.test.optional_sint64_extension:extendee -> goproto.proto.test.TestAllExtensions
+	2,  // goproto.proto.test.optional_fixed32_extension:extendee -> goproto.proto.test.TestAllExtensions
+	2,  // goproto.proto.test.optional_fixed64_extension:extendee -> goproto.proto.test.TestAllExtensions
+	2,  // goproto.proto.test.optional_sfixed32_extension:extendee -> goproto.proto.test.TestAllExtensions
+	2,  // goproto.proto.test.optional_sfixed64_extension:extendee -> goproto.proto.test.TestAllExtensions
+	2,  // goproto.proto.test.optional_float_extension:extendee -> goproto.proto.test.TestAllExtensions
+	2,  // goproto.proto.test.optional_double_extension:extendee -> goproto.proto.test.TestAllExtensions
+	2,  // goproto.proto.test.optional_bool_extension:extendee -> goproto.proto.test.TestAllExtensions
+	2,  // goproto.proto.test.optional_string_extension:extendee -> goproto.proto.test.TestAllExtensions
+	2,  // goproto.proto.test.optional_bytes_extension:extendee -> goproto.proto.test.TestAllExtensions
+	2,  // goproto.proto.test.optionalgroup_extension:extendee -> goproto.proto.test.TestAllExtensions
+	2,  // goproto.proto.test.optional_nested_message_extension:extendee -> goproto.proto.test.TestAllExtensions
+	2,  // goproto.proto.test.optional_nested_enum_extension:extendee -> goproto.proto.test.TestAllExtensions
+	2,  // goproto.proto.test.repeated_int32_extension:extendee -> goproto.proto.test.TestAllExtensions
+	2,  // goproto.proto.test.repeated_int64_extension:extendee -> goproto.proto.test.TestAllExtensions
+	2,  // goproto.proto.test.repeated_uint32_extension:extendee -> goproto.proto.test.TestAllExtensions
+	2,  // goproto.proto.test.repeated_uint64_extension:extendee -> goproto.proto.test.TestAllExtensions
+	2,  // goproto.proto.test.repeated_sint32_extension:extendee -> goproto.proto.test.TestAllExtensions
+	2,  // goproto.proto.test.repeated_sint64_extension:extendee -> goproto.proto.test.TestAllExtensions
+	2,  // goproto.proto.test.repeated_fixed32_extension:extendee -> goproto.proto.test.TestAllExtensions
+	2,  // goproto.proto.test.repeated_fixed64_extension:extendee -> goproto.proto.test.TestAllExtensions
+	2,  // goproto.proto.test.repeated_sfixed32_extension:extendee -> goproto.proto.test.TestAllExtensions
+	2,  // goproto.proto.test.repeated_sfixed64_extension:extendee -> goproto.proto.test.TestAllExtensions
+	2,  // goproto.proto.test.repeated_float_extension:extendee -> goproto.proto.test.TestAllExtensions
+	2,  // goproto.proto.test.repeated_double_extension:extendee -> goproto.proto.test.TestAllExtensions
+	2,  // goproto.proto.test.repeated_bool_extension:extendee -> goproto.proto.test.TestAllExtensions
+	2,  // goproto.proto.test.repeated_string_extension:extendee -> goproto.proto.test.TestAllExtensions
+	2,  // goproto.proto.test.repeated_bytes_extension:extendee -> goproto.proto.test.TestAllExtensions
+	2,  // goproto.proto.test.repeatedgroup_extension:extendee -> goproto.proto.test.TestAllExtensions
+	2,  // goproto.proto.test.repeated_nested_message_extension:extendee -> goproto.proto.test.TestAllExtensions
+	2,  // goproto.proto.test.repeated_nested_enum_extension:extendee -> goproto.proto.test.TestAllExtensions
+	6,  // goproto.proto.test.TestAllTypes.optionalgroup:type_name -> goproto.proto.test.TestAllTypes.OptionalGroup
+	5,  // goproto.proto.test.TestAllTypes.optional_nested_message:type_name -> goproto.proto.test.TestAllTypes.NestedMessage
+	0,  // goproto.proto.test.TestAllTypes.optional_nested_enum:type_name -> goproto.proto.test.TestAllTypes.NestedEnum
+	7,  // goproto.proto.test.TestAllTypes.repeatedgroup:type_name -> goproto.proto.test.TestAllTypes.RepeatedGroup
+	5,  // goproto.proto.test.TestAllTypes.repeated_nested_message:type_name -> goproto.proto.test.TestAllTypes.NestedMessage
+	0,  // goproto.proto.test.TestAllTypes.repeated_nested_enum:type_name -> goproto.proto.test.TestAllTypes.NestedEnum
+	8,  // goproto.proto.test.TestAllTypes.map_int32_int32:type_name -> goproto.proto.test.TestAllTypes.MapInt32Int32Entry
+	9,  // goproto.proto.test.TestAllTypes.map_int64_int64:type_name -> goproto.proto.test.TestAllTypes.MapInt64Int64Entry
+	10, // goproto.proto.test.TestAllTypes.map_uint32_uint32:type_name -> goproto.proto.test.TestAllTypes.MapUint32Uint32Entry
+	11, // goproto.proto.test.TestAllTypes.map_uint64_uint64:type_name -> goproto.proto.test.TestAllTypes.MapUint64Uint64Entry
+	12, // goproto.proto.test.TestAllTypes.map_sint32_sint32:type_name -> goproto.proto.test.TestAllTypes.MapSint32Sint32Entry
+	13, // goproto.proto.test.TestAllTypes.map_sint64_sint64:type_name -> goproto.proto.test.TestAllTypes.MapSint64Sint64Entry
+	14, // goproto.proto.test.TestAllTypes.map_fixed32_fixed32:type_name -> goproto.proto.test.TestAllTypes.MapFixed32Fixed32Entry
+	15, // goproto.proto.test.TestAllTypes.map_fixed64_fixed64:type_name -> goproto.proto.test.TestAllTypes.MapFixed64Fixed64Entry
+	16, // goproto.proto.test.TestAllTypes.map_sfixed32_sfixed32:type_name -> goproto.proto.test.TestAllTypes.MapSfixed32Sfixed32Entry
+	17, // goproto.proto.test.TestAllTypes.map_sfixed64_sfixed64:type_name -> goproto.proto.test.TestAllTypes.MapSfixed64Sfixed64Entry
+	18, // goproto.proto.test.TestAllTypes.map_int32_float:type_name -> goproto.proto.test.TestAllTypes.MapInt32FloatEntry
+	19, // goproto.proto.test.TestAllTypes.map_int32_double:type_name -> goproto.proto.test.TestAllTypes.MapInt32DoubleEntry
+	20, // goproto.proto.test.TestAllTypes.map_bool_bool:type_name -> goproto.proto.test.TestAllTypes.MapBoolBoolEntry
+	21, // goproto.proto.test.TestAllTypes.map_string_string:type_name -> goproto.proto.test.TestAllTypes.MapStringStringEntry
+	22, // goproto.proto.test.TestAllTypes.map_string_bytes:type_name -> goproto.proto.test.TestAllTypes.MapStringBytesEntry
+	23, // goproto.proto.test.TestAllTypes.map_string_nested_message:type_name -> goproto.proto.test.TestAllTypes.MapStringNestedMessageEntry
+	24, // goproto.proto.test.TestAllTypes.map_string_nested_enum:type_name -> goproto.proto.test.TestAllTypes.MapStringNestedEnumEntry
+	5,  // goproto.proto.test.TestAllTypes.oneof_nested_message:type_name -> goproto.proto.test.TestAllTypes.NestedMessage
+	0,  // goproto.proto.test.TestAllTypes.oneof_enum:type_name -> goproto.proto.test.TestAllTypes.NestedEnum
+	1,  // goproto.proto.test.TestAllTypes.NestedMessage.corecursive:type_name -> goproto.proto.test.TestAllTypes
+	5,  // goproto.proto.test.TestAllTypes.MapStringNestedMessageEntry.value:type_name -> goproto.proto.test.TestAllTypes.NestedMessage
+	0,  // goproto.proto.test.TestAllTypes.MapStringNestedEnumEntry.value:type_name -> goproto.proto.test.TestAllTypes.NestedEnum
+	3,  // goproto.proto.test.optionalgroup_extension:type_name -> goproto.proto.test.OptionalGroup_extension
+	5,  // goproto.proto.test.optional_nested_message_extension:type_name -> goproto.proto.test.TestAllTypes.NestedMessage
+	0,  // goproto.proto.test.optional_nested_enum_extension:type_name -> goproto.proto.test.TestAllTypes.NestedEnum
+	4,  // goproto.proto.test.repeatedgroup_extension:type_name -> goproto.proto.test.RepeatedGroup_extension
+	5,  // goproto.proto.test.repeated_nested_message_extension:type_name -> goproto.proto.test.TestAllTypes.NestedMessage
+	0,  // goproto.proto.test.repeated_nested_enum_extension:type_name -> goproto.proto.test.TestAllTypes.NestedEnum
+}
+
+func init() {
+	var messageTypes [24]protoreflect.MessageType
+	var extensionTypes [36]protoreflect.ExtensionType
+	Test_protoFile = protoimpl.FileBuilder{
+		RawDescriptor:        fileDescriptor_c161fcfdc0c3ff1e,
+		GoTypes:              xxx_Test_protoFile_goTypes,
+		DependencyIndexes:    xxx_Test_protoFile_depIdxs,
+		EnumOutputTypes:      xxx_Test_protoFile_enumTypes[:],
+		MessageOutputTypes:   messageTypes[:],
+		ExtensionOutputTypes: extensionTypes[:],
+	}.Init()
+	messageGoTypes := xxx_Test_protoFile_goTypes[1:][:24]
+	for i, mt := range messageTypes[:] {
+		xxx_Test_protoFile_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
+		xxx_Test_protoFile_messageTypes[i].PBType = mt
+	}
+	E_OptionalInt32Extension.Type = extensionTypes[0]
+	E_OptionalInt64Extension.Type = extensionTypes[1]
+	E_OptionalUint32Extension.Type = extensionTypes[2]
+	E_OptionalUint64Extension.Type = extensionTypes[3]
+	E_OptionalSint32Extension.Type = extensionTypes[4]
+	E_OptionalSint64Extension.Type = extensionTypes[5]
+	E_OptionalFixed32Extension.Type = extensionTypes[6]
+	E_OptionalFixed64Extension.Type = extensionTypes[7]
+	E_OptionalSfixed32Extension.Type = extensionTypes[8]
+	E_OptionalSfixed64Extension.Type = extensionTypes[9]
+	E_OptionalFloatExtension.Type = extensionTypes[10]
+	E_OptionalDoubleExtension.Type = extensionTypes[11]
+	E_OptionalBoolExtension.Type = extensionTypes[12]
+	E_OptionalStringExtension.Type = extensionTypes[13]
+	E_OptionalBytesExtension.Type = extensionTypes[14]
+	E_OptionalgroupExtension.Type = extensionTypes[15]
+	E_OptionalNestedMessageExtension.Type = extensionTypes[16]
+	E_OptionalNestedEnumExtension.Type = extensionTypes[17]
+	E_RepeatedInt32Extension.Type = extensionTypes[18]
+	E_RepeatedInt64Extension.Type = extensionTypes[19]
+	E_RepeatedUint32Extension.Type = extensionTypes[20]
+	E_RepeatedUint64Extension.Type = extensionTypes[21]
+	E_RepeatedSint32Extension.Type = extensionTypes[22]
+	E_RepeatedSint64Extension.Type = extensionTypes[23]
+	E_RepeatedFixed32Extension.Type = extensionTypes[24]
+	E_RepeatedFixed64Extension.Type = extensionTypes[25]
+	E_RepeatedSfixed32Extension.Type = extensionTypes[26]
+	E_RepeatedSfixed64Extension.Type = extensionTypes[27]
+	E_RepeatedFloatExtension.Type = extensionTypes[28]
+	E_RepeatedDoubleExtension.Type = extensionTypes[29]
+	E_RepeatedBoolExtension.Type = extensionTypes[30]
+	E_RepeatedStringExtension.Type = extensionTypes[31]
+	E_RepeatedBytesExtension.Type = extensionTypes[32]
+	E_RepeatedgroupExtension.Type = extensionTypes[33]
+	E_RepeatedNestedMessageExtension.Type = extensionTypes[34]
+	E_RepeatedNestedEnumExtension.Type = extensionTypes[35]
+	xxx_Test_protoFile_goTypes = nil
+	xxx_Test_protoFile_depIdxs = nil
 }

+ 9 - 0
reflect/protoregistry/registry.go

@@ -126,6 +126,7 @@ fileLoop:
 				root = nextRoot
 			}
 		}
+
 		// Check for top-level conflicts within the same package.
 		// The current file cannot add any top-level declaration that conflict
 		// with another top-level declaration or sub-package name.
@@ -274,6 +275,14 @@ func rangeTopLevelDeclarations(fd protoreflect.FileDescriptor, f func(protorefle
 	for i := 0; i < fd.Enums().Len(); i++ {
 		e := fd.Enums().Get(i)
 		f(e.Name())
+
+		// TODO: Drop ranging over top-level enum values. The current
+		// implementation of fileinit.FileBuilder does not initialize the names
+		// for enum values in enums. Doing so reduces init time considerably.
+		// If we drop this, it means that conflict checks in the registry
+		// is not complete. However, this may be okay since the most common
+		// reason for a conflict is due to vendored proto files, which are
+		// most certainly going to have a name conflict on the parent enum.
 		for i := 0; i < e.Values().Len(); i++ {
 			f(e.Values().Get(i).Name())
 		}

+ 119 - 202
reflect/protoregistry/testprotos/test.pb.go

@@ -4,10 +4,12 @@
 package testprotos
 
 import (
+	bytes "bytes"
+	gzip "compress/gzip"
 	proto "github.com/golang/protobuf/proto"
 	protoreflect "github.com/golang/protobuf/v2/reflect/protoreflect"
-	prototype "github.com/golang/protobuf/v2/reflect/prototype"
 	protoimpl "github.com/golang/protobuf/v2/runtime/protoimpl"
+	reflect "reflect"
 )
 
 // This is a compile-time assertion to ensure that this generated file
@@ -23,7 +25,7 @@ const (
 )
 
 func (e Enum1) Type() protoreflect.EnumType {
-	return xxx_Test_protoFile_EnumTypes[0]
+	return xxx_Test_protoFile_enumTypes[0]
 }
 func (e Enum1) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -57,7 +59,7 @@ func (x *Enum1) UnmarshalJSON(data []byte) error {
 }
 
 func (Enum1) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_3628d63611f7063d, []int{0}
+	return fileDescriptor_3628d63611f7063d_gzipped, []int{0}
 }
 
 type Enum2 int32
@@ -67,7 +69,7 @@ const (
 )
 
 func (e Enum2) Type() protoreflect.EnumType {
-	return xxx_Test_protoFile_EnumTypes[1]
+	return xxx_Test_protoFile_enumTypes[1]
 }
 func (e Enum2) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -101,7 +103,7 @@ func (x *Enum2) UnmarshalJSON(data []byte) error {
 }
 
 func (Enum2) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_3628d63611f7063d, []int{1}
+	return fileDescriptor_3628d63611f7063d_gzipped, []int{1}
 }
 
 type Enum3 int32
@@ -111,7 +113,7 @@ const (
 )
 
 func (e Enum3) Type() protoreflect.EnumType {
-	return xxx_Test_protoFile_EnumTypes[2]
+	return xxx_Test_protoFile_enumTypes[2]
 }
 func (e Enum3) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -145,7 +147,7 @@ func (x *Enum3) UnmarshalJSON(data []byte) error {
 }
 
 func (Enum3) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_3628d63611f7063d, []int{2}
+	return fileDescriptor_3628d63611f7063d_gzipped, []int{2}
 }
 
 type Message1 struct {
@@ -155,29 +157,14 @@ type Message1 struct {
 	XXX_sizecache                int32  `json:"-"`
 }
 
-type xxx_Message1 struct{ m *Message1 }
-
 func (m *Message1) ProtoReflect() protoreflect.Message {
-	return xxx_Message1{m}
-}
-func (m xxx_Message1) Type() protoreflect.MessageType {
-	return xxx_Test_protoFile_MessageTypes[0].Type
-}
-func (m xxx_Message1) KnownFields() protoreflect.KnownFields {
-	return xxx_Test_protoFile_MessageTypes[0].KnownFieldsOf(m.m)
-}
-func (m xxx_Message1) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Test_protoFile_MessageTypes[0].UnknownFieldsOf(m.m)
-}
-func (m xxx_Message1) Interface() protoreflect.ProtoMessage {
-	return m.m
+	return xxx_Test_protoFile_messageTypes[0].MessageOf(m)
 }
-
 func (m *Message1) Reset()         { *m = Message1{} }
 func (m *Message1) String() string { return proto.CompactTextString(m) }
 func (*Message1) ProtoMessage()    {}
 func (*Message1) Descriptor() ([]byte, []int) {
-	return fileDescriptor_3628d63611f7063d, []int{0}
+	return fileDescriptor_3628d63611f7063d_gzipped, []int{0}
 }
 
 var extRange_Message1 = []proto.ExtensionRange{
@@ -212,29 +199,14 @@ type Message2 struct {
 	XXX_sizecache        int32    `json:"-"`
 }
 
-type xxx_Message2 struct{ m *Message2 }
-
 func (m *Message2) ProtoReflect() protoreflect.Message {
-	return xxx_Message2{m}
-}
-func (m xxx_Message2) Type() protoreflect.MessageType {
-	return xxx_Test_protoFile_MessageTypes[1].Type
-}
-func (m xxx_Message2) KnownFields() protoreflect.KnownFields {
-	return xxx_Test_protoFile_MessageTypes[1].KnownFieldsOf(m.m)
+	return xxx_Test_protoFile_messageTypes[1].MessageOf(m)
 }
-func (m xxx_Message2) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Test_protoFile_MessageTypes[1].UnknownFieldsOf(m.m)
-}
-func (m xxx_Message2) Interface() protoreflect.ProtoMessage {
-	return m.m
-}
-
 func (m *Message2) Reset()         { *m = Message2{} }
 func (m *Message2) String() string { return proto.CompactTextString(m) }
 func (*Message2) ProtoMessage()    {}
 func (*Message2) Descriptor() ([]byte, []int) {
-	return fileDescriptor_3628d63611f7063d, []int{1}
+	return fileDescriptor_3628d63611f7063d_gzipped, []int{1}
 }
 
 func (m *Message2) XXX_Unmarshal(b []byte) error {
@@ -261,29 +233,14 @@ type Message3 struct {
 	XXX_sizecache        int32    `json:"-"`
 }
 
-type xxx_Message3 struct{ m *Message3 }
-
 func (m *Message3) ProtoReflect() protoreflect.Message {
-	return xxx_Message3{m}
-}
-func (m xxx_Message3) Type() protoreflect.MessageType {
-	return xxx_Test_protoFile_MessageTypes[2].Type
-}
-func (m xxx_Message3) KnownFields() protoreflect.KnownFields {
-	return xxx_Test_protoFile_MessageTypes[2].KnownFieldsOf(m.m)
-}
-func (m xxx_Message3) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Test_protoFile_MessageTypes[2].UnknownFieldsOf(m.m)
-}
-func (m xxx_Message3) Interface() protoreflect.ProtoMessage {
-	return m.m
+	return xxx_Test_protoFile_messageTypes[2].MessageOf(m)
 }
-
 func (m *Message3) Reset()         { *m = Message3{} }
 func (m *Message3) String() string { return proto.CompactTextString(m) }
 func (*Message3) ProtoMessage()    {}
 func (*Message3) Descriptor() ([]byte, []int) {
-	return fileDescriptor_3628d63611f7063d, []int{2}
+	return fileDescriptor_3628d63611f7063d_gzipped, []int{2}
 }
 
 func (m *Message3) XXX_Unmarshal(b []byte) error {
@@ -311,29 +268,14 @@ type Message4 struct {
 	XXX_sizecache        int32    `json:"-"`
 }
 
-type xxx_Message4 struct{ m *Message4 }
-
 func (m *Message4) ProtoReflect() protoreflect.Message {
-	return xxx_Message4{m}
-}
-func (m xxx_Message4) Type() protoreflect.MessageType {
-	return xxx_Test_protoFile_MessageTypes[3].Type
-}
-func (m xxx_Message4) KnownFields() protoreflect.KnownFields {
-	return xxx_Test_protoFile_MessageTypes[3].KnownFieldsOf(m.m)
-}
-func (m xxx_Message4) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Test_protoFile_MessageTypes[3].UnknownFieldsOf(m.m)
+	return xxx_Test_protoFile_messageTypes[3].MessageOf(m)
 }
-func (m xxx_Message4) Interface() protoreflect.ProtoMessage {
-	return m.m
-}
-
 func (m *Message4) Reset()         { *m = Message4{} }
 func (m *Message4) String() string { return proto.CompactTextString(m) }
 func (*Message4) ProtoMessage()    {}
 func (*Message4) Descriptor() ([]byte, []int) {
-	return fileDescriptor_3628d63611f7063d, []int{3}
+	return fileDescriptor_3628d63611f7063d_gzipped, []int{3}
 }
 
 func (m *Message4) XXX_Unmarshal(b []byte) error {
@@ -416,7 +358,7 @@ var E_Message4_StringField = &proto.ExtensionDesc{
 }
 
 func init() {
-	proto.RegisterFile("reflect/protoregistry/testprotos/test.proto", fileDescriptor_3628d63611f7063d)
+	proto.RegisterFile("reflect/protoregistry/testprotos/test.proto", fileDescriptor_3628d63611f7063d_gzipped)
 	proto.RegisterEnum("testprotos.Enum1", Enum1_name, Enum1_value)
 	proto.RegisterEnum("testprotos.Enum2", Enum2_name, Enum2_value)
 	proto.RegisterEnum("testprotos.Enum3", Enum3_name, Enum3_value)
@@ -433,135 +375,110 @@ func init() {
 }
 
 var fileDescriptor_3628d63611f7063d = []byte{
-	// 304 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xd2, 0x2e, 0x4a, 0x4d, 0xcb,
-	0x49, 0x4d, 0x2e, 0xd1, 0x2f, 0x28, 0xca, 0x2f, 0xc9, 0x2f, 0x4a, 0x4d, 0xcf, 0x2c, 0x2e, 0x29,
-	0xaa, 0xd4, 0x2f, 0x49, 0x2d, 0x2e, 0x01, 0x8b, 0x14, 0x83, 0x99, 0x7a, 0x60, 0xb6, 0x10, 0x17,
-	0x42, 0x58, 0x49, 0x84, 0x8b, 0xc3, 0x37, 0xb5, 0xb8, 0x38, 0x31, 0x3d, 0xd5, 0x50, 0x8b, 0x83,
-	0x83, 0x4b, 0xa0, 0xa1, 0xa1, 0xa1, 0x81, 0x49, 0x89, 0x0b, 0x2e, 0x6a, 0x84, 0xc4, 0x36, 0x56,
-	0xfa, 0xcd, 0x08, 0xe7, 0x98, 0x08, 0xc9, 0x72, 0x71, 0x25, 0xe5, 0xe7, 0xe7, 0xc4, 0xa7, 0x65,
-	0xa6, 0xe6, 0xa4, 0x48, 0xc8, 0x29, 0x30, 0x6a, 0x70, 0x04, 0x71, 0x82, 0x44, 0xdc, 0x40, 0x02,
-	0x46, 0xfe, 0x5c, 0xbc, 0xb9, 0x10, 0xa5, 0x10, 0x15, 0x42, 0x22, 0x7a, 0x08, 0x7b, 0xf5, 0x60,
-	0x96, 0x4a, 0x88, 0x2a, 0x30, 0x6a, 0x70, 0x1b, 0x61, 0x93, 0x33, 0x0a, 0xe2, 0x81, 0x1a, 0x00,
-	0x31, 0xd0, 0x8d, 0x8b, 0x2b, 0x35, 0xaf, 0x34, 0x17, 0xaf, 0x69, 0x62, 0x0a, 0x8c, 0x1a, 0x7c,
-	0x46, 0x82, 0xc8, 0x72, 0xae, 0x79, 0xa5, 0xb9, 0x86, 0x41, 0x9c, 0x20, 0xad, 0x10, 0x73, 0xcc,
-	0xb9, 0x78, 0x8a, 0x4b, 0x8a, 0x32, 0xf3, 0xd2, 0xf1, 0x9a, 0x24, 0xae, 0xc0, 0xa8, 0xc1, 0x19,
-	0xc4, 0x0d, 0x51, 0x09, 0xd6, 0xa8, 0x25, 0xc0, 0xc5, 0x0a, 0x36, 0x4c, 0x88, 0x9d, 0x8b, 0xd9,
-	0xdf, 0xcf, 0x55, 0x80, 0x11, 0x26, 0x62, 0x04, 0x12, 0x09, 0xf5, 0xf3, 0x17, 0x60, 0xd4, 0xe2,
-	0x87, 0x88, 0x18, 0x0b, 0xb1, 0x71, 0x31, 0x45, 0x7a, 0x0a, 0x30, 0x5a, 0x11, 0x67, 0x1b, 0x37,
-	0x86, 0x6d, 0x56, 0xc4, 0x78, 0x97, 0x87, 0xb0, 0x77, 0xad, 0x88, 0x8c, 0x07, 0x5e, 0x62, 0xe3,
-	0xc1, 0xc9, 0x21, 0xca, 0x2e, 0x3d, 0xb3, 0x24, 0xa3, 0x34, 0x49, 0x2f, 0x39, 0x3f, 0x57, 0x3f,
-	0x3d, 0x3f, 0x27, 0x31, 0x2f, 0x1d, 0x92, 0xee, 0x92, 0x4a, 0xd3, 0xf4, 0xcb, 0x8c, 0xf4, 0x09,
-	0xa5, 0x45, 0x40, 0x00, 0x00, 0x00, 0xff, 0xff, 0x76, 0x64, 0x81, 0x59, 0xae, 0x02, 0x00, 0x00,
-}
-
-func init() {
-	xxx_Test_protoFile_FileDesc.Enums = xxx_Test_protoFile_EnumDescs[0:3]
-	xxx_Test_protoFile_FileDesc.Messages = xxx_Test_protoFile_MessageDescs[0:4]
-	var err error
-	Test_protoFile, err = prototype.NewFile(&xxx_Test_protoFile_FileDesc)
-	if err != nil {
-		panic(err)
-	}
-}
+	// 686 bytes of the wire-encoded FileDescriptorProto
+	0x0a, 0x2b, 0x72, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x72,
+	0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x73, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0a, 0x74,
+	0x65, 0x73, 0x74, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x22, 0x14, 0x0a, 0x08, 0x4d, 0x65, 0x73,
+	0x73, 0x61, 0x67, 0x65, 0x31, 0x2a, 0x08, 0x08, 0x0a, 0x10, 0x80, 0x80, 0x80, 0x80, 0x02, 0x22,
+	0x0a, 0x0a, 0x08, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x32, 0x22, 0x0a, 0x0a, 0x08, 0x4d,
+	0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x33, 0x22, 0xfb, 0x01, 0x0a, 0x08, 0x4d, 0x65, 0x73, 0x73,
+	0x61, 0x67, 0x65, 0x34, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x66, 0x69, 0x65,
+	0x6c, 0x64, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x62, 0x6f, 0x6f, 0x6c, 0x46, 0x69,
+	0x65, 0x6c, 0x64, 0x32, 0x4f, 0x0a, 0x0d, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x66,
+	0x69, 0x65, 0x6c, 0x64, 0x12, 0x14, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x73, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x31, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b,
+	0x32, 0x14, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x2e, 0x4d, 0x65,
+	0x73, 0x73, 0x61, 0x67, 0x65, 0x32, 0x52, 0x0c, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x46,
+	0x69, 0x65, 0x6c, 0x64, 0x32, 0x46, 0x0a, 0x0a, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x66, 0x69, 0x65,
+	0x6c, 0x64, 0x12, 0x14, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x2e,
+	0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x31, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x11,
+	0x2e, 0x74, 0x65, 0x73, 0x74, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x2e, 0x45, 0x6e, 0x75, 0x6d,
+	0x31, 0x52, 0x09, 0x65, 0x6e, 0x75, 0x6d, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x32, 0x37, 0x0a, 0x0c,
+	0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x14, 0x2e, 0x74,
+	0x65, 0x73, 0x74, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67,
+	0x65, 0x31, 0x18, 0x17, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67,
+	0x46, 0x69, 0x65, 0x6c, 0x64, 0x2a, 0x10, 0x0a, 0x05, 0x45, 0x6e, 0x75, 0x6d, 0x31, 0x12, 0x07,
+	0x0a, 0x03, 0x4f, 0x4e, 0x45, 0x10, 0x01, 0x2a, 0x10, 0x0a, 0x05, 0x45, 0x6e, 0x75, 0x6d, 0x32,
+	0x12, 0x07, 0x0a, 0x03, 0x55, 0x4e, 0x4f, 0x10, 0x01, 0x2a, 0x0f, 0x0a, 0x05, 0x45, 0x6e, 0x75,
+	0x6d, 0x33, 0x12, 0x06, 0x0a, 0x02, 0x59, 0x49, 0x10, 0x01, 0x3a, 0x37, 0x0a, 0x0c, 0x73, 0x74,
+	0x72, 0x69, 0x6e, 0x67, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x14, 0x2e, 0x74, 0x65, 0x73,
+	0x74, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x31,
+	0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x46, 0x69,
+	0x65, 0x6c, 0x64, 0x3a, 0x46, 0x0a, 0x0a, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x66, 0x69, 0x65, 0x6c,
+	0x64, 0x12, 0x14, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x2e, 0x4d,
+	0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x31, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x11, 0x2e,
+	0x74, 0x65, 0x73, 0x74, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x31,
+	0x52, 0x09, 0x65, 0x6e, 0x75, 0x6d, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x3a, 0x4f, 0x0a, 0x0d, 0x6d,
+	0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x14, 0x2e, 0x74,
+	0x65, 0x73, 0x74, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67,
+	0x65, 0x31, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x73, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x32, 0x52, 0x0c,
+	0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x42, 0x40, 0x5a, 0x3e,
+	0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x6f, 0x6c, 0x61, 0x6e,
+	0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x76, 0x32, 0x2f, 0x72, 0x65,
+	0x66, 0x6c, 0x65, 0x63, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x72, 0x65, 0x67, 0x69, 0x73,
+	0x74, 0x72, 0x79, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73,
+}
+
+var fileDescriptor_3628d63611f7063d_gzipped = func() []byte {
+	bb := new(bytes.Buffer)
+	zw, _ := gzip.NewWriterLevel(bb, gzip.NoCompression)
+	zw.Write(fileDescriptor_3628d63611f7063d)
+	zw.Close()
+	return bb.Bytes()
+}()
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
 var Test_protoFile protoreflect.FileDescriptor
 
-var xxx_Test_protoFile_FileDesc = prototype.File{
-	Syntax:  protoreflect.Proto2,
-	Path:    "reflect/protoregistry/testprotos/test.proto",
-	Package: "testprotos",
-}
-var xxx_Test_protoFile_EnumTypes = [3]protoreflect.EnumType{
-	prototype.GoEnum(
-		xxx_Test_protoFile_EnumDescs[0].Reference(),
-		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
-			return Enum1(n)
-		},
-	),
-	prototype.GoEnum(
-		xxx_Test_protoFile_EnumDescs[1].Reference(),
-		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
-			return Enum2(n)
-		},
-	),
-	prototype.GoEnum(
-		xxx_Test_protoFile_EnumDescs[2].Reference(),
-		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
-			return Enum3(n)
-		},
-	),
-}
-var xxx_Test_protoFile_EnumDescs = [3]prototype.Enum{
-	{
-		Name: "Enum1",
-		Values: []prototype.EnumValue{
-			{Name: "ONE", Number: 1},
-		},
-	},
-	{
-		Name: "Enum2",
-		Values: []prototype.EnumValue{
-			{Name: "UNO", Number: 1},
-		},
-	},
-	{
-		Name: "Enum3",
-		Values: []prototype.EnumValue{
-			{Name: "YI", Number: 1},
-		},
-	},
-}
-var xxx_Test_protoFile_MessageTypes = [4]protoimpl.MessageType{
-	{Type: prototype.GoMessage(
-		xxx_Test_protoFile_MessageDescs[0].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_Message1{new(Message1)}
-		},
-	)},
-	{Type: prototype.GoMessage(
-		xxx_Test_protoFile_MessageDescs[1].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_Message2{new(Message2)}
-		},
-	)},
-	{Type: prototype.GoMessage(
-		xxx_Test_protoFile_MessageDescs[2].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_Message3{new(Message3)}
-		},
-	)},
-	{Type: prototype.GoMessage(
-		xxx_Test_protoFile_MessageDescs[3].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_Message4{new(Message4)}
-		},
-	)},
-}
-var xxx_Test_protoFile_MessageDescs = [4]prototype.Message{
-	{
-		Name:            "Message1",
-		ExtensionRanges: [][2]protoreflect.FieldNumber{{10, 536870912}},
-	},
-	{
-		Name: "Message2",
-	},
-	{
-		Name: "Message3",
-	},
-	{
-		Name: "Message4",
-		Fields: []prototype.Field{
-			{
-				Name:        "bool_field",
-				Number:      30,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.BoolKind,
-				JSONName:    "boolField",
-				IsPacked:    prototype.False,
-			},
-		},
-	},
+var xxx_Test_protoFile_enumTypes [3]protoreflect.EnumType
+var xxx_Test_protoFile_messageTypes [4]protoimpl.MessageType
+var xxx_Test_protoFile_goTypes = []interface{}{
+	(Enum1)(0),       // 0: testprotos.Enum1
+	(Enum2)(0),       // 1: testprotos.Enum2
+	(Enum3)(0),       // 2: testprotos.Enum3
+	(*Message1)(nil), // 3: testprotos.Message1
+	(*Message2)(nil), // 4: testprotos.Message2
+	(*Message3)(nil), // 5: testprotos.Message3
+	(*Message4)(nil), // 6: testprotos.Message4
+}
+var xxx_Test_protoFile_depIdxs = []int32{
+	3, // testprotos.string_field:extendee -> testprotos.Message1
+	3, // testprotos.enum_field:extendee -> testprotos.Message1
+	3, // testprotos.message_field:extendee -> testprotos.Message1
+	3, // testprotos.Message4.message_field:extendee -> testprotos.Message1
+	3, // testprotos.Message4.enum_field:extendee -> testprotos.Message1
+	3, // testprotos.Message4.string_field:extendee -> testprotos.Message1
+	0, // testprotos.enum_field:type_name -> testprotos.Enum1
+	4, // testprotos.message_field:type_name -> testprotos.Message2
+	4, // testprotos.Message4.message_field:type_name -> testprotos.Message2
+	0, // testprotos.Message4.enum_field:type_name -> testprotos.Enum1
+}
+
+func init() {
+	var messageTypes [4]protoreflect.MessageType
+	var extensionTypes [6]protoreflect.ExtensionType
+	Test_protoFile = protoimpl.FileBuilder{
+		RawDescriptor:        fileDescriptor_3628d63611f7063d,
+		GoTypes:              xxx_Test_protoFile_goTypes,
+		DependencyIndexes:    xxx_Test_protoFile_depIdxs,
+		EnumOutputTypes:      xxx_Test_protoFile_enumTypes[:],
+		MessageOutputTypes:   messageTypes[:],
+		ExtensionOutputTypes: extensionTypes[:],
+	}.Init()
+	messageGoTypes := xxx_Test_protoFile_goTypes[3:][:4]
+	for i, mt := range messageTypes[:] {
+		xxx_Test_protoFile_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
+		xxx_Test_protoFile_messageTypes[i].PBType = mt
+	}
+	E_StringField.Type = extensionTypes[0]
+	E_EnumField.Type = extensionTypes[1]
+	E_MessageField.Type = extensionTypes[2]
+	E_Message4_MessageField.Type = extensionTypes[3]
+	E_Message4_EnumField.Type = extensionTypes[4]
+	E_Message4_StringField.Type = extensionTypes[5]
+	xxx_Test_protoFile_goTypes = nil
+	xxx_Test_protoFile_depIdxs = nil
 }

+ 32 - 18
reflect/prototype/options.go

@@ -4,6 +4,10 @@
 
 package prototype
 
+import (
+	pref "github.com/golang/protobuf/v2/reflect/protoreflect"
+)
+
 // X provides functionality internal to the protobuf module.
 //
 // WARNING: The compatibility agreement covers nothing except for functionality
@@ -16,23 +20,33 @@ type internal struct{}
 // optionTypes contains typed nil-pointers to each of the options types.
 // These are populated at init time by the descriptor package.
 var optionTypes struct {
-	File           interface{}
-	Enum           interface{}
-	EnumValue      interface{}
-	Message        interface{}
-	Field          interface{}
-	Oneof          interface{}
-	ExtensionRange interface{}
-	Service        interface{}
-	Method         interface{}
+	File           pref.OptionsMessage
+	Enum           pref.OptionsMessage
+	EnumValue      pref.OptionsMessage
+	Message        pref.OptionsMessage
+	Field          pref.OptionsMessage
+	Oneof          pref.OptionsMessage
+	ExtensionRange pref.OptionsMessage
+	Service        pref.OptionsMessage
+	Method         pref.OptionsMessage
 }
 
-func (internal) RegisterFileOptions(m interface{})           { optionTypes.File = m }
-func (internal) RegisterEnumOptions(m interface{})           { optionTypes.Enum = m }
-func (internal) RegisterEnumValueOptions(m interface{})      { optionTypes.EnumValue = m }
-func (internal) RegisterMessageOptions(m interface{})        { optionTypes.Message = m }
-func (internal) RegisterFieldOptions(m interface{})          { optionTypes.Field = m }
-func (internal) RegisterOneofOptions(m interface{})          { optionTypes.Oneof = m }
-func (internal) RegisterExtensionRangeOptions(m interface{}) { optionTypes.ExtensionRange = m }
-func (internal) RegisterServiceOptions(m interface{})        { optionTypes.Service = m }
-func (internal) RegisterMethodOptions(m interface{})         { optionTypes.Method = m }
+func (internal) FileOptions() pref.OptionsMessage           { return optionTypes.File }
+func (internal) EnumOptions() pref.OptionsMessage           { return optionTypes.Enum }
+func (internal) EnumValueOptions() pref.OptionsMessage      { return optionTypes.EnumValue }
+func (internal) MessageOptions() pref.OptionsMessage        { return optionTypes.Message }
+func (internal) FieldOptions() pref.OptionsMessage          { return optionTypes.Field }
+func (internal) OneofOptions() pref.OptionsMessage          { return optionTypes.Oneof }
+func (internal) ExtensionRangeOptions() pref.OptionsMessage { return optionTypes.ExtensionRange }
+func (internal) ServiceOptions() pref.OptionsMessage        { return optionTypes.Service }
+func (internal) MethodOptions() pref.OptionsMessage         { return optionTypes.Method }
+
+func (internal) RegisterFileOptions(m pref.OptionsMessage)           { optionTypes.File = m }
+func (internal) RegisterEnumOptions(m pref.OptionsMessage)           { optionTypes.Enum = m }
+func (internal) RegisterEnumValueOptions(m pref.OptionsMessage)      { optionTypes.EnumValue = m }
+func (internal) RegisterMessageOptions(m pref.OptionsMessage)        { optionTypes.Message = m }
+func (internal) RegisterFieldOptions(m pref.OptionsMessage)          { optionTypes.Field = m }
+func (internal) RegisterOneofOptions(m pref.OptionsMessage)          { optionTypes.Oneof = m }
+func (internal) RegisterExtensionRangeOptions(m pref.OptionsMessage) { optionTypes.ExtensionRange = m }
+func (internal) RegisterServiceOptions(m pref.OptionsMessage)        { optionTypes.Service = m }
+func (internal) RegisterMethodOptions(m pref.OptionsMessage)         { optionTypes.Method = m }

+ 5 - 1
runtime/protoimpl/impl.go

@@ -11,7 +11,10 @@
 // to unauthorized usages of this package are not the author's responsibility.
 package protoimpl
 
-import "github.com/golang/protobuf/v2/internal/impl"
+import (
+	"github.com/golang/protobuf/v2/internal/fileinit"
+	"github.com/golang/protobuf/v2/internal/impl"
+)
 
 // Version is the current minor version of the package.
 // This is incremented every time the API of this package expands.
@@ -36,4 +39,5 @@ type (
 	EnforceVersion uint
 
 	MessageType = impl.MessageType
+	FileBuilder = fileinit.FileBuilder
 )

Diferenças do arquivo suprimidas por serem muito extensas
+ 70 - 478
types/descriptor/descriptor.pb.go


+ 99 - 270
types/plugin/plugin.pb.go

@@ -4,11 +4,13 @@
 package plugin_proto
 
 import (
+	bytes "bytes"
+	gzip "compress/gzip"
 	proto "github.com/golang/protobuf/proto"
 	protoreflect "github.com/golang/protobuf/v2/reflect/protoreflect"
-	prototype "github.com/golang/protobuf/v2/reflect/prototype"
 	protoimpl "github.com/golang/protobuf/v2/runtime/protoimpl"
 	descriptor "github.com/golang/protobuf/v2/types/descriptor"
+	reflect "reflect"
 )
 
 // This is a compile-time assertion to ensure that this generated file
@@ -30,29 +32,14 @@ type Version struct {
 	XXX_sizecache        int32    `json:"-"`
 }
 
-type xxx_Version struct{ m *Version }
-
 func (m *Version) ProtoReflect() protoreflect.Message {
-	return xxx_Version{m}
-}
-func (m xxx_Version) Type() protoreflect.MessageType {
-	return xxx_Plugin_protoFile_MessageTypes[0].Type
-}
-func (m xxx_Version) KnownFields() protoreflect.KnownFields {
-	return xxx_Plugin_protoFile_MessageTypes[0].KnownFieldsOf(m.m)
-}
-func (m xxx_Version) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Plugin_protoFile_MessageTypes[0].UnknownFieldsOf(m.m)
-}
-func (m xxx_Version) Interface() protoreflect.ProtoMessage {
-	return m.m
+	return xxx_Plugin_protoFile_messageTypes[0].MessageOf(m)
 }
-
 func (m *Version) Reset()         { *m = Version{} }
 func (m *Version) String() string { return proto.CompactTextString(m) }
 func (*Version) ProtoMessage()    {}
 func (*Version) Descriptor() ([]byte, []int) {
-	return fileDescriptor_3562add825dafed5, []int{0}
+	return fileDescriptor_3562add825dafed5_gzipped, []int{0}
 }
 
 func (m *Version) XXX_Unmarshal(b []byte) error {
@@ -131,29 +118,14 @@ type CodeGeneratorRequest struct {
 	XXX_sizecache        int32    `json:"-"`
 }
 
-type xxx_CodeGeneratorRequest struct{ m *CodeGeneratorRequest }
-
 func (m *CodeGeneratorRequest) ProtoReflect() protoreflect.Message {
-	return xxx_CodeGeneratorRequest{m}
-}
-func (m xxx_CodeGeneratorRequest) Type() protoreflect.MessageType {
-	return xxx_Plugin_protoFile_MessageTypes[1].Type
-}
-func (m xxx_CodeGeneratorRequest) KnownFields() protoreflect.KnownFields {
-	return xxx_Plugin_protoFile_MessageTypes[1].KnownFieldsOf(m.m)
+	return xxx_Plugin_protoFile_messageTypes[1].MessageOf(m)
 }
-func (m xxx_CodeGeneratorRequest) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Plugin_protoFile_MessageTypes[1].UnknownFieldsOf(m.m)
-}
-func (m xxx_CodeGeneratorRequest) Interface() protoreflect.ProtoMessage {
-	return m.m
-}
-
 func (m *CodeGeneratorRequest) Reset()         { *m = CodeGeneratorRequest{} }
 func (m *CodeGeneratorRequest) String() string { return proto.CompactTextString(m) }
 func (*CodeGeneratorRequest) ProtoMessage()    {}
 func (*CodeGeneratorRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_3562add825dafed5, []int{1}
+	return fileDescriptor_3562add825dafed5_gzipped, []int{1}
 }
 
 func (m *CodeGeneratorRequest) XXX_Unmarshal(b []byte) error {
@@ -219,29 +191,14 @@ type CodeGeneratorResponse struct {
 	XXX_sizecache        int32                         `json:"-"`
 }
 
-type xxx_CodeGeneratorResponse struct{ m *CodeGeneratorResponse }
-
 func (m *CodeGeneratorResponse) ProtoReflect() protoreflect.Message {
-	return xxx_CodeGeneratorResponse{m}
-}
-func (m xxx_CodeGeneratorResponse) Type() protoreflect.MessageType {
-	return xxx_Plugin_protoFile_MessageTypes[2].Type
-}
-func (m xxx_CodeGeneratorResponse) KnownFields() protoreflect.KnownFields {
-	return xxx_Plugin_protoFile_MessageTypes[2].KnownFieldsOf(m.m)
-}
-func (m xxx_CodeGeneratorResponse) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Plugin_protoFile_MessageTypes[2].UnknownFieldsOf(m.m)
-}
-func (m xxx_CodeGeneratorResponse) Interface() protoreflect.ProtoMessage {
-	return m.m
+	return xxx_Plugin_protoFile_messageTypes[2].MessageOf(m)
 }
-
 func (m *CodeGeneratorResponse) Reset()         { *m = CodeGeneratorResponse{} }
 func (m *CodeGeneratorResponse) String() string { return proto.CompactTextString(m) }
 func (*CodeGeneratorResponse) ProtoMessage()    {}
 func (*CodeGeneratorResponse) Descriptor() ([]byte, []int) {
-	return fileDescriptor_3562add825dafed5, []int{2}
+	return fileDescriptor_3562add825dafed5_gzipped, []int{2}
 }
 
 func (m *CodeGeneratorResponse) XXX_Unmarshal(b []byte) error {
@@ -335,29 +292,14 @@ type CodeGeneratorResponse_File struct {
 	XXX_sizecache        int32    `json:"-"`
 }
 
-type xxx_CodeGeneratorResponse_File struct{ m *CodeGeneratorResponse_File }
-
 func (m *CodeGeneratorResponse_File) ProtoReflect() protoreflect.Message {
-	return xxx_CodeGeneratorResponse_File{m}
-}
-func (m xxx_CodeGeneratorResponse_File) Type() protoreflect.MessageType {
-	return xxx_Plugin_protoFile_MessageTypes[3].Type
-}
-func (m xxx_CodeGeneratorResponse_File) KnownFields() protoreflect.KnownFields {
-	return xxx_Plugin_protoFile_MessageTypes[3].KnownFieldsOf(m.m)
-}
-func (m xxx_CodeGeneratorResponse_File) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Plugin_protoFile_MessageTypes[3].UnknownFieldsOf(m.m)
+	return xxx_Plugin_protoFile_messageTypes[3].MessageOf(m)
 }
-func (m xxx_CodeGeneratorResponse_File) Interface() protoreflect.ProtoMessage {
-	return m.m
-}
-
 func (m *CodeGeneratorResponse_File) Reset()         { *m = CodeGeneratorResponse_File{} }
 func (m *CodeGeneratorResponse_File) String() string { return proto.CompactTextString(m) }
 func (*CodeGeneratorResponse_File) ProtoMessage()    {}
 func (*CodeGeneratorResponse_File) Descriptor() ([]byte, []int) {
-	return fileDescriptor_3562add825dafed5, []int{2, 0}
+	return fileDescriptor_3562add825dafed5_gzipped, []int{2, 0}
 }
 
 func (m *CodeGeneratorResponse_File) XXX_Unmarshal(b []byte) error {
@@ -400,7 +342,7 @@ func (m *CodeGeneratorResponse_File) GetContent() string {
 }
 
 func init() {
-	proto.RegisterFile("google/protobuf/compiler/plugin.proto", fileDescriptor_3562add825dafed5)
+	proto.RegisterFile("google/protobuf/compiler/plugin.proto", fileDescriptor_3562add825dafed5_gzipped)
 	proto.RegisterType((*Version)(nil), "google.protobuf.compiler.Version")
 	proto.RegisterType((*CodeGeneratorRequest)(nil), "google.protobuf.compiler.CodeGeneratorRequest")
 	proto.RegisterType((*CodeGeneratorResponse)(nil), "google.protobuf.compiler.CodeGeneratorResponse")
@@ -408,209 +350,96 @@ func init() {
 }
 
 var fileDescriptor_3562add825dafed5 = []byte{
-	// 416 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x92, 0xcf, 0x6a, 0xd5, 0x40,
-	0x14, 0xc6, 0x89, 0xbd, 0xb5, 0xe4, 0x54, 0x7a, 0xcb, 0x50, 0x65, 0x28, 0x5d, 0xc4, 0x8b, 0x62,
-	0x56, 0x09, 0x5c, 0x04, 0x17, 0xee, 0x5a, 0x51, 0x17, 0x2e, 0x2e, 0x83, 0xb8, 0x10, 0x24, 0xa4,
-	0xe9, 0xb9, 0xe9, 0x48, 0x32, 0x67, 0x9c, 0x99, 0x14, 0x7d, 0x51, 0xdf, 0xc3, 0x37, 0x90, 0xf9,
-	0x93, 0x56, 0x2e, 0xde, 0x55, 0xf2, 0xfd, 0xbe, 0x33, 0x33, 0xe7, 0x7c, 0x1c, 0x78, 0xd9, 0x13,
-	0xf5, 0x03, 0xd6, 0xda, 0x90, 0xa3, 0xeb, 0x69, 0x5b, 0x77, 0x34, 0x6a, 0x39, 0xa0, 0xa9, 0xf5,
-	0x30, 0xf5, 0x52, 0x55, 0xc1, 0x60, 0x3c, 0x96, 0x55, 0x73, 0x59, 0x35, 0x97, 0x9d, 0x17, 0xbb,
-	0x17, 0xdc, 0xa0, 0xed, 0x8c, 0xd4, 0x8e, 0x4c, 0xac, 0x5e, 0x75, 0x70, 0xf4, 0x05, 0x8d, 0x95,
-	0xa4, 0xd8, 0x19, 0x1c, 0x8e, 0xed, 0x77, 0x32, 0x3c, 0x2b, 0xb2, 0xf2, 0x50, 0x44, 0x11, 0xa8,
-	0x54, 0x64, 0xf8, 0xa3, 0x44, 0xbd, 0xf0, 0x54, 0xb7, 0xae, 0xbb, 0xe5, 0x07, 0x91, 0x06, 0xc1,
-	0x9e, 0xc1, 0x63, 0x3b, 0x6d, 0xb7, 0xf2, 0x27, 0x5f, 0x14, 0x59, 0x99, 0x8b, 0xa4, 0x56, 0x7f,
-	0x32, 0x38, 0xbb, 0xa2, 0x1b, 0xfc, 0x80, 0x0a, 0x4d, 0xeb, 0xc8, 0x08, 0xfc, 0x31, 0xa1, 0x75,
-	0xac, 0x84, 0xd3, 0xad, 0x1c, 0xb0, 0x71, 0xd4, 0xf4, 0xd1, 0x43, 0x9e, 0x15, 0x07, 0x65, 0x2e,
-	0x4e, 0x3c, 0xff, 0x4c, 0xe9, 0x04, 0xb2, 0x0b, 0xc8, 0x75, 0x6b, 0xda, 0x11, 0x1d, 0xc6, 0x56,
-	0x72, 0xf1, 0x00, 0xd8, 0x15, 0x40, 0x18, 0xa7, 0xf1, 0xa7, 0xf8, 0xb2, 0x38, 0x28, 0x8f, 0xd7,
-	0x2f, 0xaa, 0xdd, 0x58, 0xde, 0xcb, 0x01, 0xdf, 0xdd, 0x07, 0xb0, 0xf1, 0x58, 0xe4, 0xc1, 0xf5,
-	0x0e, 0xfb, 0x04, 0xa7, 0x73, 0x70, 0xcd, 0x5d, 0xcc, 0x24, 0x8c, 0x77, 0xbc, 0x7e, 0x5e, 0xed,
-	0x4b, 0xb8, 0x4a, 0xe1, 0x89, 0xe5, 0x4c, 0x12, 0x58, 0xfd, 0xce, 0xe0, 0xe9, 0xce, 0xcc, 0x56,
-	0x93, 0xb2, 0xe8, 0xb3, 0x43, 0x63, 0x52, 0xce, 0xb9, 0x88, 0x82, 0x7d, 0x84, 0xc5, 0x3f, 0xcd,
-	0xbf, 0xde, 0xff, 0xe2, 0x7f, 0x2f, 0x0d, 0xb3, 0x89, 0x70, 0xc3, 0xf9, 0x37, 0x58, 0x84, 0x79,
-	0x18, 0x2c, 0x54, 0x3b, 0x62, 0x7a, 0x26, 0xfc, 0xb3, 0x57, 0xb0, 0x94, 0xca, 0xa2, 0x71, 0x92,
-	0x54, 0xa3, 0x49, 0x2a, 0x97, 0xc2, 0x3c, 0xb9, 0xc7, 0x1b, 0x4f, 0x19, 0x87, 0xa3, 0x8e, 0x94,
-	0x43, 0xe5, 0xf8, 0x32, 0x14, 0xcc, 0xf2, 0x12, 0xe1, 0xa2, 0xa3, 0x71, 0x6f, 0x7f, 0x97, 0x4f,
-	0x36, 0x61, 0x37, 0x43, 0xbc, 0xf6, 0xeb, 0x9b, 0x5e, 0xba, 0xdb, 0xe9, 0xda, 0xdb, 0x75, 0x4f,
-	0x43, 0xab, 0xfa, 0x87, 0x65, 0xbc, 0x5b, 0xd7, 0xee, 0x97, 0x46, 0x9b, 0xb6, 0xf9, 0x6d, 0xfc,
-	0x34, 0xc1, 0xff, 0x1b, 0x00, 0x00, 0xff, 0xff, 0xa3, 0xfc, 0xb6, 0x26, 0xfc, 0x02, 0x00, 0x00,
-}
-
-func init() {
-	xxx_Plugin_protoFile_FileDesc.Messages = xxx_Plugin_protoFile_MessageDescs[0:3]
-	xxx_Plugin_protoFile_MessageDescs[2].Messages = xxx_Plugin_protoFile_MessageDescs[3:4]
-	xxx_Plugin_protoFile_MessageDescs[1].Fields[2].MessageType = protoimpl.X.MessageTypeOf((*descriptor.FileDescriptorProto)(nil))
-	xxx_Plugin_protoFile_MessageDescs[1].Fields[3].MessageType = xxx_Plugin_protoFile_MessageTypes[0].Type
-	xxx_Plugin_protoFile_MessageDescs[2].Fields[1].MessageType = xxx_Plugin_protoFile_MessageTypes[3].Type
-	var err error
-	Plugin_protoFile, err = prototype.NewFile(&xxx_Plugin_protoFile_FileDesc)
-	if err != nil {
-		panic(err)
-	}
-}
+	// 764 bytes of the wire-encoded FileDescriptorProto
+	0x0a, 0x25, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
+	0x66, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69,
+	0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x18, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65,
+	0x72, 0x1a, 0x20, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
+	0x75, 0x66, 0x2f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x22, 0x63, 0x0a, 0x07, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x14,
+	0x0a, 0x05, 0x6d, 0x61, 0x6a, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6d,
+	0x61, 0x6a, 0x6f, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x69, 0x6e, 0x6f, 0x72, 0x18, 0x02, 0x20,
+	0x01, 0x28, 0x05, 0x52, 0x05, 0x6d, 0x69, 0x6e, 0x6f, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x61,
+	0x74, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x70, 0x61, 0x74, 0x63, 0x68,
+	0x12, 0x16, 0x0a, 0x06, 0x73, 0x75, 0x66, 0x66, 0x69, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x06, 0x73, 0x75, 0x66, 0x66, 0x69, 0x78, 0x22, 0xf1, 0x01, 0x0a, 0x14, 0x43, 0x6f, 0x64,
+	0x65, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+	0x74, 0x12, 0x28, 0x0a, 0x10, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x74, 0x6f, 0x5f, 0x67, 0x65, 0x6e,
+	0x65, 0x72, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x66, 0x69, 0x6c,
+	0x65, 0x54, 0x6f, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x70,
+	0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09,
+	0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x0a, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e,
+	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,
+	0x46, 0x69, 0x6c, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72,
+	0x6f, 0x74, 0x6f, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x4c,
+	0x0a, 0x10, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69,
+	0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
+	0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x69,
+	0x6c, 0x65, 0x72, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x0f, 0x63, 0x6f, 0x6d,
+	0x70, 0x69, 0x6c, 0x65, 0x72, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xd6, 0x01, 0x0a,
+	0x15, 0x43, 0x6f, 0x64, 0x65, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65,
+	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x48, 0x0a, 0x04,
+	0x66, 0x69, 0x6c, 0x65, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x6f, 0x6f,
+	0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x63, 0x6f, 0x6d,
+	0x70, 0x69, 0x6c, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x64, 0x65, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61,
+	0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x46, 0x69, 0x6c, 0x65,
+	0x52, 0x04, 0x66, 0x69, 0x6c, 0x65, 0x1a, 0x5d, 0x0a, 0x04, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x12,
+	0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61,
+	0x6d, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x5f,
+	0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x69, 0x6e, 0x73,
+	0x65, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x63,
+	0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f,
+	0x6e, 0x74, 0x65, 0x6e, 0x74, 0x42, 0x65, 0x0a, 0x1c, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f,
+	0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x63, 0x6f, 0x6d,
+	0x70, 0x69, 0x6c, 0x65, 0x72, 0x42, 0x0c, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x50, 0x72, 0x6f,
+	0x74, 0x6f, 0x73, 0x5a, 0x37, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f,
+	0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f,
+	0x76, 0x32, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x3b,
+	0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+}
+
+var fileDescriptor_3562add825dafed5_gzipped = func() []byte {
+	bb := new(bytes.Buffer)
+	zw, _ := gzip.NewWriterLevel(bb, gzip.NoCompression)
+	zw.Write(fileDescriptor_3562add825dafed5)
+	zw.Close()
+	return bb.Bytes()
+}()
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
 var Plugin_protoFile protoreflect.FileDescriptor
 
-var xxx_Plugin_protoFile_FileDesc = prototype.File{
-	Syntax:  protoreflect.Proto2,
-	Path:    "google/protobuf/compiler/plugin.proto",
-	Package: "google.protobuf.compiler",
-	Imports: []protoreflect.FileImport{
-		{FileDescriptor: prototype.PlaceholderFile("google/protobuf/descriptor.proto", "google.protobuf")},
-	},
-}
-var xxx_Plugin_protoFile_MessageTypes = [4]protoimpl.MessageType{
-	{Type: prototype.GoMessage(
-		xxx_Plugin_protoFile_MessageDescs[0].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_Version{new(Version)}
-		},
-	)},
-	{Type: prototype.GoMessage(
-		xxx_Plugin_protoFile_MessageDescs[1].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_CodeGeneratorRequest{new(CodeGeneratorRequest)}
-		},
-	)},
-	{Type: prototype.GoMessage(
-		xxx_Plugin_protoFile_MessageDescs[2].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_CodeGeneratorResponse{new(CodeGeneratorResponse)}
-		},
-	)},
-	{Type: prototype.GoMessage(
-		xxx_Plugin_protoFile_MessageDescs[3].Reference(),
-		func(protoreflect.MessageType) protoreflect.Message {
-			return xxx_CodeGeneratorResponse_File{new(CodeGeneratorResponse_File)}
-		},
-	)},
-}
-var xxx_Plugin_protoFile_MessageDescs = [4]prototype.Message{
-	{
-		Name: "Version",
-		Fields: []prototype.Field{
-			{
-				Name:        "major",
-				Number:      1,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Int32Kind,
-				JSONName:    "major",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "minor",
-				Number:      2,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Int32Kind,
-				JSONName:    "minor",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "patch",
-				Number:      3,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.Int32Kind,
-				JSONName:    "patch",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "suffix",
-				Number:      4,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.StringKind,
-				JSONName:    "suffix",
-				IsPacked:    prototype.False,
-			},
-		},
-	},
-	{
-		Name: "CodeGeneratorRequest",
-		Fields: []prototype.Field{
-			{
-				Name:        "file_to_generate",
-				Number:      1,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.StringKind,
-				JSONName:    "fileToGenerate",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "parameter",
-				Number:      2,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.StringKind,
-				JSONName:    "parameter",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "proto_file",
-				Number:      15,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.MessageKind,
-				JSONName:    "protoFile",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "compiler_version",
-				Number:      3,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.MessageKind,
-				JSONName:    "compilerVersion",
-				IsPacked:    prototype.False,
-			},
-		},
-	},
-	{
-		Name: "CodeGeneratorResponse",
-		Fields: []prototype.Field{
-			{
-				Name:        "error",
-				Number:      1,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.StringKind,
-				JSONName:    "error",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "file",
-				Number:      15,
-				Cardinality: protoreflect.Repeated,
-				Kind:        protoreflect.MessageKind,
-				JSONName:    "file",
-				IsPacked:    prototype.False,
-			},
-		},
-	},
-	{
-		Name: "File",
-		Fields: []prototype.Field{
-			{
-				Name:        "name",
-				Number:      1,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.StringKind,
-				JSONName:    "name",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "insertion_point",
-				Number:      2,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.StringKind,
-				JSONName:    "insertionPoint",
-				IsPacked:    prototype.False,
-			},
-			{
-				Name:        "content",
-				Number:      15,
-				Cardinality: protoreflect.Optional,
-				Kind:        protoreflect.StringKind,
-				JSONName:    "content",
-				IsPacked:    prototype.False,
-			},
-		},
-	},
+var xxx_Plugin_protoFile_messageTypes [4]protoimpl.MessageType
+var xxx_Plugin_protoFile_goTypes = []interface{}{
+	(*Version)(nil),                        // 0: google.protobuf.compiler.Version
+	(*CodeGeneratorRequest)(nil),           // 1: google.protobuf.compiler.CodeGeneratorRequest
+	(*CodeGeneratorResponse)(nil),          // 2: google.protobuf.compiler.CodeGeneratorResponse
+	(*CodeGeneratorResponse_File)(nil),     // 3: google.protobuf.compiler.CodeGeneratorResponse.File
+	(*descriptor.FileDescriptorProto)(nil), // 4: google.protobuf.FileDescriptorProto
+}
+var xxx_Plugin_protoFile_depIdxs = []int32{
+	4, // google.protobuf.compiler.CodeGeneratorRequest.proto_file:type_name -> google.protobuf.FileDescriptorProto
+	0, // google.protobuf.compiler.CodeGeneratorRequest.compiler_version:type_name -> google.protobuf.compiler.Version
+	3, // google.protobuf.compiler.CodeGeneratorResponse.file:type_name -> google.protobuf.compiler.CodeGeneratorResponse.File
+}
+
+func init() {
+	var messageTypes [4]protoreflect.MessageType
+	Plugin_protoFile = protoimpl.FileBuilder{
+		RawDescriptor:      fileDescriptor_3562add825dafed5,
+		GoTypes:            xxx_Plugin_protoFile_goTypes,
+		DependencyIndexes:  xxx_Plugin_protoFile_depIdxs,
+		MessageOutputTypes: messageTypes[:],
+	}.Init()
+	messageGoTypes := xxx_Plugin_protoFile_goTypes[0:][:4]
+	for i, mt := range messageTypes[:] {
+		xxx_Plugin_protoFile_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
+		xxx_Plugin_protoFile_messageTypes[i].PBType = mt
+	}
+	xxx_Plugin_protoFile_goTypes = nil
+	xxx_Plugin_protoFile_depIdxs = nil
 }

Alguns arquivos não foram mostrados porque muitos arquivos mudaram nesse diff