// Code generated by protoc-gen-go. DO NOT EDIT.
// source: conformance.proto

package conformance

import proto "github.com/golang/protobuf/proto"
import fmt "fmt"
import math "math"
import google_protobuf "github.com/golang/protobuf/ptypes/any"
import google_protobuf1 "github.com/golang/protobuf/ptypes/duration"
import google_protobuf2 "google.golang.org/genproto/protobuf"
import google_protobuf3 "github.com/golang/protobuf/ptypes/struct"
import google_protobuf4 "github.com/golang/protobuf/ptypes/timestamp"
import google_protobuf5 "github.com/golang/protobuf/ptypes/wrappers"

// 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.ProtoPackageIsVersion2 // please upgrade the proto package

type WireFormat int32

const (
	WireFormat_UNSPECIFIED WireFormat = 0
	WireFormat_PROTOBUF    WireFormat = 1
	WireFormat_JSON        WireFormat = 2
)

var WireFormat_name = map[int32]string{
	0: "UNSPECIFIED",
	1: "PROTOBUF",
	2: "JSON",
}
var WireFormat_value = map[string]int32{
	"UNSPECIFIED": 0,
	"PROTOBUF":    1,
	"JSON":        2,
}

func (x WireFormat) String() string {
	return proto.EnumName(WireFormat_name, int32(x))
}
func (WireFormat) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_conformance_3cdb5b28737909f3, []int{0}
}

type ForeignEnum int32

const (
	ForeignEnum_FOREIGN_FOO ForeignEnum = 0
	ForeignEnum_FOREIGN_BAR ForeignEnum = 1
	ForeignEnum_FOREIGN_BAZ ForeignEnum = 2
)

var ForeignEnum_name = map[int32]string{
	0: "FOREIGN_FOO",
	1: "FOREIGN_BAR",
	2: "FOREIGN_BAZ",
}
var ForeignEnum_value = map[string]int32{
	"FOREIGN_FOO": 0,
	"FOREIGN_BAR": 1,
	"FOREIGN_BAZ": 2,
}

func (x ForeignEnum) String() string {
	return proto.EnumName(ForeignEnum_name, int32(x))
}
func (ForeignEnum) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_conformance_3cdb5b28737909f3, []int{1}
}

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
)

var TestAllTypes_NestedEnum_name = map[int32]string{
	0:  "FOO",
	1:  "BAR",
	2:  "BAZ",
	-1: "NEG",
}
var TestAllTypes_NestedEnum_value = map[string]int32{
	"FOO": 0,
	"BAR": 1,
	"BAZ": 2,
	"NEG": -1,
}

func (x TestAllTypes_NestedEnum) String() string {
	return proto.EnumName(TestAllTypes_NestedEnum_name, int32(x))
}
func (TestAllTypes_NestedEnum) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_conformance_3cdb5b28737909f3, []int{2, 0}
}

// Represents a single test case's input.  The testee should:
//
//   1. parse this proto (which should always succeed)
//   2. parse the protobuf or JSON payload in "payload" (which may fail)
//   3. if the parse succeeded, serialize the message in the requested format.
type ConformanceRequest struct {
	// The payload (whether protobuf of JSON) is always for a TestAllTypes proto
	// (see below).
	//
	// Types that are valid to be assigned to Payload:
	//	*ConformanceRequest_ProtobufPayload
	//	*ConformanceRequest_JsonPayload
	Payload isConformanceRequest_Payload `protobuf_oneof:"payload"`
	// Which format should the testee serialize its message to?
	RequestedOutputFormat WireFormat `protobuf:"varint,3,opt,name=requested_output_format,json=requestedOutputFormat,enum=conformance.WireFormat" json:"requested_output_format,omitempty"`
	XXX_NoUnkeyedLiteral  struct{}   `json:"-"`
	XXX_unrecognized      []byte     `json:"-"`
	XXX_sizecache         int32      `json:"-"`
}

func (m *ConformanceRequest) Reset()         { *m = ConformanceRequest{} }
func (m *ConformanceRequest) String() string { return proto.CompactTextString(m) }
func (*ConformanceRequest) ProtoMessage()    {}
func (*ConformanceRequest) Descriptor() ([]byte, []int) {
	return fileDescriptor_conformance_3cdb5b28737909f3, []int{0}
}
func (m *ConformanceRequest) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ConformanceRequest.Unmarshal(m, b)
}
func (m *ConformanceRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ConformanceRequest.Marshal(b, m, deterministic)
}
func (dst *ConformanceRequest) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ConformanceRequest.Merge(dst, src)
}
func (m *ConformanceRequest) XXX_Size() int {
	return xxx_messageInfo_ConformanceRequest.Size(m)
}
func (m *ConformanceRequest) XXX_DiscardUnknown() {
	xxx_messageInfo_ConformanceRequest.DiscardUnknown(m)
}

var xxx_messageInfo_ConformanceRequest proto.InternalMessageInfo

type isConformanceRequest_Payload interface {
	isConformanceRequest_Payload()
}

type ConformanceRequest_ProtobufPayload struct {
	ProtobufPayload []byte `protobuf:"bytes,1,opt,name=protobuf_payload,json=protobufPayload,proto3,oneof"`
}
type ConformanceRequest_JsonPayload struct {
	JsonPayload string `protobuf:"bytes,2,opt,name=json_payload,json=jsonPayload,oneof"`
}

func (*ConformanceRequest_ProtobufPayload) isConformanceRequest_Payload() {}
func (*ConformanceRequest_JsonPayload) isConformanceRequest_Payload()     {}

func (m *ConformanceRequest) GetPayload() isConformanceRequest_Payload {
	if m != nil {
		return m.Payload
	}
	return nil
}

func (m *ConformanceRequest) GetProtobufPayload() []byte {
	if x, ok := m.GetPayload().(*ConformanceRequest_ProtobufPayload); ok {
		return x.ProtobufPayload
	}
	return nil
}

func (m *ConformanceRequest) GetJsonPayload() string {
	if x, ok := m.GetPayload().(*ConformanceRequest_JsonPayload); ok {
		return x.JsonPayload
	}
	return ""
}

func (m *ConformanceRequest) GetRequestedOutputFormat() WireFormat {
	if m != nil {
		return m.RequestedOutputFormat
	}
	return WireFormat_UNSPECIFIED
}

// XXX_OneofFuncs is for the internal use of the proto package.
func (*ConformanceRequest) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
	return _ConformanceRequest_OneofMarshaler, _ConformanceRequest_OneofUnmarshaler, _ConformanceRequest_OneofSizer, []interface{}{
		(*ConformanceRequest_ProtobufPayload)(nil),
		(*ConformanceRequest_JsonPayload)(nil),
	}
}

func _ConformanceRequest_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
	m := msg.(*ConformanceRequest)
	// payload
	switch x := m.Payload.(type) {
	case *ConformanceRequest_ProtobufPayload:
		b.EncodeVarint(1<<3 | proto.WireBytes)
		b.EncodeRawBytes(x.ProtobufPayload)
	case *ConformanceRequest_JsonPayload:
		b.EncodeVarint(2<<3 | proto.WireBytes)
		b.EncodeStringBytes(x.JsonPayload)
	case nil:
	default:
		return fmt.Errorf("ConformanceRequest.Payload has unexpected type %T", x)
	}
	return nil
}

func _ConformanceRequest_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
	m := msg.(*ConformanceRequest)
	switch tag {
	case 1: // payload.protobuf_payload
		if wire != proto.WireBytes {
			return true, proto.ErrInternalBadWireType
		}
		x, err := b.DecodeRawBytes(true)
		m.Payload = &ConformanceRequest_ProtobufPayload{x}
		return true, err
	case 2: // payload.json_payload
		if wire != proto.WireBytes {
			return true, proto.ErrInternalBadWireType
		}
		x, err := b.DecodeStringBytes()
		m.Payload = &ConformanceRequest_JsonPayload{x}
		return true, err
	default:
		return false, nil
	}
}

func _ConformanceRequest_OneofSizer(msg proto.Message) (n int) {
	m := msg.(*ConformanceRequest)
	// payload
	switch x := m.Payload.(type) {
	case *ConformanceRequest_ProtobufPayload:
		n += proto.SizeVarint(1<<3 | proto.WireBytes)
		n += proto.SizeVarint(uint64(len(x.ProtobufPayload)))
		n += len(x.ProtobufPayload)
	case *ConformanceRequest_JsonPayload:
		n += proto.SizeVarint(2<<3 | proto.WireBytes)
		n += proto.SizeVarint(uint64(len(x.JsonPayload)))
		n += len(x.JsonPayload)
	case nil:
	default:
		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
	}
	return n
}

