// Copyright 2024 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Code generated by protoc-gen-go. DO NOT EDIT.
// source: internal/testprotos/testeditions/testeditions_opaque/test.opaque.proto

package testeditions_opaque

import (
	enums_opaque "google.golang.org/protobuf/internal/testprotos/enums/enums_opaque"
	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
	_ "google.golang.org/protobuf/types/gofeaturespb"
	reflect "reflect"
)

type ForeignEnum int32

const (
	ForeignEnum_FOREIGN_ZERO ForeignEnum = 0
	ForeignEnum_FOREIGN_FOO  ForeignEnum = 4
	ForeignEnum_FOREIGN_BAR  ForeignEnum = 5
	ForeignEnum_FOREIGN_BAZ  ForeignEnum = 6
)

// Enum value maps for ForeignEnum.
var (
	ForeignEnum_name = map[int32]string{
		0: "FOREIGN_ZERO",
		4: "FOREIGN_FOO",
		5: "FOREIGN_BAR",
		6: "FOREIGN_BAZ",
	}
	ForeignEnum_value = map[string]int32{
		"FOREIGN_ZERO": 0,
		"FOREIGN_FOO":  4,
		"FOREIGN_BAR":  5,
		"FOREIGN_BAZ":  6,
	}
)

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

func (x ForeignEnum) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (ForeignEnum) Descriptor() protoreflect.EnumDescriptor {
	return file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_enumTypes[0].Descriptor()
}

func (ForeignEnum) Type() protoreflect.EnumType {
	return &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_enumTypes[0]
}

func (x ForeignEnum) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

type TestAllTypes_NestedEnum int32

const (
	TestAllTypes_FOO TestAllTypes_NestedEnum = 0
	TestAllTypes_BAR TestAllTypes_NestedEnum = 1
	TestAllTypes_BAZ TestAllTypes_NestedEnum = 2
	TestAllTypes_NEG TestAllTypes_NestedEnum = -1 // Intentionally negative.
)

// Enum value maps for TestAllTypes_NestedEnum.
var (
	TestAllTypes_NestedEnum_name = map[int32]string{
		0:  "FOO",
		1:  "BAR",
		2:  "BAZ",
		-1: "NEG",
	}
	TestAllTypes_NestedEnum_value = map[string]int32{
		"FOO": 0,
		"BAR": 1,
		"BAZ": 2,
		"NEG": -1,
	}
)

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

func (x TestAllTypes_NestedEnum) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (TestAllTypes_NestedEnum) Descriptor() protoreflect.EnumDescriptor {
	return file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_enumTypes[1].Descriptor()
}

func (TestAllTypes_NestedEnum) Type() protoreflect.EnumType {
	return &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_enumTypes[1]
}

func (x TestAllTypes_NestedEnum) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

