// Code generated by protoc-gen-go. DO NOT EDIT.
// source: datasets/google_message2/benchmark_message2.proto

package google_message2

import (
	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
	reflect "reflect"
	sync "sync"
)

const (
	// Verify that runtime/protoimpl is sufficiently up-to-date.
	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 0)
	// Verify that this generated code is sufficiently up-to-date.
	_ = protoimpl.EnforceVersion(0 - protoimpl.MinVersion)
)

type GoogleMessage2 struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields
	Field1        *string                  `protobuf:"bytes,1,opt,name=field1" json:"field1,omitempty"`
	Field3        *int64                   `protobuf:"varint,3,opt,name=field3" json:"field3,omitempty"`
	Field4        *int64                   `protobuf:"varint,4,opt,name=field4" json:"field4,omitempty"`
	Field30       *int64                   `protobuf:"varint,30,opt,name=field30" json:"field30,omitempty"`
	Field75       *bool                    `protobuf:"varint,75,opt,name=field75,def=0" json:"field75,omitempty"`
	Field6        *string                  `protobuf:"bytes,6,opt,name=field6" json:"field6,omitempty"`
	Field2        []byte                   `protobuf:"bytes,2,opt,name=field2" json:"field2,omitempty"`
	Field21       *int32                   `protobuf:"varint,21,opt,name=field21,def=0" json:"field21,omitempty"`
	Field71       *int32                   `protobuf:"varint,71,opt,name=field71" json:"field71,omitempty"`
	Field25       *float32                 `protobuf:"fixed32,25,opt,name=field25" json:"field25,omitempty"`
	Field109      *int32                   `protobuf:"varint,109,opt,name=field109,def=0" json:"field109,omitempty"`
	Field210      *int32                   `protobuf:"varint,210,opt,name=field210,def=0" json:"field210,omitempty"`
	Field211      *int32                   `protobuf:"varint,211,opt,name=field211,def=0" json:"field211,omitempty"`
	Field212      *int32                   `protobuf:"varint,212,opt,name=field212,def=0" json:"field212,omitempty"`
	Field213      *int32                   `protobuf:"varint,213,opt,name=field213,def=0" json:"field213,omitempty"`
	Field216      *int32                   `protobuf:"varint,216,opt,name=field216,def=0" json:"field216,omitempty"`
	Field217      *int32                   `protobuf:"varint,217,opt,name=field217,def=0" json:"field217,omitempty"`
	Field218      *int32                   `protobuf:"varint,218,opt,name=field218,def=0" json:"field218,omitempty"`
	Field220      *int32                   `protobuf:"varint,220,opt,name=field220,def=0" json:"field220,omitempty"`
	Field221      *int32                   `protobuf:"varint,221,opt,name=field221,def=0" json:"field221,omitempty"`
	Field222      *float32                 `protobuf:"fixed32,222,opt,name=field222,def=0" json:"field222,omitempty"`
	Field63       *int32                   `protobuf:"varint,63,opt,name=field63" json:"field63,omitempty"`
	Group1        []*GoogleMessage2_Group1 `protobuf:"group,10,rep,name=Group1,json=group1" json:"group1,omitempty"`
	Field128      []string                 `protobuf:"bytes,128,rep,name=field128" json:"field128,omitempty"`
	Field131      *int64                   `protobuf:"varint,131,opt,name=field131" json:"field131,omitempty"`
	Field127      []string                 `protobuf:"bytes,127,rep,name=field127" json:"field127,omitempty"`
	Field129      *int32                   `protobuf:"varint,129,opt,name=field129" json:"field129,omitempty"`
	Field130      []int64                  `protobuf:"varint,130,rep,name=field130" json:"field130,omitempty"`
	Field205      *bool                    `protobuf:"varint,205,opt,name=field205,def=0" json:"field205,omitempty"`
	Field206      *bool                    `protobuf:"varint,206,opt,name=field206,def=0" json:"field206,omitempty"`
}

const Default_GoogleMessage2_Field75 bool = false
const Default_GoogleMessage2_Field21 int32 = 0
const Default_GoogleMessage2_Field109 int32 = 0
const Default_GoogleMessage2_Field210 int32 = 0
const Default_GoogleMessage2_Field211 int32 = 0
const Default_GoogleMessage2_Field212 int32 = 0
const Default_GoogleMessage2_Field213 int32 = 0
const Default_GoogleMessage2_Field216 int32 = 0
const Default_GoogleMessage2_Field217 int32 = 0
const Default_GoogleMessage2_Field218 int32 = 0
const Default_GoogleMessage2_Field220 int32 = 0
const Default_GoogleMessage2_Field221 int32 = 0
const Default_GoogleMessage2_Field222 float32 = 0
const Default_GoogleMessage2_Field205 bool = false
const Default_GoogleMessage2_Field206 bool = false