// Represents a single test case's output.
type ConformanceResponse struct {
	// Types that are valid to be assigned to Result:
	//	*ConformanceResponse_ParseError
	//	*ConformanceResponse_SerializeError
	//	*ConformanceResponse_RuntimeError
	//	*ConformanceResponse_ProtobufPayload
	//	*ConformanceResponse_JsonPayload
	//	*ConformanceResponse_Skipped
	Result               isConformanceResponse_Result `protobuf_oneof:"result"`
	XXX_NoUnkeyedLiteral struct{}                     `json:"-"`
	XXX_unrecognized     []byte                       `json:"-"`
	XXX_sizecache        int32                        `json:"-"`
}

func (m *ConformanceResponse) Reset()         { *m = ConformanceResponse{} }
func (m *ConformanceResponse) String() string { return proto.CompactTextString(m) }
func (*ConformanceResponse) ProtoMessage()    {}
func (*ConformanceResponse) Descriptor() ([]byte, []int) {
	return fileDescriptor_conformance_3cdb5b28737909f3, []int{1}
}
func (m *ConformanceResponse) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ConformanceResponse.Unmarshal(m, b)
}
func (m *ConformanceResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ConformanceResponse.Marshal(b, m, deterministic)
}
func (dst *ConformanceResponse) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ConformanceResponse.Merge(dst, src)
}
func (m *ConformanceResponse) XXX_Size() int {
	return xxx_messageInfo_ConformanceResponse.Size(m)
}
func (m *ConformanceResponse) XXX_DiscardUnknown() {
	xxx_messageInfo_ConformanceResponse.DiscardUnknown(m)
}

var xxx_messageInfo_ConformanceResponse proto.InternalMessageInfo

type isConformanceResponse_Result interface {
	isConformanceResponse_Result()
}

type ConformanceResponse_ParseError struct {
	ParseError string `protobuf:"bytes,1,opt,name=parse_error,json=parseError,oneof"`
}
type ConformanceResponse_SerializeError struct {
	SerializeError string `protobuf:"bytes,6,opt,name=serialize_error,json=serializeError,oneof"`
}
type ConformanceResponse_RuntimeError struct {
	RuntimeError string `protobuf:"bytes,2,opt,name=runtime_error,json=runtimeError,oneof"`
}
type ConformanceResponse_ProtobufPayload struct {
	ProtobufPayload []byte `protobuf:"bytes,3,opt,name=protobuf_payload,json=protobufPayload,proto3,oneof"`
}
type ConformanceResponse_JsonPayload struct {
	JsonPayload string `protobuf:"bytes,4,opt,name=json_payload,json=jsonPayload,oneof"`
}
type ConformanceResponse_Skipped struct {
	Skipped string `protobuf:"bytes,5,opt,name=skipped,oneof"`
}

func (*ConformanceResponse_ParseError) isConformanceResponse_Result()      {}
func (*ConformanceResponse_SerializeError) isConformanceResponse_Result()  {}
func (*ConformanceResponse_RuntimeError) isConformanceResponse_Result()    {}
func (*ConformanceResponse_ProtobufPayload) isConformanceResponse_Result() {}
func (*ConformanceResponse_JsonPayload) isConformanceResponse_Result()     {}
func (*ConformanceResponse_Skipped) isConformanceResponse_Result()         {}

func (m *ConformanceResponse) GetResult() isConformanceResponse_Result {
	if m != nil {
		return m.Result
	}
	return nil
}

func (m *ConformanceResponse) GetParseError() string {
	if x, ok := m.GetResult().(*ConformanceResponse_ParseError); ok {
		return x.ParseError
	}
	return ""
}

func (m *ConformanceResponse) GetSerializeError() string {
	if x, ok := m.GetResult().(*ConformanceResponse_SerializeError); ok {
		return x.SerializeError
	}
	return ""
}

func (m *ConformanceResponse) GetRuntimeError() string {
	if x, ok := m.GetResult().(*ConformanceResponse_RuntimeError); ok {
		return x.RuntimeError
	}
	return ""
}

func (m *ConformanceResponse) GetProtobufPayload() []byte {
	if x, ok := m.GetResult().(*ConformanceResponse_ProtobufPayload); ok {
		return x.ProtobufPayload
	}
	return nil
}

func (m *ConformanceResponse) GetJsonPayload() string {
	if x, ok := m.GetResult().(*ConformanceResponse_JsonPayload); ok {
		return x.JsonPayload
	}
	return ""
}

func (m *ConformanceResponse) GetSkipped() string {
	if x, ok := m.GetResult().(*ConformanceResponse_Skipped); ok {
		return x.Skipped
	}
	return ""
}

// XXX_OneofFuncs is for the internal use of the proto package.
func (*ConformanceResponse) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
	return _ConformanceResponse_OneofMarshaler, _ConformanceResponse_OneofUnmarshaler, _ConformanceResponse_OneofSizer, []interface{}{
		(*ConformanceResponse_ParseError)(nil),
		(*ConformanceResponse_SerializeError)(nil),
		(*ConformanceResponse_RuntimeError)(nil),
		(*ConformanceResponse_ProtobufPayload)(nil),
		(*ConformanceResponse_JsonPayload)(nil),
		(*ConformanceResponse_Skipped)(nil),
	}
}

func _ConformanceResponse_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
	m := msg.(*ConformanceResponse)
	// result
	switch x := m.Result.(type) {
	case *ConformanceResponse_ParseError:
		b.EncodeVarint(1<<3 | proto.WireBytes)
		b.EncodeStringBytes(x.ParseError)
	case *ConformanceResponse_SerializeError:
		b.EncodeVarint(6<<3 | proto.WireBytes)
		b.EncodeStringBytes(x.SerializeError)
	case *ConformanceResponse_RuntimeError:
		b.EncodeVarint(2<<3 | proto.WireBytes)
		b.EncodeStringBytes(x.RuntimeError)
	case *ConformanceResponse_ProtobufPayload:
		b.EncodeVarint(3<<3 | proto.WireBytes)
		b.EncodeRawBytes(x.ProtobufPayload)
	case *ConformanceResponse_JsonPayload:
		b.EncodeVarint(4<<3 | proto.WireBytes)
		b.EncodeStringBytes(x.JsonPayload)
	case *ConformanceResponse_Skipped:
		b.EncodeVarint(5<<3 | proto.WireBytes)
		b.EncodeStringBytes(x.Skipped)
	case nil:
	default:
		return fmt.Errorf("ConformanceResponse.Result has unexpected type %T", x)
	}
	return nil
}

func _ConformanceResponse_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
	m := msg.(*ConformanceResponse)
	switch tag {
	case 1: // result.parse_error
		if wire != proto.WireBytes {
			return true, proto.ErrInternalBadWireType
		}
		x, err := b.DecodeStringBytes()
		m.Result = &ConformanceResponse_ParseError{x}
		return true, err
	case 6: // result.serialize_error
		if wire != proto.WireBytes {
			return true, proto.ErrInternalBadWireType
		}
		x, err := b.DecodeStringBytes()
		m.Result = &ConformanceResponse_SerializeError{x}
		return true, err
	case 2: // result.runtime_error
		if wire != proto.WireBytes {
			return true, proto.ErrInternalBadWireType
		}
		x, err := b.DecodeStringBytes()
		m.Result = &ConformanceResponse_RuntimeError{x}
		return true, err
	case 3: // result.protobuf_payload
		if wire != proto.WireBytes {
			return true, proto.ErrInternalBadWireType
		}
		x, err := b.DecodeRawBytes(true)
		m.Result = &ConformanceResponse_ProtobufPayload{x}
		return true, err
	case 4: // result.json_payload
		if wire != proto.WireBytes {
			return true, proto.ErrInternalBadWireType
		}
		x, err := b.DecodeStringBytes()
		m.Result = &ConformanceResponse_JsonPayload{x}
		return true, err
	case 5: // result.skipped
		if wire != proto.WireBytes {
			return true, proto.ErrInternalBadWireType
		}
		x, err := b.DecodeStringBytes()
		m.Result = &ConformanceResponse_Skipped{x}
		return true, err
	default:
		return false, nil
	}
}