type TestAllTypes struct {
	state                                protoimpl.MessageState                 `protogen:"opaque.v1"`
	xxx_hidden_SingularInt32             int32                                  `protobuf:"varint,124,opt,name=singular_int32,json=singularInt32"`
	xxx_hidden_SingularInt64             int64                                  `protobuf:"varint,125,opt,name=singular_int64,json=singularInt64"`
	xxx_hidden_SingularUint32            uint32                                 `protobuf:"varint,126,opt,name=singular_uint32,json=singularUint32"`
	xxx_hidden_SingularUint64            uint64                                 `protobuf:"varint,127,opt,name=singular_uint64,json=singularUint64"`
	xxx_hidden_SingularSint32            int32                                  `protobuf:"zigzag32,128,opt,name=singular_sint32,json=singularSint32"`
	xxx_hidden_SingularSint64            int64                                  `protobuf:"zigzag64,129,opt,name=singular_sint64,json=singularSint64"`
	xxx_hidden_SingularFixed32           uint32                                 `protobuf:"fixed32,130,opt,name=singular_fixed32,json=singularFixed32"`
	xxx_hidden_SingularFixed64           uint64                                 `protobuf:"fixed64,131,opt,name=singular_fixed64,json=singularFixed64"`
	xxx_hidden_SingularSfixed32          int32                                  `protobuf:"fixed32,132,opt,name=singular_sfixed32,json=singularSfixed32"`
	xxx_hidden_SingularSfixed64          int64                                  `protobuf:"fixed64,133,opt,name=singular_sfixed64,json=singularSfixed64"`
	xxx_hidden_SingularFloat             float32                                `protobuf:"fixed32,134,opt,name=singular_float,json=singularFloat"`
	xxx_hidden_SingularDouble            float64                                `protobuf:"fixed64,135,opt,name=singular_double,json=singularDouble"`
	xxx_hidden_SingularBool              bool                                   `protobuf:"varint,136,opt,name=singular_bool,json=singularBool"`
	xxx_hidden_SingularString            string                                 `protobuf:"bytes,137,opt,name=singular_string,json=singularString"`
	xxx_hidden_SingularBytes             []byte                                 `protobuf:"bytes,138,opt,name=singular_bytes,json=singularBytes"`
	xxx_hidden_SingularNestedEnum        TestAllTypes_NestedEnum                `protobuf:"varint,142,opt,name=singular_nested_enum,json=singularNestedEnum,enum=opaque.goproto.proto.testeditions.TestAllTypes_NestedEnum"`
	xxx_hidden_SingularForeignEnum       ForeignEnum                            `protobuf:"varint,143,opt,name=singular_foreign_enum,json=singularForeignEnum,enum=opaque.goproto.proto.testeditions.ForeignEnum"`
	xxx_hidden_SingularImportEnum        ImportEnum                             `protobuf:"varint,144,opt,name=singular_import_enum,json=singularImportEnum,enum=opaque.goproto.proto.testeditions.ImportEnum"`
	xxx_hidden_OptionalInt32             int32                                  `protobuf:"varint,1,opt,name=optional_int32,json=optionalInt32"`
	xxx_hidden_OptionalInt64             int64                                  `protobuf:"varint,2,opt,name=optional_int64,json=optionalInt64"`
	xxx_hidden_OptionalUint32            uint32                                 `protobuf:"varint,3,opt,name=optional_uint32,json=optionalUint32"`
	xxx_hidden_OptionalUint64            uint64                                 `protobuf:"varint,4,opt,name=optional_uint64,json=optionalUint64"`
	xxx_hidden_OptionalSint32            int32                                  `protobuf:"zigzag32,5,opt,name=optional_sint32,json=optionalSint32"`
	xxx_hidden_OptionalSint64            int64                                  `protobuf:"zigzag64,6,opt,name=optional_sint64,json=optionalSint64"`
	xxx_hidden_OptionalFixed32           uint32                                 `protobuf:"fixed32,7,opt,name=optional_fixed32,json=optionalFixed32"`
	xxx_hidden_OptionalFixed64           uint64                                 `protobuf:"fixed64,8,opt,name=optional_fixed64,json=optionalFixed64"`
	xxx_hidden_OptionalSfixed32          int32                                  `protobuf:"fixed32,9,opt,name=optional_sfixed32,json=optionalSfixed32"`
	xxx_hidden_OptionalSfixed64          int64                                  `protobuf:"fixed64,10,opt,name=optional_sfixed64,json=optionalSfixed64"`
	xxx_hidden_OptionalFloat             float32                                `protobuf:"fixed32,11,opt,name=optional_float,json=optionalFloat"`
	xxx_hidden_OptionalDouble            float64                                `protobuf:"fixed64,12,opt,name=optional_double,json=optionalDouble"`
	xxx_hidden_OptionalBool              bool                                   `protobuf:"varint,13,opt,name=optional_bool,json=optionalBool"`
	xxx_hidden_OptionalString            *string                                `protobuf:"bytes,14,opt,name=optional_string,json=optionalString"`
	xxx_hidden_OptionalBytes             []byte                                 `protobuf:"bytes,15,opt,name=optional_bytes,json=optionalBytes"`
	xxx_hidden_Optionalgroup             *TestAllTypes_OptionalGroup            `protobuf:"group,16,opt,name=OptionalGroup,json=optionalgroup"`
	xxx_hidden_NotGroupLikeDelimited     *TestAllTypes_OptionalGroup            `protobuf:"group,17,opt,name=OptionalGroup,json=notGroupLikeDelimited"`
	xxx_hidden_OptionalNestedMessage     *TestAllTypes_NestedMessage            `protobuf:"bytes,18,opt,name=optional_nested_message,json=optionalNestedMessage"`
	xxx_hidden_OptionalForeignMessage    *ForeignMessage                        `protobuf:"bytes,19,opt,name=optional_foreign_message,json=optionalForeignMessage"`
	xxx_hidden_OptionalImportMessage     *ImportMessage                         `protobuf:"bytes,20,opt,name=optional_import_message,json=optionalImportMessage"`
	xxx_hidden_OptionalNestedEnum        TestAllTypes_NestedEnum                `protobuf:"varint,21,opt,name=optional_nested_enum,json=optionalNestedEnum,enum=opaque.goproto.proto.testeditions.TestAllTypes_NestedEnum"`
	xxx_hidden_OptionalForeignEnum       ForeignEnum                            `protobuf:"varint,22,opt,name=optional_foreign_enum,json=optionalForeignEnum,enum=opaque.goproto.proto.testeditions.ForeignEnum"`
	xxx_hidden_OptionalImportEnum        ImportEnum                             `protobuf:"varint,23,opt,name=optional_import_enum,json=optionalImportEnum,enum=opaque.goproto.proto.testeditions.ImportEnum"`
	xxx_hidden_OptionalLazyNestedMessage *TestAllTypes_NestedMessage            `protobuf:"bytes,24,opt,name=optional_lazy_nested_message,json=optionalLazyNestedMessage"`
	xxx_hidden_RepeatedInt32             []int32                                `protobuf:"varint,31,rep,packed,name=repeated_int32,json=repeatedInt32"`
	xxx_hidden_RepeatedInt64             []int64                                `protobuf:"varint,32,rep,packed,name=repeated_int64,json=repeatedInt64"`
	xxx_hidden_RepeatedUint32            []uint32                               `protobuf:"varint,33,rep,packed,name=repeated_uint32,json=repeatedUint32"`
	xxx_hidden_RepeatedUint64            []uint64                               `protobuf:"varint,34,rep,packed,name=repeated_uint64,json=repeatedUint64"`
	xxx_hidden_RepeatedSint32            []int32                                `protobuf:"zigzag32,35,rep,packed,name=repeated_sint32,json=repeatedSint32"`
	xxx_hidden_RepeatedSint64            []int64                                `protobuf:"zigzag64,36,rep,packed,name=repeated_sint64,json=repeatedSint64"`
	xxx_hidden_RepeatedFixed32           []uint32                               `protobuf:"fixed32,37,rep,packed,name=repeated_fixed32,json=repeatedFixed32"`
	xxx_hidden_RepeatedFixed64           []uint64                               `protobuf:"fixed64,38,rep,packed,name=repeated_fixed64,json=repeatedFixed64"`
	xxx_hidden_RepeatedSfixed32          []int32                                `protobuf:"fixed32,39,rep,packed,name=repeated_sfixed32,json=repeatedSfixed32"`
	xxx_hidden_RepeatedSfixed64          []int64                                `protobuf:"fixed64,40,rep,packed,name=repeated_sfixed64,json=repeatedSfixed64"`
	xxx_hidden_RepeatedFloat             []float32                              `protobuf:"fixed32,41,rep,packed,name=repeated_float,json=repeatedFloat"`
	xxx_hidden_RepeatedDouble            []float64                              `protobuf:"fixed64,42,rep,packed,name=repeated_double,json=repeatedDouble"`
	xxx_hidden_RepeatedBool              []bool                                 `protobuf:"varint,43,rep,packed,name=repeated_bool,json=repeatedBool"`
	xxx_hidden_RepeatedString            []string                               `protobuf:"bytes,44,rep,name=repeated_string,json=repeatedString"`
	xxx_hidden_RepeatedBytes             [][]byte                               `protobuf:"bytes,45,rep,name=repeated_bytes,json=repeatedBytes"`
	xxx_hidden_Repeatedgroup             *[]*TestAllTypes_RepeatedGroup         `protobuf:"group,46,rep,name=RepeatedGroup,json=repeatedgroup"`
	xxx_hidden_RepeatedNestedMessage     *[]*TestAllTypes_NestedMessage         `protobuf:"bytes,48,rep,name=repeated_nested_message,json=repeatedNestedMessage"`
	xxx_hidden_RepeatedForeignMessage    *[]*ForeignMessage                     `protobuf:"bytes,49,rep,name=repeated_foreign_message,json=repeatedForeignMessage"`
	xxx_hidden_RepeatedImportmessage     *[]*ImportMessage                      `protobuf:"bytes,50,rep,name=repeated_importmessage,json=repeatedImportmessage"`
	xxx_hidden_RepeatedNestedEnum        []TestAllTypes_NestedEnum              `protobuf:"varint,51,rep,packed,name=repeated_nested_enum,json=repeatedNestedEnum,enum=opaque.goproto.proto.testeditions.TestAllTypes_NestedEnum"`
	xxx_hidden_RepeatedForeignEnum       []ForeignEnum                          `protobuf:"varint,52,rep,packed,name=repeated_foreign_enum,json=repeatedForeignEnum,enum=opaque.goproto.proto.testeditions.ForeignEnum"`
	xxx_hidden_RepeatedImportenum        []ImportEnum                           `protobuf:"varint,53,rep,packed,name=repeated_importenum,json=repeatedImportenum,enum=opaque.goproto.proto.testeditions.ImportEnum"`
	xxx_hidden_MapInt32Int32             map[int32]int32                        `protobuf:"bytes,56,rep,name=map_int32_int32,json=mapInt32Int32" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"`
	xxx_hidden_MapInt64Int64             map[int64]int64                        `protobuf:"bytes,57,rep,name=map_int64_int64,json=mapInt64Int64" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"`
	xxx_hidden_MapUint32Uint32           map[uint32]uint32                      `protobuf:"bytes,58,rep,name=map_uint32_uint32,json=mapUint32Uint32" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"`
	xxx_hidden_MapUint64Uint64           map[uint64]uint64                      `protobuf:"bytes,59,rep,name=map_uint64_uint64,json=mapUint64Uint64" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"`
	xxx_hidden_MapSint32Sint32           map[int32]int32                        `protobuf:"bytes,60,rep,name=map_sint32_sint32,json=mapSint32Sint32" protobuf_key:"zigzag32,1,opt,name=key" protobuf_val:"zigzag32,2,opt,name=value"`
	xxx_hidden_MapSint64Sint64           map[int64]int64                        `protobuf:"bytes,61,rep,name=map_sint64_sint64,json=mapSint64Sint64" protobuf_key:"zigzag64,1,opt,name=key" protobuf_val:"zigzag64,2,opt,name=value"`
	xxx_hidden_MapFixed32Fixed32         map[uint32]uint32                      `protobuf:"bytes,62,rep,name=map_fixed32_fixed32,json=mapFixed32Fixed32" protobuf_key:"fixed32,1,opt,name=key" protobuf_val:"fixed32,2,opt,name=value"`
	xxx_hidden_MapFixed64Fixed64         map[uint64]uint64                      `protobuf:"bytes,63,rep,name=map_fixed64_fixed64,json=mapFixed64Fixed64" protobuf_key:"fixed64,1,opt,name=key" protobuf_val:"fixed64,2,opt,name=value"`
	xxx_hidden_MapSfixed32Sfixed32       map[int32]int32                        `protobuf:"bytes,64,rep,name=map_sfixed32_sfixed32,json=mapSfixed32Sfixed32" protobuf_key:"fixed32,1,opt,name=key" protobuf_val:"fixed32,2,opt,name=value"`
	xxx_hidden_MapSfixed64Sfixed64       map[int64]int64                        `protobuf:"bytes,65,rep,name=map_sfixed64_sfixed64,json=mapSfixed64Sfixed64" protobuf_key:"fixed64,1,opt,name=key" protobuf_val:"fixed64,2,opt,name=value"`
	xxx_hidden_MapInt32Float             map[int32]float32                      `protobuf:"bytes,66,rep,name=map_int32_float,json=mapInt32Float" protobuf_key:"varint,1,opt,name=key" protobuf_val:"fixed32,2,opt,name=value"`
	xxx_hidden_MapInt32Double            map[int32]float64                      `protobuf:"bytes,67,rep,name=map_int32_double,json=mapInt32Double" protobuf_key:"varint,1,opt,name=key" protobuf_val:"fixed64,2,opt,name=value"`
	xxx_hidden_MapBoolBool               map[bool]bool                          `protobuf:"bytes,68,rep,name=map_bool_bool,json=mapBoolBool" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"`
	xxx_hidden_MapStringString           map[string]string                      `protobuf:"bytes,69,rep,name=map_string_string,json=mapStringString" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
	xxx_hidden_MapStringBytes            map[string][]byte                      `protobuf:"bytes,70,rep,name=map_string_bytes,json=mapStringBytes" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
	xxx_hidden_MapStringNestedMessage    map[string]*TestAllTypes_NestedMessage `protobuf:"bytes,71,rep,name=map_string_nested_message,json=mapStringNestedMessage" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
	xxx_hidden_MapStringNestedEnum       map[string]TestAllTypes_NestedEnum     `protobuf:"bytes,73,rep,name=map_string_nested_enum,json=mapStringNestedEnum" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"varint,2,opt,name=value,enum=opaque.goproto.proto.testeditions.TestAllTypes_NestedEnum"`
	xxx_hidden_DefaultInt32              int32                                  `protobuf:"varint,81,opt,name=default_int32,json=defaultInt32,def=81"`
	xxx_hidden_DefaultInt64              int64                                  `protobuf:"varint,82,opt,name=default_int64,json=defaultInt64,def=82"`
	xxx_hidden_DefaultUint32             uint32                                 `protobuf:"varint,83,opt,name=default_uint32,json=defaultUint32,def=83"`
	xxx_hidden_DefaultUint64             uint64                                 `protobuf:"varint,84,opt,name=default_uint64,json=defaultUint64,def=84"`
	xxx_hidden_DefaultSint32             int32                                  `protobuf:"zigzag32,85,opt,name=default_sint32,json=defaultSint32,def=-85"`
	xxx_hidden_DefaultSint64             int64                                  `protobuf:"zigzag64,86,opt,name=default_sint64,json=defaultSint64,def=86"`
	xxx_hidden_DefaultFixed32            uint32                                 `protobuf:"fixed32,87,opt,name=default_fixed32,json=defaultFixed32,def=87"`
	xxx_hidden_DefaultFixed64            uint64                                 `protobuf:"fixed64,88,opt,name=default_fixed64,json=defaultFixed64,def=88"`
	xxx_hidden_DefaultSfixed32           int32                                  `protobuf:"fixed32,89,opt,name=default_sfixed32,json=defaultSfixed32,def=89"`
	xxx_hidden_DefaultSfixed64           int64                                  `protobuf:"fixed64,80,opt,name=default_sfixed64,json=defaultSfixed64,def=-90"`
	xxx_hidden_DefaultFloat              float32                                `protobuf:"fixed32,91,opt,name=default_float,json=defaultFloat,def=91.5"`
	xxx_hidden_DefaultDouble             float64                                `protobuf:"fixed64,92,opt,name=default_double,json=defaultDouble,def=92000"`
	xxx_hidden_DefaultBool               bool                                   `protobuf:"varint,93,opt,name=default_bool,json=defaultBool,def=1"`
	xxx_hidden_DefaultString             *string                                `protobuf:"bytes,94,opt,name=default_string,json=defaultString,def=hello"`
	xxx_hidden_DefaultBytes              []byte                                 `protobuf:"bytes,95,opt,name=default_bytes,json=defaultBytes,def=world"`
	xxx_hidden_DefaultNestedEnum         TestAllTypes_NestedEnum                `protobuf:"varint,96,opt,name=default_nested_enum,json=defaultNestedEnum,enum=opaque.goproto.proto.testeditions.TestAllTypes_NestedEnum,def=1"`
	xxx_hidden_DefaultForeignEnum        ForeignEnum                            `protobuf:"varint,97,opt,name=default_foreign_enum,json=defaultForeignEnum,enum=opaque.goproto.proto.testeditions.ForeignEnum,def=5"`
	xxx_hidden_OneofField                isTestAllTypes_OneofField              `protobuf_oneof:"oneof_field"`
	xxx_hidden_OneofOptional             isTestAllTypes_OneofOptional           `protobuf_oneof:"oneof_optional"`
	// Deprecated: Do not use. This will be deleted in the near future.
	XXX_lazyUnmarshalInfo  protoimpl.LazyUnmarshalInfo
	XXX_raceDetectHookData protoimpl.RaceDetectHookData
	XXX_presence           [4]uint32
	unknownFields          protoimpl.UnknownFields
	sizeCache              protoimpl.SizeCache
}

// Default values for TestAllTypes fields.
const (
	Default_TestAllTypes_DefaultInt32       = int32(81)
	Default_TestAllTypes_DefaultInt64       = int64(82)
	Default_TestAllTypes_DefaultUint32      = uint32(83)
	Default_TestAllTypes_DefaultUint64      = uint64(84)
	Default_TestAllTypes_DefaultSint32      = int32(-85)
	Default_TestAllTypes_DefaultSint64      = int64(86)
	Default_TestAllTypes_DefaultFixed32     = uint32(87)
	Default_TestAllTypes_DefaultFixed64     = uint64(88)
	Default_TestAllTypes_DefaultSfixed32    = int32(89)
	Default_TestAllTypes_DefaultSfixed64    = int64(-90)
	Default_TestAllTypes_DefaultFloat       = float32(91.5)
	Default_TestAllTypes_DefaultDouble      = float64(92000)
	Default_TestAllTypes_DefaultBool        = bool(true)
	Default_TestAllTypes_DefaultString      = string("hello")
	Default_TestAllTypes_DefaultNestedEnum  = TestAllTypes_BAR
	Default_TestAllTypes_DefaultForeignEnum = ForeignEnum_FOREIGN_BAR
)

// Default values for TestAllTypes fields.
var (
	Default_TestAllTypes_DefaultBytes = []byte("world")
)

func (x *TestAllTypes) Reset() {
	*x = TestAllTypes{}
	mi := &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_msgTypes[0]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *TestAllTypes) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*TestAllTypes) ProtoMessage() {}

func (x *TestAllTypes) ProtoReflect() protoreflect.Message {
	mi := &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_msgTypes[0]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

func (x *TestAllTypes) GetSingularInt32() int32 {
	if x != nil {
		return x.xxx_hidden_SingularInt32
	}
	return 0
}

func (x *TestAllTypes) GetSingularInt64() int64 {
	if x != nil {
		return x.xxx_hidden_SingularInt64
	}
	return 0
}

func (x *TestAllTypes) GetSingularUint32() uint32 {
	if x != nil {
		return x.xxx_hidden_SingularUint32
	}
	return 0
}

func (x *TestAllTypes) GetSingularUint64() uint64 {
	if x != nil {
		return x.xxx_hidden_SingularUint64
	}
	return 0
}

func (x *TestAllTypes) GetSingularSint32() int32 {
	if x != nil {
		return x.xxx_hidden_SingularSint32
	}
	return 0
}

func (x *TestAllTypes) GetSingularSint64() int64 {
	if x != nil {
		return x.xxx_hidden_SingularSint64
	}
	return 0
}

func (x *TestAllTypes) GetSingularFixed32() uint32 {
	if x != nil {
		return x.xxx_hidden_SingularFixed32
	}
	return 0
}

func (x *TestAllTypes) GetSingularFixed64() uint64 {
	if x != nil {
		return x.xxx_hidden_SingularFixed64
	}
	return 0
}

func (x *TestAllTypes) GetSingularSfixed32() int32 {
	if x != nil {
		return x.xxx_hidden_SingularSfixed32
	}
	return 0
}

func (x *TestAllTypes) GetSingularSfixed64() int64 {
	if x != nil {
		return x.xxx_hidden_SingularSfixed64
	}
	return 0
}

func (x *TestAllTypes) GetSingularFloat() float32 {
	if x != nil {
		return x.xxx_hidden_SingularFloat
	}
	return 0
}

func (x *TestAllTypes) GetSingularDouble() float64 {
	if x != nil {
		return x.xxx_hidden_SingularDouble
	}
	return 0
}

func (x *TestAllTypes) GetSingularBool() bool {
	if x != nil {
		return x.xxx_hidden_SingularBool
	}
	return false
}

func (x *TestAllTypes) GetSingularString() string {
	if x != nil {
		return x.xxx_hidden_SingularString
	}
	return ""
}

func (x *TestAllTypes) GetSingularBytes() []byte {
	if x != nil {
		return x.xxx_hidden_SingularBytes
	}
	return nil
}

func (x *TestAllTypes) GetSingularNestedEnum() TestAllTypes_NestedEnum {
	if x != nil {
		return x.xxx_hidden_SingularNestedEnum
	}
	return TestAllTypes_FOO
}

func (x *TestAllTypes) GetSingularForeignEnum() ForeignEnum {
	if x != nil {
		return x.xxx_hidden_SingularForeignEnum
	}
	return ForeignEnum_FOREIGN_ZERO
}

func (x *TestAllTypes) GetSingularImportEnum() ImportEnum {
	if x != nil {
		return x.xxx_hidden_SingularImportEnum
	}
	return ImportEnum_IMPORT_ZERO
}

func (x *TestAllTypes) GetOptionalInt32() int32 {
	if x != nil {
		return x.xxx_hidden_OptionalInt32
	}
	return 0
}

func (x *TestAllTypes) GetOptionalInt64() int64 {
	if x != nil {
		return x.xxx_hidden_OptionalInt64
	}
	return 0
}

func (x *TestAllTypes) GetOptionalUint32() uint32 {
	if x != nil {
		return x.xxx_hidden_OptionalUint32
	}
	return 0
}

func (x *TestAllTypes) GetOptionalUint64() uint64 {
	if x != nil {
		return x.xxx_hidden_OptionalUint64
	}
	return 0
}

func (x *TestAllTypes) GetOptionalSint32() int32 {
	if x != nil {
		return x.xxx_hidden_OptionalSint32
	}
	return 0
}

func (x *TestAllTypes) GetOptionalSint64() int64 {
	if x != nil {
		return x.xxx_hidden_OptionalSint64
	}
	return 0
}

func (x *TestAllTypes) GetOptionalFixed32() uint32 {
	if x != nil {
		return x.xxx_hidden_OptionalFixed32
	}
	return 0
}

func (x *TestAllTypes) GetOptionalFixed64() uint64 {
	if x != nil {
		return x.xxx_hidden_OptionalFixed64
	}
	return 0
}

func (x *TestAllTypes) GetOptionalSfixed32() int32 {
	if x != nil {
		return x.xxx_hidden_OptionalSfixed32
	}
	return 0
}

func (x *TestAllTypes) GetOptionalSfixed64() int64 {
	if x != nil {
		return x.xxx_hidden_OptionalSfixed64
	}
	return 0
}

func (x *TestAllTypes) GetOptionalFloat() float32 {
	if x != nil {
		return x.xxx_hidden_OptionalFloat
	}
	return 0
}

func (x *TestAllTypes) GetOptionalDouble() float64 {
	if x != nil {
		return x.xxx_hidden_OptionalDouble
	}
	return 0
}

func (x *TestAllTypes) GetOptionalBool() bool {
	if x != nil {
		return x.xxx_hidden_OptionalBool
	}
	return false
}

func (x *TestAllTypes) GetOptionalString() string {
	if x != nil {
		if x.xxx_hidden_OptionalString != nil {
			return *x.xxx_hidden_OptionalString
		}
		return ""
	}
	return ""
}

func (x *TestAllTypes) GetOptionalBytes() []byte {
	if x != nil {
		return x.xxx_hidden_OptionalBytes
	}
	return nil
}

func (x *TestAllTypes) GetOptionalgroup() *TestAllTypes_OptionalGroup {
	if x != nil {
		return x.xxx_hidden_Optionalgroup
	}
	return nil
}

func (x *TestAllTypes) GetNotGroupLikeDelimited() *TestAllTypes_OptionalGroup {
	if x != nil {
		return x.xxx_hidden_NotGroupLikeDelimited
	}
	return nil
}

func (x *TestAllTypes) GetOptionalNestedMessage() *TestAllTypes_NestedMessage {
	if x != nil {
		return x.xxx_hidden_OptionalNestedMessage
	}
	return nil
}

func (x *TestAllTypes) GetOptionalForeignMessage() *ForeignMessage {
	if x != nil {
		return x.xxx_hidden_OptionalForeignMessage
	}
	return nil
}

func (x *TestAllTypes) GetOptionalImportMessage() *ImportMessage {
	if x != nil {
		return x.xxx_hidden_OptionalImportMessage
	}
	return nil
}

func (x *TestAllTypes) GetOptionalNestedEnum() TestAllTypes_NestedEnum {
	if x != nil {
		if protoimpl.X.Present(&(x.XXX_presence[1]), 38) {
			return x.xxx_hidden_OptionalNestedEnum
		}
	}
	return TestAllTypes_FOO
}

func (x *TestAllTypes) GetOptionalForeignEnum() ForeignEnum {
	if x != nil {
		if protoimpl.X.Present(&(x.XXX_presence[1]), 39) {
			return x.xxx_hidden_OptionalForeignEnum
		}
	}
	return ForeignEnum_FOREIGN_ZERO
}

func (x *TestAllTypes) GetOptionalImportEnum() ImportEnum {
	if x != nil {
		if protoimpl.X.Present(&(x.XXX_presence[1]), 40) {
			return x.xxx_hidden_OptionalImportEnum
		}
	}
	return ImportEnum_IMPORT_ZERO
}

func (x *TestAllTypes) GetOptionalLazyNestedMessage() *TestAllTypes_NestedMessage {
	if x != nil {
		if protoimpl.X.Present(&(x.XXX_presence[1]), 41) {
			if protoimpl.X.AtomicCheckPointerIsNil(&x.xxx_hidden_OptionalLazyNestedMessage) {
				protoimpl.X.UnmarshalField(x, 24)
			}
			var rv *TestAllTypes_NestedMessage
			protoimpl.X.AtomicLoadPointer(protoimpl.Pointer(&x.xxx_hidden_OptionalLazyNestedMessage), protoimpl.Pointer(&rv))
			return rv
		}
	}
	return nil
}

func (x *TestAllTypes) GetRepeatedInt32() []int32 {
	if x != nil {
		return x.xxx_hidden_RepeatedInt32
	}
	return nil
}

func (x *TestAllTypes) GetRepeatedInt64() []int64 {
	if x != nil {
		return x.xxx_hidden_RepeatedInt64
	}
	return nil
}

func (x *TestAllTypes) GetRepeatedUint32() []uint32 {
	if x != nil {
		return x.xxx_hidden_RepeatedUint32
	}
	return nil
}

func (x *TestAllTypes) GetRepeatedUint64() []uint64 {
	if x != nil {
		return x.xxx_hidden_RepeatedUint64
	}
	return nil
}

func (x *TestAllTypes) GetRepeatedSint32() []int32 {
	if x != nil {
		return x.xxx_hidden_RepeatedSint32
	}
	return nil
}

func (x *TestAllTypes) GetRepeatedSint64() []int64 {
	if x != nil {
		return x.xxx_hidden_RepeatedSint64
	}
	return nil
}

func (x *TestAllTypes) GetRepeatedFixed32() []uint32 {
	if x != nil {
		return x.xxx_hidden_RepeatedFixed32
	}
	return nil
}

func (x *TestAllTypes) GetRepeatedFixed64() []uint64 {
	if x != nil {
		return x.xxx_hidden_RepeatedFixed64
	}
	return nil
}

func (x *TestAllTypes) GetRepeatedSfixed32() []int32 {
	if x != nil {
		return x.xxx_hidden_RepeatedSfixed32
	}
	return nil
}

func (x *TestAllTypes) GetRepeatedSfixed64() []int64 {
	if x != nil {
		return x.xxx_hidden_RepeatedSfixed64
	}
	return nil
}

func (x *TestAllTypes) GetRepeatedFloat() []float32 {
	if x != nil {
		return x.xxx_hidden_RepeatedFloat
	}
	return nil
}

func (x *TestAllTypes) GetRepeatedDouble() []float64 {
	if x != nil {
		return x.xxx_hidden_RepeatedDouble
	}
	return nil
}

func (x *TestAllTypes) GetRepeatedBool() []bool {
	if x != nil {
		return x.xxx_hidden_RepeatedBool
	}
	return nil
}

func (x *TestAllTypes) GetRepeatedString() []string {
	if x != nil {
		return x.xxx_hidden_RepeatedString
	}
	return nil
}

func (x *TestAllTypes) GetRepeatedBytes() [][]byte {
	if x != nil {
		return x.xxx_hidden_RepeatedBytes
	}
	return nil
}

func (x *TestAllTypes) GetRepeatedgroup() []*TestAllTypes_RepeatedGroup {
	if x != nil {
		if x.xxx_hidden_Repeatedgroup != nil {
			return *x.xxx_hidden_Repeatedgroup
		}
	}
	return nil
}

func (x *TestAllTypes) GetRepeatedNestedMessage() []*TestAllTypes_NestedMessage {
	if x != nil {
		if x.xxx_hidden_RepeatedNestedMessage != nil {
			return *x.xxx_hidden_RepeatedNestedMessage
		}
	}
	return nil
}

func (x *TestAllTypes) GetRepeatedForeignMessage() []*ForeignMessage {
	if x != nil {
		if x.xxx_hidden_RepeatedForeignMessage != nil {
			return *x.xxx_hidden_RepeatedForeignMessage
		}
	}
	return nil
}

func (x *TestAllTypes) GetRepeatedImportmessage() []*ImportMessage {
	if x != nil {
		if x.xxx_hidden_RepeatedImportmessage != nil {
			return *x.xxx_hidden_RepeatedImportmessage
		}
	}
	return nil
}

func (x *TestAllTypes) GetRepeatedNestedEnum() []TestAllTypes_NestedEnum {
	if x != nil {
		return x.xxx_hidden_RepeatedNestedEnum
	}
	return nil
}

func (x *TestAllTypes) GetRepeatedForeignEnum() []ForeignEnum {
	if x != nil {
		return x.xxx_hidden_RepeatedForeignEnum
	}
	return nil
}

func (x *TestAllTypes) GetRepeatedImportenum() []ImportEnum {
	if x != nil {
		return x.xxx_hidden_RepeatedImportenum
	}
	return nil
}

func (x *TestAllTypes) GetMapInt32Int32() map[int32]int32 {
	if x != nil {
		return x.xxx_hidden_MapInt32Int32
	}
	return nil
}

func (x *TestAllTypes) GetMapInt64Int64() map[int64]int64 {
	if x != nil {
		return x.xxx_hidden_MapInt64Int64
	}
	return nil
}

func (x *TestAllTypes) GetMapUint32Uint32() map[uint32]uint32 {
	if x != nil {
		return x.xxx_hidden_MapUint32Uint32
	}
	return nil
}

func (x *TestAllTypes) GetMapUint64Uint64() map[uint64]uint64 {
	if x != nil {
		return x.xxx_hidden_MapUint64Uint64
	}
	return nil
}

func (x *TestAllTypes) GetMapSint32Sint32() map[int32]int32 {
	if x != nil {
		return x.xxx_hidden_MapSint32Sint32
	}
	return nil
}

func (x *TestAllTypes) GetMapSint64Sint64() map[int64]int64 {
	if x != nil {
		return x.xxx_hidden_MapSint64Sint64
	}
	return nil
}

func (x *TestAllTypes) GetMapFixed32Fixed32() map[uint32]uint32 {
	if x != nil {
		return x.xxx_hidden_MapFixed32Fixed32
	}
	return nil
}

func (x *TestAllTypes) GetMapFixed64Fixed64() map[uint64]uint64 {
	if x != nil {
		return x.xxx_hidden_MapFixed64Fixed64
	}
	return nil
}

func (x *TestAllTypes) GetMapSfixed32Sfixed32() map[int32]int32 {
	if x != nil {
		return x.xxx_hidden_MapSfixed32Sfixed32
	}
	return nil
}

func (x *TestAllTypes) GetMapSfixed64Sfixed64() map[int64]int64 {
	if x != nil {
		return x.xxx_hidden_MapSfixed64Sfixed64
	}
	return nil
}

func (x *TestAllTypes) GetMapInt32Float() map[int32]float32 {
	if x != nil {
		return x.xxx_hidden_MapInt32Float
	}
	return nil
}

func (x *TestAllTypes) GetMapInt32Double() map[int32]float64 {
	if x != nil {
		return x.xxx_hidden_MapInt32Double
	}
	return nil
}

func (x *TestAllTypes) GetMapBoolBool() map[bool]bool {
	if x != nil {
		return x.xxx_hidden_MapBoolBool
	}
	return nil
}

func (x *TestAllTypes) GetMapStringString() map[string]string {
	if x != nil {
		return x.xxx_hidden_MapStringString
	}
	return nil
}

func (x *TestAllTypes) GetMapStringBytes() map[string][]byte {
	if x != nil {
		return x.xxx_hidden_MapStringBytes
	}
	return nil
}

func (x *TestAllTypes) GetMapStringNestedMessage() map[string]*TestAllTypes_NestedMessage {
	if x != nil {
		return x.xxx_hidden_MapStringNestedMessage
	}
	return nil
}

func (x *TestAllTypes) GetMapStringNestedEnum() map[string]TestAllTypes_NestedEnum {
	if x != nil {
		return x.xxx_hidden_MapStringNestedEnum
	}
	return nil
}

func (x *TestAllTypes) GetDefaultInt32() int32 {
	if x != nil {
		if protoimpl.X.Present(&(x.XXX_presence[2]), 81) {
			return x.xxx_hidden_DefaultInt32
		}
	}
	return Default_TestAllTypes_DefaultInt32
}

func (x *TestAllTypes) GetDefaultInt64() int64 {
	if x != nil {
		if protoimpl.X.Present(&(x.XXX_presence[2]), 82) {
			return x.xxx_hidden_DefaultInt64
		}
	}
	return Default_TestAllTypes_DefaultInt64
}

func (x *TestAllTypes) GetDefaultUint32() uint32 {
	if x != nil {
		if protoimpl.X.Present(&(x.XXX_presence[2]), 83) {
			return x.xxx_hidden_DefaultUint32
		}
	}
	return Default_TestAllTypes_DefaultUint32
}

func (x *TestAllTypes) GetDefaultUint64() uint64 {
	if x != nil {
		if protoimpl.X.Present(&(x.XXX_presence[2]), 84) {
			return x.xxx_hidden_DefaultUint64
		}
	}
	return Default_TestAllTypes_DefaultUint64
}

func (x *TestAllTypes) GetDefaultSint32() int32 {
	if x != nil {
		if protoimpl.X.Present(&(x.XXX_presence[2]), 85) {
			return x.xxx_hidden_DefaultSint32
		}
	}
	return Default_TestAllTypes_DefaultSint32
}

func (x *TestAllTypes) GetDefaultSint64() int64 {
	if x != nil {
		if protoimpl.X.Present(&(x.XXX_presence[2]), 86) {
			return x.xxx_hidden_DefaultSint64
		}
	}
	return Default_TestAllTypes_DefaultSint64
}

func (x *TestAllTypes) GetDefaultFixed32() uint32 {
	if x != nil {
		if protoimpl.X.Present(&(x.XXX_presence[2]), 87) {
			return x.xxx_hidden_DefaultFixed32
		}
	}
	return Default_TestAllTypes_DefaultFixed32
}

func (x *TestAllTypes) GetDefaultFixed64() uint64 {
	if x != nil {
		if protoimpl.X.Present(&(x.XXX_presence[2]), 88) {
			return x.xxx_hidden_DefaultFixed64
		}
	}
	return Default_TestAllTypes_DefaultFixed64
}

func (x *TestAllTypes) GetDefaultSfixed32() int32 {
	if x != nil {
		if protoimpl.X.Present(&(x.XXX_presence[2]), 89) {
			return x.xxx_hidden_DefaultSfixed32
		}
	}
	return Default_TestAllTypes_DefaultSfixed32
}

func (x *TestAllTypes) GetDefaultSfixed64() int64 {
	if x != nil {
		if protoimpl.X.Present(&(x.XXX_presence[2]), 90) {
			return x.xxx_hidden_DefaultSfixed64
		}
	}
	return Default_TestAllTypes_DefaultSfixed64
}

func (x *TestAllTypes) GetDefaultFloat() float32 {
	if x != nil {
		if protoimpl.X.Present(&(x.XXX_presence[2]), 91) {
			return x.xxx_hidden_DefaultFloat
		}
	}
	return Default_TestAllTypes_DefaultFloat
}

func (x *TestAllTypes) GetDefaultDouble() float64 {
	if x != nil {
		if protoimpl.X.Present(&(x.XXX_presence[2]), 92) {
			return x.xxx_hidden_DefaultDouble
		}
	}
	return Default_TestAllTypes_DefaultDouble
}

func (x *TestAllTypes) GetDefaultBool() bool {
	if x != nil {
		if protoimpl.X.Present(&(x.XXX_presence[2]), 93) {
			return x.xxx_hidden_DefaultBool
		}
	}
	return Default_TestAllTypes_DefaultBool
}

func (x *TestAllTypes) GetDefaultString() string {
	if x != nil {
		if protoimpl.X.Present(&(x.XXX_presence[2]), 94) {
			if x.xxx_hidden_DefaultString != nil {
				return *x.xxx_hidden_DefaultString
			}
			return Default_TestAllTypes_DefaultString
		}
	}
	return Default_TestAllTypes_DefaultString
}

func (x *TestAllTypes) GetDefaultBytes() []byte {
	if x != nil {
		if protoimpl.X.Present(&(x.XXX_presence[2]), 95) {
			return x.xxx_hidden_DefaultBytes
		}
	}
	return append([]byte(nil), Default_TestAllTypes_DefaultBytes...)
}

func (x *TestAllTypes) GetDefaultNestedEnum() TestAllTypes_NestedEnum {
	if x != nil {
		if protoimpl.X.Present(&(x.XXX_presence[3]), 96) {
			return x.xxx_hidden_DefaultNestedEnum
		}
	}
	return Default_TestAllTypes_DefaultNestedEnum
}

func (x *TestAllTypes) GetDefaultForeignEnum() ForeignEnum {
	if x != nil {
		if protoimpl.X.Present(&(x.XXX_presence[3]), 97) {
			return x.xxx_hidden_DefaultForeignEnum
		}
	}
	return Default_TestAllTypes_DefaultForeignEnum
}

func (x *TestAllTypes) GetOneofUint32() uint32 {
	if x != nil {
		if x, ok := x.xxx_hidden_OneofField.(*testAllTypes_OneofUint32); ok {
			return x.OneofUint32
		}
	}
	return 0
}

func (x *TestAllTypes) GetOneofNestedMessage() *TestAllTypes_NestedMessage {
	if x != nil {
		if x, ok := x.xxx_hidden_OneofField.(*testAllTypes_OneofNestedMessage); ok {
			return x.OneofNestedMessage
		}
	}
	return nil
}

func (x *TestAllTypes) GetOneofString() string {
	if x != nil {
		if x, ok := x.xxx_hidden_OneofField.(*testAllTypes_OneofString); ok {
			return x.OneofString
		}
	}
	return ""
}

func (x *TestAllTypes) GetOneofBytes() []byte {
	if x != nil {
		if x, ok := x.xxx_hidden_OneofField.(*testAllTypes_OneofBytes); ok {
			return x.OneofBytes
		}
	}
	return nil
}

func (x *TestAllTypes) GetOneofBool() bool {
	if x != nil {
		if x, ok := x.xxx_hidden_OneofField.(*testAllTypes_OneofBool); ok {
			return x.OneofBool
		}
	}
	return false
}

func (x *TestAllTypes) GetOneofUint64() uint64 {
	if x != nil {
		if x, ok := x.xxx_hidden_OneofField.(*testAllTypes_OneofUint64); ok {
			return x.OneofUint64
		}
	}
	return 0
}

func (x *TestAllTypes) GetOneofFloat() float32 {
	if x != nil {
		if x, ok := x.xxx_hidden_OneofField.(*testAllTypes_OneofFloat); ok {
			return x.OneofFloat
		}
	}
	return 0
}

func (x *TestAllTypes) GetOneofDouble() float64 {
	if x != nil {
		if x, ok := x.xxx_hidden_OneofField.(*testAllTypes_OneofDouble); ok {
			return x.OneofDouble
		}
	}
	return 0
}

func (x *TestAllTypes) GetOneofEnum() TestAllTypes_NestedEnum {
	if x != nil {
		if x, ok := x.xxx_hidden_OneofField.(*testAllTypes_OneofEnum); ok {
			return x.OneofEnum
		}
	}
	return TestAllTypes_FOO
}

func (x *TestAllTypes) GetOneofgroup() *TestAllTypes_OneofGroup {
	if x != nil {
		if x, ok := x.xxx_hidden_OneofField.(*testAllTypes_Oneofgroup); ok {
			return x.Oneofgroup
		}
	}
	return nil
}

func (x *TestAllTypes) GetOneofOptionalUint32() uint32 {
	if x != nil {
		if x, ok := x.xxx_hidden_OneofOptional.(*testAllTypes_OneofOptionalUint32); ok {
			return x.OneofOptionalUint32
		}
	}
	return 0
}

func (x *TestAllTypes) SetSingularInt32(v int32) {
	x.xxx_hidden_SingularInt32 = v
}

func (x *TestAllTypes) SetSingularInt64(v int64) {
	x.xxx_hidden_SingularInt64 = v
}

func (x *TestAllTypes) SetSingularUint32(v uint32) {
	x.xxx_hidden_SingularUint32 = v
}

func (x *TestAllTypes) SetSingularUint64(v uint64) {
	x.xxx_hidden_SingularUint64 = v
}

func (x *TestAllTypes) SetSingularSint32(v int32) {
	x.xxx_hidden_SingularSint32 = v
}

func (x *TestAllTypes) SetSingularSint64(v int64) {
	x.xxx_hidden_SingularSint64 = v
}

func (x *TestAllTypes) SetSingularFixed32(v uint32) {
	x.xxx_hidden_SingularFixed32 = v
}

func (x *TestAllTypes) SetSingularFixed64(v uint64) {
	x.xxx_hidden_SingularFixed64 = v
}

func (x *TestAllTypes) SetSingularSfixed32(v int32) {
	x.xxx_hidden_SingularSfixed32 = v
}

func (x *TestAllTypes) SetSingularSfixed64(v int64) {
	x.xxx_hidden_SingularSfixed64 = v
}

func (x *TestAllTypes) SetSingularFloat(v float32) {
	x.xxx_hidden_SingularFloat = v
}

func (x *TestAllTypes) SetSingularDouble(v float64) {
	x.xxx_hidden_SingularDouble = v
}

func (x *TestAllTypes) SetSingularBool(v bool) {
	x.xxx_hidden_SingularBool = v
}

func (x *TestAllTypes) SetSingularString(v string) {
	x.xxx_hidden_SingularString = v
}

func (x *TestAllTypes) SetSingularBytes(v []byte) {
	if v == nil {
		v = []byte{}
	}
	x.xxx_hidden_SingularBytes = v
}

func (x *TestAllTypes) SetSingularNestedEnum(v TestAllTypes_NestedEnum) {
	x.xxx_hidden_SingularNestedEnum = v
}

func (x *TestAllTypes) SetSingularForeignEnum(v ForeignEnum) {
	x.xxx_hidden_SingularForeignEnum = v
}

func (x *TestAllTypes) SetSingularImportEnum(v ImportEnum) {
	x.xxx_hidden_SingularImportEnum = v
}

func (x *TestAllTypes) SetOptionalInt32(v int32) {
	x.xxx_hidden_OptionalInt32 = v
	protoimpl.X.SetPresent(&(x.XXX_presence[0]), 18, 100)
}

func (x *TestAllTypes) SetOptionalInt64(v int64) {
	x.xxx_hidden_OptionalInt64 = v
	protoimpl.X.SetPresent(&(x.XXX_presence[0]), 19, 100)
}

func (x *TestAllTypes) SetOptionalUint32(v uint32) {
	x.xxx_hidden_OptionalUint32 = v
	protoimpl.X.SetPresent(&(x.XXX_presence[0]), 20, 100)
}

func (x *TestAllTypes) SetOptionalUint64(v uint64) {
	x.xxx_hidden_OptionalUint64 = v
	protoimpl.X.SetPresent(&(x.XXX_presence[0]), 21, 100)
}

func (x *TestAllTypes) SetOptionalSint32(v int32) {
	x.xxx_hidden_OptionalSint32 = v
	protoimpl.X.SetPresent(&(x.XXX_presence[0]), 22, 100)
}

func (x *TestAllTypes) SetOptionalSint64(v int64) {
	x.xxx_hidden_OptionalSint64 = v
	protoimpl.X.SetPresent(&(x.XXX_presence[0]), 23, 100)
}

func (x *TestAllTypes) SetOptionalFixed32(v uint32) {
	x.xxx_hidden_OptionalFixed32 = v
	protoimpl.X.SetPresent(&(x.XXX_presence[0]), 24, 100)
}

func (x *TestAllTypes) SetOptionalFixed64(v uint64) {
	x.xxx_hidden_OptionalFixed64 = v
	protoimpl.X.SetPresent(&(x.XXX_presence[0]), 25, 100)
}

func (x *TestAllTypes) SetOptionalSfixed32(v int32) {
	x.xxx_hidden_OptionalSfixed32 = v
	protoimpl.X.SetPresent(&(x.XXX_presence[0]), 26, 100)
}

func (x *TestAllTypes) SetOptionalSfixed64(v int64) {
	x.xxx_hidden_OptionalSfixed64 = v
	protoimpl.X.SetPresent(&(x.XXX_presence[0]), 27, 100)
}

func (x *TestAllTypes) SetOptionalFloat(v float32) {
	x.xxx_hidden_OptionalFloat = v
	protoimpl.X.SetPresent(&(x.XXX_presence[0]), 28, 100)
}

func (x *TestAllTypes) SetOptionalDouble(v float64) {
	x.xxx_hidden_OptionalDouble = v
	protoimpl.X.SetPresent(&(x.XXX_presence[0]), 29, 100)
}

func (x *TestAllTypes) SetOptionalBool(v bool) {
	x.xxx_hidden_OptionalBool = v
	protoimpl.X.SetPresent(&(x.XXX_presence[0]), 30, 100)
}

func (x *TestAllTypes) SetOptionalString(v string) {
	x.xxx_hidden_OptionalString = &v
	protoimpl.X.SetPresent(&(x.XXX_presence[0]), 31, 100)
}

func (x *TestAllTypes) SetOptionalBytes(v []byte) {
	if v == nil {
		v = []byte{}
	}
	x.xxx_hidden_OptionalBytes = v
	protoimpl.X.SetPresent(&(x.XXX_presence[1]), 32, 100)
}

func (x *TestAllTypes) SetOptionalgroup(v *TestAllTypes_OptionalGroup) {
	x.xxx_hidden_Optionalgroup = v
}

func (x *TestAllTypes) SetNotGroupLikeDelimited(v *TestAllTypes_OptionalGroup) {
	x.xxx_hidden_NotGroupLikeDelimited = v
}

func (x *TestAllTypes) SetOptionalNestedMessage(v *TestAllTypes_NestedMessage) {
	x.xxx_hidden_OptionalNestedMessage = v
}

func (x *TestAllTypes) SetOptionalForeignMessage(v *ForeignMessage) {
	x.xxx_hidden_OptionalForeignMessage = v
}

func (x *TestAllTypes) SetOptionalImportMessage(v *ImportMessage) {
	x.xxx_hidden_OptionalImportMessage = v
}

func (x *TestAllTypes) SetOptionalNestedEnum(v TestAllTypes_NestedEnum) {
	x.xxx_hidden_OptionalNestedEnum = v
	protoimpl.X.SetPresent(&(x.XXX_presence[1]), 38, 100)
}

func (x *TestAllTypes) SetOptionalForeignEnum(v ForeignEnum) {
	x.xxx_hidden_OptionalForeignEnum = v
	protoimpl.X.SetPresent(&(x.XXX_presence[1]), 39, 100)
}

func (x *TestAllTypes) SetOptionalImportEnum(v ImportEnum) {
	x.xxx_hidden_OptionalImportEnum = v
	protoimpl.X.SetPresent(&(x.XXX_presence[1]), 40, 100)
}

func (x *TestAllTypes) SetOptionalLazyNestedMessage(v *TestAllTypes_NestedMessage) {
	protoimpl.X.AtomicSetPointer(&x.xxx_hidden_OptionalLazyNestedMessage, v)
	if v == nil {
		protoimpl.X.ClearPresent(&(x.XXX_presence[1]), 41)
	} else {
		protoimpl.X.SetPresent(&(x.XXX_presence[1]), 41, 100)
	}
}

func (x *TestAllTypes) SetRepeatedInt32(v []int32) {
	x.xxx_hidden_RepeatedInt32 = v
}

func (x *TestAllTypes) SetRepeatedInt64(v []int64) {
	x.xxx_hidden_RepeatedInt64 = v
}

func (x *TestAllTypes) SetRepeatedUint32(v []uint32) {
	x.xxx_hidden_RepeatedUint32 = v
}

func (x *TestAllTypes) SetRepeatedUint64(v []uint64) {
	x.xxx_hidden_RepeatedUint64 = v
}

func (x *TestAllTypes) SetRepeatedSint32(v []int32) {
	x.xxx_hidden_RepeatedSint32 = v
}

func (x *TestAllTypes) SetRepeatedSint64(v []int64) {
	x.xxx_hidden_RepeatedSint64 = v
}

func (x *TestAllTypes) SetRepeatedFixed32(v []uint32) {
	x.xxx_hidden_RepeatedFixed32 = v
}

func (x *TestAllTypes) SetRepeatedFixed64(v []uint64) {
	x.xxx_hidden_RepeatedFixed64 = v
}

func (x *TestAllTypes) SetRepeatedSfixed32(v []int32) {
	x.xxx_hidden_RepeatedSfixed32 = v
}

func (x *TestAllTypes) SetRepeatedSfixed64(v []int64) {
	x.xxx_hidden_RepeatedSfixed64 = v
}

func (x *TestAllTypes) SetRepeatedFloat(v []float32) {
	x.xxx_hidden_RepeatedFloat = v
}

func (x *TestAllTypes) SetRepeatedDouble(v []float64) {
	x.xxx_hidden_RepeatedDouble = v
}

func (x *TestAllTypes) SetRepeatedBool(v []bool) {
	x.xxx_hidden_RepeatedBool = v
}

func (x *TestAllTypes) SetRepeatedString(v []string) {
	x.xxx_hidden_RepeatedString = v
}

func (x *TestAllTypes) SetRepeatedBytes(v [][]byte) {
	x.xxx_hidden_RepeatedBytes = v
}

func (x *TestAllTypes) SetRepeatedgroup(v []*TestAllTypes_RepeatedGroup) {
	x.xxx_hidden_Repeatedgroup = &v
}

func (x *TestAllTypes) SetRepeatedNestedMessage(v []*TestAllTypes_NestedMessage) {
	x.xxx_hidden_RepeatedNestedMessage = &v
}

func (x *TestAllTypes) SetRepeatedForeignMessage(v []*ForeignMessage) {
	x.xxx_hidden_RepeatedForeignMessage = &v
}

func (x *TestAllTypes) SetRepeatedImportmessage(v []*ImportMessage) {
	x.xxx_hidden_RepeatedImportmessage = &v
}

func (x *TestAllTypes) SetRepeatedNestedEnum(v []TestAllTypes_NestedEnum) {
	x.xxx_hidden_RepeatedNestedEnum = v
}

func (x *TestAllTypes) SetRepeatedForeignEnum(v []ForeignEnum) {
	x.xxx_hidden_RepeatedForeignEnum = v
}

func (x *TestAllTypes) SetRepeatedImportenum(v []ImportEnum) {
	x.xxx_hidden_RepeatedImportenum = v
}

func (x *TestAllTypes) SetMapInt32Int32(v map[int32]int32) {
	x.xxx_hidden_MapInt32Int32 = v
}

func (x *TestAllTypes) SetMapInt64Int64(v map[int64]int64) {
	x.xxx_hidden_MapInt64Int64 = v
}

func (x *TestAllTypes) SetMapUint32Uint32(v map[uint32]uint32) {
	x.xxx_hidden_MapUint32Uint32 = v
}

func (x *TestAllTypes) SetMapUint64Uint64(v map[uint64]uint64) {
	x.xxx_hidden_MapUint64Uint64 = v
}

func (x *TestAllTypes) SetMapSint32Sint32(v map[int32]int32) {
	x.xxx_hidden_MapSint32Sint32 = v
}

func (x *TestAllTypes) SetMapSint64Sint64(v map[int64]int64) {
	x.xxx_hidden_MapSint64Sint64 = v
}

func (x *TestAllTypes) SetMapFixed32Fixed32(v map[uint32]uint32) {
	x.xxx_hidden_MapFixed32Fixed32 = v
}

func (x *TestAllTypes) SetMapFixed64Fixed64(v map[uint64]uint64) {
	x.xxx_hidden_MapFixed64Fixed64 = v
}

func (x *TestAllTypes) SetMapSfixed32Sfixed32(v map[int32]int32) {
	x.xxx_hidden_MapSfixed32Sfixed32 = v
}

func (x *TestAllTypes) SetMapSfixed64Sfixed64(v map[int64]int64) {
	x.xxx_hidden_MapSfixed64Sfixed64 = v
}

func (x *TestAllTypes) SetMapInt32Float(v map[int32]float32) {
	x.xxx_hidden_MapInt32Float = v
}

func (x *TestAllTypes) SetMapInt32Double(v map[int32]float64) {
	x.xxx_hidden_MapInt32Double = v
}

func (x *TestAllTypes) SetMapBoolBool(v map[bool]bool) {
	x.xxx_hidden_MapBoolBool = v
}

func (x *TestAllTypes) SetMapStringString(v map[string]string) {
	x.xxx_hidden_MapStringString = v
}

func (x *TestAllTypes) SetMapStringBytes(v map[string][]byte) {
	x.xxx_hidden_MapStringBytes = v
}

func (x *TestAllTypes) SetMapStringNestedMessage(v map[string]*TestAllTypes_NestedMessage) {
	x.xxx_hidden_MapStringNestedMessage = v
}

func (x *TestAllTypes) SetMapStringNestedEnum(v map[string]TestAllTypes_NestedEnum) {
	x.xxx_hidden_MapStringNestedEnum = v
}

func (x *TestAllTypes) SetDefaultInt32(v int32) {
	x.xxx_hidden_DefaultInt32 = v
	protoimpl.X.SetPresent(&(x.XXX_presence[2]), 81, 100)
}

func (x *TestAllTypes) SetDefaultInt64(v int64) {
	x.xxx_hidden_DefaultInt64 = v
	protoimpl.X.SetPresent(&(x.XXX_presence[2]), 82, 100)
}

func (x *TestAllTypes) SetDefaultUint32(v uint32) {
	x.xxx_hidden_DefaultUint32 = v
	protoimpl.X.SetPresent(&(x.XXX_presence[2]), 83, 100)
}

func (x *TestAllTypes) SetDefaultUint64(v uint64) {
	x.xxx_hidden_DefaultUint64 = v
	protoimpl.X.SetPresent(&(x.XXX_presence[2]), 84, 100)
}

func (x *TestAllTypes) SetDefaultSint32(v int32) {
	x.xxx_hidden_DefaultSint32 = v
	protoimpl.X.SetPresent(&(x.XXX_presence[2]), 85, 100)
}

func (x *TestAllTypes) SetDefaultSint64(v int64) {
	x.xxx_hidden_DefaultSint64 = v
	protoimpl.X.SetPresent(&(x.XXX_presence[2]), 86, 100)
}

func (x *TestAllTypes) SetDefaultFixed32(v uint32) {
	x.xxx_hidden_DefaultFixed32 = v
	protoimpl.X.SetPresent(&(x.XXX_presence[2]), 87, 100)
}

func (x *TestAllTypes) SetDefaultFixed64(v uint64) {
	x.xxx_hidden_DefaultFixed64 = v
	protoimpl.X.SetPresent(&(x.XXX_presence[2]), 88, 100)
}

func (x *TestAllTypes) SetDefaultSfixed32(v int32) {
	x.xxx_hidden_DefaultSfixed32 = v
	protoimpl.X.SetPresent(&(x.XXX_presence[2]), 89, 100)
}

func (x *TestAllTypes) SetDefaultSfixed64(v int64) {
	x.xxx_hidden_DefaultSfixed64 = v
	protoimpl.X.SetPresent(&(x.XXX_presence[2]), 90, 100)
}

func (x *TestAllTypes) SetDefaultFloat(v float32) {
	x.xxx_hidden_DefaultFloat = v
	protoimpl.X.SetPresent(&(x.XXX_presence[2]), 91, 100)
}

func (x *TestAllTypes) SetDefaultDouble(v float64) {
	x.xxx_hidden_DefaultDouble = v
	protoimpl.X.SetPresent(&(x.XXX_presence[2]), 92, 100)
}

func (x *TestAllTypes) SetDefaultBool(v bool) {
	x.xxx_hidden_DefaultBool = v
	protoimpl.X.SetPresent(&(x.XXX_presence[2]), 93, 100)
}

func (x *TestAllTypes) SetDefaultString(v string) {
	x.xxx_hidden_DefaultString = &v
	protoimpl.X.SetPresent(&(x.XXX_presence[2]), 94, 100)
}

func (x *TestAllTypes) SetDefaultBytes(v []byte) {
	if v == nil {
		v = []byte{}
	}
	x.xxx_hidden_DefaultBytes = v
	protoimpl.X.SetPresent(&(x.XXX_presence[2]), 95, 100)
}

func (x *TestAllTypes) SetDefaultNestedEnum(v TestAllTypes_NestedEnum) {
	x.xxx_hidden_DefaultNestedEnum = v
	protoimpl.X.SetPresent(&(x.XXX_presence[3]), 96, 100)
}

func (x *TestAllTypes) SetDefaultForeignEnum(v ForeignEnum) {
	x.xxx_hidden_DefaultForeignEnum = v
	protoimpl.X.SetPresent(&(x.XXX_presence[3]), 97, 100)
}

func (x *TestAllTypes) SetOneofUint32(v uint32) {
	x.xxx_hidden_OneofField = &testAllTypes_OneofUint32{v}
}

func (x *TestAllTypes) SetOneofNestedMessage(v *TestAllTypes_NestedMessage) {
	if v == nil {
		x.xxx_hidden_OneofField = nil
		return
	}
	x.xxx_hidden_OneofField = &testAllTypes_OneofNestedMessage{v}
}

func (x *TestAllTypes) SetOneofString(v string) {
	x.xxx_hidden_OneofField = &testAllTypes_OneofString{v}
}

func (x *TestAllTypes) SetOneofBytes(v []byte) {
	if v == nil {
		v = []byte{}
	}
	x.xxx_hidden_OneofField = &testAllTypes_OneofBytes{v}
}

func (x *TestAllTypes) SetOneofBool(v bool) {
	x.xxx_hidden_OneofField = &testAllTypes_OneofBool{v}
}

func (x *TestAllTypes) SetOneofUint64(v uint64) {
	x.xxx_hidden_OneofField = &testAllTypes_OneofUint64{v}
}

func (x *TestAllTypes) SetOneofFloat(v float32) {
	x.xxx_hidden_OneofField = &testAllTypes_OneofFloat{v}
}

func (x *TestAllTypes) SetOneofDouble(v float64) {
	x.xxx_hidden_OneofField = &testAllTypes_OneofDouble{v}
}

func (x *TestAllTypes) SetOneofEnum(v TestAllTypes_NestedEnum) {
	x.xxx_hidden_OneofField = &testAllTypes_OneofEnum{v}
}

func (x *TestAllTypes) SetOneofgroup(v *TestAllTypes_OneofGroup) {
	if v == nil {
		x.xxx_hidden_OneofField = nil
		return
	}
	x.xxx_hidden_OneofField = &testAllTypes_Oneofgroup{v}
}

func (x *TestAllTypes) SetOneofOptionalUint32(v uint32) {
	x.xxx_hidden_OneofOptional = &testAllTypes_OneofOptionalUint32{v}
}

func (x *TestAllTypes) HasOptionalInt32() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[0]), 18)
}

func (x *TestAllTypes) HasOptionalInt64() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[0]), 19)
}

func (x *TestAllTypes) HasOptionalUint32() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[0]), 20)
}

func (x *TestAllTypes) HasOptionalUint64() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[0]), 21)
}

func (x *TestAllTypes) HasOptionalSint32() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[0]), 22)
}

func (x *TestAllTypes) HasOptionalSint64() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[0]), 23)
}

func (x *TestAllTypes) HasOptionalFixed32() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[0]), 24)
}

func (x *TestAllTypes) HasOptionalFixed64() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[0]), 25)
}

func (x *TestAllTypes) HasOptionalSfixed32() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[0]), 26)
}

func (x *TestAllTypes) HasOptionalSfixed64() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[0]), 27)
}

func (x *TestAllTypes) HasOptionalFloat() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[0]), 28)
}

func (x *TestAllTypes) HasOptionalDouble() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[0]), 29)
}

func (x *TestAllTypes) HasOptionalBool() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[0]), 30)
}

func (x *TestAllTypes) HasOptionalString() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[0]), 31)
}

func (x *TestAllTypes) HasOptionalBytes() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[1]), 32)
}

func (x *TestAllTypes) HasOptionalgroup() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_Optionalgroup != nil
}

func (x *TestAllTypes) HasNotGroupLikeDelimited() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_NotGroupLikeDelimited != nil
}

func (x *TestAllTypes) HasOptionalNestedMessage() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_OptionalNestedMessage != nil
}

func (x *TestAllTypes) HasOptionalForeignMessage() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_OptionalForeignMessage != nil
}

func (x *TestAllTypes) HasOptionalImportMessage() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_OptionalImportMessage != nil
}

func (x *TestAllTypes) HasOptionalNestedEnum() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[1]), 38)
}

func (x *TestAllTypes) HasOptionalForeignEnum() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[1]), 39)
}

func (x *TestAllTypes) HasOptionalImportEnum() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[1]), 40)
}

func (x *TestAllTypes) HasOptionalLazyNestedMessage() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[1]), 41)
}

func (x *TestAllTypes) HasDefaultInt32() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[2]), 81)
}

func (x *TestAllTypes) HasDefaultInt64() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[2]), 82)
}

func (x *TestAllTypes) HasDefaultUint32() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[2]), 83)
}

func (x *TestAllTypes) HasDefaultUint64() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[2]), 84)
}

func (x *TestAllTypes) HasDefaultSint32() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[2]), 85)
}

func (x *TestAllTypes) HasDefaultSint64() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[2]), 86)
}

func (x *TestAllTypes) HasDefaultFixed32() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[2]), 87)
}

func (x *TestAllTypes) HasDefaultFixed64() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[2]), 88)
}

func (x *TestAllTypes) HasDefaultSfixed32() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[2]), 89)
}

func (x *TestAllTypes) HasDefaultSfixed64() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[2]), 90)
}

func (x *TestAllTypes) HasDefaultFloat() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[2]), 91)
}

func (x *TestAllTypes) HasDefaultDouble() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[2]), 92)
}

func (x *TestAllTypes) HasDefaultBool() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[2]), 93)
}

func (x *TestAllTypes) HasDefaultString() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[2]), 94)
}

func (x *TestAllTypes) HasDefaultBytes() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[2]), 95)
}

func (x *TestAllTypes) HasDefaultNestedEnum() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[3]), 96)
}

func (x *TestAllTypes) HasDefaultForeignEnum() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[3]), 97)
}

func (x *TestAllTypes) HasOneofField() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_OneofField != nil
}

func (x *TestAllTypes) HasOneofUint32() bool {
	if x == nil {
		return false
	}
	_, ok := x.xxx_hidden_OneofField.(*testAllTypes_OneofUint32)
	return ok
}

func (x *TestAllTypes) HasOneofNestedMessage() bool {
	if x == nil {
		return false
	}
	_, ok := x.xxx_hidden_OneofField.(*testAllTypes_OneofNestedMessage)
	return ok
}

func (x *TestAllTypes) HasOneofString() bool {
	if x == nil {
		return false
	}
	_, ok := x.xxx_hidden_OneofField.(*testAllTypes_OneofString)
	return ok
}

func (x *TestAllTypes) HasOneofBytes() bool {
	if x == nil {
		return false
	}
	_, ok := x.xxx_hidden_OneofField.(*testAllTypes_OneofBytes)
	return ok
}

func (x *TestAllTypes) HasOneofBool() bool {
	if x == nil {
		return false
	}
	_, ok := x.xxx_hidden_OneofField.(*testAllTypes_OneofBool)
	return ok
}

func (x *TestAllTypes) HasOneofUint64() bool {
	if x == nil {
		return false
	}
	_, ok := x.xxx_hidden_OneofField.(*testAllTypes_OneofUint64)
	return ok
}

func (x *TestAllTypes) HasOneofFloat() bool {
	if x == nil {
		return false
	}
	_, ok := x.xxx_hidden_OneofField.(*testAllTypes_OneofFloat)
	return ok
}

func (x *TestAllTypes) HasOneofDouble() bool {
	if x == nil {
		return false
	}
	_, ok := x.xxx_hidden_OneofField.(*testAllTypes_OneofDouble)
	return ok
}

func (x *TestAllTypes) HasOneofEnum() bool {
	if x == nil {
		return false
	}
	_, ok := x.xxx_hidden_OneofField.(*testAllTypes_OneofEnum)
	return ok
}

func (x *TestAllTypes) HasOneofgroup() bool {
	if x == nil {
		return false
	}
	_, ok := x.xxx_hidden_OneofField.(*testAllTypes_Oneofgroup)
	return ok
}

func (x *TestAllTypes) HasOneofOptional() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_OneofOptional != nil
}

func (x *TestAllTypes) HasOneofOptionalUint32() bool {
	if x == nil {
		return false
	}
	_, ok := x.xxx_hidden_OneofOptional.(*testAllTypes_OneofOptionalUint32)
	return ok
}

func (x *TestAllTypes) ClearOptionalInt32() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[0]), 18)
	x.xxx_hidden_OptionalInt32 = 0
}

func (x *TestAllTypes) ClearOptionalInt64() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[0]), 19)
	x.xxx_hidden_OptionalInt64 = 0
}

func (x *TestAllTypes) ClearOptionalUint32() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[0]), 20)
	x.xxx_hidden_OptionalUint32 = 0
}

func (x *TestAllTypes) ClearOptionalUint64() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[0]), 21)
	x.xxx_hidden_OptionalUint64 = 0
}

func (x *TestAllTypes) ClearOptionalSint32() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[0]), 22)
	x.xxx_hidden_OptionalSint32 = 0
}

func (x *TestAllTypes) ClearOptionalSint64() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[0]), 23)
	x.xxx_hidden_OptionalSint64 = 0
}

func (x *TestAllTypes) ClearOptionalFixed32() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[0]), 24)
	x.xxx_hidden_OptionalFixed32 = 0
}

func (x *TestAllTypes) ClearOptionalFixed64() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[0]), 25)
	x.xxx_hidden_OptionalFixed64 = 0
}

func (x *TestAllTypes) ClearOptionalSfixed32() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[0]), 26)
	x.xxx_hidden_OptionalSfixed32 = 0
}

func (x *TestAllTypes) ClearOptionalSfixed64() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[0]), 27)
	x.xxx_hidden_OptionalSfixed64 = 0
}

func (x *TestAllTypes) ClearOptionalFloat() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[0]), 28)
	x.xxx_hidden_OptionalFloat = 0
}

func (x *TestAllTypes) ClearOptionalDouble() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[0]), 29)
	x.xxx_hidden_OptionalDouble = 0
}

func (x *TestAllTypes) ClearOptionalBool() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[0]), 30)
	x.xxx_hidden_OptionalBool = false
}

func (x *TestAllTypes) ClearOptionalString() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[0]), 31)
	x.xxx_hidden_OptionalString = nil
}

func (x *TestAllTypes) ClearOptionalBytes() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[1]), 32)
	x.xxx_hidden_OptionalBytes = nil
}

func (x *TestAllTypes) ClearOptionalgroup() {
	x.xxx_hidden_Optionalgroup = nil
}

func (x *TestAllTypes) ClearNotGroupLikeDelimited() {
	x.xxx_hidden_NotGroupLikeDelimited = nil
}

func (x *TestAllTypes) ClearOptionalNestedMessage() {
	x.xxx_hidden_OptionalNestedMessage = nil
}

func (x *TestAllTypes) ClearOptionalForeignMessage() {
	x.xxx_hidden_OptionalForeignMessage = nil
}

func (x *TestAllTypes) ClearOptionalImportMessage() {
	x.xxx_hidden_OptionalImportMessage = nil
}

func (x *TestAllTypes) ClearOptionalNestedEnum() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[1]), 38)
	x.xxx_hidden_OptionalNestedEnum = TestAllTypes_FOO
}

func (x *TestAllTypes) ClearOptionalForeignEnum() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[1]), 39)
	x.xxx_hidden_OptionalForeignEnum = ForeignEnum_FOREIGN_ZERO
}

func (x *TestAllTypes) ClearOptionalImportEnum() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[1]), 40)
	x.xxx_hidden_OptionalImportEnum = ImportEnum_IMPORT_ZERO
}

func (x *TestAllTypes) ClearOptionalLazyNestedMessage() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[1]), 41)
	protoimpl.X.AtomicSetPointer(&x.xxx_hidden_OptionalLazyNestedMessage, (*TestAllTypes_NestedMessage)(nil))
}

func (x *TestAllTypes) ClearDefaultInt32() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[2]), 81)
}

func (x *TestAllTypes) ClearDefaultInt64() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[2]), 82)
}

func (x *TestAllTypes) ClearDefaultUint32() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[2]), 83)
}

func (x *TestAllTypes) ClearDefaultUint64() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[2]), 84)
}

func (x *TestAllTypes) ClearDefaultSint32() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[2]), 85)
}

func (x *TestAllTypes) ClearDefaultSint64() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[2]), 86)
}

func (x *TestAllTypes) ClearDefaultFixed32() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[2]), 87)
}

func (x *TestAllTypes) ClearDefaultFixed64() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[2]), 88)
}

func (x *TestAllTypes) ClearDefaultSfixed32() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[2]), 89)
}

func (x *TestAllTypes) ClearDefaultSfixed64() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[2]), 90)
}

func (x *TestAllTypes) ClearDefaultFloat() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[2]), 91)
}

func (x *TestAllTypes) ClearDefaultDouble() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[2]), 92)
}

func (x *TestAllTypes) ClearDefaultBool() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[2]), 93)
}

func (x *TestAllTypes) ClearDefaultString() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[2]), 94)
}

func (x *TestAllTypes) ClearDefaultBytes() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[2]), 95)
}

func (x *TestAllTypes) ClearDefaultNestedEnum() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[3]), 96)
}

func (x *TestAllTypes) ClearDefaultForeignEnum() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[3]), 97)
}

func (x *TestAllTypes) ClearOneofField() {
	x.xxx_hidden_OneofField = nil
}

func (x *TestAllTypes) ClearOneofUint32() {
	if _, ok := x.xxx_hidden_OneofField.(*testAllTypes_OneofUint32); ok {
		x.xxx_hidden_OneofField = nil
	}
}

func (x *TestAllTypes) ClearOneofNestedMessage() {
	if _, ok := x.xxx_hidden_OneofField.(*testAllTypes_OneofNestedMessage); ok {
		x.xxx_hidden_OneofField = nil
	}
}

func (x *TestAllTypes) ClearOneofString() {
	if _, ok := x.xxx_hidden_OneofField.(*testAllTypes_OneofString); ok {
		x.xxx_hidden_OneofField = nil
	}
}

func (x *TestAllTypes) ClearOneofBytes() {
	if _, ok := x.xxx_hidden_OneofField.(*testAllTypes_OneofBytes); ok {
		x.xxx_hidden_OneofField = nil
	}
}

func (x *TestAllTypes) ClearOneofBool() {
	if _, ok := x.xxx_hidden_OneofField.(*testAllTypes_OneofBool); ok {
		x.xxx_hidden_OneofField = nil
	}
}

func (x *TestAllTypes) ClearOneofUint64() {
	if _, ok := x.xxx_hidden_OneofField.(*testAllTypes_OneofUint64); ok {
		x.xxx_hidden_OneofField = nil
	}
}

func (x *TestAllTypes) ClearOneofFloat() {
	if _, ok := x.xxx_hidden_OneofField.(*testAllTypes_OneofFloat); ok {
		x.xxx_hidden_OneofField = nil
	}
}

func (x *TestAllTypes) ClearOneofDouble() {
	if _, ok := x.xxx_hidden_OneofField.(*testAllTypes_OneofDouble); ok {
		x.xxx_hidden_OneofField = nil
	}
}

func (x *TestAllTypes) ClearOneofEnum() {
	if _, ok := x.xxx_hidden_OneofField.(*testAllTypes_OneofEnum); ok {
		x.xxx_hidden_OneofField = nil
	}
}

func (x *TestAllTypes) ClearOneofgroup() {
	if _, ok := x.xxx_hidden_OneofField.(*testAllTypes_Oneofgroup); ok {
		x.xxx_hidden_OneofField = nil
	}
}

func (x *TestAllTypes) ClearOneofOptional() {
	x.xxx_hidden_OneofOptional = nil
}

func (x *TestAllTypes) ClearOneofOptionalUint32() {
	if _, ok := x.xxx_hidden_OneofOptional.(*testAllTypes_OneofOptionalUint32); ok {
		x.xxx_hidden_OneofOptional = nil
	}
}

const TestAllTypes_OneofField_not_set_case case_TestAllTypes_OneofField = 0
const TestAllTypes_OneofUint32_case case_TestAllTypes_OneofField = 111
const TestAllTypes_OneofNestedMessage_case case_TestAllTypes_OneofField = 112
const TestAllTypes_OneofString_case case_TestAllTypes_OneofField = 113
const TestAllTypes_OneofBytes_case case_TestAllTypes_OneofField = 114
const TestAllTypes_OneofBool_case case_TestAllTypes_OneofField = 115
const TestAllTypes_OneofUint64_case case_TestAllTypes_OneofField = 116
const TestAllTypes_OneofFloat_case case_TestAllTypes_OneofField = 117
const TestAllTypes_OneofDouble_case case_TestAllTypes_OneofField = 118
const TestAllTypes_OneofEnum_case case_TestAllTypes_OneofField = 119
const TestAllTypes_Oneofgroup_case case_TestAllTypes_OneofField = 121

func (x *TestAllTypes) WhichOneofField() case_TestAllTypes_OneofField {
	if x == nil {
		return TestAllTypes_OneofField_not_set_case
	}
	switch x.xxx_hidden_OneofField.(type) {
	case *testAllTypes_OneofUint32:
		return TestAllTypes_OneofUint32_case
	case *testAllTypes_OneofNestedMessage:
		return TestAllTypes_OneofNestedMessage_case
	case *testAllTypes_OneofString:
		return TestAllTypes_OneofString_case
	case *testAllTypes_OneofBytes:
		return TestAllTypes_OneofBytes_case
	case *testAllTypes_OneofBool:
		return TestAllTypes_OneofBool_case
	case *testAllTypes_OneofUint64:
		return TestAllTypes_OneofUint64_case
	case *testAllTypes_OneofFloat:
		return TestAllTypes_OneofFloat_case
	case *testAllTypes_OneofDouble:
		return TestAllTypes_OneofDouble_case
	case *testAllTypes_OneofEnum:
		return TestAllTypes_OneofEnum_case
	case *testAllTypes_Oneofgroup:
		return TestAllTypes_Oneofgroup_case
	default:
		return TestAllTypes_OneofField_not_set_case
	}
}

const TestAllTypes_OneofOptional_not_set_case case_TestAllTypes_OneofOptional = 0
const TestAllTypes_OneofOptionalUint32_case case_TestAllTypes_OneofOptional = 120

func (x *TestAllTypes) WhichOneofOptional() case_TestAllTypes_OneofOptional {
	if x == nil {
		return TestAllTypes_OneofOptional_not_set_case
	}
	switch x.xxx_hidden_OneofOptional.(type) {
	case *testAllTypes_OneofOptionalUint32:
		return TestAllTypes_OneofOptionalUint32_case
	default:
		return TestAllTypes_OneofOptional_not_set_case
	}
}

type TestAllTypes_builder struct {
	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.

	SingularInt32    int32
	SingularInt64    int64
	SingularUint32   uint32
	SingularUint64   uint64
	SingularSint32   int32
	SingularSint64   int64
	SingularFixed32  uint32
	SingularFixed64  uint64
	SingularSfixed32 int32
	SingularSfixed64 int64
	SingularFloat    float32
	SingularDouble   float64
	SingularBool     bool
	SingularString   string
	SingularBytes    []byte
	// message-typed fields elided, as they cannot specify implicit presence.
	SingularNestedEnum        TestAllTypes_NestedEnum
	SingularForeignEnum       ForeignEnum
	SingularImportEnum        ImportEnum
	OptionalInt32             *int32
	OptionalInt64             *int64
	OptionalUint32            *uint32
	OptionalUint64            *uint64
	OptionalSint32            *int32
	OptionalSint64            *int64
	OptionalFixed32           *uint32
	OptionalFixed64           *uint64
	OptionalSfixed32          *int32
	OptionalSfixed64          *int64
	OptionalFloat             *float32
	OptionalDouble            *float64
	OptionalBool              *bool
	OptionalString            *string
	OptionalBytes             []byte
	Optionalgroup             *TestAllTypes_OptionalGroup
	NotGroupLikeDelimited     *TestAllTypes_OptionalGroup
	OptionalNestedMessage     *TestAllTypes_NestedMessage
	OptionalForeignMessage    *ForeignMessage
	OptionalImportMessage     *ImportMessage
	OptionalNestedEnum        *TestAllTypes_NestedEnum
	OptionalForeignEnum       *ForeignEnum
	OptionalImportEnum        *ImportEnum
	OptionalLazyNestedMessage *TestAllTypes_NestedMessage
	RepeatedInt32             []int32
	RepeatedInt64             []int64
	RepeatedUint32            []uint32
	RepeatedUint64            []uint64
	RepeatedSint32            []int32
	RepeatedSint64            []int64
	RepeatedFixed32           []uint32
	RepeatedFixed64           []uint64
	RepeatedSfixed32          []int32
	RepeatedSfixed64          []int64
	RepeatedFloat             []float32
	RepeatedDouble            []float64
	RepeatedBool              []bool
	RepeatedString            []string
	RepeatedBytes             [][]byte
	Repeatedgroup             []*TestAllTypes_RepeatedGroup
	RepeatedNestedMessage     []*TestAllTypes_NestedMessage
	RepeatedForeignMessage    []*ForeignMessage
	RepeatedImportmessage     []*ImportMessage
	RepeatedNestedEnum        []TestAllTypes_NestedEnum
	RepeatedForeignEnum       []ForeignEnum
	RepeatedImportenum        []ImportEnum
	MapInt32Int32             map[int32]int32
	MapInt64Int64             map[int64]int64
	MapUint32Uint32           map[uint32]uint32
	MapUint64Uint64           map[uint64]uint64
	MapSint32Sint32           map[int32]int32
	MapSint64Sint64           map[int64]int64
	MapFixed32Fixed32         map[uint32]uint32
	MapFixed64Fixed64         map[uint64]uint64
	MapSfixed32Sfixed32       map[int32]int32
	MapSfixed64Sfixed64       map[int64]int64
	MapInt32Float             map[int32]float32
	MapInt32Double            map[int32]float64
	MapBoolBool               map[bool]bool
	MapStringString           map[string]string
	MapStringBytes            map[string][]byte
	MapStringNestedMessage    map[string]*TestAllTypes_NestedMessage
	MapStringNestedEnum       map[string]TestAllTypes_NestedEnum
	// Singular with defaults
	DefaultInt32       *int32
	DefaultInt64       *int64
	DefaultUint32      *uint32
	DefaultUint64      *uint64
	DefaultSint32      *int32
	DefaultSint64      *int64
	DefaultFixed32     *uint32
	DefaultFixed64     *uint64
	DefaultSfixed32    *int32
	DefaultSfixed64    *int64
	DefaultFloat       *float32
	DefaultDouble      *float64
	DefaultBool        *bool
	DefaultString      *string
	DefaultBytes       []byte
	DefaultNestedEnum  *TestAllTypes_NestedEnum
	DefaultForeignEnum *ForeignEnum
	// Fields of oneof xxx_hidden_OneofField:
	OneofUint32        *uint32
	OneofNestedMessage *TestAllTypes_NestedMessage
	OneofString        *string
	OneofBytes         []byte
	OneofBool          *bool
	OneofUint64        *uint64
	OneofFloat         *float32
	OneofDouble        *float64
	OneofEnum          *TestAllTypes_NestedEnum
	Oneofgroup         *TestAllTypes_OneofGroup
	// -- end of xxx_hidden_OneofField
	// A oneof with exactly one field.

	// Fields of oneof xxx_hidden_OneofOptional:
	OneofOptionalUint32 *uint32
	// -- end of xxx_hidden_OneofOptional
}

func (b0 TestAllTypes_builder) Build() *TestAllTypes {
	m0 := &TestAllTypes{}
	b, x := &b0, m0
	_, _ = b, x
	x.xxx_hidden_SingularInt32 = b.SingularInt32
	x.xxx_hidden_SingularInt64 = b.SingularInt64
	x.xxx_hidden_SingularUint32 = b.SingularUint32
	x.xxx_hidden_SingularUint64 = b.SingularUint64
	x.xxx_hidden_SingularSint32 = b.SingularSint32
	x.xxx_hidden_SingularSint64 = b.SingularSint64
	x.xxx_hidden_SingularFixed32 = b.SingularFixed32
	x.xxx_hidden_SingularFixed64 = b.SingularFixed64
	x.xxx_hidden_SingularSfixed32 = b.SingularSfixed32
	x.xxx_hidden_SingularSfixed64 = b.SingularSfixed64
	x.xxx_hidden_SingularFloat = b.SingularFloat
	x.xxx_hidden_SingularDouble = b.SingularDouble
	x.xxx_hidden_SingularBool = b.SingularBool
	x.xxx_hidden_SingularString = b.SingularString
	x.xxx_hidden_SingularBytes = b.SingularBytes
	x.xxx_hidden_SingularNestedEnum = b.SingularNestedEnum
	x.xxx_hidden_SingularForeignEnum = b.SingularForeignEnum
	x.xxx_hidden_SingularImportEnum = b.SingularImportEnum
	if b.OptionalInt32 != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 18, 100)
		x.xxx_hidden_OptionalInt32 = *b.OptionalInt32
	}
	if b.OptionalInt64 != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 19, 100)
		x.xxx_hidden_OptionalInt64 = *b.OptionalInt64
	}
	if b.OptionalUint32 != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 20, 100)
		x.xxx_hidden_OptionalUint32 = *b.OptionalUint32
	}
	if b.OptionalUint64 != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 21, 100)
		x.xxx_hidden_OptionalUint64 = *b.OptionalUint64
	}
	if b.OptionalSint32 != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 22, 100)
		x.xxx_hidden_OptionalSint32 = *b.OptionalSint32
	}
	if b.OptionalSint64 != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 23, 100)
		x.xxx_hidden_OptionalSint64 = *b.OptionalSint64
	}
	if b.OptionalFixed32 != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 24, 100)
		x.xxx_hidden_OptionalFixed32 = *b.OptionalFixed32
	}
	if b.OptionalFixed64 != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 25, 100)
		x.xxx_hidden_OptionalFixed64 = *b.OptionalFixed64
	}
	if b.OptionalSfixed32 != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 26, 100)
		x.xxx_hidden_OptionalSfixed32 = *b.OptionalSfixed32
	}
	if b.OptionalSfixed64 != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 27, 100)
		x.xxx_hidden_OptionalSfixed64 = *b.OptionalSfixed64
	}
	if b.OptionalFloat != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 28, 100)
		x.xxx_hidden_OptionalFloat = *b.OptionalFloat
	}
	if b.OptionalDouble != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 29, 100)
		x.xxx_hidden_OptionalDouble = *b.OptionalDouble
	}
	if b.OptionalBool != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 30, 100)
		x.xxx_hidden_OptionalBool = *b.OptionalBool
	}
	if b.OptionalString != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 31, 100)
		x.xxx_hidden_OptionalString = b.OptionalString
	}
	if b.OptionalBytes != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[1]), 32, 100)
		x.xxx_hidden_OptionalBytes = b.OptionalBytes
	}
	x.xxx_hidden_Optionalgroup = b.Optionalgroup
	x.xxx_hidden_NotGroupLikeDelimited = b.NotGroupLikeDelimited
	x.xxx_hidden_OptionalNestedMessage = b.OptionalNestedMessage
	x.xxx_hidden_OptionalForeignMessage = b.OptionalForeignMessage
	x.xxx_hidden_OptionalImportMessage = b.OptionalImportMessage
	if b.OptionalNestedEnum != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[1]), 38, 100)
		x.xxx_hidden_OptionalNestedEnum = *b.OptionalNestedEnum
	}
	if b.OptionalForeignEnum != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[1]), 39, 100)
		x.xxx_hidden_OptionalForeignEnum = *b.OptionalForeignEnum
	}
	if b.OptionalImportEnum != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[1]), 40, 100)
		x.xxx_hidden_OptionalImportEnum = *b.OptionalImportEnum
	}
	if b.OptionalLazyNestedMessage != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[1]), 41, 100)
		x.xxx_hidden_OptionalLazyNestedMessage = b.OptionalLazyNestedMessage
	}
	x.xxx_hidden_RepeatedInt32 = b.RepeatedInt32
	x.xxx_hidden_RepeatedInt64 = b.RepeatedInt64
	x.xxx_hidden_RepeatedUint32 = b.RepeatedUint32
	x.xxx_hidden_RepeatedUint64 = b.RepeatedUint64
	x.xxx_hidden_RepeatedSint32 = b.RepeatedSint32
	x.xxx_hidden_RepeatedSint64 = b.RepeatedSint64
	x.xxx_hidden_RepeatedFixed32 = b.RepeatedFixed32
	x.xxx_hidden_RepeatedFixed64 = b.RepeatedFixed64
	x.xxx_hidden_RepeatedSfixed32 = b.RepeatedSfixed32
	x.xxx_hidden_RepeatedSfixed64 = b.RepeatedSfixed64
	x.xxx_hidden_RepeatedFloat = b.RepeatedFloat
	x.xxx_hidden_RepeatedDouble = b.RepeatedDouble
	x.xxx_hidden_RepeatedBool = b.RepeatedBool
	x.xxx_hidden_RepeatedString = b.RepeatedString
	x.xxx_hidden_RepeatedBytes = b.RepeatedBytes
	x.xxx_hidden_Repeatedgroup = &b.Repeatedgroup
	x.xxx_hidden_RepeatedNestedMessage = &b.RepeatedNestedMessage
	x.xxx_hidden_RepeatedForeignMessage = &b.RepeatedForeignMessage
	x.xxx_hidden_RepeatedImportmessage = &b.RepeatedImportmessage
	x.xxx_hidden_RepeatedNestedEnum = b.RepeatedNestedEnum
	x.xxx_hidden_RepeatedForeignEnum = b.RepeatedForeignEnum
	x.xxx_hidden_RepeatedImportenum = b.RepeatedImportenum
	x.xxx_hidden_MapInt32Int32 = b.MapInt32Int32
	x.xxx_hidden_MapInt64Int64 = b.MapInt64Int64
	x.xxx_hidden_MapUint32Uint32 = b.MapUint32Uint32
	x.xxx_hidden_MapUint64Uint64 = b.MapUint64Uint64
	x.xxx_hidden_MapSint32Sint32 = b.MapSint32Sint32
	x.xxx_hidden_MapSint64Sint64 = b.MapSint64Sint64
	x.xxx_hidden_MapFixed32Fixed32 = b.MapFixed32Fixed32
	x.xxx_hidden_MapFixed64Fixed64 = b.MapFixed64Fixed64
	x.xxx_hidden_MapSfixed32Sfixed32 = b.MapSfixed32Sfixed32
	x.xxx_hidden_MapSfixed64Sfixed64 = b.MapSfixed64Sfixed64
	x.xxx_hidden_MapInt32Float = b.MapInt32Float
	x.xxx_hidden_MapInt32Double = b.MapInt32Double
	x.xxx_hidden_MapBoolBool = b.MapBoolBool
	x.xxx_hidden_MapStringString = b.MapStringString
	x.xxx_hidden_MapStringBytes = b.MapStringBytes
	x.xxx_hidden_MapStringNestedMessage = b.MapStringNestedMessage
	x.xxx_hidden_MapStringNestedEnum = b.MapStringNestedEnum
	if b.DefaultInt32 != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[2]), 81, 100)
		x.xxx_hidden_DefaultInt32 = *b.DefaultInt32
	}
	if b.DefaultInt64 != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[2]), 82, 100)
		x.xxx_hidden_DefaultInt64 = *b.DefaultInt64
	}
	if b.DefaultUint32 != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[2]), 83, 100)
		x.xxx_hidden_DefaultUint32 = *b.DefaultUint32
	}
	if b.DefaultUint64 != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[2]), 84, 100)
		x.xxx_hidden_DefaultUint64 = *b.DefaultUint64
	}
	if b.DefaultSint32 != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[2]), 85, 100)
		x.xxx_hidden_DefaultSint32 = *b.DefaultSint32
	}
	if b.DefaultSint64 != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[2]), 86, 100)
		x.xxx_hidden_DefaultSint64 = *b.DefaultSint64
	}
	if b.DefaultFixed32 != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[2]), 87, 100)
		x.xxx_hidden_DefaultFixed32 = *b.DefaultFixed32
	}
	if b.DefaultFixed64 != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[2]), 88, 100)
		x.xxx_hidden_DefaultFixed64 = *b.DefaultFixed64
	}
	if b.DefaultSfixed32 != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[2]), 89, 100)
		x.xxx_hidden_DefaultSfixed32 = *b.DefaultSfixed32
	}
	if b.DefaultSfixed64 != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[2]), 90, 100)
		x.xxx_hidden_DefaultSfixed64 = *b.DefaultSfixed64
	}
	if b.DefaultFloat != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[2]), 91, 100)
		x.xxx_hidden_DefaultFloat = *b.DefaultFloat
	}
	if b.DefaultDouble != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[2]), 92, 100)
		x.xxx_hidden_DefaultDouble = *b.DefaultDouble
	}
	if b.DefaultBool != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[2]), 93, 100)
		x.xxx_hidden_DefaultBool = *b.DefaultBool
	}
	if b.DefaultString != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[2]), 94, 100)
		x.xxx_hidden_DefaultString = b.DefaultString
	}
	if b.DefaultBytes != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[2]), 95, 100)
		x.xxx_hidden_DefaultBytes = b.DefaultBytes
	}
	if b.DefaultNestedEnum != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[3]), 96, 100)
		x.xxx_hidden_DefaultNestedEnum = *b.DefaultNestedEnum
	}
	if b.DefaultForeignEnum != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[3]), 97, 100)
		x.xxx_hidden_DefaultForeignEnum = *b.DefaultForeignEnum
	}
	if b.OneofUint32 != nil {
		x.xxx_hidden_OneofField = &testAllTypes_OneofUint32{*b.OneofUint32}
	}
	if b.OneofNestedMessage != nil {
		x.xxx_hidden_OneofField = &testAllTypes_OneofNestedMessage{b.OneofNestedMessage}
	}
	if b.OneofString != nil {
		x.xxx_hidden_OneofField = &testAllTypes_OneofString{*b.OneofString}
	}
	if b.OneofBytes != nil {
		x.xxx_hidden_OneofField = &testAllTypes_OneofBytes{b.OneofBytes}
	}
	if b.OneofBool != nil {
		x.xxx_hidden_OneofField = &testAllTypes_OneofBool{*b.OneofBool}
	}
	if b.OneofUint64 != nil {
		x.xxx_hidden_OneofField = &testAllTypes_OneofUint64{*b.OneofUint64}
	}
	if b.OneofFloat != nil {
		x.xxx_hidden_OneofField = &testAllTypes_OneofFloat{*b.OneofFloat}
	}
	if b.OneofDouble != nil {
		x.xxx_hidden_OneofField = &testAllTypes_OneofDouble{*b.OneofDouble}
	}
	if b.OneofEnum != nil {
		x.xxx_hidden_OneofField = &testAllTypes_OneofEnum{*b.OneofEnum}
	}
	if b.Oneofgroup != nil {
		x.xxx_hidden_OneofField = &testAllTypes_Oneofgroup{b.Oneofgroup}
	}
	if b.OneofOptionalUint32 != nil {
		x.xxx_hidden_OneofOptional = &testAllTypes_OneofOptionalUint32{*b.OneofOptionalUint32}
	}
	return m0
}

type case_TestAllTypes_OneofField protoreflect.FieldNumber

func (x case_TestAllTypes_OneofField) String() string {
	md := file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_msgTypes[0].Descriptor()
	if x == 0 {
		return "not set"
	}
	return protoimpl.X.MessageFieldStringOf(md, protoreflect.FieldNumber(x))
}

type case_TestAllTypes_OneofOptional protoreflect.FieldNumber

func (x case_TestAllTypes_OneofOptional) String() string {
	md := file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_msgTypes[0].Descriptor()
	if x == 0 {
		return "not set"
	}
	return protoimpl.X.MessageFieldStringOf(md, protoreflect.FieldNumber(x))
}

type isTestAllTypes_OneofField interface {
	isTestAllTypes_OneofField()
}

type testAllTypes_OneofUint32 struct {
	OneofUint32 uint32 `protobuf:"varint,111,opt,name=oneof_uint32,json=oneofUint32,oneof"`
}

type testAllTypes_OneofNestedMessage struct {
	OneofNestedMessage *TestAllTypes_NestedMessage `protobuf:"bytes,112,opt,name=oneof_nested_message,json=oneofNestedMessage,oneof"`
}

type testAllTypes_OneofString struct {
	OneofString string `protobuf:"bytes,113,opt,name=oneof_string,json=oneofString,oneof"`
}

type testAllTypes_OneofBytes struct {
	OneofBytes []byte `protobuf:"bytes,114,opt,name=oneof_bytes,json=oneofBytes,oneof"`
}

type testAllTypes_OneofBool struct {
	OneofBool bool `protobuf:"varint,115,opt,name=oneof_bool,json=oneofBool,oneof"`
}

type testAllTypes_OneofUint64 struct {
	OneofUint64 uint64 `protobuf:"varint,116,opt,name=oneof_uint64,json=oneofUint64,oneof"`
}

type testAllTypes_OneofFloat struct {
	OneofFloat float32 `protobuf:"fixed32,117,opt,name=oneof_float,json=oneofFloat,oneof"`
}

type testAllTypes_OneofDouble struct {
	OneofDouble float64 `protobuf:"fixed64,118,opt,name=oneof_double,json=oneofDouble,oneof"`
}

type testAllTypes_OneofEnum struct {
	OneofEnum TestAllTypes_NestedEnum `protobuf:"varint,119,opt,name=oneof_enum,json=oneofEnum,enum=opaque.goproto.proto.testeditions.TestAllTypes_NestedEnum,oneof"`
}

type testAllTypes_Oneofgroup struct {
	Oneofgroup *TestAllTypes_OneofGroup `protobuf:"group,121,opt,name=OneofGroup,json=oneofgroup,oneof"`
}

func (*testAllTypes_OneofUint32) isTestAllTypes_OneofField() {}

func (*testAllTypes_OneofNestedMessage) isTestAllTypes_OneofField() {}

func (*testAllTypes_OneofString) isTestAllTypes_OneofField() {}

func (*testAllTypes_OneofBytes) isTestAllTypes_OneofField() {}

func (*testAllTypes_OneofBool) isTestAllTypes_OneofField() {}

func (*testAllTypes_OneofUint64) isTestAllTypes_OneofField() {}

func (*testAllTypes_OneofFloat) isTestAllTypes_OneofField() {}

func (*testAllTypes_OneofDouble) isTestAllTypes_OneofField() {}

func (*testAllTypes_OneofEnum) isTestAllTypes_OneofField() {}

func (*testAllTypes_Oneofgroup) isTestAllTypes_OneofField() {}

type isTestAllTypes_OneofOptional interface {
	isTestAllTypes_OneofOptional()
}

type testAllTypes_OneofOptionalUint32 struct {
	OneofOptionalUint32 uint32 `protobuf:"varint,120,opt,name=oneof_optional_uint32,json=oneofOptionalUint32,oneof"`
}

func (*testAllTypes_OneofOptionalUint32) isTestAllTypes_OneofOptional() {}

type TestManyMessageFieldsMessage struct {
	state           protoimpl.MessageState `protogen:"opaque.v1"`
	xxx_hidden_F1   *TestAllTypes          `protobuf:"bytes,1,opt,name=f1"`
	xxx_hidden_F2   *TestAllTypes          `protobuf:"bytes,2,opt,name=f2"`
	xxx_hidden_F3   *TestAllTypes          `protobuf:"bytes,3,opt,name=f3"`
	xxx_hidden_F4   *TestAllTypes          `protobuf:"bytes,4,opt,name=f4"`
	xxx_hidden_F5   *TestAllTypes          `protobuf:"bytes,5,opt,name=f5"`
	xxx_hidden_F6   *TestAllTypes          `protobuf:"bytes,6,opt,name=f6"`
	xxx_hidden_F7   *TestAllTypes          `protobuf:"bytes,7,opt,name=f7"`
	xxx_hidden_F8   *TestAllTypes          `protobuf:"bytes,8,opt,name=f8"`
	xxx_hidden_F9   *TestAllTypes          `protobuf:"bytes,9,opt,name=f9"`
	xxx_hidden_F10  *TestAllTypes          `protobuf:"bytes,10,opt,name=f10"`
	xxx_hidden_F11  *TestAllTypes          `protobuf:"bytes,11,opt,name=f11"`
	xxx_hidden_F12  *TestAllTypes          `protobuf:"bytes,12,opt,name=f12"`
	xxx_hidden_F13  *TestAllTypes          `protobuf:"bytes,13,opt,name=f13"`
	xxx_hidden_F14  *TestAllTypes          `protobuf:"bytes,14,opt,name=f14"`
	xxx_hidden_F15  *TestAllTypes          `protobuf:"bytes,15,opt,name=f15"`
	xxx_hidden_F16  *TestAllTypes          `protobuf:"bytes,16,opt,name=f16"`
	xxx_hidden_F17  *TestAllTypes          `protobuf:"bytes,17,opt,name=f17"`
	xxx_hidden_F18  *TestAllTypes          `protobuf:"bytes,18,opt,name=f18"`
	xxx_hidden_F19  *TestAllTypes          `protobuf:"bytes,19,opt,name=f19"`
	xxx_hidden_F20  *TestAllTypes          `protobuf:"bytes,20,opt,name=f20"`
	xxx_hidden_F21  *TestAllTypes          `protobuf:"bytes,21,opt,name=f21"`
	xxx_hidden_F22  *TestAllTypes          `protobuf:"bytes,22,opt,name=f22"`
	xxx_hidden_F23  *TestAllTypes          `protobuf:"bytes,23,opt,name=f23"`
	xxx_hidden_F24  *TestAllTypes          `protobuf:"bytes,24,opt,name=f24"`
	xxx_hidden_F25  *TestAllTypes          `protobuf:"bytes,25,opt,name=f25"`
	xxx_hidden_F26  *TestAllTypes          `protobuf:"bytes,26,opt,name=f26"`
	xxx_hidden_F27  *TestAllTypes          `protobuf:"bytes,27,opt,name=f27"`
	xxx_hidden_F28  *TestAllTypes          `protobuf:"bytes,28,opt,name=f28"`
	xxx_hidden_F29  *TestAllTypes          `protobuf:"bytes,29,opt,name=f29"`
	xxx_hidden_F30  *TestAllTypes          `protobuf:"bytes,30,opt,name=f30"`
	xxx_hidden_F31  *TestAllTypes          `protobuf:"bytes,31,opt,name=f31"`
	xxx_hidden_F32  *TestAllTypes          `protobuf:"bytes,32,opt,name=f32"`
	xxx_hidden_F33  *TestAllTypes          `protobuf:"bytes,33,opt,name=f33"`
	xxx_hidden_F34  *TestAllTypes          `protobuf:"bytes,34,opt,name=f34"`
	xxx_hidden_F35  *TestAllTypes          `protobuf:"bytes,35,opt,name=f35"`
	xxx_hidden_F36  *TestAllTypes          `protobuf:"bytes,36,opt,name=f36"`
	xxx_hidden_F37  *TestAllTypes          `protobuf:"bytes,37,opt,name=f37"`
	xxx_hidden_F38  *TestAllTypes          `protobuf:"bytes,38,opt,name=f38"`
	xxx_hidden_F39  *TestAllTypes          `protobuf:"bytes,39,opt,name=f39"`
	xxx_hidden_F40  *TestAllTypes          `protobuf:"bytes,40,opt,name=f40"`
	xxx_hidden_F41  *TestAllTypes          `protobuf:"bytes,41,opt,name=f41"`
	xxx_hidden_F42  *TestAllTypes          `protobuf:"bytes,42,opt,name=f42"`
	xxx_hidden_F43  *TestAllTypes          `protobuf:"bytes,43,opt,name=f43"`
	xxx_hidden_F44  *TestAllTypes          `protobuf:"bytes,44,opt,name=f44"`
	xxx_hidden_F45  *TestAllTypes          `protobuf:"bytes,45,opt,name=f45"`
	xxx_hidden_F46  *TestAllTypes          `protobuf:"bytes,46,opt,name=f46"`
	xxx_hidden_F47  *TestAllTypes          `protobuf:"bytes,47,opt,name=f47"`
	xxx_hidden_F48  *TestAllTypes          `protobuf:"bytes,48,opt,name=f48"`
	xxx_hidden_F49  *TestAllTypes          `protobuf:"bytes,49,opt,name=f49"`
	xxx_hidden_F50  *TestAllTypes          `protobuf:"bytes,50,opt,name=f50"`
	xxx_hidden_F51  *TestAllTypes          `protobuf:"bytes,51,opt,name=f51"`
	xxx_hidden_F52  *TestAllTypes          `protobuf:"bytes,52,opt,name=f52"`
	xxx_hidden_F53  *TestAllTypes          `protobuf:"bytes,53,opt,name=f53"`
	xxx_hidden_F54  *TestAllTypes          `protobuf:"bytes,54,opt,name=f54"`
	xxx_hidden_F55  *TestAllTypes          `protobuf:"bytes,55,opt,name=f55"`
	xxx_hidden_F56  *TestAllTypes          `protobuf:"bytes,56,opt,name=f56"`
	xxx_hidden_F57  *TestAllTypes          `protobuf:"bytes,57,opt,name=f57"`
	xxx_hidden_F58  *TestAllTypes          `protobuf:"bytes,58,opt,name=f58"`
	xxx_hidden_F59  *TestAllTypes          `protobuf:"bytes,59,opt,name=f59"`
	xxx_hidden_F60  *TestAllTypes          `protobuf:"bytes,60,opt,name=f60"`
	xxx_hidden_F61  *TestAllTypes          `protobuf:"bytes,61,opt,name=f61"`
	xxx_hidden_F62  *TestAllTypes          `protobuf:"bytes,62,opt,name=f62"`
	xxx_hidden_F63  *TestAllTypes          `protobuf:"bytes,63,opt,name=f63"`
	xxx_hidden_F64  *TestAllTypes          `protobuf:"bytes,64,opt,name=f64"`
	xxx_hidden_F65  *TestAllTypes          `protobuf:"bytes,65,opt,name=f65"`
	xxx_hidden_F66  *TestAllTypes          `protobuf:"bytes,66,opt,name=f66"`
	xxx_hidden_F67  *TestAllTypes          `protobuf:"bytes,67,opt,name=f67"`
	xxx_hidden_F68  *TestAllTypes          `protobuf:"bytes,68,opt,name=f68"`
	xxx_hidden_F69  *TestAllTypes          `protobuf:"bytes,69,opt,name=f69"`
	xxx_hidden_F70  *TestAllTypes          `protobuf:"bytes,70,opt,name=f70"`
	xxx_hidden_F71  *TestAllTypes          `protobuf:"bytes,71,opt,name=f71"`
	xxx_hidden_F72  *TestAllTypes          `protobuf:"bytes,72,opt,name=f72"`
	xxx_hidden_F73  *TestAllTypes          `protobuf:"bytes,73,opt,name=f73"`
	xxx_hidden_F74  *TestAllTypes          `protobuf:"bytes,74,opt,name=f74"`
	xxx_hidden_F75  *TestAllTypes          `protobuf:"bytes,75,opt,name=f75"`
	xxx_hidden_F76  *TestAllTypes          `protobuf:"bytes,76,opt,name=f76"`
	xxx_hidden_F77  *TestAllTypes          `protobuf:"bytes,77,opt,name=f77"`
	xxx_hidden_F78  *TestAllTypes          `protobuf:"bytes,78,opt,name=f78"`
	xxx_hidden_F79  *TestAllTypes          `protobuf:"bytes,79,opt,name=f79"`
	xxx_hidden_F80  *TestAllTypes          `protobuf:"bytes,80,opt,name=f80"`
	xxx_hidden_F81  *TestAllTypes          `protobuf:"bytes,81,opt,name=f81"`
	xxx_hidden_F82  *TestAllTypes          `protobuf:"bytes,82,opt,name=f82"`
	xxx_hidden_F83  *TestAllTypes          `protobuf:"bytes,83,opt,name=f83"`
	xxx_hidden_F84  *TestAllTypes          `protobuf:"bytes,84,opt,name=f84"`
	xxx_hidden_F85  *TestAllTypes          `protobuf:"bytes,85,opt,name=f85"`
	xxx_hidden_F86  *TestAllTypes          `protobuf:"bytes,86,opt,name=f86"`
	xxx_hidden_F87  *TestAllTypes          `protobuf:"bytes,87,opt,name=f87"`
	xxx_hidden_F88  *TestAllTypes          `protobuf:"bytes,88,opt,name=f88"`
	xxx_hidden_F89  *TestAllTypes          `protobuf:"bytes,89,opt,name=f89"`
	xxx_hidden_F90  *TestAllTypes          `protobuf:"bytes,90,opt,name=f90"`
	xxx_hidden_F91  *TestAllTypes          `protobuf:"bytes,91,opt,name=f91"`
	xxx_hidden_F92  *TestAllTypes          `protobuf:"bytes,92,opt,name=f92"`
	xxx_hidden_F93  *TestAllTypes          `protobuf:"bytes,93,opt,name=f93"`
	xxx_hidden_F94  *TestAllTypes          `protobuf:"bytes,94,opt,name=f94"`
	xxx_hidden_F95  *TestAllTypes          `protobuf:"bytes,95,opt,name=f95"`
	xxx_hidden_F96  *TestAllTypes          `protobuf:"bytes,96,opt,name=f96"`
	xxx_hidden_F97  *TestAllTypes          `protobuf:"bytes,97,opt,name=f97"`
	xxx_hidden_F98  *TestAllTypes          `protobuf:"bytes,98,opt,name=f98"`
	xxx_hidden_F99  *TestAllTypes          `protobuf:"bytes,99,opt,name=f99"`
	xxx_hidden_F100 *TestAllTypes          `protobuf:"bytes,100,opt,name=f100"`
	unknownFields   protoimpl.UnknownFields
	sizeCache       protoimpl.SizeCache
}

func (x *TestManyMessageFieldsMessage) Reset() {
	*x = TestManyMessageFieldsMessage{}
	mi := &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_msgTypes[1]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *TestManyMessageFieldsMessage) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*TestManyMessageFieldsMessage) ProtoMessage() {}

func (x *TestManyMessageFieldsMessage) ProtoReflect() protoreflect.Message {
	mi := &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_msgTypes[1]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

func (x *TestManyMessageFieldsMessage) GetF1() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F1
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF2() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F2
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF3() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F3
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF4() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F4
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF5() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F5
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF6() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F6
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF7() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F7
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF8() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F8
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF9() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F9
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF10() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F10
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF11() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F11
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF12() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F12
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF13() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F13
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF14() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F14
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF15() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F15
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF16() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F16
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF17() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F17
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF18() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F18
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF19() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F19
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF20() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F20
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF21() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F21
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF22() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F22
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF23() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F23
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF24() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F24
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF25() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F25
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF26() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F26
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF27() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F27
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF28() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F28
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF29() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F29
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF30() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F30
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF31() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F31
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF32() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F32
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF33() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F33
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF34() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F34
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF35() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F35
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF36() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F36
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF37() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F37
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF38() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F38
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF39() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F39
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF40() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F40
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF41() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F41
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF42() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F42
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF43() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F43
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF44() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F44
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF45() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F45
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF46() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F46
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF47() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F47
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF48() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F48
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF49() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F49
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF50() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F50
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF51() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F51
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF52() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F52
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF53() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F53
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF54() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F54
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF55() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F55
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF56() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F56
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF57() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F57
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF58() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F58
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF59() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F59
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF60() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F60
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF61() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F61
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF62() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F62
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF63() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F63
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF64() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F64
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF65() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F65
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF66() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F66
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF67() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F67
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF68() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F68
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF69() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F69
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF70() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F70
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF71() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F71
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF72() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F72
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF73() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F73
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF74() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F74
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF75() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F75
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF76() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F76
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF77() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F77
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF78() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F78
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF79() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F79
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF80() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F80
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF81() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F81
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF82() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F82
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF83() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F83
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF84() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F84
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF85() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F85
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF86() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F86
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF87() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F87
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF88() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F88
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF89() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F89
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF90() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F90
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF91() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F91
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF92() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F92
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF93() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F93
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF94() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F94
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF95() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F95
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF96() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F96
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF97() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F97
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF98() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F98
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF99() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F99
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) GetF100() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_F100
	}
	return nil
}

func (x *TestManyMessageFieldsMessage) SetF1(v *TestAllTypes) {
	x.xxx_hidden_F1 = v
}

func (x *TestManyMessageFieldsMessage) SetF2(v *TestAllTypes) {
	x.xxx_hidden_F2 = v
}

func (x *TestManyMessageFieldsMessage) SetF3(v *TestAllTypes) {
	x.xxx_hidden_F3 = v
}

func (x *TestManyMessageFieldsMessage) SetF4(v *TestAllTypes) {
	x.xxx_hidden_F4 = v
}

func (x *TestManyMessageFieldsMessage) SetF5(v *TestAllTypes) {
	x.xxx_hidden_F5 = v
}

func (x *TestManyMessageFieldsMessage) SetF6(v *TestAllTypes) {
	x.xxx_hidden_F6 = v
}

func (x *TestManyMessageFieldsMessage) SetF7(v *TestAllTypes) {
	x.xxx_hidden_F7 = v
}

func (x *TestManyMessageFieldsMessage) SetF8(v *TestAllTypes) {
	x.xxx_hidden_F8 = v
}

func (x *TestManyMessageFieldsMessage) SetF9(v *TestAllTypes) {
	x.xxx_hidden_F9 = v
}

func (x *TestManyMessageFieldsMessage) SetF10(v *TestAllTypes) {
	x.xxx_hidden_F10 = v
}

func (x *TestManyMessageFieldsMessage) SetF11(v *TestAllTypes) {
	x.xxx_hidden_F11 = v
}

func (x *TestManyMessageFieldsMessage) SetF12(v *TestAllTypes) {
	x.xxx_hidden_F12 = v
}

func (x *TestManyMessageFieldsMessage) SetF13(v *TestAllTypes) {
	x.xxx_hidden_F13 = v
}

func (x *TestManyMessageFieldsMessage) SetF14(v *TestAllTypes) {
	x.xxx_hidden_F14 = v
}

func (x *TestManyMessageFieldsMessage) SetF15(v *TestAllTypes) {
	x.xxx_hidden_F15 = v
}

func (x *TestManyMessageFieldsMessage) SetF16(v *TestAllTypes) {
	x.xxx_hidden_F16 = v
}

func (x *TestManyMessageFieldsMessage) SetF17(v *TestAllTypes) {
	x.xxx_hidden_F17 = v
}

func (x *TestManyMessageFieldsMessage) SetF18(v *TestAllTypes) {
	x.xxx_hidden_F18 = v
}

func (x *TestManyMessageFieldsMessage) SetF19(v *TestAllTypes) {
	x.xxx_hidden_F19 = v
}

func (x *TestManyMessageFieldsMessage) SetF20(v *TestAllTypes) {
	x.xxx_hidden_F20 = v
}

func (x *TestManyMessageFieldsMessage) SetF21(v *TestAllTypes) {
	x.xxx_hidden_F21 = v
}

func (x *TestManyMessageFieldsMessage) SetF22(v *TestAllTypes) {
	x.xxx_hidden_F22 = v
}

func (x *TestManyMessageFieldsMessage) SetF23(v *TestAllTypes) {
	x.xxx_hidden_F23 = v
}

func (x *TestManyMessageFieldsMessage) SetF24(v *TestAllTypes) {
	x.xxx_hidden_F24 = v
}

func (x *TestManyMessageFieldsMessage) SetF25(v *TestAllTypes) {
	x.xxx_hidden_F25 = v
}

func (x *TestManyMessageFieldsMessage) SetF26(v *TestAllTypes) {
	x.xxx_hidden_F26 = v
}

func (x *TestManyMessageFieldsMessage) SetF27(v *TestAllTypes) {
	x.xxx_hidden_F27 = v
}

func (x *TestManyMessageFieldsMessage) SetF28(v *TestAllTypes) {
	x.xxx_hidden_F28 = v
}

func (x *TestManyMessageFieldsMessage) SetF29(v *TestAllTypes) {
	x.xxx_hidden_F29 = v
}

func (x *TestManyMessageFieldsMessage) SetF30(v *TestAllTypes) {
	x.xxx_hidden_F30 = v
}

func (x *TestManyMessageFieldsMessage) SetF31(v *TestAllTypes) {
	x.xxx_hidden_F31 = v
}

func (x *TestManyMessageFieldsMessage) SetF32(v *TestAllTypes) {
	x.xxx_hidden_F32 = v
}

func (x *TestManyMessageFieldsMessage) SetF33(v *TestAllTypes) {
	x.xxx_hidden_F33 = v
}

func (x *TestManyMessageFieldsMessage) SetF34(v *TestAllTypes) {
	x.xxx_hidden_F34 = v
}

func (x *TestManyMessageFieldsMessage) SetF35(v *TestAllTypes) {
	x.xxx_hidden_F35 = v
}

func (x *TestManyMessageFieldsMessage) SetF36(v *TestAllTypes) {
	x.xxx_hidden_F36 = v
}

func (x *TestManyMessageFieldsMessage) SetF37(v *TestAllTypes) {
	x.xxx_hidden_F37 = v
}

func (x *TestManyMessageFieldsMessage) SetF38(v *TestAllTypes) {
	x.xxx_hidden_F38 = v
}

func (x *TestManyMessageFieldsMessage) SetF39(v *TestAllTypes) {
	x.xxx_hidden_F39 = v
}

func (x *TestManyMessageFieldsMessage) SetF40(v *TestAllTypes) {
	x.xxx_hidden_F40 = v
}

func (x *TestManyMessageFieldsMessage) SetF41(v *TestAllTypes) {
	x.xxx_hidden_F41 = v
}

func (x *TestManyMessageFieldsMessage) SetF42(v *TestAllTypes) {
	x.xxx_hidden_F42 = v
}

func (x *TestManyMessageFieldsMessage) SetF43(v *TestAllTypes) {
	x.xxx_hidden_F43 = v
}

func (x *TestManyMessageFieldsMessage) SetF44(v *TestAllTypes) {
	x.xxx_hidden_F44 = v
}

func (x *TestManyMessageFieldsMessage) SetF45(v *TestAllTypes) {
	x.xxx_hidden_F45 = v
}

func (x *TestManyMessageFieldsMessage) SetF46(v *TestAllTypes) {
	x.xxx_hidden_F46 = v
}

func (x *TestManyMessageFieldsMessage) SetF47(v *TestAllTypes) {
	x.xxx_hidden_F47 = v
}

func (x *TestManyMessageFieldsMessage) SetF48(v *TestAllTypes) {
	x.xxx_hidden_F48 = v
}

func (x *TestManyMessageFieldsMessage) SetF49(v *TestAllTypes) {
	x.xxx_hidden_F49 = v
}

func (x *TestManyMessageFieldsMessage) SetF50(v *TestAllTypes) {
	x.xxx_hidden_F50 = v
}

func (x *TestManyMessageFieldsMessage) SetF51(v *TestAllTypes) {
	x.xxx_hidden_F51 = v
}

func (x *TestManyMessageFieldsMessage) SetF52(v *TestAllTypes) {
	x.xxx_hidden_F52 = v
}

func (x *TestManyMessageFieldsMessage) SetF53(v *TestAllTypes) {
	x.xxx_hidden_F53 = v
}

func (x *TestManyMessageFieldsMessage) SetF54(v *TestAllTypes) {
	x.xxx_hidden_F54 = v
}

func (x *TestManyMessageFieldsMessage) SetF55(v *TestAllTypes) {
	x.xxx_hidden_F55 = v
}

func (x *TestManyMessageFieldsMessage) SetF56(v *TestAllTypes) {
	x.xxx_hidden_F56 = v
}

func (x *TestManyMessageFieldsMessage) SetF57(v *TestAllTypes) {
	x.xxx_hidden_F57 = v
}

func (x *TestManyMessageFieldsMessage) SetF58(v *TestAllTypes) {
	x.xxx_hidden_F58 = v
}

func (x *TestManyMessageFieldsMessage) SetF59(v *TestAllTypes) {
	x.xxx_hidden_F59 = v
}

func (x *TestManyMessageFieldsMessage) SetF60(v *TestAllTypes) {
	x.xxx_hidden_F60 = v
}

func (x *TestManyMessageFieldsMessage) SetF61(v *TestAllTypes) {
	x.xxx_hidden_F61 = v
}

func (x *TestManyMessageFieldsMessage) SetF62(v *TestAllTypes) {
	x.xxx_hidden_F62 = v
}

func (x *TestManyMessageFieldsMessage) SetF63(v *TestAllTypes) {
	x.xxx_hidden_F63 = v
}

func (x *TestManyMessageFieldsMessage) SetF64(v *TestAllTypes) {
	x.xxx_hidden_F64 = v
}

func (x *TestManyMessageFieldsMessage) SetF65(v *TestAllTypes) {
	x.xxx_hidden_F65 = v
}

func (x *TestManyMessageFieldsMessage) SetF66(v *TestAllTypes) {
	x.xxx_hidden_F66 = v
}

func (x *TestManyMessageFieldsMessage) SetF67(v *TestAllTypes) {
	x.xxx_hidden_F67 = v
}

func (x *TestManyMessageFieldsMessage) SetF68(v *TestAllTypes) {
	x.xxx_hidden_F68 = v
}

func (x *TestManyMessageFieldsMessage) SetF69(v *TestAllTypes) {
	x.xxx_hidden_F69 = v
}

func (x *TestManyMessageFieldsMessage) SetF70(v *TestAllTypes) {
	x.xxx_hidden_F70 = v
}

func (x *TestManyMessageFieldsMessage) SetF71(v *TestAllTypes) {
	x.xxx_hidden_F71 = v
}

func (x *TestManyMessageFieldsMessage) SetF72(v *TestAllTypes) {
	x.xxx_hidden_F72 = v
}

func (x *TestManyMessageFieldsMessage) SetF73(v *TestAllTypes) {
	x.xxx_hidden_F73 = v
}

func (x *TestManyMessageFieldsMessage) SetF74(v *TestAllTypes) {
	x.xxx_hidden_F74 = v
}

func (x *TestManyMessageFieldsMessage) SetF75(v *TestAllTypes) {
	x.xxx_hidden_F75 = v
}

func (x *TestManyMessageFieldsMessage) SetF76(v *TestAllTypes) {
	x.xxx_hidden_F76 = v
}

func (x *TestManyMessageFieldsMessage) SetF77(v *TestAllTypes) {
	x.xxx_hidden_F77 = v
}

func (x *TestManyMessageFieldsMessage) SetF78(v *TestAllTypes) {
	x.xxx_hidden_F78 = v
}

func (x *TestManyMessageFieldsMessage) SetF79(v *TestAllTypes) {
	x.xxx_hidden_F79 = v
}

func (x *TestManyMessageFieldsMessage) SetF80(v *TestAllTypes) {
	x.xxx_hidden_F80 = v
}

func (x *TestManyMessageFieldsMessage) SetF81(v *TestAllTypes) {
	x.xxx_hidden_F81 = v
}

func (x *TestManyMessageFieldsMessage) SetF82(v *TestAllTypes) {
	x.xxx_hidden_F82 = v
}

func (x *TestManyMessageFieldsMessage) SetF83(v *TestAllTypes) {
	x.xxx_hidden_F83 = v
}

func (x *TestManyMessageFieldsMessage) SetF84(v *TestAllTypes) {
	x.xxx_hidden_F84 = v
}

func (x *TestManyMessageFieldsMessage) SetF85(v *TestAllTypes) {
	x.xxx_hidden_F85 = v
}

func (x *TestManyMessageFieldsMessage) SetF86(v *TestAllTypes) {
	x.xxx_hidden_F86 = v
}

func (x *TestManyMessageFieldsMessage) SetF87(v *TestAllTypes) {
	x.xxx_hidden_F87 = v
}

func (x *TestManyMessageFieldsMessage) SetF88(v *TestAllTypes) {
	x.xxx_hidden_F88 = v
}

func (x *TestManyMessageFieldsMessage) SetF89(v *TestAllTypes) {
	x.xxx_hidden_F89 = v
}

func (x *TestManyMessageFieldsMessage) SetF90(v *TestAllTypes) {
	x.xxx_hidden_F90 = v
}

func (x *TestManyMessageFieldsMessage) SetF91(v *TestAllTypes) {
	x.xxx_hidden_F91 = v
}

func (x *TestManyMessageFieldsMessage) SetF92(v *TestAllTypes) {
	x.xxx_hidden_F92 = v
}

func (x *TestManyMessageFieldsMessage) SetF93(v *TestAllTypes) {
	x.xxx_hidden_F93 = v
}

func (x *TestManyMessageFieldsMessage) SetF94(v *TestAllTypes) {
	x.xxx_hidden_F94 = v
}

func (x *TestManyMessageFieldsMessage) SetF95(v *TestAllTypes) {
	x.xxx_hidden_F95 = v
}

func (x *TestManyMessageFieldsMessage) SetF96(v *TestAllTypes) {
	x.xxx_hidden_F96 = v
}

func (x *TestManyMessageFieldsMessage) SetF97(v *TestAllTypes) {
	x.xxx_hidden_F97 = v
}

func (x *TestManyMessageFieldsMessage) SetF98(v *TestAllTypes) {
	x.xxx_hidden_F98 = v
}

func (x *TestManyMessageFieldsMessage) SetF99(v *TestAllTypes) {
	x.xxx_hidden_F99 = v
}

func (x *TestManyMessageFieldsMessage) SetF100(v *TestAllTypes) {
	x.xxx_hidden_F100 = v
}

func (x *TestManyMessageFieldsMessage) HasF1() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F1 != nil
}

func (x *TestManyMessageFieldsMessage) HasF2() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F2 != nil
}

func (x *TestManyMessageFieldsMessage) HasF3() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F3 != nil
}

func (x *TestManyMessageFieldsMessage) HasF4() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F4 != nil
}

func (x *TestManyMessageFieldsMessage) HasF5() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F5 != nil
}

func (x *TestManyMessageFieldsMessage) HasF6() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F6 != nil
}

func (x *TestManyMessageFieldsMessage) HasF7() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F7 != nil
}

func (x *TestManyMessageFieldsMessage) HasF8() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F8 != nil
}

func (x *TestManyMessageFieldsMessage) HasF9() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F9 != nil
}

func (x *TestManyMessageFieldsMessage) HasF10() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F10 != nil
}

func (x *TestManyMessageFieldsMessage) HasF11() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F11 != nil
}

func (x *TestManyMessageFieldsMessage) HasF12() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F12 != nil
}

func (x *TestManyMessageFieldsMessage) HasF13() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F13 != nil
}

func (x *TestManyMessageFieldsMessage) HasF14() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F14 != nil
}

func (x *TestManyMessageFieldsMessage) HasF15() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F15 != nil
}

func (x *TestManyMessageFieldsMessage) HasF16() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F16 != nil
}

func (x *TestManyMessageFieldsMessage) HasF17() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F17 != nil
}

func (x *TestManyMessageFieldsMessage) HasF18() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F18 != nil
}

func (x *TestManyMessageFieldsMessage) HasF19() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F19 != nil
}

func (x *TestManyMessageFieldsMessage) HasF20() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F20 != nil
}

func (x *TestManyMessageFieldsMessage) HasF21() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F21 != nil
}

func (x *TestManyMessageFieldsMessage) HasF22() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F22 != nil
}

func (x *TestManyMessageFieldsMessage) HasF23() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F23 != nil
}

func (x *TestManyMessageFieldsMessage) HasF24() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F24 != nil
}

func (x *TestManyMessageFieldsMessage) HasF25() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F25 != nil
}

func (x *TestManyMessageFieldsMessage) HasF26() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F26 != nil
}

func (x *TestManyMessageFieldsMessage) HasF27() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F27 != nil
}

func (x *TestManyMessageFieldsMessage) HasF28() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F28 != nil
}

func (x *TestManyMessageFieldsMessage) HasF29() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F29 != nil
}

func (x *TestManyMessageFieldsMessage) HasF30() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F30 != nil
}

func (x *TestManyMessageFieldsMessage) HasF31() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F31 != nil
}

func (x *TestManyMessageFieldsMessage) HasF32() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F32 != nil
}

func (x *TestManyMessageFieldsMessage) HasF33() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F33 != nil
}

func (x *TestManyMessageFieldsMessage) HasF34() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F34 != nil
}

func (x *TestManyMessageFieldsMessage) HasF35() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F35 != nil
}

func (x *TestManyMessageFieldsMessage) HasF36() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F36 != nil
}

func (x *TestManyMessageFieldsMessage) HasF37() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F37 != nil
}

func (x *TestManyMessageFieldsMessage) HasF38() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F38 != nil
}

func (x *TestManyMessageFieldsMessage) HasF39() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F39 != nil
}

func (x *TestManyMessageFieldsMessage) HasF40() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F40 != nil
}

func (x *TestManyMessageFieldsMessage) HasF41() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F41 != nil
}

func (x *TestManyMessageFieldsMessage) HasF42() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F42 != nil
}

func (x *TestManyMessageFieldsMessage) HasF43() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F43 != nil
}

func (x *TestManyMessageFieldsMessage) HasF44() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F44 != nil
}

func (x *TestManyMessageFieldsMessage) HasF45() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F45 != nil
}

func (x *TestManyMessageFieldsMessage) HasF46() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F46 != nil
}

func (x *TestManyMessageFieldsMessage) HasF47() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F47 != nil
}

func (x *TestManyMessageFieldsMessage) HasF48() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F48 != nil
}

func (x *TestManyMessageFieldsMessage) HasF49() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F49 != nil
}

func (x *TestManyMessageFieldsMessage) HasF50() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F50 != nil
}

func (x *TestManyMessageFieldsMessage) HasF51() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F51 != nil
}

func (x *TestManyMessageFieldsMessage) HasF52() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F52 != nil
}

func (x *TestManyMessageFieldsMessage) HasF53() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F53 != nil
}

func (x *TestManyMessageFieldsMessage) HasF54() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F54 != nil
}

func (x *TestManyMessageFieldsMessage) HasF55() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F55 != nil
}

func (x *TestManyMessageFieldsMessage) HasF56() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F56 != nil
}

func (x *TestManyMessageFieldsMessage) HasF57() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F57 != nil
}

func (x *TestManyMessageFieldsMessage) HasF58() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F58 != nil
}

func (x *TestManyMessageFieldsMessage) HasF59() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F59 != nil
}

func (x *TestManyMessageFieldsMessage) HasF60() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F60 != nil
}

func (x *TestManyMessageFieldsMessage) HasF61() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F61 != nil
}

func (x *TestManyMessageFieldsMessage) HasF62() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F62 != nil
}

func (x *TestManyMessageFieldsMessage) HasF63() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F63 != nil
}

func (x *TestManyMessageFieldsMessage) HasF64() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F64 != nil
}

func (x *TestManyMessageFieldsMessage) HasF65() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F65 != nil
}

func (x *TestManyMessageFieldsMessage) HasF66() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F66 != nil
}

func (x *TestManyMessageFieldsMessage) HasF67() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F67 != nil
}

func (x *TestManyMessageFieldsMessage) HasF68() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F68 != nil
}

func (x *TestManyMessageFieldsMessage) HasF69() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F69 != nil
}

func (x *TestManyMessageFieldsMessage) HasF70() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F70 != nil
}

func (x *TestManyMessageFieldsMessage) HasF71() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F71 != nil
}

func (x *TestManyMessageFieldsMessage) HasF72() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F72 != nil
}

func (x *TestManyMessageFieldsMessage) HasF73() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F73 != nil
}

func (x *TestManyMessageFieldsMessage) HasF74() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F74 != nil
}

func (x *TestManyMessageFieldsMessage) HasF75() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F75 != nil
}

func (x *TestManyMessageFieldsMessage) HasF76() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F76 != nil
}

func (x *TestManyMessageFieldsMessage) HasF77() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F77 != nil
}

func (x *TestManyMessageFieldsMessage) HasF78() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F78 != nil
}

func (x *TestManyMessageFieldsMessage) HasF79() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F79 != nil
}

func (x *TestManyMessageFieldsMessage) HasF80() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F80 != nil
}

func (x *TestManyMessageFieldsMessage) HasF81() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F81 != nil
}

func (x *TestManyMessageFieldsMessage) HasF82() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F82 != nil
}

func (x *TestManyMessageFieldsMessage) HasF83() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F83 != nil
}

func (x *TestManyMessageFieldsMessage) HasF84() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F84 != nil
}

func (x *TestManyMessageFieldsMessage) HasF85() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F85 != nil
}

func (x *TestManyMessageFieldsMessage) HasF86() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F86 != nil
}

func (x *TestManyMessageFieldsMessage) HasF87() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F87 != nil
}

func (x *TestManyMessageFieldsMessage) HasF88() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F88 != nil
}

func (x *TestManyMessageFieldsMessage) HasF89() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F89 != nil
}

func (x *TestManyMessageFieldsMessage) HasF90() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F90 != nil
}

func (x *TestManyMessageFieldsMessage) HasF91() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F91 != nil
}

func (x *TestManyMessageFieldsMessage) HasF92() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F92 != nil
}

func (x *TestManyMessageFieldsMessage) HasF93() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F93 != nil
}

func (x *TestManyMessageFieldsMessage) HasF94() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F94 != nil
}

func (x *TestManyMessageFieldsMessage) HasF95() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F95 != nil
}

func (x *TestManyMessageFieldsMessage) HasF96() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F96 != nil
}

func (x *TestManyMessageFieldsMessage) HasF97() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F97 != nil
}

func (x *TestManyMessageFieldsMessage) HasF98() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F98 != nil
}

func (x *TestManyMessageFieldsMessage) HasF99() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F99 != nil
}

func (x *TestManyMessageFieldsMessage) HasF100() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_F100 != nil
}

func (x *TestManyMessageFieldsMessage) ClearF1() {
	x.xxx_hidden_F1 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF2() {
	x.xxx_hidden_F2 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF3() {
	x.xxx_hidden_F3 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF4() {
	x.xxx_hidden_F4 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF5() {
	x.xxx_hidden_F5 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF6() {
	x.xxx_hidden_F6 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF7() {
	x.xxx_hidden_F7 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF8() {
	x.xxx_hidden_F8 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF9() {
	x.xxx_hidden_F9 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF10() {
	x.xxx_hidden_F10 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF11() {
	x.xxx_hidden_F11 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF12() {
	x.xxx_hidden_F12 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF13() {
	x.xxx_hidden_F13 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF14() {
	x.xxx_hidden_F14 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF15() {
	x.xxx_hidden_F15 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF16() {
	x.xxx_hidden_F16 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF17() {
	x.xxx_hidden_F17 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF18() {
	x.xxx_hidden_F18 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF19() {
	x.xxx_hidden_F19 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF20() {
	x.xxx_hidden_F20 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF21() {
	x.xxx_hidden_F21 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF22() {
	x.xxx_hidden_F22 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF23() {
	x.xxx_hidden_F23 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF24() {
	x.xxx_hidden_F24 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF25() {
	x.xxx_hidden_F25 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF26() {
	x.xxx_hidden_F26 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF27() {
	x.xxx_hidden_F27 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF28() {
	x.xxx_hidden_F28 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF29() {
	x.xxx_hidden_F29 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF30() {
	x.xxx_hidden_F30 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF31() {
	x.xxx_hidden_F31 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF32() {
	x.xxx_hidden_F32 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF33() {
	x.xxx_hidden_F33 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF34() {
	x.xxx_hidden_F34 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF35() {
	x.xxx_hidden_F35 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF36() {
	x.xxx_hidden_F36 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF37() {
	x.xxx_hidden_F37 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF38() {
	x.xxx_hidden_F38 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF39() {
	x.xxx_hidden_F39 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF40() {
	x.xxx_hidden_F40 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF41() {
	x.xxx_hidden_F41 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF42() {
	x.xxx_hidden_F42 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF43() {
	x.xxx_hidden_F43 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF44() {
	x.xxx_hidden_F44 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF45() {
	x.xxx_hidden_F45 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF46() {
	x.xxx_hidden_F46 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF47() {
	x.xxx_hidden_F47 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF48() {
	x.xxx_hidden_F48 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF49() {
	x.xxx_hidden_F49 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF50() {
	x.xxx_hidden_F50 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF51() {
	x.xxx_hidden_F51 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF52() {
	x.xxx_hidden_F52 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF53() {
	x.xxx_hidden_F53 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF54() {
	x.xxx_hidden_F54 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF55() {
	x.xxx_hidden_F55 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF56() {
	x.xxx_hidden_F56 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF57() {
	x.xxx_hidden_F57 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF58() {
	x.xxx_hidden_F58 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF59() {
	x.xxx_hidden_F59 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF60() {
	x.xxx_hidden_F60 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF61() {
	x.xxx_hidden_F61 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF62() {
	x.xxx_hidden_F62 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF63() {
	x.xxx_hidden_F63 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF64() {
	x.xxx_hidden_F64 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF65() {
	x.xxx_hidden_F65 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF66() {
	x.xxx_hidden_F66 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF67() {
	x.xxx_hidden_F67 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF68() {
	x.xxx_hidden_F68 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF69() {
	x.xxx_hidden_F69 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF70() {
	x.xxx_hidden_F70 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF71() {
	x.xxx_hidden_F71 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF72() {
	x.xxx_hidden_F72 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF73() {
	x.xxx_hidden_F73 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF74() {
	x.xxx_hidden_F74 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF75() {
	x.xxx_hidden_F75 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF76() {
	x.xxx_hidden_F76 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF77() {
	x.xxx_hidden_F77 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF78() {
	x.xxx_hidden_F78 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF79() {
	x.xxx_hidden_F79 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF80() {
	x.xxx_hidden_F80 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF81() {
	x.xxx_hidden_F81 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF82() {
	x.xxx_hidden_F82 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF83() {
	x.xxx_hidden_F83 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF84() {
	x.xxx_hidden_F84 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF85() {
	x.xxx_hidden_F85 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF86() {
	x.xxx_hidden_F86 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF87() {
	x.xxx_hidden_F87 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF88() {
	x.xxx_hidden_F88 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF89() {
	x.xxx_hidden_F89 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF90() {
	x.xxx_hidden_F90 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF91() {
	x.xxx_hidden_F91 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF92() {
	x.xxx_hidden_F92 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF93() {
	x.xxx_hidden_F93 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF94() {
	x.xxx_hidden_F94 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF95() {
	x.xxx_hidden_F95 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF96() {
	x.xxx_hidden_F96 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF97() {
	x.xxx_hidden_F97 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF98() {
	x.xxx_hidden_F98 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF99() {
	x.xxx_hidden_F99 = nil
}

func (x *TestManyMessageFieldsMessage) ClearF100() {
	x.xxx_hidden_F100 = nil
}

type TestManyMessageFieldsMessage_builder struct {
	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.

	F1   *TestAllTypes
	F2   *TestAllTypes
	F3   *TestAllTypes
	F4   *TestAllTypes
	F5   *TestAllTypes
	F6   *TestAllTypes
	F7   *TestAllTypes
	F8   *TestAllTypes
	F9   *TestAllTypes
	F10  *TestAllTypes
	F11  *TestAllTypes
	F12  *TestAllTypes
	F13  *TestAllTypes
	F14  *TestAllTypes
	F15  *TestAllTypes
	F16  *TestAllTypes
	F17  *TestAllTypes
	F18  *TestAllTypes
	F19  *TestAllTypes
	F20  *TestAllTypes
	F21  *TestAllTypes
	F22  *TestAllTypes
	F23  *TestAllTypes
	F24  *TestAllTypes
	F25  *TestAllTypes
	F26  *TestAllTypes
	F27  *TestAllTypes
	F28  *TestAllTypes
	F29  *TestAllTypes
	F30  *TestAllTypes
	F31  *TestAllTypes
	F32  *TestAllTypes
	F33  *TestAllTypes
	F34  *TestAllTypes
	F35  *TestAllTypes
	F36  *TestAllTypes
	F37  *TestAllTypes
	F38  *TestAllTypes
	F39  *TestAllTypes
	F40  *TestAllTypes
	F41  *TestAllTypes
	F42  *TestAllTypes
	F43  *TestAllTypes
	F44  *TestAllTypes
	F45  *TestAllTypes
	F46  *TestAllTypes
	F47  *TestAllTypes
	F48  *TestAllTypes
	F49  *TestAllTypes
	F50  *TestAllTypes
	F51  *TestAllTypes
	F52  *TestAllTypes
	F53  *TestAllTypes
	F54  *TestAllTypes
	F55  *TestAllTypes
	F56  *TestAllTypes
	F57  *TestAllTypes
	F58  *TestAllTypes
	F59  *TestAllTypes
	F60  *TestAllTypes
	F61  *TestAllTypes
	F62  *TestAllTypes
	F63  *TestAllTypes
	F64  *TestAllTypes
	F65  *TestAllTypes
	F66  *TestAllTypes
	F67  *TestAllTypes
	F68  *TestAllTypes
	F69  *TestAllTypes
	F70  *TestAllTypes
	F71  *TestAllTypes
	F72  *TestAllTypes
	F73  *TestAllTypes
	F74  *TestAllTypes
	F75  *TestAllTypes
	F76  *TestAllTypes
	F77  *TestAllTypes
	F78  *TestAllTypes
	F79  *TestAllTypes
	F80  *TestAllTypes
	F81  *TestAllTypes
	F82  *TestAllTypes
	F83  *TestAllTypes
	F84  *TestAllTypes
	F85  *TestAllTypes
	F86  *TestAllTypes
	F87  *TestAllTypes
	F88  *TestAllTypes
	F89  *TestAllTypes
	F90  *TestAllTypes
	F91  *TestAllTypes
	F92  *TestAllTypes
	F93  *TestAllTypes
	F94  *TestAllTypes
	F95  *TestAllTypes
	F96  *TestAllTypes
	F97  *TestAllTypes
	F98  *TestAllTypes
	F99  *TestAllTypes
	F100 *TestAllTypes
}

func (b0 TestManyMessageFieldsMessage_builder) Build() *TestManyMessageFieldsMessage {
	m0 := &TestManyMessageFieldsMessage{}
	b, x := &b0, m0
	_, _ = b, x
	x.xxx_hidden_F1 = b.F1
	x.xxx_hidden_F2 = b.F2
	x.xxx_hidden_F3 = b.F3
	x.xxx_hidden_F4 = b.F4
	x.xxx_hidden_F5 = b.F5
	x.xxx_hidden_F6 = b.F6
	x.xxx_hidden_F7 = b.F7
	x.xxx_hidden_F8 = b.F8
	x.xxx_hidden_F9 = b.F9
	x.xxx_hidden_F10 = b.F10
	x.xxx_hidden_F11 = b.F11
	x.xxx_hidden_F12 = b.F12
	x.xxx_hidden_F13 = b.F13
	x.xxx_hidden_F14 = b.F14
	x.xxx_hidden_F15 = b.F15
	x.xxx_hidden_F16 = b.F16
	x.xxx_hidden_F17 = b.F17
	x.xxx_hidden_F18 = b.F18
	x.xxx_hidden_F19 = b.F19
	x.xxx_hidden_F20 = b.F20
	x.xxx_hidden_F21 = b.F21
	x.xxx_hidden_F22 = b.F22
	x.xxx_hidden_F23 = b.F23
	x.xxx_hidden_F24 = b.F24
	x.xxx_hidden_F25 = b.F25
	x.xxx_hidden_F26 = b.F26
	x.xxx_hidden_F27 = b.F27
	x.xxx_hidden_F28 = b.F28
	x.xxx_hidden_F29 = b.F29
	x.xxx_hidden_F30 = b.F30
	x.xxx_hidden_F31 = b.F31
	x.xxx_hidden_F32 = b.F32
	x.xxx_hidden_F33 = b.F33
	x.xxx_hidden_F34 = b.F34
	x.xxx_hidden_F35 = b.F35
	x.xxx_hidden_F36 = b.F36
	x.xxx_hidden_F37 = b.F37
	x.xxx_hidden_F38 = b.F38
	x.xxx_hidden_F39 = b.F39
	x.xxx_hidden_F40 = b.F40
	x.xxx_hidden_F41 = b.F41
	x.xxx_hidden_F42 = b.F42
	x.xxx_hidden_F43 = b.F43
	x.xxx_hidden_F44 = b.F44
	x.xxx_hidden_F45 = b.F45
	x.xxx_hidden_F46 = b.F46
	x.xxx_hidden_F47 = b.F47
	x.xxx_hidden_F48 = b.F48
	x.xxx_hidden_F49 = b.F49
	x.xxx_hidden_F50 = b.F50
	x.xxx_hidden_F51 = b.F51
	x.xxx_hidden_F52 = b.F52
	x.xxx_hidden_F53 = b.F53
	x.xxx_hidden_F54 = b.F54
	x.xxx_hidden_F55 = b.F55
	x.xxx_hidden_F56 = b.F56
	x.xxx_hidden_F57 = b.F57
	x.xxx_hidden_F58 = b.F58
	x.xxx_hidden_F59 = b.F59
	x.xxx_hidden_F60 = b.F60
	x.xxx_hidden_F61 = b.F61
	x.xxx_hidden_F62 = b.F62
	x.xxx_hidden_F63 = b.F63
	x.xxx_hidden_F64 = b.F64
	x.xxx_hidden_F65 = b.F65
	x.xxx_hidden_F66 = b.F66
	x.xxx_hidden_F67 = b.F67
	x.xxx_hidden_F68 = b.F68
	x.xxx_hidden_F69 = b.F69
	x.xxx_hidden_F70 = b.F70
	x.xxx_hidden_F71 = b.F71
	x.xxx_hidden_F72 = b.F72
	x.xxx_hidden_F73 = b.F73
	x.xxx_hidden_F74 = b.F74
	x.xxx_hidden_F75 = b.F75
	x.xxx_hidden_F76 = b.F76
	x.xxx_hidden_F77 = b.F77
	x.xxx_hidden_F78 = b.F78
	x.xxx_hidden_F79 = b.F79
	x.xxx_hidden_F80 = b.F80
	x.xxx_hidden_F81 = b.F81
	x.xxx_hidden_F82 = b.F82
	x.xxx_hidden_F83 = b.F83
	x.xxx_hidden_F84 = b.F84
	x.xxx_hidden_F85 = b.F85
	x.xxx_hidden_F86 = b.F86
	x.xxx_hidden_F87 = b.F87
	x.xxx_hidden_F88 = b.F88
	x.xxx_hidden_F89 = b.F89
	x.xxx_hidden_F90 = b.F90
	x.xxx_hidden_F91 = b.F91
	x.xxx_hidden_F92 = b.F92
	x.xxx_hidden_F93 = b.F93
	x.xxx_hidden_F94 = b.F94
	x.xxx_hidden_F95 = b.F95
	x.xxx_hidden_F96 = b.F96
	x.xxx_hidden_F97 = b.F97
	x.xxx_hidden_F98 = b.F98
	x.xxx_hidden_F99 = b.F99
	x.xxx_hidden_F100 = b.F100
	return m0
}

type ForeignMessage struct {
	state                  protoimpl.MessageState `protogen:"opaque.v1"`
	xxx_hidden_C           int32                  `protobuf:"varint,1,opt,name=c"`
	xxx_hidden_D           int32                  `protobuf:"varint,2,opt,name=d"`
	XXX_raceDetectHookData protoimpl.RaceDetectHookData
	XXX_presence           [1]uint32
	unknownFields          protoimpl.UnknownFields
	sizeCache              protoimpl.SizeCache
}

func (x *ForeignMessage) Reset() {
	*x = ForeignMessage{}
	mi := &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_msgTypes[2]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *ForeignMessage) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*ForeignMessage) ProtoMessage() {}

func (x *ForeignMessage) ProtoReflect() protoreflect.Message {
	mi := &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_msgTypes[2]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

func (x *ForeignMessage) GetC() int32 {
	if x != nil {
		return x.xxx_hidden_C
	}
	return 0
}

func (x *ForeignMessage) GetD() int32 {
	if x != nil {
		return x.xxx_hidden_D
	}
	return 0
}

func (x *ForeignMessage) SetC(v int32) {
	x.xxx_hidden_C = v
	protoimpl.X.SetPresent(&(x.XXX_presence[0]), 0, 2)
}

func (x *ForeignMessage) SetD(v int32) {
	x.xxx_hidden_D = v
	protoimpl.X.SetPresent(&(x.XXX_presence[0]), 1, 2)
}

func (x *ForeignMessage) HasC() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[0]), 0)
}

func (x *ForeignMessage) HasD() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[0]), 1)
}

func (x *ForeignMessage) ClearC() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[0]), 0)
	x.xxx_hidden_C = 0
}

func (x *ForeignMessage) ClearD() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[0]), 1)
	x.xxx_hidden_D = 0
}

type ForeignMessage_builder struct {
	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.

	C *int32
	D *int32
}

func (b0 ForeignMessage_builder) Build() *ForeignMessage {
	m0 := &ForeignMessage{}
	b, x := &b0, m0
	_, _ = b, x
	if b.C != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 0, 2)
		x.xxx_hidden_C = *b.C
	}
	if b.D != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 1, 2)
		x.xxx_hidden_D = *b.D
	}
	return m0
}

type TestRequired struct {
	state                    protoimpl.MessageState `protogen:"opaque.v1"`
	xxx_hidden_RequiredField int32                  `protobuf:"varint,1,req,name=required_field,json=requiredField"`
	XXX_raceDetectHookData   protoimpl.RaceDetectHookData
	XXX_presence             [1]uint32
	unknownFields            protoimpl.UnknownFields
	sizeCache                protoimpl.SizeCache
}

func (x *TestRequired) Reset() {
	*x = TestRequired{}
	mi := &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_msgTypes[3]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *TestRequired) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*TestRequired) ProtoMessage() {}

func (x *TestRequired) ProtoReflect() protoreflect.Message {
	mi := &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_msgTypes[3]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

func (x *TestRequired) GetRequiredField() int32 {
	if x != nil {
		return x.xxx_hidden_RequiredField
	}
	return 0
}

func (x *TestRequired) SetRequiredField(v int32) {
	x.xxx_hidden_RequiredField = v
	protoimpl.X.SetPresent(&(x.XXX_presence[0]), 0, 1)
}

func (x *TestRequired) HasRequiredField() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[0]), 0)
}

func (x *TestRequired) ClearRequiredField() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[0]), 0)
	x.xxx_hidden_RequiredField = 0
}

type TestRequired_builder struct {
	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.

	RequiredField *int32
}

func (b0 TestRequired_builder) Build() *TestRequired {
	m0 := &TestRequired{}
	b, x := &b0, m0
	_, _ = b, x
	if b.RequiredField != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 0, 1)
		x.xxx_hidden_RequiredField = *b.RequiredField
	}
	return m0
}

type TestRequiredForeign struct {
	state                      protoimpl.MessageState           `protogen:"opaque.v1"`
	xxx_hidden_OptionalMessage *TestRequired                    `protobuf:"bytes,1,opt,name=optional_message,json=optionalMessage"`
	xxx_hidden_RepeatedMessage *[]*TestRequired                 `protobuf:"bytes,2,rep,name=repeated_message,json=repeatedMessage"`
	xxx_hidden_MapMessage      map[int32]*TestRequired          `protobuf:"bytes,3,rep,name=map_message,json=mapMessage" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
	xxx_hidden_OneofField      isTestRequiredForeign_OneofField `protobuf_oneof:"oneof_field"`
	unknownFields              protoimpl.UnknownFields
	sizeCache                  protoimpl.SizeCache
}