func (x *GoogleMessage2) Reset() {
	*x = GoogleMessage2{}
}

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

func (*GoogleMessage2) ProtoMessage() {}

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

// Deprecated: Use GoogleMessage2.ProtoReflect.Descriptor instead.
func (*GoogleMessage2) Descriptor() ([]byte, []int) {
	return file_datasets_google_message2_benchmark_message2_proto_rawDescGZIP(), []int{0}
}

func (x *GoogleMessage2) GetField1() string {
	if x != nil && x.Field1 != nil {
		return *x.Field1
	}
	return ""
}

func (x *GoogleMessage2) GetField3() int64 {
	if x != nil && x.Field3 != nil {
		return *x.Field3
	}
	return 0
}

func (x *GoogleMessage2) GetField4() int64 {
	if x != nil && x.Field4 != nil {
		return *x.Field4
	}
	return 0
}

func (x *GoogleMessage2) GetField30() int64 {
	if x != nil && x.Field30 != nil {
		return *x.Field30
	}
	return 0
}

func (x *GoogleMessage2) GetField75() bool {
	if x != nil && x.Field75 != nil {
		return *x.Field75
	}
	return Default_GoogleMessage2_Field75
}

func (x *GoogleMessage2) GetField6() string {
	if x != nil && x.Field6 != nil {
		return *x.Field6
	}
	return ""
}

func (x *GoogleMessage2) GetField2() []byte {
	if x != nil {
		return x.Field2
	}
	return nil
}

func (x *GoogleMessage2) GetField21() int32 {
	if x != nil && x.Field21 != nil {
		return *x.Field21
	}
	return Default_GoogleMessage2_Field21
}

func (x *GoogleMessage2) GetField71() int32 {
	if x != nil && x.Field71 != nil {
		return *x.Field71
	}
	return 0
}

func (x *GoogleMessage2) GetField25() float32 {
	if x != nil && x.Field25 != nil {
		return *x.Field25
	}
	return 0
}

func (x *GoogleMessage2) GetField109() int32 {
	if x != nil && x.Field109 != nil {
		return *x.Field109
	}
	return Default_GoogleMessage2_Field109
}

func (x *GoogleMessage2) GetField210() int32 {
	if x != nil && x.Field210 != nil {
		return *x.Field210
	}
	return Default_GoogleMessage2_Field210
}

func (x *GoogleMessage2) GetField211() int32 {
	if x != nil && x.Field211 != nil {
		return *x.Field211
	}
	return Default_GoogleMessage2_Field211
}

func (x *GoogleMessage2) GetField212() int32 {
	if x != nil && x.Field212 != nil {
		return *x.Field212
	}
	return Default_GoogleMessage2_Field212
}

func (x *GoogleMessage2) GetField213() int32 {
	if x != nil && x.Field213 != nil {
		return *x.Field213
	}
	return Default_GoogleMessage2_Field213
}

func (x *GoogleMessage2) GetField216() int32 {
	if x != nil && x.Field216 != nil {
		return *x.Field216
	}
	return Default_GoogleMessage2_Field216
}

func (x *GoogleMessage2) GetField217() int32 {
	if x != nil && x.Field217 != nil {
		return *x.Field217
	}
	return Default_GoogleMessage2_Field217
}

func (x *GoogleMessage2) GetField218() int32 {
	if x != nil && x.Field218 != nil {
		return *x.Field218
	}
	return Default_GoogleMessage2_Field218
}

func (x *GoogleMessage2) GetField220() int32 {
	if x != nil && x.Field220 != nil {
		return *x.Field220
	}
	return Default_GoogleMessage2_Field220
}

func (x *GoogleMessage2) GetField221() int32 {
	if x != nil && x.Field221 != nil {
		return *x.Field221
	}
	return Default_GoogleMessage2_Field221
}

func (x *GoogleMessage2) GetField222() float32 {
	if x != nil && x.Field222 != nil {
		return *x.Field222
	}
	return Default_GoogleMessage2_Field222
}

func (x *GoogleMessage2) GetField63() int32 {
	if x != nil && x.Field63 != nil {
		return *x.Field63
	}
	return 0
}

func (x *GoogleMessage2) GetGroup1() []*GoogleMessage2_Group1 {
	if x != nil {
		return x.Group1
	}
	return nil
}

