// Code generated by protoc-gen-go. DO NOT EDIT.
// source: encoding/textpb/testprotos/pb2/test.proto

package pb2

import (
	proto "github.com/golang/protobuf/proto"
	any "github.com/golang/protobuf/ptypes/any"
	duration "github.com/golang/protobuf/ptypes/duration"
	empty "github.com/golang/protobuf/ptypes/empty"
	_struct "github.com/golang/protobuf/ptypes/struct"
	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"
)

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

type Enum int32

const (
	Enum_UNKNOWN Enum = 0
	Enum_FIRST   Enum = 1
	Enum_SECOND  Enum = 2
	Enum_TENTH   Enum = 10
)

type xxx_Enum Enum

func (e Enum) ProtoReflect() protoreflect.Enum {
	return (xxx_Enum)(e)
}
func (e xxx_Enum) Type() protoreflect.EnumType {
	return xxx_Test_ProtoFile_EnumTypes[0]
}
func (e xxx_Enum) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(e)
}

var Enum_name = map[int32]string{
	0:  "UNKNOWN",
	1:  "FIRST",
	2:  "SECOND",
	10: "TENTH",
}

var Enum_value = map[string]int32{
	"UNKNOWN": 0,
	"FIRST":   1,
	"SECOND":  2,
	"TENTH":   10,
}

func (x Enum) Enum() *Enum {
	p := new(Enum)
	*p = x
	return p
}

func (x Enum) String() string {
	return proto.EnumName(Enum_name, int32(x))
}

func (x *Enum) UnmarshalJSON(data []byte) error {
	value, err := proto.UnmarshalJSONEnum(Enum_value, data, "Enum")
	if err != nil {
		return err
	}
	*x = Enum(value)
	return nil
}

func (Enum) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_c8d7acc1bcec9a72, []int{0}
}

type Enums_NestedEnum int32

const (
	Enums_UNO  Enums_NestedEnum = 1
	Enums_DOS  Enums_NestedEnum = 2
	Enums_DIEZ Enums_NestedEnum = 10
)

type xxx_Enums_NestedEnum Enums_NestedEnum

func (e Enums_NestedEnum) ProtoReflect() protoreflect.Enum {
	return (xxx_Enums_NestedEnum)(e)
}
func (e xxx_Enums_NestedEnum) Type() protoreflect.EnumType {
	return xxx_Test_ProtoFile_EnumTypes[1]
}
func (e xxx_Enums_NestedEnum) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(e)
}

var Enums_NestedEnum_name = map[int32]string{
	1:  "UNO",
	2:  "DOS",
	10: "DIEZ",
}

var Enums_NestedEnum_value = map[string]int32{
	"UNO":  1,
	"DOS":  2,
	"DIEZ": 10,
}

func (x Enums_NestedEnum) Enum() *Enums_NestedEnum {
	p := new(Enums_NestedEnum)
	*p = x
	return p
}

func (x Enums_NestedEnum) String() string {
	return proto.EnumName(Enums_NestedEnum_name, int32(x))
}

func (x *Enums_NestedEnum) UnmarshalJSON(data []byte) error {
	value, err := proto.UnmarshalJSONEnum(Enums_NestedEnum_value, data, "Enums_NestedEnum")
	if err != nil {
		return err
	}
	*x = Enums_NestedEnum(value)
	return nil
}

func (Enums_NestedEnum) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_c8d7acc1bcec9a72, []int{2, 0}
}

