// Code generated by protoc-gen-go. DO NOT EDIT.
// source: extensions/proto3/ext3.proto

package proto3

import (
	fmt "fmt"
	proto "github.com/golang/protobuf/proto"
	descriptor "github.com/golang/protobuf/protoc-gen-go/descriptor"
	protoreflect "github.com/golang/protobuf/v2/reflect/protoreflect"
	prototype "github.com/golang/protobuf/v2/reflect/prototype"
	protoimpl "github.com/golang/protobuf/v2/runtime/protoimpl"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

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

type Enum int32

const (
	Enum_ZERO Enum = 0
)

type xxx_Enum Enum

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

var Enum_name = map[int32]string{
	0: "ZERO",
}

var Enum_value = map[string]int32{
	"ZERO": 0,
}

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

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

type Message struct {
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

type xxx_Message struct{ m *Message }

func (m *Message) ProtoReflect() protoreflect.Message {
	return xxx_Message{m}
}
func (m xxx_Message) Type() protoreflect.MessageType {
	return xxx_Ext3_ProtoFile_MessageTypes[0].Type
}
func (m xxx_Message) KnownFields() protoreflect.KnownFields {
	return xxx_Ext3_ProtoFile_MessageTypes[0].KnownFieldsOf(m.m)
}
func (m xxx_Message) UnknownFields() protoreflect.UnknownFields {
	return xxx_Ext3_ProtoFile_MessageTypes[0].UnknownFieldsOf(m.m)
}
func (m xxx_Message) Interface() protoreflect.ProtoMessage {
	return m.m
}
func (m xxx_Message) ProtoMutable() {}

func (m *Message) Reset()         { *m = Message{} }
func (m *Message) String() string { return proto.CompactTextString(m) }
func (*Message) ProtoMessage()    {}
func (*Message) Descriptor() ([]byte, []int) {
	return fileDescriptor_3db31bb248c8865e, []int{0}
}

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

var xxx_messageInfo_Message proto.InternalMessageInfo

var E_ExtensionBool = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.MessageOptions)(nil),
	ExtensionType: (*bool)(nil),
	Field:         1001,
	Name:          "goproto.protoc.extension.proto3.extension_bool",
	Tag:           "varint,1001,opt,name=extension_bool",
	Filename:      "extensions/proto3/ext3.proto",
}

var E_ExtensionEnum = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.MessageOptions)(nil),
	ExtensionType: (*Enum)(nil),
	Field:         1002,
	Name:          "goproto.protoc.extension.proto3.extension_enum",
	Tag:           "varint,1002,opt,name=extension_enum,enum=goproto.protoc.extension.proto3.Enum",
	Filename:      "extensions/proto3/ext3.proto",
}

var E_ExtensionInt32 = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.MessageOptions)(nil),
	ExtensionType: (*int32)(nil),
	Field:         1003,
	Name:          "goproto.protoc.extension.proto3.extension_int32",
	Tag:           "varint,1003,opt,name=extension_int32",
	Filename:      "extensions/proto3/ext3.proto",
}

var E_ExtensionSint32 = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.MessageOptions)(nil),
	ExtensionType: (*int32)(nil),
	Field:         1004,
	Name:          "goproto.protoc.extension.proto3.extension_sint32",
	Tag:           "zigzag32,1004,opt,name=extension_sint32",
	Filename:      "extensions/proto3/ext3.proto",
}

var E_ExtensionUint32 = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.MessageOptions)(nil),
	ExtensionType: (*uint32)(nil),
	Field:         1005,
	Name:          "goproto.protoc.extension.proto3.extension_uint32",
	Tag:           "varint,1005,opt,name=extension_uint32",
	Filename:      "extensions/proto3/ext3.proto",
}

var E_ExtensionInt64 = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.MessageOptions)(nil),
	ExtensionType: (*int64)(nil),
	Field:         1006,
	Name:          "goproto.protoc.extension.proto3.extension_int64",
	Tag:           "varint,1006,opt,name=extension_int64",
	Filename:      "extensions/proto3/ext3.proto",
}

