// Generated by the protocol buffer compiler.  DO NOT EDIT!
// source: google/protobuf/map_unittest.proto

#ifndef PROTOBUF_INCLUDED_google_2fprotobuf_2fmap_5funittest_2eproto
#define PROTOBUF_INCLUDED_google_2fprotobuf_2fmap_5funittest_2eproto

#include <string>

#include <google/protobuf/stubs/common.h>

#if GOOGLE_PROTOBUF_VERSION < 3006001
#error This file was generated by a newer version of protoc which is
#error incompatible with your Protocol Buffer headers.  Please update
#error your headers.
#endif
#if 3006001 < GOOGLE_PROTOBUF_MIN_PROTOC_VERSION
#error This file was generated by an older version of protoc which is
#error incompatible with your Protocol Buffer headers.  Please
#error regenerate this file with a newer version of protoc.
#endif

#include <google/protobuf/io/coded_stream.h>
#include <google/protobuf/arena.h>
#include <google/protobuf/arenastring.h>
#include <google/protobuf/generated_message_table_driven.h>
#include <google/protobuf/generated_message_util.h>
#include <google/protobuf/inlined_string_field.h>
#include <google/protobuf/metadata.h>
#include <google/protobuf/message.h>
#include <google/protobuf/repeated_field.h>  // IWYU pragma: export
#include <google/protobuf/extension_set.h>  // IWYU pragma: export
#include <google/protobuf/map.h>  // IWYU pragma: export
#include <google/protobuf/map_entry.h>
#include <google/protobuf/map_field_inl.h>
#include <google/protobuf/generated_enum_reflection.h>
#include <google/protobuf/unknown_field_set.h>
#include <google/protobuf/unittest.pb.h>
#include <google/protobuf/unittest_no_arena.pb.h>
// @@protoc_insertion_point(includes)
#define PROTOBUF_INTERNAL_EXPORT_protobuf_google_2fprotobuf_2fmap_5funittest_2eproto 