// Scalars contains optional scalar fields.
type Scalars struct {
	OptBool              *bool    `protobuf:"varint,1,opt,name=opt_bool,json=optBool" json:"opt_bool,omitempty"`
	OptInt32             *int32   `protobuf:"varint,2,opt,name=opt_int32,json=optInt32" json:"opt_int32,omitempty"`
	OptInt64             *int64   `protobuf:"varint,3,opt,name=opt_int64,json=optInt64" json:"opt_int64,omitempty"`
	OptUint32            *uint32  `protobuf:"varint,4,opt,name=opt_uint32,json=optUint32" json:"opt_uint32,omitempty"`
	OptUint64            *uint64  `protobuf:"varint,5,opt,name=opt_uint64,json=optUint64" json:"opt_uint64,omitempty"`
	OptSint32            *int32   `protobuf:"zigzag32,6,opt,name=opt_sint32,json=optSint32" json:"opt_sint32,omitempty"`
	OptSint64            *int64   `protobuf:"zigzag64,7,opt,name=opt_sint64,json=optSint64" json:"opt_sint64,omitempty"`
	OptFixed32           *uint32  `protobuf:"fixed32,8,opt,name=opt_fixed32,json=optFixed32" json:"opt_fixed32,omitempty"`
	OptFixed64           *uint64  `protobuf:"fixed64,9,opt,name=opt_fixed64,json=optFixed64" json:"opt_fixed64,omitempty"`
	OptSfixed32          *int32   `protobuf:"fixed32,10,opt,name=opt_sfixed32,json=optSfixed32" json:"opt_sfixed32,omitempty"`
	OptSfixed64          *int64   `protobuf:"fixed64,11,opt,name=opt_sfixed64,json=optSfixed64" json:"opt_sfixed64,omitempty"`
	OptFloat             *float32 `protobuf:"fixed32,20,opt,name=opt_float,json=optFloat" json:"opt_float,omitempty"`
	OptDouble            *float64 `protobuf:"fixed64,21,opt,name=opt_double,json=optDouble" json:"opt_double,omitempty"`
	OptBytes             []byte   `protobuf:"bytes,14,opt,name=opt_bytes,json=optBytes" json:"opt_bytes,omitempty"`
	OptString            *string  `protobuf:"bytes,13,opt,name=opt_string,json=optString" json:"opt_string,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	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
}

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}
}

func (m *Scalars) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Scalars.Unmarshal(m, b)
}
func (m *Scalars) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Scalars.Marshal(b, m, deterministic)
}
func (m *Scalars) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Scalars.Merge(m, src)
}
func (m *Scalars) XXX_Size() int {
	return xxx_messageInfo_Scalars.Size(m)
}
func (m *Scalars) XXX_DiscardUnknown() {
	xxx_messageInfo_Scalars.DiscardUnknown(m)
}

var xxx_messageInfo_Scalars proto.InternalMessageInfo

func (m *Scalars) GetOptBool() bool {
	if m != nil && m.OptBool != nil {
		return *m.OptBool
	}
	return false
}

func (m *Scalars) GetOptInt32() int32 {
	if m != nil && m.OptInt32 != nil {
		return *m.OptInt32
	}
	return 0
}

func (m *Scalars) GetOptInt64() int64 {
	if m != nil && m.OptInt64 != nil {
		return *m.OptInt64
	}
	return 0
}

func (m *Scalars) GetOptUint32() uint32 {
	if m != nil && m.OptUint32 != nil {
		return *m.OptUint32
	}
	return 0
}

func (m *Scalars) GetOptUint64() uint64 {
	if m != nil && m.OptUint64 != nil {
		return *m.OptUint64
	}
	return 0
}

func (m *Scalars) GetOptSint32() int32 {
	if m != nil && m.OptSint32 != nil {
		return *m.OptSint32
	}
	return 0
}

func (m *Scalars) GetOptSint64() int64 {
	if m != nil && m.OptSint64 != nil {
		return *m.OptSint64
	}
	return 0
}

func (m *Scalars) GetOptFixed32() uint32 {
	if m != nil && m.OptFixed32 != nil {
		return *m.OptFixed32
	}
	return 0
}

func (m *Scalars) GetOptFixed64() uint64 {
	if m != nil && m.OptFixed64 != nil {
		return *m.OptFixed64
	}
	return 0
}

func (m *Scalars) GetOptSfixed32() int32 {
	if m != nil && m.OptSfixed32 != nil {
		return *m.OptSfixed32
	}
	return 0
}

func (m *Scalars) GetOptSfixed64() int64 {
	if m != nil && m.OptSfixed64 != nil {
		return *m.OptSfixed64
	}
	return 0
}

func (m *Scalars) GetOptFloat() float32 {
	if m != nil && m.OptFloat != nil {
		return *m.OptFloat
	}
	return 0
}

func (m *Scalars) GetOptDouble() float64 {
	if m != nil && m.OptDouble != nil {
		return *m.OptDouble
	}
	return 0
}

func (m *Scalars) GetOptBytes() []byte {
	if m != nil {
		return m.OptBytes
	}
	return nil
}

func (m *Scalars) GetOptString() string {
	if m != nil && m.OptString != nil {
		return *m.OptString
	}
	return ""
}

// Message contains repeated fields.
type Repeats struct {
	RptBool              []bool    `protobuf:"varint,1,rep,name=rpt_bool,json=rptBool" json:"rpt_bool,omitempty"`
	RptInt32             []int32   `protobuf:"varint,2,rep,name=rpt_int32,json=rptInt32" json:"rpt_int32,omitempty"`
	RptInt64             []int64   `protobuf:"varint,3,rep,name=rpt_int64,json=rptInt64" json:"rpt_int64,omitempty"`
	RptUint32            []uint32  `protobuf:"varint,4,rep,name=rpt_uint32,json=rptUint32" json:"rpt_uint32,omitempty"`
	RptUint64            []uint64  `protobuf:"varint,5,rep,name=rpt_uint64,json=rptUint64" json:"rpt_uint64,omitempty"`
	RptFloat             []float32 `protobuf:"fixed32,6,rep,name=rpt_float,json=rptFloat" json:"rpt_float,omitempty"`
	RptDouble            []float64 `protobuf:"fixed64,7,rep,name=rpt_double,json=rptDouble" json:"rpt_double,omitempty"`
	RptString            []string  `protobuf:"bytes,15,rep,name=rpt_string,json=rptString" json:"rpt_string,omitempty"`
	RptBytes             [][]byte  `protobuf:"bytes,14,rep,name=rpt_bytes,json=rptBytes" json:"rpt_bytes,omitempty"`
	XXX_NoUnkeyedLiteral struct{}  `json:"-"`
	XXX_unrecognized     []byte    `json:"-"`
	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
}
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}
}

func (m *Repeats) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Repeats.Unmarshal(m, b)
}
func (m *Repeats) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Repeats.Marshal(b, m, deterministic)
}
func (m *Repeats) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Repeats.Merge(m, src)
}
func (m *Repeats) XXX_Size() int {
	return xxx_messageInfo_Repeats.Size(m)
}
func (m *Repeats) XXX_DiscardUnknown() {
	xxx_messageInfo_Repeats.DiscardUnknown(m)
}

var xxx_messageInfo_Repeats proto.InternalMessageInfo

func (m *Repeats) GetRptBool() []bool {
	if m != nil {
		return m.RptBool
	}
	return nil
}

func (m *Repeats) GetRptInt32() []int32 {
	if m != nil {
		return m.RptInt32
	}
	return nil
}

func (m *Repeats) GetRptInt64() []int64 {
	if m != nil {
		return m.RptInt64
	}
	return nil
}

func (m *Repeats) GetRptUint32() []uint32 {
	if m != nil {
		return m.RptUint32
	}
	return nil
}

func (m *Repeats) GetRptUint64() []uint64 {
	if m != nil {
		return m.RptUint64
	}
	return nil
}

func (m *Repeats) GetRptFloat() []float32 {
	if m != nil {
		return m.RptFloat
	}
	return nil
}

func (m *Repeats) GetRptDouble() []float64 {
	if m != nil {
		return m.RptDouble
	}
	return nil
}

func (m *Repeats) GetRptString() []string {
	if m != nil {
		return m.RptString
	}
	return nil
}

func (m *Repeats) GetRptBytes() [][]byte {
	if m != nil {
		return m.RptBytes
	}
	return nil
}

// Message contains enum fields.
type Enums struct {
	OptEnum              *Enum              `protobuf:"varint,1,opt,name=opt_enum,json=optEnum,enum=pb2.Enum" json:"opt_enum,omitempty"`
	RptEnum              []Enum             `protobuf:"varint,2,rep,name=rpt_enum,json=rptEnum,enum=pb2.Enum" json:"rpt_enum,omitempty"`
	OptNestedEnum        *Enums_NestedEnum  `protobuf:"varint,3,opt,name=opt_nested_enum,json=optNestedEnum,enum=pb2.Enums_NestedEnum" json:"opt_nested_enum,omitempty"`
	RptNestedEnum        []Enums_NestedEnum `protobuf:"varint,4,rep,name=rpt_nested_enum,json=rptNestedEnum,enum=pb2.Enums_NestedEnum" json:"rpt_nested_enum,omitempty"`
	XXX_NoUnkeyedLiteral struct{}           `json:"-"`
	XXX_unrecognized     []byte             `json:"-"`
	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)
}
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}
}

func (m *Enums) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Enums.Unmarshal(m, b)
}
func (m *Enums) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Enums.Marshal(b, m, deterministic)
}
func (m *Enums) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Enums.Merge(m, src)
}
func (m *Enums) XXX_Size() int {
	return xxx_messageInfo_Enums.Size(m)
}
func (m *Enums) XXX_DiscardUnknown() {
	xxx_messageInfo_Enums.DiscardUnknown(m)
}

var xxx_messageInfo_Enums proto.InternalMessageInfo

func (m *Enums) GetOptEnum() Enum {
	if m != nil && m.OptEnum != nil {
		return *m.OptEnum
	}
	return Enum_UNKNOWN
}

func (m *Enums) GetRptEnum() []Enum {
	if m != nil {
		return m.RptEnum
	}
	return nil
}

func (m *Enums) GetOptNestedEnum() Enums_NestedEnum {
	if m != nil && m.OptNestedEnum != nil {
		return *m.OptNestedEnum
	}
	return Enums_UNO
}

func (m *Enums) GetRptNestedEnum() []Enums_NestedEnum {
	if m != nil {
		return m.RptNestedEnum
	}
	return nil
}

// Message contains message and group fields.
type Nests struct {
	OptNested            *Nested           `protobuf:"bytes,1,opt,name=opt_nested,json=optNested" json:"opt_nested,omitempty"`
	Optgroup             *Nests_OptGroup   `protobuf:"group,2,opt,name=OptGroup,json=optgroup" json:"optgroup,omitempty"`
	RptNested            []*Nested         `protobuf:"bytes,3,rep,name=rpt_nested,json=rptNested" json:"rpt_nested,omitempty"`
	Rptgroup             []*Nests_RptGroup `protobuf:"group,4,rep,name=RptGroup,json=rptgroup" json:"rptgroup,omitempty"`
	XXX_NoUnkeyedLiteral struct{}          `json:"-"`
	XXX_unrecognized     []byte            `json:"-"`
	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
}
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}
}

func (m *Nests) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Nests.Unmarshal(m, b)
}
func (m *Nests) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Nests.Marshal(b, m, deterministic)
}
func (m *Nests) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Nests.Merge(m, src)
}
func (m *Nests) XXX_Size() int {
	return xxx_messageInfo_Nests.Size(m)
}
func (m *Nests) XXX_DiscardUnknown() {
	xxx_messageInfo_Nests.DiscardUnknown(m)
}

var xxx_messageInfo_Nests proto.InternalMessageInfo

func (m *Nests) GetOptNested() *Nested {
	if m != nil {
		return m.OptNested
	}
	return nil
}

func (m *Nests) GetOptgroup() *Nests_OptGroup {
	if m != nil {
		return m.Optgroup
	}
	return nil
}

func (m *Nests) GetRptNested() []*Nested {
	if m != nil {
		return m.RptNested
	}
	return nil
}

func (m *Nests) GetRptgroup() []*Nests_RptGroup {
	if m != nil {
		return m.Rptgroup
	}
	return nil
}

// Message type used as submessage.
type Nested struct {
	OptString            *string  `protobuf:"bytes,1,opt,name=opt_string,json=optString" json:"opt_string,omitempty"`
	OptNested            *Nested  `protobuf:"bytes,2,opt,name=opt_nested,json=optNested" json:"opt_nested,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	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)
}
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}
}