var E_ExtensionSint64 = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.MessageOptions)(nil),
	ExtensionType: (*int64)(nil),
	Field:         1007,
	Name:          "goproto.protoc.extension.proto3.extension_sint64",
	Tag:           "zigzag64,1007,opt,name=extension_sint64",
	Filename:      "extensions/proto3/ext3.proto",
}

var E_ExtensionUint64 = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.MessageOptions)(nil),
	ExtensionType: (*uint64)(nil),
	Field:         1008,
	Name:          "goproto.protoc.extension.proto3.extension_uint64",
	Tag:           "varint,1008,opt,name=extension_uint64",
	Filename:      "extensions/proto3/ext3.proto",
}

var E_ExtensionSfixed32 = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.MessageOptions)(nil),
	ExtensionType: (*int32)(nil),
	Field:         1009,
	Name:          "goproto.protoc.extension.proto3.extension_sfixed32",
	Tag:           "fixed32,1009,opt,name=extension_sfixed32",
	Filename:      "extensions/proto3/ext3.proto",
}

var E_ExtensionFixed32 = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.MessageOptions)(nil),
	ExtensionType: (*uint32)(nil),
	Field:         1010,
	Name:          "goproto.protoc.extension.proto3.extension_fixed32",
	Tag:           "fixed32,1010,opt,name=extension_fixed32",
	Filename:      "extensions/proto3/ext3.proto",
}

var E_ExtensionFloat = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.MessageOptions)(nil),
	ExtensionType: (*float32)(nil),
	Field:         1011,
	Name:          "goproto.protoc.extension.proto3.extension_float",
	Tag:           "fixed32,1011,opt,name=extension_float",
	Filename:      "extensions/proto3/ext3.proto",
}

var E_ExtensionSfixed64 = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.MessageOptions)(nil),
	ExtensionType: (*int64)(nil),
	Field:         1012,
	Name:          "goproto.protoc.extension.proto3.extension_sfixed64",
	Tag:           "fixed64,1012,opt,name=extension_sfixed64",
	Filename:      "extensions/proto3/ext3.proto",
}

var E_ExtensionFixed64 = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.MessageOptions)(nil),
	ExtensionType: (*uint64)(nil),
	Field:         1013,
	Name:          "goproto.protoc.extension.proto3.extension_fixed64",
	Tag:           "fixed64,1013,opt,name=extension_fixed64",
	Filename:      "extensions/proto3/ext3.proto",
}

var E_ExtensionDouble = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.MessageOptions)(nil),
	ExtensionType: (*float64)(nil),
	Field:         1014,
	Name:          "goproto.protoc.extension.proto3.extension_double",
	Tag:           "fixed64,1014,opt,name=extension_double",
	Filename:      "extensions/proto3/ext3.proto",
}

var E_ExtensionString = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.MessageOptions)(nil),
	ExtensionType: (*string)(nil),
	Field:         1015,
	Name:          "goproto.protoc.extension.proto3.extension_string",
	Tag:           "bytes,1015,opt,name=extension_string",
	Filename:      "extensions/proto3/ext3.proto",
}

var E_ExtensionBytes = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.MessageOptions)(nil),
	ExtensionType: ([]byte)(nil),
	Field:         1016,
	Name:          "goproto.protoc.extension.proto3.extension_bytes",
	Tag:           "bytes,1016,opt,name=extension_bytes",
	Filename:      "extensions/proto3/ext3.proto",
}

var E_Extension_Message = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.MessageOptions)(nil),
	ExtensionType: (*Message)(nil),
	Field:         1017,
	Name:          "goproto.protoc.extension.proto3.extension_Message",
	Tag:           "bytes,1017,opt,name=extension_Message",
	Filename:      "extensions/proto3/ext3.proto",
}

var E_RepeatedExtensionBool = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.MessageOptions)(nil),
	ExtensionType: ([]bool)(nil),
	Field:         2001,
	Name:          "goproto.protoc.extension.proto3.repeated_extension_bool",
	Tag:           "varint,2001,rep,name=repeated_extension_bool",
	Filename:      "extensions/proto3/ext3.proto",
}

var E_RepeatedExtensionEnum = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.MessageOptions)(nil),
	ExtensionType: ([]Enum)(nil),
	Field:         2002,
	Name:          "goproto.protoc.extension.proto3.repeated_extension_enum",
	Tag:           "varint,2002,rep,name=repeated_extension_enum,enum=goproto.protoc.extension.proto3.Enum",
	Filename:      "extensions/proto3/ext3.proto",
}