namespace protobuf_google_2fprotobuf_2fmap_5funittest_2eproto {
// Internal implementation detail -- do not use these members.
struct TableStruct {
  static const ::google::protobuf::internal::ParseTableField entries[];
  static const ::google::protobuf::internal::AuxillaryParseTableField aux[];
  static const ::google::protobuf::internal::ParseTable schema[53];
  static const ::google::protobuf::internal::FieldMetadata field_metadata[];
  static const ::google::protobuf::internal::SerializationTable serialization_table[];
  static const ::google::protobuf::uint32 offsets[];
};
void AddDescriptors();
}  // namespace protobuf_google_2fprotobuf_2fmap_5funittest_2eproto
namespace protobuf_unittest {
class MessageContainingEnumCalledType;
class MessageContainingEnumCalledTypeDefaultTypeInternal;
extern MessageContainingEnumCalledTypeDefaultTypeInternal _MessageContainingEnumCalledType_default_instance_;
class MessageContainingEnumCalledType_TypeEntry_DoNotUse;
class MessageContainingEnumCalledType_TypeEntry_DoNotUseDefaultTypeInternal;
extern MessageContainingEnumCalledType_TypeEntry_DoNotUseDefaultTypeInternal _MessageContainingEnumCalledType_TypeEntry_DoNotUse_default_instance_;
class MessageContainingMapCalledEntry;
class MessageContainingMapCalledEntryDefaultTypeInternal;
extern MessageContainingMapCalledEntryDefaultTypeInternal _MessageContainingMapCalledEntry_default_instance_;
class MessageContainingMapCalledEntry_EntryEntry_DoNotUse;
class MessageContainingMapCalledEntry_EntryEntry_DoNotUseDefaultTypeInternal;
extern MessageContainingMapCalledEntry_EntryEntry_DoNotUseDefaultTypeInternal _MessageContainingMapCalledEntry_EntryEntry_DoNotUse_default_instance_;
class TestArenaMap;
class TestArenaMapDefaultTypeInternal;
extern TestArenaMapDefaultTypeInternal _TestArenaMap_default_instance_;
class TestArenaMap_MapBoolBoolEntry_DoNotUse;
class TestArenaMap_MapBoolBoolEntry_DoNotUseDefaultTypeInternal;
extern TestArenaMap_MapBoolBoolEntry_DoNotUseDefaultTypeInternal _TestArenaMap_MapBoolBoolEntry_DoNotUse_default_instance_;
class TestArenaMap_MapFixed32Fixed32Entry_DoNotUse;
class TestArenaMap_MapFixed32Fixed32Entry_DoNotUseDefaultTypeInternal;
extern TestArenaMap_MapFixed32Fixed32Entry_DoNotUseDefaultTypeInternal _TestArenaMap_MapFixed32Fixed32Entry_DoNotUse_default_instance_;
class TestArenaMap_MapFixed64Fixed64Entry_DoNotUse;
class TestArenaMap_MapFixed64Fixed64Entry_DoNotUseDefaultTypeInternal;
extern TestArenaMap_MapFixed64Fixed64Entry_DoNotUseDefaultTypeInternal _TestArenaMap_MapFixed64Fixed64Entry_DoNotUse_default_instance_;
class TestArenaMap_MapInt32BytesEntry_DoNotUse;
class TestArenaMap_MapInt32BytesEntry_DoNotUseDefaultTypeInternal;
extern TestArenaMap_MapInt32BytesEntry_DoNotUseDefaultTypeInternal _TestArenaMap_MapInt32BytesEntry_DoNotUse_default_instance_;
class TestArenaMap_MapInt32DoubleEntry_DoNotUse;
class TestArenaMap_MapInt32DoubleEntry_DoNotUseDefaultTypeInternal;
extern TestArenaMap_MapInt32DoubleEntry_DoNotUseDefaultTypeInternal _TestArenaMap_MapInt32DoubleEntry_DoNotUse_default_instance_;
class TestArenaMap_MapInt32EnumEntry_DoNotUse;
class TestArenaMap_MapInt32EnumEntry_DoNotUseDefaultTypeInternal;
extern TestArenaMap_MapInt32EnumEntry_DoNotUseDefaultTypeInternal _TestArenaMap_MapInt32EnumEntry_DoNotUse_default_instance_;
class TestArenaMap_MapInt32FloatEntry_DoNotUse;
class TestArenaMap_MapInt32FloatEntry_DoNotUseDefaultTypeInternal;
extern TestArenaMap_MapInt32FloatEntry_DoNotUseDefaultTypeInternal _TestArenaMap_MapInt32FloatEntry_DoNotUse_default_instance_;
class TestArenaMap_MapInt32ForeignMessageEntry_DoNotUse;
class TestArenaMap_MapInt32ForeignMessageEntry_DoNotUseDefaultTypeInternal;
extern TestArenaMap_MapInt32ForeignMessageEntry_DoNotUseDefaultTypeInternal _TestArenaMap_MapInt32ForeignMessageEntry_DoNotUse_default_instance_;
class TestArenaMap_MapInt32ForeignMessageNoArenaEntry_DoNotUse;
class TestArenaMap_MapInt32ForeignMessageNoArenaEntry_DoNotUseDefaultTypeInternal;
extern TestArenaMap_MapInt32ForeignMessageNoArenaEntry_DoNotUseDefaultTypeInternal _TestArenaMap_MapInt32ForeignMessageNoArenaEntry_DoNotUse_default_instance_;
class TestArenaMap_MapInt32Int32Entry_DoNotUse;
class TestArenaMap_MapInt32Int32Entry_DoNotUseDefaultTypeInternal;
extern TestArenaMap_MapInt32Int32Entry_DoNotUseDefaultTypeInternal _TestArenaMap_MapInt32Int32Entry_DoNotUse_default_instance_;
class TestArenaMap_MapInt64Int64Entry_DoNotUse;
class TestArenaMap_MapInt64Int64Entry_DoNotUseDefaultTypeInternal;
extern TestArenaMap_MapInt64Int64Entry_DoNotUseDefaultTypeInternal _TestArenaMap_MapInt64Int64Entry_DoNotUse_default_instance_;
class TestArenaMap_MapSfixed32Sfixed32Entry_DoNotUse;
class TestArenaMap_MapSfixed32Sfixed32Entry_DoNotUseDefaultTypeInternal;
extern TestArenaMap_MapSfixed32Sfixed32Entry_DoNotUseDefaultTypeInternal _TestArenaMap_MapSfixed32Sfixed32Entry_DoNotUse_default_instance_;
class TestArenaMap_MapSfixed64Sfixed64Entry_DoNotUse;
class TestArenaMap_MapSfixed64Sfixed64Entry_DoNotUseDefaultTypeInternal;
extern TestArenaMap_MapSfixed64Sfixed64Entry_DoNotUseDefaultTypeInternal _TestArenaMap_MapSfixed64Sfixed64Entry_DoNotUse_default_instance_;
class TestArenaMap_MapSint32Sint32Entry_DoNotUse;
class TestArenaMap_MapSint32Sint32Entry_DoNotUseDefaultTypeInternal;
extern TestArenaMap_MapSint32Sint32Entry_DoNotUseDefaultTypeInternal _TestArenaMap_MapSint32Sint32Entry_DoNotUse_default_instance_;
class TestArenaMap_MapSint64Sint64Entry_DoNotUse;
class TestArenaMap_MapSint64Sint64Entry_DoNotUseDefaultTypeInternal;
extern TestArenaMap_MapSint64Sint64Entry_DoNotUseDefaultTypeInternal _TestArenaMap_MapSint64Sint64Entry_DoNotUse_default_instance_;
class TestArenaMap_MapStringStringEntry_DoNotUse;
class TestArenaMap_MapStringStringEntry_DoNotUseDefaultTypeInternal;
extern TestArenaMap_MapStringStringEntry_DoNotUseDefaultTypeInternal _TestArenaMap_MapStringStringEntry_DoNotUse_default_instance_;
class TestArenaMap_MapUint32Uint32Entry_DoNotUse;
class TestArenaMap_MapUint32Uint32Entry_DoNotUseDefaultTypeInternal;
extern TestArenaMap_MapUint32Uint32Entry_DoNotUseDefaultTypeInternal _TestArenaMap_MapUint32Uint32Entry_DoNotUse_default_instance_;
class TestArenaMap_MapUint64Uint64Entry_DoNotUse;
class TestArenaMap_MapUint64Uint64Entry_DoNotUseDefaultTypeInternal;
extern TestArenaMap_MapUint64Uint64Entry_DoNotUseDefaultTypeInternal _TestArenaMap_MapUint64Uint64Entry_DoNotUse_default_instance_;
class TestMap;
class TestMapDefaultTypeInternal;
extern TestMapDefaultTypeInternal _TestMap_default_instance_;
class TestMapSubmessage;
class TestMapSubmessageDefaultTypeInternal;
extern TestMapSubmessageDefaultTypeInternal _TestMapSubmessage_default_instance_;
class TestMap_MapBoolBoolEntry_DoNotUse;
class TestMap_MapBoolBoolEntry_DoNotUseDefaultTypeInternal;
extern TestMap_MapBoolBoolEntry_DoNotUseDefaultTypeInternal _TestMap_MapBoolBoolEntry_DoNotUse_default_instance_;
class TestMap_MapFixed32Fixed32Entry_DoNotUse;
class TestMap_MapFixed32Fixed32Entry_DoNotUseDefaultTypeInternal;
extern TestMap_MapFixed32Fixed32Entry_DoNotUseDefaultTypeInternal _TestMap_MapFixed32Fixed32Entry_DoNotUse_default_instance_;
class TestMap_MapFixed64Fixed64Entry_DoNotUse;
class TestMap_MapFixed64Fixed64Entry_DoNotUseDefaultTypeInternal;
extern TestMap_MapFixed64Fixed64Entry_DoNotUseDefaultTypeInternal _TestMap_MapFixed64Fixed64Entry_DoNotUse_default_instance_;
class TestMap_MapInt32AllTypesEntry_DoNotUse;
class TestMap_MapInt32AllTypesEntry_DoNotUseDefaultTypeInternal;
extern TestMap_MapInt32AllTypesEntry_DoNotUseDefaultTypeInternal _TestMap_MapInt32AllTypesEntry_DoNotUse_default_instance_;
class TestMap_MapInt32BytesEntry_DoNotUse;
class TestMap_MapInt32BytesEntry_DoNotUseDefaultTypeInternal;
extern TestMap_MapInt32BytesEntry_DoNotUseDefaultTypeInternal _TestMap_MapInt32BytesEntry_DoNotUse_default_instance_;
class TestMap_MapInt32DoubleEntry_DoNotUse;
class TestMap_MapInt32DoubleEntry_DoNotUseDefaultTypeInternal;
extern TestMap_MapInt32DoubleEntry_DoNotUseDefaultTypeInternal _TestMap_MapInt32DoubleEntry_DoNotUse_default_instance_;
class TestMap_MapInt32EnumEntry_DoNotUse;
class TestMap_MapInt32EnumEntry_DoNotUseDefaultTypeInternal;
extern TestMap_MapInt32EnumEntry_DoNotUseDefaultTypeInternal _TestMap_MapInt32EnumEntry_DoNotUse_default_instance_;
class TestMap_MapInt32FloatEntry_DoNotUse;
class TestMap_MapInt32FloatEntry_DoNotUseDefaultTypeInternal;
extern TestMap_MapInt32FloatEntry_DoNotUseDefaultTypeInternal _TestMap_MapInt32FloatEntry_DoNotUse_default_instance_;
class TestMap_MapInt32ForeignMessageEntry_DoNotUse;
class TestMap_MapInt32ForeignMessageEntry_DoNotUseDefaultTypeInternal;
extern TestMap_MapInt32ForeignMessageEntry_DoNotUseDefaultTypeInternal _TestMap_MapInt32ForeignMessageEntry_DoNotUse_default_instance_;
class TestMap_MapInt32Int32Entry_DoNotUse;
class TestMap_MapInt32Int32Entry_DoNotUseDefaultTypeInternal;
extern TestMap_MapInt32Int32Entry_DoNotUseDefaultTypeInternal _TestMap_MapInt32Int32Entry_DoNotUse_default_instance_;
class TestMap_MapInt64Int64Entry_DoNotUse;
class TestMap_MapInt64Int64Entry_DoNotUseDefaultTypeInternal;
extern TestMap_MapInt64Int64Entry_DoNotUseDefaultTypeInternal _TestMap_MapInt64Int64Entry_DoNotUse_default_instance_;
class TestMap_MapSfixed32Sfixed32Entry_DoNotUse;
class TestMap_MapSfixed32Sfixed32Entry_DoNotUseDefaultTypeInternal;
extern TestMap_MapSfixed32Sfixed32Entry_DoNotUseDefaultTypeInternal _TestMap_MapSfixed32Sfixed32Entry_DoNotUse_default_instance_;
class TestMap_MapSfixed64Sfixed64Entry_DoNotUse;
class TestMap_MapSfixed64Sfixed64Entry_DoNotUseDefaultTypeInternal;
extern TestMap_MapSfixed64Sfixed64Entry_DoNotUseDefaultTypeInternal _TestMap_MapSfixed64Sfixed64Entry_DoNotUse_default_instance_;
class TestMap_MapSint32Sint32Entry_DoNotUse;
class TestMap_MapSint32Sint32Entry_DoNotUseDefaultTypeInternal;
extern TestMap_MapSint32Sint32Entry_DoNotUseDefaultTypeInternal _TestMap_MapSint32Sint32Entry_DoNotUse_default_instance_;
class TestMap_MapSint64Sint64Entry_DoNotUse;
class TestMap_MapSint64Sint64Entry_DoNotUseDefaultTypeInternal;
extern TestMap_MapSint64Sint64Entry_DoNotUseDefaultTypeInternal _TestMap_MapSint64Sint64Entry_DoNotUse_default_instance_;
class TestMap_MapStringForeignMessageEntry_DoNotUse;
class TestMap_MapStringForeignMessageEntry_DoNotUseDefaultTypeInternal;
extern TestMap_MapStringForeignMessageEntry_DoNotUseDefaultTypeInternal _TestMap_MapStringForeignMessageEntry_DoNotUse_default_instance_;
class TestMap_MapStringStringEntry_DoNotUse;
class TestMap_MapStringStringEntry_DoNotUseDefaultTypeInternal;
extern TestMap_MapStringStringEntry_DoNotUseDefaultTypeInternal _TestMap_MapStringStringEntry_DoNotUse_default_instance_;
class TestMap_MapUint32Uint32Entry_DoNotUse;
class TestMap_MapUint32Uint32Entry_DoNotUseDefaultTypeInternal;
extern TestMap_MapUint32Uint32Entry_DoNotUseDefaultTypeInternal _TestMap_MapUint32Uint32Entry_DoNotUse_default_instance_;
class TestMap_MapUint64Uint64Entry_DoNotUse;
class TestMap_MapUint64Uint64Entry_DoNotUseDefaultTypeInternal;
extern TestMap_MapUint64Uint64Entry_DoNotUseDefaultTypeInternal _TestMap_MapUint64Uint64Entry_DoNotUse_default_instance_;
class TestMessageMap;
class TestMessageMapDefaultTypeInternal;
extern TestMessageMapDefaultTypeInternal _TestMessageMap_default_instance_;
class TestMessageMap_MapInt32MessageEntry_DoNotUse;
class TestMessageMap_MapInt32MessageEntry_DoNotUseDefaultTypeInternal;
extern TestMessageMap_MapInt32MessageEntry_DoNotUseDefaultTypeInternal _TestMessageMap_MapInt32MessageEntry_DoNotUse_default_instance_;
class TestRecursiveMapMessage;
class TestRecursiveMapMessageDefaultTypeInternal;
extern TestRecursiveMapMessageDefaultTypeInternal _TestRecursiveMapMessage_default_instance_;
class TestRecursiveMapMessage_AEntry_DoNotUse;
class TestRecursiveMapMessage_AEntry_DoNotUseDefaultTypeInternal;
extern TestRecursiveMapMessage_AEntry_DoNotUseDefaultTypeInternal _TestRecursiveMapMessage_AEntry_DoNotUse_default_instance_;
class TestRequiredMessageMap;
class TestRequiredMessageMapDefaultTypeInternal;
extern TestRequiredMessageMapDefaultTypeInternal _TestRequiredMessageMap_default_instance_;
class TestRequiredMessageMap_MapFieldEntry_DoNotUse;
class TestRequiredMessageMap_MapFieldEntry_DoNotUseDefaultTypeInternal;
extern TestRequiredMessageMap_MapFieldEntry_DoNotUseDefaultTypeInternal _TestRequiredMessageMap_MapFieldEntry_DoNotUse_default_instance_;
class TestSameTypeMap;
class TestSameTypeMapDefaultTypeInternal;
extern TestSameTypeMapDefaultTypeInternal _TestSameTypeMap_default_instance_;
class TestSameTypeMap_Map1Entry_DoNotUse;
class TestSameTypeMap_Map1Entry_DoNotUseDefaultTypeInternal;
extern TestSameTypeMap_Map1Entry_DoNotUseDefaultTypeInternal _TestSameTypeMap_Map1Entry_DoNotUse_default_instance_;
class TestSameTypeMap_Map2Entry_DoNotUse;
class TestSameTypeMap_Map2Entry_DoNotUseDefaultTypeInternal;
extern TestSameTypeMap_Map2Entry_DoNotUseDefaultTypeInternal _TestSameTypeMap_Map2Entry_DoNotUse_default_instance_;
}  // namespace protobuf_unittest
namespace google {
namespace protobuf {
template<> ::protobuf_unittest::MessageContainingEnumCalledType* Arena::CreateMaybeMessage<::protobuf_unittest::MessageContainingEnumCalledType>(Arena*);
template<> ::protobuf_unittest::MessageContainingEnumCalledType_TypeEntry_DoNotUse* Arena::CreateMaybeMessage<::protobuf_unittest::MessageContainingEnumCalledType_TypeEntry_DoNotUse>(Arena*);
template<> ::protobuf_unittest::MessageContainingMapCalledEntry* Arena::CreateMaybeMessage<::protobuf_unittest::MessageContainingMapCalledEntry>(Arena*);
template<> ::protobuf_unittest::MessageContainingMapCalledEntry_EntryEntry_DoNotUse* Arena::CreateMaybeMessage<::protobuf_unittest::MessageContainingMapCalledEntry_EntryEntry_DoNotUse>(Arena*);
template<> ::protobuf_unittest::TestArenaMap* Arena::CreateMaybeMessage<::protobuf_unittest::TestArenaMap>(Arena*);
template<> ::protobuf_unittest::TestArenaMap_MapBoolBoolEntry_DoNotUse* Arena::CreateMaybeMessage<::protobuf_unittest::TestArenaMap_MapBoolBoolEntry_DoNotUse>(Arena*);
template<> ::protobuf_unittest::TestArenaMap_MapFixed32Fixed32Entry_DoNotUse* Arena::CreateMaybeMessage<::protobuf_unittest::TestArenaMap_MapFixed32Fixed32Entry_DoNotUse>(Arena*);
template<> ::protobuf_unittest::TestArenaMap_MapFixed64Fixed64Entry_DoNotUse* Arena::CreateMaybeMessage<::protobuf_unittest::TestArenaMap_MapFixed64Fixed64Entry_DoNotUse>(Arena*);
template<> ::protobuf_unittest::TestArenaMap_MapInt32BytesEntry_DoNotUse* Arena::CreateMaybeMessage<::protobuf_unittest::TestArenaMap_MapInt32BytesEntry_DoNotUse>(Arena*);
template<> ::protobuf_unittest::TestArenaMap_MapInt32DoubleEntry_DoNotUse* Arena::CreateMaybeMessage<::protobuf_unittest::TestArenaMap_MapInt32DoubleEntry_DoNotUse>(Arena*);
template<> ::protobuf_unittest::TestArenaMap_MapInt32EnumEntry_DoNotUse* Arena::CreateMaybeMessage<::protobuf_unittest::TestArenaMap_MapInt32EnumEntry_DoNotUse>(Arena*);
template<> ::protobuf_unittest::TestArenaMap_MapInt32FloatEntry_DoNotUse* Arena::CreateMaybeMessage<::protobuf_unittest::TestArenaMap_MapInt32FloatEntry_DoNotUse>(Arena*);
template<> ::protobuf_unittest::TestArenaMap_MapInt32ForeignMessageEntry_DoNotUse* Arena::CreateMaybeMessage<::protobuf_unittest::TestArenaMap_MapInt32ForeignMessageEntry_DoNotUse>(Arena*);
template<> ::protobuf_unittest::TestArenaMap_MapInt32ForeignMessageNoArenaEntry_DoNotUse* Arena::CreateMaybeMessage<::protobuf_unittest::TestArenaMap_MapInt32ForeignMessageNoArenaEntry_DoNotUse>(Arena*);
template<> ::protobuf_unittest::TestArenaMap_MapInt32Int32Entry_DoNotUse* Arena::CreateMaybeMessage<::protobuf_unittest::TestArenaMap_MapInt32Int32Entry_DoNotUse>(Arena*);
template<> ::protobuf_unittest::TestArenaMap_MapInt64Int64Entry_DoNotUse* Arena::CreateMaybeMessage<::protobuf_unittest::TestArenaMap_MapInt64Int64Entry_DoNotUse>(Arena*);
template<> ::protobuf_unittest::TestArenaMap_MapSfixed32Sfixed32Entry_DoNotUse* Arena::CreateMaybeMessage<::protobuf_unittest::TestArenaMap_MapSfixed32Sfixed32Entry_DoNotUse>(Arena*);
template<> ::protobuf_unittest::TestArenaMap_MapSfixed64Sfixed64Entry_DoNotUse* Arena::CreateMaybeMessage<::protobuf_unittest::TestArenaMap_MapSfixed64Sfixed64Entry_DoNotUse>(Arena*);
template<> ::protobuf_unittest::TestArenaMap_MapSint32Sint32Entry_DoNotUse* Arena::CreateMaybeMessage<::protobuf_unittest::TestArenaMap_MapSint32Sint32Entry_DoNotUse>(Arena*);
template<> ::protobuf_unittest::TestArenaMap_MapSint64Sint64Entry_DoNotUse* Arena::CreateMaybeMessage<::protobuf_unittest::TestArenaMap_MapSint64Sint64Entry_DoNotUse>(Arena*);
template<> ::protobuf_unittest::TestArenaMap_MapStringStringEntry_DoNotUse* Arena::CreateMaybeMessage<::protobuf_unittest::TestArenaMap_MapStringStringEntry_DoNotUse>(Arena*);
template<> ::protobuf_unittest::TestArenaMap_MapUint32Uint32Entry_DoNotUse* Arena::CreateMaybeMessage<::protobuf_unittest::TestArenaMap_MapUint32Uint32Entry_DoNotUse>(Arena*);
template<> ::protobuf_unittest::TestArenaMap_MapUint64Uint64Entry_DoNotUse* Arena::CreateMaybeMessage<::protobuf_unittest::TestArenaMap_MapUint64Uint64Entry_DoNotUse>(Arena*);
template<> ::protobuf_unittest::TestMap* Arena::CreateMaybeMessage<::protobuf_unittest::TestMap>(Arena*);
template<> ::protobuf_unittest::TestMapSubmessage* Arena::CreateMaybeMessage<::protobuf_unittest::TestMapSubmessage>(Arena*);
template<> ::protobuf_unittest::TestMap_MapBoolBoolEntry_DoNotUse* Arena::CreateMaybeMessage<::protobuf_unittest::TestMap_MapBoolBoolEntry_DoNotUse>(Arena*);
template<> ::protobuf_unittest::TestMap_MapFixed32Fixed32Entry_DoNotUse* Arena::CreateMaybeMessage<::protobuf_unittest::TestMap_MapFixed32Fixed32Entry_DoNotUse>(Arena*);
template<> ::protobuf_unittest::TestMap_MapFixed64Fixed64Entry_DoNotUse* Arena::CreateMaybeMessage<::protobuf_unittest::TestMap_MapFixed64Fixed64Entry_DoNotUse>(Arena*);
template<> ::protobuf_unittest::TestMap_MapInt32AllTypesEntry_DoNotUse* Arena::CreateMaybeMessage<::protobuf_unittest::TestMap_MapInt32AllTypesEntry_DoNotUse>(Arena*);
template<> ::protobuf_unittest::TestMap_MapInt32BytesEntry_DoNotUse* Arena::CreateMaybeMessage<::protobuf_unittest::TestMap_MapInt32BytesEntry_DoNotUse>(Arena*);
template<> ::protobuf_unittest::TestMap_MapInt32DoubleEntry_DoNotUse* Arena::CreateMaybeMessage<::protobuf_unittest::TestMap_MapInt32DoubleEntry_DoNotUse>(Arena*);
template<> ::protobuf_unittest::TestMap_MapInt32EnumEntry_DoNotUse* Arena::CreateMaybeMessage<::protobuf_unittest::TestMap_MapInt32EnumEntry_DoNotUse>(Arena*);
template<> ::protobuf_unittest::TestMap_MapInt32FloatEntry_DoNotUse* Arena::CreateMaybeMessage<::protobuf_unittest::TestMap_MapInt32FloatEntry_DoNotUse>(Arena*);
template<> ::protobuf_unittest::TestMap_MapInt32ForeignMessageEntry_DoNotUse* Arena::CreateMaybeMessage<::protobuf_unittest::TestMap_MapInt32ForeignMessageEntry_DoNotUse>(Arena*);
template<> ::protobuf_unittest::TestMap_MapInt32Int32Entry_DoNotUse* Arena::CreateMaybeMessage<::protobuf_unittest::TestMap_MapInt32Int32Entry_DoNotUse>(Arena*);
template<> ::protobuf_unittest::TestMap_MapInt64Int64Entry_DoNotUse* Arena::CreateMaybeMessage<::protobuf_unittest::TestMap_MapInt64Int64Entry_DoNotUse>(Arena*);
template<> ::protobuf_unittest::TestMap_MapSfixed32Sfixed32Entry_DoNotUse* Arena::CreateMaybeMessage<::protobuf_unittest::TestMap_MapSfixed32Sfixed32Entry_DoNotUse>(Arena*);
template<> ::protobuf_unittest::TestMap_MapSfixed64Sfixed64Entry_DoNotUse* Arena::CreateMaybeMessage<::protobuf_unittest::TestMap_MapSfixed64Sfixed64Entry_DoNotUse>(Arena*);
template<> ::protobuf_unittest::TestMap_MapSint32Sint32Entry_DoNotUse* Arena::CreateMaybeMessage<::protobuf_unittest::TestMap_MapSint32Sint32Entry_DoNotUse>(Arena*);
template<> ::protobuf_unittest::TestMap_MapSint64Sint64Entry_DoNotUse* Arena::CreateMaybeMessage<::protobuf_unittest::TestMap_MapSint64Sint64Entry_DoNotUse>(Arena*);
template<> ::protobuf_unittest::TestMap_MapStringForeignMessageEntry_DoNotUse* Arena::CreateMaybeMessage<::protobuf_unittest::TestMap_MapStringForeignMessageEntry_DoNotUse>(Arena*);
template<> ::protobuf_unittest::TestMap_MapStringStringEntry_DoNotUse* Arena::CreateMaybeMessage<::protobuf_unittest::TestMap_MapStringStringEntry_DoNotUse>(Arena*);
template<> ::protobuf_unittest::TestMap_MapUint32Uint32Entry_DoNotUse* Arena::CreateMaybeMessage<::protobuf_unittest::TestMap_MapUint32Uint32Entry_DoNotUse>(Arena*);
template<> ::protobuf_unittest::TestMap_MapUint64Uint64Entry_DoNotUse* Arena::CreateMaybeMessage<::protobuf_unittest::TestMap_MapUint64Uint64Entry_DoNotUse>(Arena*);
template<> ::protobuf_unittest::TestMessageMap* Arena::CreateMaybeMessage<::protobuf_unittest::TestMessageMap>(Arena*);
template<> ::protobuf_unittest::TestMessageMap_MapInt32MessageEntry_DoNotUse* Arena::CreateMaybeMessage<::protobuf_unittest::TestMessageMap_MapInt32MessageEntry_DoNotUse>(Arena*);
template<> ::protobuf_unittest::TestRecursiveMapMessage* Arena::CreateMaybeMessage<::protobuf_unittest::TestRecursiveMapMessage>(Arena*);
template<> ::protobuf_unittest::TestRecursiveMapMessage_AEntry_DoNotUse* Arena::CreateMaybeMessage<::protobuf_unittest::TestRecursiveMapMessage_AEntry_DoNotUse>(Arena*);
template<> ::protobuf_unittest::TestRequiredMessageMap* Arena::CreateMaybeMessage<::protobuf_unittest::TestRequiredMessageMap>(Arena*);
template<> ::protobuf_unittest::TestRequiredMessageMap_MapFieldEntry_DoNotUse* Arena::CreateMaybeMessage<::protobuf_unittest::TestRequiredMessageMap_MapFieldEntry_DoNotUse>(Arena*);
template<> ::protobuf_unittest::TestSameTypeMap* Arena::CreateMaybeMessage<::protobuf_unittest::TestSameTypeMap>(Arena*);
template<> ::protobuf_unittest::TestSameTypeMap_Map1Entry_DoNotUse* Arena::CreateMaybeMessage<::protobuf_unittest::TestSameTypeMap_Map1Entry_DoNotUse>(Arena*);
template<> ::protobuf_unittest::TestSameTypeMap_Map2Entry_DoNotUse* Arena::CreateMaybeMessage<::protobuf_unittest::TestSameTypeMap_Map2Entry_DoNotUse>(Arena*);
}  // namespace protobuf
}  // namespace google
namespace protobuf_unittest {

enum MessageContainingEnumCalledType_Type {
  MessageContainingEnumCalledType_Type_TYPE_FOO = 0,
  MessageContainingEnumCalledType_Type_MessageContainingEnumCalledType_Type_INT_MIN_SENTINEL_DO_NOT_USE_ = ::google::protobuf::kint32min,
  MessageContainingEnumCalledType_Type_MessageContainingEnumCalledType_Type_INT_MAX_SENTINEL_DO_NOT_USE_ = ::google::protobuf::kint32max
};
bool MessageContainingEnumCalledType_Type_IsValid(int value);
const MessageContainingEnumCalledType_Type MessageContainingEnumCalledType_Type_Type_MIN = MessageContainingEnumCalledType_Type_TYPE_FOO;
const MessageContainingEnumCalledType_Type MessageContainingEnumCalledType_Type_Type_MAX = MessageContainingEnumCalledType_Type_TYPE_FOO;
const int MessageContainingEnumCalledType_Type_Type_ARRAYSIZE = MessageContainingEnumCalledType_Type_Type_MAX + 1;

const ::google::protobuf::EnumDescriptor* MessageContainingEnumCalledType_Type_descriptor();
inline const ::std::string& MessageContainingEnumCalledType_Type_Name(MessageContainingEnumCalledType_Type value) {
  return ::google::protobuf::internal::NameOfEnum(
    MessageContainingEnumCalledType_Type_descriptor(), value);
}
inline bool MessageContainingEnumCalledType_Type_Parse(
    const ::std::string& name, MessageContainingEnumCalledType_Type* value) {
  return ::google::protobuf::internal::ParseNamedEnum<MessageContainingEnumCalledType_Type>(
    MessageContainingEnumCalledType_Type_descriptor(), name, value);
}
enum MapEnum {
  MAP_ENUM_FOO = 0,
  MAP_ENUM_BAR = 1,
  MAP_ENUM_BAZ = 2,
  MapEnum_INT_MIN_SENTINEL_DO_NOT_USE_ = ::google::protobuf::kint32min,
  MapEnum_INT_MAX_SENTINEL_DO_NOT_USE_ = ::google::protobuf::kint32max
};
bool MapEnum_IsValid(int value);
const MapEnum MapEnum_MIN = MAP_ENUM_FOO;
const MapEnum MapEnum_MAX = MAP_ENUM_BAZ;
const int MapEnum_ARRAYSIZE = MapEnum_MAX + 1;

const ::google::protobuf::EnumDescriptor* MapEnum_descriptor();
inline const ::std::string& MapEnum_Name(MapEnum value) {
  return ::google::protobuf::internal::NameOfEnum(
    MapEnum_descriptor(), value);
}
inline bool MapEnum_Parse(
    const ::std::string& name, MapEnum* value) {
  return ::google::protobuf::internal::ParseNamedEnum<MapEnum>(
    MapEnum_descriptor(), name, value);
}
// ===================================================================

class TestMap_MapInt32Int32Entry_DoNotUse : public ::google::protobuf::internal::MapEntry<TestMap_MapInt32Int32Entry_DoNotUse, 
    ::google::protobuf::int32, ::google::protobuf::int32,
    ::google::protobuf::internal::WireFormatLite::TYPE_INT32,
    ::google::protobuf::internal::WireFormatLite::TYPE_INT32,
    0 > {
public:
  typedef ::google::protobuf::internal::MapEntry<TestMap_MapInt32Int32Entry_DoNotUse, 
    ::google::protobuf::int32, ::google::protobuf::int32,
    ::google::protobuf::internal::WireFormatLite::TYPE_INT32,
    ::google::protobuf::internal::WireFormatLite::TYPE_INT32,
    0 > SuperType;
  TestMap_MapInt32Int32Entry_DoNotUse();
  TestMap_MapInt32Int32Entry_DoNotUse(::google::protobuf::Arena* arena);
  void MergeFrom(const TestMap_MapInt32Int32Entry_DoNotUse& other);
  static const TestMap_MapInt32Int32Entry_DoNotUse* internal_default_instance() { return reinterpret_cast<const TestMap_MapInt32Int32Entry_DoNotUse*>(&_TestMap_MapInt32Int32Entry_DoNotUse_default_instance_); }
  void MergeFrom(const ::google::protobuf::Message& other) final;
  ::google::protobuf::Metadata GetMetadata() const;
};

// -------------------------------------------------------------------

class TestMap_MapInt64Int64Entry_DoNotUse : public ::google::protobuf::internal::MapEntry<TestMap_MapInt64Int64Entry_DoNotUse, 
    ::google::protobuf::int64, ::google::protobuf::int64,
    ::google::protobuf::internal::WireFormatLite::TYPE_INT64,
    ::google::protobuf::internal::WireFormatLite::TYPE_INT64,
    0 > {
public:
  typedef ::google::protobuf::internal::MapEntry<TestMap_MapInt64Int64Entry_DoNotUse, 
    ::google::protobuf::int64, ::google::protobuf::int64,
    ::google::protobuf::internal::WireFormatLite::TYPE_INT64,
    ::google::protobuf::internal::WireFormatLite::TYPE_INT64,
    0 > SuperType;
  TestMap_MapInt64Int64Entry_DoNotUse();
  TestMap_MapInt64Int64Entry_DoNotUse(::google::protobuf::Arena* arena);
  void MergeFrom(const TestMap_MapInt64Int64Entry_DoNotUse& other);
  static const TestMap_MapInt64Int64Entry_DoNotUse* internal_default_instance() { return reinterpret_cast<const TestMap_MapInt64Int64Entry_DoNotUse*>(&_TestMap_MapInt64Int64Entry_DoNotUse_default_instance_); }
  void MergeFrom(const ::google::protobuf::Message& other) final;
  ::google::protobuf::Metadata GetMetadata() const;
};

// -------------------------------------------------------------------

class TestMap_MapUint32Uint32Entry_DoNotUse : public ::google::protobuf::internal::MapEntry<TestMap_MapUint32Uint32Entry_DoNotUse, 
    ::google::protobuf::uint32, ::google::protobuf::uint32,
    ::google::protobuf::internal::WireFormatLite::TYPE_UINT32,
    ::google::protobuf::internal::WireFormatLite::TYPE_UINT32,
    0 > {
public:
  typedef ::google::protobuf::internal::MapEntry<TestMap_MapUint32Uint32Entry_DoNotUse, 
    ::google::protobuf::uint32, ::google::protobuf::uint32,
    ::google::protobuf::internal::WireFormatLite::TYPE_UINT32,
    ::google::protobuf::internal::WireFormatLite::TYPE_UINT32,
    0 > SuperType;
  TestMap_MapUint32Uint32Entry_DoNotUse();
  TestMap_MapUint32Uint32Entry_DoNotUse(::google::protobuf::Arena* arena);
  void MergeFrom(const TestMap_MapUint32Uint32Entry_DoNotUse& other);
  static const TestMap_MapUint32Uint32Entry_DoNotUse* internal_default_instance() { return reinterpret_cast<const TestMap_MapUint32Uint32Entry_DoNotUse*>(&_TestMap_MapUint32Uint32Entry_DoNotUse_default_instance_); }
  void MergeFrom(const ::google::protobuf::Message& other) final;
  ::google::protobuf::Metadata GetMetadata() const;
};

// -------------------------------------------------------------------

class TestMap_MapUint64Uint64Entry_DoNotUse : public ::google::protobuf::internal::MapEntry<TestMap_MapUint64Uint64Entry_DoNotUse, 
    ::google::protobuf::uint64, ::google::protobuf::uint64,
    ::google::protobuf::internal::WireFormatLite::TYPE_UINT64,
    ::google::protobuf::internal::WireFormatLite::TYPE_UINT64,
    0 > {
public:
  typedef ::google::protobuf::internal::MapEntry<TestMap_MapUint64Uint64Entry_DoNotUse, 
    ::google::protobuf::uint64, ::google::protobuf::uint64,
    ::google::protobuf::internal::WireFormatLite::TYPE_UINT64,
    ::google::protobuf::internal::WireFormatLite::TYPE_UINT64,
    0 > SuperType;
  TestMap_MapUint64Uint64Entry_DoNotUse();
  TestMap_MapUint64Uint64Entry_DoNotUse(::google::protobuf::Arena* arena);
  void MergeFrom(const TestMap_MapUint64Uint64Entry_DoNotUse& other);
  static const TestMap_MapUint64Uint64Entry_DoNotUse* internal_default_instance() { return reinterpret_cast<const TestMap_MapUint64Uint64Entry_DoNotUse*>(&_TestMap_MapUint64Uint64Entry_DoNotUse_default_instance_); }
  void MergeFrom(const ::google::protobuf::Message& other) final;
  ::google::protobuf::Metadata GetMetadata() const;
};

// -------------------------------------------------------------------

class TestMap_MapSint32Sint32Entry_DoNotUse : public ::google::protobuf::internal::MapEntry<TestMap_MapSint32Sint32Entry_DoNotUse, 
    ::google::protobuf::int32, ::google::protobuf::int32,
    ::google::protobuf::internal::WireFormatLite::TYPE_SINT32,
    ::google::protobuf::internal::WireFormatLite::TYPE_SINT32,
    0 > {
public:
  typedef ::google::protobuf::internal::MapEntry<TestMap_MapSint32Sint32Entry_DoNotUse, 
    ::google::protobuf::int32, ::google::protobuf::int32,
    ::google::protobuf::internal::WireFormatLite::TYPE_SINT32,
    ::google::protobuf::internal::WireFormatLite::TYPE_SINT32,
    0 > SuperType;
  TestMap_MapSint32Sint32Entry_DoNotUse();
  TestMap_MapSint32Sint32Entry_DoNotUse(::google::protobuf::Arena* arena);
  void MergeFrom(const TestMap_MapSint32Sint32Entry_DoNotUse& other);
  static const TestMap_MapSint32Sint32Entry_DoNotUse* internal_default_instance() { return reinterpret_cast<const TestMap_MapSint32Sint32Entry_DoNotUse*>(&_TestMap_MapSint32Sint32Entry_DoNotUse_default_instance_); }
  void MergeFrom(const ::google::protobuf::Message& other) final;
  ::google::protobuf::Metadata GetMetadata() const;
};

// -------------------------------------------------------------------

class TestMap_MapSint64Sint64Entry_DoNotUse : public ::google::protobuf::internal::MapEntry<TestMap_MapSint64Sint64Entry_DoNotUse, 
    ::google::protobuf::int64, ::google::protobuf::int64,
    ::google::protobuf::internal::WireFormatLite::TYPE_SINT64,
    ::google::protobuf::internal::WireFormatLite::TYPE_SINT64,
    0 > {
public:
  typedef ::google::protobuf::internal::MapEntry<TestMap_MapSint64Sint64Entry_DoNotUse, 
    ::google::protobuf::int64, ::google::protobuf::int64,
    ::google::protobuf::internal::WireFormatLite::TYPE_SINT64,
    ::google::protobuf::internal::WireFormatLite::TYPE_SINT64,
    0 > SuperType;
  TestMap_MapSint64Sint64Entry_DoNotUse();
  TestMap_MapSint64Sint64Entry_DoNotUse(::google::protobuf::Arena* arena);
  void MergeFrom(const TestMap_MapSint64Sint64Entry_DoNotUse& other);
  static const TestMap_MapSint64Sint64Entry_DoNotUse* internal_default_instance() { return reinterpret_cast<const TestMap_MapSint64Sint64Entry_DoNotUse*>(&_TestMap_MapSint64Sint64Entry_DoNotUse_default_instance_); }
  void MergeFrom(const ::google::protobuf::Message& other) final;
  ::google::protobuf::Metadata GetMetadata() const;
};

// -------------------------------------------------------------------

class TestMap_MapFixed32Fixed32Entry_DoNotUse : public ::google::protobuf::internal::MapEntry<TestMap_MapFixed32Fixed32Entry_DoNotUse, 
    ::google::protobuf::uint32, ::google::protobuf::uint32,
    ::google::protobuf::internal::WireFormatLite::TYPE_FIXED32,
    ::google::protobuf::internal::WireFormatLite::TYPE_FIXED32,
    0 > {
public:
  typedef ::google::protobuf::internal::MapEntry<TestMap_MapFixed32Fixed32Entry_DoNotUse, 
    ::google::protobuf::uint32, ::google::protobuf::uint32,
    ::google::protobuf::internal::WireFormatLite::TYPE_FIXED32,
    ::google::protobuf::internal::WireFormatLite::TYPE_FIXED32,
    0 > SuperType;
  TestMap_MapFixed32Fixed32Entry_DoNotUse();
  TestMap_MapFixed32Fixed32Entry_DoNotUse(::google::protobuf::Arena* arena);
  void MergeFrom(const TestMap_MapFixed32Fixed32Entry_DoNotUse& other);
  static const TestMap_MapFixed32Fixed32Entry_DoNotUse* internal_default_instance() { return reinterpret_cast<const TestMap_MapFixed32Fixed32Entry_DoNotUse*>(&_TestMap_MapFixed32Fixed32Entry_DoNotUse_default_instance_); }
  void MergeFrom(const ::google::protobuf::Message& other) final;
  ::google::protobuf::Metadata GetMetadata() const;
};

// -------------------------------------------------------------------

class TestMap_MapFixed64Fixed64Entry_DoNotUse : public ::google::protobuf::internal::MapEntry<TestMap_MapFixed64Fixed64Entry_DoNotUse, 
    ::google::protobuf::uint64, ::google::protobuf::uint64,
    ::google::protobuf::internal::WireFormatLite::TYPE_FIXED64,
    ::google::protobuf::internal::WireFormatLite::TYPE_FIXED64,
    0 > {
public:
  typedef ::google::protobuf::internal::MapEntry<TestMap_MapFixed64Fixed64Entry_DoNotUse, 
    ::google::protobuf::uint64, ::google::protobuf::uint64,
    ::google::protobuf::internal::WireFormatLite::TYPE_FIXED64,
    ::google::protobuf::internal::WireFormatLite::TYPE_FIXED64,
    0 > SuperType;
  TestMap_MapFixed64Fixed64Entry_DoNotUse();
  TestMap_MapFixed64Fixed64Entry_DoNotUse(::google::protobuf::Arena* arena);
  void MergeFrom(const TestMap_MapFixed64Fixed64Entry_DoNotUse& other);
  static const TestMap_MapFixed64Fixed64Entry_DoNotUse* internal_default_instance() { return reinterpret_cast<const TestMap_MapFixed64Fixed64Entry_DoNotUse*>(&_TestMap_MapFixed64Fixed64Entry_DoNotUse_default_instance_); }
  void MergeFrom(const ::google::protobuf::Message& other) final;
  ::google::protobuf::Metadata GetMetadata() const;
};

// -------------------------------------------------------------------

class TestMap_MapSfixed32Sfixed32Entry_DoNotUse : public ::google::protobuf::internal::MapEntry<TestMap_MapSfixed32Sfixed32Entry_DoNotUse, 
    ::google::protobuf::int32, ::google::protobuf::int32,
    ::google::protobuf::internal::WireFormatLite::TYPE_SFIXED32,
    ::google::protobuf::internal::WireFormatLite::TYPE_SFIXED32,
    0 > {
public:
  typedef ::google::protobuf::internal::MapEntry<TestMap_MapSfixed32Sfixed32Entry_DoNotUse, 
    ::google::protobuf::int32, ::google::protobuf::int32,
    ::google::protobuf::internal::WireFormatLite::TYPE_SFIXED32,
    ::google::protobuf::internal::WireFormatLite::TYPE_SFIXED32,
    0 > SuperType;
  TestMap_MapSfixed32Sfixed32Entry_DoNotUse();
  TestMap_MapSfixed32Sfixed32Entry_DoNotUse(::google::protobuf::Arena* arena);
  void MergeFrom(const TestMap_MapSfixed32Sfixed32Entry_DoNotUse& other);
  static const TestMap_MapSfixed32Sfixed32Entry_DoNotUse* internal_default_instance() { return reinterpret_cast<const TestMap_MapSfixed32Sfixed32Entry_DoNotUse*>(&_TestMap_MapSfixed32Sfixed32Entry_DoNotUse_default_instance_); }
  void MergeFrom(const ::google::protobuf::Message& other) final;
  ::google::protobuf::Metadata GetMetadata() const;
};

// -------------------------------------------------------------------

class TestMap_MapSfixed64Sfixed64Entry_DoNotUse : public ::google::protobuf::internal::MapEntry<TestMap_MapSfixed64Sfixed64Entry_DoNotUse, 
    ::google::protobuf::int64, ::google::protobuf::int64,
    ::google::protobuf::internal::WireFormatLite::TYPE_SFIXED64,
    ::google::protobuf::internal::WireFormatLite::TYPE_SFIXED64,
    0 > {
public:
  typedef ::google::protobuf::internal::MapEntry<TestMap_MapSfixed64Sfixed64Entry_DoNotUse, 
    ::google::protobuf::int64, ::google::protobuf::int64,
    ::google::protobuf::internal::WireFormatLite::TYPE_SFIXED64,
    ::google::protobuf::internal::WireFormatLite::TYPE_SFIXED64,
    0 > SuperType;
  TestMap_MapSfixed64Sfixed64Entry_DoNotUse();
  TestMap_MapSfixed64Sfixed64Entry_DoNotUse(::google::protobuf::Arena* arena);
  void MergeFrom(const TestMap_MapSfixed64Sfixed64Entry_DoNotUse& other);
  static const TestMap_MapSfixed64Sfixed64Entry_DoNotUse* internal_default_instance() { return reinterpret_cast<const TestMap_MapSfixed64Sfixed64Entry_DoNotUse*>(&_TestMap_MapSfixed64Sfixed64Entry_DoNotUse_default_instance_); }
  void MergeFrom(const ::google::protobuf::Message& other) final;
  ::google::protobuf::Metadata GetMetadata() const;
};

// -------------------------------------------------------------------

class TestMap_MapInt32FloatEntry_DoNotUse : public ::google::protobuf::internal::MapEntry<TestMap_MapInt32FloatEntry_DoNotUse, 
    ::google::protobuf::int32, float,
    ::google::protobuf::internal::WireFormatLite::TYPE_INT32,
    ::google::protobuf::internal::WireFormatLite::TYPE_FLOAT,
    0 > {
public:
  typedef ::google::protobuf::internal::MapEntry<TestMap_MapInt32FloatEntry_DoNotUse, 
    ::google::protobuf::int32, float,
    ::google::protobuf::internal::WireFormatLite::TYPE_INT32,
    ::google::protobuf::internal::WireFormatLite::TYPE_FLOAT,
    0 > SuperType;
  TestMap_MapInt32FloatEntry_DoNotUse();
  TestMap_MapInt32FloatEntry_DoNotUse(::google::protobuf::Arena* arena);
  void MergeFrom(const TestMap_MapInt32FloatEntry_DoNotUse& other);
  static const TestMap_MapInt32FloatEntry_DoNotUse* internal_default_instance() { return reinterpret_cast<const TestMap_MapInt32FloatEntry_DoNotUse*>(&_TestMap_MapInt32FloatEntry_DoNotUse_default_instance_); }
  void MergeFrom(const ::google::protobuf::Message& other) final;
  ::google::protobuf::Metadata GetMetadata() const;
};

// -------------------------------------------------------------------

class TestMap_MapInt32DoubleEntry_DoNotUse : public ::google::protobuf::internal::MapEntry<TestMap_MapInt32DoubleEntry_DoNotUse, 
    ::google::protobuf::int32, double,
    ::google::protobuf::internal::WireFormatLite::TYPE_INT32,
    ::google::protobuf::internal::WireFormatLite::TYPE_DOUBLE,
    0 > {
public:
  typedef ::google::protobuf::internal::MapEntry<TestMap_MapInt32DoubleEntry_DoNotUse, 
    ::google::protobuf::int32, double,
    ::google::protobuf::internal::WireFormatLite::TYPE_INT32,
    ::google::protobuf::internal::WireFormatLite::TYPE_DOUBLE,
    0 > SuperType;
  TestMap_MapInt32DoubleEntry_DoNotUse();
  TestMap_MapInt32DoubleEntry_DoNotUse(::google::protobuf::Arena* arena);
  void MergeFrom(const TestMap_MapInt32DoubleEntry_DoNotUse& other);
  static const TestMap_MapInt32DoubleEntry_DoNotUse* internal_default_instance() { return reinterpret_cast<const TestMap_MapInt32DoubleEntry_DoNotUse*>(&_TestMap_MapInt32DoubleEntry_DoNotUse_default_instance_); }
  void MergeFrom(const ::google::protobuf::Message& other) final;
  ::google::protobuf::Metadata GetMetadata() const;
};

// -------------------------------------------------------------------

class TestMap_MapBoolBoolEntry_DoNotUse : public ::google::protobuf::internal::MapEntry<TestMap_MapBoolBoolEntry_DoNotUse, 
    bool, bool,
    ::google::protobuf::internal::WireFormatLite::TYPE_BOOL,
    ::google::protobuf::internal::WireFormatLite::TYPE_BOOL,
    0 > {
public:
  typedef ::google::protobuf::internal::MapEntry<TestMap_MapBoolBoolEntry_DoNotUse, 
    bool, bool,
    ::google::protobuf::internal::WireFormatLite::TYPE_BOOL,
    ::google::protobuf::internal::WireFormatLite::TYPE_BOOL,
    0 > SuperType;
  TestMap_MapBoolBoolEntry_DoNotUse();
  TestMap_MapBoolBoolEntry_DoNotUse(::google::protobuf::Arena* arena);
  void MergeFrom(const TestMap_MapBoolBoolEntry_DoNotUse& other);
  static const TestMap_MapBoolBoolEntry_DoNotUse* internal_default_instance() { return reinterpret_cast<const TestMap_MapBoolBoolEntry_DoNotUse*>(&_TestMap_MapBoolBoolEntry_DoNotUse_default_instance_); }
  void MergeFrom(const ::google::protobuf::Message& other) final;
  ::google::protobuf::Metadata GetMetadata() const;
};

// -------------------------------------------------------------------

class TestMap_MapStringStringEntry_DoNotUse : public ::google::protobuf::internal::MapEntry<TestMap_MapStringStringEntry_DoNotUse, 
    ::std::string, ::std::string,
    ::google::protobuf::internal::WireFormatLite::TYPE_STRING,
    ::google::protobuf::internal::WireFormatLite::TYPE_STRING,
    0 > {
public:
  typedef ::google::protobuf::internal::MapEntry<TestMap_MapStringStringEntry_DoNotUse, 
    ::std::string, ::std::string,
    ::google::protobuf::internal::WireFormatLite::TYPE_STRING,
    ::google::protobuf::internal::WireFormatLite::TYPE_STRING,
    0 > SuperType;
  TestMap_MapStringStringEntry_DoNotUse();
  TestMap_MapStringStringEntry_DoNotUse(::google::protobuf::Arena* arena);
  void MergeFrom(const TestMap_MapStringStringEntry_DoNotUse& other);
  static const TestMap_MapStringStringEntry_DoNotUse* internal_default_instance() { return reinterpret_cast<const TestMap_MapStringStringEntry_DoNotUse*>(&_TestMap_MapStringStringEntry_DoNotUse_default_instance_); }
  void MergeFrom(const ::google::protobuf::Message& other) final;
  ::google::protobuf::Metadata GetMetadata() const;
};

// -------------------------------------------------------------------

class TestMap_MapInt32BytesEntry_DoNotUse : public ::google::protobuf::internal::MapEntry<TestMap_MapInt32BytesEntry_DoNotUse, 
    ::google::protobuf::int32, ::std::string,
    ::google::protobuf::internal::WireFormatLite::TYPE_INT32,
    ::google::protobuf::internal::WireFormatLite::TYPE_BYTES,
    0 > {
public:
  typedef ::google::protobuf::internal::MapEntry<TestMap_MapInt32BytesEntry_DoNotUse, 
    ::google::protobuf::int32, ::std::string,
    ::google::protobuf::internal::WireFormatLite::TYPE_INT32,
    ::google::protobuf::internal::WireFormatLite::TYPE_BYTES,
    0 > SuperType;
  TestMap_MapInt32BytesEntry_DoNotUse();
  TestMap_MapInt32BytesEntry_DoNotUse(::google::protobuf::Arena* arena);
  void MergeFrom(const TestMap_MapInt32BytesEntry_DoNotUse& other);
  static const TestMap_MapInt32BytesEntry_DoNotUse* internal_default_instance() { return reinterpret_cast<const TestMap_MapInt32BytesEntry_DoNotUse*>(&_TestMap_MapInt32BytesEntry_DoNotUse_default_instance_); }
  void MergeFrom(const ::google::protobuf::Message& other) final;
  ::google::protobuf::Metadata GetMetadata() const;
};

// -------------------------------------------------------------------

class TestMap_MapInt32EnumEntry_DoNotUse : public ::google::protobuf::internal::MapEntry<TestMap_MapInt32EnumEntry_DoNotUse, 
    ::google::protobuf::int32, ::protobuf_unittest::MapEnum,
    ::google::protobuf::internal::WireFormatLite::TYPE_INT32,
    ::google::protobuf::internal::WireFormatLite::TYPE_ENUM,
    0 > {
public:
  typedef ::google::protobuf::internal::MapEntry<TestMap_MapInt32EnumEntry_DoNotUse, 
    ::google::protobuf::int32, ::protobuf_unittest::MapEnum,
    ::google::protobuf::internal::WireFormatLite::TYPE_INT32,
    ::google::protobuf::internal::WireFormatLite::TYPE_ENUM,
    0 > SuperType;
  TestMap_MapInt32EnumEntry_DoNotUse();
  TestMap_MapInt32EnumEntry_DoNotUse(::google::protobuf::Arena* arena);
  void MergeFrom(const TestMap_MapInt32EnumEntry_DoNotUse& other);
  static const TestMap_MapInt32EnumEntry_DoNotUse* internal_default_instance() { return reinterpret_cast<const TestMap_MapInt32EnumEntry_DoNotUse*>(&_TestMap_MapInt32EnumEntry_DoNotUse_default_instance_); }
  void MergeFrom(const ::google::protobuf::Message& other) final;
  ::google::protobuf::Metadata GetMetadata() const;
};

// -------------------------------------------------------------------

class TestMap_MapInt32ForeignMessageEntry_DoNotUse : public ::google::protobuf::internal::MapEntry<TestMap_MapInt32ForeignMessageEntry_DoNotUse, 
    ::google::protobuf::int32, ::protobuf_unittest::ForeignMessage,
    ::google::protobuf::internal::WireFormatLite::TYPE_INT32,
    ::google::protobuf::internal::WireFormatLite::TYPE_MESSAGE,
    0 > {
public:
  typedef ::google::protobuf::internal::MapEntry<TestMap_MapInt32ForeignMessageEntry_DoNotUse, 
    ::google::protobuf::int32, ::protobuf_unittest::ForeignMessage,
    ::google::protobuf::internal::WireFormatLite::TYPE_INT32,
    ::google::protobuf::internal::WireFormatLite::TYPE_MESSAGE,
    0 > SuperType;
  TestMap_MapInt32ForeignMessageEntry_DoNotUse();
  TestMap_MapInt32ForeignMessageEntry_DoNotUse(::google::protobuf::Arena* arena);
  void MergeFrom(const TestMap_MapInt32ForeignMessageEntry_DoNotUse& other);
  static const TestMap_MapInt32ForeignMessageEntry_DoNotUse* internal_default_instance() { return reinterpret_cast<const TestMap_MapInt32ForeignMessageEntry_DoNotUse*>(&_TestMap_MapInt32ForeignMessageEntry_DoNotUse_default_instance_); }
  void MergeFrom(const ::google::protobuf::Message& other) final;
  ::google::protobuf::Metadata GetMetadata() const;
};

// -------------------------------------------------------------------

class TestMap_MapStringForeignMessageEntry_DoNotUse : public ::google::protobuf::internal::MapEntry<TestMap_MapStringForeignMessageEntry_DoNotUse, 
    ::std::string, ::protobuf_unittest::ForeignMessage,
    ::google::protobuf::internal::WireFormatLite::TYPE_STRING,
    ::google::protobuf::internal::WireFormatLite::TYPE_MESSAGE,
    0 > {
public:
  typedef ::google::protobuf::internal::MapEntry<TestMap_MapStringForeignMessageEntry_DoNotUse, 
    ::std::string, ::protobuf_unittest::ForeignMessage,
    ::google::protobuf::internal::WireFormatLite::TYPE_STRING,
    ::google::protobuf::internal::WireFormatLite::TYPE_MESSAGE,
    0 > SuperType;
  TestMap_MapStringForeignMessageEntry_DoNotUse();
  TestMap_MapStringForeignMessageEntry_DoNotUse(::google::protobuf::Arena* arena);
  void MergeFrom(const TestMap_MapStringForeignMessageEntry_DoNotUse& other);
  static const TestMap_MapStringForeignMessageEntry_DoNotUse* internal_default_instance() { return reinterpret_cast<const TestMap_MapStringForeignMessageEntry_DoNotUse*>(&_TestMap_MapStringForeignMessageEntry_DoNotUse_default_instance_); }
  void MergeFrom(const ::google::protobuf::Message& other) final;
  ::google::protobuf::Metadata GetMetadata() const;
};

// -------------------------------------------------------------------

class TestMap_MapInt32AllTypesEntry_DoNotUse : public ::google::protobuf::internal::MapEntry<TestMap_MapInt32AllTypesEntry_DoNotUse, 
    ::google::protobuf::int32, ::protobuf_unittest::TestAllTypes,
    ::google::protobuf::internal::WireFormatLite::TYPE_INT32,
    ::google::protobuf::internal::WireFormatLite::TYPE_MESSAGE,
    0 > {
public:
  typedef ::google::protobuf::internal::MapEntry<TestMap_MapInt32AllTypesEntry_DoNotUse, 
    ::google::protobuf::int32, ::protobuf_unittest::TestAllTypes,
    ::google::protobuf::internal::WireFormatLite::TYPE_INT32,
    ::google::protobuf::internal::WireFormatLite::TYPE_MESSAGE,
    0 > SuperType;
  TestMap_MapInt32AllTypesEntry_DoNotUse();
  TestMap_MapInt32AllTypesEntry_DoNotUse(::google::protobuf::Arena* arena);
  void MergeFrom(const TestMap_MapInt32AllTypesEntry_DoNotUse& other);
  static const TestMap_MapInt32AllTypesEntry_DoNotUse* internal_default_instance() { return reinterpret_cast<const TestMap_MapInt32AllTypesEntry_DoNotUse*>(&_TestMap_MapInt32AllTypesEntry_DoNotUse_default_instance_); }
  void MergeFrom(const ::google::protobuf::Message& other) final;
  ::google::protobuf::Metadata GetMetadata() const;
};

// -------------------------------------------------------------------

class TestMap : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:protobuf_unittest.TestMap) */ {
 public:
  TestMap();
  virtual ~TestMap();