func (m *Nested) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Nested.Unmarshal(m, b)
}
func (m *Nested) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Nested.Marshal(b, m, deterministic)
}
func (m *Nested) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Nested.Merge(m, src)
}
func (m *Nested) XXX_Size() int {
	return xxx_messageInfo_Nested.Size(m)
}
func (m *Nested) XXX_DiscardUnknown() {
	xxx_messageInfo_Nested.DiscardUnknown(m)
}

var xxx_messageInfo_Nested proto.InternalMessageInfo

func (m *Nested) GetOptString() string {
	if m != nil && m.OptString != nil {
		return *m.OptString
	}
	return ""
}

func (m *Nested) GetOptNested() *Nested {
	if m != nil {
		return m.OptNested
	}
	return nil
}

// Message contains required fields.
type Requireds struct {
	ReqBool              *bool    `protobuf:"varint,1,req,name=req_bool,json=reqBool" json:"req_bool,omitempty"`
	ReqFixed32           *uint32  `protobuf:"fixed32,2,req,name=req_fixed32,json=reqFixed32" json:"req_fixed32,omitempty"`
	ReqFixed64           *uint64  `protobuf:"fixed64,3,req,name=req_fixed64,json=reqFixed64" json:"req_fixed64,omitempty"`
	ReqSfixed32          *int32   `protobuf:"fixed32,4,req,name=req_sfixed32,json=reqSfixed32" json:"req_sfixed32,omitempty"`
	ReqSfixed64          *int64   `protobuf:"fixed64,5,req,name=req_sfixed64,json=reqSfixed64" json:"req_sfixed64,omitempty"`
	ReqFloat             *float32 `protobuf:"fixed32,6,req,name=req_float,json=reqFloat" json:"req_float,omitempty"`
	ReqDouble            *float64 `protobuf:"fixed64,7,req,name=req_double,json=reqDouble" json:"req_double,omitempty"`
	ReqString            *string  `protobuf:"bytes,8,req,name=req_string,json=reqString" json:"req_string,omitempty"`
	ReqBytes             []byte   `protobuf:"bytes,9,req,name=req_bytes,json=reqBytes" json:"req_bytes,omitempty"`
	ReqEnum              *Enum    `protobuf:"varint,10,req,name=req_enum,json=reqEnum,enum=pb2.Enum" json:"req_enum,omitempty"`
	ReqNested            *Nested  `protobuf:"bytes,11,req,name=req_nested,json=reqNested" json:"req_nested,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

type xxx_Requireds struct{ m *Requireds }

func (m *Requireds) ProtoReflect() protoreflect.Message {
	return xxx_Requireds{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}
}

func (m *Requireds) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Requireds.Unmarshal(m, b)
}
func (m *Requireds) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Requireds.Marshal(b, m, deterministic)
}
func (m *Requireds) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Requireds.Merge(m, src)
}
func (m *Requireds) XXX_Size() int {
	return xxx_messageInfo_Requireds.Size(m)
}
func (m *Requireds) XXX_DiscardUnknown() {
	xxx_messageInfo_Requireds.DiscardUnknown(m)
}

var xxx_messageInfo_Requireds proto.InternalMessageInfo

func (m *Requireds) GetReqBool() bool {
	if m != nil && m.ReqBool != nil {
		return *m.ReqBool
	}
	return false
}

func (m *Requireds) GetReqFixed32() uint32 {
	if m != nil && m.ReqFixed32 != nil {
		return *m.ReqFixed32
	}
	return 0
}

func (m *Requireds) GetReqFixed64() uint64 {
	if m != nil && m.ReqFixed64 != nil {
		return *m.ReqFixed64
	}
	return 0
}

func (m *Requireds) GetReqSfixed32() int32 {
	if m != nil && m.ReqSfixed32 != nil {
		return *m.ReqSfixed32
	}
	return 0
}

func (m *Requireds) GetReqSfixed64() int64 {
	if m != nil && m.ReqSfixed64 != nil {
		return *m.ReqSfixed64
	}
	return 0
}

func (m *Requireds) GetReqFloat() float32 {
	if m != nil && m.ReqFloat != nil {
		return *m.ReqFloat
	}
	return 0
}

func (m *Requireds) GetReqDouble() float64 {
	if m != nil && m.ReqDouble != nil {
		return *m.ReqDouble
	}
	return 0
}

func (m *Requireds) GetReqString() string {
	if m != nil && m.ReqString != nil {
		return *m.ReqString
	}
	return ""
}

func (m *Requireds) GetReqBytes() []byte {
	if m != nil {
		return m.ReqBytes
	}
	return nil
}

func (m *Requireds) GetReqEnum() Enum {
	if m != nil && m.ReqEnum != nil {
		return *m.ReqEnum
	}
	return Enum_UNKNOWN
}

func (m *Requireds) GetReqNested() *Nested {
	if m != nil {
		return m.ReqNested
	}
	return nil
}

// Message contains both required and optional fields.
type PartialRequired struct {
	ReqString            *string  `protobuf:"bytes,1,req,name=req_string,json=reqString" json:"req_string,omitempty"`
	OptString            *string  `protobuf:"bytes,2,opt,name=opt_string,json=optString" json:"opt_string,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	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)
}
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}
}

func (m *PartialRequired) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_PartialRequired.Unmarshal(m, b)
}
func (m *PartialRequired) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_PartialRequired.Marshal(b, m, deterministic)
}
func (m *PartialRequired) XXX_Merge(src proto.Message) {
	xxx_messageInfo_PartialRequired.Merge(m, src)
}
func (m *PartialRequired) XXX_Size() int {
	return xxx_messageInfo_PartialRequired.Size(m)
}
func (m *PartialRequired) XXX_DiscardUnknown() {
	xxx_messageInfo_PartialRequired.DiscardUnknown(m)
}

var xxx_messageInfo_PartialRequired proto.InternalMessageInfo

func (m *PartialRequired) GetReqString() string {
	if m != nil && m.ReqString != nil {
		return *m.ReqString
	}
	return ""
}

func (m *PartialRequired) GetOptString() string {
	if m != nil && m.OptString != nil {
		return *m.OptString
	}
	return ""
}

// Message contains oneof field.
type Oneofs struct {
	// Types that are valid to be assigned to Union:
	//	*Oneofs_Str
	//	*Oneofs_Msg
	Union                isOneofs_Union `protobuf_oneof:"union"`
	XXX_NoUnkeyedLiteral struct{}       `json:"-"`
	XXX_unrecognized     []byte         `json:"-"`
	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
}

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}
}