func (x *TestRequiredForeign) Reset() {
	*x = TestRequiredForeign{}
	mi := &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_msgTypes[4]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *TestRequiredForeign) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*TestRequiredForeign) ProtoMessage() {}

func (x *TestRequiredForeign) ProtoReflect() protoreflect.Message {
	mi := &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_msgTypes[4]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

func (x *TestRequiredForeign) GetOptionalMessage() *TestRequired {
	if x != nil {
		return x.xxx_hidden_OptionalMessage
	}
	return nil
}

func (x *TestRequiredForeign) GetRepeatedMessage() []*TestRequired {
	if x != nil {
		if x.xxx_hidden_RepeatedMessage != nil {
			return *x.xxx_hidden_RepeatedMessage
		}
	}
	return nil
}

func (x *TestRequiredForeign) GetMapMessage() map[int32]*TestRequired {
	if x != nil {
		return x.xxx_hidden_MapMessage
	}
	return nil
}

func (x *TestRequiredForeign) GetOneofMessage() *TestRequired {
	if x != nil {
		if x, ok := x.xxx_hidden_OneofField.(*testRequiredForeign_OneofMessage); ok {
			return x.OneofMessage
		}
	}
	return nil
}

func (x *TestRequiredForeign) SetOptionalMessage(v *TestRequired) {
	x.xxx_hidden_OptionalMessage = v
}

func (x *TestRequiredForeign) SetRepeatedMessage(v []*TestRequired) {
	x.xxx_hidden_RepeatedMessage = &v
}

func (x *TestRequiredForeign) SetMapMessage(v map[int32]*TestRequired) {
	x.xxx_hidden_MapMessage = v
}

func (x *TestRequiredForeign) SetOneofMessage(v *TestRequired) {
	if v == nil {
		x.xxx_hidden_OneofField = nil
		return
	}
	x.xxx_hidden_OneofField = &testRequiredForeign_OneofMessage{v}
}

func (x *TestRequiredForeign) HasOptionalMessage() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_OptionalMessage != nil
}