func _ConformanceResponse_OneofSizer(msg proto.Message) (n int) {
	m := msg.(*ConformanceResponse)
	// result
	switch x := m.Result.(type) {
	case *ConformanceResponse_ParseError:
		n += proto.SizeVarint(1<<3 | proto.WireBytes)
		n += proto.SizeVarint(uint64(len(x.ParseError)))
		n += len(x.ParseError)
	case *ConformanceResponse_SerializeError:
		n += proto.SizeVarint(6<<3 | proto.WireBytes)
		n += proto.SizeVarint(uint64(len(x.SerializeError)))
		n += len(x.SerializeError)
	case *ConformanceResponse_RuntimeError:
		n += proto.SizeVarint(2<<3 | proto.WireBytes)
		n += proto.SizeVarint(uint64(len(x.RuntimeError)))
		n += len(x.RuntimeError)
	case *ConformanceResponse_ProtobufPayload:
		n += proto.SizeVarint(3<<3 | proto.WireBytes)
		n += proto.SizeVarint(uint64(len(x.ProtobufPayload)))
		n += len(x.ProtobufPayload)
	case *ConformanceResponse_JsonPayload:
		n += proto.SizeVarint(4<<3 | proto.WireBytes)
		n += proto.SizeVarint(uint64(len(x.JsonPayload)))
		n += len(x.JsonPayload)
	case *ConformanceResponse_Skipped:
		n += proto.SizeVarint(5<<3 | proto.WireBytes)
		n += proto.SizeVarint(uint64(len(x.Skipped)))
		n += len(x.Skipped)
	case nil:
	default:
		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
	}
	return n
}