func (m *Oneofs) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Oneofs.Unmarshal(m, b)
}
func (m *Oneofs) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Oneofs.Marshal(b, m, deterministic)
}
func (m *Oneofs) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Oneofs.Merge(m, src)
}
func (m *Oneofs) XXX_Size() int {
	return xxx_messageInfo_Oneofs.Size(m)
}
func (m *Oneofs) XXX_DiscardUnknown() {
	xxx_messageInfo_Oneofs.DiscardUnknown(m)
}

var xxx_messageInfo_Oneofs proto.InternalMessageInfo

type isOneofs_Union interface {
	isOneofs_Union()
}

type Oneofs_Str struct {
	Str string `protobuf:"bytes,1,opt,name=str,oneof"`
}

type Oneofs_Msg struct {
	Msg *Nested `protobuf:"bytes,2,opt,name=msg,oneof"`
}

func (*Oneofs_Str) isOneofs_Union() {}

func (*Oneofs_Msg) isOneofs_Union() {}

func (m *Oneofs) GetUnion() isOneofs_Union {
	if m != nil {
		return m.Union
	}
	return nil
}

func (m *Oneofs) GetStr() string {
	if x, ok := m.GetUnion().(*Oneofs_Str); ok {
		return x.Str
	}
	return ""
}

func (m *Oneofs) GetMsg() *Nested {
	if x, ok := m.GetUnion().(*Oneofs_Msg); ok {
		return x.Msg
	}
	return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*Oneofs) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*Oneofs_Str)(nil),
		(*Oneofs_Msg)(nil),
	}
}

// Message contains map fields.
type Maps struct {
	Int32ToStr           map[int32]string   `protobuf:"bytes,1,rep,name=int32_to_str,json=int32ToStr" json:"int32_to_str,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
	Sfixed64ToBool       map[int64]bool     `protobuf:"bytes,2,rep,name=sfixed64_to_bool,json=sfixed64ToBool" json:"sfixed64_to_bool,omitempty" protobuf_key:"fixed64,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"`
	BoolToUint32         map[bool]uint32    `protobuf:"bytes,3,rep,name=bool_to_uint32,json=boolToUint32" json:"bool_to_uint32,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"`
	Uint64ToEnum         map[uint64]Enum    `protobuf:"bytes,4,rep,name=uint64_to_enum,json=uint64ToEnum" json:"uint64_to_enum,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value,enum=pb2.Enum"`
	StrToNested          map[string]*Nested `protobuf:"bytes,5,rep,name=str_to_nested,json=strToNested" json:"str_to_nested,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
	StrToOneofs          map[string]*Oneofs `protobuf:"bytes,6,rep,name=str_to_oneofs,json=strToOneofs" json:"str_to_oneofs,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
	XXX_NoUnkeyedLiteral struct{}           `json:"-"`
	XXX_unrecognized     []byte             `json:"-"`
	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)
}
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}
}

func (m *Maps) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Maps.Unmarshal(m, b)
}
func (m *Maps) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Maps.Marshal(b, m, deterministic)
}
func (m *Maps) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Maps.Merge(m, src)
}
func (m *Maps) XXX_Size() int {
	return xxx_messageInfo_Maps.Size(m)
}
func (m *Maps) XXX_DiscardUnknown() {
	xxx_messageInfo_Maps.DiscardUnknown(m)
}

var xxx_messageInfo_Maps proto.InternalMessageInfo

func (m *Maps) GetInt32ToStr() map[int32]string {
	if m != nil {
		return m.Int32ToStr
	}
	return nil
}

func (m *Maps) GetSfixed64ToBool() map[int64]bool {
	if m != nil {
		return m.Sfixed64ToBool
	}
	return nil
}

func (m *Maps) GetBoolToUint32() map[bool]uint32 {
	if m != nil {
		return m.BoolToUint32
	}
	return nil
}

func (m *Maps) GetUint64ToEnum() map[uint64]Enum {
	if m != nil {
		return m.Uint64ToEnum
	}
	return nil
}

func (m *Maps) GetStrToNested() map[string]*Nested {
	if m != nil {
		return m.StrToNested
	}
	return nil
}

func (m *Maps) GetStrToOneofs() map[string]*Oneofs {
	if m != nil {
		return m.StrToOneofs
	}
	return nil
}

type NestedWithRequired struct {
	ReqString            *string  `protobuf:"bytes,1,req,name=req_string,json=reqString" json:"req_string,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

type xxx_NestedWithRequired struct{ m *NestedWithRequired }

func (m *NestedWithRequired) ProtoReflect() protoreflect.Message {
	return xxx_NestedWithRequired{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}
}

func (m *NestedWithRequired) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_NestedWithRequired.Unmarshal(m, b)
}
func (m *NestedWithRequired) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_NestedWithRequired.Marshal(b, m, deterministic)
}
func (m *NestedWithRequired) XXX_Merge(src proto.Message) {
	xxx_messageInfo_NestedWithRequired.Merge(m, src)
}
func (m *NestedWithRequired) XXX_Size() int {
	return xxx_messageInfo_NestedWithRequired.Size(m)
}
func (m *NestedWithRequired) XXX_DiscardUnknown() {
	xxx_messageInfo_NestedWithRequired.DiscardUnknown(m)
}

var xxx_messageInfo_NestedWithRequired proto.InternalMessageInfo

func (m *NestedWithRequired) GetReqString() string {
	if m != nil && m.ReqString != nil {
		return *m.ReqString
	}
	return ""
}