var E_RepeatedExtensionInt32 = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.MessageOptions)(nil),
	ExtensionType: ([]int32)(nil),
	Field:         2003,
	Name:          "goproto.protoc.extension.proto3.repeated_extension_int32",
	Tag:           "varint,2003,rep,name=repeated_extension_int32",
	Filename:      "extensions/proto3/ext3.proto",
}

var E_RepeatedExtensionSint32 = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.MessageOptions)(nil),
	ExtensionType: ([]int32)(nil),
	Field:         2004,
	Name:          "goproto.protoc.extension.proto3.repeated_extension_sint32",
	Tag:           "zigzag32,2004,rep,name=repeated_extension_sint32",
	Filename:      "extensions/proto3/ext3.proto",
}

var E_RepeatedExtensionUint32 = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.MessageOptions)(nil),
	ExtensionType: ([]uint32)(nil),
	Field:         2005,
	Name:          "goproto.protoc.extension.proto3.repeated_extension_uint32",
	Tag:           "varint,2005,rep,name=repeated_extension_uint32",
	Filename:      "extensions/proto3/ext3.proto",
}

var E_RepeatedExtensionInt64 = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.MessageOptions)(nil),
	ExtensionType: ([]int64)(nil),
	Field:         2006,
	Name:          "goproto.protoc.extension.proto3.repeated_extension_int64",
	Tag:           "varint,2006,rep,name=repeated_extension_int64",
	Filename:      "extensions/proto3/ext3.proto",
}

var E_RepeatedExtensionSint64 = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.MessageOptions)(nil),
	ExtensionType: ([]int64)(nil),
	Field:         2007,
	Name:          "goproto.protoc.extension.proto3.repeated_extension_sint64",
	Tag:           "zigzag64,2007,rep,name=repeated_extension_sint64",
	Filename:      "extensions/proto3/ext3.proto",
}

var E_RepeatedExtensionUint64 = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.MessageOptions)(nil),
	ExtensionType: ([]uint64)(nil),
	Field:         2008,
	Name:          "goproto.protoc.extension.proto3.repeated_extension_uint64",
	Tag:           "varint,2008,rep,name=repeated_extension_uint64",
	Filename:      "extensions/proto3/ext3.proto",
}

var E_RepeatedExtensionSfixed32 = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.MessageOptions)(nil),
	ExtensionType: ([]int32)(nil),
	Field:         2009,
	Name:          "goproto.protoc.extension.proto3.repeated_extension_sfixed32",
	Tag:           "fixed32,2009,rep,name=repeated_extension_sfixed32",
	Filename:      "extensions/proto3/ext3.proto",
}

var E_RepeatedExtensionFixed32 = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.MessageOptions)(nil),
	ExtensionType: ([]uint32)(nil),
	Field:         2010,
	Name:          "goproto.protoc.extension.proto3.repeated_extension_fixed32",
	Tag:           "fixed32,2010,rep,name=repeated_extension_fixed32",
	Filename:      "extensions/proto3/ext3.proto",
}

var E_RepeatedExtensionFloat = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.MessageOptions)(nil),
	ExtensionType: ([]float32)(nil),
	Field:         2011,
	Name:          "goproto.protoc.extension.proto3.repeated_extension_float",
	Tag:           "fixed32,2011,rep,name=repeated_extension_float",
	Filename:      "extensions/proto3/ext3.proto",
}

var E_RepeatedExtensionSfixed64 = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.MessageOptions)(nil),
	ExtensionType: ([]int64)(nil),
	Field:         2012,
	Name:          "goproto.protoc.extension.proto3.repeated_extension_sfixed64",
	Tag:           "fixed64,2012,rep,name=repeated_extension_sfixed64",
	Filename:      "extensions/proto3/ext3.proto",
}

var E_RepeatedExtensionFixed64 = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.MessageOptions)(nil),
	ExtensionType: ([]uint64)(nil),
	Field:         2013,
	Name:          "goproto.protoc.extension.proto3.repeated_extension_fixed64",
	Tag:           "fixed64,2013,rep,name=repeated_extension_fixed64",
	Filename:      "extensions/proto3/ext3.proto",
}