// This proto includes every type of field in both singular and repeated
// forms.
type TestAllTypes struct {
	// Singular
	OptionalInt32          int32                       `protobuf:"varint,1,opt,name=optional_int32,json=optionalInt32" json:"optional_int32,omitempty"`
	OptionalInt64          int64                       `protobuf:"varint,2,opt,name=optional_int64,json=optionalInt64" json:"optional_int64,omitempty"`
	OptionalUint32         uint32                      `protobuf:"varint,3,opt,name=optional_uint32,json=optionalUint32" json:"optional_uint32,omitempty"`
	OptionalUint64         uint64                      `protobuf:"varint,4,opt,name=optional_uint64,json=optionalUint64" json:"optional_uint64,omitempty"`
	OptionalSint32         int32                       `protobuf:"zigzag32,5,opt,name=optional_sint32,json=optionalSint32" json:"optional_sint32,omitempty"`
	OptionalSint64         int64                       `protobuf:"zigzag64,6,opt,name=optional_sint64,json=optionalSint64" json:"optional_sint64,omitempty"`
	OptionalFixed32        uint32                      `protobuf:"fixed32,7,opt,name=optional_fixed32,json=optionalFixed32" json:"optional_fixed32,omitempty"`
	OptionalFixed64        uint64                      `protobuf:"fixed64,8,opt,name=optional_fixed64,json=optionalFixed64" json:"optional_fixed64,omitempty"`
	OptionalSfixed32       int32                       `protobuf:"fixed32,9,opt,name=optional_sfixed32,json=optionalSfixed32" json:"optional_sfixed32,omitempty"`
	OptionalSfixed64       int64                       `protobuf:"fixed64,10,opt,name=optional_sfixed64,json=optionalSfixed64" json:"optional_sfixed64,omitempty"`
	OptionalFloat          float32                     `protobuf:"fixed32,11,opt,name=optional_float,json=optionalFloat" json:"optional_float,omitempty"`
	OptionalDouble         float64                     `protobuf:"fixed64,12,opt,name=optional_double,json=optionalDouble" json:"optional_double,omitempty"`
	OptionalBool           bool                        `protobuf:"varint,13,opt,name=optional_bool,json=optionalBool" json:"optional_bool,omitempty"`
	OptionalString         string                      `protobuf:"bytes,14,opt,name=optional_string,json=optionalString" json:"optional_string,omitempty"`
	OptionalBytes          []byte                      `protobuf:"bytes,15,opt,name=optional_bytes,json=optionalBytes,proto3" json:"optional_bytes,omitempty"`
	OptionalNestedMessage  *TestAllTypes_NestedMessage `protobuf:"bytes,18,opt,name=optional_nested_message,json=optionalNestedMessage" json:"optional_nested_message,omitempty"`
	OptionalForeignMessage *ForeignMessage             `protobuf:"bytes,19,opt,name=optional_foreign_message,json=optionalForeignMessage" json:"optional_foreign_message,omitempty"`
	OptionalNestedEnum     TestAllTypes_NestedEnum     `protobuf:"varint,21,opt,name=optional_nested_enum,json=optionalNestedEnum,enum=conformance.TestAllTypes_NestedEnum" json:"optional_nested_enum,omitempty"`
	OptionalForeignEnum    ForeignEnum                 `protobuf:"varint,22,opt,name=optional_foreign_enum,json=optionalForeignEnum,enum=conformance.ForeignEnum" json:"optional_foreign_enum,omitempty"`
	OptionalStringPiece    string                      `protobuf:"bytes,24,opt,name=optional_string_piece,json=optionalStringPiece" json:"optional_string_piece,omitempty"`
	OptionalCord           string                      `protobuf:"bytes,25,opt,name=optional_cord,json=optionalCord" json:"optional_cord,omitempty"`
	RecursiveMessage       *TestAllTypes               `protobuf:"bytes,27,opt,name=recursive_message,json=recursiveMessage" json:"recursive_message,omitempty"`
	// Repeated
	RepeatedInt32          []int32                       `protobuf:"varint,31,rep,packed,name=repeated_int32,json=repeatedInt32" json:"repeated_int32,omitempty"`
	RepeatedInt64          []int64                       `protobuf:"varint,32,rep,packed,name=repeated_int64,json=repeatedInt64" json:"repeated_int64,omitempty"`
	RepeatedUint32         []uint32                      `protobuf:"varint,33,rep,packed,name=repeated_uint32,json=repeatedUint32" json:"repeated_uint32,omitempty"`
	RepeatedUint64         []uint64                      `protobuf:"varint,34,rep,packed,name=repeated_uint64,json=repeatedUint64" json:"repeated_uint64,omitempty"`
	RepeatedSint32         []int32                       `protobuf:"zigzag32,35,rep,packed,name=repeated_sint32,json=repeatedSint32" json:"repeated_sint32,omitempty"`
	RepeatedSint64         []int64                       `protobuf:"zigzag64,36,rep,packed,name=repeated_sint64,json=repeatedSint64" json:"repeated_sint64,omitempty"`
	RepeatedFixed32        []uint32                      `protobuf:"fixed32,37,rep,packed,name=repeated_fixed32,json=repeatedFixed32" json:"repeated_fixed32,omitempty"`
	RepeatedFixed64        []uint64                      `protobuf:"fixed64,38,rep,packed,name=repeated_fixed64,json=repeatedFixed64" json:"repeated_fixed64,omitempty"`
	RepeatedSfixed32       []int32                       `protobuf:"fixed32,39,rep,packed,name=repeated_sfixed32,json=repeatedSfixed32" json:"repeated_sfixed32,omitempty"`
	RepeatedSfixed64       []int64                       `protobuf:"fixed64,40,rep,packed,name=repeated_sfixed64,json=repeatedSfixed64" json:"repeated_sfixed64,omitempty"`
	RepeatedFloat          []float32                     `protobuf:"fixed32,41,rep,packed,name=repeated_float,json=repeatedFloat" json:"repeated_float,omitempty"`
	RepeatedDouble         []float64                     `protobuf:"fixed64,42,rep,packed,name=repeated_double,json=repeatedDouble" json:"repeated_double,omitempty"`
	RepeatedBool           []bool                        `protobuf:"varint,43,rep,packed,name=repeated_bool,json=repeatedBool" json:"repeated_bool,omitempty"`
	RepeatedString         []string                      `protobuf:"bytes,44,rep,name=repeated_string,json=repeatedString" json:"repeated_string,omitempty"`
	RepeatedBytes          [][]byte                      `protobuf:"bytes,45,rep,name=repeated_bytes,json=repeatedBytes,proto3" json:"repeated_bytes,omitempty"`
	RepeatedNestedMessage  []*TestAllTypes_NestedMessage `protobuf:"bytes,48,rep,name=repeated_nested_message,json=repeatedNestedMessage" json:"repeated_nested_message,omitempty"`
	RepeatedForeignMessage []*ForeignMessage             `protobuf:"bytes,49,rep,name=repeated_foreign_message,json=repeatedForeignMessage" json:"repeated_foreign_message,omitempty"`
	RepeatedNestedEnum     []TestAllTypes_NestedEnum     `protobuf:"varint,51,rep,packed,name=repeated_nested_enum,json=repeatedNestedEnum,enum=conformance.TestAllTypes_NestedEnum" json:"repeated_nested_enum,omitempty"`
	RepeatedForeignEnum    []ForeignEnum                 `protobuf:"varint,52,rep,packed,name=repeated_foreign_enum,json=repeatedForeignEnum,enum=conformance.ForeignEnum" json:"repeated_foreign_enum,omitempty"`
	RepeatedStringPiece    []string                      `protobuf:"bytes,54,rep,name=repeated_string_piece,json=repeatedStringPiece" json:"repeated_string_piece,omitempty"`
	RepeatedCord           []string                      `protobuf:"bytes,55,rep,name=repeated_cord,json=repeatedCord" json:"repeated_cord,omitempty"`
	// Map
	MapInt32Int32           map[int32]int32                        `protobuf:"bytes,56,rep,name=map_int32_int32,json=mapInt32Int32" json:"map_int32_int32,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"`
	MapInt64Int64           map[int64]int64                        `protobuf:"bytes,57,rep,name=map_int64_int64,json=mapInt64Int64" json:"map_int64_int64,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"`
	MapUint32Uint32         map[uint32]uint32                      `protobuf:"bytes,58,rep,name=map_uint32_uint32,json=mapUint32Uint32" json:"map_uint32_uint32,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"`
	MapUint64Uint64         map[uint64]uint64                      `protobuf:"bytes,59,rep,name=map_uint64_uint64,json=mapUint64Uint64" json:"map_uint64_uint64,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"`
	MapSint32Sint32         map[int32]int32                        `protobuf:"bytes,60,rep,name=map_sint32_sint32,json=mapSint32Sint32" json:"map_sint32_sint32,omitempty" protobuf_key:"zigzag32,1,opt,name=key" protobuf_val:"zigzag32,2,opt,name=value"`
	MapSint64Sint64         map[int64]int64                        `protobuf:"bytes,61,rep,name=map_sint64_sint64,json=mapSint64Sint64" json:"map_sint64_sint64,omitempty" protobuf_key:"zigzag64,1,opt,name=key" protobuf_val:"zigzag64,2,opt,name=value"`
	MapFixed32Fixed32       map[uint32]uint32                      `protobuf:"bytes,62,rep,name=map_fixed32_fixed32,json=mapFixed32Fixed32" json:"map_fixed32_fixed32,omitempty" protobuf_key:"fixed32,1,opt,name=key" protobuf_val:"fixed32,2,opt,name=value"`
	MapFixed64Fixed64       map[uint64]uint64                      `protobuf:"bytes,63,rep,name=map_fixed64_fixed64,json=mapFixed64Fixed64" json:"map_fixed64_fixed64,omitempty" protobuf_key:"fixed64,1,opt,name=key" protobuf_val:"fixed64,2,opt,name=value"`
	MapSfixed32Sfixed32     map[int32]int32                        `protobuf:"bytes,64,rep,name=map_sfixed32_sfixed32,json=mapSfixed32Sfixed32" json:"map_sfixed32_sfixed32,omitempty" protobuf_key:"fixed32,1,opt,name=key" protobuf_val:"fixed32,2,opt,name=value"`
	MapSfixed64Sfixed64     map[int64]int64                        `protobuf:"bytes,65,rep,name=map_sfixed64_sfixed64,json=mapSfixed64Sfixed64" json:"map_sfixed64_sfixed64,omitempty" protobuf_key:"fixed64,1,opt,name=key" protobuf_val:"fixed64,2,opt,name=value"`
	MapInt32Float           map[int32]float32                      `protobuf:"bytes,66,rep,name=map_int32_float,json=mapInt32Float" json:"map_int32_float,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"fixed32,2,opt,name=value"`
	MapInt32Double          map[int32]float64                      `protobuf:"bytes,67,rep,name=map_int32_double,json=mapInt32Double" json:"map_int32_double,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"fixed64,2,opt,name=value"`
	MapBoolBool             map[bool]bool                          `protobuf:"bytes,68,rep,name=map_bool_bool,json=mapBoolBool" json:"map_bool_bool,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"`
	MapStringString         map[string]string                      `protobuf:"bytes,69,rep,name=map_string_string,json=mapStringString" json:"map_string_string,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
	MapStringBytes          map[string][]byte                      `protobuf:"bytes,70,rep,name=map_string_bytes,json=mapStringBytes" json:"map_string_bytes,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value,proto3"`
	MapStringNestedMessage  map[string]*TestAllTypes_NestedMessage `protobuf:"bytes,71,rep,name=map_string_nested_message,json=mapStringNestedMessage" json:"map_string_nested_message,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
	MapStringForeignMessage map[string]*ForeignMessage             `protobuf:"bytes,72,rep,name=map_string_foreign_message,json=mapStringForeignMessage" json:"map_string_foreign_message,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
	MapStringNestedEnum     map[string]TestAllTypes_NestedEnum     `protobuf:"bytes,73,rep,name=map_string_nested_enum,json=mapStringNestedEnum" json:"map_string_nested_enum,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"varint,2,opt,name=value,enum=conformance.TestAllTypes_NestedEnum"`
	MapStringForeignEnum    map[string]ForeignEnum                 `protobuf:"bytes,74,rep,name=map_string_foreign_enum,json=mapStringForeignEnum" json:"map_string_foreign_enum,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"varint,2,opt,name=value,enum=conformance.ForeignEnum"`
	// Types that are valid to be assigned to OneofField:
	//	*TestAllTypes_OneofUint32
	//	*TestAllTypes_OneofNestedMessage
	//	*TestAllTypes_OneofString
	//	*TestAllTypes_OneofBytes
	//	*TestAllTypes_OneofBool
	//	*TestAllTypes_OneofUint64
	//	*TestAllTypes_OneofFloat
	//	*TestAllTypes_OneofDouble
	//	*TestAllTypes_OneofEnum
	OneofField isTestAllTypes_OneofField `protobuf_oneof:"oneof_field"`
	// Well-known types
	OptionalBoolWrapper   *google_protobuf5.BoolValue     `protobuf:"bytes,201,opt,name=optional_bool_wrapper,json=optionalBoolWrapper" json:"optional_bool_wrapper,omitempty"`
	OptionalInt32Wrapper  *google_protobuf5.Int32Value    `protobuf:"bytes,202,opt,name=optional_int32_wrapper,json=optionalInt32Wrapper" json:"optional_int32_wrapper,omitempty"`
	OptionalInt64Wrapper  *google_protobuf5.Int64Value    `protobuf:"bytes,203,opt,name=optional_int64_wrapper,json=optionalInt64Wrapper" json:"optional_int64_wrapper,omitempty"`
	OptionalUint32Wrapper *google_protobuf5.UInt32Value   `protobuf:"bytes,204,opt,name=optional_uint32_wrapper,json=optionalUint32Wrapper" json:"optional_uint32_wrapper,omitempty"`
	OptionalUint64Wrapper *google_protobuf5.UInt64Value   `protobuf:"bytes,205,opt,name=optional_uint64_wrapper,json=optionalUint64Wrapper" json:"optional_uint64_wrapper,omitempty"`
	OptionalFloatWrapper  *google_protobuf5.FloatValue    `protobuf:"bytes,206,opt,name=optional_float_wrapper,json=optionalFloatWrapper" json:"optional_float_wrapper,omitempty"`
	OptionalDoubleWrapper *google_protobuf5.DoubleValue   `protobuf:"bytes,207,opt,name=optional_double_wrapper,json=optionalDoubleWrapper" json:"optional_double_wrapper,omitempty"`
	OptionalStringWrapper *google_protobuf5.StringValue   `protobuf:"bytes,208,opt,name=optional_string_wrapper,json=optionalStringWrapper" json:"optional_string_wrapper,omitempty"`
	OptionalBytesWrapper  *google_protobuf5.BytesValue    `protobuf:"bytes,209,opt,name=optional_bytes_wrapper,json=optionalBytesWrapper" json:"optional_bytes_wrapper,omitempty"`
	RepeatedBoolWrapper   []*google_protobuf5.BoolValue   `protobuf:"bytes,211,rep,name=repeated_bool_wrapper,json=repeatedBoolWrapper" json:"repeated_bool_wrapper,omitempty"`
	RepeatedInt32Wrapper  []*google_protobuf5.Int32Value  `protobuf:"bytes,212,rep,name=repeated_int32_wrapper,json=repeatedInt32Wrapper" json:"repeated_int32_wrapper,omitempty"`
	RepeatedInt64Wrapper  []*google_protobuf5.Int64Value  `protobuf:"bytes,213,rep,name=repeated_int64_wrapper,json=repeatedInt64Wrapper" json:"repeated_int64_wrapper,omitempty"`
	RepeatedUint32Wrapper []*google_protobuf5.UInt32Value `protobuf:"bytes,214,rep,name=repeated_uint32_wrapper,json=repeatedUint32Wrapper" json:"repeated_uint32_wrapper,omitempty"`
	RepeatedUint64Wrapper []*google_protobuf5.UInt64Value `protobuf:"bytes,215,rep,name=repeated_uint64_wrapper,json=repeatedUint64Wrapper" json:"repeated_uint64_wrapper,omitempty"`
	RepeatedFloatWrapper  []*google_protobuf5.FloatValue  `protobuf:"bytes,216,rep,name=repeated_float_wrapper,json=repeatedFloatWrapper" json:"repeated_float_wrapper,omitempty"`
	RepeatedDoubleWrapper []*google_protobuf5.DoubleValue `protobuf:"bytes,217,rep,name=repeated_double_wrapper,json=repeatedDoubleWrapper" json:"repeated_double_wrapper,omitempty"`
	RepeatedStringWrapper []*google_protobuf5.StringValue `protobuf:"bytes,218,rep,name=repeated_string_wrapper,json=repeatedStringWrapper" json:"repeated_string_wrapper,omitempty"`
	RepeatedBytesWrapper  []*google_protobuf5.BytesValue  `protobuf:"bytes,219,rep,name=repeated_bytes_wrapper,json=repeatedBytesWrapper" json:"repeated_bytes_wrapper,omitempty"`
	OptionalDuration      *google_protobuf1.Duration      `protobuf:"bytes,301,opt,name=optional_duration,json=optionalDuration" json:"optional_duration,omitempty"`
	OptionalTimestamp     *google_protobuf4.Timestamp     `protobuf:"bytes,302,opt,name=optional_timestamp,json=optionalTimestamp" json:"optional_timestamp,omitempty"`
	OptionalFieldMask     *google_protobuf2.FieldMask     `protobuf:"bytes,303,opt,name=optional_field_mask,json=optionalFieldMask" json:"optional_field_mask,omitempty"`
	OptionalStruct        *google_protobuf3.Struct        `protobuf:"bytes,304,opt,name=optional_struct,json=optionalStruct" json:"optional_struct,omitempty"`
	OptionalAny           *google_protobuf.Any            `protobuf:"bytes,305,opt,name=optional_any,json=optionalAny" json:"optional_any,omitempty"`
	OptionalValue         *google_protobuf3.Value         `protobuf:"bytes,306,opt,name=optional_value,json=optionalValue" json:"optional_value,omitempty"`
	RepeatedDuration      []*google_protobuf1.Duration    `protobuf:"bytes,311,rep,name=repeated_duration,json=repeatedDuration" json:"repeated_duration,omitempty"`
	RepeatedTimestamp     []*google_protobuf4.Timestamp   `protobuf:"bytes,312,rep,name=repeated_timestamp,json=repeatedTimestamp" json:"repeated_timestamp,omitempty"`
	RepeatedFieldmask     []*google_protobuf2.FieldMask   `protobuf:"bytes,313,rep,name=repeated_fieldmask,json=repeatedFieldmask" json:"repeated_fieldmask,omitempty"`
	RepeatedStruct        []*google_protobuf3.Struct      `protobuf:"bytes,324,rep,name=repeated_struct,json=repeatedStruct" json:"repeated_struct,omitempty"`
	RepeatedAny           []*google_protobuf.Any          `protobuf:"bytes,315,rep,name=repeated_any,json=repeatedAny" json:"repeated_any,omitempty"`
	RepeatedValue         []*google_protobuf3.Value       `protobuf:"bytes,316,rep,name=repeated_value,json=repeatedValue" json:"repeated_value,omitempty"`
	// Test field-name-to-JSON-name convention.
	// (protobuf says names can be any valid C/C++ identifier.)
	Fieldname1           int32    `protobuf:"varint,401,opt,name=fieldname1" json:"fieldname1,omitempty"`
	FieldName2           int32    `protobuf:"varint,402,opt,name=field_name2,json=fieldName2" json:"field_name2,omitempty"`
	XFieldName3          int32    `protobuf:"varint,403,opt,name=_field_name3,json=FieldName3" json:"_field_name3,omitempty"`
	Field_Name4_         int32    `protobuf:"varint,404,opt,name=field__name4_,json=fieldName4" json:"field__name4_,omitempty"`
	Field0Name5          int32    `protobuf:"varint,405,opt,name=field0name5" json:"field0name5,omitempty"`
	Field_0Name6         int32    `protobuf:"varint,406,opt,name=field_0_name6,json=field0Name6" json:"field_0_name6,omitempty"`
	FieldName7           int32    `protobuf:"varint,407,opt,name=fieldName7" json:"fieldName7,omitempty"`
	FieldName8           int32    `protobuf:"varint,408,opt,name=FieldName8" json:"FieldName8,omitempty"`
	Field_Name9          int32    `protobuf:"varint,409,opt,name=field_Name9,json=fieldName9" json:"field_Name9,omitempty"`
	Field_Name10         int32    `protobuf:"varint,410,opt,name=Field_Name10,json=FieldName10" json:"Field_Name10,omitempty"`
	FIELD_NAME11         int32    `protobuf:"varint,411,opt,name=FIELD_NAME11,json=FIELDNAME11" json:"FIELD_NAME11,omitempty"`
	FIELDName12          int32    `protobuf:"varint,412,opt,name=FIELD_name12,json=FIELDName12" json:"FIELD_name12,omitempty"`
	XFieldName13         int32    `protobuf:"varint,413,opt,name=__field_name13,json=FieldName13" json:"__field_name13,omitempty"`
	X_FieldName14        int32    `protobuf:"varint,414,opt,name=__Field_name14,json=FieldName14" json:"__Field_name14,omitempty"`
	Field_Name15         int32    `protobuf:"varint,415,opt,name=field__name15,json=fieldName15" json:"field__name15,omitempty"`
	Field__Name16        int32    `protobuf:"varint,416,opt,name=field__Name16,json=fieldName16" json:"field__Name16,omitempty"`
	FieldName17__        int32    `protobuf:"varint,417,opt,name=field_name17__,json=fieldName17" json:"field_name17__,omitempty"`
	FieldName18__        int32    `protobuf:"varint,418,opt,name=Field_name18__,json=FieldName18" json:"Field_name18__,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *TestAllTypes) Reset()         { *m = TestAllTypes{} }
func (m *TestAllTypes) String() string { return proto.CompactTextString(m) }
func (*TestAllTypes) ProtoMessage()    {}
func (*TestAllTypes) Descriptor() ([]byte, []int) {
	return fileDescriptor_conformance_3cdb5b28737909f3, []int{2}
}
func (m *TestAllTypes) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_TestAllTypes.Unmarshal(m, b)
}
func (m *TestAllTypes) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_TestAllTypes.Marshal(b, m, deterministic)
}
func (dst *TestAllTypes) XXX_Merge(src proto.Message) {
	xxx_messageInfo_TestAllTypes.Merge(dst, src)
}
func (m *TestAllTypes) XXX_Size() int {
	return xxx_messageInfo_TestAllTypes.Size(m)
}
func (m *TestAllTypes) XXX_DiscardUnknown() {
	xxx_messageInfo_TestAllTypes.DiscardUnknown(m)
}

var xxx_messageInfo_TestAllTypes proto.InternalMessageInfo

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,proto3,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=conformance.TestAllTypes_NestedEnum,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 (m *TestAllTypes) GetOneofField() isTestAllTypes_OneofField {
	if m != nil {
		return m.OneofField
	}
	return nil
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

func (m *TestAllTypes) GetOptionalNestedMessage() *TestAllTypes_NestedMessage {
	if m != nil {
		return m.OptionalNestedMessage
	}
	return nil
}

func (m *TestAllTypes) GetOptionalForeignMessage() *ForeignMessage {
	if m != nil {
		return m.OptionalForeignMessage
	}
	return nil
}

func (m *TestAllTypes) GetOptionalNestedEnum() TestAllTypes_NestedEnum {
	if m != nil {
		return m.OptionalNestedEnum
	}
	return TestAllTypes_FOO
}

func (m *TestAllTypes) GetOptionalForeignEnum() ForeignEnum {
	if m != nil {
		return m.OptionalForeignEnum
	}
	return ForeignEnum_FOREIGN_FOO
}

func (m *TestAllTypes) GetOptionalStringPiece() string {
	if m != nil {
		return m.OptionalStringPiece
	}
	return ""
}

func (m *TestAllTypes) GetOptionalCord() string {
	if m != nil {
		return m.OptionalCord
	}
	return ""
}

func (m *TestAllTypes) GetRecursiveMessage() *TestAllTypes {
	if m != nil {
		return m.RecursiveMessage
	}
	return nil
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

func (m *TestAllTypes) GetRepeatedStringPiece() []string {
	if m != nil {
		return m.RepeatedStringPiece
	}
	return nil
}

func (m *TestAllTypes) GetRepeatedCord() []string {
	if m != nil {
		return m.RepeatedCord
	}
	return nil
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

func (m *TestAllTypes) GetMapStringForeignMessage() map[string]*ForeignMessage {
	if m != nil {
		return m.MapStringForeignMessage
	}
	return nil
}

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

func (m *TestAllTypes) GetMapStringForeignEnum() map[string]ForeignEnum {
	if m != nil {
		return m.MapStringForeignEnum
	}
	return nil
}

func (m *TestAllTypes) GetOneofUint32() uint32 {
	if x, ok := m.GetOneofField().(*TestAllTypes_OneofUint32); ok {
		return x.OneofUint32
	}
	return 0
}

func (m *TestAllTypes) GetOneofNestedMessage() *TestAllTypes_NestedMessage {
	if x, ok := m.GetOneofField().(*TestAllTypes_OneofNestedMessage); ok {
		return x.OneofNestedMessage
	}
	return nil
}

func (m *TestAllTypes) GetOneofString() string {
	if x, ok := m.GetOneofField().(*TestAllTypes_OneofString); ok {
		return x.OneofString
	}
	return ""
}

func (m *TestAllTypes) GetOneofBytes() []byte {
	if x, ok := m.GetOneofField().(*TestAllTypes_OneofBytes); ok {
		return x.OneofBytes
	}
	return nil
}

func (m *TestAllTypes) GetOneofBool() bool {
	if x, ok := m.GetOneofField().(*TestAllTypes_OneofBool); ok {
		return x.OneofBool
	}
	return false
}

func (m *TestAllTypes) GetOneofUint64() uint64 {
	if x, ok := m.GetOneofField().(*TestAllTypes_OneofUint64); ok {
		return x.OneofUint64
	}
	return 0
}

func (m *TestAllTypes) GetOneofFloat() float32 {
	if x, ok := m.GetOneofField().(*TestAllTypes_OneofFloat); ok {
		return x.OneofFloat
	}
	return 0
}

func (m *TestAllTypes) GetOneofDouble() float64 {
	if x, ok := m.GetOneofField().(*TestAllTypes_OneofDouble); ok {
		return x.OneofDouble
	}
	return 0
}

func (m *TestAllTypes) GetOneofEnum() TestAllTypes_NestedEnum {
	if x, ok := m.GetOneofField().(*TestAllTypes_OneofEnum); ok {
		return x.OneofEnum
	}
	return TestAllTypes_FOO
}

func (m *TestAllTypes) GetOptionalBoolWrapper() *google_protobuf5.BoolValue {
	if m != nil {
		return m.OptionalBoolWrapper
	}
	return nil
}

func (m *TestAllTypes) GetOptionalInt32Wrapper() *google_protobuf5.Int32Value {
	if m != nil {
		return m.OptionalInt32Wrapper
	}
	return nil
}

func (m *TestAllTypes) GetOptionalInt64Wrapper() *google_protobuf5.Int64Value {
	if m != nil {
		return m.OptionalInt64Wrapper
	}
	return nil
}

func (m *TestAllTypes) GetOptionalUint32Wrapper() *google_protobuf5.UInt32Value {
	if m != nil {
		return m.OptionalUint32Wrapper
	}
	return nil
}

func (m *TestAllTypes) GetOptionalUint64Wrapper() *google_protobuf5.UInt64Value {
	if m != nil {
		return m.OptionalUint64Wrapper
	}
	return nil
}

func (m *TestAllTypes) GetOptionalFloatWrapper() *google_protobuf5.FloatValue {
	if m != nil {
		return m.OptionalFloatWrapper
	}
	return nil
}

func (m *TestAllTypes) GetOptionalDoubleWrapper() *google_protobuf5.DoubleValue {
	if m != nil {
		return m.OptionalDoubleWrapper
	}
	return nil
}

func (m *TestAllTypes) GetOptionalStringWrapper() *google_protobuf5.StringValue {
	if m != nil {
		return m.OptionalStringWrapper
	}
	return nil
}

func (m *TestAllTypes) GetOptionalBytesWrapper() *google_protobuf5.BytesValue {
	if m != nil {
		return m.OptionalBytesWrapper
	}
	return nil
}

func (m *TestAllTypes) GetRepeatedBoolWrapper() []*google_protobuf5.BoolValue {
	if m != nil {
		return m.RepeatedBoolWrapper
	}
	return nil
}

func (m *TestAllTypes) GetRepeatedInt32Wrapper() []*google_protobuf5.Int32Value {
	if m != nil {
		return m.RepeatedInt32Wrapper
	}
	return nil
}

func (m *TestAllTypes) GetRepeatedInt64Wrapper() []*google_protobuf5.Int64Value {
	if m != nil {
		return m.RepeatedInt64Wrapper
	}
	return nil
}

func (m *TestAllTypes) GetRepeatedUint32Wrapper() []*google_protobuf5.UInt32Value {
	if m != nil {
		return m.RepeatedUint32Wrapper
	}
	return nil
}

func (m *TestAllTypes) GetRepeatedUint64Wrapper() []*google_protobuf5.UInt64Value {
	if m != nil {
		return m.RepeatedUint64Wrapper
	}
	return nil
}

func (m *TestAllTypes) GetRepeatedFloatWrapper() []*google_protobuf5.FloatValue {
	if m != nil {
		return m.RepeatedFloatWrapper
	}
	return nil
}

func (m *TestAllTypes) GetRepeatedDoubleWrapper() []*google_protobuf5.DoubleValue {
	if m != nil {
		return m.RepeatedDoubleWrapper
	}
	return nil
}

func (m *TestAllTypes) GetRepeatedStringWrapper() []*google_protobuf5.StringValue {
	if m != nil {
		return m.RepeatedStringWrapper
	}
	return nil
}

func (m *TestAllTypes) GetRepeatedBytesWrapper() []*google_protobuf5.BytesValue {
	if m != nil {
		return m.RepeatedBytesWrapper
	}
	return nil
}

func (m *TestAllTypes) GetOptionalDuration() *google_protobuf1.Duration {
	if m != nil {
		return m.OptionalDuration
	}
	return nil
}

func (m *TestAllTypes) GetOptionalTimestamp() *google_protobuf4.Timestamp {
	if m != nil {
		return m.OptionalTimestamp
	}
	return nil
}

func (m *TestAllTypes) GetOptionalFieldMask() *google_protobuf2.FieldMask {
	if m != nil {
		return m.OptionalFieldMask
	}
	return nil
}

func (m *TestAllTypes) GetOptionalStruct() *google_protobuf3.Struct {
	if m != nil {
		return m.OptionalStruct
	}
	return nil
}

func (m *TestAllTypes) GetOptionalAny() *google_protobuf.Any {
	if m != nil {
		return m.OptionalAny
	}
	return nil
}

func (m *TestAllTypes) GetOptionalValue() *google_protobuf3.Value {
	if m != nil {
		return m.OptionalValue
	}
	return nil
}

func (m *TestAllTypes) GetRepeatedDuration() []*google_protobuf1.Duration {
	if m != nil {
		return m.RepeatedDuration
	}
	return nil
}

func (m *TestAllTypes) GetRepeatedTimestamp() []*google_protobuf4.Timestamp {
	if m != nil {
		return m.RepeatedTimestamp
	}
	return nil
}

func (m *TestAllTypes) GetRepeatedFieldmask() []*google_protobuf2.FieldMask {
	if m != nil {
		return m.RepeatedFieldmask
	}
	return nil
}

func (m *TestAllTypes) GetRepeatedStruct() []*google_protobuf3.Struct {
	if m != nil {
		return m.RepeatedStruct
	}
	return nil
}

func (m *TestAllTypes) GetRepeatedAny() []*google_protobuf.Any {
	if m != nil {
		return m.RepeatedAny
	}
	return nil
}

func (m *TestAllTypes) GetRepeatedValue() []*google_protobuf3.Value {
	if m != nil {
		return m.RepeatedValue
	}
	return nil
}

func (m *TestAllTypes) GetFieldname1() int32 {
	if m != nil {
		return m.Fieldname1
	}
	return 0
}

func (m *TestAllTypes) GetFieldName2() int32 {
	if m != nil {
		return m.FieldName2
	}
	return 0
}

func (m *TestAllTypes) GetXFieldName3() int32 {
	if m != nil {
		return m.XFieldName3
	}
	return 0
}

func (m *TestAllTypes) GetField_Name4_() int32 {
	if m != nil {
		return m.Field_Name4_
	}
	return 0
}

func (m *TestAllTypes) GetField0Name5() int32 {
	if m != nil {
		return m.Field0Name5
	}
	return 0
}

func (m *TestAllTypes) GetField_0Name6() int32 {
	if m != nil {
		return m.Field_0Name6
	}
	return 0
}

func (m *TestAllTypes) GetFieldName7() int32 {
	if m != nil {
		return m.FieldName7
	}
	return 0
}

func (m *TestAllTypes) GetFieldName8() int32 {
	if m != nil {
		return m.FieldName8
	}
	return 0
}

func (m *TestAllTypes) GetField_Name9() int32 {
	if m != nil {
		return m.Field_Name9
	}
	return 0
}

func (m *TestAllTypes) GetField_Name10() int32 {
	if m != nil {
		return m.Field_Name10
	}
	return 0
}

func (m *TestAllTypes) GetFIELD_NAME11() int32 {
	if m != nil {
		return m.FIELD_NAME11
	}
	return 0
}

func (m *TestAllTypes) GetFIELDName12() int32 {
	if m != nil {
		return m.FIELDName12
	}
	return 0
}

func (m *TestAllTypes) GetXFieldName13() int32 {
	if m != nil {
		return m.XFieldName13
	}
	return 0
}

func (m *TestAllTypes) GetX_FieldName14() int32 {
	if m != nil {
		return m.X_FieldName14
	}
	return 0
}

func (m *TestAllTypes) GetField_Name15() int32 {
	if m != nil {
		return m.Field_Name15
	}
	return 0
}

func (m *TestAllTypes) GetField__Name16() int32 {
	if m != nil {
		return m.Field__Name16
	}
	return 0
}

func (m *TestAllTypes) GetFieldName17__() int32 {
	if m != nil {
		return m.FieldName17__
	}
	return 0
}

func (m *TestAllTypes) GetFieldName18__() int32 {
	if m != nil {
		return m.FieldName18__
	}
	return 0
}

// XXX_OneofFuncs is for the internal use of the proto package.
func (*TestAllTypes) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
	return _TestAllTypes_OneofMarshaler, _TestAllTypes_OneofUnmarshaler, _TestAllTypes_OneofSizer, []interface{}{
		(*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),
	}
}

func _TestAllTypes_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
	m := msg.(*TestAllTypes)
	// oneof_field
	switch x := m.OneofField.(type) {
	case *TestAllTypes_OneofUint32:
		b.EncodeVarint(111<<3 | proto.WireVarint)
		b.EncodeVarint(uint64(x.OneofUint32))
	case *TestAllTypes_OneofNestedMessage:
		b.EncodeVarint(112<<3 | proto.WireBytes)
		if err := b.EncodeMessage(x.OneofNestedMessage); err != nil {
			return err
		}
	case *TestAllTypes_OneofString:
		b.EncodeVarint(113<<3 | proto.WireBytes)
		b.EncodeStringBytes(x.OneofString)
	case *TestAllTypes_OneofBytes:
		b.EncodeVarint(114<<3 | proto.WireBytes)
		b.EncodeRawBytes(x.OneofBytes)
	case *TestAllTypes_OneofBool:
		t := uint64(0)
		if x.OneofBool {
			t = 1
		}
		b.EncodeVarint(115<<3 | proto.WireVarint)
		b.EncodeVarint(t)
	case *TestAllTypes_OneofUint64:
		b.EncodeVarint(116<<3 | proto.WireVarint)
		b.EncodeVarint(uint64(x.OneofUint64))
	case *TestAllTypes_OneofFloat:
		b.EncodeVarint(117<<3 | proto.WireFixed32)
		b.EncodeFixed32(uint64(math.Float32bits(x.OneofFloat)))
	case *TestAllTypes_OneofDouble:
		b.EncodeVarint(118<<3 | proto.WireFixed64)
		b.EncodeFixed64(math.Float64bits(x.OneofDouble))
	case *TestAllTypes_OneofEnum:
		b.EncodeVarint(119<<3 | proto.WireVarint)
		b.EncodeVarint(uint64(x.OneofEnum))
	case nil:
	default:
		return fmt.Errorf("TestAllTypes.OneofField has unexpected type %T", x)
	}
	return nil
}

func _TestAllTypes_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
	m := msg.(*TestAllTypes)
	switch tag {
	case 111: // oneof_field.oneof_uint32
		if wire != proto.WireVarint {
			return true, proto.ErrInternalBadWireType
		}
		x, err := b.DecodeVarint()
		m.OneofField = &TestAllTypes_OneofUint32{uint32(x)}
		return true, err
	case 112: // oneof_field.oneof_nested_message
		if wire != proto.WireBytes {
			return true, proto.ErrInternalBadWireType
		}
		msg := new(TestAllTypes_NestedMessage)
		err := b.DecodeMessage(msg)
		m.OneofField = &TestAllTypes_OneofNestedMessage{msg}
		return true, err
	case 113: // oneof_field.oneof_string
		if wire != proto.WireBytes {
			return true, proto.ErrInternalBadWireType
		}
		x, err := b.DecodeStringBytes()
		m.OneofField = &TestAllTypes_OneofString{x}
		return true, err
	case 114: // oneof_field.oneof_bytes
		if wire != proto.WireBytes {
			return true, proto.ErrInternalBadWireType
		}
		x, err := b.DecodeRawBytes(true)
		m.OneofField = &TestAllTypes_OneofBytes{x}
		return true, err
	case 115: // oneof_field.oneof_bool
		if wire != proto.WireVarint {
			return true, proto.ErrInternalBadWireType
		}
		x, err := b.DecodeVarint()
		m.OneofField = &TestAllTypes_OneofBool{x != 0}
		return true, err
	case 116: // oneof_field.oneof_uint64
		if wire != proto.WireVarint {
			return true, proto.ErrInternalBadWireType
		}
		x, err := b.DecodeVarint()
		m.OneofField = &TestAllTypes_OneofUint64{x}
		return true, err
	case 117: // oneof_field.oneof_float
		if wire != proto.WireFixed32 {
			return true, proto.ErrInternalBadWireType
		}
		x, err := b.DecodeFixed32()
		m.OneofField = &TestAllTypes_OneofFloat{math.Float32frombits(uint32(x))}
		return true, err
	case 118: // oneof_field.oneof_double
		if wire != proto.WireFixed64 {
			return true, proto.ErrInternalBadWireType
		}
		x, err := b.DecodeFixed64()
		m.OneofField = &TestAllTypes_OneofDouble{math.Float64frombits(x)}
		return true, err
	case 119: // oneof_field.oneof_enum
		if wire != proto.WireVarint {
			return true, proto.ErrInternalBadWireType
		}
		x, err := b.DecodeVarint()
		m.OneofField = &TestAllTypes_OneofEnum{TestAllTypes_NestedEnum(x)}
		return true, err
	default:
		return false, nil
	}
}

func _TestAllTypes_OneofSizer(msg proto.Message) (n int) {
	m := msg.(*TestAllTypes)
	// oneof_field
	switch x := m.OneofField.(type) {
	case *TestAllTypes_OneofUint32:
		n += proto.SizeVarint(111<<3 | proto.WireVarint)
		n += proto.SizeVarint(uint64(x.OneofUint32))
	case *TestAllTypes_OneofNestedMessage:
		s := proto.Size(x.OneofNestedMessage)
		n += proto.SizeVarint(112<<3 | proto.WireBytes)
		n += proto.SizeVarint(uint64(s))
		n += s
	case *TestAllTypes_OneofString:
		n += proto.SizeVarint(113<<3 | proto.WireBytes)
		n += proto.SizeVarint(uint64(len(x.OneofString)))
		n += len(x.OneofString)
	case *TestAllTypes_OneofBytes:
		n += proto.SizeVarint(114<<3 | proto.WireBytes)
		n += proto.SizeVarint(uint64(len(x.OneofBytes)))
		n += len(x.OneofBytes)
	case *TestAllTypes_OneofBool:
		n += proto.SizeVarint(115<<3 | proto.WireVarint)
		n += 1
	case *TestAllTypes_OneofUint64:
		n += proto.SizeVarint(116<<3 | proto.WireVarint)
		n += proto.SizeVarint(uint64(x.OneofUint64))
	case *TestAllTypes_OneofFloat:
		n += proto.SizeVarint(117<<3 | proto.WireFixed32)
		n += 4
	case *TestAllTypes_OneofDouble:
		n += proto.SizeVarint(118<<3 | proto.WireFixed64)
		n += 8
	case *TestAllTypes_OneofEnum:
		n += proto.SizeVarint(119<<3 | proto.WireVarint)
		n += proto.SizeVarint(uint64(x.OneofEnum))
	case nil:
	default:
		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
	}
	return n
}

type TestAllTypes_NestedMessage struct {
	A                    int32         `protobuf:"varint,1,opt,name=a" json:"a,omitempty"`
	Corecursive          *TestAllTypes `protobuf:"bytes,2,opt,name=corecursive" json:"corecursive,omitempty"`
	XXX_NoUnkeyedLiteral struct{}      `json:"-"`
	XXX_unrecognized     []byte        `json:"-"`
	XXX_sizecache        int32         `json:"-"`
}

func (m *TestAllTypes_NestedMessage) Reset()         { *m = TestAllTypes_NestedMessage{} }
func (m *TestAllTypes_NestedMessage) String() string { return proto.CompactTextString(m) }
func (*TestAllTypes_NestedMessage) ProtoMessage()    {}
func (*TestAllTypes_NestedMessage) Descriptor() ([]byte, []int) {
	return fileDescriptor_conformance_3cdb5b28737909f3, []int{2, 0}
}
func (m *TestAllTypes_NestedMessage) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_TestAllTypes_NestedMessage.Unmarshal(m, b)
}
func (m *TestAllTypes_NestedMessage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_TestAllTypes_NestedMessage.Marshal(b, m, deterministic)
}
func (dst *TestAllTypes_NestedMessage) XXX_Merge(src proto.Message) {
	xxx_messageInfo_TestAllTypes_NestedMessage.Merge(dst, src)
}
func (m *TestAllTypes_NestedMessage) XXX_Size() int {
	return xxx_messageInfo_TestAllTypes_NestedMessage.Size(m)
}
func (m *TestAllTypes_NestedMessage) XXX_DiscardUnknown() {
	xxx_messageInfo_TestAllTypes_NestedMessage.DiscardUnknown(m)
}

var xxx_messageInfo_TestAllTypes_NestedMessage proto.InternalMessageInfo

func (m *TestAllTypes_NestedMessage) GetA() int32 {
	if m != nil {
		return m.A
	}
	return 0
}

func (m *TestAllTypes_NestedMessage) GetCorecursive() *TestAllTypes {
	if m != nil {
		return m.Corecursive
	}
	return nil
}

type ForeignMessage struct {
	C                    int32    `protobuf:"varint,1,opt,name=c" json:"c,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *ForeignMessage) Reset()         { *m = ForeignMessage{} }
func (m *ForeignMessage) String() string { return proto.CompactTextString(m) }
func (*ForeignMessage) ProtoMessage()    {}
func (*ForeignMessage) Descriptor() ([]byte, []int) {
	return fileDescriptor_conformance_3cdb5b28737909f3, []int{3}
}
func (m *ForeignMessage) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ForeignMessage.Unmarshal(m, b)
}
func (m *ForeignMessage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ForeignMessage.Marshal(b, m, deterministic)
}
func (dst *ForeignMessage) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ForeignMessage.Merge(dst, src)
}
func (m *ForeignMessage) XXX_Size() int {
	return xxx_messageInfo_ForeignMessage.Size(m)
}
func (m *ForeignMessage) XXX_DiscardUnknown() {
	xxx_messageInfo_ForeignMessage.DiscardUnknown(m)
}