func (x *TestRequiredForeign) HasOneofField() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_OneofField != nil
}

func (x *TestRequiredForeign) HasOneofMessage() bool {
	if x == nil {
		return false
	}
	_, ok := x.xxx_hidden_OneofField.(*testRequiredForeign_OneofMessage)
	return ok
}

func (x *TestRequiredForeign) ClearOptionalMessage() {
	x.xxx_hidden_OptionalMessage = nil
}

func (x *TestRequiredForeign) ClearOneofField() {
	x.xxx_hidden_OneofField = nil
}

func (x *TestRequiredForeign) ClearOneofMessage() {
	if _, ok := x.xxx_hidden_OneofField.(*testRequiredForeign_OneofMessage); ok {
		x.xxx_hidden_OneofField = nil
	}
}

const TestRequiredForeign_OneofField_not_set_case case_TestRequiredForeign_OneofField = 0
const TestRequiredForeign_OneofMessage_case case_TestRequiredForeign_OneofField = 4

func (x *TestRequiredForeign) WhichOneofField() case_TestRequiredForeign_OneofField {
	if x == nil {
		return TestRequiredForeign_OneofField_not_set_case
	}
	switch x.xxx_hidden_OneofField.(type) {
	case *testRequiredForeign_OneofMessage:
		return TestRequiredForeign_OneofMessage_case
	default:
		return TestRequiredForeign_OneofField_not_set_case
	}
}