var E_RepeatedExtensionDouble = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.MessageOptions)(nil),
	ExtensionType: ([]float64)(nil),
	Field:         2014,
	Name:          "goproto.protoc.extension.proto3.repeated_extension_double",
	Tag:           "fixed64,2014,rep,name=repeated_extension_double",
	Filename:      "extensions/proto3/ext3.proto",
}

var E_RepeatedExtensionString = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.MessageOptions)(nil),
	ExtensionType: ([]string)(nil),
	Field:         2015,
	Name:          "goproto.protoc.extension.proto3.repeated_extension_string",
	Tag:           "bytes,2015,rep,name=repeated_extension_string",
	Filename:      "extensions/proto3/ext3.proto",
}

var E_RepeatedExtensionBytes = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.MessageOptions)(nil),
	ExtensionType: ([][]byte)(nil),
	Field:         2016,
	Name:          "goproto.protoc.extension.proto3.repeated_extension_bytes",
	Tag:           "bytes,2016,rep,name=repeated_extension_bytes",
	Filename:      "extensions/proto3/ext3.proto",
}

var E_RepeatedExtension_Message = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.MessageOptions)(nil),
	ExtensionType: ([]*Message)(nil),
	Field:         2017,
	Name:          "goproto.protoc.extension.proto3.repeated_extension_Message",
	Tag:           "bytes,2017,rep,name=repeated_extension_Message",
	Filename:      "extensions/proto3/ext3.proto",
}

func init() {
	proto.RegisterEnum("goproto.protoc.extension.proto3.Enum", Enum_name, Enum_value)
	proto.RegisterType((*Message)(nil), "goproto.protoc.extension.proto3.Message")
	proto.RegisterExtension(E_ExtensionBool)
	proto.RegisterExtension(E_ExtensionEnum)
	proto.RegisterExtension(E_ExtensionInt32)
	proto.RegisterExtension(E_ExtensionSint32)
	proto.RegisterExtension(E_ExtensionUint32)
	proto.RegisterExtension(E_ExtensionInt64)
	proto.RegisterExtension(E_ExtensionSint64)
	proto.RegisterExtension(E_ExtensionUint64)
	proto.RegisterExtension(E_ExtensionSfixed32)
	proto.RegisterExtension(E_ExtensionFixed32)
	proto.RegisterExtension(E_ExtensionFloat)
	proto.RegisterExtension(E_ExtensionSfixed64)
	proto.RegisterExtension(E_ExtensionFixed64)
	proto.RegisterExtension(E_ExtensionDouble)
	proto.RegisterExtension(E_ExtensionString)
	proto.RegisterExtension(E_ExtensionBytes)
	proto.RegisterExtension(E_Extension_Message)
	proto.RegisterExtension(E_RepeatedExtensionBool)
	proto.RegisterExtension(E_RepeatedExtensionEnum)
	proto.RegisterExtension(E_RepeatedExtensionInt32)
	proto.RegisterExtension(E_RepeatedExtensionSint32)
	proto.RegisterExtension(E_RepeatedExtensionUint32)
	proto.RegisterExtension(E_RepeatedExtensionInt64)
	proto.RegisterExtension(E_RepeatedExtensionSint64)
	proto.RegisterExtension(E_RepeatedExtensionUint64)
	proto.RegisterExtension(E_RepeatedExtensionSfixed32)
	proto.RegisterExtension(E_RepeatedExtensionFixed32)
	proto.RegisterExtension(E_RepeatedExtensionFloat)
	proto.RegisterExtension(E_RepeatedExtensionSfixed64)
	proto.RegisterExtension(E_RepeatedExtensionFixed64)
	proto.RegisterExtension(E_RepeatedExtensionDouble)
	proto.RegisterExtension(E_RepeatedExtensionString)
	proto.RegisterExtension(E_RepeatedExtensionBytes)
	proto.RegisterExtension(E_RepeatedExtension_Message)
}

func init() { proto.RegisterFile("extensions/proto3/ext3.proto", fileDescriptor_3db31bb248c8865e) }