var xxx_messageInfo_ForeignMessage proto.InternalMessageInfo

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

func init() {
	proto.RegisterType((*ConformanceRequest)(nil), "conformance.ConformanceRequest")
	proto.RegisterType((*ConformanceResponse)(nil), "conformance.ConformanceResponse")
	proto.RegisterType((*TestAllTypes)(nil), "conformance.TestAllTypes")
	proto.RegisterMapType((map[bool]bool)(nil), "conformance.TestAllTypes.MapBoolBoolEntry")
	proto.RegisterMapType((map[uint32]uint32)(nil), "conformance.TestAllTypes.MapFixed32Fixed32Entry")
	proto.RegisterMapType((map[uint64]uint64)(nil), "conformance.TestAllTypes.MapFixed64Fixed64Entry")
	proto.RegisterMapType((map[int32]float64)(nil), "conformance.TestAllTypes.MapInt32DoubleEntry")
	proto.RegisterMapType((map[int32]float32)(nil), "conformance.TestAllTypes.MapInt32FloatEntry")
	proto.RegisterMapType((map[int32]int32)(nil), "conformance.TestAllTypes.MapInt32Int32Entry")
	proto.RegisterMapType((map[int64]int64)(nil), "conformance.TestAllTypes.MapInt64Int64Entry")
	proto.RegisterMapType((map[int32]int32)(nil), "conformance.TestAllTypes.MapSfixed32Sfixed32Entry")
	proto.RegisterMapType((map[int64]int64)(nil), "conformance.TestAllTypes.MapSfixed64Sfixed64Entry")
	proto.RegisterMapType((map[int32]int32)(nil), "conformance.TestAllTypes.MapSint32Sint32Entry")
	proto.RegisterMapType((map[int64]int64)(nil), "conformance.TestAllTypes.MapSint64Sint64Entry")
	proto.RegisterMapType((map[string][]byte)(nil), "conformance.TestAllTypes.MapStringBytesEntry")
	proto.RegisterMapType((map[string]ForeignEnum)(nil), "conformance.TestAllTypes.MapStringForeignEnumEntry")
	proto.RegisterMapType((map[string]*ForeignMessage)(nil), "conformance.TestAllTypes.MapStringForeignMessageEntry")
	proto.RegisterMapType((map[string]TestAllTypes_NestedEnum)(nil), "conformance.TestAllTypes.MapStringNestedEnumEntry")
	proto.RegisterMapType((map[string]*TestAllTypes_NestedMessage)(nil), "conformance.TestAllTypes.MapStringNestedMessageEntry")
	proto.RegisterMapType((map[string]string)(nil), "conformance.TestAllTypes.MapStringStringEntry")
	proto.RegisterMapType((map[uint32]uint32)(nil), "conformance.TestAllTypes.MapUint32Uint32Entry")
	proto.RegisterMapType((map[uint64]uint64)(nil), "conformance.TestAllTypes.MapUint64Uint64Entry")
	proto.RegisterType((*TestAllTypes_NestedMessage)(nil), "conformance.TestAllTypes.NestedMessage")
	proto.RegisterType((*ForeignMessage)(nil), "conformance.ForeignMessage")
	proto.RegisterEnum("conformance.WireFormat", WireFormat_name, WireFormat_value)
	proto.RegisterEnum("conformance.ForeignEnum", ForeignEnum_name, ForeignEnum_value)
	proto.RegisterEnum("conformance.TestAllTypes_NestedEnum", TestAllTypes_NestedEnum_name, TestAllTypes_NestedEnum_value)
}

func init() { proto.RegisterFile("conformance.proto", fileDescriptor_conformance_3cdb5b28737909f3) }

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