func (x *GoogleMessage2) GetField128() []string {
	if x != nil {
		return x.Field128
	}
	return nil
}

func (x *GoogleMessage2) GetField131() int64 {
	if x != nil && x.Field131 != nil {
		return *x.Field131
	}
	return 0
}

func (x *GoogleMessage2) GetField127() []string {
	if x != nil {
		return x.Field127
	}
	return nil
}

func (x *GoogleMessage2) GetField129() int32 {
	if x != nil && x.Field129 != nil {
		return *x.Field129
	}
	return 0
}

func (x *GoogleMessage2) GetField130() []int64 {
	if x != nil {
		return x.Field130
	}
	return nil
}

func (x *GoogleMessage2) GetField205() bool {
	if x != nil && x.Field205 != nil {
		return *x.Field205
	}
	return Default_GoogleMessage2_Field205
}

func (x *GoogleMessage2) GetField206() bool {
	if x != nil && x.Field206 != nil {
		return *x.Field206
	}
	return Default_GoogleMessage2_Field206
}

type GoogleMessage2GroupedMessage struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields
	Field1        *float32 `protobuf:"fixed32,1,opt,name=field1" json:"field1,omitempty"`
	Field2        *float32 `protobuf:"fixed32,2,opt,name=field2" json:"field2,omitempty"`
	Field3        *float32 `protobuf:"fixed32,3,opt,name=field3,def=0" json:"field3,omitempty"`
	Field4        *bool    `protobuf:"varint,4,opt,name=field4" json:"field4,omitempty"`
	Field5        *bool    `protobuf:"varint,5,opt,name=field5" json:"field5,omitempty"`
	Field6        *bool    `protobuf:"varint,6,opt,name=field6,def=1" json:"field6,omitempty"`
	Field7        *bool    `protobuf:"varint,7,opt,name=field7,def=0" json:"field7,omitempty"`
	Field8        *float32 `protobuf:"fixed32,8,opt,name=field8" json:"field8,omitempty"`
	Field9        *bool    `protobuf:"varint,9,opt,name=field9" json:"field9,omitempty"`
	Field10       *float32 `protobuf:"fixed32,10,opt,name=field10" json:"field10,omitempty"`
	Field11       *int64   `protobuf:"varint,11,opt,name=field11" json:"field11,omitempty"`
}

const Default_GoogleMessage2GroupedMessage_Field3 float32 = 0
const Default_GoogleMessage2GroupedMessage_Field6 bool = true
const Default_GoogleMessage2GroupedMessage_Field7 bool = false

func (x *GoogleMessage2GroupedMessage) Reset() {
	*x = GoogleMessage2GroupedMessage{}
}

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

func (*GoogleMessage2GroupedMessage) ProtoMessage() {}

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

// Deprecated: Use GoogleMessage2GroupedMessage.ProtoReflect.Descriptor instead.
func (*GoogleMessage2GroupedMessage) Descriptor() ([]byte, []int) {
	return file_datasets_google_message2_benchmark_message2_proto_rawDescGZIP(), []int{1}
}

func (x *GoogleMessage2GroupedMessage) GetField1() float32 {
	if x != nil && x.Field1 != nil {
		return *x.Field1
	}
	return 0
}

func (x *GoogleMessage2GroupedMessage) GetField2() float32 {
	if x != nil && x.Field2 != nil {
		return *x.Field2
	}
	return 0
}

func (x *GoogleMessage2GroupedMessage) GetField3() float32 {
	if x != nil && x.Field3 != nil {
		return *x.Field3
	}
	return Default_GoogleMessage2GroupedMessage_Field3
}

func (x *GoogleMessage2GroupedMessage) GetField4() bool {
	if x != nil && x.Field4 != nil {
		return *x.Field4
	}
	return false
}

func (x *GoogleMessage2GroupedMessage) GetField5() bool {
	if x != nil && x.Field5 != nil {
		return *x.Field5
	}
	return false
}

func (x *GoogleMessage2GroupedMessage) GetField6() bool {
	if x != nil && x.Field6 != nil {
		return *x.Field6
	}
	return Default_GoogleMessage2GroupedMessage_Field6
}

func (x *GoogleMessage2GroupedMessage) GetField7() bool {
	if x != nil && x.Field7 != nil {
		return *x.Field7
	}
	return Default_GoogleMessage2GroupedMessage_Field7
}

func (x *GoogleMessage2GroupedMessage) GetField8() float32 {
	if x != nil && x.Field8 != nil {
		return *x.Field8
	}
	return 0
}