  TestMap(const TestMap& from);

  inline TestMap& operator=(const TestMap& from) {
    CopyFrom(from);
    return *this;
  }
  #if LANG_CXX11
  TestMap(TestMap&& from) noexcept
    : TestMap() {
    *this = ::std::move(from);
  }

  inline TestMap& operator=(TestMap&& from) noexcept {
    if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) {
      if (this != &from) InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }
  #endif
  inline ::google::protobuf::Arena* GetArena() const final {
    return GetArenaNoVirtual();
  }
  inline void* GetMaybeArenaPointer() const final {
    return MaybeArenaPtr();
  }
  static const ::google::protobuf::Descriptor* descriptor();
  static const TestMap& default_instance();

  static void InitAsDefaultInstance();  // FOR INTERNAL USE ONLY
  static inline const TestMap* internal_default_instance() {
    return reinterpret_cast<const TestMap*>(
               &_TestMap_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    19;

  void UnsafeArenaSwap(TestMap* other);
  void Swap(TestMap* other);
  friend void swap(TestMap& a, TestMap& b) {
    a.Swap(&b);
  }

  // implements Message ----------------------------------------------

  inline TestMap* New() const final {
    return CreateMaybeMessage<TestMap>(NULL);
  }

  TestMap* New(::google::protobuf::Arena* arena) const final {
    return CreateMaybeMessage<TestMap>(arena);
  }
  void CopyFrom(const ::google::protobuf::Message& from) final;
  void MergeFrom(const ::google::protobuf::Message& from) final;
  void CopyFrom(const TestMap& from);
  void MergeFrom(const TestMap& from);
  void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  bool MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input) final;
  void SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const final;
  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* target) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(TestMap* other);
  protected:
  explicit TestMap(::google::protobuf::Arena* arena);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::google::protobuf::Arena* arena);
  private:
  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
    return _internal_metadata_.arena();
  }
  inline void* MaybeArenaPtr() const {
    return _internal_metadata_.raw_arena_ptr();
  }
  public:

  ::google::protobuf::Metadata GetMetadata() const final;

  // nested types ----------------------------------------------------


  // accessors -------------------------------------------------------

  // map<int32, int32> map_int32_int32 = 1;
  int map_int32_int32_size() const;
  void clear_map_int32_int32();
  static const int kMapInt32Int32FieldNumber = 1;
  const ::google::protobuf::Map< ::google::protobuf::int32, ::google::protobuf::int32 >&
      map_int32_int32() const;
  ::google::protobuf::Map< ::google::protobuf::int32, ::google::protobuf::int32 >*
      mutable_map_int32_int32();

  // map<int64, int64> map_int64_int64 = 2;
  int map_int64_int64_size() const;
  void clear_map_int64_int64();
  static const int kMapInt64Int64FieldNumber = 2;
  const ::google::protobuf::Map< ::google::protobuf::int64, ::google::protobuf::int64 >&
      map_int64_int64() const;
  ::google::protobuf::Map< ::google::protobuf::int64, ::google::protobuf::int64 >*
      mutable_map_int64_int64();

  // map<uint32, uint32> map_uint32_uint32 = 3;
  int map_uint32_uint32_size() const;
  void clear_map_uint32_uint32();
  static const int kMapUint32Uint32FieldNumber = 3;
  const ::google::protobuf::Map< ::google::protobuf::uint32, ::google::protobuf::uint32 >&
      map_uint32_uint32() const;
  ::google::protobuf::Map< ::google::protobuf::uint32, ::google::protobuf::uint32 >*
      mutable_map_uint32_uint32();

  // map<uint64, uint64> map_uint64_uint64 = 4;
  int map_uint64_uint64_size() const;
  void clear_map_uint64_uint64();
  static const int kMapUint64Uint64FieldNumber = 4;
  const ::google::protobuf::Map< ::google::protobuf::uint64, ::google::protobuf::uint64 >&
      map_uint64_uint64() const;
  ::google::protobuf::Map< ::google::protobuf::uint64, ::google::protobuf::uint64 >*
      mutable_map_uint64_uint64();

  // map<sint32, sint32> map_sint32_sint32 = 5;
  int map_sint32_sint32_size() const;
  void clear_map_sint32_sint32();
  static const int kMapSint32Sint32FieldNumber = 5;
  const ::google::protobuf::Map< ::google::protobuf::int32, ::google::protobuf::int32 >&
      map_sint32_sint32() const;
  ::google::protobuf::Map< ::google::protobuf::int32, ::google::protobuf::int32 >*
      mutable_map_sint32_sint32();

  // map<sint64, sint64> map_sint64_sint64 = 6;
  int map_sint64_sint64_size() const;
  void clear_map_sint64_sint64();
  static const int kMapSint64Sint64FieldNumber = 6;
  const ::google::protobuf::Map< ::google::protobuf::int64, ::google::protobuf::int64 >&
      map_sint64_sint64() const;
  ::google::protobuf::Map< ::google::protobuf::int64, ::google::protobuf::int64 >*
      mutable_map_sint64_sint64();

  // map<fixed32, fixed32> map_fixed32_fixed32 = 7;
  int map_fixed32_fixed32_size() const;
  void clear_map_fixed32_fixed32();
  static const int kMapFixed32Fixed32FieldNumber = 7;
  const ::google::protobuf::Map< ::google::protobuf::uint32, ::google::protobuf::uint32 >&
      map_fixed32_fixed32() const;
  ::google::protobuf::Map< ::google::protobuf::uint32, ::google::protobuf::uint32 >*
      mutable_map_fixed32_fixed32();

  // map<fixed64, fixed64> map_fixed64_fixed64 = 8;
  int map_fixed64_fixed64_size() const;
  void clear_map_fixed64_fixed64();
  static const int kMapFixed64Fixed64FieldNumber = 8;
  const ::google::protobuf::Map< ::google::protobuf::uint64, ::google::protobuf::uint64 >&
      map_fixed64_fixed64() const;
  ::google::protobuf::Map< ::google::protobuf::uint64, ::google::protobuf::uint64 >*
      mutable_map_fixed64_fixed64();

  // map<sfixed32, sfixed32> map_sfixed32_sfixed32 = 9;
  int map_sfixed32_sfixed32_size() const;
  void clear_map_sfixed32_sfixed32();
  static const int kMapSfixed32Sfixed32FieldNumber = 9;
  const ::google::protobuf::Map< ::google::protobuf::int32, ::google::protobuf::int32 >&
      map_sfixed32_sfixed32() const;
  ::google::protobuf::Map< ::google::protobuf::int32, ::google::protobuf::int32 >*
      mutable_map_sfixed32_sfixed32();

  // map<sfixed64, sfixed64> map_sfixed64_sfixed64 = 10;
  int map_sfixed64_sfixed64_size() const;
  void clear_map_sfixed64_sfixed64();
  static const int kMapSfixed64Sfixed64FieldNumber = 10;
  const ::google::protobuf::Map< ::google::protobuf::int64, ::google::protobuf::int64 >&
      map_sfixed64_sfixed64() const;
  ::google::protobuf::Map< ::google::protobuf::int64, ::google::protobuf::int64 >*
      mutable_map_sfixed64_sfixed64();

  // map<int32, float> map_int32_float = 11;
  int map_int32_float_size() const;
  void clear_map_int32_float();
  static const int kMapInt32FloatFieldNumber = 11;
  const ::google::protobuf::Map< ::google::protobuf::int32, float >&
      map_int32_float() const;
  ::google::protobuf::Map< ::google::protobuf::int32, float >*
      mutable_map_int32_float();

  // map<int32, double> map_int32_double = 12;
  int map_int32_double_size() const;
  void clear_map_int32_double();
  static const int kMapInt32DoubleFieldNumber = 12;
  const ::google::protobuf::Map< ::google::protobuf::int32, double >&
      map_int32_double() const;
  ::google::protobuf::Map< ::google::protobuf::int32, double >*
      mutable_map_int32_double();

  // map<bool, bool> map_bool_bool = 13;
  int map_bool_bool_size() const;
  void clear_map_bool_bool();
  static const int kMapBoolBoolFieldNumber = 13;
  const ::google::protobuf::Map< bool, bool >&
      map_bool_bool() const;
  ::google::protobuf::Map< bool, bool >*
      mutable_map_bool_bool();

  // map<string, string> map_string_string = 14;
  int map_string_string_size() const;
  void clear_map_string_string();
  static const int kMapStringStringFieldNumber = 14;
  const ::google::protobuf::Map< ::std::string, ::std::string >&
      map_string_string() const;
  ::google::protobuf::Map< ::std::string, ::std::string >*
      mutable_map_string_string();

  // map<int32, bytes> map_int32_bytes = 15;
  int map_int32_bytes_size() const;
  void clear_map_int32_bytes();
  static const int kMapInt32BytesFieldNumber = 15;
  const ::google::protobuf::Map< ::google::protobuf::int32, ::std::string >&
      map_int32_bytes() const;
  ::google::protobuf::Map< ::google::protobuf::int32, ::std::string >*
      mutable_map_int32_bytes();

  // map<int32, .protobuf_unittest.MapEnum> map_int32_enum = 16;
  int map_int32_enum_size() const;
  void clear_map_int32_enum();
  static const int kMapInt32EnumFieldNumber = 16;
  const ::google::protobuf::Map< ::google::protobuf::int32, ::protobuf_unittest::MapEnum >&
      map_int32_enum() const;
  ::google::protobuf::Map< ::google::protobuf::int32, ::protobuf_unittest::MapEnum >*
      mutable_map_int32_enum();

  // map<int32, .protobuf_unittest.ForeignMessage> map_int32_foreign_message = 17;
  int map_int32_foreign_message_size() const;
  void clear_map_int32_foreign_message();
  static const int kMapInt32ForeignMessageFieldNumber = 17;
  const ::google::protobuf::Map< ::google::protobuf::int32, ::protobuf_unittest::ForeignMessage >&
      map_int32_foreign_message() const;
  ::google::protobuf::Map< ::google::protobuf::int32, ::protobuf_unittest::ForeignMessage >*
      mutable_map_int32_foreign_message();

  // map<string, .protobuf_unittest.ForeignMessage> map_string_foreign_message = 18;
  int map_string_foreign_message_size() const;
  void clear_map_string_foreign_message();
  static const int kMapStringForeignMessageFieldNumber = 18;
  const ::google::protobuf::Map< ::std::string, ::protobuf_unittest::ForeignMessage >&
      map_string_foreign_message() const;
  ::google::protobuf::Map< ::std::string, ::protobuf_unittest::ForeignMessage >*
      mutable_map_string_foreign_message();

  // map<int32, .protobuf_unittest.TestAllTypes> map_int32_all_types = 19;
  int map_int32_all_types_size() const;
  void clear_map_int32_all_types();
  static const int kMapInt32AllTypesFieldNumber = 19;
  const ::google::protobuf::Map< ::google::protobuf::int32, ::protobuf_unittest::TestAllTypes >&
      map_int32_all_types() const;
  ::google::protobuf::Map< ::google::protobuf::int32, ::protobuf_unittest::TestAllTypes >*
      mutable_map_int32_all_types();

  // @@protoc_insertion_point(class_scope:protobuf_unittest.TestMap)
 private:

  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
  template <typename T> friend class ::google::protobuf::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::google::protobuf::internal::MapField<
      TestMap_MapInt32Int32Entry_DoNotUse,
      ::google::protobuf::int32, ::google::protobuf::int32,
      ::google::protobuf::internal::WireFormatLite::TYPE_INT32,
      ::google::protobuf::internal::WireFormatLite::TYPE_INT32,
      0 > map_int32_int32_;
  ::google::protobuf::internal::MapField<
      TestMap_MapInt64Int64Entry_DoNotUse,
      ::google::protobuf::int64, ::google::protobuf::int64,
      ::google::protobuf::internal::WireFormatLite::TYPE_INT64,
      ::google::protobuf::internal::WireFormatLite::TYPE_INT64,
      0 > map_int64_int64_;
  ::google::protobuf::internal::MapField<
      TestMap_MapUint32Uint32Entry_DoNotUse,
      ::google::protobuf::uint32, ::google::protobuf::uint32,
      ::google::protobuf::internal::WireFormatLite::TYPE_UINT32,
      ::google::protobuf::internal::WireFormatLite::TYPE_UINT32,
      0 > map_uint32_uint32_;
  ::google::protobuf::internal::MapField<
      TestMap_MapUint64Uint64Entry_DoNotUse,
      ::google::protobuf::uint64, ::google::protobuf::uint64,
      ::google::protobuf::internal::WireFormatLite::TYPE_UINT64,
      ::google::protobuf::internal::WireFormatLite::TYPE_UINT64,
      0 > map_uint64_uint64_;
  ::google::protobuf::internal::MapField<
      TestMap_MapSint32Sint32Entry_DoNotUse,
      ::google::protobuf::int32, ::google::protobuf::int32,
      ::google::protobuf::internal::WireFormatLite::TYPE_SINT32,
      ::google::protobuf::internal::WireFormatLite::TYPE_SINT32,
      0 > map_sint32_sint32_;
  ::google::protobuf::internal::MapField<
      TestMap_MapSint64Sint64Entry_DoNotUse,
      ::google::protobuf::int64, ::google::protobuf::int64,
      ::google::protobuf::internal::WireFormatLite::TYPE_SINT64,
      ::google::protobuf::internal::WireFormatLite::TYPE_SINT64,
      0 > map_sint64_sint64_;
  ::google::protobuf::internal::MapField<
      TestMap_MapFixed32Fixed32Entry_DoNotUse,
      ::google::protobuf::uint32, ::google::protobuf::uint32,
      ::google::protobuf::internal::WireFormatLite::TYPE_FIXED32,
      ::google::protobuf::internal::WireFormatLite::TYPE_FIXED32,
      0 > map_fixed32_fixed32_;
  ::google::protobuf::internal::MapField<
      TestMap_MapFixed64Fixed64Entry_DoNotUse,
      ::google::protobuf::uint64, ::google::protobuf::uint64,
      ::google::protobuf::internal::WireFormatLite::TYPE_FIXED64,
      ::google::protobuf::internal::WireFormatLite::TYPE_FIXED64,
      0 > map_fixed64_fixed64_;
  ::google::protobuf::internal::MapField<
      TestMap_MapSfixed32Sfixed32Entry_DoNotUse,
      ::google::protobuf::int32, ::google::protobuf::int32,
      ::google::protobuf::internal::WireFormatLite::TYPE_SFIXED32,
      ::google::protobuf::internal::WireFormatLite::TYPE_SFIXED32,
      0 > map_sfixed32_sfixed32_;
  ::google::protobuf::internal::MapField<
      TestMap_MapSfixed64Sfixed64Entry_DoNotUse,
      ::google::protobuf::int64, ::google::protobuf::int64,
      ::google::protobuf::internal::WireFormatLite::TYPE_SFIXED64,
      ::google::protobuf::internal::WireFormatLite::TYPE_SFIXED64,
      0 > map_sfixed64_sfixed64_;
  ::google::protobuf::internal::MapField<
      TestMap_MapInt32FloatEntry_DoNotUse,
      ::google::protobuf::int32, float,
      ::google::protobuf::internal::WireFormatLite::TYPE_INT32,
      ::google::protobuf::internal::WireFormatLite::TYPE_FLOAT,
      0 > map_int32_float_;
  ::google::protobuf::internal::MapField<
      TestMap_MapInt32DoubleEntry_DoNotUse,
      ::google::protobuf::int32, double,
      ::google::protobuf::internal::WireFormatLite::TYPE_INT32,
      ::google::protobuf::internal::WireFormatLite::TYPE_DOUBLE,
      0 > map_int32_double_;
  ::google::protobuf::internal::MapField<
      TestMap_MapBoolBoolEntry_DoNotUse,
      bool, bool,
      ::google::protobuf::internal::WireFormatLite::TYPE_BOOL,
      ::google::protobuf::internal::WireFormatLite::TYPE_BOOL,
      0 > map_bool_bool_;
  ::google::protobuf::internal::MapField<
      TestMap_MapStringStringEntry_DoNotUse,
      ::std::string, ::std::string,
      ::google::protobuf::internal::WireFormatLite::TYPE_STRING,
      ::google::protobuf::internal::WireFormatLite::TYPE_STRING,
      0 > map_string_string_;
  ::google::protobuf::internal::MapField<
      TestMap_MapInt32BytesEntry_DoNotUse,
      ::google::protobuf::int32, ::std::string,
      ::google::protobuf::internal::WireFormatLite::TYPE_INT32,
      ::google::protobuf::internal::WireFormatLite::TYPE_BYTES,
      0 > map_int32_bytes_;
  ::google::protobuf::internal::MapField<
      TestMap_MapInt32EnumEntry_DoNotUse,
      ::google::protobuf::int32, ::protobuf_unittest::MapEnum,
      ::google::protobuf::internal::WireFormatLite::TYPE_INT32,
      ::google::protobuf::internal::WireFormatLite::TYPE_ENUM,
      0 > map_int32_enum_;
  ::google::protobuf::internal::MapField<
      TestMap_MapInt32ForeignMessageEntry_DoNotUse,
      ::google::protobuf::int32, ::protobuf_unittest::ForeignMessage,
      ::google::protobuf::internal::WireFormatLite::TYPE_INT32,
      ::google::protobuf::internal::WireFormatLite::TYPE_MESSAGE,
      0 > map_int32_foreign_message_;
  ::google::protobuf::internal::MapField<
      TestMap_MapStringForeignMessageEntry_DoNotUse,
      ::std::string, ::protobuf_unittest::ForeignMessage,
      ::google::protobuf::internal::WireFormatLite::TYPE_STRING,
      ::google::protobuf::internal::WireFormatLite::TYPE_MESSAGE,
      0 > map_string_foreign_message_;
  ::google::protobuf::internal::MapField<
      TestMap_MapInt32AllTypesEntry_DoNotUse,
      ::google::protobuf::int32, ::protobuf_unittest::TestAllTypes,
      ::google::protobuf::internal::WireFormatLite::TYPE_INT32,
      ::google::protobuf::internal::WireFormatLite::TYPE_MESSAGE,
      0 > map_int32_all_types_;
  mutable ::google::protobuf::internal::CachedSize _cached_size_;
  friend struct ::protobuf_google_2fprotobuf_2fmap_5funittest_2eproto::TableStruct;
};
// -------------------------------------------------------------------