type IndirectRequired struct {
	OptNested            *NestedWithRequired            `protobuf:"bytes,1,opt,name=opt_nested,json=optNested" json:"opt_nested,omitempty"`
	RptNested            []*NestedWithRequired          `protobuf:"bytes,2,rep,name=rpt_nested,json=rptNested" json:"rpt_nested,omitempty"`
	StrToNested          map[string]*NestedWithRequired `protobuf:"bytes,3,rep,name=str_to_nested,json=strToNested" json:"str_to_nested,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
	XXX_NoUnkeyedLiteral struct{}                       `json:"-"`
	XXX_unrecognized     []byte                         `json:"-"`
	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
}
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}
}

func (m *IndirectRequired) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_IndirectRequired.Unmarshal(m, b)
}
func (m *IndirectRequired) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_IndirectRequired.Marshal(b, m, deterministic)
}
func (m *IndirectRequired) XXX_Merge(src proto.Message) {
	xxx_messageInfo_IndirectRequired.Merge(m, src)
}
func (m *IndirectRequired) XXX_Size() int {
	return xxx_messageInfo_IndirectRequired.Size(m)
}
func (m *IndirectRequired) XXX_DiscardUnknown() {
	xxx_messageInfo_IndirectRequired.DiscardUnknown(m)
}

var xxx_messageInfo_IndirectRequired proto.InternalMessageInfo

func (m *IndirectRequired) GetOptNested() *NestedWithRequired {
	if m != nil {
		return m.OptNested
	}
	return nil
}

func (m *IndirectRequired) GetRptNested() []*NestedWithRequired {
	if m != nil {
		return m.RptNested
	}
	return nil
}

func (m *IndirectRequired) GetStrToNested() map[string]*NestedWithRequired {
	if m != nil {
		return m.StrToNested
	}
	return nil
}

type Extensions struct {
	OptString                    *string  `protobuf:"bytes,1,opt,name=opt_string,json=optString" json:"opt_string,omitempty"`
	OptBool                      *bool    `protobuf:"varint,101,opt,name=opt_bool,json=optBool" json:"opt_bool,omitempty"`
	OptInt32                     *int32   `protobuf:"varint,2,opt,name=opt_int32,json=optInt32" json:"opt_int32,omitempty"`
	XXX_NoUnkeyedLiteral         struct{} `json:"-"`
	proto.XXX_InternalExtensions `json:"-"`
	XXX_unrecognized             []byte `json:"-"`
	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)
}
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}
}

var extRange_Extensions = []proto.ExtensionRange{
	{Start: 20, End: 100},
}

func (*Extensions) ExtensionRangeArray() []proto.ExtensionRange {
	return extRange_Extensions
}

func (m *Extensions) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Extensions.Unmarshal(m, b)
}
func (m *Extensions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Extensions.Marshal(b, m, deterministic)
}
func (m *Extensions) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Extensions.Merge(m, src)
}
func (m *Extensions) XXX_Size() int {
	return xxx_messageInfo_Extensions.Size(m)
}
func (m *Extensions) XXX_DiscardUnknown() {
	xxx_messageInfo_Extensions.DiscardUnknown(m)
}

var xxx_messageInfo_Extensions proto.InternalMessageInfo

func (m *Extensions) GetOptString() string {
	if m != nil && m.OptString != nil {
		return *m.OptString
	}
	return ""
}

func (m *Extensions) GetOptBool() bool {
	if m != nil && m.OptBool != nil {
		return *m.OptBool
	}
	return false
}

func (m *Extensions) GetOptInt32() int32 {
	if m != nil && m.OptInt32 != nil {
		return *m.OptInt32
	}
	return 0
}

type ExtensionsContainer struct {
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	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
}
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}
}

func (m *ExtensionsContainer) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ExtensionsContainer.Unmarshal(m, b)
}
func (m *ExtensionsContainer) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ExtensionsContainer.Marshal(b, m, deterministic)
}
func (m *ExtensionsContainer) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ExtensionsContainer.Merge(m, src)
}
func (m *ExtensionsContainer) XXX_Size() int {
	return xxx_messageInfo_ExtensionsContainer.Size(m)
}
func (m *ExtensionsContainer) XXX_DiscardUnknown() {
	xxx_messageInfo_ExtensionsContainer.DiscardUnknown(m)
}

var xxx_messageInfo_ExtensionsContainer proto.InternalMessageInfo

type MessageSet struct {
	XXX_NoUnkeyedLiteral         struct{} `json:"-"`
	proto.XXX_InternalExtensions `protobuf_messageset:"1" json:"-"`
	XXX_unrecognized             []byte `json:"-"`
	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)
}
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}
}

var extRange_MessageSet = []proto.ExtensionRange{
	{Start: 4, End: 2147483646},
}

func (*MessageSet) ExtensionRangeArray() []proto.ExtensionRange {
	return extRange_MessageSet
}

func (m *MessageSet) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_MessageSet.Unmarshal(m, b)
}
func (m *MessageSet) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_MessageSet.Marshal(b, m, deterministic)
}
func (m *MessageSet) XXX_Merge(src proto.Message) {
	xxx_messageInfo_MessageSet.Merge(m, src)
}
func (m *MessageSet) XXX_Size() int {
	return xxx_messageInfo_MessageSet.Size(m)
}
func (m *MessageSet) XXX_DiscardUnknown() {
	xxx_messageInfo_MessageSet.DiscardUnknown(m)
}

var xxx_messageInfo_MessageSet proto.InternalMessageInfo

type MessageSetExtension struct {
	OptString            *string  `protobuf:"bytes,1,opt,name=opt_string,json=optString" json:"opt_string,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	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
}
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}
}

func (m *MessageSetExtension) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_MessageSetExtension.Unmarshal(m, b)
}
func (m *MessageSetExtension) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_MessageSetExtension.Marshal(b, m, deterministic)
}
func (m *MessageSetExtension) XXX_Merge(src proto.Message) {
	xxx_messageInfo_MessageSetExtension.Merge(m, src)
}
func (m *MessageSetExtension) XXX_Size() int {
	return xxx_messageInfo_MessageSetExtension.Size(m)
}
func (m *MessageSetExtension) XXX_DiscardUnknown() {
	xxx_messageInfo_MessageSetExtension.DiscardUnknown(m)
}

var xxx_messageInfo_MessageSetExtension proto.InternalMessageInfo

func (m *MessageSetExtension) GetOptString() string {
	if m != nil && m.OptString != nil {
		return *m.OptString
	}
	return ""
}

// Message contains well-known type fields.
type KnownTypes struct {
	OptBool              *wrappers.BoolValue   `protobuf:"bytes,1,opt,name=opt_bool,json=optBool" json:"opt_bool,omitempty"`
	OptInt32             *wrappers.Int32Value  `protobuf:"bytes,2,opt,name=opt_int32,json=optInt32" json:"opt_int32,omitempty"`
	OptInt64             *wrappers.Int64Value  `protobuf:"bytes,3,opt,name=opt_int64,json=optInt64" json:"opt_int64,omitempty"`
	OptUint32            *wrappers.UInt32Value `protobuf:"bytes,4,opt,name=opt_uint32,json=optUint32" json:"opt_uint32,omitempty"`
	OptUint64            *wrappers.UInt64Value `protobuf:"bytes,5,opt,name=opt_uint64,json=optUint64" json:"opt_uint64,omitempty"`
	OptFloat             *wrappers.FloatValue  `protobuf:"bytes,6,opt,name=opt_float,json=optFloat" json:"opt_float,omitempty"`
	OptDouble            *wrappers.DoubleValue `protobuf:"bytes,7,opt,name=opt_double,json=optDouble" json:"opt_double,omitempty"`
	OptString            *wrappers.StringValue `protobuf:"bytes,8,opt,name=opt_string,json=optString" json:"opt_string,omitempty"`
	OptBytes             *wrappers.BytesValue  `protobuf:"bytes,9,opt,name=opt_bytes,json=optBytes" json:"opt_bytes,omitempty"`
	OptDuration          *duration.Duration    `protobuf:"bytes,20,opt,name=opt_duration,json=optDuration" json:"opt_duration,omitempty"`
	OptTimestamp         *timestamp.Timestamp  `protobuf:"bytes,21,opt,name=opt_timestamp,json=optTimestamp" json:"opt_timestamp,omitempty"`
	OptStruct            *_struct.Struct       `protobuf:"bytes,25,opt,name=opt_struct,json=optStruct" json:"opt_struct,omitempty"`
	OptList              *_struct.ListValue    `protobuf:"bytes,26,opt,name=opt_list,json=optList" json:"opt_list,omitempty"`
	OptValue             *_struct.Value        `protobuf:"bytes,27,opt,name=opt_value,json=optValue" json:"opt_value,omitempty"`
	OptEmpty             *empty.Empty          `protobuf:"bytes,30,opt,name=opt_empty,json=optEmpty" json:"opt_empty,omitempty"`
	OptAny               *any.Any              `protobuf:"bytes,32,opt,name=opt_any,json=optAny" json:"opt_any,omitempty"`
	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
	XXX_unrecognized     []byte                `json:"-"`
	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)
}
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}
}