func (x *GoogleMessage2GroupedMessage) GetField9() bool {
	if x != nil && x.Field9 != nil {
		return *x.Field9
	}
	return false
}

func (x *GoogleMessage2GroupedMessage) GetField10() float32 {
	if x != nil && x.Field10 != nil {
		return *x.Field10
	}
	return 0
}

func (x *GoogleMessage2GroupedMessage) GetField11() int64 {
	if x != nil && x.Field11 != nil {
		return *x.Field11
	}
	return 0
}

type GoogleMessage2_Group1 struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields
	Field11       *float32                      `protobuf:"fixed32,11,req,name=field11" json:"field11,omitempty"`
	Field26       *float32                      `protobuf:"fixed32,26,opt,name=field26" json:"field26,omitempty"`
	Field12       *string                       `protobuf:"bytes,12,opt,name=field12" json:"field12,omitempty"`
	Field13       *string                       `protobuf:"bytes,13,opt,name=field13" json:"field13,omitempty"`
	Field14       []string                      `protobuf:"bytes,14,rep,name=field14" json:"field14,omitempty"`
	Field15       *uint64                       `protobuf:"varint,15,req,name=field15" json:"field15,omitempty"`
	Field5        *int32                        `protobuf:"varint,5,opt,name=field5" json:"field5,omitempty"`
	Field27       *string                       `protobuf:"bytes,27,opt,name=field27" json:"field27,omitempty"`
	Field28       *int32                        `protobuf:"varint,28,opt,name=field28" json:"field28,omitempty"`
	Field29       *string                       `protobuf:"bytes,29,opt,name=field29" json:"field29,omitempty"`
	Field16       *string                       `protobuf:"bytes,16,opt,name=field16" json:"field16,omitempty"`
	Field22       []string                      `protobuf:"bytes,22,rep,name=field22" json:"field22,omitempty"`
	Field73       []int32                       `protobuf:"varint,73,rep,name=field73" json:"field73,omitempty"`
	Field20       *int32                        `protobuf:"varint,20,opt,name=field20,def=0" json:"field20,omitempty"`
	Field24       *string                       `protobuf:"bytes,24,opt,name=field24" json:"field24,omitempty"`
	Field31       *GoogleMessage2GroupedMessage `protobuf:"bytes,31,opt,name=field31" json:"field31,omitempty"`
}

const Default_GoogleMessage2_Group1_Field20 int32 = 0

func (x *GoogleMessage2_Group1) Reset() {
	*x = GoogleMessage2_Group1{}
}

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

func (*GoogleMessage2_Group1) ProtoMessage() {}

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

// Deprecated: Use GoogleMessage2_Group1.ProtoReflect.Descriptor instead.
func (*GoogleMessage2_Group1) Descriptor() ([]byte, []int) {
	return file_datasets_google_message2_benchmark_message2_proto_rawDescGZIP(), []int{0, 0}
}

func (x *GoogleMessage2_Group1) GetField11() float32 {
	if x != nil && x.Field11 != nil {
		return *x.Field11
	}
	return 0
}

func (x *GoogleMessage2_Group1) GetField26() float32 {
	if x != nil && x.Field26 != nil {
		return *x.Field26
	}
	return 0
}

func (x *GoogleMessage2_Group1) GetField12() string {
	if x != nil && x.Field12 != nil {
		return *x.Field12
	}
	return ""
}

func (x *GoogleMessage2_Group1) GetField13() string {
	if x != nil && x.Field13 != nil {
		return *x.Field13
	}
	return ""
}

func (x *GoogleMessage2_Group1) GetField14() []string {
	if x != nil {
		return x.Field14
	}
	return nil
}

func (x *GoogleMessage2_Group1) GetField15() uint64 {
	if x != nil && x.Field15 != nil {
		return *x.Field15
	}
	return 0
}

func (x *GoogleMessage2_Group1) GetField5() int32 {
	if x != nil && x.Field5 != nil {
		return *x.Field5
	}
	return 0
}

func (x *GoogleMessage2_Group1) GetField27() string {
	if x != nil && x.Field27 != nil {
		return *x.Field27
	}
	return ""
}

func (x *GoogleMessage2_Group1) GetField28() int32 {
	if x != nil && x.Field28 != nil {
		return *x.Field28
	}
	return 0
}

func (x *GoogleMessage2_Group1) GetField29() string {
	if x != nil && x.Field29 != nil {
		return *x.Field29
	}
	return ""
}