class TestMapSubmessage : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:protobuf_unittest.TestMapSubmessage) */ {
 public:
  TestMapSubmessage();
  virtual ~TestMapSubmessage();

  TestMapSubmessage(const TestMapSubmessage& from);

  inline TestMapSubmessage& operator=(const TestMapSubmessage& from) {
    CopyFrom(from);
    return *this;
  }
  #if LANG_CXX11
  TestMapSubmessage(TestMapSubmessage&& from) noexcept
    : TestMapSubmessage() {
    *this = ::std::move(from);
  }

  inline TestMapSubmessage& operator=(TestMapSubmessage&& from) noexcept {
    if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) {
      if (this != &from) InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }
  #endif
  inline ::google::protobuf::Arena* GetArena() const final {
    return GetArenaNoVirtual();
  }
  inline void* GetMaybeArenaPointer() const final {
    return MaybeArenaPtr();
  }
  static const ::google::protobuf::Descriptor* descriptor();
  static const TestMapSubmessage& default_instance();

  static void InitAsDefaultInstance();  // FOR INTERNAL USE ONLY
  static inline const TestMapSubmessage* internal_default_instance() {
    return reinterpret_cast<const TestMapSubmessage*>(
               &_TestMapSubmessage_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    20;

  void UnsafeArenaSwap(TestMapSubmessage* other);
  void Swap(TestMapSubmessage* other);
  friend void swap(TestMapSubmessage& a, TestMapSubmessage& b) {
    a.Swap(&b);
  }

  // implements Message ----------------------------------------------

  inline TestMapSubmessage* New() const final {
    return CreateMaybeMessage<TestMapSubmessage>(NULL);
  }

  TestMapSubmessage* New(::google::protobuf::Arena* arena) const final {
    return CreateMaybeMessage<TestMapSubmessage>(arena);
  }
  void CopyFrom(const ::google::protobuf::Message& from) final;
  void MergeFrom(const ::google::protobuf::Message& from) final;
  void CopyFrom(const TestMapSubmessage& from);
  void MergeFrom(const TestMapSubmessage& from);
  void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  bool MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input) final;
  void SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const final;
  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* target) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(TestMapSubmessage* other);
  protected:
  explicit TestMapSubmessage(::google::protobuf::Arena* arena);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::google::protobuf::Arena* arena);
  private:
  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
    return _internal_metadata_.arena();
  }
  inline void* MaybeArenaPtr() const {
    return _internal_metadata_.raw_arena_ptr();
  }
  public:

  ::google::protobuf::Metadata GetMetadata() const final;

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  // .protobuf_unittest.TestMap test_map = 1;
  bool has_test_map() const;
  void clear_test_map();
  static const int kTestMapFieldNumber = 1;
  private:
  const ::protobuf_unittest::TestMap& _internal_test_map() const;
  public:
  const ::protobuf_unittest::TestMap& test_map() const;
  ::protobuf_unittest::TestMap* release_test_map();
  ::protobuf_unittest::TestMap* mutable_test_map();
  void set_allocated_test_map(::protobuf_unittest::TestMap* test_map);
  void unsafe_arena_set_allocated_test_map(
      ::protobuf_unittest::TestMap* test_map);
  ::protobuf_unittest::TestMap* unsafe_arena_release_test_map();

  // @@protoc_insertion_point(class_scope:protobuf_unittest.TestMapSubmessage)
 private:

  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
  template <typename T> friend class ::google::protobuf::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::protobuf_unittest::TestMap* test_map_;
  mutable ::google::protobuf::internal::CachedSize _cached_size_;
  friend struct ::protobuf_google_2fprotobuf_2fmap_5funittest_2eproto::TableStruct;
};
// -------------------------------------------------------------------

class TestMessageMap_MapInt32MessageEntry_DoNotUse : public ::google::protobuf::internal::MapEntry<TestMessageMap_MapInt32MessageEntry_DoNotUse, 
    ::google::protobuf::int32, ::protobuf_unittest::TestAllTypes,
    ::google::protobuf::internal::WireFormatLite::TYPE_INT32,
    ::google::protobuf::internal::WireFormatLite::TYPE_MESSAGE,
    0 > {
public:
  typedef ::google::protobuf::internal::MapEntry<TestMessageMap_MapInt32MessageEntry_DoNotUse, 
    ::google::protobuf::int32, ::protobuf_unittest::TestAllTypes,
    ::google::protobuf::internal::WireFormatLite::TYPE_INT32,
    ::google::protobuf::internal::WireFormatLite::TYPE_MESSAGE,
    0 > SuperType;
  TestMessageMap_MapInt32MessageEntry_DoNotUse();
  TestMessageMap_MapInt32MessageEntry_DoNotUse(::google::protobuf::Arena* arena);
  void MergeFrom(const TestMessageMap_MapInt32MessageEntry_DoNotUse& other);
  static const TestMessageMap_MapInt32MessageEntry_DoNotUse* internal_default_instance() { return reinterpret_cast<const TestMessageMap_MapInt32MessageEntry_DoNotUse*>(&_TestMessageMap_MapInt32MessageEntry_DoNotUse_default_instance_); }
  void MergeFrom(const ::google::protobuf::Message& other) final;
  ::google::protobuf::Metadata GetMetadata() const;
};

// -------------------------------------------------------------------

class TestMessageMap : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:protobuf_unittest.TestMessageMap) */ {
 public:
  TestMessageMap();
  virtual ~TestMessageMap();

  TestMessageMap(const TestMessageMap& from);

  inline TestMessageMap& operator=(const TestMessageMap& from) {
    CopyFrom(from);
    return *this;
  }
  #if LANG_CXX11
  TestMessageMap(TestMessageMap&& from) noexcept
    : TestMessageMap() {
    *this = ::std::move(from);
  }

  inline TestMessageMap& operator=(TestMessageMap&& from) noexcept {
    if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) {
      if (this != &from) InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }
  #endif
  inline ::google::protobuf::Arena* GetArena() const final {
    return GetArenaNoVirtual();
  }
  inline void* GetMaybeArenaPointer() const final {
    return MaybeArenaPtr();
  }
  static const ::google::protobuf::Descriptor* descriptor();
  static const TestMessageMap& default_instance();

  static void InitAsDefaultInstance();  // FOR INTERNAL USE ONLY
  static inline const TestMessageMap* internal_default_instance() {
    return reinterpret_cast<const TestMessageMap*>(
               &_TestMessageMap_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    22;

  void UnsafeArenaSwap(TestMessageMap* other);
  void Swap(TestMessageMap* other);
  friend void swap(TestMessageMap& a, TestMessageMap& b) {
    a.Swap(&b);
  }

  // implements Message ----------------------------------------------

  inline TestMessageMap* New() const final {
    return CreateMaybeMessage<TestMessageMap>(NULL);
  }

  TestMessageMap* New(::google::protobuf::Arena* arena) const final {
    return CreateMaybeMessage<TestMessageMap>(arena);
  }
  void CopyFrom(const ::google::protobuf::Message& from) final;
  void MergeFrom(const ::google::protobuf::Message& from) final;
  void CopyFrom(const TestMessageMap& from);
  void MergeFrom(const TestMessageMap& from);
  void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  bool MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input) final;
  void SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const final;
  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* target) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(TestMessageMap* other);
  protected:
  explicit TestMessageMap(::google::protobuf::Arena* arena);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::google::protobuf::Arena* arena);
  private:
  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
    return _internal_metadata_.arena();
  }
  inline void* MaybeArenaPtr() const {
    return _internal_metadata_.raw_arena_ptr();
  }
  public:

  ::google::protobuf::Metadata GetMetadata() const final;

  // nested types ----------------------------------------------------


  // accessors -------------------------------------------------------

  // map<int32, .protobuf_unittest.TestAllTypes> map_int32_message = 1;
  int map_int32_message_size() const;
  void clear_map_int32_message();
  static const int kMapInt32MessageFieldNumber = 1;
  const ::google::protobuf::Map< ::google::protobuf::int32, ::protobuf_unittest::TestAllTypes >&
      map_int32_message() const;
  ::google::protobuf::Map< ::google::protobuf::int32, ::protobuf_unittest::TestAllTypes >*
      mutable_map_int32_message();

  // @@protoc_insertion_point(class_scope:protobuf_unittest.TestMessageMap)
 private:

  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
  template <typename T> friend class ::google::protobuf::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::google::protobuf::internal::MapField<
      TestMessageMap_MapInt32MessageEntry_DoNotUse,
      ::google::protobuf::int32, ::protobuf_unittest::TestAllTypes,
      ::google::protobuf::internal::WireFormatLite::TYPE_INT32,
      ::google::protobuf::internal::WireFormatLite::TYPE_MESSAGE,
      0 > map_int32_message_;
  mutable ::google::protobuf::internal::CachedSize _cached_size_;
  friend struct ::protobuf_google_2fprotobuf_2fmap_5funittest_2eproto::TableStruct;
};
// -------------------------------------------------------------------

class TestSameTypeMap_Map1Entry_DoNotUse : public ::google::protobuf::internal::MapEntry<TestSameTypeMap_Map1Entry_DoNotUse, 
    ::google::protobuf::int32, ::google::protobuf::int32,
    ::google::protobuf::internal::WireFormatLite::TYPE_INT32,
    ::google::protobuf::internal::WireFormatLite::TYPE_INT32,
    0 > {
public:
  typedef ::google::protobuf::internal::MapEntry<TestSameTypeMap_Map1Entry_DoNotUse, 
    ::google::protobuf::int32, ::google::protobuf::int32,
    ::google::protobuf::internal::WireFormatLite::TYPE_INT32,
    ::google::protobuf::internal::WireFormatLite::TYPE_INT32,
    0 > SuperType;
  TestSameTypeMap_Map1Entry_DoNotUse();
  TestSameTypeMap_Map1Entry_DoNotUse(::google::protobuf::Arena* arena);
  void MergeFrom(const TestSameTypeMap_Map1Entry_DoNotUse& other);
  static const TestSameTypeMap_Map1Entry_DoNotUse* internal_default_instance() { return reinterpret_cast<const TestSameTypeMap_Map1Entry_DoNotUse*>(&_TestSameTypeMap_Map1Entry_DoNotUse_default_instance_); }
  void MergeFrom(const ::google::protobuf::Message& other) final;
  ::google::protobuf::Metadata GetMetadata() const;
};

// -------------------------------------------------------------------

class TestSameTypeMap_Map2Entry_DoNotUse : public ::google::protobuf::internal::MapEntry<TestSameTypeMap_Map2Entry_DoNotUse, 
    ::google::protobuf::int32, ::google::protobuf::int32,
    ::google::protobuf::internal::WireFormatLite::TYPE_INT32,
    ::google::protobuf::internal::WireFormatLite::TYPE_INT32,
    0 > {
public:
  typedef ::google::protobuf::internal::MapEntry<TestSameTypeMap_Map2Entry_DoNotUse, 
    ::google::protobuf::int32, ::google::protobuf::int32,
    ::google::protobuf::internal::WireFormatLite::TYPE_INT32,
    ::google::protobuf::internal::WireFormatLite::TYPE_INT32,
    0 > SuperType;
  TestSameTypeMap_Map2Entry_DoNotUse();
  TestSameTypeMap_Map2Entry_DoNotUse(::google::protobuf::Arena* arena);
  void MergeFrom(const TestSameTypeMap_Map2Entry_DoNotUse& other);
  static const TestSameTypeMap_Map2Entry_DoNotUse* internal_default_instance() { return reinterpret_cast<const TestSameTypeMap_Map2Entry_DoNotUse*>(&_TestSameTypeMap_Map2Entry_DoNotUse_default_instance_); }
  void MergeFrom(const ::google::protobuf::Message& other) final;
  ::google::protobuf::Metadata GetMetadata() const;
};

// -------------------------------------------------------------------

class TestSameTypeMap : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:protobuf_unittest.TestSameTypeMap) */ {
 public:
  TestSameTypeMap();
  virtual ~TestSameTypeMap();

  TestSameTypeMap(const TestSameTypeMap& from);

  inline TestSameTypeMap& operator=(const TestSameTypeMap& from) {
    CopyFrom(from);
    return *this;
  }
  #if LANG_CXX11
  TestSameTypeMap(TestSameTypeMap&& from) noexcept
    : TestSameTypeMap() {
    *this = ::std::move(from);
  }

  inline TestSameTypeMap& operator=(TestSameTypeMap&& from) noexcept {
    if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) {
      if (this != &from) InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }
  #endif
  inline ::google::protobuf::Arena* GetArena() const final {
    return GetArenaNoVirtual();
  }
  inline void* GetMaybeArenaPointer() const final {
    return MaybeArenaPtr();
  }
  static const ::google::protobuf::Descriptor* descriptor();
  static const TestSameTypeMap& default_instance();

  static void InitAsDefaultInstance();  // FOR INTERNAL USE ONLY
  static inline const TestSameTypeMap* internal_default_instance() {
    return reinterpret_cast<const TestSameTypeMap*>(
               &_TestSameTypeMap_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    25;

  void UnsafeArenaSwap(TestSameTypeMap* other);
  void Swap(TestSameTypeMap* other);
  friend void swap(TestSameTypeMap& a, TestSameTypeMap& b) {
    a.Swap(&b);
  }

  // implements Message ----------------------------------------------

  inline TestSameTypeMap* New() const final {
    return CreateMaybeMessage<TestSameTypeMap>(NULL);
  }

  TestSameTypeMap* New(::google::protobuf::Arena* arena) const final {
    return CreateMaybeMessage<TestSameTypeMap>(arena);
  }
  void CopyFrom(const ::google::protobuf::Message& from) final;
  void MergeFrom(const ::google::protobuf::Message& from) final;
  void CopyFrom(const TestSameTypeMap& from);
  void MergeFrom(const TestSameTypeMap& from);
  void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  bool MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input) final;
  void SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const final;
  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* target) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(TestSameTypeMap* other);
  protected:
  explicit TestSameTypeMap(::google::protobuf::Arena* arena);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::google::protobuf::Arena* arena);
  private:
  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
    return _internal_metadata_.arena();
  }
  inline void* MaybeArenaPtr() const {
    return _internal_metadata_.raw_arena_ptr();
  }
  public:

  ::google::protobuf::Metadata GetMetadata() const final;

  // nested types ----------------------------------------------------


  // accessors -------------------------------------------------------

  // map<int32, int32> map1 = 1;
  int map1_size() const;
  void clear_map1();
  static const int kMap1FieldNumber = 1;
  const ::google::protobuf::Map< ::google::protobuf::int32, ::google::protobuf::int32 >&
      map1() const;
  ::google::protobuf::Map< ::google::protobuf::int32, ::google::protobuf::int32 >*
      mutable_map1();

  // map<int32, int32> map2 = 2;
  int map2_size() const;
  void clear_map2();
  static const int kMap2FieldNumber = 2;
  const ::google::protobuf::Map< ::google::protobuf::int32, ::google::protobuf::int32 >&
      map2() const;
  ::google::protobuf::Map< ::google::protobuf::int32, ::google::protobuf::int32 >*
      mutable_map2();

  // @@protoc_insertion_point(class_scope:protobuf_unittest.TestSameTypeMap)
 private:

  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
  template <typename T> friend class ::google::protobuf::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::google::protobuf::internal::MapField<
      TestSameTypeMap_Map1Entry_DoNotUse,
      ::google::protobuf::int32, ::google::protobuf::int32,
      ::google::protobuf::internal::WireFormatLite::TYPE_INT32,
      ::google::protobuf::internal::WireFormatLite::TYPE_INT32,
      0 > map1_;
  ::google::protobuf::internal::MapField<
      TestSameTypeMap_Map2Entry_DoNotUse,
      ::google::protobuf::int32, ::google::protobuf::int32,
      ::google::protobuf::internal::WireFormatLite::TYPE_INT32,
      ::google::protobuf::internal::WireFormatLite::TYPE_INT32,
      0 > map2_;
  mutable ::google::protobuf::internal::CachedSize _cached_size_;
  friend struct ::protobuf_google_2fprotobuf_2fmap_5funittest_2eproto::TableStruct;
};
// -------------------------------------------------------------------

class TestRequiredMessageMap_MapFieldEntry_DoNotUse : public ::google::protobuf::internal::MapEntry<TestRequiredMessageMap_MapFieldEntry_DoNotUse, 
    ::google::protobuf::int32, ::protobuf_unittest::TestRequired,
    ::google::protobuf::internal::WireFormatLite::TYPE_INT32,
    ::google::protobuf::internal::WireFormatLite::TYPE_MESSAGE,
    0 > {
public:
  typedef ::google::protobuf::internal::MapEntry<TestRequiredMessageMap_MapFieldEntry_DoNotUse, 
    ::google::protobuf::int32, ::protobuf_unittest::TestRequired,
    ::google::protobuf::internal::WireFormatLite::TYPE_INT32,
    ::google::protobuf::internal::WireFormatLite::TYPE_MESSAGE,
    0 > SuperType;
  TestRequiredMessageMap_MapFieldEntry_DoNotUse();
  TestRequiredMessageMap_MapFieldEntry_DoNotUse(::google::protobuf::Arena* arena);
  void MergeFrom(const TestRequiredMessageMap_MapFieldEntry_DoNotUse& other);
  static const TestRequiredMessageMap_MapFieldEntry_DoNotUse* internal_default_instance() { return reinterpret_cast<const TestRequiredMessageMap_MapFieldEntry_DoNotUse*>(&_TestRequiredMessageMap_MapFieldEntry_DoNotUse_default_instance_); }
  void MergeFrom(const ::google::protobuf::Message& other) final;
  ::google::protobuf::Metadata GetMetadata() const;
};

// -------------------------------------------------------------------

class TestRequiredMessageMap : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:protobuf_unittest.TestRequiredMessageMap) */ {
 public:
  TestRequiredMessageMap();
  virtual ~TestRequiredMessageMap();

  TestRequiredMessageMap(const TestRequiredMessageMap& from);

  inline TestRequiredMessageMap& operator=(const TestRequiredMessageMap& from) {
    CopyFrom(from);
    return *this;
  }
  #if LANG_CXX11
  TestRequiredMessageMap(TestRequiredMessageMap&& from) noexcept
    : TestRequiredMessageMap() {
    *this = ::std::move(from);
  }

  inline TestRequiredMessageMap& operator=(TestRequiredMessageMap&& from) noexcept {
    if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) {
      if (this != &from) InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }
  #endif
  inline ::google::protobuf::Arena* GetArena() const final {
    return GetArenaNoVirtual();
  }
  inline void* GetMaybeArenaPointer() const final {
    return MaybeArenaPtr();
  }
  static const ::google::protobuf::Descriptor* descriptor();
  static const TestRequiredMessageMap& default_instance();

  static void InitAsDefaultInstance();  // FOR INTERNAL USE ONLY
  static inline const TestRequiredMessageMap* internal_default_instance() {
    return reinterpret_cast<const TestRequiredMessageMap*>(
               &_TestRequiredMessageMap_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    27;

  void UnsafeArenaSwap(TestRequiredMessageMap* other);
  void Swap(TestRequiredMessageMap* other);
  friend void swap(TestRequiredMessageMap& a, TestRequiredMessageMap& b) {
    a.Swap(&b);
  }

  // implements Message ----------------------------------------------

  inline TestRequiredMessageMap* New() const final {
    return CreateMaybeMessage<TestRequiredMessageMap>(NULL);
  }

  TestRequiredMessageMap* New(::google::protobuf::Arena* arena) const final {
    return CreateMaybeMessage<TestRequiredMessageMap>(arena);
  }
  void CopyFrom(const ::google::protobuf::Message& from) final;
  void MergeFrom(const ::google::protobuf::Message& from) final;
  void CopyFrom(const TestRequiredMessageMap& from);
  void MergeFrom(const TestRequiredMessageMap& from);
  void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  bool MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input) final;
  void SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const final;
  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* target) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(TestRequiredMessageMap* other);
  protected:
  explicit TestRequiredMessageMap(::google::protobuf::Arena* arena);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::google::protobuf::Arena* arena);
  private:
  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
    return _internal_metadata_.arena();
  }
  inline void* MaybeArenaPtr() const {
    return _internal_metadata_.raw_arena_ptr();
  }
  public:

  ::google::protobuf::Metadata GetMetadata() const final;

  // nested types ----------------------------------------------------


  // accessors -------------------------------------------------------

  // map<int32, .protobuf_unittest.TestRequired> map_field = 1;
  int map_field_size() const;
  void clear_map_field();
  static const int kMapFieldFieldNumber = 1;
  const ::google::protobuf::Map< ::google::protobuf::int32, ::protobuf_unittest::TestRequired >&
      map_field() const;
  ::google::protobuf::Map< ::google::protobuf::int32, ::protobuf_unittest::TestRequired >*
      mutable_map_field();

  // @@protoc_insertion_point(class_scope:protobuf_unittest.TestRequiredMessageMap)
 private:

  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
  template <typename T> friend class ::google::protobuf::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::google::protobuf::internal::MapField<
      TestRequiredMessageMap_MapFieldEntry_DoNotUse,
      ::google::protobuf::int32, ::protobuf_unittest::TestRequired,
      ::google::protobuf::internal::WireFormatLite::TYPE_INT32,
      ::google::protobuf::internal::WireFormatLite::TYPE_MESSAGE,
      0 > map_field_;
  mutable ::google::protobuf::internal::CachedSize _cached_size_;
  friend struct ::protobuf_google_2fprotobuf_2fmap_5funittest_2eproto::TableStruct;
};
// -------------------------------------------------------------------

class TestArenaMap_MapInt32Int32Entry_DoNotUse : public ::google::protobuf::internal::MapEntry<TestArenaMap_MapInt32Int32Entry_DoNotUse, 
    ::google::protobuf::int32, ::google::protobuf::int32,
    ::google::protobuf::internal::WireFormatLite::TYPE_INT32,
    ::google::protobuf::internal::WireFormatLite::TYPE_INT32,
    0 > {
public:
  typedef ::google::protobuf::internal::MapEntry<TestArenaMap_MapInt32Int32Entry_DoNotUse, 
    ::google::protobuf::int32, ::google::protobuf::int32,
    ::google::protobuf::internal::WireFormatLite::TYPE_INT32,
    ::google::protobuf::internal::WireFormatLite::TYPE_INT32,
    0 > SuperType;
  TestArenaMap_MapInt32Int32Entry_DoNotUse();
  TestArenaMap_MapInt32Int32Entry_DoNotUse(::google::protobuf::Arena* arena);
  void MergeFrom(const TestArenaMap_MapInt32Int32Entry_DoNotUse& other);
  static const TestArenaMap_MapInt32Int32Entry_DoNotUse* internal_default_instance() { return reinterpret_cast<const TestArenaMap_MapInt32Int32Entry_DoNotUse*>(&_TestArenaMap_MapInt32Int32Entry_DoNotUse_default_instance_); }
  void MergeFrom(const ::google::protobuf::Message& other) final;
  ::google::protobuf::Metadata GetMetadata() const;
};

// -------------------------------------------------------------------