type TestRequiredForeign_builder struct {
	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.

	OptionalMessage *TestRequired
	RepeatedMessage []*TestRequired
	MapMessage      map[int32]*TestRequired
	// Fields of oneof xxx_hidden_OneofField:
	OneofMessage *TestRequired
	// -- end of xxx_hidden_OneofField
}

func (b0 TestRequiredForeign_builder) Build() *TestRequiredForeign {
	m0 := &TestRequiredForeign{}
	b, x := &b0, m0
	_, _ = b, x
	x.xxx_hidden_OptionalMessage = b.OptionalMessage
	x.xxx_hidden_RepeatedMessage = &b.RepeatedMessage
	x.xxx_hidden_MapMessage = b.MapMessage
	if b.OneofMessage != nil {
		x.xxx_hidden_OneofField = &testRequiredForeign_OneofMessage{b.OneofMessage}
	}
	return m0
}

type case_TestRequiredForeign_OneofField protoreflect.FieldNumber

func (x case_TestRequiredForeign_OneofField) String() string {
	md := file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_msgTypes[4].Descriptor()
	if x == 0 {
		return "not set"
	}
	return protoimpl.X.MessageFieldStringOf(md, protoreflect.FieldNumber(x))
}

type isTestRequiredForeign_OneofField interface {
	isTestRequiredForeign_OneofField()
}

type testRequiredForeign_OneofMessage struct {
	OneofMessage *TestRequired `protobuf:"bytes,4,opt,name=oneof_message,json=oneofMessage,oneof"`
}

func (*testRequiredForeign_OneofMessage) isTestRequiredForeign_OneofField() {}

type TestRequiredGroupFields struct {
	state                    protoimpl.MessageState                    `protogen:"opaque.v1"`
	xxx_hidden_Optionalgroup *TestRequiredGroupFields_OptionalGroup    `protobuf:"group,1,opt,name=OptionalGroup,json=optionalgroup"`
	xxx_hidden_Repeatedgroup *[]*TestRequiredGroupFields_RepeatedGroup `protobuf:"group,3,rep,name=RepeatedGroup,json=repeatedgroup"`
	unknownFields            protoimpl.UnknownFields
	sizeCache                protoimpl.SizeCache
}