func (m *KnownTypes) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_KnownTypes.Unmarshal(m, b)
}
func (m *KnownTypes) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_KnownTypes.Marshal(b, m, deterministic)
}
func (m *KnownTypes) XXX_Merge(src proto.Message) {
	xxx_messageInfo_KnownTypes.Merge(m, src)
}
func (m *KnownTypes) XXX_Size() int {
	return xxx_messageInfo_KnownTypes.Size(m)
}
func (m *KnownTypes) XXX_DiscardUnknown() {
	xxx_messageInfo_KnownTypes.DiscardUnknown(m)
}

var xxx_messageInfo_KnownTypes proto.InternalMessageInfo

func (m *KnownTypes) GetOptBool() *wrappers.BoolValue {
	if m != nil {
		return m.OptBool
	}
	return nil
}

func (m *KnownTypes) GetOptInt32() *wrappers.Int32Value {
	if m != nil {
		return m.OptInt32
	}
	return nil
}

func (m *KnownTypes) GetOptInt64() *wrappers.Int64Value {
	if m != nil {
		return m.OptInt64
	}
	return nil
}

func (m *KnownTypes) GetOptUint32() *wrappers.UInt32Value {
	if m != nil {
		return m.OptUint32
	}
	return nil
}

func (m *KnownTypes) GetOptUint64() *wrappers.UInt64Value {
	if m != nil {
		return m.OptUint64
	}
	return nil
}

func (m *KnownTypes) GetOptFloat() *wrappers.FloatValue {
	if m != nil {
		return m.OptFloat
	}
	return nil
}

func (m *KnownTypes) GetOptDouble() *wrappers.DoubleValue {
	if m != nil {
		return m.OptDouble
	}
	return nil
}

func (m *KnownTypes) GetOptString() *wrappers.StringValue {
	if m != nil {
		return m.OptString
	}
	return nil
}

func (m *KnownTypes) GetOptBytes() *wrappers.BytesValue {
	if m != nil {
		return m.OptBytes
	}
	return nil
}

func (m *KnownTypes) GetOptDuration() *duration.Duration {
	if m != nil {
		return m.OptDuration
	}
	return nil
}

func (m *KnownTypes) GetOptTimestamp() *timestamp.Timestamp {
	if m != nil {
		return m.OptTimestamp
	}
	return nil
}

func (m *KnownTypes) GetOptStruct() *_struct.Struct {
	if m != nil {
		return m.OptStruct
	}
	return nil
}

func (m *KnownTypes) GetOptList() *_struct.ListValue {
	if m != nil {
		return m.OptList
	}
	return nil
}

func (m *KnownTypes) GetOptValue() *_struct.Value {
	if m != nil {
		return m.OptValue
	}
	return nil
}

func (m *KnownTypes) GetOptEmpty() *empty.Empty {
	if m != nil {
		return m.OptEmpty
	}
	return nil
}

func (m *KnownTypes) GetOptAny() *any.Any {
	if m != nil {
		return m.OptAny
	}
	return nil
}

type Nests_OptGroup struct {
	OptBool              *bool                          `protobuf:"varint,1,opt,name=opt_bool,json=optBool" json:"opt_bool,omitempty"`
	OptString            *string                        `protobuf:"bytes,2,opt,name=opt_string,json=optString" json:"opt_string,omitempty"`
	OptNested            *Nested                        `protobuf:"bytes,3,opt,name=opt_nested,json=optNested" json:"opt_nested,omitempty"`
	Optnestedgroup       *Nests_OptGroup_OptNestedGroup `protobuf:"group,4,opt,name=OptNestedGroup,json=optnestedgroup" json:"optnestedgroup,omitempty"`
	XXX_NoUnkeyedLiteral struct{}                       `json:"-"`
	XXX_unrecognized     []byte                         `json:"-"`
	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
}

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}
}

func (m *Nests_OptGroup) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Nests_OptGroup.Unmarshal(m, b)
}
func (m *Nests_OptGroup) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Nests_OptGroup.Marshal(b, m, deterministic)
}
func (m *Nests_OptGroup) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Nests_OptGroup.Merge(m, src)
}
func (m *Nests_OptGroup) XXX_Size() int {
	return xxx_messageInfo_Nests_OptGroup.Size(m)
}
func (m *Nests_OptGroup) XXX_DiscardUnknown() {
	xxx_messageInfo_Nests_OptGroup.DiscardUnknown(m)
}

var xxx_messageInfo_Nests_OptGroup proto.InternalMessageInfo

func (m *Nests_OptGroup) GetOptBool() bool {
	if m != nil && m.OptBool != nil {
		return *m.OptBool
	}
	return false
}

func (m *Nests_OptGroup) GetOptString() string {
	if m != nil && m.OptString != nil {
		return *m.OptString
	}
	return ""
}

func (m *Nests_OptGroup) GetOptNested() *Nested {
	if m != nil {
		return m.OptNested
	}
	return nil
}

func (m *Nests_OptGroup) GetOptnestedgroup() *Nests_OptGroup_OptNestedGroup {
	if m != nil {
		return m.Optnestedgroup
	}
	return nil
}

type Nests_RptGroup struct {
	RptBool              []bool   `protobuf:"varint,1,rep,name=rpt_bool,json=rptBool" json:"rpt_bool,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	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)
}
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}
}

func (m *Nests_RptGroup) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Nests_RptGroup.Unmarshal(m, b)
}
func (m *Nests_RptGroup) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Nests_RptGroup.Marshal(b, m, deterministic)
}
func (m *Nests_RptGroup) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Nests_RptGroup.Merge(m, src)
}
func (m *Nests_RptGroup) XXX_Size() int {
	return xxx_messageInfo_Nests_RptGroup.Size(m)
}
func (m *Nests_RptGroup) XXX_DiscardUnknown() {
	xxx_messageInfo_Nests_RptGroup.DiscardUnknown(m)
}

var xxx_messageInfo_Nests_RptGroup proto.InternalMessageInfo

func (m *Nests_RptGroup) GetRptBool() []bool {
	if m != nil {
		return m.RptBool
	}
	return nil
}

type Nests_OptGroup_OptNestedGroup struct {
	OptEnum              *Enum    `protobuf:"varint,1,opt,name=opt_enum,json=optEnum,enum=pb2.Enum" json:"opt_enum,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	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)
}
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}
}

func (m *Nests_OptGroup_OptNestedGroup) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Nests_OptGroup_OptNestedGroup.Unmarshal(m, b)
}
func (m *Nests_OptGroup_OptNestedGroup) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Nests_OptGroup_OptNestedGroup.Marshal(b, m, deterministic)
}
func (m *Nests_OptGroup_OptNestedGroup) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Nests_OptGroup_OptNestedGroup.Merge(m, src)
}
func (m *Nests_OptGroup_OptNestedGroup) XXX_Size() int {
	return xxx_messageInfo_Nests_OptGroup_OptNestedGroup.Size(m)
}
func (m *Nests_OptGroup_OptNestedGroup) XXX_DiscardUnknown() {
	xxx_messageInfo_Nests_OptGroup_OptNestedGroup.DiscardUnknown(m)
}

var xxx_messageInfo_Nests_OptGroup_OptNestedGroup proto.InternalMessageInfo

func (m *Nests_OptGroup_OptNestedGroup) GetOptEnum() Enum {
	if m != nil && m.OptEnum != nil {
		return *m.OptEnum
	}
	return Enum_UNKNOWN
}

var E_OptExtBool = &proto.ExtensionDesc{
	ExtendedType:  (*Extensions)(nil),
	ExtensionType: (*bool)(nil),
	Field:         21,
	Name:          "pb2.opt_ext_bool",
	Tag:           "varint,21,opt,name=opt_ext_bool",
	Filename:      "encoding/textpb/testprotos/pb2/test.proto",
}