class TestArenaMap_MapInt64Int64Entry_DoNotUse : public ::google::protobuf::internal::MapEntry<TestArenaMap_MapInt64Int64Entry_DoNotUse, 
    ::google::protobuf::int64, ::google::protobuf::int64,
    ::google::protobuf::internal::WireFormatLite::TYPE_INT64,
    ::google::protobuf::internal::WireFormatLite::TYPE_INT64,
    0 > {
public:
  typedef ::google::protobuf::internal::MapEntry<TestArenaMap_MapInt64Int64Entry_DoNotUse, 
    ::google::protobuf::int64, ::google::protobuf::int64,
    ::google::protobuf::internal::WireFormatLite::TYPE_INT64,
    ::google::protobuf::internal::WireFormatLite::TYPE_INT64,
    0 > SuperType;
  TestArenaMap_MapInt64Int64Entry_DoNotUse();
  TestArenaMap_MapInt64Int64Entry_DoNotUse(::google::protobuf::Arena* arena);
  void MergeFrom(const TestArenaMap_MapInt64Int64Entry_DoNotUse& other);
  static const TestArenaMap_MapInt64Int64Entry_DoNotUse* internal_default_instance() { return reinterpret_cast<const TestArenaMap_MapInt64Int64Entry_DoNotUse*>(&_TestArenaMap_MapInt64Int64Entry_DoNotUse_default_instance_); }
  void MergeFrom(const ::google::protobuf::Message& other) final;
  ::google::protobuf::Metadata GetMetadata() const;
};

// -------------------------------------------------------------------

class TestArenaMap_MapUint32Uint32Entry_DoNotUse : public ::google::protobuf::internal::MapEntry<TestArenaMap_MapUint32Uint32Entry_DoNotUse, 
    ::google::protobuf::uint32, ::google::protobuf::uint32,
    ::google::protobuf::internal::WireFormatLite::TYPE_UINT32,
    ::google::protobuf::internal::WireFormatLite::TYPE_UINT32,
    0 > {
public:
  typedef ::google::protobuf::internal::MapEntry<TestArenaMap_MapUint32Uint32Entry_DoNotUse, 
    ::google::protobuf::uint32, ::google::protobuf::uint32,
    ::google::protobuf::internal::WireFormatLite::TYPE_UINT32,
    ::google::protobuf::internal::WireFormatLite::TYPE_UINT32,
    0 > SuperType;
  TestArenaMap_MapUint32Uint32Entry_DoNotUse();
  TestArenaMap_MapUint32Uint32Entry_DoNotUse(::google::protobuf::Arena* arena);
  void MergeFrom(const TestArenaMap_MapUint32Uint32Entry_DoNotUse& other);
  static const TestArenaMap_MapUint32Uint32Entry_DoNotUse* internal_default_instance() { return reinterpret_cast<const TestArenaMap_MapUint32Uint32Entry_DoNotUse*>(&_TestArenaMap_MapUint32Uint32Entry_DoNotUse_default_instance_); }
  void MergeFrom(const ::google::protobuf::Message& other) final;
  ::google::protobuf::Metadata GetMetadata() const;
};

// -------------------------------------------------------------------

class TestArenaMap_MapUint64Uint64Entry_DoNotUse : public ::google::protobuf::internal::MapEntry<TestArenaMap_MapUint64Uint64Entry_DoNotUse, 
    ::google::protobuf::uint64, ::google::protobuf::uint64,
    ::google::protobuf::internal::WireFormatLite::TYPE_UINT64,
    ::google::protobuf::internal::WireFormatLite::TYPE_UINT64,
    0 > {
public:
  typedef ::google::protobuf::internal::MapEntry<TestArenaMap_MapUint64Uint64Entry_DoNotUse, 
    ::google::protobuf::uint64, ::google::protobuf::uint64,
    ::google::protobuf::internal::WireFormatLite::TYPE_UINT64,
    ::google::protobuf::internal::WireFormatLite::TYPE_UINT64,
    0 > SuperType;
  TestArenaMap_MapUint64Uint64Entry_DoNotUse();
  TestArenaMap_MapUint64Uint64Entry_DoNotUse(::google::protobuf::Arena* arena);
  void MergeFrom(const TestArenaMap_MapUint64Uint64Entry_DoNotUse& other);
  static const TestArenaMap_MapUint64Uint64Entry_DoNotUse* internal_default_instance() { return reinterpret_cast<const TestArenaMap_MapUint64Uint64Entry_DoNotUse*>(&_TestArenaMap_MapUint64Uint64Entry_DoNotUse_default_instance_); }
  void MergeFrom(const ::google::protobuf::Message& other) final;
  ::google::protobuf::Metadata GetMetadata() const;
};

// -------------------------------------------------------------------

class TestArenaMap_MapSint32Sint32Entry_DoNotUse : public ::google::protobuf::internal::MapEntry<TestArenaMap_MapSint32Sint32Entry_DoNotUse, 
    ::google::protobuf::int32, ::google::protobuf::int32,
    ::google::protobuf::internal::WireFormatLite::TYPE_SINT32,
    ::google::protobuf::internal::WireFormatLite::TYPE_SINT32,
    0 > {
public:
  typedef ::google::protobuf::internal::MapEntry<TestArenaMap_MapSint32Sint32Entry_DoNotUse, 
    ::google::protobuf::int32, ::google::protobuf::int32,
    ::google::protobuf::internal::WireFormatLite::TYPE_SINT32,
    ::google::protobuf::internal::WireFormatLite::TYPE_SINT32,
    0 > SuperType;
  TestArenaMap_MapSint32Sint32Entry_DoNotUse();
  TestArenaMap_MapSint32Sint32Entry_DoNotUse(::google::protobuf::Arena* arena);
  void MergeFrom(const TestArenaMap_MapSint32Sint32Entry_DoNotUse& other);
  static const TestArenaMap_MapSint32Sint32Entry_DoNotUse* internal_default_instance() { return reinterpret_cast<const TestArenaMap_MapSint32Sint32Entry_DoNotUse*>(&_TestArenaMap_MapSint32Sint32Entry_DoNotUse_default_instance_); }
  void MergeFrom(const ::google::protobuf::Message& other) final;
  ::google::protobuf::Metadata GetMetadata() const;
};

// -------------------------------------------------------------------

class TestArenaMap_MapSint64Sint64Entry_DoNotUse : public ::google::protobuf::internal::MapEntry<TestArenaMap_MapSint64Sint64Entry_DoNotUse, 
    ::google::protobuf::int64, ::google::protobuf::int64,
    ::google::protobuf::internal::WireFormatLite::TYPE_SINT64,
    ::google::protobuf::internal::WireFormatLite::TYPE_SINT64,
    0 > {
public:
  typedef ::google::protobuf::internal::MapEntry<TestArenaMap_MapSint64Sint64Entry_DoNotUse, 
    ::google::protobuf::int64, ::google::protobuf::int64,
    ::google::protobuf::internal::WireFormatLite::TYPE_SINT64,
    ::google::protobuf::internal::WireFormatLite::TYPE_SINT64,
    0 > SuperType;
  TestArenaMap_MapSint64Sint64Entry_DoNotUse();
  TestArenaMap_MapSint64Sint64Entry_DoNotUse(::google::protobuf::Arena* arena);
  void MergeFrom(const TestArenaMap_MapSint64Sint64Entry_DoNotUse& other);
  static const TestArenaMap_MapSint64Sint64Entry_DoNotUse* internal_default_instance() { return reinterpret_cast<const TestArenaMap_MapSint64Sint64Entry_DoNotUse*>(&_TestArenaMap_MapSint64Sint64Entry_DoNotUse_default_instance_); }
  void MergeFrom(const ::google::protobuf::Message& other) final;
  ::google::protobuf::Metadata GetMetadata() const;
};

// -------------------------------------------------------------------

class TestArenaMap_MapFixed32Fixed32Entry_DoNotUse : public ::google::protobuf::internal::MapEntry<TestArenaMap_MapFixed32Fixed32Entry_DoNotUse, 
    ::google::protobuf::uint32, ::google::protobuf::uint32,
    ::google::protobuf::internal::WireFormatLite::TYPE_FIXED32,
    ::google::protobuf::internal::WireFormatLite::TYPE_FIXED32,
    0 > {
public:
  typedef ::google::protobuf::internal::MapEntry<TestArenaMap_MapFixed32Fixed32Entry_DoNotUse, 
    ::google::protobuf::uint32, ::google::protobuf::uint32,
    ::google::protobuf::internal::WireFormatLite::TYPE_FIXED32,
    ::google::protobuf::internal::WireFormatLite::TYPE_FIXED32,
    0 > SuperType;
  TestArenaMap_MapFixed32Fixed32Entry_DoNotUse();
  TestArenaMap_MapFixed32Fixed32Entry_DoNotUse(::google::protobuf::Arena* arena);
  void MergeFrom(const TestArenaMap_MapFixed32Fixed32Entry_DoNotUse& other);
  static const TestArenaMap_MapFixed32Fixed32Entry_DoNotUse* internal_default_instance() { return reinterpret_cast<const TestArenaMap_MapFixed32Fixed32Entry_DoNotUse*>(&_TestArenaMap_MapFixed32Fixed32Entry_DoNotUse_default_instance_); }
  void MergeFrom(const ::google::protobuf::Message& other) final;
  ::google::protobuf::Metadata GetMetadata() const;
};

// -------------------------------------------------------------------

class TestArenaMap_MapFixed64Fixed64Entry_DoNotUse : public ::google::protobuf::internal::MapEntry<TestArenaMap_MapFixed64Fixed64Entry_DoNotUse, 
    ::google::protobuf::uint64, ::google::protobuf::uint64,
    ::google::protobuf::internal::WireFormatLite::TYPE_FIXED64,
    ::google::protobuf::internal::WireFormatLite::TYPE_FIXED64,
    0 > {
public:
  typedef ::google::protobuf::internal::MapEntry<TestArenaMap_MapFixed64Fixed64Entry_DoNotUse, 
    ::google::protobuf::uint64, ::google::protobuf::uint64,
    ::google::protobuf::internal::WireFormatLite::TYPE_FIXED64,
    ::google::protobuf::internal::WireFormatLite::TYPE_FIXED64,
    0 > SuperType;
  TestArenaMap_MapFixed64Fixed64Entry_DoNotUse();
  TestArenaMap_MapFixed64Fixed64Entry_DoNotUse(::google::protobuf::Arena* arena);
  void MergeFrom(const TestArenaMap_MapFixed64Fixed64Entry_DoNotUse& other);
  static const TestArenaMap_MapFixed64Fixed64Entry_DoNotUse* internal_default_instance() { return reinterpret_cast<const TestArenaMap_MapFixed64Fixed64Entry_DoNotUse*>(&_TestArenaMap_MapFixed64Fixed64Entry_DoNotUse_default_instance_); }
  void MergeFrom(const ::google::protobuf::Message& other) final;
  ::google::protobuf::Metadata GetMetadata() const;
};

// -------------------------------------------------------------------

class TestArenaMap_MapSfixed32Sfixed32Entry_DoNotUse : public ::google::protobuf::internal::MapEntry<TestArenaMap_MapSfixed32Sfixed32Entry_DoNotUse, 
    ::google::protobuf::int32, ::google::protobuf::int32,
    ::google::protobuf::internal::WireFormatLite::TYPE_SFIXED32,
    ::google::protobuf::internal::WireFormatLite::TYPE_SFIXED32,
    0 > {
public:
  typedef ::google::protobuf::internal::MapEntry<TestArenaMap_MapSfixed32Sfixed32Entry_DoNotUse, 
    ::google::protobuf::int32, ::google::protobuf::int32,
    ::google::protobuf::internal::WireFormatLite::TYPE_SFIXED32,
    ::google::protobuf::internal::WireFormatLite::TYPE_SFIXED32,
    0 > SuperType;
  TestArenaMap_MapSfixed32Sfixed32Entry_DoNotUse();
  TestArenaMap_MapSfixed32Sfixed32Entry_DoNotUse(::google::protobuf::Arena* arena);
  void MergeFrom(const TestArenaMap_MapSfixed32Sfixed32Entry_DoNotUse& other);
  static const TestArenaMap_MapSfixed32Sfixed32Entry_DoNotUse* internal_default_instance() { return reinterpret_cast<const TestArenaMap_MapSfixed32Sfixed32Entry_DoNotUse*>(&_TestArenaMap_MapSfixed32Sfixed32Entry_DoNotUse_default_instance_); }
  void MergeFrom(const ::google::protobuf::Message& other) final;
  ::google::protobuf::Metadata GetMetadata() const;
};

// -------------------------------------------------------------------

class TestArenaMap_MapSfixed64Sfixed64Entry_DoNotUse : public ::google::protobuf::internal::MapEntry<TestArenaMap_MapSfixed64Sfixed64Entry_DoNotUse, 
    ::google::protobuf::int64, ::google::protobuf::int64,
    ::google::protobuf::internal::WireFormatLite::TYPE_SFIXED64,
    ::google::protobuf::internal::WireFormatLite::TYPE_SFIXED64,
    0 > {
public:
  typedef ::google::protobuf::internal::MapEntry<TestArenaMap_MapSfixed64Sfixed64Entry_DoNotUse, 
    ::google::protobuf::int64, ::google::protobuf::int64,
    ::google::protobuf::internal::WireFormatLite::TYPE_SFIXED64,
    ::google::protobuf::internal::WireFormatLite::TYPE_SFIXED64,
    0 > SuperType;
  TestArenaMap_MapSfixed64Sfixed64Entry_DoNotUse();
  TestArenaMap_MapSfixed64Sfixed64Entry_DoNotUse(::google::protobuf::Arena* arena);
  void MergeFrom(const TestArenaMap_MapSfixed64Sfixed64Entry_DoNotUse& other);
  static const TestArenaMap_MapSfixed64Sfixed64Entry_DoNotUse* internal_default_instance() { return reinterpret_cast<const TestArenaMap_MapSfixed64Sfixed64Entry_DoNotUse*>(&_TestArenaMap_MapSfixed64Sfixed64Entry_DoNotUse_default_instance_); }
  void MergeFrom(const ::google::protobuf::Message& other) final;
  ::google::protobuf::Metadata GetMetadata() const;
};

// -------------------------------------------------------------------

class TestArenaMap_MapInt32FloatEntry_DoNotUse : public ::google::protobuf::internal::MapEntry<TestArenaMap_MapInt32FloatEntry_DoNotUse, 
    ::google::protobuf::int32, float,
    ::google::protobuf::internal::WireFormatLite::TYPE_INT32,
    ::google::protobuf::internal::WireFormatLite::TYPE_FLOAT,
    0 > {
public:
  typedef ::google::protobuf::internal::MapEntry<TestArenaMap_MapInt32FloatEntry_DoNotUse, 
    ::google::protobuf::int32, float,
    ::google::protobuf::internal::WireFormatLite::TYPE_INT32,
    ::google::protobuf::internal::WireFormatLite::TYPE_FLOAT,
    0 > SuperType;
  TestArenaMap_MapInt32FloatEntry_DoNotUse();
  TestArenaMap_MapInt32FloatEntry_DoNotUse(::google::protobuf::Arena* arena);
  void MergeFrom(const TestArenaMap_MapInt32FloatEntry_DoNotUse& other);
  static const TestArenaMap_MapInt32FloatEntry_DoNotUse* internal_default_instance() { return reinterpret_cast<const TestArenaMap_MapInt32FloatEntry_DoNotUse*>(&_TestArenaMap_MapInt32FloatEntry_DoNotUse_default_instance_); }
  void MergeFrom(const ::google::protobuf::Message& other) final;
  ::google::protobuf::Metadata GetMetadata() const;
};

// -------------------------------------------------------------------

class TestArenaMap_MapInt32DoubleEntry_DoNotUse : public ::google::protobuf::internal::MapEntry<TestArenaMap_MapInt32DoubleEntry_DoNotUse, 
    ::google::protobuf::int32, double,
    ::google::protobuf::internal::WireFormatLite::TYPE_INT32,
    ::google::protobuf::internal::WireFormatLite::TYPE_DOUBLE,
    0 > {
public:
  typedef ::google::protobuf::internal::MapEntry<TestArenaMap_MapInt32DoubleEntry_DoNotUse, 
    ::google::protobuf::int32, double,
    ::google::protobuf::internal::WireFormatLite::TYPE_INT32,
    ::google::protobuf::internal::WireFormatLite::TYPE_DOUBLE,
    0 > SuperType;
  TestArenaMap_MapInt32DoubleEntry_DoNotUse();
  TestArenaMap_MapInt32DoubleEntry_DoNotUse(::google::protobuf::Arena* arena);
  void MergeFrom(const TestArenaMap_MapInt32DoubleEntry_DoNotUse& other);
  static const TestArenaMap_MapInt32DoubleEntry_DoNotUse* internal_default_instance() { return reinterpret_cast<const TestArenaMap_MapInt32DoubleEntry_DoNotUse*>(&_TestArenaMap_MapInt32DoubleEntry_DoNotUse_default_instance_); }
  void MergeFrom(const ::google::protobuf::Message& other) final;
  ::google::protobuf::Metadata GetMetadata() const;
};

// -------------------------------------------------------------------

class TestArenaMap_MapBoolBoolEntry_DoNotUse : public ::google::protobuf::internal::MapEntry<TestArenaMap_MapBoolBoolEntry_DoNotUse, 
    bool, bool,
    ::google::protobuf::internal::WireFormatLite::TYPE_BOOL,
    ::google::protobuf::internal::WireFormatLite::TYPE_BOOL,
    0 > {
public:
  typedef ::google::protobuf::internal::MapEntry<TestArenaMap_MapBoolBoolEntry_DoNotUse, 
    bool, bool,
    ::google::protobuf::internal::WireFormatLite::TYPE_BOOL,
    ::google::protobuf::internal::WireFormatLite::TYPE_BOOL,
    0 > SuperType;
  TestArenaMap_MapBoolBoolEntry_DoNotUse();
  TestArenaMap_MapBoolBoolEntry_DoNotUse(::google::protobuf::Arena* arena);
  void MergeFrom(const TestArenaMap_MapBoolBoolEntry_DoNotUse& other);
  static const TestArenaMap_MapBoolBoolEntry_DoNotUse* internal_default_instance() { return reinterpret_cast<const TestArenaMap_MapBoolBoolEntry_DoNotUse*>(&_TestArenaMap_MapBoolBoolEntry_DoNotUse_default_instance_); }
  void MergeFrom(const ::google::protobuf::Message& other) final;
  ::google::protobuf::Metadata GetMetadata() const;
};

// -------------------------------------------------------------------

class TestArenaMap_MapStringStringEntry_DoNotUse : public ::google::protobuf::internal::MapEntry<TestArenaMap_MapStringStringEntry_DoNotUse, 
    ::std::string, ::std::string,
    ::google::protobuf::internal::WireFormatLite::TYPE_STRING,
    ::google::protobuf::internal::WireFormatLite::TYPE_STRING,
    0 > {
public:
  typedef ::google::protobuf::internal::MapEntry<TestArenaMap_MapStringStringEntry_DoNotUse, 
    ::std::string, ::std::string,
    ::google::protobuf::internal::WireFormatLite::TYPE_STRING,
    ::google::protobuf::internal::WireFormatLite::TYPE_STRING,
    0 > SuperType;
  TestArenaMap_MapStringStringEntry_DoNotUse();
  TestArenaMap_MapStringStringEntry_DoNotUse(::google::protobuf::Arena* arena);
  void MergeFrom(const TestArenaMap_MapStringStringEntry_DoNotUse& other);
  static const TestArenaMap_MapStringStringEntry_DoNotUse* internal_default_instance() { return reinterpret_cast<const TestArenaMap_MapStringStringEntry_DoNotUse*>(&_TestArenaMap_MapStringStringEntry_DoNotUse_default_instance_); }
  void MergeFrom(const ::google::protobuf::Message& other) final;
  ::google::protobuf::Metadata GetMetadata() const;
};

// -------------------------------------------------------------------

class TestArenaMap_MapInt32BytesEntry_DoNotUse : public ::google::protobuf::internal::MapEntry<TestArenaMap_MapInt32BytesEntry_DoNotUse, 
    ::google::protobuf::int32, ::std::string,
    ::google::protobuf::internal::WireFormatLite::TYPE_INT32,
    ::google::protobuf::internal::WireFormatLite::TYPE_BYTES,
    0 > {
public:
  typedef ::google::protobuf::internal::MapEntry<TestArenaMap_MapInt32BytesEntry_DoNotUse, 
    ::google::protobuf::int32, ::std::string,
    ::google::protobuf::internal::WireFormatLite::TYPE_INT32,
    ::google::protobuf::internal::WireFormatLite::TYPE_BYTES,
    0 > SuperType;
  TestArenaMap_MapInt32BytesEntry_DoNotUse();
  TestArenaMap_MapInt32BytesEntry_DoNotUse(::google::protobuf::Arena* arena);
  void MergeFrom(const TestArenaMap_MapInt32BytesEntry_DoNotUse& other);
  static const TestArenaMap_MapInt32BytesEntry_DoNotUse* internal_default_instance() { return reinterpret_cast<const TestArenaMap_MapInt32BytesEntry_DoNotUse*>(&_TestArenaMap_MapInt32BytesEntry_DoNotUse_default_instance_); }
  void MergeFrom(const ::google::protobuf::Message& other) final;
  ::google::protobuf::Metadata GetMetadata() const;
};

// -------------------------------------------------------------------

class TestArenaMap_MapInt32EnumEntry_DoNotUse : public ::google::protobuf::internal::MapEntry<TestArenaMap_MapInt32EnumEntry_DoNotUse, 
    ::google::protobuf::int32, ::protobuf_unittest::MapEnum,
    ::google::protobuf::internal::WireFormatLite::TYPE_INT32,
    ::google::protobuf::internal::WireFormatLite::TYPE_ENUM,
    0 > {
public:
  typedef ::google::protobuf::internal::MapEntry<TestArenaMap_MapInt32EnumEntry_DoNotUse, 
    ::google::protobuf::int32, ::protobuf_unittest::MapEnum,
    ::google::protobuf::internal::WireFormatLite::TYPE_INT32,
    ::google::protobuf::internal::WireFormatLite::TYPE_ENUM,
    0 > SuperType;
  TestArenaMap_MapInt32EnumEntry_DoNotUse();
  TestArenaMap_MapInt32EnumEntry_DoNotUse(::google::protobuf::Arena* arena);
  void MergeFrom(const TestArenaMap_MapInt32EnumEntry_DoNotUse& other);
  static const TestArenaMap_MapInt32EnumEntry_DoNotUse* internal_default_instance() { return reinterpret_cast<const TestArenaMap_MapInt32EnumEntry_DoNotUse*>(&_TestArenaMap_MapInt32EnumEntry_DoNotUse_default_instance_); }
  void MergeFrom(const ::google::protobuf::Message& other) final;
  ::google::protobuf::Metadata GetMetadata() const;
};

// -------------------------------------------------------------------

class TestArenaMap_MapInt32ForeignMessageEntry_DoNotUse : public ::google::protobuf::internal::MapEntry<TestArenaMap_MapInt32ForeignMessageEntry_DoNotUse, 
    ::google::protobuf::int32, ::protobuf_unittest::ForeignMessage,
    ::google::protobuf::internal::WireFormatLite::TYPE_INT32,
    ::google::protobuf::internal::WireFormatLite::TYPE_MESSAGE,
    0 > {
public:
  typedef ::google::protobuf::internal::MapEntry<TestArenaMap_MapInt32ForeignMessageEntry_DoNotUse, 
    ::google::protobuf::int32, ::protobuf_unittest::ForeignMessage,
    ::google::protobuf::internal::WireFormatLite::TYPE_INT32,
    ::google::protobuf::internal::WireFormatLite::TYPE_MESSAGE,
    0 > SuperType;
  TestArenaMap_MapInt32ForeignMessageEntry_DoNotUse();
  TestArenaMap_MapInt32ForeignMessageEntry_DoNotUse(::google::protobuf::Arena* arena);
  void MergeFrom(const TestArenaMap_MapInt32ForeignMessageEntry_DoNotUse& other);
  static const TestArenaMap_MapInt32ForeignMessageEntry_DoNotUse* internal_default_instance() { return reinterpret_cast<const TestArenaMap_MapInt32ForeignMessageEntry_DoNotUse*>(&_TestArenaMap_MapInt32ForeignMessageEntry_DoNotUse_default_instance_); }
  void MergeFrom(const ::google::protobuf::Message& other) final;
  ::google::protobuf::Metadata GetMetadata() const;
};

// -------------------------------------------------------------------

class TestArenaMap_MapInt32ForeignMessageNoArenaEntry_DoNotUse : public ::google::protobuf::internal::MapEntry<TestArenaMap_MapInt32ForeignMessageNoArenaEntry_DoNotUse, 
    ::google::protobuf::int32, ::protobuf_unittest_no_arena::ForeignMessage,
    ::google::protobuf::internal::WireFormatLite::TYPE_INT32,
    ::google::protobuf::internal::WireFormatLite::TYPE_MESSAGE,
    0 > {
public:
  typedef ::google::protobuf::internal::MapEntry<TestArenaMap_MapInt32ForeignMessageNoArenaEntry_DoNotUse, 
    ::google::protobuf::int32, ::protobuf_unittest_no_arena::ForeignMessage,
    ::google::protobuf::internal::WireFormatLite::TYPE_INT32,
    ::google::protobuf::internal::WireFormatLite::TYPE_MESSAGE,
    0 > SuperType;
  TestArenaMap_MapInt32ForeignMessageNoArenaEntry_DoNotUse();
  TestArenaMap_MapInt32ForeignMessageNoArenaEntry_DoNotUse(::google::protobuf::Arena* arena);
  void MergeFrom(const TestArenaMap_MapInt32ForeignMessageNoArenaEntry_DoNotUse& other);
  static const TestArenaMap_MapInt32ForeignMessageNoArenaEntry_DoNotUse* internal_default_instance() { return reinterpret_cast<const TestArenaMap_MapInt32ForeignMessageNoArenaEntry_DoNotUse*>(&_TestArenaMap_MapInt32ForeignMessageNoArenaEntry_DoNotUse_default_instance_); }
  void MergeFrom(const ::google::protobuf::Message& other) final;
  ::google::protobuf::Metadata GetMetadata() const;
};

// -------------------------------------------------------------------

class TestArenaMap : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:protobuf_unittest.TestArenaMap) */ {
 public:
  TestArenaMap();
  virtual ~TestArenaMap();

  TestArenaMap(const TestArenaMap& from);