func (x *TestRequiredGroupFields) Reset() {
	*x = TestRequiredGroupFields{}
	mi := &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_msgTypes[5]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *TestRequiredGroupFields) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*TestRequiredGroupFields) ProtoMessage() {}

func (x *TestRequiredGroupFields) ProtoReflect() protoreflect.Message {
	mi := &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_msgTypes[5]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

func (x *TestRequiredGroupFields) GetOptionalgroup() *TestRequiredGroupFields_OptionalGroup {
	if x != nil {
		return x.xxx_hidden_Optionalgroup
	}
	return nil
}

func (x *TestRequiredGroupFields) GetRepeatedgroup() []*TestRequiredGroupFields_RepeatedGroup {
	if x != nil {
		if x.xxx_hidden_Repeatedgroup != nil {
			return *x.xxx_hidden_Repeatedgroup
		}
	}
	return nil
}

func (x *TestRequiredGroupFields) SetOptionalgroup(v *TestRequiredGroupFields_OptionalGroup) {
	x.xxx_hidden_Optionalgroup = v
}

func (x *TestRequiredGroupFields) SetRepeatedgroup(v []*TestRequiredGroupFields_RepeatedGroup) {
	x.xxx_hidden_Repeatedgroup = &v
}

func (x *TestRequiredGroupFields) HasOptionalgroup() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_Optionalgroup != nil
}

func (x *TestRequiredGroupFields) ClearOptionalgroup() {
	x.xxx_hidden_Optionalgroup = nil
}

type TestRequiredGroupFields_builder struct {
	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.

	Optionalgroup *TestRequiredGroupFields_OptionalGroup
	Repeatedgroup []*TestRequiredGroupFields_RepeatedGroup
}

func (b0 TestRequiredGroupFields_builder) Build() *TestRequiredGroupFields {
	m0 := &TestRequiredGroupFields{}
	b, x := &b0, m0
	_, _ = b, x
	x.xxx_hidden_Optionalgroup = b.Optionalgroup
	x.xxx_hidden_Repeatedgroup = &b.Repeatedgroup
	return m0
}

type TestRequiredLazy struct {
	state                          protoimpl.MessageState `protogen:"opaque.v1"`
	xxx_hidden_OptionalLazyMessage *TestRequired          `protobuf:"bytes,1,opt,name=optional_lazy_message,json=optionalLazyMessage"`
	// Deprecated: Do not use. This will be deleted in the near future.
	XXX_lazyUnmarshalInfo  protoimpl.LazyUnmarshalInfo
	XXX_raceDetectHookData protoimpl.RaceDetectHookData
	XXX_presence           [1]uint32
	unknownFields          protoimpl.UnknownFields
	sizeCache              protoimpl.SizeCache
}

func (x *TestRequiredLazy) Reset() {
	*x = TestRequiredLazy{}
	mi := &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_msgTypes[6]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *TestRequiredLazy) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*TestRequiredLazy) ProtoMessage() {}

func (x *TestRequiredLazy) ProtoReflect() protoreflect.Message {
	mi := &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_msgTypes[6]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

func (x *TestRequiredLazy) GetOptionalLazyMessage() *TestRequired {
	if x != nil {
		if protoimpl.X.Present(&(x.XXX_presence[0]), 0) {
			if protoimpl.X.AtomicCheckPointerIsNil(&x.xxx_hidden_OptionalLazyMessage) {
				protoimpl.X.UnmarshalField(x, 1)
			}
			var rv *TestRequired
			protoimpl.X.AtomicLoadPointer(protoimpl.Pointer(&x.xxx_hidden_OptionalLazyMessage), protoimpl.Pointer(&rv))
			return rv
		}
	}
	return nil
}

func (x *TestRequiredLazy) SetOptionalLazyMessage(v *TestRequired) {
	protoimpl.X.AtomicSetPointer(&x.xxx_hidden_OptionalLazyMessage, v)
	if v == nil {
		protoimpl.X.ClearPresent(&(x.XXX_presence[0]), 0)
	} else {
		protoimpl.X.SetPresent(&(x.XXX_presence[0]), 0, 1)
	}
}

func (x *TestRequiredLazy) HasOptionalLazyMessage() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[0]), 0)
}

func (x *TestRequiredLazy) ClearOptionalLazyMessage() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[0]), 0)
	protoimpl.X.AtomicSetPointer(&x.xxx_hidden_OptionalLazyMessage, (*TestRequired)(nil))
}

type TestRequiredLazy_builder struct {
	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.

	OptionalLazyMessage *TestRequired
}

func (b0 TestRequiredLazy_builder) Build() *TestRequiredLazy {
	m0 := &TestRequiredLazy{}
	b, x := &b0, m0
	_, _ = b, x
	if b.OptionalLazyMessage != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 0, 1)
		x.xxx_hidden_OptionalLazyMessage = b.OptionalLazyMessage
	}
	return m0
}

type TestPackedTypes struct {
	state                     protoimpl.MessageState `protogen:"opaque.v1"`
	xxx_hidden_PackedInt32    []int32                `protobuf:"varint,90,rep,packed,name=packed_int32,json=packedInt32"`
	xxx_hidden_PackedInt64    []int64                `protobuf:"varint,91,rep,packed,name=packed_int64,json=packedInt64"`
	xxx_hidden_PackedUint32   []uint32               `protobuf:"varint,92,rep,packed,name=packed_uint32,json=packedUint32"`
	xxx_hidden_PackedUint64   []uint64               `protobuf:"varint,93,rep,packed,name=packed_uint64,json=packedUint64"`
	xxx_hidden_PackedSint32   []int32                `protobuf:"zigzag32,94,rep,packed,name=packed_sint32,json=packedSint32"`
	xxx_hidden_PackedSint64   []int64                `protobuf:"zigzag64,95,rep,packed,name=packed_sint64,json=packedSint64"`
	xxx_hidden_PackedFixed32  []uint32               `protobuf:"fixed32,96,rep,packed,name=packed_fixed32,json=packedFixed32"`
	xxx_hidden_PackedFixed64  []uint64               `protobuf:"fixed64,97,rep,packed,name=packed_fixed64,json=packedFixed64"`
	xxx_hidden_PackedSfixed32 []int32                `protobuf:"fixed32,98,rep,packed,name=packed_sfixed32,json=packedSfixed32"`
	xxx_hidden_PackedSfixed64 []int64                `protobuf:"fixed64,99,rep,packed,name=packed_sfixed64,json=packedSfixed64"`
	xxx_hidden_PackedFloat    []float32              `protobuf:"fixed32,100,rep,packed,name=packed_float,json=packedFloat"`
	xxx_hidden_PackedDouble   []float64              `protobuf:"fixed64,101,rep,packed,name=packed_double,json=packedDouble"`
	xxx_hidden_PackedBool     []bool                 `protobuf:"varint,102,rep,packed,name=packed_bool,json=packedBool"`
	xxx_hidden_PackedEnum     []ForeignEnum          `protobuf:"varint,103,rep,packed,name=packed_enum,json=packedEnum,enum=opaque.goproto.proto.testeditions.ForeignEnum"`
	unknownFields             protoimpl.UnknownFields
	sizeCache                 protoimpl.SizeCache
}

func (x *TestPackedTypes) Reset() {
	*x = TestPackedTypes{}
	mi := &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_msgTypes[7]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *TestPackedTypes) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*TestPackedTypes) ProtoMessage() {}

func (x *TestPackedTypes) ProtoReflect() protoreflect.Message {
	mi := &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_msgTypes[7]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

func (x *TestPackedTypes) GetPackedInt32() []int32 {
	if x != nil {
		return x.xxx_hidden_PackedInt32
	}
	return nil
}

func (x *TestPackedTypes) GetPackedInt64() []int64 {
	if x != nil {
		return x.xxx_hidden_PackedInt64
	}
	return nil
}

func (x *TestPackedTypes) GetPackedUint32() []uint32 {
	if x != nil {
		return x.xxx_hidden_PackedUint32
	}
	return nil
}

func (x *TestPackedTypes) GetPackedUint64() []uint64 {
	if x != nil {
		return x.xxx_hidden_PackedUint64
	}
	return nil
}

func (x *TestPackedTypes) GetPackedSint32() []int32 {
	if x != nil {
		return x.xxx_hidden_PackedSint32
	}
	return nil
}

func (x *TestPackedTypes) GetPackedSint64() []int64 {
	if x != nil {
		return x.xxx_hidden_PackedSint64
	}
	return nil
}

func (x *TestPackedTypes) GetPackedFixed32() []uint32 {
	if x != nil {
		return x.xxx_hidden_PackedFixed32
	}
	return nil
}

func (x *TestPackedTypes) GetPackedFixed64() []uint64 {
	if x != nil {
		return x.xxx_hidden_PackedFixed64
	}
	return nil
}

func (x *TestPackedTypes) GetPackedSfixed32() []int32 {
	if x != nil {
		return x.xxx_hidden_PackedSfixed32
	}
	return nil
}

func (x *TestPackedTypes) GetPackedSfixed64() []int64 {
	if x != nil {
		return x.xxx_hidden_PackedSfixed64
	}
	return nil
}

func (x *TestPackedTypes) GetPackedFloat() []float32 {
	if x != nil {
		return x.xxx_hidden_PackedFloat
	}
	return nil
}

func (x *TestPackedTypes) GetPackedDouble() []float64 {
	if x != nil {
		return x.xxx_hidden_PackedDouble
	}
	return nil
}

func (x *TestPackedTypes) GetPackedBool() []bool {
	if x != nil {
		return x.xxx_hidden_PackedBool
	}
	return nil
}

func (x *TestPackedTypes) GetPackedEnum() []ForeignEnum {
	if x != nil {
		return x.xxx_hidden_PackedEnum
	}
	return nil
}

func (x *TestPackedTypes) SetPackedInt32(v []int32) {
	x.xxx_hidden_PackedInt32 = v
}

func (x *TestPackedTypes) SetPackedInt64(v []int64) {
	x.xxx_hidden_PackedInt64 = v
}

func (x *TestPackedTypes) SetPackedUint32(v []uint32) {
	x.xxx_hidden_PackedUint32 = v
}

func (x *TestPackedTypes) SetPackedUint64(v []uint64) {
	x.xxx_hidden_PackedUint64 = v
}

func (x *TestPackedTypes) SetPackedSint32(v []int32) {
	x.xxx_hidden_PackedSint32 = v
}

func (x *TestPackedTypes) SetPackedSint64(v []int64) {
	x.xxx_hidden_PackedSint64 = v
}

func (x *TestPackedTypes) SetPackedFixed32(v []uint32) {
	x.xxx_hidden_PackedFixed32 = v
}

func (x *TestPackedTypes) SetPackedFixed64(v []uint64) {
	x.xxx_hidden_PackedFixed64 = v
}

func (x *TestPackedTypes) SetPackedSfixed32(v []int32) {
	x.xxx_hidden_PackedSfixed32 = v
}

func (x *TestPackedTypes) SetPackedSfixed64(v []int64) {
	x.xxx_hidden_PackedSfixed64 = v
}

func (x *TestPackedTypes) SetPackedFloat(v []float32) {
	x.xxx_hidden_PackedFloat = v
}

func (x *TestPackedTypes) SetPackedDouble(v []float64) {
	x.xxx_hidden_PackedDouble = v
}

func (x *TestPackedTypes) SetPackedBool(v []bool) {
	x.xxx_hidden_PackedBool = v
}

func (x *TestPackedTypes) SetPackedEnum(v []ForeignEnum) {
	x.xxx_hidden_PackedEnum = v
}

type TestPackedTypes_builder struct {
	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.

	PackedInt32    []int32
	PackedInt64    []int64
	PackedUint32   []uint32
	PackedUint64   []uint64
	PackedSint32   []int32
	PackedSint64   []int64
	PackedFixed32  []uint32
	PackedFixed64  []uint64
	PackedSfixed32 []int32
	PackedSfixed64 []int64
	PackedFloat    []float32
	PackedDouble   []float64
	PackedBool     []bool
	PackedEnum     []ForeignEnum
}

func (b0 TestPackedTypes_builder) Build() *TestPackedTypes {
	m0 := &TestPackedTypes{}
	b, x := &b0, m0
	_, _ = b, x
	x.xxx_hidden_PackedInt32 = b.PackedInt32
	x.xxx_hidden_PackedInt64 = b.PackedInt64
	x.xxx_hidden_PackedUint32 = b.PackedUint32
	x.xxx_hidden_PackedUint64 = b.PackedUint64
	x.xxx_hidden_PackedSint32 = b.PackedSint32
	x.xxx_hidden_PackedSint64 = b.PackedSint64
	x.xxx_hidden_PackedFixed32 = b.PackedFixed32
	x.xxx_hidden_PackedFixed64 = b.PackedFixed64
	x.xxx_hidden_PackedSfixed32 = b.PackedSfixed32
	x.xxx_hidden_PackedSfixed64 = b.PackedSfixed64
	x.xxx_hidden_PackedFloat = b.PackedFloat
	x.xxx_hidden_PackedDouble = b.PackedDouble
	x.xxx_hidden_PackedBool = b.PackedBool
	x.xxx_hidden_PackedEnum = b.PackedEnum
	return m0
}

type TestPackedExtensions struct {
	state           protoimpl.MessageState `protogen:"opaque.v1"`
	extensionFields protoimpl.ExtensionFields
	unknownFields   protoimpl.UnknownFields
	sizeCache       protoimpl.SizeCache
}

func (x *TestPackedExtensions) Reset() {
	*x = TestPackedExtensions{}
	mi := &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_msgTypes[8]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *TestPackedExtensions) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*TestPackedExtensions) ProtoMessage() {}

func (x *TestPackedExtensions) ProtoReflect() protoreflect.Message {
	mi := &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_msgTypes[8]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

type TestPackedExtensions_builder struct {
	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.

}

func (b0 TestPackedExtensions_builder) Build() *TestPackedExtensions {
	m0 := &TestPackedExtensions{}
	b, x := &b0, m0
	_, _ = b, x
	return m0
}

type RemoteDefault struct {
	state                  protoimpl.MessageState `protogen:"opaque.v1"`
	xxx_hidden_Default     enums_opaque.Enum      `protobuf:"varint,1,opt,name=default,enum=opaque.goproto.proto.enums.Enum"`
	xxx_hidden_Zero        enums_opaque.Enum      `protobuf:"varint,2,opt,name=zero,enum=opaque.goproto.proto.enums.Enum,def=0"`
	xxx_hidden_One         enums_opaque.Enum      `protobuf:"varint,3,opt,name=one,enum=opaque.goproto.proto.enums.Enum,def=1"`
	xxx_hidden_Elevent     enums_opaque.Enum      `protobuf:"varint,4,opt,name=elevent,enum=opaque.goproto.proto.enums.Enum,def=11"`
	xxx_hidden_Seventeen   enums_opaque.Enum      `protobuf:"varint,5,opt,name=seventeen,enum=opaque.goproto.proto.enums.Enum,def=17"`
	xxx_hidden_Thirtyseven enums_opaque.Enum      `protobuf:"varint,6,opt,name=thirtyseven,enum=opaque.goproto.proto.enums.Enum,def=37"`
	xxx_hidden_Sixtyseven  enums_opaque.Enum      `protobuf:"varint,7,opt,name=sixtyseven,enum=opaque.goproto.proto.enums.Enum,def=67"`
	xxx_hidden_Negative    enums_opaque.Enum      `protobuf:"varint,8,opt,name=negative,enum=opaque.goproto.proto.enums.Enum,def=-1"`
	XXX_raceDetectHookData protoimpl.RaceDetectHookData
	XXX_presence           [1]uint32
	unknownFields          protoimpl.UnknownFields
	sizeCache              protoimpl.SizeCache
}

// Default values for RemoteDefault fields.
const (
	Default_RemoteDefault_Zero        = enums_opaque.Enum(0)  // enums_opaque.Enum_ZERO
	Default_RemoteDefault_One         = enums_opaque.Enum(1)  // enums_opaque.Enum_ONE
	Default_RemoteDefault_Elevent     = enums_opaque.Enum(11) // enums_opaque.Enum_ELEVENT
	Default_RemoteDefault_Seventeen   = enums_opaque.Enum(17) // enums_opaque.Enum_SEVENTEEN
	Default_RemoteDefault_Thirtyseven = enums_opaque.Enum(37) // enums_opaque.Enum_THIRTYSEVEN
	Default_RemoteDefault_Sixtyseven  = enums_opaque.Enum(67) // enums_opaque.Enum_SIXTYSEVEN
	Default_RemoteDefault_Negative    = enums_opaque.Enum(-1) // enums_opaque.Enum_NEGATIVE
)

func (x *RemoteDefault) Reset() {
	*x = RemoteDefault{}
	mi := &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_msgTypes[9]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *RemoteDefault) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*RemoteDefault) ProtoMessage() {}

func (x *RemoteDefault) ProtoReflect() protoreflect.Message {
	mi := &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_msgTypes[9]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

func (x *RemoteDefault) GetDefault() enums_opaque.Enum {
	if x != nil {
		if protoimpl.X.Present(&(x.XXX_presence[0]), 0) {
			return x.xxx_hidden_Default
		}
	}
	return enums_opaque.Enum(1337)
}

func (x *RemoteDefault) GetZero() enums_opaque.Enum {
	if x != nil {
		if protoimpl.X.Present(&(x.XXX_presence[0]), 1) {
			return x.xxx_hidden_Zero
		}
	}
	return Default_RemoteDefault_Zero
}

func (x *RemoteDefault) GetOne() enums_opaque.Enum {
	if x != nil {
		if protoimpl.X.Present(&(x.XXX_presence[0]), 2) {
			return x.xxx_hidden_One
		}
	}
	return Default_RemoteDefault_One
}

func (x *RemoteDefault) GetElevent() enums_opaque.Enum {
	if x != nil {
		if protoimpl.X.Present(&(x.XXX_presence[0]), 3) {
			return x.xxx_hidden_Elevent
		}
	}
	return Default_RemoteDefault_Elevent
}

func (x *RemoteDefault) GetSeventeen() enums_opaque.Enum {
	if x != nil {
		if protoimpl.X.Present(&(x.XXX_presence[0]), 4) {
			return x.xxx_hidden_Seventeen
		}
	}
	return Default_RemoteDefault_Seventeen
}

func (x *RemoteDefault) GetThirtyseven() enums_opaque.Enum {
	if x != nil {
		if protoimpl.X.Present(&(x.XXX_presence[0]), 5) {
			return x.xxx_hidden_Thirtyseven
		}
	}
	return Default_RemoteDefault_Thirtyseven
}

func (x *RemoteDefault) GetSixtyseven() enums_opaque.Enum {
	if x != nil {
		if protoimpl.X.Present(&(x.XXX_presence[0]), 6) {
			return x.xxx_hidden_Sixtyseven
		}
	}
	return Default_RemoteDefault_Sixtyseven
}

func (x *RemoteDefault) GetNegative() enums_opaque.Enum {
	if x != nil {
		if protoimpl.X.Present(&(x.XXX_presence[0]), 7) {
			return x.xxx_hidden_Negative
		}
	}
	return Default_RemoteDefault_Negative
}

func (x *RemoteDefault) SetDefault(v enums_opaque.Enum) {
	x.xxx_hidden_Default = v
	protoimpl.X.SetPresent(&(x.XXX_presence[0]), 0, 8)
}

func (x *RemoteDefault) SetZero(v enums_opaque.Enum) {
	x.xxx_hidden_Zero = v
	protoimpl.X.SetPresent(&(x.XXX_presence[0]), 1, 8)
}

func (x *RemoteDefault) SetOne(v enums_opaque.Enum) {
	x.xxx_hidden_One = v
	protoimpl.X.SetPresent(&(x.XXX_presence[0]), 2, 8)
}

func (x *RemoteDefault) SetElevent(v enums_opaque.Enum) {
	x.xxx_hidden_Elevent = v
	protoimpl.X.SetPresent(&(x.XXX_presence[0]), 3, 8)
}

func (x *RemoteDefault) SetSeventeen(v enums_opaque.Enum) {
	x.xxx_hidden_Seventeen = v
	protoimpl.X.SetPresent(&(x.XXX_presence[0]), 4, 8)
}

func (x *RemoteDefault) SetThirtyseven(v enums_opaque.Enum) {
	x.xxx_hidden_Thirtyseven = v
	protoimpl.X.SetPresent(&(x.XXX_presence[0]), 5, 8)
}

func (x *RemoteDefault) SetSixtyseven(v enums_opaque.Enum) {
	x.xxx_hidden_Sixtyseven = v
	protoimpl.X.SetPresent(&(x.XXX_presence[0]), 6, 8)
}

func (x *RemoteDefault) SetNegative(v enums_opaque.Enum) {
	x.xxx_hidden_Negative = v
	protoimpl.X.SetPresent(&(x.XXX_presence[0]), 7, 8)
}

func (x *RemoteDefault) HasDefault() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[0]), 0)
}

func (x *RemoteDefault) HasZero() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[0]), 1)
}

func (x *RemoteDefault) HasOne() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[0]), 2)
}

func (x *RemoteDefault) HasElevent() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[0]), 3)
}

func (x *RemoteDefault) HasSeventeen() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[0]), 4)
}

func (x *RemoteDefault) HasThirtyseven() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[0]), 5)
}

func (x *RemoteDefault) HasSixtyseven() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[0]), 6)
}

func (x *RemoteDefault) HasNegative() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[0]), 7)
}

func (x *RemoteDefault) ClearDefault() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[0]), 0)
	x.xxx_hidden_Default = enums_opaque.Enum_DEFAULT
}

func (x *RemoteDefault) ClearZero() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[0]), 1)
}

func (x *RemoteDefault) ClearOne() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[0]), 2)
}

func (x *RemoteDefault) ClearElevent() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[0]), 3)
}

func (x *RemoteDefault) ClearSeventeen() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[0]), 4)
}

func (x *RemoteDefault) ClearThirtyseven() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[0]), 5)
}

func (x *RemoteDefault) ClearSixtyseven() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[0]), 6)
}

func (x *RemoteDefault) ClearNegative() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[0]), 7)
}

type RemoteDefault_builder struct {
	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.

	Default     *enums_opaque.Enum
	Zero        *enums_opaque.Enum
	One         *enums_opaque.Enum
	Elevent     *enums_opaque.Enum
	Seventeen   *enums_opaque.Enum
	Thirtyseven *enums_opaque.Enum
	Sixtyseven  *enums_opaque.Enum
	Negative    *enums_opaque.Enum
}

func (b0 RemoteDefault_builder) Build() *RemoteDefault {
	m0 := &RemoteDefault{}
	b, x := &b0, m0
	_, _ = b, x
	if b.Default != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 0, 8)
		x.xxx_hidden_Default = *b.Default
	}
	if b.Zero != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 1, 8)
		x.xxx_hidden_Zero = *b.Zero
	}
	if b.One != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 2, 8)
		x.xxx_hidden_One = *b.One
	}
	if b.Elevent != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 3, 8)
		x.xxx_hidden_Elevent = *b.Elevent
	}
	if b.Seventeen != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 4, 8)
		x.xxx_hidden_Seventeen = *b.Seventeen
	}
	if b.Thirtyseven != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 5, 8)
		x.xxx_hidden_Thirtyseven = *b.Thirtyseven
	}
	if b.Sixtyseven != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 6, 8)
		x.xxx_hidden_Sixtyseven = *b.Sixtyseven
	}
	if b.Negative != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 7, 8)
		x.xxx_hidden_Negative = *b.Negative
	}
	return m0
}

type TestAllTypes_NestedMessage struct {
	state                  protoimpl.MessageState `protogen:"opaque.v1"`
	xxx_hidden_A           int32                  `protobuf:"varint,1,opt,name=a"`
	xxx_hidden_Corecursive *TestAllTypes          `protobuf:"bytes,2,opt,name=corecursive"`
	XXX_raceDetectHookData protoimpl.RaceDetectHookData
	XXX_presence           [1]uint32
	unknownFields          protoimpl.UnknownFields
	sizeCache              protoimpl.SizeCache
}

func (x *TestAllTypes_NestedMessage) Reset() {
	*x = TestAllTypes_NestedMessage{}
	mi := &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_msgTypes[10]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *TestAllTypes_NestedMessage) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*TestAllTypes_NestedMessage) ProtoMessage() {}

func (x *TestAllTypes_NestedMessage) ProtoReflect() protoreflect.Message {
	mi := &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_msgTypes[10]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

func (x *TestAllTypes_NestedMessage) GetA() int32 {
	if x != nil {
		return x.xxx_hidden_A
	}
	return 0
}

func (x *TestAllTypes_NestedMessage) GetCorecursive() *TestAllTypes {
	if x != nil {
		return x.xxx_hidden_Corecursive
	}
	return nil
}

func (x *TestAllTypes_NestedMessage) SetA(v int32) {
	x.xxx_hidden_A = v
	protoimpl.X.SetPresent(&(x.XXX_presence[0]), 0, 2)
}

func (x *TestAllTypes_NestedMessage) SetCorecursive(v *TestAllTypes) {
	x.xxx_hidden_Corecursive = v
}

func (x *TestAllTypes_NestedMessage) HasA() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[0]), 0)
}

func (x *TestAllTypes_NestedMessage) HasCorecursive() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_Corecursive != nil
}

func (x *TestAllTypes_NestedMessage) ClearA() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[0]), 0)
	x.xxx_hidden_A = 0
}

func (x *TestAllTypes_NestedMessage) ClearCorecursive() {
	x.xxx_hidden_Corecursive = nil
}

type TestAllTypes_NestedMessage_builder struct {
	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.

	A           *int32
	Corecursive *TestAllTypes
}

func (b0 TestAllTypes_NestedMessage_builder) Build() *TestAllTypes_NestedMessage {
	m0 := &TestAllTypes_NestedMessage{}
	b, x := &b0, m0
	_, _ = b, x
	if b.A != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 0, 2)
		x.xxx_hidden_A = *b.A
	}
	x.xxx_hidden_Corecursive = b.Corecursive
	return m0
}

type TestAllTypes_OptionalGroup struct {
	state                            protoimpl.MessageState      `protogen:"opaque.v1"`
	xxx_hidden_A                     int32                       `protobuf:"varint,17,opt,name=a"`
	xxx_hidden_OptionalNestedMessage *TestAllTypes_NestedMessage `protobuf:"bytes,1000,opt,name=optional_nested_message,json=optionalNestedMessage"`
	xxx_hidden_SameFieldNumber       int32                       `protobuf:"varint,16,opt,name=same_field_number,json=sameFieldNumber"`
	XXX_raceDetectHookData           protoimpl.RaceDetectHookData
	XXX_presence                     [1]uint32
	unknownFields                    protoimpl.UnknownFields
	sizeCache                        protoimpl.SizeCache
}

func (x *TestAllTypes_OptionalGroup) Reset() {
	*x = TestAllTypes_OptionalGroup{}
	mi := &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_msgTypes[11]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *TestAllTypes_OptionalGroup) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*TestAllTypes_OptionalGroup) ProtoMessage() {}

func (x *TestAllTypes_OptionalGroup) ProtoReflect() protoreflect.Message {
	mi := &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_msgTypes[11]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

func (x *TestAllTypes_OptionalGroup) GetA() int32 {
	if x != nil {
		return x.xxx_hidden_A
	}
	return 0
}

func (x *TestAllTypes_OptionalGroup) GetOptionalNestedMessage() *TestAllTypes_NestedMessage {
	if x != nil {
		return x.xxx_hidden_OptionalNestedMessage
	}
	return nil
}

func (x *TestAllTypes_OptionalGroup) GetSameFieldNumber() int32 {
	if x != nil {
		return x.xxx_hidden_SameFieldNumber
	}
	return 0
}

func (x *TestAllTypes_OptionalGroup) SetA(v int32) {
	x.xxx_hidden_A = v
	protoimpl.X.SetPresent(&(x.XXX_presence[0]), 0, 3)
}

func (x *TestAllTypes_OptionalGroup) SetOptionalNestedMessage(v *TestAllTypes_NestedMessage) {
	x.xxx_hidden_OptionalNestedMessage = v
}

func (x *TestAllTypes_OptionalGroup) SetSameFieldNumber(v int32) {
	x.xxx_hidden_SameFieldNumber = v
	protoimpl.X.SetPresent(&(x.XXX_presence[0]), 2, 3)
}

func (x *TestAllTypes_OptionalGroup) HasA() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[0]), 0)
}

func (x *TestAllTypes_OptionalGroup) HasOptionalNestedMessage() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_OptionalNestedMessage != nil
}

func (x *TestAllTypes_OptionalGroup) HasSameFieldNumber() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[0]), 2)
}

func (x *TestAllTypes_OptionalGroup) ClearA() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[0]), 0)
	x.xxx_hidden_A = 0
}

func (x *TestAllTypes_OptionalGroup) ClearOptionalNestedMessage() {
	x.xxx_hidden_OptionalNestedMessage = nil
}

func (x *TestAllTypes_OptionalGroup) ClearSameFieldNumber() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[0]), 2)
	x.xxx_hidden_SameFieldNumber = 0
}

type TestAllTypes_OptionalGroup_builder struct {
	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.

	A                     *int32
	OptionalNestedMessage *TestAllTypes_NestedMessage
	SameFieldNumber       *int32
}

func (b0 TestAllTypes_OptionalGroup_builder) Build() *TestAllTypes_OptionalGroup {
	m0 := &TestAllTypes_OptionalGroup{}
	b, x := &b0, m0
	_, _ = b, x
	if b.A != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 0, 3)
		x.xxx_hidden_A = *b.A
	}
	x.xxx_hidden_OptionalNestedMessage = b.OptionalNestedMessage
	if b.SameFieldNumber != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 2, 3)
		x.xxx_hidden_SameFieldNumber = *b.SameFieldNumber
	}
	return m0
}

type TestAllTypes_RepeatedGroup struct {
	state                            protoimpl.MessageState      `protogen:"opaque.v1"`
	xxx_hidden_A                     int32                       `protobuf:"varint,47,opt,name=a"`
	xxx_hidden_OptionalNestedMessage *TestAllTypes_NestedMessage `protobuf:"bytes,1001,opt,name=optional_nested_message,json=optionalNestedMessage"`
	XXX_raceDetectHookData           protoimpl.RaceDetectHookData
	XXX_presence                     [1]uint32
	unknownFields                    protoimpl.UnknownFields
	sizeCache                        protoimpl.SizeCache
}

func (x *TestAllTypes_RepeatedGroup) Reset() {
	*x = TestAllTypes_RepeatedGroup{}
	mi := &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_msgTypes[12]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *TestAllTypes_RepeatedGroup) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*TestAllTypes_RepeatedGroup) ProtoMessage() {}

func (x *TestAllTypes_RepeatedGroup) ProtoReflect() protoreflect.Message {
	mi := &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_msgTypes[12]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

func (x *TestAllTypes_RepeatedGroup) GetA() int32 {
	if x != nil {
		return x.xxx_hidden_A
	}
	return 0
}

func (x *TestAllTypes_RepeatedGroup) GetOptionalNestedMessage() *TestAllTypes_NestedMessage {
	if x != nil {
		return x.xxx_hidden_OptionalNestedMessage
	}
	return nil
}

func (x *TestAllTypes_RepeatedGroup) SetA(v int32) {
	x.xxx_hidden_A = v
	protoimpl.X.SetPresent(&(x.XXX_presence[0]), 0, 2)
}

func (x *TestAllTypes_RepeatedGroup) SetOptionalNestedMessage(v *TestAllTypes_NestedMessage) {
	x.xxx_hidden_OptionalNestedMessage = v
}

func (x *TestAllTypes_RepeatedGroup) HasA() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[0]), 0)
}

func (x *TestAllTypes_RepeatedGroup) HasOptionalNestedMessage() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_OptionalNestedMessage != nil
}

func (x *TestAllTypes_RepeatedGroup) ClearA() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[0]), 0)
	x.xxx_hidden_A = 0
}