var E_OptExtString = &proto.ExtensionDesc{
	ExtendedType:  (*Extensions)(nil),
	ExtensionType: (*string)(nil),
	Field:         22,
	Name:          "pb2.opt_ext_string",
	Tag:           "bytes,22,opt,name=opt_ext_string",
	Filename:      "encoding/textpb/testprotos/pb2/test.proto",
}

var E_OptExtEnum = &proto.ExtensionDesc{
	ExtendedType:  (*Extensions)(nil),
	ExtensionType: (*Enum)(nil),
	Field:         23,
	Name:          "pb2.opt_ext_enum",
	Tag:           "varint,23,opt,name=opt_ext_enum,enum=pb2.Enum",
	Filename:      "encoding/textpb/testprotos/pb2/test.proto",
}

var E_OptExtNested = &proto.ExtensionDesc{
	ExtendedType:  (*Extensions)(nil),
	ExtensionType: (*Nested)(nil),
	Field:         24,
	Name:          "pb2.opt_ext_nested",
	Tag:           "bytes,24,opt,name=opt_ext_nested",
	Filename:      "encoding/textpb/testprotos/pb2/test.proto",
}

var E_RptExtFixed32 = &proto.ExtensionDesc{
	ExtendedType:  (*Extensions)(nil),
	ExtensionType: ([]uint32)(nil),
	Field:         31,
	Name:          "pb2.rpt_ext_fixed32",
	Tag:           "fixed32,31,rep,name=rpt_ext_fixed32",
	Filename:      "encoding/textpb/testprotos/pb2/test.proto",
}

var E_RptExtEnum = &proto.ExtensionDesc{
	ExtendedType:  (*Extensions)(nil),
	ExtensionType: ([]Enum)(nil),
	Field:         32,
	Name:          "pb2.rpt_ext_enum",
	Tag:           "varint,32,rep,name=rpt_ext_enum,enum=pb2.Enum",
	Filename:      "encoding/textpb/testprotos/pb2/test.proto",
}

var E_RptExtNested = &proto.ExtensionDesc{
	ExtendedType:  (*Extensions)(nil),
	ExtensionType: ([]*Nested)(nil),
	Field:         33,
	Name:          "pb2.rpt_ext_nested",
	Tag:           "bytes,33,rep,name=rpt_ext_nested",
	Filename:      "encoding/textpb/testprotos/pb2/test.proto",
}

var E_ExtensionsContainer_OptExtBool = &proto.ExtensionDesc{
	ExtendedType:  (*Extensions)(nil),
	ExtensionType: (*bool)(nil),
	Field:         51,
	Name:          "pb2.ExtensionsContainer.opt_ext_bool",
	Tag:           "varint,51,opt,name=opt_ext_bool",
	Filename:      "encoding/textpb/testprotos/pb2/test.proto",
}

var E_ExtensionsContainer_OptExtString = &proto.ExtensionDesc{
	ExtendedType:  (*Extensions)(nil),
	ExtensionType: (*string)(nil),
	Field:         52,
	Name:          "pb2.ExtensionsContainer.opt_ext_string",
	Tag:           "bytes,52,opt,name=opt_ext_string",
	Filename:      "encoding/textpb/testprotos/pb2/test.proto",
}

var E_ExtensionsContainer_OptExtEnum = &proto.ExtensionDesc{
	ExtendedType:  (*Extensions)(nil),
	ExtensionType: (*Enum)(nil),
	Field:         53,
	Name:          "pb2.ExtensionsContainer.opt_ext_enum",
	Tag:           "varint,53,opt,name=opt_ext_enum,enum=pb2.Enum",
	Filename:      "encoding/textpb/testprotos/pb2/test.proto",
}

var E_ExtensionsContainer_OptExtNested = &proto.ExtensionDesc{
	ExtendedType:  (*Extensions)(nil),
	ExtensionType: (*Nested)(nil),
	Field:         54,
	Name:          "pb2.ExtensionsContainer.opt_ext_nested",
	Tag:           "bytes,54,opt,name=opt_ext_nested",
	Filename:      "encoding/textpb/testprotos/pb2/test.proto",
}

var E_ExtensionsContainer_RptExtString = &proto.ExtensionDesc{
	ExtendedType:  (*Extensions)(nil),
	ExtensionType: ([]string)(nil),
	Field:         61,
	Name:          "pb2.ExtensionsContainer.rpt_ext_string",
	Tag:           "bytes,61,rep,name=rpt_ext_string",
	Filename:      "encoding/textpb/testprotos/pb2/test.proto",
}

var E_ExtensionsContainer_RptExtEnum = &proto.ExtensionDesc{
	ExtendedType:  (*Extensions)(nil),
	ExtensionType: ([]Enum)(nil),
	Field:         62,
	Name:          "pb2.ExtensionsContainer.rpt_ext_enum",
	Tag:           "varint,62,rep,name=rpt_ext_enum,enum=pb2.Enum",
	Filename:      "encoding/textpb/testprotos/pb2/test.proto",
}

var E_ExtensionsContainer_RptExtNested = &proto.ExtensionDesc{
	ExtendedType:  (*Extensions)(nil),
	ExtensionType: ([]*Nested)(nil),
	Field:         63,
	Name:          "pb2.ExtensionsContainer.rpt_ext_nested",
	Tag:           "bytes,63,rep,name=rpt_ext_nested",
	Filename:      "encoding/textpb/testprotos/pb2/test.proto",
}

var E_MessageSetExtension_MessageSetExtension = &proto.ExtensionDesc{
	ExtendedType:  (*MessageSet)(nil),
	ExtensionType: (*MessageSetExtension)(nil),
	Field:         10,
	Name:          "pb2.MessageSetExtension",
	Tag:           "bytes,10,opt,name=message_set_extension",
	Filename:      "encoding/textpb/testprotos/pb2/test.proto",
}

var E_MessageSetExtension_NotMessageSetExtension = &proto.ExtensionDesc{
	ExtendedType:  (*MessageSet)(nil),
	ExtensionType: (*MessageSetExtension)(nil),
	Field:         20,
	Name:          "pb2.MessageSetExtension.not_message_set_extension",
	Tag:           "bytes,20,opt,name=not_message_set_extension",
	Filename:      "encoding/textpb/testprotos/pb2/test.proto",
}

var E_MessageSetExtension_ExtNested = &proto.ExtensionDesc{
	ExtendedType:  (*MessageSet)(nil),
	ExtensionType: (*Nested)(nil),
	Field:         30,
	Name:          "pb2.MessageSetExtension.ext_nested",
	Tag:           "bytes,30,opt,name=ext_nested",
	Filename:      "encoding/textpb/testprotos/pb2/test.proto",
}