  inline TestArenaMap& operator=(const TestArenaMap& from) {
    CopyFrom(from);
    return *this;
  }
  #if LANG_CXX11
  TestArenaMap(TestArenaMap&& from) noexcept
    : TestArenaMap() {
    *this = ::std::move(from);
  }

  inline TestArenaMap& operator=(TestArenaMap&& from) noexcept {
    if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) {
      if (this != &from) InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }
  #endif
  inline ::google::protobuf::Arena* GetArena() const final {
    return GetArenaNoVirtual();
  }
  inline void* GetMaybeArenaPointer() const final {
    return MaybeArenaPtr();
  }
  static const ::google::protobuf::Descriptor* descriptor();
  static const TestArenaMap& default_instance();

  static void InitAsDefaultInstance();  // FOR INTERNAL USE ONLY
  static inline const TestArenaMap* internal_default_instance() {
    return reinterpret_cast<const TestArenaMap*>(
               &_TestArenaMap_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    46;

  void UnsafeArenaSwap(TestArenaMap* other);
  void Swap(TestArenaMap* other);
  friend void swap(TestArenaMap& a, TestArenaMap& b) {
    a.Swap(&b);
  }

  // implements Message ----------------------------------------------

  inline TestArenaMap* New() const final {
    return CreateMaybeMessage<TestArenaMap>(NULL);
  }

  TestArenaMap* New(::google::protobuf::Arena* arena) const final {
    return CreateMaybeMessage<TestArenaMap>(arena);
  }
  void CopyFrom(const ::google::protobuf::Message& from) final;
  void MergeFrom(const ::google::protobuf::Message& from) final;
  void CopyFrom(const TestArenaMap& from);
  void MergeFrom(const TestArenaMap& from);
  void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  bool MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input) final;
  void SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const final;
  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* target) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(TestArenaMap* other);
  protected:
  explicit TestArenaMap(::google::protobuf::Arena* arena);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::google::protobuf::Arena* arena);
  private:
  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
    return _internal_metadata_.arena();
  }
  inline void* MaybeArenaPtr() const {
    return _internal_metadata_.raw_arena_ptr();
  }
  public:

  ::google::protobuf::Metadata GetMetadata() const final;

  // nested types ----------------------------------------------------


  // accessors -------------------------------------------------------

  // map<int32, int32> map_int32_int32 = 1;
  int map_int32_int32_size() const;
  void clear_map_int32_int32();
  static const int kMapInt32Int32FieldNumber = 1;
  const ::google::protobuf::Map< ::google::protobuf::int32, ::google::protobuf::int32 >&
      map_int32_int32() const;
  ::google::protobuf::Map< ::google::protobuf::int32, ::google::protobuf::int32 >*
      mutable_map_int32_int32();

  // map<int64, int64> map_int64_int64 = 2;
  int map_int64_int64_size() const;
  void clear_map_int64_int64();
  static const int kMapInt64Int64FieldNumber = 2;
  const ::google::protobuf::Map< ::google::protobuf::int64, ::google::protobuf::int64 >&
      map_int64_int64() const;
  ::google::protobuf::Map< ::google::protobuf::int64, ::google::protobuf::int64 >*
      mutable_map_int64_int64();

  // map<uint32, uint32> map_uint32_uint32 = 3;
  int map_uint32_uint32_size() const;
  void clear_map_uint32_uint32();
  static const int kMapUint32Uint32FieldNumber = 3;
  const ::google::protobuf::Map< ::google::protobuf::uint32, ::google::protobuf::uint32 >&
      map_uint32_uint32() const;
  ::google::protobuf::Map< ::google::protobuf::uint32, ::google::protobuf::uint32 >*
      mutable_map_uint32_uint32();

  // map<uint64, uint64> map_uint64_uint64 = 4;
  int map_uint64_uint64_size() const;
  void clear_map_uint64_uint64();
  static const int kMapUint64Uint64FieldNumber = 4;
  const ::google::protobuf::Map< ::google::protobuf::uint64, ::google::protobuf::uint64 >&
      map_uint64_uint64() const;
  ::google::protobuf::Map< ::google::protobuf::uint64, ::google::protobuf::uint64 >*
      mutable_map_uint64_uint64();

  // map<sint32, sint32> map_sint32_sint32 = 5;
  int map_sint32_sint32_size() const;
  void clear_map_sint32_sint32();
  static const int kMapSint32Sint32FieldNumber = 5;
  const ::google::protobuf::Map< ::google::protobuf::int32, ::google::protobuf::int32 >&
      map_sint32_sint32() const;
  ::google::protobuf::Map< ::google::protobuf::int32, ::google::protobuf::int32 >*
      mutable_map_sint32_sint32();

  // map<sint64, sint64> map_sint64_sint64 = 6;
  int map_sint64_sint64_size() const;
  void clear_map_sint64_sint64();
  static const int kMapSint64Sint64FieldNumber = 6;
  const ::google::protobuf::Map< ::google::protobuf::int64, ::google::protobuf::int64 >&
      map_sint64_sint64() const;
  ::google::protobuf::Map< ::google::protobuf::int64, ::google::protobuf::int64 >*
      mutable_map_sint64_sint64();

  // map<fixed32, fixed32> map_fixed32_fixed32 = 7;
  int map_fixed32_fixed32_size() const;
  void clear_map_fixed32_fixed32();
  static const int kMapFixed32Fixed32FieldNumber = 7;
  const ::google::protobuf::Map< ::google::protobuf::uint32, ::google::protobuf::uint32 >&
      map_fixed32_fixed32() const;
  ::google::protobuf::Map< ::google::protobuf::uint32, ::google::protobuf::uint32 >*
      mutable_map_fixed32_fixed32();

  // map<fixed64, fixed64> map_fixed64_fixed64 = 8;
  int map_fixed64_fixed64_size() const;
  void clear_map_fixed64_fixed64();
  static const int kMapFixed64Fixed64FieldNumber = 8;
  const ::google::protobuf::Map< ::google::protobuf::uint64, ::google::protobuf::uint64 >&
      map_fixed64_fixed64() const;
  ::google::protobuf::Map< ::google::protobuf::uint64, ::google::protobuf::uint64 >*
      mutable_map_fixed64_fixed64();

  // map<sfixed32, sfixed32> map_sfixed32_sfixed32 = 9;
  int map_sfixed32_sfixed32_size() const;
  void clear_map_sfixed32_sfixed32();
  static const int kMapSfixed32Sfixed32FieldNumber = 9;
  const ::google::protobuf::Map< ::google::protobuf::int32, ::google::protobuf::int32 >&
      map_sfixed32_sfixed32() const;
  ::google::protobuf::Map< ::google::protobuf::int32, ::google::protobuf::int32 >*
      mutable_map_sfixed32_sfixed32();

  // map<sfixed64, sfixed64> map_sfixed64_sfixed64 = 10;
  int map_sfixed64_sfixed64_size() const;
  void clear_map_sfixed64_sfixed64();
  static const int kMapSfixed64Sfixed64FieldNumber = 10;
  const ::google::protobuf::Map< ::google::protobuf::int64, ::google::protobuf::int64 >&
      map_sfixed64_sfixed64() const;
  ::google::protobuf::Map< ::google::protobuf::int64, ::google::protobuf::int64 >*
      mutable_map_sfixed64_sfixed64();

  // map<int32, float> map_int32_float = 11;
  int map_int32_float_size() const;
  void clear_map_int32_float();
  static const int kMapInt32FloatFieldNumber = 11;
  const ::google::protobuf::Map< ::google::protobuf::int32, float >&
      map_int32_float() const;
  ::google::protobuf::Map< ::google::protobuf::int32, float >*
      mutable_map_int32_float();

  // map<int32, double> map_int32_double = 12;
  int map_int32_double_size() const;
  void clear_map_int32_double();
  static const int kMapInt32DoubleFieldNumber = 12;
  const ::google::protobuf::Map< ::google::protobuf::int32, double >&
      map_int32_double() const;
  ::google::protobuf::Map< ::google::protobuf::int32, double >*
      mutable_map_int32_double();

  // map<bool, bool> map_bool_bool = 13;
  int map_bool_bool_size() const;
  void clear_map_bool_bool();
  static const int kMapBoolBoolFieldNumber = 13;
  const ::google::protobuf::Map< bool, bool >&
      map_bool_bool() const;
  ::google::protobuf::Map< bool, bool >*
      mutable_map_bool_bool();

  // map<string, string> map_string_string = 14;
  int map_string_string_size() const;
  void clear_map_string_string();
  static const int kMapStringStringFieldNumber = 14;
  const ::google::protobuf::Map< ::std::string, ::std::string >&
      map_string_string() const;
  ::google::protobuf::Map< ::std::string, ::std::string >*
      mutable_map_string_string();

  // map<int32, bytes> map_int32_bytes = 15;
  int map_int32_bytes_size() const;
  void clear_map_int32_bytes();
  static const int kMapInt32BytesFieldNumber = 15;
  const ::google::protobuf::Map< ::google::protobuf::int32, ::std::string >&
      map_int32_bytes() const;
  ::google::protobuf::Map< ::google::protobuf::int32, ::std::string >*
      mutable_map_int32_bytes();

  // map<int32, .protobuf_unittest.MapEnum> map_int32_enum = 16;
  int map_int32_enum_size() const;
  void clear_map_int32_enum();
  static const int kMapInt32EnumFieldNumber = 16;
  const ::google::protobuf::Map< ::google::protobuf::int32, ::protobuf_unittest::MapEnum >&
      map_int32_enum() const;
  ::google::protobuf::Map< ::google::protobuf::int32, ::protobuf_unittest::MapEnum >*
      mutable_map_int32_enum();

  // map<int32, .protobuf_unittest.ForeignMessage> map_int32_foreign_message = 17;
  int map_int32_foreign_message_size() const;
  void clear_map_int32_foreign_message();
  static const int kMapInt32ForeignMessageFieldNumber = 17;
  const ::google::protobuf::Map< ::google::protobuf::int32, ::protobuf_unittest::ForeignMessage >&
      map_int32_foreign_message() const;
  ::google::protobuf::Map< ::google::protobuf::int32, ::protobuf_unittest::ForeignMessage >*
      mutable_map_int32_foreign_message();

  // map<int32, .protobuf_unittest_no_arena.ForeignMessage> map_int32_foreign_message_no_arena = 18;
  int map_int32_foreign_message_no_arena_size() const;
  void clear_map_int32_foreign_message_no_arena();
  static const int kMapInt32ForeignMessageNoArenaFieldNumber = 18;
  const ::google::protobuf::Map< ::google::protobuf::int32, ::protobuf_unittest_no_arena::ForeignMessage >&
      map_int32_foreign_message_no_arena() const;
  ::google::protobuf::Map< ::google::protobuf::int32, ::protobuf_unittest_no_arena::ForeignMessage >*
      mutable_map_int32_foreign_message_no_arena();

  // @@protoc_insertion_point(class_scope:protobuf_unittest.TestArenaMap)
 private:

  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
  template <typename T> friend class ::google::protobuf::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::google::protobuf::internal::MapField<
      TestArenaMap_MapInt32Int32Entry_DoNotUse,
      ::google::protobuf::int32, ::google::protobuf::int32,
      ::google::protobuf::internal::WireFormatLite::TYPE_INT32,
      ::google::protobuf::internal::WireFormatLite::TYPE_INT32,
      0 > map_int32_int32_;
  ::google::protobuf::internal::MapField<
      TestArenaMap_MapInt64Int64Entry_DoNotUse,
      ::google::protobuf::int64, ::google::protobuf::int64,
      ::google::protobuf::internal::WireFormatLite::TYPE_INT64,
      ::google::protobuf::internal::WireFormatLite::TYPE_INT64,
      0 > map_int64_int64_;
  ::google::protobuf::internal::MapField<
      TestArenaMap_MapUint32Uint32Entry_DoNotUse,
      ::google::protobuf::uint32, ::google::protobuf::uint32,
      ::google::protobuf::internal::WireFormatLite::TYPE_UINT32,
      ::google::protobuf::internal::WireFormatLite::TYPE_UINT32,
      0 > map_uint32_uint32_;
  ::google::protobuf::internal::MapField<
      TestArenaMap_MapUint64Uint64Entry_DoNotUse,
      ::google::protobuf::uint64, ::google::protobuf::uint64,
      ::google::protobuf::internal::WireFormatLite::TYPE_UINT64,
      ::google::protobuf::internal::WireFormatLite::TYPE_UINT64,
      0 > map_uint64_uint64_;
  ::google::protobuf::internal::MapField<
      TestArenaMap_MapSint32Sint32Entry_DoNotUse,
      ::google::protobuf::int32, ::google::protobuf::int32,
      ::google::protobuf::internal::WireFormatLite::TYPE_SINT32,
      ::google::protobuf::internal::WireFormatLite::TYPE_SINT32,
      0 > map_sint32_sint32_;
  ::google::protobuf::internal::MapField<
      TestArenaMap_MapSint64Sint64Entry_DoNotUse,
      ::google::protobuf::int64, ::google::protobuf::int64,
      ::google::protobuf::internal::WireFormatLite::TYPE_SINT64,
      ::google::protobuf::internal::WireFormatLite::TYPE_SINT64,
      0 > map_sint64_sint64_;
  ::google::protobuf::internal::MapField<
      TestArenaMap_MapFixed32Fixed32Entry_DoNotUse,
      ::google::protobuf::uint32, ::google::protobuf::uint32,
      ::google::protobuf::internal::WireFormatLite::TYPE_FIXED32,
      ::google::protobuf::internal::WireFormatLite::TYPE_FIXED32,
      0 > map_fixed32_fixed32_;
  ::google::protobuf::internal::MapField<
      TestArenaMap_MapFixed64Fixed64Entry_DoNotUse,
      ::google::protobuf::uint64, ::google::protobuf::uint64,
      ::google::protobuf::internal::WireFormatLite::TYPE_FIXED64,
      ::google::protobuf::internal::WireFormatLite::TYPE_FIXED64,
      0 > map_fixed64_fixed64_;
  ::google::protobuf::internal::MapField<
      TestArenaMap_MapSfixed32Sfixed32Entry_DoNotUse,
      ::google::protobuf::int32, ::google::protobuf::int32,
      ::google::protobuf::internal::WireFormatLite::TYPE_SFIXED32,
      ::google::protobuf::internal::WireFormatLite::TYPE_SFIXED32,
      0 > map_sfixed32_sfixed32_;
  ::google::protobuf::internal::MapField<
      TestArenaMap_MapSfixed64Sfixed64Entry_DoNotUse,
      ::google::protobuf::int64, ::google::protobuf::int64,
      ::google::protobuf::internal::WireFormatLite::TYPE_SFIXED64,
      ::google::protobuf::internal::WireFormatLite::TYPE_SFIXED64,
      0 > map_sfixed64_sfixed64_;
  ::google::protobuf::internal::MapField<
      TestArenaMap_MapInt32FloatEntry_DoNotUse,
      ::google::protobuf::int32, float,
      ::google::protobuf::internal::WireFormatLite::TYPE_INT32,
      ::google::protobuf::internal::WireFormatLite::TYPE_FLOAT,
      0 > map_int32_float_;
  ::google::protobuf::internal::MapField<
      TestArenaMap_MapInt32DoubleEntry_DoNotUse,
      ::google::protobuf::int32, double,
      ::google::protobuf::internal::WireFormatLite::TYPE_INT32,
      ::google::protobuf::internal::WireFormatLite::TYPE_DOUBLE,
      0 > map_int32_double_;
  ::google::protobuf::internal::MapField<
      TestArenaMap_MapBoolBoolEntry_DoNotUse,
      bool, bool,
      ::google::protobuf::internal::WireFormatLite::TYPE_BOOL,
      ::google::protobuf::internal::WireFormatLite::TYPE_BOOL,
      0 > map_bool_bool_;
  ::google::protobuf::internal::MapField<
      TestArenaMap_MapStringStringEntry_DoNotUse,
      ::std::string, ::std::string,
      ::google::protobuf::internal::WireFormatLite::TYPE_STRING,
      ::google::protobuf::internal::WireFormatLite::TYPE_STRING,
      0 > map_string_string_;
  ::google::protobuf::internal::MapField<
      TestArenaMap_MapInt32BytesEntry_DoNotUse,
      ::google::protobuf::int32, ::std::string,
      ::google::protobuf::internal::WireFormatLite::TYPE_INT32,
      ::google::protobuf::internal::WireFormatLite::TYPE_BYTES,
      0 > map_int32_bytes_;
  ::google::protobuf::internal::MapField<
      TestArenaMap_MapInt32EnumEntry_DoNotUse,
      ::google::protobuf::int32, ::protobuf_unittest::MapEnum,
      ::google::protobuf::internal::WireFormatLite::TYPE_INT32,
      ::google::protobuf::internal::WireFormatLite::TYPE_ENUM,
      0 > map_int32_enum_;
  ::google::protobuf::internal::MapField<
      TestArenaMap_MapInt32ForeignMessageEntry_DoNotUse,
      ::google::protobuf::int32, ::protobuf_unittest::ForeignMessage,
      ::google::protobuf::internal::WireFormatLite::TYPE_INT32,
      ::google::protobuf::internal::WireFormatLite::TYPE_MESSAGE,
      0 > map_int32_foreign_message_;
  ::google::protobuf::internal::MapField<
      TestArenaMap_MapInt32ForeignMessageNoArenaEntry_DoNotUse,
      ::google::protobuf::int32, ::protobuf_unittest_no_arena::ForeignMessage,
      ::google::protobuf::internal::WireFormatLite::TYPE_INT32,
      ::google::protobuf::internal::WireFormatLite::TYPE_MESSAGE,
      0 > map_int32_foreign_message_no_arena_;
  mutable ::google::protobuf::internal::CachedSize _cached_size_;
  friend struct ::protobuf_google_2fprotobuf_2fmap_5funittest_2eproto::TableStruct;
};
// -------------------------------------------------------------------

class MessageContainingEnumCalledType_TypeEntry_DoNotUse : public ::google::protobuf::internal::MapEntry<MessageContainingEnumCalledType_TypeEntry_DoNotUse, 
    ::std::string, ::protobuf_unittest::MessageContainingEnumCalledType,
    ::google::protobuf::internal::WireFormatLite::TYPE_STRING,
    ::google::protobuf::internal::WireFormatLite::TYPE_MESSAGE,
    0 > {
public:
  typedef ::google::protobuf::internal::MapEntry<MessageContainingEnumCalledType_TypeEntry_DoNotUse, 
    ::std::string, ::protobuf_unittest::MessageContainingEnumCalledType,
    ::google::protobuf::internal::WireFormatLite::TYPE_STRING,
    ::google::protobuf::internal::WireFormatLite::TYPE_MESSAGE,
    0 > SuperType;
  MessageContainingEnumCalledType_TypeEntry_DoNotUse();
  MessageContainingEnumCalledType_TypeEntry_DoNotUse(::google::protobuf::Arena* arena);
  void MergeFrom(const MessageContainingEnumCalledType_TypeEntry_DoNotUse& other);
  static const MessageContainingEnumCalledType_TypeEntry_DoNotUse* internal_default_instance() { return reinterpret_cast<const MessageContainingEnumCalledType_TypeEntry_DoNotUse*>(&_MessageContainingEnumCalledType_TypeEntry_DoNotUse_default_instance_); }
  void MergeFrom(const ::google::protobuf::Message& other) final;
  ::google::protobuf::Metadata GetMetadata() const;
};

// -------------------------------------------------------------------

class MessageContainingEnumCalledType : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:protobuf_unittest.MessageContainingEnumCalledType) */ {
 public:
  MessageContainingEnumCalledType();
  virtual ~MessageContainingEnumCalledType();

  MessageContainingEnumCalledType(const MessageContainingEnumCalledType& from);

  inline MessageContainingEnumCalledType& operator=(const MessageContainingEnumCalledType& from) {
    CopyFrom(from);
    return *this;
  }
  #if LANG_CXX11
  MessageContainingEnumCalledType(MessageContainingEnumCalledType&& from) noexcept
    : MessageContainingEnumCalledType() {
    *this = ::std::move(from);
  }

  inline MessageContainingEnumCalledType& operator=(MessageContainingEnumCalledType&& from) noexcept {
    if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) {
      if (this != &from) InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }
  #endif
  inline ::google::protobuf::Arena* GetArena() const final {
    return GetArenaNoVirtual();
  }
  inline void* GetMaybeArenaPointer() const final {
    return MaybeArenaPtr();
  }
  static const ::google::protobuf::Descriptor* descriptor();
  static const MessageContainingEnumCalledType& default_instance();

  static void InitAsDefaultInstance();  // FOR INTERNAL USE ONLY
  static inline const MessageContainingEnumCalledType* internal_default_instance() {
    return reinterpret_cast<const MessageContainingEnumCalledType*>(
               &_MessageContainingEnumCalledType_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    48;

  void UnsafeArenaSwap(MessageContainingEnumCalledType* other);
  void Swap(MessageContainingEnumCalledType* other);
  friend void swap(MessageContainingEnumCalledType& a, MessageContainingEnumCalledType& b) {
    a.Swap(&b);
  }

  // implements Message ----------------------------------------------

  inline MessageContainingEnumCalledType* New() const final {
    return CreateMaybeMessage<MessageContainingEnumCalledType>(NULL);
  }

  MessageContainingEnumCalledType* New(::google::protobuf::Arena* arena) const final {
    return CreateMaybeMessage<MessageContainingEnumCalledType>(arena);
  }
  void CopyFrom(const ::google::protobuf::Message& from) final;
  void MergeFrom(const ::google::protobuf::Message& from) final;
  void CopyFrom(const MessageContainingEnumCalledType& from);
  void MergeFrom(const MessageContainingEnumCalledType& from);
  void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  bool MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input) final;
  void SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const final;
  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* target) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(MessageContainingEnumCalledType* other);
  protected:
  explicit MessageContainingEnumCalledType(::google::protobuf::Arena* arena);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::google::protobuf::Arena* arena);
  private:
  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
    return _internal_metadata_.arena();
  }
  inline void* MaybeArenaPtr() const {
    return _internal_metadata_.raw_arena_ptr();
  }
  public:

  ::google::protobuf::Metadata GetMetadata() const final;

  // nested types ----------------------------------------------------


  typedef MessageContainingEnumCalledType_Type Type;
  static const Type TYPE_FOO =
    MessageContainingEnumCalledType_Type_TYPE_FOO;
  static inline bool Type_IsValid(int value) {
    return MessageContainingEnumCalledType_Type_IsValid(value);
  }
  static const Type Type_MIN =
    MessageContainingEnumCalledType_Type_Type_MIN;
  static const Type Type_MAX =
    MessageContainingEnumCalledType_Type_Type_MAX;
  static const int Type_ARRAYSIZE =
    MessageContainingEnumCalledType_Type_Type_ARRAYSIZE;
  static inline const ::google::protobuf::EnumDescriptor*
  Type_descriptor() {
    return MessageContainingEnumCalledType_Type_descriptor();
  }
  static inline const ::std::string& Type_Name(Type value) {
    return MessageContainingEnumCalledType_Type_Name(value);
  }
  static inline bool Type_Parse(const ::std::string& name,
      Type* value) {
    return MessageContainingEnumCalledType_Type_Parse(name, value);
  }

  // accessors -------------------------------------------------------

  // map<string, .protobuf_unittest.MessageContainingEnumCalledType> type = 1;
  int type_size() const;
  void clear_type();
  static const int kTypeFieldNumber = 1;
  const ::google::protobuf::Map< ::std::string, ::protobuf_unittest::MessageContainingEnumCalledType >&
      type() const;
  ::google::protobuf::Map< ::std::string, ::protobuf_unittest::MessageContainingEnumCalledType >*
      mutable_type();

  // @@protoc_insertion_point(class_scope:protobuf_unittest.MessageContainingEnumCalledType)
 private:

  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
  template <typename T> friend class ::google::protobuf::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::google::protobuf::internal::MapField<
      MessageContainingEnumCalledType_TypeEntry_DoNotUse,
      ::std::string, ::protobuf_unittest::MessageContainingEnumCalledType,
      ::google::protobuf::internal::WireFormatLite::TYPE_STRING,
      ::google::protobuf::internal::WireFormatLite::TYPE_MESSAGE,
      0 > type_;
  mutable ::google::protobuf::internal::CachedSize _cached_size_;
  friend struct ::protobuf_google_2fprotobuf_2fmap_5funittest_2eproto::TableStruct;
};
// -------------------------------------------------------------------

class MessageContainingMapCalledEntry_EntryEntry_DoNotUse : public ::google::protobuf::internal::MapEntry<MessageContainingMapCalledEntry_EntryEntry_DoNotUse, 
    ::google::protobuf::int32, ::google::protobuf::int32,
    ::google::protobuf::internal::WireFormatLite::TYPE_INT32,
    ::google::protobuf::internal::WireFormatLite::TYPE_INT32,
    0 > {
public:
  typedef ::google::protobuf::internal::MapEntry<MessageContainingMapCalledEntry_EntryEntry_DoNotUse, 
    ::google::protobuf::int32, ::google::protobuf::int32,
    ::google::protobuf::internal::WireFormatLite::TYPE_INT32,
    ::google::protobuf::internal::WireFormatLite::TYPE_INT32,
    0 > SuperType;
  MessageContainingMapCalledEntry_EntryEntry_DoNotUse();
  MessageContainingMapCalledEntry_EntryEntry_DoNotUse(::google::protobuf::Arena* arena);
  void MergeFrom(const MessageContainingMapCalledEntry_EntryEntry_DoNotUse& other);
  static const MessageContainingMapCalledEntry_EntryEntry_DoNotUse* internal_default_instance() { return reinterpret_cast<const MessageContainingMapCalledEntry_EntryEntry_DoNotUse*>(&_MessageContainingMapCalledEntry_EntryEntry_DoNotUse_default_instance_); }
  void MergeFrom(const ::google::protobuf::Message& other) final;
  ::google::protobuf::Metadata GetMetadata() const;
};

// -------------------------------------------------------------------