func (x *TestAllTypes_RepeatedGroup) ClearOptionalNestedMessage() {
	x.xxx_hidden_OptionalNestedMessage = nil
}

type TestAllTypes_RepeatedGroup_builder struct {
	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.

	A                     *int32
	OptionalNestedMessage *TestAllTypes_NestedMessage
}

func (b0 TestAllTypes_RepeatedGroup_builder) Build() *TestAllTypes_RepeatedGroup {
	m0 := &TestAllTypes_RepeatedGroup{}
	b, x := &b0, m0
	_, _ = b, x
	if b.A != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 0, 2)
		x.xxx_hidden_A = *b.A
	}
	x.xxx_hidden_OptionalNestedMessage = b.OptionalNestedMessage
	return m0
}

type TestAllTypes_OneofGroup struct {
	state                  protoimpl.MessageState `protogen:"opaque.v1"`
	xxx_hidden_A           int32                  `protobuf:"varint,1,opt,name=a"`
	xxx_hidden_B           int32                  `protobuf:"varint,2,opt,name=b"`
	XXX_raceDetectHookData protoimpl.RaceDetectHookData
	XXX_presence           [1]uint32
	unknownFields          protoimpl.UnknownFields
	sizeCache              protoimpl.SizeCache
}

func (x *TestAllTypes_OneofGroup) Reset() {
	*x = TestAllTypes_OneofGroup{}
	mi := &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_msgTypes[30]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *TestAllTypes_OneofGroup) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*TestAllTypes_OneofGroup) ProtoMessage() {}

func (x *TestAllTypes_OneofGroup) ProtoReflect() protoreflect.Message {
	mi := &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_msgTypes[30]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

func (x *TestAllTypes_OneofGroup) GetA() int32 {
	if x != nil {
		return x.xxx_hidden_A
	}
	return 0
}

func (x *TestAllTypes_OneofGroup) GetB() int32 {
	if x != nil {
		return x.xxx_hidden_B
	}
	return 0
}

func (x *TestAllTypes_OneofGroup) SetA(v int32) {
	x.xxx_hidden_A = v
	protoimpl.X.SetPresent(&(x.XXX_presence[0]), 0, 2)
}

func (x *TestAllTypes_OneofGroup) SetB(v int32) {
	x.xxx_hidden_B = v
	protoimpl.X.SetPresent(&(x.XXX_presence[0]), 1, 2)
}

func (x *TestAllTypes_OneofGroup) HasA() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[0]), 0)
}

func (x *TestAllTypes_OneofGroup) HasB() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[0]), 1)
}

func (x *TestAllTypes_OneofGroup) ClearA() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[0]), 0)
	x.xxx_hidden_A = 0
}

func (x *TestAllTypes_OneofGroup) ClearB() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[0]), 1)
	x.xxx_hidden_B = 0
}

type TestAllTypes_OneofGroup_builder struct {
	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.

	A *int32
	B *int32
}

func (b0 TestAllTypes_OneofGroup_builder) Build() *TestAllTypes_OneofGroup {
	m0 := &TestAllTypes_OneofGroup{}
	b, x := &b0, m0
	_, _ = b, x
	if b.A != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 0, 2)
		x.xxx_hidden_A = *b.A
	}
	if b.B != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 1, 2)
		x.xxx_hidden_B = *b.B
	}
	return m0
}

type TestRequiredGroupFields_OptionalGroup struct {
	state                  protoimpl.MessageState `protogen:"opaque.v1"`
	xxx_hidden_A           int32                  `protobuf:"varint,2,req,name=a"`
	XXX_raceDetectHookData protoimpl.RaceDetectHookData
	XXX_presence           [1]uint32
	unknownFields          protoimpl.UnknownFields
	sizeCache              protoimpl.SizeCache
}

func (x *TestRequiredGroupFields_OptionalGroup) Reset() {
	*x = TestRequiredGroupFields_OptionalGroup{}
	mi := &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_msgTypes[32]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *TestRequiredGroupFields_OptionalGroup) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*TestRequiredGroupFields_OptionalGroup) ProtoMessage() {}

func (x *TestRequiredGroupFields_OptionalGroup) ProtoReflect() protoreflect.Message {
	mi := &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_msgTypes[32]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

func (x *TestRequiredGroupFields_OptionalGroup) GetA() int32 {
	if x != nil {
		return x.xxx_hidden_A
	}
	return 0
}

func (x *TestRequiredGroupFields_OptionalGroup) SetA(v int32) {
	x.xxx_hidden_A = v
	protoimpl.X.SetPresent(&(x.XXX_presence[0]), 0, 1)
}

func (x *TestRequiredGroupFields_OptionalGroup) HasA() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[0]), 0)
}

func (x *TestRequiredGroupFields_OptionalGroup) ClearA() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[0]), 0)
	x.xxx_hidden_A = 0
}

type TestRequiredGroupFields_OptionalGroup_builder struct {
	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.

	A *int32
}

func (b0 TestRequiredGroupFields_OptionalGroup_builder) Build() *TestRequiredGroupFields_OptionalGroup {
	m0 := &TestRequiredGroupFields_OptionalGroup{}
	b, x := &b0, m0
	_, _ = b, x
	if b.A != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 0, 1)
		x.xxx_hidden_A = *b.A
	}
	return m0
}

type TestRequiredGroupFields_RepeatedGroup struct {
	state                  protoimpl.MessageState `protogen:"opaque.v1"`
	xxx_hidden_A           int32                  `protobuf:"varint,4,req,name=a"`
	XXX_raceDetectHookData protoimpl.RaceDetectHookData
	XXX_presence           [1]uint32
	unknownFields          protoimpl.UnknownFields
	sizeCache              protoimpl.SizeCache
}

func (x *TestRequiredGroupFields_RepeatedGroup) Reset() {
	*x = TestRequiredGroupFields_RepeatedGroup{}
	mi := &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_msgTypes[33]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *TestRequiredGroupFields_RepeatedGroup) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*TestRequiredGroupFields_RepeatedGroup) ProtoMessage() {}

func (x *TestRequiredGroupFields_RepeatedGroup) ProtoReflect() protoreflect.Message {
	mi := &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_msgTypes[33]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

func (x *TestRequiredGroupFields_RepeatedGroup) GetA() int32 {
	if x != nil {
		return x.xxx_hidden_A
	}
	return 0
}

func (x *TestRequiredGroupFields_RepeatedGroup) SetA(v int32) {
	x.xxx_hidden_A = v
	protoimpl.X.SetPresent(&(x.XXX_presence[0]), 0, 1)
}

func (x *TestRequiredGroupFields_RepeatedGroup) HasA() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[0]), 0)
}

func (x *TestRequiredGroupFields_RepeatedGroup) ClearA() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[0]), 0)
	x.xxx_hidden_A = 0
}

type TestRequiredGroupFields_RepeatedGroup_builder struct {
	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.

	A *int32
}

func (b0 TestRequiredGroupFields_RepeatedGroup_builder) Build() *TestRequiredGroupFields_RepeatedGroup {
	m0 := &TestRequiredGroupFields_RepeatedGroup{}
	b, x := &b0, m0
	_, _ = b, x
	if b.A != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 0, 1)
		x.xxx_hidden_A = *b.A
	}
	return m0
}

var file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_extTypes = []protoimpl.ExtensionInfo{
	{
		ExtendedType:  (*TestPackedExtensions)(nil),
		ExtensionType: ([]int32)(nil),
		Field:         90,
		Name:          "opaque.goproto.proto.testeditions.packed_int32",
		Tag:           "varint,90,rep,packed,name=packed_int32",
		Filename:      "internal/testprotos/testeditions/testeditions_opaque/test.opaque.proto",
	},
	{
		ExtendedType:  (*TestPackedExtensions)(nil),
		ExtensionType: ([]int64)(nil),
		Field:         91,
		Name:          "opaque.goproto.proto.testeditions.packed_int64",
		Tag:           "varint,91,rep,packed,name=packed_int64",
		Filename:      "internal/testprotos/testeditions/testeditions_opaque/test.opaque.proto",
	},
	{
		ExtendedType:  (*TestPackedExtensions)(nil),
		ExtensionType: ([]uint32)(nil),
		Field:         92,
		Name:          "opaque.goproto.proto.testeditions.packed_uint32",
		Tag:           "varint,92,rep,packed,name=packed_uint32",
		Filename:      "internal/testprotos/testeditions/testeditions_opaque/test.opaque.proto",
	},
	{
		ExtendedType:  (*TestPackedExtensions)(nil),
		ExtensionType: ([]uint64)(nil),
		Field:         93,
		Name:          "opaque.goproto.proto.testeditions.packed_uint64",
		Tag:           "varint,93,rep,packed,name=packed_uint64",
		Filename:      "internal/testprotos/testeditions/testeditions_opaque/test.opaque.proto",
	},
	{
		ExtendedType:  (*TestPackedExtensions)(nil),
		ExtensionType: ([]int32)(nil),
		Field:         94,
		Name:          "opaque.goproto.proto.testeditions.packed_sint32",
		Tag:           "zigzag32,94,rep,packed,name=packed_sint32",
		Filename:      "internal/testprotos/testeditions/testeditions_opaque/test.opaque.proto",
	},
	{
		ExtendedType:  (*TestPackedExtensions)(nil),
		ExtensionType: ([]int64)(nil),
		Field:         95,
		Name:          "opaque.goproto.proto.testeditions.packed_sint64",
		Tag:           "zigzag64,95,rep,packed,name=packed_sint64",
		Filename:      "internal/testprotos/testeditions/testeditions_opaque/test.opaque.proto",
	},
	{
		ExtendedType:  (*TestPackedExtensions)(nil),
		ExtensionType: ([]uint32)(nil),
		Field:         96,
		Name:          "opaque.goproto.proto.testeditions.packed_fixed32",
		Tag:           "fixed32,96,rep,packed,name=packed_fixed32",
		Filename:      "internal/testprotos/testeditions/testeditions_opaque/test.opaque.proto",
	},
	{
		ExtendedType:  (*TestPackedExtensions)(nil),
		ExtensionType: ([]uint64)(nil),
		Field:         97,
		Name:          "opaque.goproto.proto.testeditions.packed_fixed64",
		Tag:           "fixed64,97,rep,packed,name=packed_fixed64",
		Filename:      "internal/testprotos/testeditions/testeditions_opaque/test.opaque.proto",
	},
	{
		ExtendedType:  (*TestPackedExtensions)(nil),
		ExtensionType: ([]int32)(nil),
		Field:         98,
		Name:          "opaque.goproto.proto.testeditions.packed_sfixed32",
		Tag:           "fixed32,98,rep,packed,name=packed_sfixed32",
		Filename:      "internal/testprotos/testeditions/testeditions_opaque/test.opaque.proto",
	},
	{
		ExtendedType:  (*TestPackedExtensions)(nil),
		ExtensionType: ([]int64)(nil),
		Field:         99,
		Name:          "opaque.goproto.proto.testeditions.packed_sfixed64",
		Tag:           "fixed64,99,rep,packed,name=packed_sfixed64",
		Filename:      "internal/testprotos/testeditions/testeditions_opaque/test.opaque.proto",
	},
	{
		ExtendedType:  (*TestPackedExtensions)(nil),
		ExtensionType: ([]float32)(nil),
		Field:         100,
		Name:          "opaque.goproto.proto.testeditions.packed_float",
		Tag:           "fixed32,100,rep,packed,name=packed_float",
		Filename:      "internal/testprotos/testeditions/testeditions_opaque/test.opaque.proto",
	},
	{
		ExtendedType:  (*TestPackedExtensions)(nil),
		ExtensionType: ([]float64)(nil),
		Field:         101,
		Name:          "opaque.goproto.proto.testeditions.packed_double",
		Tag:           "fixed64,101,rep,packed,name=packed_double",
		Filename:      "internal/testprotos/testeditions/testeditions_opaque/test.opaque.proto",
	},
	{
		ExtendedType:  (*TestPackedExtensions)(nil),
		ExtensionType: ([]bool)(nil),
		Field:         102,
		Name:          "opaque.goproto.proto.testeditions.packed_bool",
		Tag:           "varint,102,rep,packed,name=packed_bool",
		Filename:      "internal/testprotos/testeditions/testeditions_opaque/test.opaque.proto",
	},
	{
		ExtendedType:  (*TestPackedExtensions)(nil),
		ExtensionType: ([]ForeignEnum)(nil),
		Field:         103,
		Name:          "opaque.goproto.proto.testeditions.packed_enum",
		Tag:           "varint,103,rep,packed,name=packed_enum,enum=opaque.goproto.proto.testeditions.ForeignEnum",
		Filename:      "internal/testprotos/testeditions/testeditions_opaque/test.opaque.proto",
	},
}

// Extension fields to TestPackedExtensions.
var (
	// repeated int32 packed_int32 = 90;
	E_PackedInt32 = &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_extTypes[0]
	// repeated int64 packed_int64 = 91;
	E_PackedInt64 = &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_extTypes[1]
	// repeated uint32 packed_uint32 = 92;
	E_PackedUint32 = &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_extTypes[2]
	// repeated uint64 packed_uint64 = 93;
	E_PackedUint64 = &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_extTypes[3]
	// repeated sint32 packed_sint32 = 94;
	E_PackedSint32 = &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_extTypes[4]
	// repeated sint64 packed_sint64 = 95;
	E_PackedSint64 = &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_extTypes[5]
	// repeated fixed32 packed_fixed32 = 96;
	E_PackedFixed32 = &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_extTypes[6]
	// repeated fixed64 packed_fixed64 = 97;
	E_PackedFixed64 = &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_extTypes[7]
	// repeated sfixed32 packed_sfixed32 = 98;
	E_PackedSfixed32 = &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_extTypes[8]
	// repeated sfixed64 packed_sfixed64 = 99;
	E_PackedSfixed64 = &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_extTypes[9]
	// repeated float packed_float = 100;
	E_PackedFloat = &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_extTypes[10]
	// repeated double packed_double = 101;
	E_PackedDouble = &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_extTypes[11]
	// repeated bool packed_bool = 102;
	E_PackedBool = &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_extTypes[12]
	// repeated opaque.goproto.proto.testeditions.ForeignEnum packed_enum = 103;
	E_PackedEnum = &file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_extTypes[13]
)

var File_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto protoreflect.FileDescriptor

const file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_rawDesc = "\nFinternal/testprotos/testeditions/testeditions_opaque/test.opaque.proto!opaque.goproto.proto.testeditions9internal/testprotos/enums/enums_opaque/enums.opaque.protoMinternal/testprotos/testeditions/testeditions_opaque/test_import.opaque.proto!google/protobuf/go_features.proto\"\xd0I\nTestAllTypes,\nsingular_int32| (B\xaaR\rsingularInt32,\nsingular_int64} (B\xaaR\rsingularInt64.\nsingular_uint32~ (\rB\xaaRsingularUint32.\nsingular_uint64 (B\xaaRsingularUint64/\nsingular_sint32\x80 (B\xaaRsingularSint32/\nsingular_sint64\x81 (B\xaaRsingularSint641\nsingular_fixed32\x82 (B\xaaRsingularFixed321\nsingular_fixed64\x83 (B\xaaRsingularFixed643\nsingular_sfixed32\x84 (B\xaaRsingularSfixed323\nsingular_sfixed64\x85 (B\xaaRsingularSfixed64-\nsingular_float\x86 (B\xaaR\rsingularFloat/\nsingular_double\x87 (B\xaaRsingularDouble+\n\rsingular_bool\x88 (B\xaaRsingularBool/\nsingular_string\x89 (	B\xaaRsingularString-\nsingular_bytes\x8a (B\xaaR\rsingularBytest\nsingular_nested_enum\x8e (2:.opaque.goproto.proto.testeditions.TestAllTypes.NestedEnumB\xaaRsingularNestedEnumj\nsingular_foreign_enum\x8f (2..opaque.goproto.proto.testeditions.ForeignEnumB\xaaRsingularForeignEnumg\nsingular_import_enum\x90 (2-.opaque.goproto.proto.testeditions.ImportEnumB\xaaRsingularImportEnum%\noptional_int32 (R\roptionalInt32%\noptional_int64 (R\roptionalInt64'\noptional_uint32 (\rRoptionalUint32'\noptional_uint64 (RoptionalUint64'\noptional_sint32 (RoptionalSint32'\noptional_sint64 (RoptionalSint64)\noptional_fixed32 (RoptionalFixed32)\noptional_fixed64 (RoptionalFixed64+\noptional_sfixed32	 (RoptionalSfixed32+\noptional_sfixed64\n (RoptionalSfixed64%\noptional_float (R\roptionalFloat'\noptional_double (RoptionalDouble#\n\roptional_bool\r (RoptionalBool'\noptional_string (	RoptionalString%\noptional_bytes (R\roptionalBytesj\n\roptionalgroup (2=.opaque.goproto.proto.testeditions.TestAllTypes.OptionalGroupB\xaa(R\roptionalgroup}\nnot_group_like_delimited (2=.opaque.goproto.proto.testeditions.TestAllTypes.OptionalGroupB\xaa(RnotGroupLikeDelimitedu\noptional_nested_message (2=.opaque.goproto.proto.testeditions.TestAllTypes.NestedMessageRoptionalNestedMessagek\noptional_foreign_message (21.opaque.goproto.proto.testeditions.ForeignMessageRoptionalForeignMessageh\noptional_import_message (20.opaque.goproto.proto.testeditions.ImportMessageRoptionalImportMessagel\noptional_nested_enum (2:.opaque.goproto.proto.testeditions.TestAllTypes.NestedEnumRoptionalNestedEnumb\noptional_foreign_enum (2..opaque.goproto.proto.testeditions.ForeignEnumRoptionalForeignEnum_\noptional_import_enum (2-.opaque.goproto.proto.testeditions.ImportEnumRoptionalImportEnum\x82\noptional_lazy_nested_message (2=.opaque.goproto.proto.testeditions.TestAllTypes.NestedMessageB(RoptionalLazyNestedMessage%\nrepeated_int32 (R\rrepeatedInt32%\nrepeated_int64  (R\rrepeatedInt64'\nrepeated_uint32! (\rRrepeatedUint32'\nrepeated_uint64\" (RrepeatedUint64'\nrepeated_sint32# (RrepeatedSint32'\nrepeated_sint64$ (RrepeatedSint64)\nrepeated_fixed32% (RrepeatedFixed32)\nrepeated_fixed64& (RrepeatedFixed64+\nrepeated_sfixed32' (RrepeatedSfixed32+\nrepeated_sfixed64( (RrepeatedSfixed64%\nrepeated_float) (R\rrepeatedFloat'\nrepeated_double* (RrepeatedDouble#\n\rrepeated_bool+ (RrepeatedBool'\nrepeated_string, (	RrepeatedString%\nrepeated_bytes- (R\rrepeatedBytesl\n\rrepeatedgroup. (2=.opaque.goproto.proto.testeditions.TestAllTypes.RepeatedGroupB\xaa(R\rrepeatedgroupu\nrepeated_nested_message0 (2=.opaque.goproto.proto.testeditions.TestAllTypes.NestedMessageRrepeatedNestedMessagek\nrepeated_foreign_message1 (21.opaque.goproto.proto.testeditions.ForeignMessageRrepeatedForeignMessageg\nrepeated_importmessage2 (20.opaque.goproto.proto.testeditions.ImportMessageRrepeatedImportmessagel\nrepeated_nested_enum3 (2:.opaque.goproto.proto.testeditions.TestAllTypes.NestedEnumRrepeatedNestedEnumb\nrepeated_foreign_enum4 (2..opaque.goproto.proto.testeditions.ForeignEnumRrepeatedForeignEnum^\nrepeated_importenum5 (2-.opaque.goproto.proto.testeditions.ImportEnumRrepeatedImportenumj\nmap_int32_int328 (2B.opaque.goproto.proto.testeditions.TestAllTypes.MapInt32Int32EntryR\rmapInt32Int32j\nmap_int64_int649 (2B.opaque.goproto.proto.testeditions.TestAllTypes.MapInt64Int64EntryR\rmapInt64Int64p\nmap_uint32_uint32: (2D.opaque.goproto.proto.testeditions.TestAllTypes.MapUint32Uint32EntryRmapUint32Uint32p\nmap_uint64_uint64; (2D.opaque.goproto.proto.testeditions.TestAllTypes.MapUint64Uint64EntryRmapUint64Uint64p\nmap_sint32_sint32< (2D.opaque.goproto.proto.testeditions.TestAllTypes.MapSint32Sint32EntryRmapSint32Sint32p\nmap_sint64_sint64= (2D.opaque.goproto.proto.testeditions.TestAllTypes.MapSint64Sint64EntryRmapSint64Sint64v\nmap_fixed32_fixed32> (2F.opaque.goproto.proto.testeditions.TestAllTypes.MapFixed32Fixed32EntryRmapFixed32Fixed32v\nmap_fixed64_fixed64? (2F.opaque.goproto.proto.testeditions.TestAllTypes.MapFixed64Fixed64EntryRmapFixed64Fixed64|\nmap_sfixed32_sfixed32@ (2H.opaque.goproto.proto.testeditions.TestAllTypes.MapSfixed32Sfixed32EntryRmapSfixed32Sfixed32|\nmap_sfixed64_sfixed64A (2H.opaque.goproto.proto.testeditions.TestAllTypes.MapSfixed64Sfixed64EntryRmapSfixed64Sfixed64j\nmap_int32_floatB (2B.opaque.goproto.proto.testeditions.TestAllTypes.MapInt32FloatEntryR\rmapInt32Floatm\nmap_int32_doubleC (2C.opaque.goproto.proto.testeditions.TestAllTypes.MapInt32DoubleEntryRmapInt32Doubled\n\rmap_bool_boolD (2@.opaque.goproto.proto.testeditions.TestAllTypes.MapBoolBoolEntryRmapBoolBoolp\nmap_string_stringE (2D.opaque.goproto.proto.testeditions.TestAllTypes.MapStringStringEntryRmapStringStringm\nmap_string_bytesF (2C.opaque.goproto.proto.testeditions.TestAllTypes.MapStringBytesEntryRmapStringBytes\x86\nmap_string_nested_messageG (2K.opaque.goproto.proto.testeditions.TestAllTypes.MapStringNestedMessageEntryRmapStringNestedMessage}\nmap_string_nested_enumI (2H.opaque.goproto.proto.testeditions.TestAllTypes.MapStringNestedEnumEntryRmapStringNestedEnum'\n\rdefault_int32Q (:81RdefaultInt32'\n\rdefault_int64R (:82RdefaultInt64)\ndefault_uint32S (\r:83R\rdefaultUint32)\ndefault_uint64T (:84R\rdefaultUint64*\ndefault_sint32U (:-85R\rdefaultSint32)\ndefault_sint64V (:86R\rdefaultSint64+\ndefault_fixed32W (:87RdefaultFixed32+\ndefault_fixed64X (:88RdefaultFixed64-\ndefault_sfixed32Y (:89RdefaultSfixed32.\ndefault_sfixed64P (:-90RdefaultSfixed64)\n\rdefault_float[ (:91.5RdefaultFloat,\ndefault_double\\ (:92000R\rdefaultDouble'\ndefault_bool] (:trueRdefaultBool,\ndefault_string^ (	:helloR\rdefaultString*\n\rdefault_bytes_ (:worldRdefaultByteso\ndefault_nested_enum` (2:.opaque.goproto.proto.testeditions.TestAllTypes.NestedEnum:BARRdefaultNestedEnumm\ndefault_foreign_enuma (2..opaque.goproto.proto.testeditions.ForeignEnum:FOREIGN_BARRdefaultForeignEnum#\noneof_uint32o (\rH\x00RoneofUint32q\noneof_nested_messagep (2=.opaque.goproto.proto.testeditions.TestAllTypes.NestedMessageH\x00RoneofNestedMessage#\noneof_stringq (	H\x00RoneofString!\noneof_bytesr (H\x00R\noneofBytes\n\noneof_bools (H\x00R	oneofBool#\noneof_uint64t (H\x00RoneofUint64!\noneof_floatu (H\x00R\noneofFloat#\noneof_doublev (H\x00RoneofDouble[\n\noneof_enumw (2:.opaque.goproto.proto.testeditions.TestAllTypes.NestedEnumH\x00R	oneofEnumc\n\noneofgroupy (2:.opaque.goproto.proto.testeditions.TestAllTypes.OneofGroupB\xaa(H\x00R\noneofgroup4\noneof_optional_uint32x (\rHRoneofOptionalUint32p\n\rNestedMessage\na (RaQ\ncorecursive (2/.opaque.goproto.proto.testeditions.TestAllTypesRcorecursive\xc1\n\rOptionalGroup\na (Rav\noptional_nested_message\xe8 (2=.opaque.goproto.proto.testeditions.TestAllTypes.NestedMessageRoptionalNestedMessage*\nsame_field_number (RsameFieldNumber\x95\n\rRepeatedGroup\na/ (Rav\noptional_nested_message\xe9 (2=.opaque.goproto.proto.testeditions.TestAllTypes.NestedMessageRoptionalNestedMessage@\nMapInt32Int32Entry\nkey (Rkey\nvalue (Rvalue:8@\nMapInt64Int64Entry\nkey (Rkey\nvalue (Rvalue:8B\nMapUint32Uint32Entry\nkey (\rRkey\nvalue (\rRvalue:8B\nMapUint64Uint64Entry\nkey (Rkey\nvalue (Rvalue:8B\nMapSint32Sint32Entry\nkey (Rkey\nvalue (Rvalue:8B\nMapSint64Sint64Entry\nkey (Rkey\nvalue (Rvalue:8D\nMapFixed32Fixed32Entry\nkey (Rkey\nvalue (Rvalue:8D\nMapFixed64Fixed64Entry\nkey (Rkey\nvalue (Rvalue:8F\nMapSfixed32Sfixed32Entry\nkey (Rkey\nvalue (Rvalue:8F\nMapSfixed64Sfixed64Entry\nkey (Rkey\nvalue (Rvalue:8@\nMapInt32FloatEntry\nkey (Rkey\nvalue (Rvalue:8A\nMapInt32DoubleEntry\nkey (Rkey\nvalue (Rvalue:8>\nMapBoolBoolEntry\nkey (Rkey\nvalue (Rvalue:8B\nMapStringStringEntry\nkey (	Rkey\nvalue (	Rvalue:8A\nMapStringBytesEntry\nkey (	Rkey\nvalue (Rvalue:8\x88\nMapStringNestedMessageEntry\nkey (	RkeyS\nvalue (2=.opaque.goproto.proto.testeditions.TestAllTypes.NestedMessageRvalue:8\x82\nMapStringNestedEnumEntry\nkey (	RkeyP\nvalue (2:.opaque.goproto.proto.testeditions.TestAllTypes.NestedEnumRvalue:8(\n\nOneofGroup\na (Ra\nb (Rb\"9\n\nNestedEnum\nFOO\x00\nBAR\nBAZ\nNEG\xff\xff\xff\xff\xff\xff\xff\xff\xffB\r\noneof_fieldB\noneof_optional\"\xba4\nTestManyMessageFieldsMessage?\nf1 (2/.opaque.goproto.proto.testeditions.TestAllTypesRf1?\nf2 (2/.opaque.goproto.proto.testeditions.TestAllTypesRf2?\nf3 (2/.opaque.goproto.proto.testeditions.TestAllTypesRf3?\nf4 (2/.opaque.goproto.proto.testeditions.TestAllTypesRf4?\nf5 (2/.opaque.goproto.proto.testeditions.TestAllTypesRf5?\nf6 (2/.opaque.goproto.proto.testeditions.TestAllTypesRf6?\nf7 (2/.opaque.goproto.proto.testeditions.TestAllTypesRf7?\nf8 (2/.opaque.goproto.proto.testeditions.TestAllTypesRf8?\nf9	 (2/.opaque.goproto.proto.testeditions.TestAllTypesRf9A\nf10\n (2/.opaque.goproto.proto.testeditions.TestAllTypesRf10A\nf11 (2/.opaque.goproto.proto.testeditions.TestAllTypesRf11A\nf12 (2/.opaque.goproto.proto.testeditions.TestAllTypesRf12A\nf13\r (2/.opaque.goproto.proto.testeditions.TestAllTypesRf13A\nf14 (2/.opaque.goproto.proto.testeditions.TestAllTypesRf14A\nf15 (2/.opaque.goproto.proto.testeditions.TestAllTypesRf15A\nf16 (2/.opaque.goproto.proto.testeditions.TestAllTypesRf16A\nf17 (2/.opaque.goproto.proto.testeditions.TestAllTypesRf17A\nf18 (2/.opaque.goproto.proto.testeditions.TestAllTypesRf18A\nf19 (2/.opaque.goproto.proto.testeditions.TestAllTypesRf19A\nf20 (2/.opaque.goproto.proto.testeditions.TestAllTypesRf20A\nf21 (2/.opaque.goproto.proto.testeditions.TestAllTypesRf21A\nf22 (2/.opaque.goproto.proto.testeditions.TestAllTypesRf22A\nf23 (2/.opaque.goproto.proto.testeditions.TestAllTypesRf23A\nf24 (2/.opaque.goproto.proto.testeditions.TestAllTypesRf24A\nf25 (2/.opaque.goproto.proto.testeditions.TestAllTypesRf25A\nf26 (2/.opaque.goproto.proto.testeditions.TestAllTypesRf26A\nf27 (2/.opaque.goproto.proto.testeditions.TestAllTypesRf27A\nf28 (2/.opaque.goproto.proto.testeditions.TestAllTypesRf28A\nf29 (2/.opaque.goproto.proto.testeditions.TestAllTypesRf29A\nf30 (2/.opaque.goproto.proto.testeditions.TestAllTypesRf30A\nf31 (2/.opaque.goproto.proto.testeditions.TestAllTypesRf31A\nf32  (2/.opaque.goproto.proto.testeditions.TestAllTypesRf32A\nf33! (2/.opaque.goproto.proto.testeditions.TestAllTypesRf33A\nf34\" (2/.opaque.goproto.proto.testeditions.TestAllTypesRf34A\nf35# (2/.opaque.goproto.proto.testeditions.TestAllTypesRf35A\nf36$ (2/.opaque.goproto.proto.testeditions.TestAllTypesRf36A\nf37% (2/.opaque.goproto.proto.testeditions.TestAllTypesRf37A\nf38& (2/.opaque.goproto.proto.testeditions.TestAllTypesRf38A\nf39' (2/.opaque.goproto.proto.testeditions.TestAllTypesRf39A\nf40( (2/.opaque.goproto.proto.testeditions.TestAllTypesRf40A\nf41) (2/.opaque.goproto.proto.testeditions.TestAllTypesRf41A\nf42* (2/.opaque.goproto.proto.testeditions.TestAllTypesRf42A\nf43+ (2/.opaque.goproto.proto.testeditions.TestAllTypesRf43A\nf44, (2/.opaque.goproto.proto.testeditions.TestAllTypesRf44A\nf45- (2/.opaque.goproto.proto.testeditions.TestAllTypesRf45A\nf46. (2/.opaque.goproto.proto.testeditions.TestAllTypesRf46A\nf47/ (2/.opaque.goproto.proto.testeditions.TestAllTypesRf47A\nf480 (2/.opaque.goproto.proto.testeditions.TestAllTypesRf48A\nf491 (2/.opaque.goproto.proto.testeditions.TestAllTypesRf49A\nf502 (2/.opaque.goproto.proto.testeditions.TestAllTypesRf50A\nf513 (2/.opaque.goproto.proto.testeditions.TestAllTypesRf51A\nf524 (2/.opaque.goproto.proto.testeditions.TestAllTypesRf52A\nf535 (2/.opaque.goproto.proto.testeditions.TestAllTypesRf53A\nf546 (2/.opaque.goproto.proto.testeditions.TestAllTypesRf54A\nf557 (2/.opaque.goproto.proto.testeditions.TestAllTypesRf55A\nf568 (2/.opaque.goproto.proto.testeditions.TestAllTypesRf56A\nf579 (2/.opaque.goproto.proto.testeditions.TestAllTypesRf57A\nf58: (2/.opaque.goproto.proto.testeditions.TestAllTypesRf58A\nf59; (2/.opaque.goproto.proto.testeditions.TestAllTypesRf59A\nf60< (2/.opaque.goproto.proto.testeditions.TestAllTypesRf60A\nf61= (2/.opaque.goproto.proto.testeditions.TestAllTypesRf61A\nf62> (2/.opaque.goproto.proto.testeditions.TestAllTypesRf62A\nf63? (2/.opaque.goproto.proto.testeditions.TestAllTypesRf63A\nf64@ (2/.opaque.goproto.proto.testeditions.TestAllTypesRf64A\nf65A (2/.opaque.goproto.proto.testeditions.TestAllTypesRf65A\nf66B (2/.opaque.goproto.proto.testeditions.TestAllTypesRf66A\nf67C (2/.opaque.goproto.proto.testeditions.TestAllTypesRf67A\nf68D (2/.opaque.goproto.proto.testeditions.TestAllTypesRf68A\nf69E (2/.opaque.goproto.proto.testeditions.TestAllTypesRf69A\nf70F (2/.opaque.goproto.proto.testeditions.TestAllTypesRf70A\nf71G (2/.opaque.goproto.proto.testeditions.TestAllTypesRf71A\nf72H (2/.opaque.goproto.proto.testeditions.TestAllTypesRf72A\nf73I (2/.opaque.goproto.proto.testeditions.TestAllTypesRf73A\nf74J (2/.opaque.goproto.proto.testeditions.TestAllTypesRf74A\nf75K (2/.opaque.goproto.proto.testeditions.TestAllTypesRf75A\nf76L (2/.opaque.goproto.proto.testeditions.TestAllTypesRf76A\nf77M (2/.opaque.goproto.proto.testeditions.TestAllTypesRf77A\nf78N (2/.opaque.goproto.proto.testeditions.TestAllTypesRf78A\nf79O (2/.opaque.goproto.proto.testeditions.TestAllTypesRf79A\nf80P (2/.opaque.goproto.proto.testeditions.TestAllTypesRf80A\nf81Q (2/.opaque.goproto.proto.testeditions.TestAllTypesRf81A\nf82R (2/.opaque.goproto.proto.testeditions.TestAllTypesRf82A\nf83S (2/.opaque.goproto.proto.testeditions.TestAllTypesRf83A\nf84T (2/.opaque.goproto.proto.testeditions.TestAllTypesRf84A\nf85U (2/.opaque.goproto.proto.testeditions.TestAllTypesRf85A\nf86V (2/.opaque.goproto.proto.testeditions.TestAllTypesRf86A\nf87W (2/.opaque.goproto.proto.testeditions.TestAllTypesRf87A\nf88X (2/.opaque.goproto.proto.testeditions.TestAllTypesRf88A\nf89Y (2/.opaque.goproto.proto.testeditions.TestAllTypesRf89A\nf90Z (2/.opaque.goproto.proto.testeditions.TestAllTypesRf90A\nf91[ (2/.opaque.goproto.proto.testeditions.TestAllTypesRf91A\nf92\\ (2/.opaque.goproto.proto.testeditions.TestAllTypesRf92A\nf93] (2/.opaque.goproto.proto.testeditions.TestAllTypesRf93A\nf94^ (2/.opaque.goproto.proto.testeditions.TestAllTypesRf94A\nf95_ (2/.opaque.goproto.proto.testeditions.TestAllTypesRf95A\nf96` (2/.opaque.goproto.proto.testeditions.TestAllTypesRf96A\nf97a (2/.opaque.goproto.proto.testeditions.TestAllTypesRf97A\nf98b (2/.opaque.goproto.proto.testeditions.TestAllTypesRf98A\nf99c (2/.opaque.goproto.proto.testeditions.TestAllTypesRf99C\nf100d (2/.opaque.goproto.proto.testeditions.TestAllTypesRf100\",\nForeignMessage\nc (Rc\nd (Rd\"<\nTestRequired,\nrequired_field (B\xaaR\rrequiredField\"\x8d\nTestRequiredForeignZ\noptional_message (2/.opaque.goproto.proto.testeditions.TestRequiredRoptionalMessageZ\nrepeated_message (2/.opaque.goproto.proto.testeditions.TestRequiredRrepeatedMessageg\nmap_message (2F.opaque.goproto.proto.testeditions.TestRequiredForeign.MapMessageEntryR\nmapMessageV\n\roneof_message (2/.opaque.goproto.proto.testeditions.TestRequiredH\x00RoneofMessagen\nMapMessageEntry\nkey (RkeyE\nvalue (2/.opaque.goproto.proto.testeditions.TestRequiredRvalue:8B\r\noneof_field\"\xd3\nTestRequiredGroupFieldsu\n\roptionalgroup (2H.opaque.goproto.proto.testeditions.TestRequiredGroupFields.OptionalGroupB\xaa(R\roptionalgroupu\n\rrepeatedgroup (2H.opaque.goproto.proto.testeditions.TestRequiredGroupFields.RepeatedGroupB\xaa(R\rrepeatedgroup$\n\rOptionalGroup\na (B\xaaRa$\n\rRepeatedGroup\na (B\xaaRa\"{\nTestRequiredLazyg\noptional_lazy_message (2/.opaque.goproto.proto.testeditions.TestRequiredB(RoptionalLazyMessage\"\xa7\nTestPackedTypes(\npacked_int32Z (B\xaaRpackedInt32(\npacked_int64[ (B\xaaRpackedInt64*\n\rpacked_uint32\\ (\rB\xaaRpackedUint32*\n\rpacked_uint64] (B\xaaRpackedUint64*\n\rpacked_sint32^ (B\xaaRpackedSint32*\n\rpacked_sint64_ (B\xaaRpackedSint64,\npacked_fixed32` (B\xaaR\rpackedFixed32,\npacked_fixed64a (B\xaaR\rpackedFixed64.\npacked_sfixed32b (B\xaaRpackedSfixed32.\npacked_sfixed64c (B\xaaRpackedSfixed64(\npacked_floatd (B\xaaRpackedFloat*\n\rpacked_doublee (B\xaaRpackedDouble&\npacked_boolf (B\xaaR\npackedBoolV\npacked_enumg (2..opaque.goproto.proto.testeditions.ForeignEnumB\xaaR\npackedEnum\" \nTestPackedExtensions*\x80\x80\x80\x80\"\xb7\n\rRemoteDefault:\ndefault (2 .opaque.goproto.proto.enums.EnumRdefault:\nzero (2 .opaque.goproto.proto.enums.Enum:ZERORzero7\none (2 .opaque.goproto.proto.enums.Enum:ONERoneC\nelevent (2 .opaque.goproto.proto.enums.Enum:ELEVENTReleventI\n	seventeen (2 .opaque.goproto.proto.enums.Enum:	SEVENTEENR	seventeenO\nthirtyseven (2 .opaque.goproto.proto.enums.Enum:THIRTYSEVENRthirtysevenL\n\nsixtyseven (2 .opaque.goproto.proto.enums.Enum:\nSIXTYSEVENR\nsixtysevenF\nnegative (2 .opaque.goproto.proto.enums.Enum:NEGATIVERnegative*R\nForeignEnum\nFOREIGN_ZERO\x00\nFOREIGN_FOO\nFOREIGN_BAR\nFOREIGN_BAZ:a\npacked_int327.opaque.goproto.proto.testeditions.TestPackedExtensionsZ (B\xaaRpackedInt32:a\npacked_int647.opaque.goproto.proto.testeditions.TestPackedExtensions[ (B\xaaRpackedInt64:c\n\rpacked_uint327.opaque.goproto.proto.testeditions.TestPackedExtensions\\ (\rB\xaaRpackedUint32:c\n\rpacked_uint647.opaque.goproto.proto.testeditions.TestPackedExtensions] (B\xaaRpackedUint64:c\n\rpacked_sint327.opaque.goproto.proto.testeditions.TestPackedExtensions^ (B\xaaRpackedSint32:c\n\rpacked_sint647.opaque.goproto.proto.testeditions.TestPackedExtensions_ (B\xaaRpackedSint64:e\npacked_fixed327.opaque.goproto.proto.testeditions.TestPackedExtensions` (B\xaaR\rpackedFixed32:e\npacked_fixed647.opaque.goproto.proto.testeditions.TestPackedExtensionsa (B\xaaR\rpackedFixed64:g\npacked_sfixed327.opaque.goproto.proto.testeditions.TestPackedExtensionsb (B\xaaRpackedSfixed32:g\npacked_sfixed647.opaque.goproto.proto.testeditions.TestPackedExtensionsc (B\xaaRpackedSfixed64:a\npacked_float7.opaque.goproto.proto.testeditions.TestPackedExtensionsd (B\xaaRpackedFloat:c\n\rpacked_double7.opaque.goproto.proto.testeditions.TestPackedExtensionse (B\xaaRpackedDouble:_\npacked_bool7.opaque.goproto.proto.testeditions.TestPackedExtensionsf (B\xaaR\npackedBool:\x8f\npacked_enum7.opaque.goproto.proto.testeditions.TestPackedExtensionsg (2..opaque.goproto.proto.testeditions.ForeignEnumB\xaaR\npackedEnumBYZOgoogle.golang.org/protobuf/internal/testprotos/testeditions/testeditions_opaque\x92\xd2>beditionsp\xe8"