func init() {
	proto.RegisterFile("encoding/textpb/testprotos/pb2/test.proto", fileDescriptor_c8d7acc1bcec9a72)
	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")
	proto.RegisterType((*Repeats)(nil), "pb2.Repeats")
	proto.RegisterType((*Enums)(nil), "pb2.Enums")
	proto.RegisterType((*Nests)(nil), "pb2.Nests")
	proto.RegisterType((*Nested)(nil), "pb2.Nested")
	proto.RegisterType((*Requireds)(nil), "pb2.Requireds")
	proto.RegisterType((*PartialRequired)(nil), "pb2.PartialRequired")
	proto.RegisterType((*Oneofs)(nil), "pb2.Oneofs")
	proto.RegisterType((*Maps)(nil), "pb2.Maps")
	proto.RegisterMapType((map[bool]uint32)(nil), "pb2.Maps.BoolToUint32Entry")
	proto.RegisterMapType((map[int32]string)(nil), "pb2.Maps.Int32ToStrEntry")
	proto.RegisterMapType((map[int64]bool)(nil), "pb2.Maps.Sfixed64ToBoolEntry")
	proto.RegisterMapType((map[string]*Nested)(nil), "pb2.Maps.StrToNestedEntry")
	proto.RegisterMapType((map[string]*Oneofs)(nil), "pb2.Maps.StrToOneofsEntry")
	proto.RegisterMapType((map[uint64]Enum)(nil), "pb2.Maps.Uint64ToEnumEntry")
	proto.RegisterType((*NestedWithRequired)(nil), "pb2.NestedWithRequired")
	proto.RegisterType((*IndirectRequired)(nil), "pb2.IndirectRequired")
	proto.RegisterMapType((map[string]*NestedWithRequired)(nil), "pb2.IndirectRequired.StrToNestedEntry")
	proto.RegisterType((*Extensions)(nil), "pb2.Extensions")
	proto.RegisterType((*ExtensionsContainer)(nil), "pb2.ExtensionsContainer")
	proto.RegisterType((*MessageSet)(nil), "pb2.MessageSet")
	proto.RegisterType((*MessageSetExtension)(nil), "pb2.MessageSetExtension")
	proto.RegisterType((*KnownTypes)(nil), "pb2.KnownTypes")
	proto.RegisterType((*Nests_OptGroup)(nil), "pb2.Nests.OptGroup")
	proto.RegisterType((*Nests_RptGroup)(nil), "pb2.Nests.RptGroup")
	proto.RegisterType((*Nests_OptGroup_OptNestedGroup)(nil), "pb2.Nests.OptGroup.OptNestedGroup")
	proto.RegisterExtension(E_OptExtBool)
	proto.RegisterExtension(E_OptExtString)
	proto.RegisterExtension(E_OptExtEnum)
	proto.RegisterExtension(E_OptExtNested)
	proto.RegisterExtension(E_RptExtFixed32)
	proto.RegisterExtension(E_RptExtEnum)
	proto.RegisterExtension(E_RptExtNested)
	proto.RegisterExtension(E_ExtensionsContainer_OptExtBool)
	proto.RegisterExtension(E_ExtensionsContainer_OptExtString)
	proto.RegisterExtension(E_ExtensionsContainer_OptExtEnum)
	proto.RegisterExtension(E_ExtensionsContainer_OptExtNested)
	proto.RegisterExtension(E_ExtensionsContainer_RptExtString)
	proto.RegisterExtension(E_ExtensionsContainer_RptExtEnum)
	proto.RegisterExtension(E_ExtensionsContainer_RptExtNested)
	proto.RegisterExtension(E_MessageSetExtension_MessageSetExtension)
	proto.RegisterExtension(E_MessageSetExtension_NotMessageSetExtension)
	proto.RegisterExtension(E_MessageSetExtension_ExtNested)
}

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)
	}
}

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.ProtoEnum {
			return Enum(n)
		},
	),
	prototype.GoEnum(
		xxx_Test_ProtoFile_EnumDescs[1].Reference(),
		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.ProtoEnum {
			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.ProtoMessage {
			return new(Scalars)
		},
	)},
	{Type: prototype.GoMessage(
		xxx_Test_ProtoFile_MessageDescs[1].Reference(),
		func(protoreflect.MessageType) protoreflect.ProtoMessage {
			return new(Repeats)
		},
	)},
	{Type: prototype.GoMessage(
		xxx_Test_ProtoFile_MessageDescs[2].Reference(),
		func(protoreflect.MessageType) protoreflect.ProtoMessage {
			return new(Enums)
		},
	)},
	{Type: prototype.GoMessage(
		xxx_Test_ProtoFile_MessageDescs[3].Reference(),
		func(protoreflect.MessageType) protoreflect.ProtoMessage {
			return new(Nests)
		},
	)},
	{Type: prototype.GoMessage(
		xxx_Test_ProtoFile_MessageDescs[4].Reference(),
		func(protoreflect.MessageType) protoreflect.ProtoMessage {
			return new(Nested)
		},
	)},
	{Type: prototype.GoMessage(
		xxx_Test_ProtoFile_MessageDescs[5].Reference(),
		func(protoreflect.MessageType) protoreflect.ProtoMessage {
			return new(Requireds)
		},
	)},
	{Type: prototype.GoMessage(
		xxx_Test_ProtoFile_MessageDescs[6].Reference(),
		func(protoreflect.MessageType) protoreflect.ProtoMessage {
			return new(PartialRequired)
		},
	)},
	{Type: prototype.GoMessage(
		xxx_Test_ProtoFile_MessageDescs[7].Reference(),
		func(protoreflect.MessageType) protoreflect.ProtoMessage {
			return new(Oneofs)
		},
	)},
	{Type: prototype.GoMessage(
		xxx_Test_ProtoFile_MessageDescs[8].Reference(),
		func(protoreflect.MessageType) protoreflect.ProtoMessage {
			return new(Maps)
		},
	)},
	{Type: prototype.GoMessage(
		xxx_Test_ProtoFile_MessageDescs[9].Reference(),
		func(protoreflect.MessageType) protoreflect.ProtoMessage {
			return new(NestedWithRequired)
		},
	)},
	{Type: prototype.GoMessage(
		xxx_Test_ProtoFile_MessageDescs[10].Reference(),
		func(protoreflect.MessageType) protoreflect.ProtoMessage {
			return new(IndirectRequired)
		},
	)},
	{Type: prototype.GoMessage(
		xxx_Test_ProtoFile_MessageDescs[11].Reference(),
		func(protoreflect.MessageType) protoreflect.ProtoMessage {
			return new(Extensions)
		},
	)},
	{Type: prototype.GoMessage(
		xxx_Test_ProtoFile_MessageDescs[12].Reference(),
		func(protoreflect.MessageType) protoreflect.ProtoMessage {
			return new(ExtensionsContainer)
		},
	)},
	{Type: prototype.GoMessage(
		xxx_Test_ProtoFile_MessageDescs[13].Reference(),
		func(protoreflect.MessageType) protoreflect.ProtoMessage {
			return new(MessageSet)
		},
	)},
	{Type: prototype.GoMessage(
		xxx_Test_ProtoFile_MessageDescs[14].Reference(),
		func(protoreflect.MessageType) protoreflect.ProtoMessage {
			return new(MessageSetExtension)
		},
	)},
	{Type: prototype.GoMessage(
		xxx_Test_ProtoFile_MessageDescs[15].Reference(),
		func(protoreflect.MessageType) protoreflect.ProtoMessage {
			return new(KnownTypes)
		},
	)},
	{Type: prototype.GoMessage(
		xxx_Test_ProtoFile_MessageDescs[16].Reference(),
		func(protoreflect.MessageType) protoreflect.ProtoMessage {
			return new(Nests_OptGroup)
		},
	)},
	{Type: prototype.GoMessage(
		xxx_Test_ProtoFile_MessageDescs[17].Reference(),
		func(protoreflect.MessageType) protoreflect.ProtoMessage {
			return new(Nests_RptGroup)
		},
	)},
	{Type: prototype.GoMessage(
		xxx_Test_ProtoFile_MessageDescs[18].Reference(),
		func(protoreflect.MessageType) protoreflect.ProtoMessage {
			return 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,
	},
}