class MessageContainingMapCalledEntry : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:protobuf_unittest.MessageContainingMapCalledEntry) */ {
 public:
  MessageContainingMapCalledEntry();
  virtual ~MessageContainingMapCalledEntry();

  MessageContainingMapCalledEntry(const MessageContainingMapCalledEntry& from);

  inline MessageContainingMapCalledEntry& operator=(const MessageContainingMapCalledEntry& from) {
    CopyFrom(from);
    return *this;
  }
  #if LANG_CXX11
  MessageContainingMapCalledEntry(MessageContainingMapCalledEntry&& from) noexcept
    : MessageContainingMapCalledEntry() {
    *this = ::std::move(from);
  }

  inline MessageContainingMapCalledEntry& operator=(MessageContainingMapCalledEntry&& from) noexcept {
    if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) {
      if (this != &from) InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }
  #endif
  inline ::google::protobuf::Arena* GetArena() const final {
    return GetArenaNoVirtual();
  }
  inline void* GetMaybeArenaPointer() const final {
    return MaybeArenaPtr();
  }
  static const ::google::protobuf::Descriptor* descriptor();
  static const MessageContainingMapCalledEntry& default_instance();

  static void InitAsDefaultInstance();  // FOR INTERNAL USE ONLY
  static inline const MessageContainingMapCalledEntry* internal_default_instance() {
    return reinterpret_cast<const MessageContainingMapCalledEntry*>(
               &_MessageContainingMapCalledEntry_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    50;

  void UnsafeArenaSwap(MessageContainingMapCalledEntry* other);
  void Swap(MessageContainingMapCalledEntry* other);
  friend void swap(MessageContainingMapCalledEntry& a, MessageContainingMapCalledEntry& b) {
    a.Swap(&b);
  }

  // implements Message ----------------------------------------------

  inline MessageContainingMapCalledEntry* New() const final {
    return CreateMaybeMessage<MessageContainingMapCalledEntry>(NULL);
  }

  MessageContainingMapCalledEntry* New(::google::protobuf::Arena* arena) const final {
    return CreateMaybeMessage<MessageContainingMapCalledEntry>(arena);
  }
  void CopyFrom(const ::google::protobuf::Message& from) final;
  void MergeFrom(const ::google::protobuf::Message& from) final;
  void CopyFrom(const MessageContainingMapCalledEntry& from);
  void MergeFrom(const MessageContainingMapCalledEntry& from);
  void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  bool MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input) final;
  void SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const final;
  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* target) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(MessageContainingMapCalledEntry* other);
  protected:
  explicit MessageContainingMapCalledEntry(::google::protobuf::Arena* arena);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::google::protobuf::Arena* arena);
  private:
  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
    return _internal_metadata_.arena();
  }
  inline void* MaybeArenaPtr() const {
    return _internal_metadata_.raw_arena_ptr();
  }
  public:

  ::google::protobuf::Metadata GetMetadata() const final;

  // nested types ----------------------------------------------------


  // accessors -------------------------------------------------------

  // map<int32, int32> entry = 1;
  int entry_size() const;
  void clear_entry();
  static const int kEntryFieldNumber = 1;
  const ::google::protobuf::Map< ::google::protobuf::int32, ::google::protobuf::int32 >&
      entry() const;
  ::google::protobuf::Map< ::google::protobuf::int32, ::google::protobuf::int32 >*
      mutable_entry();

  // @@protoc_insertion_point(class_scope:protobuf_unittest.MessageContainingMapCalledEntry)
 private:

  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
  template <typename T> friend class ::google::protobuf::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::google::protobuf::internal::MapField<
      MessageContainingMapCalledEntry_EntryEntry_DoNotUse,
      ::google::protobuf::int32, ::google::protobuf::int32,
      ::google::protobuf::internal::WireFormatLite::TYPE_INT32,
      ::google::protobuf::internal::WireFormatLite::TYPE_INT32,
      0 > entry_;
  mutable ::google::protobuf::internal::CachedSize _cached_size_;
  friend struct ::protobuf_google_2fprotobuf_2fmap_5funittest_2eproto::TableStruct;
};
// -------------------------------------------------------------------

class TestRecursiveMapMessage_AEntry_DoNotUse : public ::google::protobuf::internal::MapEntry<TestRecursiveMapMessage_AEntry_DoNotUse, 
    ::std::string, ::protobuf_unittest::TestRecursiveMapMessage,
    ::google::protobuf::internal::WireFormatLite::TYPE_STRING,
    ::google::protobuf::internal::WireFormatLite::TYPE_MESSAGE,
    0 > {
public:
  typedef ::google::protobuf::internal::MapEntry<TestRecursiveMapMessage_AEntry_DoNotUse, 
    ::std::string, ::protobuf_unittest::TestRecursiveMapMessage,
    ::google::protobuf::internal::WireFormatLite::TYPE_STRING,
    ::google::protobuf::internal::WireFormatLite::TYPE_MESSAGE,
    0 > SuperType;
  TestRecursiveMapMessage_AEntry_DoNotUse();
  TestRecursiveMapMessage_AEntry_DoNotUse(::google::protobuf::Arena* arena);
  void MergeFrom(const TestRecursiveMapMessage_AEntry_DoNotUse& other);
  static const TestRecursiveMapMessage_AEntry_DoNotUse* internal_default_instance() { return reinterpret_cast<const TestRecursiveMapMessage_AEntry_DoNotUse*>(&_TestRecursiveMapMessage_AEntry_DoNotUse_default_instance_); }
  void MergeFrom(const ::google::protobuf::Message& other) final;
  ::google::protobuf::Metadata GetMetadata() const;
};

// -------------------------------------------------------------------

class TestRecursiveMapMessage : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:protobuf_unittest.TestRecursiveMapMessage) */ {
 public:
  TestRecursiveMapMessage();
  virtual ~TestRecursiveMapMessage();

  TestRecursiveMapMessage(const TestRecursiveMapMessage& from);

  inline TestRecursiveMapMessage& operator=(const TestRecursiveMapMessage& from) {
    CopyFrom(from);
    return *this;
  }
  #if LANG_CXX11
  TestRecursiveMapMessage(TestRecursiveMapMessage&& from) noexcept
    : TestRecursiveMapMessage() {
    *this = ::std::move(from);
  }

  inline TestRecursiveMapMessage& operator=(TestRecursiveMapMessage&& from) noexcept {
    if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) {
      if (this != &from) InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }
  #endif
  inline ::google::protobuf::Arena* GetArena() const final {
    return GetArenaNoVirtual();
  }
  inline void* GetMaybeArenaPointer() const final {
    return MaybeArenaPtr();
  }
  static const ::google::protobuf::Descriptor* descriptor();
  static const TestRecursiveMapMessage& default_instance();

  static void InitAsDefaultInstance();  // FOR INTERNAL USE ONLY
  static inline const TestRecursiveMapMessage* internal_default_instance() {
    return reinterpret_cast<const TestRecursiveMapMessage*>(
               &_TestRecursiveMapMessage_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    52;

  void UnsafeArenaSwap(TestRecursiveMapMessage* other);
  void Swap(TestRecursiveMapMessage* other);
  friend void swap(TestRecursiveMapMessage& a, TestRecursiveMapMessage& b) {
    a.Swap(&b);
  }

  // implements Message ----------------------------------------------

  inline TestRecursiveMapMessage* New() const final {
    return CreateMaybeMessage<TestRecursiveMapMessage>(NULL);
  }

  TestRecursiveMapMessage* New(::google::protobuf::Arena* arena) const final {
    return CreateMaybeMessage<TestRecursiveMapMessage>(arena);
  }
  void CopyFrom(const ::google::protobuf::Message& from) final;
  void MergeFrom(const ::google::protobuf::Message& from) final;
  void CopyFrom(const TestRecursiveMapMessage& from);
  void MergeFrom(const TestRecursiveMapMessage& from);
  void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  bool MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input) final;
  void SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const final;
  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
      bool deterministic, ::google::protobuf::uint8* target) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(TestRecursiveMapMessage* other);
  protected:
  explicit TestRecursiveMapMessage(::google::protobuf::Arena* arena);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::google::protobuf::Arena* arena);
  private:
  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
    return _internal_metadata_.arena();
  }
  inline void* MaybeArenaPtr() const {
    return _internal_metadata_.raw_arena_ptr();
  }
  public:

  ::google::protobuf::Metadata GetMetadata() const final;

  // nested types ----------------------------------------------------


  // accessors -------------------------------------------------------

  // map<string, .protobuf_unittest.TestRecursiveMapMessage> a = 1;
  int a_size() const;
  void clear_a();
  static const int kAFieldNumber = 1;
  const ::google::protobuf::Map< ::std::string, ::protobuf_unittest::TestRecursiveMapMessage >&
      a() const;
  ::google::protobuf::Map< ::std::string, ::protobuf_unittest::TestRecursiveMapMessage >*
      mutable_a();

  // @@protoc_insertion_point(class_scope:protobuf_unittest.TestRecursiveMapMessage)
 private:

  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
  template <typename T> friend class ::google::protobuf::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::google::protobuf::internal::MapField<
      TestRecursiveMapMessage_AEntry_DoNotUse,
      ::std::string, ::protobuf_unittest::TestRecursiveMapMessage,
      ::google::protobuf::internal::WireFormatLite::TYPE_STRING,
      ::google::protobuf::internal::WireFormatLite::TYPE_MESSAGE,
      0 > a_;
  mutable ::google::protobuf::internal::CachedSize _cached_size_;
  friend struct ::protobuf_google_2fprotobuf_2fmap_5funittest_2eproto::TableStruct;
};
// ===================================================================


// ===================================================================

#ifdef __GNUC__
  #pragma GCC diagnostic push
  #pragma GCC diagnostic ignored "-Wstrict-aliasing"
#endif  // __GNUC__
// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// TestMap

// map<int32, int32> map_int32_int32 = 1;
inline int TestMap::map_int32_int32_size() const {
  return map_int32_int32_.size();
}
inline void TestMap::clear_map_int32_int32() {
  map_int32_int32_.Clear();
}
inline const ::google::protobuf::Map< ::google::protobuf::int32, ::google::protobuf::int32 >&
TestMap::map_int32_int32() const {
  // @@protoc_insertion_point(field_map:protobuf_unittest.TestMap.map_int32_int32)
  return map_int32_int32_.GetMap();
}
inline ::google::protobuf::Map< ::google::protobuf::int32, ::google::protobuf::int32 >*
TestMap::mutable_map_int32_int32() {
  // @@protoc_insertion_point(field_mutable_map:protobuf_unittest.TestMap.map_int32_int32)
  return map_int32_int32_.MutableMap();
}

// map<int64, int64> map_int64_int64 = 2;
inline int TestMap::map_int64_int64_size() const {
  return map_int64_int64_.size();
}
inline void TestMap::clear_map_int64_int64() {
  map_int64_int64_.Clear();
}
inline const ::google::protobuf::Map< ::google::protobuf::int64, ::google::protobuf::int64 >&
TestMap::map_int64_int64() const {
  // @@protoc_insertion_point(field_map:protobuf_unittest.TestMap.map_int64_int64)
  return map_int64_int64_.GetMap();
}
inline ::google::protobuf::Map< ::google::protobuf::int64, ::google::protobuf::int64 >*
TestMap::mutable_map_int64_int64() {
  // @@protoc_insertion_point(field_mutable_map:protobuf_unittest.TestMap.map_int64_int64)
  return map_int64_int64_.MutableMap();
}

// map<uint32, uint32> map_uint32_uint32 = 3;
inline int TestMap::map_uint32_uint32_size() const {
  return map_uint32_uint32_.size();
}
inline void TestMap::clear_map_uint32_uint32() {
  map_uint32_uint32_.Clear();
}
inline const ::google::protobuf::Map< ::google::protobuf::uint32, ::google::protobuf::uint32 >&
TestMap::map_uint32_uint32() const {
  // @@protoc_insertion_point(field_map:protobuf_unittest.TestMap.map_uint32_uint32)
  return map_uint32_uint32_.GetMap();
}
inline ::google::protobuf::Map< ::google::protobuf::uint32, ::google::protobuf::uint32 >*
TestMap::mutable_map_uint32_uint32() {
  // @@protoc_insertion_point(field_mutable_map:protobuf_unittest.TestMap.map_uint32_uint32)
  return map_uint32_uint32_.MutableMap();
}

// map<uint64, uint64> map_uint64_uint64 = 4;
inline int TestMap::map_uint64_uint64_size() const {
  return map_uint64_uint64_.size();
}
inline void TestMap::clear_map_uint64_uint64() {
  map_uint64_uint64_.Clear();
}
inline const ::google::protobuf::Map< ::google::protobuf::uint64, ::google::protobuf::uint64 >&
TestMap::map_uint64_uint64() const {
  // @@protoc_insertion_point(field_map:protobuf_unittest.TestMap.map_uint64_uint64)
  return map_uint64_uint64_.GetMap();
}
inline ::google::protobuf::Map< ::google::protobuf::uint64, ::google::protobuf::uint64 >*
TestMap::mutable_map_uint64_uint64() {
  // @@protoc_insertion_point(field_mutable_map:protobuf_unittest.TestMap.map_uint64_uint64)
  return map_uint64_uint64_.MutableMap();
}

// map<sint32, sint32> map_sint32_sint32 = 5;
inline int TestMap::map_sint32_sint32_size() const {
  return map_sint32_sint32_.size();
}
inline void TestMap::clear_map_sint32_sint32() {
  map_sint32_sint32_.Clear();
}
inline const ::google::protobuf::Map< ::google::protobuf::int32, ::google::protobuf::int32 >&
TestMap::map_sint32_sint32() const {
  // @@protoc_insertion_point(field_map:protobuf_unittest.TestMap.map_sint32_sint32)
  return map_sint32_sint32_.GetMap();
}
inline ::google::protobuf::Map< ::google::protobuf::int32, ::google::protobuf::int32 >*
TestMap::mutable_map_sint32_sint32() {
  // @@protoc_insertion_point(field_mutable_map:protobuf_unittest.TestMap.map_sint32_sint32)
  return map_sint32_sint32_.MutableMap();
}

// map<sint64, sint64> map_sint64_sint64 = 6;
inline int TestMap::map_sint64_sint64_size() const {
  return map_sint64_sint64_.size();
}
inline void TestMap::clear_map_sint64_sint64() {
  map_sint64_sint64_.Clear();
}
inline const ::google::protobuf::Map< ::google::protobuf::int64, ::google::protobuf::int64 >&
TestMap::map_sint64_sint64() const {
  // @@protoc_insertion_point(field_map:protobuf_unittest.TestMap.map_sint64_sint64)
  return map_sint64_sint64_.GetMap();
}
inline ::google::protobuf::Map< ::google::protobuf::int64, ::google::protobuf::int64 >*
TestMap::mutable_map_sint64_sint64() {
  // @@protoc_insertion_point(field_mutable_map:protobuf_unittest.TestMap.map_sint64_sint64)
  return map_sint64_sint64_.MutableMap();
}

// map<fixed32, fixed32> map_fixed32_fixed32 = 7;
inline int TestMap::map_fixed32_fixed32_size() const {
  return map_fixed32_fixed32_.size();
}
inline void TestMap::clear_map_fixed32_fixed32() {
  map_fixed32_fixed32_.Clear();
}
inline const ::google::protobuf::Map< ::google::protobuf::uint32, ::google::protobuf::uint32 >&
TestMap::map_fixed32_fixed32() const {
  // @@protoc_insertion_point(field_map:protobuf_unittest.TestMap.map_fixed32_fixed32)
  return map_fixed32_fixed32_.GetMap();
}
inline ::google::protobuf::Map< ::google::protobuf::uint32, ::google::protobuf::uint32 >*
TestMap::mutable_map_fixed32_fixed32() {
  // @@protoc_insertion_point(field_mutable_map:protobuf_unittest.TestMap.map_fixed32_fixed32)
  return map_fixed32_fixed32_.MutableMap();
}

// map<fixed64, fixed64> map_fixed64_fixed64 = 8;
inline int TestMap::map_fixed64_fixed64_size() const {
  return map_fixed64_fixed64_.size();
}
inline void TestMap::clear_map_fixed64_fixed64() {
  map_fixed64_fixed64_.Clear();
}
inline const ::google::protobuf::Map< ::google::protobuf::uint64, ::google::protobuf::uint64 >&
TestMap::map_fixed64_fixed64() const {
  // @@protoc_insertion_point(field_map:protobuf_unittest.TestMap.map_fixed64_fixed64)
  return map_fixed64_fixed64_.GetMap();
}
inline ::google::protobuf::Map< ::google::protobuf::uint64, ::google::protobuf::uint64 >*
TestMap::mutable_map_fixed64_fixed64() {
  // @@protoc_insertion_point(field_mutable_map:protobuf_unittest.TestMap.map_fixed64_fixed64)
  return map_fixed64_fixed64_.MutableMap();
}

// map<sfixed32, sfixed32> map_sfixed32_sfixed32 = 9;
inline int TestMap::map_sfixed32_sfixed32_size() const {
  return map_sfixed32_sfixed32_.size();
}
inline void TestMap::clear_map_sfixed32_sfixed32() {
  map_sfixed32_sfixed32_.Clear();
}
inline const ::google::protobuf::Map< ::google::protobuf::int32, ::google::protobuf::int32 >&
TestMap::map_sfixed32_sfixed32() const {
  // @@protoc_insertion_point(field_map:protobuf_unittest.TestMap.map_sfixed32_sfixed32)
  return map_sfixed32_sfixed32_.GetMap();
}
inline ::google::protobuf::Map< ::google::protobuf::int32, ::google::protobuf::int32 >*
TestMap::mutable_map_sfixed32_sfixed32() {
  // @@protoc_insertion_point(field_mutable_map:protobuf_unittest.TestMap.map_sfixed32_sfixed32)
  return map_sfixed32_sfixed32_.MutableMap();
}

// map<sfixed64, sfixed64> map_sfixed64_sfixed64 = 10;
inline int TestMap::map_sfixed64_sfixed64_size() const {
  return map_sfixed64_sfixed64_.size();
}
inline void TestMap::clear_map_sfixed64_sfixed64() {
  map_sfixed64_sfixed64_.Clear();
}
inline const ::google::protobuf::Map< ::google::protobuf::int64, ::google::protobuf::int64 >&
TestMap::map_sfixed64_sfixed64() const {
  // @@protoc_insertion_point(field_map:protobuf_unittest.TestMap.map_sfixed64_sfixed64)
  return map_sfixed64_sfixed64_.GetMap();
}
inline ::google::protobuf::Map< ::google::protobuf::int64, ::google::protobuf::int64 >*
TestMap::mutable_map_sfixed64_sfixed64() {
  // @@protoc_insertion_point(field_mutable_map:protobuf_unittest.TestMap.map_sfixed64_sfixed64)
  return map_sfixed64_sfixed64_.MutableMap();
}

// map<int32, float> map_int32_float = 11;
inline int TestMap::map_int32_float_size() const {
  return map_int32_float_.size();
}
inline void TestMap::clear_map_int32_float() {
  map_int32_float_.Clear();
}
inline const ::google::protobuf::Map< ::google::protobuf::int32, float >&
TestMap::map_int32_float() const {
  // @@protoc_insertion_point(field_map:protobuf_unittest.TestMap.map_int32_float)
  return map_int32_float_.GetMap();
}
inline ::google::protobuf::Map< ::google::protobuf::int32, float >*
TestMap::mutable_map_int32_float() {
  // @@protoc_insertion_point(field_mutable_map:protobuf_unittest.TestMap.map_int32_float)
  return map_int32_float_.MutableMap();
}

// map<int32, double> map_int32_double = 12;
inline int TestMap::map_int32_double_size() const {
  return map_int32_double_.size();
}
inline void TestMap::clear_map_int32_double() {
  map_int32_double_.Clear();
}
inline const ::google::protobuf::Map< ::google::protobuf::int32, double >&
TestMap::map_int32_double() const {
  // @@protoc_insertion_point(field_map:protobuf_unittest.TestMap.map_int32_double)
  return map_int32_double_.GetMap();
}
inline ::google::protobuf::Map< ::google::protobuf::int32, double >*
TestMap::mutable_map_int32_double() {
  // @@protoc_insertion_point(field_mutable_map:protobuf_unittest.TestMap.map_int32_double)
  return map_int32_double_.MutableMap();
}

// map<bool, bool> map_bool_bool = 13;
inline int TestMap::map_bool_bool_size() const {
  return map_bool_bool_.size();
}
inline void TestMap::clear_map_bool_bool() {
  map_bool_bool_.Clear();
}
inline const ::google::protobuf::Map< bool, bool >&
TestMap::map_bool_bool() const {
  // @@protoc_insertion_point(field_map:protobuf_unittest.TestMap.map_bool_bool)
  return map_bool_bool_.GetMap();
}
inline ::google::protobuf::Map< bool, bool >*
TestMap::mutable_map_bool_bool() {
  // @@protoc_insertion_point(field_mutable_map:protobuf_unittest.TestMap.map_bool_bool)
  return map_bool_bool_.MutableMap();
}

// map<string, string> map_string_string = 14;
inline int TestMap::map_string_string_size() const {
  return map_string_string_.size();
}
inline void TestMap::clear_map_string_string() {
  map_string_string_.Clear();
}
inline const ::google::protobuf::Map< ::std::string, ::std::string >&
TestMap::map_string_string() const {
  // @@protoc_insertion_point(field_map:protobuf_unittest.TestMap.map_string_string)
  return map_string_string_.GetMap();
}
inline ::google::protobuf::Map< ::std::string, ::std::string >*
TestMap::mutable_map_string_string() {
  // @@protoc_insertion_point(field_mutable_map:protobuf_unittest.TestMap.map_string_string)
  return map_string_string_.MutableMap();
}

// map<int32, bytes> map_int32_bytes = 15;
inline int TestMap::map_int32_bytes_size() const {
  return map_int32_bytes_.size();
}
inline void TestMap::clear_map_int32_bytes() {
  map_int32_bytes_.Clear();
}
inline const ::google::protobuf::Map< ::google::protobuf::int32, ::std::string >&
TestMap::map_int32_bytes() const {
  // @@protoc_insertion_point(field_map:protobuf_unittest.TestMap.map_int32_bytes)
  return map_int32_bytes_.GetMap();
}
inline ::google::protobuf::Map< ::google::protobuf::int32, ::std::string >*
TestMap::mutable_map_int32_bytes() {
  // @@protoc_insertion_point(field_mutable_map:protobuf_unittest.TestMap.map_int32_bytes)
  return map_int32_bytes_.MutableMap();
}

// map<int32, .protobuf_unittest.MapEnum> map_int32_enum = 16;
inline int TestMap::map_int32_enum_size() const {
  return map_int32_enum_.size();
}
inline void TestMap::clear_map_int32_enum() {
  map_int32_enum_.Clear();
}
inline const ::google::protobuf::Map< ::google::protobuf::int32, ::protobuf_unittest::MapEnum >&
TestMap::map_int32_enum() const {
  // @@protoc_insertion_point(field_map:protobuf_unittest.TestMap.map_int32_enum)
  return map_int32_enum_.GetMap();
}
inline ::google::protobuf::Map< ::google::protobuf::int32, ::protobuf_unittest::MapEnum >*
TestMap::mutable_map_int32_enum() {
  // @@protoc_insertion_point(field_mutable_map:protobuf_unittest.TestMap.map_int32_enum)
  return map_int32_enum_.MutableMap();
}

// map<int32, .protobuf_unittest.ForeignMessage> map_int32_foreign_message = 17;
inline int TestMap::map_int32_foreign_message_size() const {
  return map_int32_foreign_message_.size();
}
inline const ::google::protobuf::Map< ::google::protobuf::int32, ::protobuf_unittest::ForeignMessage >&
TestMap::map_int32_foreign_message() const {
  // @@protoc_insertion_point(field_map:protobuf_unittest.TestMap.map_int32_foreign_message)
  return map_int32_foreign_message_.GetMap();
}
inline ::google::protobuf::Map< ::google::protobuf::int32, ::protobuf_unittest::ForeignMessage >*
TestMap::mutable_map_int32_foreign_message() {
  // @@protoc_insertion_point(field_mutable_map:protobuf_unittest.TestMap.map_int32_foreign_message)
  return map_int32_foreign_message_.MutableMap();
}

// map<string, .protobuf_unittest.ForeignMessage> map_string_foreign_message = 18;
inline int TestMap::map_string_foreign_message_size() const {
  return map_string_foreign_message_.size();
}
inline const ::google::protobuf::Map< ::std::string, ::protobuf_unittest::ForeignMessage >&
TestMap::map_string_foreign_message() const {
  // @@protoc_insertion_point(field_map:protobuf_unittest.TestMap.map_string_foreign_message)
  return map_string_foreign_message_.GetMap();
}
inline ::google::protobuf::Map< ::std::string, ::protobuf_unittest::ForeignMessage >*
TestMap::mutable_map_string_foreign_message() {
  // @@protoc_insertion_point(field_mutable_map:protobuf_unittest.TestMap.map_string_foreign_message)
  return map_string_foreign_message_.MutableMap();
}

// map<int32, .protobuf_unittest.TestAllTypes> map_int32_all_types = 19;
inline int TestMap::map_int32_all_types_size() const {
  return map_int32_all_types_.size();
}
inline const ::google::protobuf::Map< ::google::protobuf::int32, ::protobuf_unittest::TestAllTypes >&
TestMap::map_int32_all_types() const {
  // @@protoc_insertion_point(field_map:protobuf_unittest.TestMap.map_int32_all_types)
  return map_int32_all_types_.GetMap();
}
inline ::google::protobuf::Map< ::google::protobuf::int32, ::protobuf_unittest::TestAllTypes >*
TestMap::mutable_map_int32_all_types() {
  // @@protoc_insertion_point(field_mutable_map:protobuf_unittest.TestMap.map_int32_all_types)
  return map_int32_all_types_.MutableMap();
}

// -------------------------------------------------------------------

// TestMapSubmessage