var fileDescriptor_3db31bb248c8865e = []byte{
	// 758 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x97, 0xdb, 0x4b, 0xdc, 0x5e,
	0x10, 0xc7, 0x7f, 0xab, 0xab, 0xab, 0xe7, 0xa7, 0xee, 0xba, 0xd0, 0x7a, 0x69, 0x41, 0x29, 0x14,
	0xa4, 0x60, 0x02, 0xbb, 0x21, 0x0f, 0x79, 0x94, 0x6a, 0xb1, 0xad, 0x08, 0x29, 0x85, 0x22, 0xa5,
	0x76, 0xb3, 0x39, 0xa6, 0x81, 0x98, 0xb3, 0x6c, 0x4e, 0x5a, 0xfb, 0xd4, 0xd7, 0xfe, 0x7b, 0xbd,
	0xdf, 0x6f, 0x8f, 0xbd, 0xdf, 0x6f, 0x6f, 0x65, 0xf6, 0x64, 0x4d, 0x36, 0x39, 0x31, 0xe3, 0x93,
	0x49, 0xcc, 0x7c, 0x66, 0xe6, 0x3b, 0x67, 0xbf, 0x43, 0xc8, 0x71, 0xba, 0xc7, 0xa9, 0x1f, 0xb8,
	0xcc, 0x0f, 0xd4, 0x4e, 0x97, 0x71, 0xd6, 0x54, 0xe9, 0x1e, 0x6f, 0x2a, 0xbd, 0xeb, 0xfa, 0x82,
	0xc3, 0x7a, 0x17, 0xe2, 0xb6, 0xad, 0xec, 0xbf, 0x2c, 0x1e, 0x34, 0xe7, 0x17, 0x1d, 0xc6, 0x1c,
	0x8f, 0x8a, 0x50, 0x2b, 0xdc, 0x51, 0x6d, 0x1a, 0xb4, 0xbb, 0x6e, 0x87, 0xb3, 0xae, 0x78, 0xe5,
	0xc4, 0x38, 0xa9, 0x6c, 0xd0, 0x20, 0x68, 0x39, 0xf4, 0x54, 0x8d, 0x94, 0x57, 0xfd, 0x70, 0xb7,
	0x3e, 0x46, 0xca, 0x5b, 0xab, 0xe6, 0x66, 0xed, 0x3f, 0xe3, 0x0c, 0x99, 0xda, 0x47, 0x6e, 0x5b,
	0x8c, 0x79, 0xf5, 0x05, 0x45, 0x10, 0x95, 0x3e, 0x51, 0x89, 0xa2, 0x37, 0x3b, 0x1c, 0x8a, 0x9c,
	0x7d, 0x5b, 0x59, 0x2c, 0x2d, 0x8d, 0x99, 0x93, 0xfb, 0x71, 0x2b, 0x8c, 0x79, 0x86, 0x9f, 0x04,
	0x51, 0x48, 0x52, 0x08, 0x7a, 0x07, 0xa0, 0xa9, 0xc6, 0x49, 0xa5, 0xa0, 0x47, 0x05, 0x6a, 0x4e,
	0xe4, 0x83, 0x5b, 0x63, 0x9d, 0x54, 0xe3, 0x7c, 0xae, 0xcf, 0x9b, 0x8d, 0xe2, 0x84, 0xef, 0x21,
	0xe1, 0x88, 0x19, 0x17, 0xba, 0x0e, 0x71, 0xc6, 0x39, 0x52, 0x8b, 0x51, 0x01, 0x92, 0xf5, 0x01,
	0x58, 0xd3, 0x66, 0x5c, 0xc4, 0x05, 0x37, 0x0b, 0x0b, 0x91, 0xb0, 0x8f, 0x00, 0x9b, 0x4c, 0xc0,
	0x2e, 0x0a, 0x58, 0xba, 0x49, 0x5d, 0x2b, 0x66, 0x7d, 0x02, 0xd6, 0xf0, 0x60, 0x93, 0xba, 0x96,
	0x6d, 0x12, 0xc3, 0xfa, 0x0c, 0xac, 0x7a, 0xaa, 0xc9, 0x34, 0x2c, 0x44, 0xc2, 0xbe, 0x00, 0xac,
	0x9c, 0x6a, 0x52, 0xd7, 0x8c, 0x4d, 0x52, 0x4f, 0x54, 0xb6, 0xe3, 0xee, 0x51, 0x1b, 0xa3, 0xd9,
	0x57, 0xc0, 0x55, 0xcd, 0xe9, 0xb8, 0xb6, 0x28, 0xd4, 0xd8, 0x20, 0xf1, 0xc3, 0x6d, 0x34, 0xef,
	0x1b, 0xf0, 0x2a, 0x66, 0xdc, 0xd8, 0x5a, 0x84, 0x1b, 0x18, 0xc2, 0x8e, 0xc7, 0x5a, 0xbc, 0x18,
	0xf6, 0x1d, 0x60, 0x43, 0x89, 0x21, 0xac, 0x41, 0x9c, 0xac, 0x55, 0x8c, 0x72, 0x3f, 0x80, 0x56,
	0xcb, 0xb4, 0xaa, 0x6b, 0x92, 0x56, 0x31, 0xbc, 0x9f, 0xc0, 0x1b, 0x4d, 0xb7, 0x9a, 0x9e, 0xab,
	0xcd, 0x42, 0xcb, 0xa3, 0xc5, 0xb4, 0x5f, 0x40, 0x2b, 0x25, 0xe6, 0x7a, 0xba, 0x17, 0x98, 0x3a,
	0x71, 0xbc, 0xeb, 0xfa, 0x4e, 0x31, 0xec, 0x37, 0xc0, 0xc6, 0x93, 0x27, 0xae, 0x17, 0x38, 0x38,
	0x04, 0xeb, 0x26, 0xa7, 0x41, 0x31, 0xeb, 0x0f, 0xb0, 0x26, 0x12, 0x43, 0x58, 0x81, 0x38, 0xe3,
	0x46, 0x52, 0xb3, 0x28, 0xa4, 0x18, 0xf6, 0x17, 0x60, 0xff, 0x37, 0x96, 0x0a, 0xcd, 0x2a, 0x8a,
	0x4b, 0xa8, 0x1b, 0x3d, 0x31, 0x2e, 0x91, 0x99, 0x2e, 0xed, 0xd0, 0x16, 0xa7, 0xf6, 0xf6, 0x61,
	0x4d, 0xf7, 0x4e, 0x75, 0x71, 0x78, 0x69, 0xcc, 0x3c, 0xd2, 0x07, 0xac, 0x0e, 0x98, 0xef, 0x2d,
	0x29, 0x19, 0xe7, 0xc2, 0x77, 0x81, 0x8c, 0x76, 0xe1, 0x6c, 0x01, 0x3d, 0x37, 0xde, 0x22, 0xb3,
	0x92, 0x02, 0x90, 0xee, 0x77, 0x0f, 0x2a, 0x18, 0x31, 0x8f, 0x66, 0xd0, 0xc2, 0x9e, 0x2f, 0x93,
	0x39, 0x09, 0x1b, 0xeb, 0xd3, 0xf7, 0x01, 0x3e, 0x6d, 0xce, 0x64, 0xe0, 0x91, 0x5f, 0xcb, 0xe9,
	0x58, 0xe3, 0x7e, 0x00, 0xf4, 0x49, 0x09, 0x3d, 0x32, 0xf0, 0x5c, 0x5d, 0x30, 0x3f, 0xd3, 0x87,
	0x00, 0x1f, 0x96, 0xeb, 0xa2, 0x6b, 0x07, 0xe8, 0x82, 0x81, 0x3f, 0x02, 0x78, 0x3d, 0x47, 0x97,
	0x5c, 0x3a, 0xd6, 0xeb, 0x1f, 0x03, 0xbd, 0x9c, 0xa3, 0x8b, 0xae, 0x19, 0x57, 0xc9, 0x31, 0x59,
	0xed, 0x68, 0xb3, 0x7e, 0x02, 0xfc, 0xaa, 0x39, 0x97, 0xad, 0xbe, 0xbf, 0x04, 0xae, 0x90, 0x79,
	0x49, 0x06, 0x74, 0x82, 0xa7, 0x90, 0xa0, 0x62, 0xce, 0x66, 0x12, 0xf4, 0xb7, 0x82, 0x7c, 0xb2,
	0xc8, 0xf5, 0xf0, 0x0c, 0xe8, 0x43, 0x92, 0xc9, 0x8a, 0x35, 0x71, 0x90, 0x3a, 0x18, 0xf5, 0x9f,
	0x03, 0xbe, 0x96, 0xab, 0x8e, 0xae, 0x1d, 0xa4, 0x0e, 0x26, 0xc1, 0x0b, 0x48, 0x30, 0x9a, 0xa7,
	0x4e, 0xee, 0xe9, 0xc1, 0x6e, 0x94, 0x97, 0x80, 0x2f, 0x49, 0x4e, 0x4f, 0xb4, 0x59, 0x72, 0x4e,
	0x3e, 0x72, 0xc5, 0xbc, 0x02, 0xfa, 0xb8, 0xec, 0xe4, 0x8b, 0x55, 0x23, 0x9f, 0x2c, 0x72, 0xe7,
	0xbc, 0x06, 0xf8, 0x84, 0x64, 0xb2, 0x62, 0xf7, 0xdc, 0x2e, 0x49, 0x85, 0x47, 0x6f, 0xa1, 0x37,
	0x80, 0x3f, 0xcc, 0x16, 0xca, 0x8e, 0x28, 0xfa, 0xcf, 0xca, 0xf9, 0xad, 0xb3, 0x8e, 0xcb, 0xaf,
	0x85, 0x96, 0xd2, 0x66, 0xbb, 0xaa, 0xc3, 0xbc, 0x96, 0xef, 0xc4, 0x5f, 0x11, 0xd7, 0x1b, 0x6a,
	0x7b, 0xd7, 0x16, 0xf7, 0xed, 0x65, 0x87, 0xfa, 0xcb, 0x0e, 0x53, 0x39, 0x0d, 0xb8, 0xdd, 0xe2,
	0x2d, 0x35, 0xf3, 0xc9, 0x62, 0x8d, 0x8a, 0xbf, 0xff, 0x02, 0x00, 0x00, 0xff, 0xff, 0x65, 0x92,
	0xaa, 0xed, 0xce, 0x0c, 0x00, 0x00,
}