func (x *GoogleMessage2_Group1) GetField16() string {
	if x != nil && x.Field16 != nil {
		return *x.Field16
	}
	return ""
}

func (x *GoogleMessage2_Group1) GetField22() []string {
	if x != nil {
		return x.Field22
	}
	return nil
}

func (x *GoogleMessage2_Group1) GetField73() []int32 {
	if x != nil {
		return x.Field73
	}
	return nil
}

func (x *GoogleMessage2_Group1) GetField20() int32 {
	if x != nil && x.Field20 != nil {
		return *x.Field20
	}
	return Default_GoogleMessage2_Group1_Field20
}

func (x *GoogleMessage2_Group1) GetField24() string {
	if x != nil && x.Field24 != nil {
		return *x.Field24
	}
	return ""
}

func (x *GoogleMessage2_Group1) GetField31() *GoogleMessage2GroupedMessage {
	if x != nil {
		return x.Field31
	}
	return nil
}

var File_datasets_google_message2_benchmark_message2_proto protoreflect.FileDescriptor

var file_datasets_google_message2_benchmark_message2_proto_rawDesc = []byte{
	0x0a, 0x31, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x73, 0x2f, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
	0x65, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x32, 0x2f, 0x62, 0x65, 0x6e, 0x63, 0x68,
	0x6d, 0x61, 0x72, 0x6b, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x32, 0x2e, 0x70, 0x72,
	0x6f, 0x74, 0x6f, 0x12, 0x11, 0x62, 0x65, 0x6e, 0x63, 0x68, 0x6d, 0x61, 0x72, 0x6b, 0x73, 0x2e,
	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x22, 0x84, 0x0b, 0x0a, 0x0e, 0x47, 0x6f, 0x6f, 0x67, 0x6c,
	0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x32, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x69, 0x65,
	0x6c, 0x64, 0x31, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64,
	0x31, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x33, 0x18, 0x03, 0x20, 0x01, 0x28,
	0x03, 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x33, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x69, 0x65,
	0x6c, 0x64, 0x34, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64,
	0x34, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x33, 0x30, 0x18, 0x1e, 0x20, 0x01,
	0x28, 0x03, 0x52, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x33, 0x30, 0x12, 0x1f, 0x0a, 0x07, 0x66,
	0x69, 0x65, 0x6c, 0x64, 0x37, 0x35, 0x18, 0x4b, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61,
	0x6c, 0x73, 0x65, 0x52, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x37, 0x35, 0x12, 0x16, 0x0a, 0x06,
	0x66, 0x69, 0x65, 0x6c, 0x64, 0x36, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, 0x69,
	0x65, 0x6c, 0x64, 0x36, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x32, 0x18, 0x02,
	0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x32, 0x12, 0x1b, 0x0a, 0x07,
	0x66, 0x69, 0x65, 0x6c, 0x64, 0x32, 0x31, 0x18, 0x15, 0x20, 0x01, 0x28, 0x05, 0x3a, 0x01, 0x30,
	0x52, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x32, 0x31, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x69, 0x65,
	0x6c, 0x64, 0x37, 0x31, 0x18, 0x47, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x66, 0x69, 0x65, 0x6c,
	0x64, 0x37, 0x31, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x32, 0x35, 0x18, 0x19,
	0x20, 0x01, 0x28, 0x02, 0x52, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x32, 0x35, 0x12, 0x1d, 0x0a,
	0x08, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x31, 0x30, 0x39, 0x18, 0x6d, 0x20, 0x01, 0x28, 0x05, 0x3a,
	0x01, 0x30, 0x52, 0x08, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x31, 0x30, 0x39, 0x12, 0x1e, 0x0a, 0x08,
	0x66, 0x69, 0x65, 0x6c, 0x64, 0x32, 0x31, 0x30, 0x18, 0xd2, 0x01, 0x20, 0x01, 0x28, 0x05, 0x3a,
	0x01, 0x30, 0x52, 0x08, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x32, 0x31, 0x30, 0x12, 0x1e, 0x0a, 0x08,
	0x66, 0x69, 0x65, 0x6c, 0x64, 0x32, 0x31, 0x31, 0x18, 0xd3, 0x01, 0x20, 0x01, 0x28, 0x05, 0x3a,
	0x01, 0x30, 0x52, 0x08, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x32, 0x31, 0x31, 0x12, 0x1e, 0x0a, 0x08,
	0x66, 0x69, 0x65, 0x6c, 0x64, 0x32, 0x31, 0x32, 0x18, 0xd4, 0x01, 0x20, 0x01, 0x28, 0x05, 0x3a,
	0x01, 0x30, 0x52, 0x08, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x32, 0x31, 0x32, 0x12, 0x1e, 0x0a, 0x08,
	0x66, 0x69, 0x65, 0x6c, 0x64, 0x32, 0x31, 0x33, 0x18, 0xd5, 0x01, 0x20, 0x01, 0x28, 0x05, 0x3a,
	0x01, 0x30, 0x52, 0x08, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x32, 0x31, 0x33, 0x12, 0x1e, 0x0a, 0x08,
	0x66, 0x69, 0x65, 0x6c, 0x64, 0x32, 0x31, 0x36, 0x18, 0xd8, 0x01, 0x20, 0x01, 0x28, 0x05, 0x3a,
	0x01, 0x30, 0x52, 0x08, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x32, 0x31, 0x36, 0x12, 0x1e, 0x0a, 0x08,
	0x66, 0x69, 0x65, 0x6c, 0x64, 0x32, 0x31, 0x37, 0x18, 0xd9, 0x01, 0x20, 0x01, 0x28, 0x05, 0x3a,
	0x01, 0x30, 0x52, 0x08, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x32, 0x31, 0x37, 0x12, 0x1e, 0x0a, 0x08,
	0x66, 0x69, 0x65, 0x6c, 0x64, 0x32, 0x31, 0x38, 0x18, 0xda, 0x01, 0x20, 0x01, 0x28, 0x05, 0x3a,
	0x01, 0x30, 0x52, 0x08, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x32, 0x31, 0x38, 0x12, 0x1e, 0x0a, 0x08,
	0x66, 0x69, 0x65, 0x6c, 0x64, 0x32, 0x32, 0x30, 0x18, 0xdc, 0x01, 0x20, 0x01, 0x28, 0x05, 0x3a,
	0x01, 0x30, 0x52, 0x08, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x32, 0x32, 0x30, 0x12, 0x1e, 0x0a, 0x08,
	0x66, 0x69, 0x65, 0x6c, 0x64, 0x32, 0x32, 0x31, 0x18, 0xdd, 0x01, 0x20, 0x01, 0x28, 0x05, 0x3a,
	0x01, 0x30, 0x52, 0x08, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x32, 0x32, 0x31, 0x12, 0x1e, 0x0a, 0x08,
	0x66, 0x69, 0x65, 0x6c, 0x64, 0x32, 0x32, 0x32, 0x18, 0xde, 0x01, 0x20, 0x01, 0x28, 0x02, 0x3a,
	0x01, 0x30, 0x52, 0x08, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x32, 0x32, 0x32, 0x12, 0x18, 0x0a, 0x07,
	0x66, 0x69, 0x65, 0x6c, 0x64, 0x36, 0x33, 0x18, 0x3f, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x66,
	0x69, 0x65, 0x6c, 0x64, 0x36, 0x33, 0x12, 0x40, 0x0a, 0x06, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x31,
	0x18, 0x0a, 0x20, 0x03, 0x28, 0x0a, 0x32, 0x28, 0x2e, 0x62, 0x65, 0x6e, 0x63, 0x68, 0x6d, 0x61,
	0x72, 0x6b, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x47, 0x6f, 0x6f, 0x67, 0x6c,
	0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x32, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x31,
	0x52, 0x06, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x31, 0x12, 0x1b, 0x0a, 0x08, 0x66, 0x69, 0x65, 0x6c,
	0x64, 0x31, 0x32, 0x38, 0x18, 0x80, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x65,
	0x6c, 0x64, 0x31, 0x32, 0x38, 0x12, 0x1b, 0x0a, 0x08, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x31, 0x33,
	0x31, 0x18, 0x83, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x31,
	0x33, 0x31, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x31, 0x32, 0x37, 0x18, 0x7f,
	0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x31, 0x32, 0x37, 0x12, 0x1b,
	0x0a, 0x08, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x31, 0x32, 0x39, 0x18, 0x81, 0x01, 0x20, 0x01, 0x28,
	0x05, 0x52, 0x08, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x31, 0x32, 0x39, 0x12, 0x1b, 0x0a, 0x08, 0x66,
	0x69, 0x65, 0x6c, 0x64, 0x31, 0x33, 0x30, 0x18, 0x82, 0x01, 0x20, 0x03, 0x28, 0x03, 0x52, 0x08,
	0x66, 0x69, 0x65, 0x6c, 0x64, 0x31, 0x33, 0x30, 0x12, 0x22, 0x0a, 0x08, 0x66, 0x69, 0x65, 0x6c,
	0x64, 0x32, 0x30, 0x35, 0x18, 0xcd, 0x01, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c,
	0x73, 0x65, 0x52, 0x08, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x32, 0x30, 0x35, 0x12, 0x22, 0x0a, 0x08,
	0x66, 0x69, 0x65, 0x6c, 0x64, 0x32, 0x30, 0x36, 0x18, 0xce, 0x01, 0x20, 0x01, 0x28, 0x08, 0x3a,
	0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x08, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x32, 0x30, 0x36,
	0x1a, 0xda, 0x03, 0x0a, 0x06, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x31, 0x12, 0x18, 0x0a, 0x07, 0x66,
	0x69, 0x65, 0x6c, 0x64, 0x31, 0x31, 0x18, 0x0b, 0x20, 0x02, 0x28, 0x02, 0x52, 0x07, 0x66, 0x69,
	0x65, 0x6c, 0x64, 0x31, 0x31, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x32, 0x36,
	0x18, 0x1a, 0x20, 0x01, 0x28, 0x02, 0x52, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x32, 0x36, 0x12,
	0x18, 0x0a, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x31, 0x32, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09,
	0x52, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x31, 0x32, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x69, 0x65,
	0x6c, 0x64, 0x31, 0x33, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x66, 0x69, 0x65, 0x6c,
	0x64, 0x31, 0x33, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x31, 0x34, 0x18, 0x0e,
	0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x31, 0x34, 0x12, 0x18, 0x0a,
	0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x31, 0x35, 0x18, 0x0f, 0x20, 0x02, 0x28, 0x04, 0x52, 0x07,
	0x66, 0x69, 0x65, 0x6c, 0x64, 0x31, 0x35, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64,
	0x35, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x35, 0x12,
	0x18, 0x0a, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x32, 0x37, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x09,
	0x52, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x32, 0x37, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x69, 0x65,
	0x6c, 0x64, 0x32, 0x38, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x66, 0x69, 0x65, 0x6c,
	0x64, 0x32, 0x38, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x32, 0x39, 0x18, 0x1d,
	0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x32, 0x39, 0x12, 0x18, 0x0a,
	0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x31, 0x36, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07,
	0x66, 0x69, 0x65, 0x6c, 0x64, 0x31, 0x36, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64,
	0x32, 0x32, 0x18, 0x16, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x32,
	0x32, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x37, 0x33, 0x18, 0x49, 0x20, 0x03,
	0x28, 0x05, 0x52, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x37, 0x33, 0x12, 0x1b, 0x0a, 0x07, 0x66,
	0x69, 0x65, 0x6c, 0x64, 0x32, 0x30, 0x18, 0x14, 0x20, 0x01, 0x28, 0x05, 0x3a, 0x01, 0x30, 0x52,
	0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x32, 0x30, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x69, 0x65, 0x6c,
	0x64, 0x32, 0x34, 0x18, 0x18, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64,
	0x32, 0x34, 0x12, 0x49, 0x0a, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x33, 0x31, 0x18, 0x1f, 0x20,
	0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x62, 0x65, 0x6e, 0x63, 0x68, 0x6d, 0x61, 0x72, 0x6b, 0x73,
	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x4d, 0x65,
	0x73, 0x73, 0x61, 0x67, 0x65, 0x32, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x65, 0x64, 0x4d, 0x65, 0x73,
	0x73, 0x61, 0x67, 0x65, 0x52, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x33, 0x31, 0x22, 0xba, 0x02,
	0x0a, 0x1c, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x32,
	0x47, 0x72, 0x6f, 0x75, 0x70, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x16,
	0x0a, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x31, 0x18, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x06,
	0x66, 0x69, 0x65, 0x6c, 0x64, 0x31, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x32,
	0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x32, 0x12, 0x19,
	0x0a, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x33, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x3a, 0x01,
	0x30, 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x33, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x69, 0x65,
	0x6c, 0x64, 0x34, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64,
	0x34, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x35, 0x18, 0x05, 0x20, 0x01, 0x28,
	0x08, 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x35, 0x12, 0x1c, 0x0a, 0x06, 0x66, 0x69, 0x65,
	0x6c, 0x64, 0x36, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x04, 0x74, 0x72, 0x75, 0x65, 0x52,
	0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x36, 0x12, 0x1d, 0x0a, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64,
	0x37, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x06,
	0x66, 0x69, 0x65, 0x6c, 0x64, 0x37, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x38,
	0x18, 0x08, 0x20, 0x01, 0x28, 0x02, 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x38, 0x12, 0x16,
	0x0a, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x39, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06,
	0x66, 0x69, 0x65, 0x6c, 0x64, 0x39, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x31,
	0x30, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x02, 0x52, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x31, 0x30,
	0x12, 0x18, 0x0a, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x31, 0x31, 0x18, 0x0b, 0x20, 0x01, 0x28,
	0x03, 0x52, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x31, 0x31, 0x42, 0x79, 0x0a, 0x1e, 0x63, 0x6f,
	0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
	0x66, 0x2e, 0x62, 0x65, 0x6e, 0x63, 0x68, 0x6d, 0x61, 0x72, 0x6b, 0x73, 0x48, 0x01, 0x5a, 0x52,
	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f, 0x72,
	0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72,
	0x6e, 0x61, 0x6c, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x2f, 0x62,
	0x65, 0x6e, 0x63, 0x68, 0x6d, 0x61, 0x72, 0x6b, 0x73, 0x2f, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65,
	0x74, 0x73, 0x2f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67,
	0x65, 0x32, 0xf8, 0x01, 0x01,
}