// .protobuf_unittest.TestMap test_map = 1;
inline bool TestMapSubmessage::has_test_map() const {
  return this != internal_default_instance() && test_map_ != NULL;
}
inline void TestMapSubmessage::clear_test_map() {
  if (GetArenaNoVirtual() == NULL && test_map_ != NULL) {
    delete test_map_;
  }
  test_map_ = NULL;
}
inline const ::protobuf_unittest::TestMap& TestMapSubmessage::_internal_test_map() const {
  return *test_map_;
}
inline const ::protobuf_unittest::TestMap& TestMapSubmessage::test_map() const {
  const ::protobuf_unittest::TestMap* p = test_map_;
  // @@protoc_insertion_point(field_get:protobuf_unittest.TestMapSubmessage.test_map)
  return p != NULL ? *p : *reinterpret_cast<const ::protobuf_unittest::TestMap*>(
      &::protobuf_unittest::_TestMap_default_instance_);
}
inline ::protobuf_unittest::TestMap* TestMapSubmessage::release_test_map() {
  // @@protoc_insertion_point(field_release:protobuf_unittest.TestMapSubmessage.test_map)
  
  ::protobuf_unittest::TestMap* temp = test_map_;
  if (GetArenaNoVirtual() != NULL) {
    temp = ::google::protobuf::internal::DuplicateIfNonNull(temp);
  }
  test_map_ = NULL;
  return temp;
}
inline ::protobuf_unittest::TestMap* TestMapSubmessage::unsafe_arena_release_test_map() {
  // @@protoc_insertion_point(field_unsafe_arena_release:protobuf_unittest.TestMapSubmessage.test_map)
  
  ::protobuf_unittest::TestMap* temp = test_map_;
  test_map_ = NULL;
  return temp;
}
inline ::protobuf_unittest::TestMap* TestMapSubmessage::mutable_test_map() {
  
  if (test_map_ == NULL) {
    auto* p = CreateMaybeMessage<::protobuf_unittest::TestMap>(GetArenaNoVirtual());
    test_map_ = p;
  }
  // @@protoc_insertion_point(field_mutable:protobuf_unittest.TestMapSubmessage.test_map)
  return test_map_;
}
inline void TestMapSubmessage::set_allocated_test_map(::protobuf_unittest::TestMap* test_map) {
  ::google::protobuf::Arena* message_arena = GetArenaNoVirtual();
  if (message_arena == NULL) {
    delete test_map_;
  }
  if (test_map) {
    ::google::protobuf::Arena* submessage_arena =
      ::google::protobuf::Arena::GetArena(test_map);
    if (message_arena != submessage_arena) {
      test_map = ::google::protobuf::internal::GetOwnedMessage(
          message_arena, test_map, submessage_arena);
    }
    
  } else {
    
  }
  test_map_ = test_map;
  // @@protoc_insertion_point(field_set_allocated:protobuf_unittest.TestMapSubmessage.test_map)
}

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// TestMessageMap

// map<int32, .protobuf_unittest.TestAllTypes> map_int32_message = 1;
inline int TestMessageMap::map_int32_message_size() const {
  return map_int32_message_.size();
}
inline const ::google::protobuf::Map< ::google::protobuf::int32, ::protobuf_unittest::TestAllTypes >&
TestMessageMap::map_int32_message() const {
  // @@protoc_insertion_point(field_map:protobuf_unittest.TestMessageMap.map_int32_message)
  return map_int32_message_.GetMap();
}
inline ::google::protobuf::Map< ::google::protobuf::int32, ::protobuf_unittest::TestAllTypes >*
TestMessageMap::mutable_map_int32_message() {
  // @@protoc_insertion_point(field_mutable_map:protobuf_unittest.TestMessageMap.map_int32_message)
  return map_int32_message_.MutableMap();
}

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// TestSameTypeMap

// map<int32, int32> map1 = 1;
inline int TestSameTypeMap::map1_size() const {
  return map1_.size();
}
inline void TestSameTypeMap::clear_map1() {
  map1_.Clear();
}
inline const ::google::protobuf::Map< ::google::protobuf::int32, ::google::protobuf::int32 >&
TestSameTypeMap::map1() const {
  // @@protoc_insertion_point(field_map:protobuf_unittest.TestSameTypeMap.map1)
  return map1_.GetMap();
}
inline ::google::protobuf::Map< ::google::protobuf::int32, ::google::protobuf::int32 >*
TestSameTypeMap::mutable_map1() {
  // @@protoc_insertion_point(field_mutable_map:protobuf_unittest.TestSameTypeMap.map1)
  return map1_.MutableMap();
}

// map<int32, int32> map2 = 2;
inline int TestSameTypeMap::map2_size() const {
  return map2_.size();
}
inline void TestSameTypeMap::clear_map2() {
  map2_.Clear();
}
inline const ::google::protobuf::Map< ::google::protobuf::int32, ::google::protobuf::int32 >&
TestSameTypeMap::map2() const {
  // @@protoc_insertion_point(field_map:protobuf_unittest.TestSameTypeMap.map2)
  return map2_.GetMap();
}
inline ::google::protobuf::Map< ::google::protobuf::int32, ::google::protobuf::int32 >*
TestSameTypeMap::mutable_map2() {
  // @@protoc_insertion_point(field_mutable_map:protobuf_unittest.TestSameTypeMap.map2)
  return map2_.MutableMap();
}

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// TestRequiredMessageMap

// map<int32, .protobuf_unittest.TestRequired> map_field = 1;
inline int TestRequiredMessageMap::map_field_size() const {
  return map_field_.size();
}
inline const ::google::protobuf::Map< ::google::protobuf::int32, ::protobuf_unittest::TestRequired >&
TestRequiredMessageMap::map_field() const {
  // @@protoc_insertion_point(field_map:protobuf_unittest.TestRequiredMessageMap.map_field)
  return map_field_.GetMap();
}
inline ::google::protobuf::Map< ::google::protobuf::int32, ::protobuf_unittest::TestRequired >*
TestRequiredMessageMap::mutable_map_field() {
  // @@protoc_insertion_point(field_mutable_map:protobuf_unittest.TestRequiredMessageMap.map_field)
  return map_field_.MutableMap();
}

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// TestArenaMap

// map<int32, int32> map_int32_int32 = 1;
inline int TestArenaMap::map_int32_int32_size() const {
  return map_int32_int32_.size();
}
inline void TestArenaMap::clear_map_int32_int32() {
  map_int32_int32_.Clear();
}
inline const ::google::protobuf::Map< ::google::protobuf::int32, ::google::protobuf::int32 >&
TestArenaMap::map_int32_int32() const {
  // @@protoc_insertion_point(field_map:protobuf_unittest.TestArenaMap.map_int32_int32)
  return map_int32_int32_.GetMap();
}
inline ::google::protobuf::Map< ::google::protobuf::int32, ::google::protobuf::int32 >*
TestArenaMap::mutable_map_int32_int32() {
  // @@protoc_insertion_point(field_mutable_map:protobuf_unittest.TestArenaMap.map_int32_int32)
  return map_int32_int32_.MutableMap();
}

// map<int64, int64> map_int64_int64 = 2;
inline int TestArenaMap::map_int64_int64_size() const {
  return map_int64_int64_.size();
}
inline void TestArenaMap::clear_map_int64_int64() {
  map_int64_int64_.Clear();
}
inline const ::google::protobuf::Map< ::google::protobuf::int64, ::google::protobuf::int64 >&
TestArenaMap::map_int64_int64() const {
  // @@protoc_insertion_point(field_map:protobuf_unittest.TestArenaMap.map_int64_int64)
  return map_int64_int64_.GetMap();
}
inline ::google::protobuf::Map< ::google::protobuf::int64, ::google::protobuf::int64 >*
TestArenaMap::mutable_map_int64_int64() {
  // @@protoc_insertion_point(field_mutable_map:protobuf_unittest.TestArenaMap.map_int64_int64)
  return map_int64_int64_.MutableMap();
}

// map<uint32, uint32> map_uint32_uint32 = 3;
inline int TestArenaMap::map_uint32_uint32_size() const {
  return map_uint32_uint32_.size();
}
inline void TestArenaMap::clear_map_uint32_uint32() {
  map_uint32_uint32_.Clear();
}
inline const ::google::protobuf::Map< ::google::protobuf::uint32, ::google::protobuf::uint32 >&
TestArenaMap::map_uint32_uint32() const {
  // @@protoc_insertion_point(field_map:protobuf_unittest.TestArenaMap.map_uint32_uint32)
  return map_uint32_uint32_.GetMap();
}
inline ::google::protobuf::Map< ::google::protobuf::uint32, ::google::protobuf::uint32 >*
TestArenaMap::mutable_map_uint32_uint32() {
  // @@protoc_insertion_point(field_mutable_map:protobuf_unittest.TestArenaMap.map_uint32_uint32)
  return map_uint32_uint32_.MutableMap();
}

// map<uint64, uint64> map_uint64_uint64 = 4;
inline int TestArenaMap::map_uint64_uint64_size() const {
  return map_uint64_uint64_.size();
}
inline void TestArenaMap::clear_map_uint64_uint64() {
  map_uint64_uint64_.Clear();
}
inline const ::google::protobuf::Map< ::google::protobuf::uint64, ::google::protobuf::uint64 >&
TestArenaMap::map_uint64_uint64() const {
  // @@protoc_insertion_point(field_map:protobuf_unittest.TestArenaMap.map_uint64_uint64)
  return map_uint64_uint64_.GetMap();
}
inline ::google::protobuf::Map< ::google::protobuf::uint64, ::google::protobuf::uint64 >*
TestArenaMap::mutable_map_uint64_uint64() {
  // @@protoc_insertion_point(field_mutable_map:protobuf_unittest.TestArenaMap.map_uint64_uint64)
  return map_uint64_uint64_.MutableMap();
}

// map<sint32, sint32> map_sint32_sint32 = 5;
inline int TestArenaMap::map_sint32_sint32_size() const {
  return map_sint32_sint32_.size();
}
inline void TestArenaMap::clear_map_sint32_sint32() {
  map_sint32_sint32_.Clear();
}
inline const ::google::protobuf::Map< ::google::protobuf::int32, ::google::protobuf::int32 >&
TestArenaMap::map_sint32_sint32() const {
  // @@protoc_insertion_point(field_map:protobuf_unittest.TestArenaMap.map_sint32_sint32)
  return map_sint32_sint32_.GetMap();
}
inline ::google::protobuf::Map< ::google::protobuf::int32, ::google::protobuf::int32 >*
TestArenaMap::mutable_map_sint32_sint32() {
  // @@protoc_insertion_point(field_mutable_map:protobuf_unittest.TestArenaMap.map_sint32_sint32)
  return map_sint32_sint32_.MutableMap();
}

// map<sint64, sint64> map_sint64_sint64 = 6;
inline int TestArenaMap::map_sint64_sint64_size() const {
  return map_sint64_sint64_.size();
}
inline void TestArenaMap::clear_map_sint64_sint64() {
  map_sint64_sint64_.Clear();
}
inline const ::google::protobuf::Map< ::google::protobuf::int64, ::google::protobuf::int64 >&
TestArenaMap::map_sint64_sint64() const {
  // @@protoc_insertion_point(field_map:protobuf_unittest.TestArenaMap.map_sint64_sint64)
  return map_sint64_sint64_.GetMap();
}
inline ::google::protobuf::Map< ::google::protobuf::int64, ::google::protobuf::int64 >*
TestArenaMap::mutable_map_sint64_sint64() {
  // @@protoc_insertion_point(field_mutable_map:protobuf_unittest.TestArenaMap.map_sint64_sint64)
  return map_sint64_sint64_.MutableMap();
}

// map<fixed32, fixed32> map_fixed32_fixed32 = 7;
inline int TestArenaMap::map_fixed32_fixed32_size() const {
  return map_fixed32_fixed32_.size();
}
inline void TestArenaMap::clear_map_fixed32_fixed32() {
  map_fixed32_fixed32_.Clear();
}
inline const ::google::protobuf::Map< ::google::protobuf::uint32, ::google::protobuf::uint32 >&
TestArenaMap::map_fixed32_fixed32() const {
  // @@protoc_insertion_point(field_map:protobuf_unittest.TestArenaMap.map_fixed32_fixed32)
  return map_fixed32_fixed32_.GetMap();
}
inline ::google::protobuf::Map< ::google::protobuf::uint32, ::google::protobuf::uint32 >*
TestArenaMap::mutable_map_fixed32_fixed32() {
  // @@protoc_insertion_point(field_mutable_map:protobuf_unittest.TestArenaMap.map_fixed32_fixed32)
  return map_fixed32_fixed32_.MutableMap();
}

// map<fixed64, fixed64> map_fixed64_fixed64 = 8;
inline int TestArenaMap::map_fixed64_fixed64_size() const {
  return map_fixed64_fixed64_.size();
}
inline void TestArenaMap::clear_map_fixed64_fixed64() {
  map_fixed64_fixed64_.Clear();
}
inline const ::google::protobuf::Map< ::google::protobuf::uint64, ::google::protobuf::uint64 >&
TestArenaMap::map_fixed64_fixed64() const {
  // @@protoc_insertion_point(field_map:protobuf_unittest.TestArenaMap.map_fixed64_fixed64)
  return map_fixed64_fixed64_.GetMap();
}
inline ::google::protobuf::Map< ::google::protobuf::uint64, ::google::protobuf::uint64 >*
TestArenaMap::mutable_map_fixed64_fixed64() {
  // @@protoc_insertion_point(field_mutable_map:protobuf_unittest.TestArenaMap.map_fixed64_fixed64)
  return map_fixed64_fixed64_.MutableMap();
}

// map<sfixed32, sfixed32> map_sfixed32_sfixed32 = 9;
inline int TestArenaMap::map_sfixed32_sfixed32_size() const {
  return map_sfixed32_sfixed32_.size();
}
inline void TestArenaMap::clear_map_sfixed32_sfixed32() {
  map_sfixed32_sfixed32_.Clear();
}
inline const ::google::protobuf::Map< ::google::protobuf::int32, ::google::protobuf::int32 >&
TestArenaMap::map_sfixed32_sfixed32() const {
  // @@protoc_insertion_point(field_map:protobuf_unittest.TestArenaMap.map_sfixed32_sfixed32)
  return map_sfixed32_sfixed32_.GetMap();
}
inline ::google::protobuf::Map< ::google::protobuf::int32, ::google::protobuf::int32 >*
TestArenaMap::mutable_map_sfixed32_sfixed32() {
  // @@protoc_insertion_point(field_mutable_map:protobuf_unittest.TestArenaMap.map_sfixed32_sfixed32)
  return map_sfixed32_sfixed32_.MutableMap();
}

// map<sfixed64, sfixed64> map_sfixed64_sfixed64 = 10;
inline int TestArenaMap::map_sfixed64_sfixed64_size() const {
  return map_sfixed64_sfixed64_.size();
}
inline void TestArenaMap::clear_map_sfixed64_sfixed64() {
  map_sfixed64_sfixed64_.Clear();
}
inline const ::google::protobuf::Map< ::google::protobuf::int64, ::google::protobuf::int64 >&
TestArenaMap::map_sfixed64_sfixed64() const {
  // @@protoc_insertion_point(field_map:protobuf_unittest.TestArenaMap.map_sfixed64_sfixed64)
  return map_sfixed64_sfixed64_.GetMap();
}
inline ::google::protobuf::Map< ::google::protobuf::int64, ::google::protobuf::int64 >*
TestArenaMap::mutable_map_sfixed64_sfixed64() {
  // @@protoc_insertion_point(field_mutable_map:protobuf_unittest.TestArenaMap.map_sfixed64_sfixed64)
  return map_sfixed64_sfixed64_.MutableMap();
}

// map<int32, float> map_int32_float = 11;
inline int TestArenaMap::map_int32_float_size() const {
  return map_int32_float_.size();
}
inline void TestArenaMap::clear_map_int32_float() {
  map_int32_float_.Clear();
}
inline const ::google::protobuf::Map< ::google::protobuf::int32, float >&
TestArenaMap::map_int32_float() const {
  // @@protoc_insertion_point(field_map:protobuf_unittest.TestArenaMap.map_int32_float)
  return map_int32_float_.GetMap();
}
inline ::google::protobuf::Map< ::google::protobuf::int32, float >*
TestArenaMap::mutable_map_int32_float() {
  // @@protoc_insertion_point(field_mutable_map:protobuf_unittest.TestArenaMap.map_int32_float)
  return map_int32_float_.MutableMap();
}

// map<int32, double> map_int32_double = 12;
inline int TestArenaMap::map_int32_double_size() const {
  return map_int32_double_.size();
}
inline void TestArenaMap::clear_map_int32_double() {
  map_int32_double_.Clear();
}
inline const ::google::protobuf::Map< ::google::protobuf::int32, double >&
TestArenaMap::map_int32_double() const {
  // @@protoc_insertion_point(field_map:protobuf_unittest.TestArenaMap.map_int32_double)
  return map_int32_double_.GetMap();
}
inline ::google::protobuf::Map< ::google::protobuf::int32, double >*
TestArenaMap::mutable_map_int32_double() {
  // @@protoc_insertion_point(field_mutable_map:protobuf_unittest.TestArenaMap.map_int32_double)
  return map_int32_double_.MutableMap();
}

// map<bool, bool> map_bool_bool = 13;
inline int TestArenaMap::map_bool_bool_size() const {
  return map_bool_bool_.size();
}
inline void TestArenaMap::clear_map_bool_bool() {
  map_bool_bool_.Clear();
}
inline const ::google::protobuf::Map< bool, bool >&
TestArenaMap::map_bool_bool() const {
  // @@protoc_insertion_point(field_map:protobuf_unittest.TestArenaMap.map_bool_bool)
  return map_bool_bool_.GetMap();
}
inline ::google::protobuf::Map< bool, bool >*
TestArenaMap::mutable_map_bool_bool() {
  // @@protoc_insertion_point(field_mutable_map:protobuf_unittest.TestArenaMap.map_bool_bool)
  return map_bool_bool_.MutableMap();
}

// map<string, string> map_string_string = 14;
inline int TestArenaMap::map_string_string_size() const {
  return map_string_string_.size();
}
inline void TestArenaMap::clear_map_string_string() {
  map_string_string_.Clear();
}
inline const ::google::protobuf::Map< ::std::string, ::std::string >&
TestArenaMap::map_string_string() const {
  // @@protoc_insertion_point(field_map:protobuf_unittest.TestArenaMap.map_string_string)
  return map_string_string_.GetMap();
}
inline ::google::protobuf::Map< ::std::string, ::std::string >*
TestArenaMap::mutable_map_string_string() {
  // @@protoc_insertion_point(field_mutable_map:protobuf_unittest.TestArenaMap.map_string_string)
  return map_string_string_.MutableMap();
}

// map<int32, bytes> map_int32_bytes = 15;
inline int TestArenaMap::map_int32_bytes_size() const {
  return map_int32_bytes_.size();
}
inline void TestArenaMap::clear_map_int32_bytes() {
  map_int32_bytes_.Clear();
}
inline const ::google::protobuf::Map< ::google::protobuf::int32, ::std::string >&
TestArenaMap::map_int32_bytes() const {
  // @@protoc_insertion_point(field_map:protobuf_unittest.TestArenaMap.map_int32_bytes)
  return map_int32_bytes_.GetMap();
}
inline ::google::protobuf::Map< ::google::protobuf::int32, ::std::string >*
TestArenaMap::mutable_map_int32_bytes() {
  // @@protoc_insertion_point(field_mutable_map:protobuf_unittest.TestArenaMap.map_int32_bytes)
  return map_int32_bytes_.MutableMap();
}

// map<int32, .protobuf_unittest.MapEnum> map_int32_enum = 16;
inline int TestArenaMap::map_int32_enum_size() const {
  return map_int32_enum_.size();
}
inline void TestArenaMap::clear_map_int32_enum() {
  map_int32_enum_.Clear();
}
inline const ::google::protobuf::Map< ::google::protobuf::int32, ::protobuf_unittest::MapEnum >&
TestArenaMap::map_int32_enum() const {
  // @@protoc_insertion_point(field_map:protobuf_unittest.TestArenaMap.map_int32_enum)
  return map_int32_enum_.GetMap();
}
inline ::google::protobuf::Map< ::google::protobuf::int32, ::protobuf_unittest::MapEnum >*
TestArenaMap::mutable_map_int32_enum() {
  // @@protoc_insertion_point(field_mutable_map:protobuf_unittest.TestArenaMap.map_int32_enum)
  return map_int32_enum_.MutableMap();
}

// map<int32, .protobuf_unittest.ForeignMessage> map_int32_foreign_message = 17;
inline int TestArenaMap::map_int32_foreign_message_size() const {
  return map_int32_foreign_message_.size();
}
inline const ::google::protobuf::Map< ::google::protobuf::int32, ::protobuf_unittest::ForeignMessage >&
TestArenaMap::map_int32_foreign_message() const {
  // @@protoc_insertion_point(field_map:protobuf_unittest.TestArenaMap.map_int32_foreign_message)
  return map_int32_foreign_message_.GetMap();
}
inline ::google::protobuf::Map< ::google::protobuf::int32, ::protobuf_unittest::ForeignMessage >*
TestArenaMap::mutable_map_int32_foreign_message() {
  // @@protoc_insertion_point(field_mutable_map:protobuf_unittest.TestArenaMap.map_int32_foreign_message)
  return map_int32_foreign_message_.MutableMap();
}

// map<int32, .protobuf_unittest_no_arena.ForeignMessage> map_int32_foreign_message_no_arena = 18;
inline int TestArenaMap::map_int32_foreign_message_no_arena_size() const {
  return map_int32_foreign_message_no_arena_.size();
}
inline const ::google::protobuf::Map< ::google::protobuf::int32, ::protobuf_unittest_no_arena::ForeignMessage >&
TestArenaMap::map_int32_foreign_message_no_arena() const {
  // @@protoc_insertion_point(field_map:protobuf_unittest.TestArenaMap.map_int32_foreign_message_no_arena)
  return map_int32_foreign_message_no_arena_.GetMap();
}
inline ::google::protobuf::Map< ::google::protobuf::int32, ::protobuf_unittest_no_arena::ForeignMessage >*
TestArenaMap::mutable_map_int32_foreign_message_no_arena() {
  // @@protoc_insertion_point(field_mutable_map:protobuf_unittest.TestArenaMap.map_int32_foreign_message_no_arena)
  return map_int32_foreign_message_no_arena_.MutableMap();
}

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// MessageContainingEnumCalledType

// map<string, .protobuf_unittest.MessageContainingEnumCalledType> type = 1;
inline int MessageContainingEnumCalledType::type_size() const {
  return type_.size();
}
inline void MessageContainingEnumCalledType::clear_type() {
  type_.Clear();
}
inline const ::google::protobuf::Map< ::std::string, ::protobuf_unittest::MessageContainingEnumCalledType >&
MessageContainingEnumCalledType::type() const {
  // @@protoc_insertion_point(field_map:protobuf_unittest.MessageContainingEnumCalledType.type)
  return type_.GetMap();
}
inline ::google::protobuf::Map< ::std::string, ::protobuf_unittest::MessageContainingEnumCalledType >*
MessageContainingEnumCalledType::mutable_type() {
  // @@protoc_insertion_point(field_mutable_map:protobuf_unittest.MessageContainingEnumCalledType.type)
  return type_.MutableMap();
}

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// MessageContainingMapCalledEntry

// map<int32, int32> entry = 1;
inline int MessageContainingMapCalledEntry::entry_size() const {
  return entry_.size();
}
inline void MessageContainingMapCalledEntry::clear_entry() {
  entry_.Clear();
}
inline const ::google::protobuf::Map< ::google::protobuf::int32, ::google::protobuf::int32 >&
MessageContainingMapCalledEntry::entry() const {
  // @@protoc_insertion_point(field_map:protobuf_unittest.MessageContainingMapCalledEntry.entry)
  return entry_.GetMap();
}
inline ::google::protobuf::Map< ::google::protobuf::int32, ::google::protobuf::int32 >*
MessageContainingMapCalledEntry::mutable_entry() {
  // @@protoc_insertion_point(field_mutable_map:protobuf_unittest.MessageContainingMapCalledEntry.entry)
  return entry_.MutableMap();
}

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// TestRecursiveMapMessage

// map<string, .protobuf_unittest.TestRecursiveMapMessage> a = 1;
inline int TestRecursiveMapMessage::a_size() const {
  return a_.size();
}
inline void TestRecursiveMapMessage::clear_a() {
  a_.Clear();
}
inline const ::google::protobuf::Map< ::std::string, ::protobuf_unittest::TestRecursiveMapMessage >&
TestRecursiveMapMessage::a() const {
  // @@protoc_insertion_point(field_map:protobuf_unittest.TestRecursiveMapMessage.a)
  return a_.GetMap();
}
inline ::google::protobuf::Map< ::std::string, ::protobuf_unittest::TestRecursiveMapMessage >*
TestRecursiveMapMessage::mutable_a() {
  // @@protoc_insertion_point(field_mutable_map:protobuf_unittest.TestRecursiveMapMessage.a)
  return a_.MutableMap();
}

#ifdef __GNUC__
  #pragma GCC diagnostic pop
#endif  // __GNUC__
// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------


// @@protoc_insertion_point(namespace_scope)

}  // namespace protobuf_unittest

namespace google {
namespace protobuf {

template <> struct is_proto_enum< ::protobuf_unittest::MessageContainingEnumCalledType_Type> : ::std::true_type {};
template <>
inline const EnumDescriptor* GetEnumDescriptor< ::protobuf_unittest::MessageContainingEnumCalledType_Type>() {
  return ::protobuf_unittest::MessageContainingEnumCalledType_Type_descriptor();
}
template <> struct is_proto_enum< ::protobuf_unittest::MapEnum> : ::std::true_type {};
template <>
inline const EnumDescriptor* GetEnumDescriptor< ::protobuf_unittest::MapEnum>() {
  return ::protobuf_unittest::MapEnum_descriptor();
}

}  // namespace protobuf
}  // namespace google

// @@protoc_insertion_point(global_scope)

#endif  // PROTOBUF_INCLUDED_google_2fprotobuf_2fmap_5funittest_2eproto