func init() {
	xxx_Ext3_ProtoFile_FileDesc.Enums = xxx_Ext3_ProtoFile_EnumDescs[0:1]
	xxx_Ext3_ProtoFile_FileDesc.Messages = xxx_Ext3_ProtoFile_MessageDescs[0:1]
	var err error
	Ext3_ProtoFile, err = prototype.NewFile(&xxx_Ext3_ProtoFile_FileDesc)
	if err != nil {
		panic(err)
	}
}

const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)

var Ext3_ProtoFile protoreflect.FileDescriptor

var xxx_Ext3_ProtoFile_FileDesc = prototype.File{
	Syntax:  protoreflect.Proto3,
	Path:    "extensions/proto3/ext3.proto",
	Package: "goproto.protoc.extension.proto3",
	Imports: []protoreflect.FileImport{
		{FileDescriptor: prototype.PlaceholderFile("google/protobuf/descriptor.proto", "google.protobuf")},
	},
}
var xxx_Ext3_ProtoFile_EnumTypes = [1]protoreflect.EnumType{
	prototype.GoEnum(
		xxx_Ext3_ProtoFile_EnumDescs[0].Reference(),
		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.ProtoEnum {
			return Enum(n)
		},
	),
}
var xxx_Ext3_ProtoFile_EnumDescs = [1]prototype.Enum{
	{
		Name: "Enum",
		Values: []prototype.EnumValue{
			{Name: "ZERO", Number: 0},
		},
	},
}
var xxx_Ext3_ProtoFile_MessageTypes = [1]protoimpl.MessageType{
	{Type: prototype.GoMessage(
		xxx_Ext3_ProtoFile_MessageDescs[0].Reference(),
		func(protoreflect.MessageType) protoreflect.ProtoMessage {
			return new(Message)
		},
	)},
}
var xxx_Ext3_ProtoFile_MessageDescs = [1]prototype.Message{
	{
		Name: "Message",
	},
}