var (
	file_datasets_google_message2_benchmark_message2_proto_rawDescOnce sync.Once
	file_datasets_google_message2_benchmark_message2_proto_rawDescData = file_datasets_google_message2_benchmark_message2_proto_rawDesc
)

func file_datasets_google_message2_benchmark_message2_proto_rawDescGZIP() []byte {
	file_datasets_google_message2_benchmark_message2_proto_rawDescOnce.Do(func() {
		file_datasets_google_message2_benchmark_message2_proto_rawDescData = protoimpl.X.CompressGZIP(file_datasets_google_message2_benchmark_message2_proto_rawDescData)
	})
	return file_datasets_google_message2_benchmark_message2_proto_rawDescData
}

var file_datasets_google_message2_benchmark_message2_proto_msgTypes = make([]protoimpl.MessageInfo, 3)
var file_datasets_google_message2_benchmark_message2_proto_goTypes = []interface{}{
	(*GoogleMessage2)(nil),               // 0: benchmarks.proto2.GoogleMessage2
	(*GoogleMessage2GroupedMessage)(nil), // 1: benchmarks.proto2.GoogleMessage2GroupedMessage
	(*GoogleMessage2_Group1)(nil),        // 2: benchmarks.proto2.GoogleMessage2.Group1
}
var file_datasets_google_message2_benchmark_message2_proto_depIdxs = []int32{
	2, // benchmarks.proto2.GoogleMessage2.group1:type_name -> benchmarks.proto2.GoogleMessage2.Group1
	1, // benchmarks.proto2.GoogleMessage2.Group1.field31:type_name -> benchmarks.proto2.GoogleMessage2GroupedMessage
	2, // starting offset of method output_type sub-list
	2, // starting offset of method input_type sub-list
	2, // starting offset of extension type_name sub-list
	2, // starting offset of extension extendee sub-list
	0, // starting offset of field type_name sub-list
}