var file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_enumTypes = make([]protoimpl.EnumInfo, 2)
var file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_msgTypes = make([]protoimpl.MessageInfo, 34)
var file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_goTypes = []any{
	(ForeignEnum)(0),                     // 0: opaque.goproto.proto.testeditions.ForeignEnum
	(TestAllTypes_NestedEnum)(0),         // 1: opaque.goproto.proto.testeditions.TestAllTypes.NestedEnum
	(*TestAllTypes)(nil),                 // 2: opaque.goproto.proto.testeditions.TestAllTypes
	(*TestManyMessageFieldsMessage)(nil), // 3: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage
	(*ForeignMessage)(nil),               // 4: opaque.goproto.proto.testeditions.ForeignMessage
	(*TestRequired)(nil),                 // 5: opaque.goproto.proto.testeditions.TestRequired
	(*TestRequiredForeign)(nil),          // 6: opaque.goproto.proto.testeditions.TestRequiredForeign
	(*TestRequiredGroupFields)(nil),      // 7: opaque.goproto.proto.testeditions.TestRequiredGroupFields
	(*TestRequiredLazy)(nil),             // 8: opaque.goproto.proto.testeditions.TestRequiredLazy
	(*TestPackedTypes)(nil),              // 9: opaque.goproto.proto.testeditions.TestPackedTypes
	(*TestPackedExtensions)(nil),         // 10: opaque.goproto.proto.testeditions.TestPackedExtensions
	(*RemoteDefault)(nil),                // 11: opaque.goproto.proto.testeditions.RemoteDefault
	(*TestAllTypes_NestedMessage)(nil),   // 12: opaque.goproto.proto.testeditions.TestAllTypes.NestedMessage
	(*TestAllTypes_OptionalGroup)(nil),   // 13: opaque.goproto.proto.testeditions.TestAllTypes.OptionalGroup
	(*TestAllTypes_RepeatedGroup)(nil),   // 14: opaque.goproto.proto.testeditions.TestAllTypes.RepeatedGroup
	nil,                                  // 15: opaque.goproto.proto.testeditions.TestAllTypes.MapInt32Int32Entry
	nil,                                  // 16: opaque.goproto.proto.testeditions.TestAllTypes.MapInt64Int64Entry
	nil,                                  // 17: opaque.goproto.proto.testeditions.TestAllTypes.MapUint32Uint32Entry
	nil,                                  // 18: opaque.goproto.proto.testeditions.TestAllTypes.MapUint64Uint64Entry
	nil,                                  // 19: opaque.goproto.proto.testeditions.TestAllTypes.MapSint32Sint32Entry
	nil,                                  // 20: opaque.goproto.proto.testeditions.TestAllTypes.MapSint64Sint64Entry
	nil,                                  // 21: opaque.goproto.proto.testeditions.TestAllTypes.MapFixed32Fixed32Entry
	nil,                                  // 22: opaque.goproto.proto.testeditions.TestAllTypes.MapFixed64Fixed64Entry
	nil,                                  // 23: opaque.goproto.proto.testeditions.TestAllTypes.MapSfixed32Sfixed32Entry
	nil,                                  // 24: opaque.goproto.proto.testeditions.TestAllTypes.MapSfixed64Sfixed64Entry
	nil,                                  // 25: opaque.goproto.proto.testeditions.TestAllTypes.MapInt32FloatEntry
	nil,                                  // 26: opaque.goproto.proto.testeditions.TestAllTypes.MapInt32DoubleEntry
	nil,                                  // 27: opaque.goproto.proto.testeditions.TestAllTypes.MapBoolBoolEntry
	nil,                                  // 28: opaque.goproto.proto.testeditions.TestAllTypes.MapStringStringEntry
	nil,                                  // 29: opaque.goproto.proto.testeditions.TestAllTypes.MapStringBytesEntry
	nil,                                  // 30: opaque.goproto.proto.testeditions.TestAllTypes.MapStringNestedMessageEntry
	nil,                                  // 31: opaque.goproto.proto.testeditions.TestAllTypes.MapStringNestedEnumEntry
	(*TestAllTypes_OneofGroup)(nil),      // 32: opaque.goproto.proto.testeditions.TestAllTypes.OneofGroup
	nil,                                  // 33: opaque.goproto.proto.testeditions.TestRequiredForeign.MapMessageEntry
	(*TestRequiredGroupFields_OptionalGroup)(nil), // 34: opaque.goproto.proto.testeditions.TestRequiredGroupFields.OptionalGroup
	(*TestRequiredGroupFields_RepeatedGroup)(nil), // 35: opaque.goproto.proto.testeditions.TestRequiredGroupFields.RepeatedGroup
	(ImportEnum)(0),        // 36: opaque.goproto.proto.testeditions.ImportEnum
	(*ImportMessage)(nil),  // 37: opaque.goproto.proto.testeditions.ImportMessage
	(enums_opaque.Enum)(0), // 38: opaque.goproto.proto.enums.Enum
}
var file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_depIdxs = []int32{
	1,   // 0: opaque.goproto.proto.testeditions.TestAllTypes.singular_nested_enum:type_name -> opaque.goproto.proto.testeditions.TestAllTypes.NestedEnum
	0,   // 1: opaque.goproto.proto.testeditions.TestAllTypes.singular_foreign_enum:type_name -> opaque.goproto.proto.testeditions.ForeignEnum
	36,  // 2: opaque.goproto.proto.testeditions.TestAllTypes.singular_import_enum:type_name -> opaque.goproto.proto.testeditions.ImportEnum
	13,  // 3: opaque.goproto.proto.testeditions.TestAllTypes.optionalgroup:type_name -> opaque.goproto.proto.testeditions.TestAllTypes.OptionalGroup
	13,  // 4: opaque.goproto.proto.testeditions.TestAllTypes.not_group_like_delimited:type_name -> opaque.goproto.proto.testeditions.TestAllTypes.OptionalGroup
	12,  // 5: opaque.goproto.proto.testeditions.TestAllTypes.optional_nested_message:type_name -> opaque.goproto.proto.testeditions.TestAllTypes.NestedMessage
	4,   // 6: opaque.goproto.proto.testeditions.TestAllTypes.optional_foreign_message:type_name -> opaque.goproto.proto.testeditions.ForeignMessage
	37,  // 7: opaque.goproto.proto.testeditions.TestAllTypes.optional_import_message:type_name -> opaque.goproto.proto.testeditions.ImportMessage
	1,   // 8: opaque.goproto.proto.testeditions.TestAllTypes.optional_nested_enum:type_name -> opaque.goproto.proto.testeditions.TestAllTypes.NestedEnum
	0,   // 9: opaque.goproto.proto.testeditions.TestAllTypes.optional_foreign_enum:type_name -> opaque.goproto.proto.testeditions.ForeignEnum
	36,  // 10: opaque.goproto.proto.testeditions.TestAllTypes.optional_import_enum:type_name -> opaque.goproto.proto.testeditions.ImportEnum
	12,  // 11: opaque.goproto.proto.testeditions.TestAllTypes.optional_lazy_nested_message:type_name -> opaque.goproto.proto.testeditions.TestAllTypes.NestedMessage
	14,  // 12: opaque.goproto.proto.testeditions.TestAllTypes.repeatedgroup:type_name -> opaque.goproto.proto.testeditions.TestAllTypes.RepeatedGroup
	12,  // 13: opaque.goproto.proto.testeditions.TestAllTypes.repeated_nested_message:type_name -> opaque.goproto.proto.testeditions.TestAllTypes.NestedMessage
	4,   // 14: opaque.goproto.proto.testeditions.TestAllTypes.repeated_foreign_message:type_name -> opaque.goproto.proto.testeditions.ForeignMessage
	37,  // 15: opaque.goproto.proto.testeditions.TestAllTypes.repeated_importmessage:type_name -> opaque.goproto.proto.testeditions.ImportMessage
	1,   // 16: opaque.goproto.proto.testeditions.TestAllTypes.repeated_nested_enum:type_name -> opaque.goproto.proto.testeditions.TestAllTypes.NestedEnum
	0,   // 17: opaque.goproto.proto.testeditions.TestAllTypes.repeated_foreign_enum:type_name -> opaque.goproto.proto.testeditions.ForeignEnum
	36,  // 18: opaque.goproto.proto.testeditions.TestAllTypes.repeated_importenum:type_name -> opaque.goproto.proto.testeditions.ImportEnum
	15,  // 19: opaque.goproto.proto.testeditions.TestAllTypes.map_int32_int32:type_name -> opaque.goproto.proto.testeditions.TestAllTypes.MapInt32Int32Entry
	16,  // 20: opaque.goproto.proto.testeditions.TestAllTypes.map_int64_int64:type_name -> opaque.goproto.proto.testeditions.TestAllTypes.MapInt64Int64Entry
	17,  // 21: opaque.goproto.proto.testeditions.TestAllTypes.map_uint32_uint32:type_name -> opaque.goproto.proto.testeditions.TestAllTypes.MapUint32Uint32Entry
	18,  // 22: opaque.goproto.proto.testeditions.TestAllTypes.map_uint64_uint64:type_name -> opaque.goproto.proto.testeditions.TestAllTypes.MapUint64Uint64Entry
	19,  // 23: opaque.goproto.proto.testeditions.TestAllTypes.map_sint32_sint32:type_name -> opaque.goproto.proto.testeditions.TestAllTypes.MapSint32Sint32Entry
	20,  // 24: opaque.goproto.proto.testeditions.TestAllTypes.map_sint64_sint64:type_name -> opaque.goproto.proto.testeditions.TestAllTypes.MapSint64Sint64Entry
	21,  // 25: opaque.goproto.proto.testeditions.TestAllTypes.map_fixed32_fixed32:type_name -> opaque.goproto.proto.testeditions.TestAllTypes.MapFixed32Fixed32Entry
	22,  // 26: opaque.goproto.proto.testeditions.TestAllTypes.map_fixed64_fixed64:type_name -> opaque.goproto.proto.testeditions.TestAllTypes.MapFixed64Fixed64Entry
	23,  // 27: opaque.goproto.proto.testeditions.TestAllTypes.map_sfixed32_sfixed32:type_name -> opaque.goproto.proto.testeditions.TestAllTypes.MapSfixed32Sfixed32Entry
	24,  // 28: opaque.goproto.proto.testeditions.TestAllTypes.map_sfixed64_sfixed64:type_name -> opaque.goproto.proto.testeditions.TestAllTypes.MapSfixed64Sfixed64Entry
	25,  // 29: opaque.goproto.proto.testeditions.TestAllTypes.map_int32_float:type_name -> opaque.goproto.proto.testeditions.TestAllTypes.MapInt32FloatEntry
	26,  // 30: opaque.goproto.proto.testeditions.TestAllTypes.map_int32_double:type_name -> opaque.goproto.proto.testeditions.TestAllTypes.MapInt32DoubleEntry
	27,  // 31: opaque.goproto.proto.testeditions.TestAllTypes.map_bool_bool:type_name -> opaque.goproto.proto.testeditions.TestAllTypes.MapBoolBoolEntry
	28,  // 32: opaque.goproto.proto.testeditions.TestAllTypes.map_string_string:type_name -> opaque.goproto.proto.testeditions.TestAllTypes.MapStringStringEntry
	29,  // 33: opaque.goproto.proto.testeditions.TestAllTypes.map_string_bytes:type_name -> opaque.goproto.proto.testeditions.TestAllTypes.MapStringBytesEntry
	30,  // 34: opaque.goproto.proto.testeditions.TestAllTypes.map_string_nested_message:type_name -> opaque.goproto.proto.testeditions.TestAllTypes.MapStringNestedMessageEntry
	31,  // 35: opaque.goproto.proto.testeditions.TestAllTypes.map_string_nested_enum:type_name -> opaque.goproto.proto.testeditions.TestAllTypes.MapStringNestedEnumEntry
	1,   // 36: opaque.goproto.proto.testeditions.TestAllTypes.default_nested_enum:type_name -> opaque.goproto.proto.testeditions.TestAllTypes.NestedEnum
	0,   // 37: opaque.goproto.proto.testeditions.TestAllTypes.default_foreign_enum:type_name -> opaque.goproto.proto.testeditions.ForeignEnum
	12,  // 38: opaque.goproto.proto.testeditions.TestAllTypes.oneof_nested_message:type_name -> opaque.goproto.proto.testeditions.TestAllTypes.NestedMessage
	1,   // 39: opaque.goproto.proto.testeditions.TestAllTypes.oneof_enum:type_name -> opaque.goproto.proto.testeditions.TestAllTypes.NestedEnum
	32,  // 40: opaque.goproto.proto.testeditions.TestAllTypes.oneofgroup:type_name -> opaque.goproto.proto.testeditions.TestAllTypes.OneofGroup
	2,   // 41: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f1:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 42: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f2:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 43: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f3:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 44: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f4:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 45: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f5:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 46: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f6:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 47: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f7:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 48: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f8:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 49: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f9:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 50: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f10:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 51: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f11:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 52: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f12:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 53: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f13:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 54: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f14:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 55: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f15:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 56: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f16:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 57: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f17:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 58: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f18:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 59: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f19:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 60: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f20:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 61: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f21:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 62: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f22:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 63: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f23:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 64: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f24:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 65: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f25:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 66: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f26:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 67: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f27:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 68: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f28:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 69: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f29:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 70: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f30:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 71: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f31:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 72: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f32:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 73: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f33:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 74: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f34:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 75: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f35:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 76: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f36:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 77: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f37:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 78: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f38:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 79: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f39:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 80: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f40:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 81: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f41:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 82: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f42:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 83: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f43:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 84: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f44:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 85: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f45:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 86: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f46:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 87: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f47:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 88: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f48:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 89: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f49:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 90: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f50:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 91: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f51:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 92: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f52:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 93: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f53:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 94: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f54:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 95: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f55:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 96: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f56:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 97: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f57:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 98: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f58:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 99: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f59:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 100: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f60:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 101: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f61:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 102: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f62:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 103: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f63:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 104: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f64:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 105: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f65:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 106: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f66:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 107: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f67:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 108: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f68:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 109: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f69:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 110: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f70:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 111: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f71:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 112: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f72:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 113: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f73:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 114: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f74:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 115: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f75:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 116: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f76:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 117: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f77:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 118: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f78:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 119: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f79:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 120: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f80:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 121: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f81:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 122: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f82:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 123: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f83:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 124: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f84:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 125: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f85:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 126: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f86:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 127: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f87:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 128: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f88:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 129: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f89:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 130: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f90:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 131: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f91:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 132: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f92:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 133: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f93:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 134: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f94:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 135: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f95:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 136: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f96:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 137: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f97:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 138: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f98:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 139: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f99:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	2,   // 140: opaque.goproto.proto.testeditions.TestManyMessageFieldsMessage.f100:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	5,   // 141: opaque.goproto.proto.testeditions.TestRequiredForeign.optional_message:type_name -> opaque.goproto.proto.testeditions.TestRequired
	5,   // 142: opaque.goproto.proto.testeditions.TestRequiredForeign.repeated_message:type_name -> opaque.goproto.proto.testeditions.TestRequired
	33,  // 143: opaque.goproto.proto.testeditions.TestRequiredForeign.map_message:type_name -> opaque.goproto.proto.testeditions.TestRequiredForeign.MapMessageEntry
	5,   // 144: opaque.goproto.proto.testeditions.TestRequiredForeign.oneof_message:type_name -> opaque.goproto.proto.testeditions.TestRequired
	34,  // 145: opaque.goproto.proto.testeditions.TestRequiredGroupFields.optionalgroup:type_name -> opaque.goproto.proto.testeditions.TestRequiredGroupFields.OptionalGroup
	35,  // 146: opaque.goproto.proto.testeditions.TestRequiredGroupFields.repeatedgroup:type_name -> opaque.goproto.proto.testeditions.TestRequiredGroupFields.RepeatedGroup
	5,   // 147: opaque.goproto.proto.testeditions.TestRequiredLazy.optional_lazy_message:type_name -> opaque.goproto.proto.testeditions.TestRequired
	0,   // 148: opaque.goproto.proto.testeditions.TestPackedTypes.packed_enum:type_name -> opaque.goproto.proto.testeditions.ForeignEnum
	38,  // 149: opaque.goproto.proto.testeditions.RemoteDefault.default:type_name -> opaque.goproto.proto.enums.Enum
	38,  // 150: opaque.goproto.proto.testeditions.RemoteDefault.zero:type_name -> opaque.goproto.proto.enums.Enum
	38,  // 151: opaque.goproto.proto.testeditions.RemoteDefault.one:type_name -> opaque.goproto.proto.enums.Enum
	38,  // 152: opaque.goproto.proto.testeditions.RemoteDefault.elevent:type_name -> opaque.goproto.proto.enums.Enum
	38,  // 153: opaque.goproto.proto.testeditions.RemoteDefault.seventeen:type_name -> opaque.goproto.proto.enums.Enum
	38,  // 154: opaque.goproto.proto.testeditions.RemoteDefault.thirtyseven:type_name -> opaque.goproto.proto.enums.Enum
	38,  // 155: opaque.goproto.proto.testeditions.RemoteDefault.sixtyseven:type_name -> opaque.goproto.proto.enums.Enum
	38,  // 156: opaque.goproto.proto.testeditions.RemoteDefault.negative:type_name -> opaque.goproto.proto.enums.Enum
	2,   // 157: opaque.goproto.proto.testeditions.TestAllTypes.NestedMessage.corecursive:type_name -> opaque.goproto.proto.testeditions.TestAllTypes
	12,  // 158: opaque.goproto.proto.testeditions.TestAllTypes.OptionalGroup.optional_nested_message:type_name -> opaque.goproto.proto.testeditions.TestAllTypes.NestedMessage
	12,  // 159: opaque.goproto.proto.testeditions.TestAllTypes.RepeatedGroup.optional_nested_message:type_name -> opaque.goproto.proto.testeditions.TestAllTypes.NestedMessage
	12,  // 160: opaque.goproto.proto.testeditions.TestAllTypes.MapStringNestedMessageEntry.value:type_name -> opaque.goproto.proto.testeditions.TestAllTypes.NestedMessage
	1,   // 161: opaque.goproto.proto.testeditions.TestAllTypes.MapStringNestedEnumEntry.value:type_name -> opaque.goproto.proto.testeditions.TestAllTypes.NestedEnum
	5,   // 162: opaque.goproto.proto.testeditions.TestRequiredForeign.MapMessageEntry.value:type_name -> opaque.goproto.proto.testeditions.TestRequired
	10,  // 163: opaque.goproto.proto.testeditions.packed_int32:extendee -> opaque.goproto.proto.testeditions.TestPackedExtensions
	10,  // 164: opaque.goproto.proto.testeditions.packed_int64:extendee -> opaque.goproto.proto.testeditions.TestPackedExtensions
	10,  // 165: opaque.goproto.proto.testeditions.packed_uint32:extendee -> opaque.goproto.proto.testeditions.TestPackedExtensions
	10,  // 166: opaque.goproto.proto.testeditions.packed_uint64:extendee -> opaque.goproto.proto.testeditions.TestPackedExtensions
	10,  // 167: opaque.goproto.proto.testeditions.packed_sint32:extendee -> opaque.goproto.proto.testeditions.TestPackedExtensions
	10,  // 168: opaque.goproto.proto.testeditions.packed_sint64:extendee -> opaque.goproto.proto.testeditions.TestPackedExtensions
	10,  // 169: opaque.goproto.proto.testeditions.packed_fixed32:extendee -> opaque.goproto.proto.testeditions.TestPackedExtensions
	10,  // 170: opaque.goproto.proto.testeditions.packed_fixed64:extendee -> opaque.goproto.proto.testeditions.TestPackedExtensions
	10,  // 171: opaque.goproto.proto.testeditions.packed_sfixed32:extendee -> opaque.goproto.proto.testeditions.TestPackedExtensions
	10,  // 172: opaque.goproto.proto.testeditions.packed_sfixed64:extendee -> opaque.goproto.proto.testeditions.TestPackedExtensions
	10,  // 173: opaque.goproto.proto.testeditions.packed_float:extendee -> opaque.goproto.proto.testeditions.TestPackedExtensions
	10,  // 174: opaque.goproto.proto.testeditions.packed_double:extendee -> opaque.goproto.proto.testeditions.TestPackedExtensions
	10,  // 175: opaque.goproto.proto.testeditions.packed_bool:extendee -> opaque.goproto.proto.testeditions.TestPackedExtensions
	10,  // 176: opaque.goproto.proto.testeditions.packed_enum:extendee -> opaque.goproto.proto.testeditions.TestPackedExtensions
	0,   // 177: opaque.goproto.proto.testeditions.packed_enum:type_name -> opaque.goproto.proto.testeditions.ForeignEnum
	178, // [178:178] is the sub-list for method output_type
	178, // [178:178] is the sub-list for method input_type
	177, // [177:178] is the sub-list for extension type_name
	163, // [163:177] is the sub-list for extension extendee
	0,   // [0:163] is the sub-list for field type_name
}

func init() { file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_init() }
func file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_init() {
	if File_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto != nil {
		return
	}
	file_internal_testprotos_testeditions_testeditions_opaque_test_import_opaque_proto_init()
	file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_msgTypes[0].OneofWrappers = []any{
		(*testAllTypes_OneofUint32)(nil),
		(*testAllTypes_OneofNestedMessage)(nil),
		(*testAllTypes_OneofString)(nil),
		(*testAllTypes_OneofBytes)(nil),
		(*testAllTypes_OneofBool)(nil),
		(*testAllTypes_OneofUint64)(nil),
		(*testAllTypes_OneofFloat)(nil),
		(*testAllTypes_OneofDouble)(nil),
		(*testAllTypes_OneofEnum)(nil),
		(*testAllTypes_Oneofgroup)(nil),
		(*testAllTypes_OneofOptionalUint32)(nil),
	}
	file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_msgTypes[4].OneofWrappers = []any{
		(*testRequiredForeign_OneofMessage)(nil),
	}
	type x struct{}
	out := protoimpl.TypeBuilder{
		File: protoimpl.DescBuilder{
			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
			RawDescriptor: []byte(file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_rawDesc),
			NumEnums:      2,
			NumMessages:   34,
			NumExtensions: 14,
			NumServices:   0,
		},
		GoTypes:           file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_goTypes,
		DependencyIndexes: file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_depIdxs,
		EnumInfos:         file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_enumTypes,
		MessageInfos:      file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_msgTypes,
		ExtensionInfos:    file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_extTypes,
	}.Build()
	File_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto = out.File
	file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_goTypes = nil
	file_internal_testprotos_testeditions_testeditions_opaque_test_opaque_proto_depIdxs = nil
}