func init() { file_datasets_google_message2_benchmark_message2_proto_init() }
func file_datasets_google_message2_benchmark_message2_proto_init() {
	if File_datasets_google_message2_benchmark_message2_proto != nil {
		return
	}
	if !protoimpl.UnsafeEnabled {
		file_datasets_google_message2_benchmark_message2_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*GoogleMessage2); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_datasets_google_message2_benchmark_message2_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*GoogleMessage2GroupedMessage); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_datasets_google_message2_benchmark_message2_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*GoogleMessage2_Group1); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
	}
	type x struct{}
	out := protoimpl.TypeBuilder{
		File: protoimpl.DescBuilder{
			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
			RawDescriptor: file_datasets_google_message2_benchmark_message2_proto_rawDesc,
			NumEnums:      0,
			NumMessages:   3,
			NumExtensions: 0,
			NumServices:   0,
		},
		GoTypes:           file_datasets_google_message2_benchmark_message2_proto_goTypes,
		DependencyIndexes: file_datasets_google_message2_benchmark_message2_proto_depIdxs,
		MessageInfos:      file_datasets_google_message2_benchmark_message2_proto_msgTypes,
	}.Build()
	File_datasets_google_message2_benchmark_message2_proto = out.File
	file_datasets_google_message2_benchmark_message2_proto_rawDesc = nil
	file_datasets_google_message2_benchmark_message2_proto_goTypes = nil
	file_datasets_google_message2_benchmark_message2_proto_depIdxs = nil
}
