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

#include <google/protobuf/util/json_format_proto3.pb.h>

#include <algorithm>

#include <google/protobuf/stubs/common.h>
#include <google/protobuf/stubs/port.h>
#include <google/protobuf/io/coded_stream.h>
#include <google/protobuf/wire_format_lite_inl.h>
#include <google/protobuf/descriptor.h>
#include <google/protobuf/generated_message_reflection.h>
#include <google/protobuf/reflection_ops.h>
#include <google/protobuf/wire_format.h>
// This is a temporary google only hack
#ifdef GOOGLE_PROTOBUF_ENFORCE_UNIQUENESS
#include "third_party/protobuf/version.h"
#endif
// @@protoc_insertion_point(includes)

namespace protobuf_google_2fprotobuf_2fany_2eproto {
extern PROTOBUF_INTERNAL_EXPORT_protobuf_google_2fprotobuf_2fany_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_Any;
}  // namespace protobuf_google_2fprotobuf_2fany_2eproto
namespace protobuf_google_2fprotobuf_2fduration_2eproto {
extern PROTOBUF_INTERNAL_EXPORT_protobuf_google_2fprotobuf_2fduration_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_Duration;
}  // namespace protobuf_google_2fprotobuf_2fduration_2eproto
namespace protobuf_google_2fprotobuf_2ffield_5fmask_2eproto {
extern PROTOBUF_INTERNAL_EXPORT_protobuf_google_2fprotobuf_2ffield_5fmask_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_FieldMask;
}  // namespace protobuf_google_2fprotobuf_2ffield_5fmask_2eproto
namespace protobuf_google_2fprotobuf_2fstruct_2eproto {
extern PROTOBUF_INTERNAL_EXPORT_protobuf_google_2fprotobuf_2fstruct_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_ListValue;
}  // namespace protobuf_google_2fprotobuf_2fstruct_2eproto
namespace protobuf_google_2fprotobuf_2ftimestamp_2eproto {
extern PROTOBUF_INTERNAL_EXPORT_protobuf_google_2fprotobuf_2ftimestamp_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_Timestamp;
}  // namespace protobuf_google_2fprotobuf_2ftimestamp_2eproto
namespace protobuf_google_2fprotobuf_2funittest_2eproto {
extern PROTOBUF_INTERNAL_EXPORT_protobuf_google_2fprotobuf_2funittest_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_TestAllExtensions;
}  // namespace protobuf_google_2fprotobuf_2funittest_2eproto
namespace protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto {
extern PROTOBUF_INTERNAL_EXPORT_protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_MessageType;
extern PROTOBUF_INTERNAL_EXPORT_protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_TestBoolValue_BoolMapEntry_DoNotUse;
extern PROTOBUF_INTERNAL_EXPORT_protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_TestMap_BoolMapEntry_DoNotUse;
extern PROTOBUF_INTERNAL_EXPORT_protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_TestMap_Int32MapEntry_DoNotUse;
extern PROTOBUF_INTERNAL_EXPORT_protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_TestMap_Int64MapEntry_DoNotUse;
extern PROTOBUF_INTERNAL_EXPORT_protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_TestMap_StringMapEntry_DoNotUse;
extern PROTOBUF_INTERNAL_EXPORT_protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_TestMap_Uint32MapEntry_DoNotUse;
extern PROTOBUF_INTERNAL_EXPORT_protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_TestMap_Uint64MapEntry_DoNotUse;
extern PROTOBUF_INTERNAL_EXPORT_protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_TestNestedMap_BoolMapEntry_DoNotUse;
extern PROTOBUF_INTERNAL_EXPORT_protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_TestNestedMap_Int32MapEntry_DoNotUse;
extern PROTOBUF_INTERNAL_EXPORT_protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_TestNestedMap_Int64MapEntry_DoNotUse;
extern PROTOBUF_INTERNAL_EXPORT_protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_TestNestedMap_StringMapEntry_DoNotUse;
extern PROTOBUF_INTERNAL_EXPORT_protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_TestNestedMap_Uint32MapEntry_DoNotUse;
extern PROTOBUF_INTERNAL_EXPORT_protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_TestNestedMap_Uint64MapEntry_DoNotUse;
extern PROTOBUF_INTERNAL_EXPORT_protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto ::google::protobuf::internal::SCCInfo<6> scc_info_TestNestedMap;
}  // namespace protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto
namespace protobuf_google_2fprotobuf_2fwrappers_2eproto {
extern PROTOBUF_INTERNAL_EXPORT_protobuf_google_2fprotobuf_2fwrappers_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_BoolValue;
extern PROTOBUF_INTERNAL_EXPORT_protobuf_google_2fprotobuf_2fwrappers_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_BytesValue;
extern PROTOBUF_INTERNAL_EXPORT_protobuf_google_2fprotobuf_2fwrappers_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_DoubleValue;
extern PROTOBUF_INTERNAL_EXPORT_protobuf_google_2fprotobuf_2fwrappers_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_FloatValue;
extern PROTOBUF_INTERNAL_EXPORT_protobuf_google_2fprotobuf_2fwrappers_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_Int32Value;
extern PROTOBUF_INTERNAL_EXPORT_protobuf_google_2fprotobuf_2fwrappers_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_Int64Value;
extern PROTOBUF_INTERNAL_EXPORT_protobuf_google_2fprotobuf_2fwrappers_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_StringValue;
extern PROTOBUF_INTERNAL_EXPORT_protobuf_google_2fprotobuf_2fwrappers_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_UInt32Value;
extern PROTOBUF_INTERNAL_EXPORT_protobuf_google_2fprotobuf_2fwrappers_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_UInt64Value;
}  // namespace protobuf_google_2fprotobuf_2fwrappers_2eproto
namespace proto3 {
class MessageTypeDefaultTypeInternal {
 public:
  ::google::protobuf::internal::ExplicitlyConstructed<MessageType>
      _instance;
} _MessageType_default_instance_;
class TestMessageDefaultTypeInternal {
 public:
  ::google::protobuf::internal::ExplicitlyConstructed<TestMessage>
      _instance;
} _TestMessage_default_instance_;
class TestOneofDefaultTypeInternal {
 public:
  ::google::protobuf::internal::ExplicitlyConstructed<TestOneof>
      _instance;
  ::google::protobuf::int32 oneof_int32_value_;
  ::google::protobuf::internal::ArenaStringPtr oneof_string_value_;
  ::google::protobuf::internal::ArenaStringPtr oneof_bytes_value_;
  int oneof_enum_value_;
  const ::proto3::MessageType* oneof_message_value_;
} _TestOneof_default_instance_;
class TestMap_BoolMapEntry_DoNotUseDefaultTypeInternal {
 public:
  ::google::protobuf::internal::ExplicitlyConstructed<TestMap_BoolMapEntry_DoNotUse>
      _instance;
} _TestMap_BoolMapEntry_DoNotUse_default_instance_;
class TestMap_Int32MapEntry_DoNotUseDefaultTypeInternal {
 public:
  ::google::protobuf::internal::ExplicitlyConstructed<TestMap_Int32MapEntry_DoNotUse>
      _instance;
} _TestMap_Int32MapEntry_DoNotUse_default_instance_;
class TestMap_Int64MapEntry_DoNotUseDefaultTypeInternal {
 public:
  ::google::protobuf::internal::ExplicitlyConstructed<TestMap_Int64MapEntry_DoNotUse>
      _instance;
} _TestMap_Int64MapEntry_DoNotUse_default_instance_;
class TestMap_Uint32MapEntry_DoNotUseDefaultTypeInternal {
 public:
  ::google::protobuf::internal::ExplicitlyConstructed<TestMap_Uint32MapEntry_DoNotUse>
      _instance;
} _TestMap_Uint32MapEntry_DoNotUse_default_instance_;
class TestMap_Uint64MapEntry_DoNotUseDefaultTypeInternal {
 public:
  ::google::protobuf::internal::ExplicitlyConstructed<TestMap_Uint64MapEntry_DoNotUse>
      _instance;
} _TestMap_Uint64MapEntry_DoNotUse_default_instance_;
class TestMap_StringMapEntry_DoNotUseDefaultTypeInternal {
 public:
  ::google::protobuf::internal::ExplicitlyConstructed<TestMap_StringMapEntry_DoNotUse>
      _instance;
} _TestMap_StringMapEntry_DoNotUse_default_instance_;
class TestMapDefaultTypeInternal {
 public:
  ::google::protobuf::internal::ExplicitlyConstructed<TestMap>
      _instance;
} _TestMap_default_instance_;
class TestNestedMap_BoolMapEntry_DoNotUseDefaultTypeInternal {
 public:
  ::google::protobuf::internal::ExplicitlyConstructed<TestNestedMap_BoolMapEntry_DoNotUse>
      _instance;
} _TestNestedMap_BoolMapEntry_DoNotUse_default_instance_;
class TestNestedMap_Int32MapEntry_DoNotUseDefaultTypeInternal {
 public:
  ::google::protobuf::internal::ExplicitlyConstructed<TestNestedMap_Int32MapEntry_DoNotUse>
      _instance;
} _TestNestedMap_Int32MapEntry_DoNotUse_default_instance_;
class TestNestedMap_Int64MapEntry_DoNotUseDefaultTypeInternal {
 public:
  ::google::protobuf::internal::ExplicitlyConstructed<TestNestedMap_Int64MapEntry_DoNotUse>
      _instance;
} _TestNestedMap_Int64MapEntry_DoNotUse_default_instance_;
class TestNestedMap_Uint32MapEntry_DoNotUseDefaultTypeInternal {
 public:
  ::google::protobuf::internal::ExplicitlyConstructed<TestNestedMap_Uint32MapEntry_DoNotUse>
      _instance;
} _TestNestedMap_Uint32MapEntry_DoNotUse_default_instance_;
class TestNestedMap_Uint64MapEntry_DoNotUseDefaultTypeInternal {
 public:
  ::google::protobuf::internal::ExplicitlyConstructed<TestNestedMap_Uint64MapEntry_DoNotUse>
      _instance;
} _TestNestedMap_Uint64MapEntry_DoNotUse_default_instance_;
class TestNestedMap_StringMapEntry_DoNotUseDefaultTypeInternal {
 public:
  ::google::protobuf::internal::ExplicitlyConstructed<TestNestedMap_StringMapEntry_DoNotUse>
      _instance;
} _TestNestedMap_StringMapEntry_DoNotUse_default_instance_;
class TestNestedMap_MapMapEntry_DoNotUseDefaultTypeInternal {
 public:
  ::google::protobuf::internal::ExplicitlyConstructed<TestNestedMap_MapMapEntry_DoNotUse>
      _instance;
} _TestNestedMap_MapMapEntry_DoNotUse_default_instance_;
class TestNestedMapDefaultTypeInternal {
 public:
  ::google::protobuf::internal::ExplicitlyConstructed<TestNestedMap>
      _instance;
} _TestNestedMap_default_instance_;
class TestWrapperDefaultTypeInternal {
 public:
  ::google::protobuf::internal::ExplicitlyConstructed<TestWrapper>
      _instance;
} _TestWrapper_default_instance_;
class TestTimestampDefaultTypeInternal {
 public:
  ::google::protobuf::internal::ExplicitlyConstructed<TestTimestamp>
      _instance;
} _TestTimestamp_default_instance_;
class TestDurationDefaultTypeInternal {
 public:
  ::google::protobuf::internal::ExplicitlyConstructed<TestDuration>
      _instance;
} _TestDuration_default_instance_;
class TestFieldMaskDefaultTypeInternal {
 public:
  ::google::protobuf::internal::ExplicitlyConstructed<TestFieldMask>
      _instance;
} _TestFieldMask_default_instance_;
class TestStructDefaultTypeInternal {
 public:
  ::google::protobuf::internal::ExplicitlyConstructed<TestStruct>
      _instance;
} _TestStruct_default_instance_;
class TestAnyDefaultTypeInternal {
 public:
  ::google::protobuf::internal::ExplicitlyConstructed<TestAny>
      _instance;
} _TestAny_default_instance_;
class TestValueDefaultTypeInternal {
 public:
  ::google::protobuf::internal::ExplicitlyConstructed<TestValue>
      _instance;
} _TestValue_default_instance_;
class TestListValueDefaultTypeInternal {
 public:
  ::google::protobuf::internal::ExplicitlyConstructed<TestListValue>
      _instance;
} _TestListValue_default_instance_;
class TestBoolValue_BoolMapEntry_DoNotUseDefaultTypeInternal {
 public:
  ::google::protobuf::internal::ExplicitlyConstructed<TestBoolValue_BoolMapEntry_DoNotUse>
      _instance;
} _TestBoolValue_BoolMapEntry_DoNotUse_default_instance_;
class TestBoolValueDefaultTypeInternal {
 public:
  ::google::protobuf::internal::ExplicitlyConstructed<TestBoolValue>
      _instance;
} _TestBoolValue_default_instance_;
class TestCustomJsonNameDefaultTypeInternal {
 public:
  ::google::protobuf::internal::ExplicitlyConstructed<TestCustomJsonName>
      _instance;
} _TestCustomJsonName_default_instance_;
class TestExtensionsDefaultTypeInternal {
 public:
  ::google::protobuf::internal::ExplicitlyConstructed<TestExtensions>
      _instance;
} _TestExtensions_default_instance_;
class TestEnumValueDefaultTypeInternal {
 public:
  ::google::protobuf::internal::ExplicitlyConstructed<TestEnumValue>
      _instance;
} _TestEnumValue_default_instance_;
}  // namespace proto3
namespace protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto {
static void InitDefaultsMessageType() {
  GOOGLE_PROTOBUF_VERIFY_VERSION;

  {
    void* ptr = &::proto3::_MessageType_default_instance_;
    new (ptr) ::proto3::MessageType();
    ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
  }
  ::proto3::MessageType::InitAsDefaultInstance();
}

::google::protobuf::internal::SCCInfo<0> scc_info_MessageType =
    {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsMessageType}, {}};

static void InitDefaultsTestMessage() {
  GOOGLE_PROTOBUF_VERIFY_VERSION;

  {
    void* ptr = &::proto3::_TestMessage_default_instance_;
    new (ptr) ::proto3::TestMessage();
    ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
  }
  ::proto3::TestMessage::InitAsDefaultInstance();
}

::google::protobuf::internal::SCCInfo<1> scc_info_TestMessage =
    {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 1, InitDefaultsTestMessage}, {
      &protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::scc_info_MessageType.base,}};

static void InitDefaultsTestOneof() {
  GOOGLE_PROTOBUF_VERIFY_VERSION;

  {
    void* ptr = &::proto3::_TestOneof_default_instance_;
    new (ptr) ::proto3::TestOneof();
    ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
  }
  ::proto3::TestOneof::InitAsDefaultInstance();
}

::google::protobuf::internal::SCCInfo<1> scc_info_TestOneof =
    {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 1, InitDefaultsTestOneof}, {
      &protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::scc_info_MessageType.base,}};

static void InitDefaultsTestMap_BoolMapEntry_DoNotUse() {
  GOOGLE_PROTOBUF_VERIFY_VERSION;

  {
    void* ptr = &::proto3::_TestMap_BoolMapEntry_DoNotUse_default_instance_;
    new (ptr) ::proto3::TestMap_BoolMapEntry_DoNotUse();
  }
  ::proto3::TestMap_BoolMapEntry_DoNotUse::InitAsDefaultInstance();
}

::google::protobuf::internal::SCCInfo<0> scc_info_TestMap_BoolMapEntry_DoNotUse =
    {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsTestMap_BoolMapEntry_DoNotUse}, {}};

static void InitDefaultsTestMap_Int32MapEntry_DoNotUse() {
  GOOGLE_PROTOBUF_VERIFY_VERSION;

  {
    void* ptr = &::proto3::_TestMap_Int32MapEntry_DoNotUse_default_instance_;
    new (ptr) ::proto3::TestMap_Int32MapEntry_DoNotUse();
  }
  ::proto3::TestMap_Int32MapEntry_DoNotUse::InitAsDefaultInstance();
}

::google::protobuf::internal::SCCInfo<0> scc_info_TestMap_Int32MapEntry_DoNotUse =
    {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsTestMap_Int32MapEntry_DoNotUse}, {}};

static void InitDefaultsTestMap_Int64MapEntry_DoNotUse() {
  GOOGLE_PROTOBUF_VERIFY_VERSION;

  {
    void* ptr = &::proto3::_TestMap_Int64MapEntry_DoNotUse_default_instance_;
    new (ptr) ::proto3::TestMap_Int64MapEntry_DoNotUse();
  }
  ::proto3::TestMap_Int64MapEntry_DoNotUse::InitAsDefaultInstance();
}

::google::protobuf::internal::SCCInfo<0> scc_info_TestMap_Int64MapEntry_DoNotUse =
    {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsTestMap_Int64MapEntry_DoNotUse}, {}};

static void InitDefaultsTestMap_Uint32MapEntry_DoNotUse() {
  GOOGLE_PROTOBUF_VERIFY_VERSION;

  {
    void* ptr = &::proto3::_TestMap_Uint32MapEntry_DoNotUse_default_instance_;
    new (ptr) ::proto3::TestMap_Uint32MapEntry_DoNotUse();
  }
  ::proto3::TestMap_Uint32MapEntry_DoNotUse::InitAsDefaultInstance();
}

::google::protobuf::internal::SCCInfo<0> scc_info_TestMap_Uint32MapEntry_DoNotUse =
    {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsTestMap_Uint32MapEntry_DoNotUse}, {}};

static void InitDefaultsTestMap_Uint64MapEntry_DoNotUse() {
  GOOGLE_PROTOBUF_VERIFY_VERSION;

  {
    void* ptr = &::proto3::_TestMap_Uint64MapEntry_DoNotUse_default_instance_;
    new (ptr) ::proto3::TestMap_Uint64MapEntry_DoNotUse();
  }
  ::proto3::TestMap_Uint64MapEntry_DoNotUse::InitAsDefaultInstance();
}

::google::protobuf::internal::SCCInfo<0> scc_info_TestMap_Uint64MapEntry_DoNotUse =
    {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsTestMap_Uint64MapEntry_DoNotUse}, {}};

static void InitDefaultsTestMap_StringMapEntry_DoNotUse() {
  GOOGLE_PROTOBUF_VERIFY_VERSION;

  {
    void* ptr = &::proto3::_TestMap_StringMapEntry_DoNotUse_default_instance_;
    new (ptr) ::proto3::TestMap_StringMapEntry_DoNotUse();
  }
  ::proto3::TestMap_StringMapEntry_DoNotUse::InitAsDefaultInstance();
}

::google::protobuf::internal::SCCInfo<0> scc_info_TestMap_StringMapEntry_DoNotUse =
    {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsTestMap_StringMapEntry_DoNotUse}, {}};

static void InitDefaultsTestMap() {
  GOOGLE_PROTOBUF_VERIFY_VERSION;

  {
    void* ptr = &::proto3::_TestMap_default_instance_;
    new (ptr) ::proto3::TestMap();
    ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
  }
  ::proto3::TestMap::InitAsDefaultInstance();
}

::google::protobuf::internal::SCCInfo<6> scc_info_TestMap =
    {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 6, InitDefaultsTestMap}, {
      &protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::scc_info_TestMap_BoolMapEntry_DoNotUse.base,
      &protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::scc_info_TestMap_Int32MapEntry_DoNotUse.base,
      &protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::scc_info_TestMap_Int64MapEntry_DoNotUse.base,
      &protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::scc_info_TestMap_Uint32MapEntry_DoNotUse.base,
      &protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::scc_info_TestMap_Uint64MapEntry_DoNotUse.base,
      &protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::scc_info_TestMap_StringMapEntry_DoNotUse.base,}};

static void InitDefaultsTestNestedMap_BoolMapEntry_DoNotUse() {
  GOOGLE_PROTOBUF_VERIFY_VERSION;

  {
    void* ptr = &::proto3::_TestNestedMap_BoolMapEntry_DoNotUse_default_instance_;
    new (ptr) ::proto3::TestNestedMap_BoolMapEntry_DoNotUse();
  }
  ::proto3::TestNestedMap_BoolMapEntry_DoNotUse::InitAsDefaultInstance();
}

::google::protobuf::internal::SCCInfo<0> scc_info_TestNestedMap_BoolMapEntry_DoNotUse =
    {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsTestNestedMap_BoolMapEntry_DoNotUse}, {}};

static void InitDefaultsTestNestedMap_Int32MapEntry_DoNotUse() {
  GOOGLE_PROTOBUF_VERIFY_VERSION;

  {
    void* ptr = &::proto3::_TestNestedMap_Int32MapEntry_DoNotUse_default_instance_;
    new (ptr) ::proto3::TestNestedMap_Int32MapEntry_DoNotUse();
  }
  ::proto3::TestNestedMap_Int32MapEntry_DoNotUse::InitAsDefaultInstance();
}

::google::protobuf::internal::SCCInfo<0> scc_info_TestNestedMap_Int32MapEntry_DoNotUse =
    {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsTestNestedMap_Int32MapEntry_DoNotUse}, {}};

static void InitDefaultsTestNestedMap_Int64MapEntry_DoNotUse() {
  GOOGLE_PROTOBUF_VERIFY_VERSION;

  {
    void* ptr = &::proto3::_TestNestedMap_Int64MapEntry_DoNotUse_default_instance_;
    new (ptr) ::proto3::TestNestedMap_Int64MapEntry_DoNotUse();
  }
  ::proto3::TestNestedMap_Int64MapEntry_DoNotUse::InitAsDefaultInstance();
}

::google::protobuf::internal::SCCInfo<0> scc_info_TestNestedMap_Int64MapEntry_DoNotUse =
    {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsTestNestedMap_Int64MapEntry_DoNotUse}, {}};

static void InitDefaultsTestNestedMap_Uint32MapEntry_DoNotUse() {
  GOOGLE_PROTOBUF_VERIFY_VERSION;

  {
    void* ptr = &::proto3::_TestNestedMap_Uint32MapEntry_DoNotUse_default_instance_;
    new (ptr) ::proto3::TestNestedMap_Uint32MapEntry_DoNotUse();
  }
  ::proto3::TestNestedMap_Uint32MapEntry_DoNotUse::InitAsDefaultInstance();
}

::google::protobuf::internal::SCCInfo<0> scc_info_TestNestedMap_Uint32MapEntry_DoNotUse =
    {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsTestNestedMap_Uint32MapEntry_DoNotUse}, {}};

static void InitDefaultsTestNestedMap_Uint64MapEntry_DoNotUse() {
  GOOGLE_PROTOBUF_VERIFY_VERSION;

  {
    void* ptr = &::proto3::_TestNestedMap_Uint64MapEntry_DoNotUse_default_instance_;
    new (ptr) ::proto3::TestNestedMap_Uint64MapEntry_DoNotUse();
  }
  ::proto3::TestNestedMap_Uint64MapEntry_DoNotUse::InitAsDefaultInstance();
}

::google::protobuf::internal::SCCInfo<0> scc_info_TestNestedMap_Uint64MapEntry_DoNotUse =
    {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsTestNestedMap_Uint64MapEntry_DoNotUse}, {}};

static void InitDefaultsTestNestedMap_StringMapEntry_DoNotUse() {
  GOOGLE_PROTOBUF_VERIFY_VERSION;

  {
    void* ptr = &::proto3::_TestNestedMap_StringMapEntry_DoNotUse_default_instance_;
    new (ptr) ::proto3::TestNestedMap_StringMapEntry_DoNotUse();
  }
  ::proto3::TestNestedMap_StringMapEntry_DoNotUse::InitAsDefaultInstance();
}

::google::protobuf::internal::SCCInfo<0> scc_info_TestNestedMap_StringMapEntry_DoNotUse =
    {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsTestNestedMap_StringMapEntry_DoNotUse}, {}};

static void InitDefaultsTestNestedMap() {
  GOOGLE_PROTOBUF_VERIFY_VERSION;

  {
    void* ptr = &::proto3::_TestNestedMap_MapMapEntry_DoNotUse_default_instance_;
    new (ptr) ::proto3::TestNestedMap_MapMapEntry_DoNotUse();
  }
  {
    void* ptr = &::proto3::_TestNestedMap_default_instance_;
    new (ptr) ::proto3::TestNestedMap();
    ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
  }
  ::proto3::TestNestedMap_MapMapEntry_DoNotUse::InitAsDefaultInstance();
  ::proto3::TestNestedMap::InitAsDefaultInstance();
}

::google::protobuf::internal::SCCInfo<6> scc_info_TestNestedMap =
    {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 6, InitDefaultsTestNestedMap}, {
      &protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::scc_info_TestNestedMap_BoolMapEntry_DoNotUse.base,
      &protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::scc_info_TestNestedMap_Int32MapEntry_DoNotUse.base,
      &protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::scc_info_TestNestedMap_Int64MapEntry_DoNotUse.base,
      &protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::scc_info_TestNestedMap_Uint32MapEntry_DoNotUse.base,
      &protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::scc_info_TestNestedMap_Uint64MapEntry_DoNotUse.base,
      &protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::scc_info_TestNestedMap_StringMapEntry_DoNotUse.base,}};

static void InitDefaultsTestWrapper() {
  GOOGLE_PROTOBUF_VERIFY_VERSION;

  {
    void* ptr = &::proto3::_TestWrapper_default_instance_;
    new (ptr) ::proto3::TestWrapper();
    ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
  }
  ::proto3::TestWrapper::InitAsDefaultInstance();
}

::google::protobuf::internal::SCCInfo<9> scc_info_TestWrapper =
    {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 9, InitDefaultsTestWrapper}, {
      &protobuf_google_2fprotobuf_2fwrappers_2eproto::scc_info_BoolValue.base,
      &protobuf_google_2fprotobuf_2fwrappers_2eproto::scc_info_Int32Value.base,
      &protobuf_google_2fprotobuf_2fwrappers_2eproto::scc_info_Int64Value.base,
      &protobuf_google_2fprotobuf_2fwrappers_2eproto::scc_info_UInt32Value.base,
      &protobuf_google_2fprotobuf_2fwrappers_2eproto::scc_info_UInt64Value.base,
      &protobuf_google_2fprotobuf_2fwrappers_2eproto::scc_info_FloatValue.base,
      &protobuf_google_2fprotobuf_2fwrappers_2eproto::scc_info_DoubleValue.base,
      &protobuf_google_2fprotobuf_2fwrappers_2eproto::scc_info_StringValue.base,
      &protobuf_google_2fprotobuf_2fwrappers_2eproto::scc_info_BytesValue.base,}};

static void InitDefaultsTestTimestamp() {
  GOOGLE_PROTOBUF_VERIFY_VERSION;

  {
    void* ptr = &::proto3::_TestTimestamp_default_instance_;
    new (ptr) ::proto3::TestTimestamp();
    ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
  }
  ::proto3::TestTimestamp::InitAsDefaultInstance();
}

::google::protobuf::internal::SCCInfo<1> scc_info_TestTimestamp =
    {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 1, InitDefaultsTestTimestamp}, {
      &protobuf_google_2fprotobuf_2ftimestamp_2eproto::scc_info_Timestamp.base,}};

static void InitDefaultsTestDuration() {
  GOOGLE_PROTOBUF_VERIFY_VERSION;

  {
    void* ptr = &::proto3::_TestDuration_default_instance_;
    new (ptr) ::proto3::TestDuration();
    ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
  }
  ::proto3::TestDuration::InitAsDefaultInstance();
}

::google::protobuf::internal::SCCInfo<1> scc_info_TestDuration =
    {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 1, InitDefaultsTestDuration}, {
      &protobuf_google_2fprotobuf_2fduration_2eproto::scc_info_Duration.base,}};

static void InitDefaultsTestFieldMask() {
  GOOGLE_PROTOBUF_VERIFY_VERSION;

  {
    void* ptr = &::proto3::_TestFieldMask_default_instance_;
    new (ptr) ::proto3::TestFieldMask();
    ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
  }
  ::proto3::TestFieldMask::InitAsDefaultInstance();
}

::google::protobuf::internal::SCCInfo<1> scc_info_TestFieldMask =
    {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 1, InitDefaultsTestFieldMask}, {
      &protobuf_google_2fprotobuf_2ffield_5fmask_2eproto::scc_info_FieldMask.base,}};

static void InitDefaultsTestStruct() {
  GOOGLE_PROTOBUF_VERIFY_VERSION;

  {
    void* ptr = &::proto3::_TestStruct_default_instance_;
    new (ptr) ::proto3::TestStruct();
    ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
  }
  ::proto3::TestStruct::InitAsDefaultInstance();
}

::google::protobuf::internal::SCCInfo<1> scc_info_TestStruct =
    {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 1, InitDefaultsTestStruct}, {
      &protobuf_google_2fprotobuf_2fstruct_2eproto::scc_info_ListValue.base,}};

static void InitDefaultsTestAny() {
  GOOGLE_PROTOBUF_VERIFY_VERSION;

  {
    void* ptr = &::proto3::_TestAny_default_instance_;
    new (ptr) ::proto3::TestAny();
    ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
  }
  ::proto3::TestAny::InitAsDefaultInstance();
}

::google::protobuf::internal::SCCInfo<1> scc_info_TestAny =
    {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 1, InitDefaultsTestAny}, {
      &protobuf_google_2fprotobuf_2fany_2eproto::scc_info_Any.base,}};

static void InitDefaultsTestValue() {
  GOOGLE_PROTOBUF_VERIFY_VERSION;

  {
    void* ptr = &::proto3::_TestValue_default_instance_;
    new (ptr) ::proto3::TestValue();
    ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
  }
  ::proto3::TestValue::InitAsDefaultInstance();
}

::google::protobuf::internal::SCCInfo<1> scc_info_TestValue =
    {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 1, InitDefaultsTestValue}, {
      &protobuf_google_2fprotobuf_2fstruct_2eproto::scc_info_ListValue.base,}};

static void InitDefaultsTestListValue() {
  GOOGLE_PROTOBUF_VERIFY_VERSION;

  {
    void* ptr = &::proto3::_TestListValue_default_instance_;
    new (ptr) ::proto3::TestListValue();
    ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
  }
  ::proto3::TestListValue::InitAsDefaultInstance();
}

::google::protobuf::internal::SCCInfo<1> scc_info_TestListValue =
    {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 1, InitDefaultsTestListValue}, {
      &protobuf_google_2fprotobuf_2fstruct_2eproto::scc_info_ListValue.base,}};

static void InitDefaultsTestBoolValue_BoolMapEntry_DoNotUse() {
  GOOGLE_PROTOBUF_VERIFY_VERSION;

  {
    void* ptr = &::proto3::_TestBoolValue_BoolMapEntry_DoNotUse_default_instance_;
    new (ptr) ::proto3::TestBoolValue_BoolMapEntry_DoNotUse();
  }
  ::proto3::TestBoolValue_BoolMapEntry_DoNotUse::InitAsDefaultInstance();
}

::google::protobuf::internal::SCCInfo<0> scc_info_TestBoolValue_BoolMapEntry_DoNotUse =
    {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsTestBoolValue_BoolMapEntry_DoNotUse}, {}};

static void InitDefaultsTestBoolValue() {
  GOOGLE_PROTOBUF_VERIFY_VERSION;

  {
    void* ptr = &::proto3::_TestBoolValue_default_instance_;
    new (ptr) ::proto3::TestBoolValue();
    ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
  }
  ::proto3::TestBoolValue::InitAsDefaultInstance();
}

::google::protobuf::internal::SCCInfo<1> scc_info_TestBoolValue =
    {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 1, InitDefaultsTestBoolValue}, {
      &protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::scc_info_TestBoolValue_BoolMapEntry_DoNotUse.base,}};

static void InitDefaultsTestCustomJsonName() {
  GOOGLE_PROTOBUF_VERIFY_VERSION;

  {
    void* ptr = &::proto3::_TestCustomJsonName_default_instance_;
    new (ptr) ::proto3::TestCustomJsonName();
    ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
  }
  ::proto3::TestCustomJsonName::InitAsDefaultInstance();
}

::google::protobuf::internal::SCCInfo<0> scc_info_TestCustomJsonName =
    {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsTestCustomJsonName}, {}};

static void InitDefaultsTestExtensions() {
  GOOGLE_PROTOBUF_VERIFY_VERSION;

  {
    void* ptr = &::proto3::_TestExtensions_default_instance_;
    new (ptr) ::proto3::TestExtensions();
    ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
  }
  ::proto3::TestExtensions::InitAsDefaultInstance();
}

::google::protobuf::internal::SCCInfo<1> scc_info_TestExtensions =
    {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 1, InitDefaultsTestExtensions}, {
      &protobuf_google_2fprotobuf_2funittest_2eproto::scc_info_TestAllExtensions.base,}};

static void InitDefaultsTestEnumValue() {
  GOOGLE_PROTOBUF_VERIFY_VERSION;

  {
    void* ptr = &::proto3::_TestEnumValue_default_instance_;
    new (ptr) ::proto3::TestEnumValue();
    ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
  }
  ::proto3::TestEnumValue::InitAsDefaultInstance();
}

::google::protobuf::internal::SCCInfo<0> scc_info_TestEnumValue =
    {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsTestEnumValue}, {}};

void InitDefaults() {
  ::google::protobuf::internal::InitSCC(&scc_info_MessageType.base);
  ::google::protobuf::internal::InitSCC(&scc_info_TestMessage.base);
  ::google::protobuf::internal::InitSCC(&scc_info_TestOneof.base);
  ::google::protobuf::internal::InitSCC(&scc_info_TestMap_BoolMapEntry_DoNotUse.base);
  ::google::protobuf::internal::InitSCC(&scc_info_TestMap_Int32MapEntry_DoNotUse.base);
  ::google::protobuf::internal::InitSCC(&scc_info_TestMap_Int64MapEntry_DoNotUse.base);
  ::google::protobuf::internal::InitSCC(&scc_info_TestMap_Uint32MapEntry_DoNotUse.base);
  ::google::protobuf::internal::InitSCC(&scc_info_TestMap_Uint64MapEntry_DoNotUse.base);
  ::google::protobuf::internal::InitSCC(&scc_info_TestMap_StringMapEntry_DoNotUse.base);
  ::google::protobuf::internal::InitSCC(&scc_info_TestMap.base);
  ::google::protobuf::internal::InitSCC(&scc_info_TestNestedMap_BoolMapEntry_DoNotUse.base);
  ::google::protobuf::internal::InitSCC(&scc_info_TestNestedMap_Int32MapEntry_DoNotUse.base);
  ::google::protobuf::internal::InitSCC(&scc_info_TestNestedMap_Int64MapEntry_DoNotUse.base);
  ::google::protobuf::internal::InitSCC(&scc_info_TestNestedMap_Uint32MapEntry_DoNotUse.base);
  ::google::protobuf::internal::InitSCC(&scc_info_TestNestedMap_Uint64MapEntry_DoNotUse.base);
  ::google::protobuf::internal::InitSCC(&scc_info_TestNestedMap_StringMapEntry_DoNotUse.base);
  ::google::protobuf::internal::InitSCC(&scc_info_TestNestedMap.base);
  ::google::protobuf::internal::InitSCC(&scc_info_TestWrapper.base);
  ::google::protobuf::internal::InitSCC(&scc_info_TestTimestamp.base);
  ::google::protobuf::internal::InitSCC(&scc_info_TestDuration.base);
  ::google::protobuf::internal::InitSCC(&scc_info_TestFieldMask.base);
  ::google::protobuf::internal::InitSCC(&scc_info_TestStruct.base);
  ::google::protobuf::internal::InitSCC(&scc_info_TestAny.base);
  ::google::protobuf::internal::InitSCC(&scc_info_TestValue.base);
  ::google::protobuf::internal::InitSCC(&scc_info_TestListValue.base);
  ::google::protobuf::internal::InitSCC(&scc_info_TestBoolValue_BoolMapEntry_DoNotUse.base);
  ::google::protobuf::internal::InitSCC(&scc_info_TestBoolValue.base);
  ::google::protobuf::internal::InitSCC(&scc_info_TestCustomJsonName.base);
  ::google::protobuf::internal::InitSCC(&scc_info_TestExtensions.base);
  ::google::protobuf::internal::InitSCC(&scc_info_TestEnumValue.base);
}

::google::protobuf::Metadata file_level_metadata[31];
const ::google::protobuf::EnumDescriptor* file_level_enum_descriptors[1];

const ::google::protobuf::uint32 TableStruct::offsets[] GOOGLE_PROTOBUF_ATTRIBUTE_SECTION_VARIABLE(protodesc_cold) = {
  ~0u,  // no _has_bits_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::MessageType, _internal_metadata_),
  ~0u,  // no _extensions_
  ~0u,  // no _oneof_case_
  ~0u,  // no _weak_field_map_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::MessageType, value_),
  ~0u,  // no _has_bits_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestMessage, _internal_metadata_),
  ~0u,  // no _extensions_
  ~0u,  // no _oneof_case_
  ~0u,  // no _weak_field_map_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestMessage, bool_value_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestMessage, int32_value_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestMessage, int64_value_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestMessage, uint32_value_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestMessage, uint64_value_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestMessage, float_value_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestMessage, double_value_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestMessage, string_value_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestMessage, bytes_value_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestMessage, enum_value_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestMessage, message_value_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestMessage, repeated_bool_value_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestMessage, repeated_int32_value_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestMessage, repeated_int64_value_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestMessage, repeated_uint32_value_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestMessage, repeated_uint64_value_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestMessage, repeated_float_value_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestMessage, repeated_double_value_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestMessage, repeated_string_value_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestMessage, repeated_bytes_value_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestMessage, repeated_enum_value_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestMessage, repeated_message_value_),
  ~0u,  // no _has_bits_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestOneof, _internal_metadata_),
  ~0u,  // no _extensions_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestOneof, _oneof_case_[0]),
  ~0u,  // no _weak_field_map_
  offsetof(::proto3::TestOneofDefaultTypeInternal, oneof_int32_value_),
  offsetof(::proto3::TestOneofDefaultTypeInternal, oneof_string_value_),
  offsetof(::proto3::TestOneofDefaultTypeInternal, oneof_bytes_value_),
  offsetof(::proto3::TestOneofDefaultTypeInternal, oneof_enum_value_),
  offsetof(::proto3::TestOneofDefaultTypeInternal, oneof_message_value_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestOneof, oneof_value_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestMap_BoolMapEntry_DoNotUse, _has_bits_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestMap_BoolMapEntry_DoNotUse, _internal_metadata_),
  ~0u,  // no _extensions_
  ~0u,  // no _oneof_case_
  ~0u,  // no _weak_field_map_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestMap_BoolMapEntry_DoNotUse, key_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestMap_BoolMapEntry_DoNotUse, value_),
  0,
  1,
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestMap_Int32MapEntry_DoNotUse, _has_bits_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestMap_Int32MapEntry_DoNotUse, _internal_metadata_),
  ~0u,  // no _extensions_
  ~0u,  // no _oneof_case_
  ~0u,  // no _weak_field_map_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestMap_Int32MapEntry_DoNotUse, key_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestMap_Int32MapEntry_DoNotUse, value_),
  0,
  1,
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestMap_Int64MapEntry_DoNotUse, _has_bits_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestMap_Int64MapEntry_DoNotUse, _internal_metadata_),
  ~0u,  // no _extensions_
  ~0u,  // no _oneof_case_
  ~0u,  // no _weak_field_map_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestMap_Int64MapEntry_DoNotUse, key_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestMap_Int64MapEntry_DoNotUse, value_),
  0,
  1,
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestMap_Uint32MapEntry_DoNotUse, _has_bits_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestMap_Uint32MapEntry_DoNotUse, _internal_metadata_),
  ~0u,  // no _extensions_
  ~0u,  // no _oneof_case_
  ~0u,  // no _weak_field_map_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestMap_Uint32MapEntry_DoNotUse, key_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestMap_Uint32MapEntry_DoNotUse, value_),
  0,
  1,
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestMap_Uint64MapEntry_DoNotUse, _has_bits_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestMap_Uint64MapEntry_DoNotUse, _internal_metadata_),
  ~0u,  // no _extensions_
  ~0u,  // no _oneof_case_
  ~0u,  // no _weak_field_map_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestMap_Uint64MapEntry_DoNotUse, key_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestMap_Uint64MapEntry_DoNotUse, value_),
  0,
  1,
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestMap_StringMapEntry_DoNotUse, _has_bits_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestMap_StringMapEntry_DoNotUse, _internal_metadata_),
  ~0u,  // no _extensions_
  ~0u,  // no _oneof_case_
  ~0u,  // no _weak_field_map_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestMap_StringMapEntry_DoNotUse, key_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestMap_StringMapEntry_DoNotUse, value_),
  0,
  1,
  ~0u,  // no _has_bits_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestMap, _internal_metadata_),
  ~0u,  // no _extensions_
  ~0u,  // no _oneof_case_
  ~0u,  // no _weak_field_map_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestMap, bool_map_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestMap, int32_map_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestMap, int64_map_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestMap, uint32_map_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestMap, uint64_map_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestMap, string_map_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestNestedMap_BoolMapEntry_DoNotUse, _has_bits_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestNestedMap_BoolMapEntry_DoNotUse, _internal_metadata_),
  ~0u,  // no _extensions_
  ~0u,  // no _oneof_case_
  ~0u,  // no _weak_field_map_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestNestedMap_BoolMapEntry_DoNotUse, key_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestNestedMap_BoolMapEntry_DoNotUse, value_),
  0,
  1,
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestNestedMap_Int32MapEntry_DoNotUse, _has_bits_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestNestedMap_Int32MapEntry_DoNotUse, _internal_metadata_),
  ~0u,  // no _extensions_
  ~0u,  // no _oneof_case_
  ~0u,  // no _weak_field_map_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestNestedMap_Int32MapEntry_DoNotUse, key_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestNestedMap_Int32MapEntry_DoNotUse, value_),
  0,
  1,
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestNestedMap_Int64MapEntry_DoNotUse, _has_bits_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestNestedMap_Int64MapEntry_DoNotUse, _internal_metadata_),
  ~0u,  // no _extensions_
  ~0u,  // no _oneof_case_
  ~0u,  // no _weak_field_map_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestNestedMap_Int64MapEntry_DoNotUse, key_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestNestedMap_Int64MapEntry_DoNotUse, value_),
  0,
  1,
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestNestedMap_Uint32MapEntry_DoNotUse, _has_bits_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestNestedMap_Uint32MapEntry_DoNotUse, _internal_metadata_),
  ~0u,  // no _extensions_
  ~0u,  // no _oneof_case_
  ~0u,  // no _weak_field_map_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestNestedMap_Uint32MapEntry_DoNotUse, key_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestNestedMap_Uint32MapEntry_DoNotUse, value_),
  0,
  1,
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestNestedMap_Uint64MapEntry_DoNotUse, _has_bits_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestNestedMap_Uint64MapEntry_DoNotUse, _internal_metadata_),
  ~0u,  // no _extensions_
  ~0u,  // no _oneof_case_
  ~0u,  // no _weak_field_map_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestNestedMap_Uint64MapEntry_DoNotUse, key_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestNestedMap_Uint64MapEntry_DoNotUse, value_),
  0,
  1,
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestNestedMap_StringMapEntry_DoNotUse, _has_bits_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestNestedMap_StringMapEntry_DoNotUse, _internal_metadata_),
  ~0u,  // no _extensions_
  ~0u,  // no _oneof_case_
  ~0u,  // no _weak_field_map_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestNestedMap_StringMapEntry_DoNotUse, key_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestNestedMap_StringMapEntry_DoNotUse, value_),
  0,
  1,
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestNestedMap_MapMapEntry_DoNotUse, _has_bits_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestNestedMap_MapMapEntry_DoNotUse, _internal_metadata_),
  ~0u,  // no _extensions_
  ~0u,  // no _oneof_case_
  ~0u,  // no _weak_field_map_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestNestedMap_MapMapEntry_DoNotUse, key_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestNestedMap_MapMapEntry_DoNotUse, value_),
  0,
  1,
  ~0u,  // no _has_bits_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestNestedMap, _internal_metadata_),
  ~0u,  // no _extensions_
  ~0u,  // no _oneof_case_
  ~0u,  // no _weak_field_map_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestNestedMap, bool_map_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestNestedMap, int32_map_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestNestedMap, int64_map_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestNestedMap, uint32_map_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestNestedMap, uint64_map_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestNestedMap, string_map_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestNestedMap, map_map_),
  ~0u,  // no _has_bits_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestWrapper, _internal_metadata_),
  ~0u,  // no _extensions_
  ~0u,  // no _oneof_case_
  ~0u,  // no _weak_field_map_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestWrapper, bool_value_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestWrapper, int32_value_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestWrapper, int64_value_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestWrapper, uint32_value_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestWrapper, uint64_value_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestWrapper, float_value_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestWrapper, double_value_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestWrapper, string_value_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestWrapper, bytes_value_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestWrapper, repeated_bool_value_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestWrapper, repeated_int32_value_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestWrapper, repeated_int64_value_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestWrapper, repeated_uint32_value_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestWrapper, repeated_uint64_value_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestWrapper, repeated_float_value_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestWrapper, repeated_double_value_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestWrapper, repeated_string_value_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestWrapper, repeated_bytes_value_),
  ~0u,  // no _has_bits_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestTimestamp, _internal_metadata_),
  ~0u,  // no _extensions_
  ~0u,  // no _oneof_case_
  ~0u,  // no _weak_field_map_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestTimestamp, value_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestTimestamp, repeated_value_),
  ~0u,  // no _has_bits_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestDuration, _internal_metadata_),
  ~0u,  // no _extensions_
  ~0u,  // no _oneof_case_
  ~0u,  // no _weak_field_map_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestDuration, value_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestDuration, repeated_value_),
  ~0u,  // no _has_bits_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestFieldMask, _internal_metadata_),
  ~0u,  // no _extensions_
  ~0u,  // no _oneof_case_
  ~0u,  // no _weak_field_map_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestFieldMask, value_),
  ~0u,  // no _has_bits_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestStruct, _internal_metadata_),
  ~0u,  // no _extensions_
  ~0u,  // no _oneof_case_
  ~0u,  // no _weak_field_map_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestStruct, value_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestStruct, repeated_value_),
  ~0u,  // no _has_bits_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestAny, _internal_metadata_),
  ~0u,  // no _extensions_
  ~0u,  // no _oneof_case_
  ~0u,  // no _weak_field_map_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestAny, value_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestAny, repeated_value_),
  ~0u,  // no _has_bits_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestValue, _internal_metadata_),
  ~0u,  // no _extensions_
  ~0u,  // no _oneof_case_
  ~0u,  // no _weak_field_map_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestValue, value_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestValue, repeated_value_),
  ~0u,  // no _has_bits_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestListValue, _internal_metadata_),
  ~0u,  // no _extensions_
  ~0u,  // no _oneof_case_
  ~0u,  // no _weak_field_map_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestListValue, value_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestListValue, repeated_value_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestBoolValue_BoolMapEntry_DoNotUse, _has_bits_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestBoolValue_BoolMapEntry_DoNotUse, _internal_metadata_),
  ~0u,  // no _extensions_
  ~0u,  // no _oneof_case_
  ~0u,  // no _weak_field_map_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestBoolValue_BoolMapEntry_DoNotUse, key_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestBoolValue_BoolMapEntry_DoNotUse, value_),
  0,
  1,
  ~0u,  // no _has_bits_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestBoolValue, _internal_metadata_),
  ~0u,  // no _extensions_
  ~0u,  // no _oneof_case_
  ~0u,  // no _weak_field_map_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestBoolValue, bool_value_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestBoolValue, bool_map_),
  ~0u,  // no _has_bits_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestCustomJsonName, _internal_metadata_),
  ~0u,  // no _extensions_
  ~0u,  // no _oneof_case_
  ~0u,  // no _weak_field_map_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestCustomJsonName, value_),
  ~0u,  // no _has_bits_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestExtensions, _internal_metadata_),
  ~0u,  // no _extensions_
  ~0u,  // no _oneof_case_
  ~0u,  // no _weak_field_map_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestExtensions, extensions_),
  ~0u,  // no _has_bits_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestEnumValue, _internal_metadata_),
  ~0u,  // no _extensions_
  ~0u,  // no _oneof_case_
  ~0u,  // no _weak_field_map_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestEnumValue, enum_value1_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestEnumValue, enum_value2_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3::TestEnumValue, enum_value3_),
};
static const ::google::protobuf::internal::MigrationSchema schemas[] GOOGLE_PROTOBUF_ATTRIBUTE_SECTION_VARIABLE(protodesc_cold) = {
  { 0, -1, sizeof(::proto3::MessageType)},
  { 6, -1, sizeof(::proto3::TestMessage)},
  { 33, -1, sizeof(::proto3::TestOneof)},
  { 44, 51, sizeof(::proto3::TestMap_BoolMapEntry_DoNotUse)},
  { 53, 60, sizeof(::proto3::TestMap_Int32MapEntry_DoNotUse)},
  { 62, 69, sizeof(::proto3::TestMap_Int64MapEntry_DoNotUse)},
  { 71, 78, sizeof(::proto3::TestMap_Uint32MapEntry_DoNotUse)},
  { 80, 87, sizeof(::proto3::TestMap_Uint64MapEntry_DoNotUse)},
  { 89, 96, sizeof(::proto3::TestMap_StringMapEntry_DoNotUse)},
  { 98, -1, sizeof(::proto3::TestMap)},
  { 109, 116, sizeof(::proto3::TestNestedMap_BoolMapEntry_DoNotUse)},
  { 118, 125, sizeof(::proto3::TestNestedMap_Int32MapEntry_DoNotUse)},
  { 127, 134, sizeof(::proto3::TestNestedMap_Int64MapEntry_DoNotUse)},
  { 136, 143, sizeof(::proto3::TestNestedMap_Uint32MapEntry_DoNotUse)},
  { 145, 152, sizeof(::proto3::TestNestedMap_Uint64MapEntry_DoNotUse)},
  { 154, 161, sizeof(::proto3::TestNestedMap_StringMapEntry_DoNotUse)},
  { 163, 170, sizeof(::proto3::TestNestedMap_MapMapEntry_DoNotUse)},
  { 172, -1, sizeof(::proto3::TestNestedMap)},
  { 184, -1, sizeof(::proto3::TestWrapper)},
  { 207, -1, sizeof(::proto3::TestTimestamp)},
  { 214, -1, sizeof(::proto3::TestDuration)},
  { 221, -1, sizeof(::proto3::TestFieldMask)},
  { 227, -1, sizeof(::proto3::TestStruct)},
  { 234, -1, sizeof(::proto3::TestAny)},
  { 241, -1, sizeof(::proto3::TestValue)},
  { 248, -1, sizeof(::proto3::TestListValue)},
  { 255, 262, sizeof(::proto3::TestBoolValue_BoolMapEntry_DoNotUse)},
  { 264, -1, sizeof(::proto3::TestBoolValue)},
  { 271, -1, sizeof(::proto3::TestCustomJsonName)},
  { 277, -1, sizeof(::proto3::TestExtensions)},
  { 283, -1, sizeof(::proto3::TestEnumValue)},
};

static ::google::protobuf::Message const * const file_default_instances[] = {
  reinterpret_cast<const ::google::protobuf::Message*>(&::proto3::_MessageType_default_instance_),
  reinterpret_cast<const ::google::protobuf::Message*>(&::proto3::_TestMessage_default_instance_),
  reinterpret_cast<const ::google::protobuf::Message*>(&::proto3::_TestOneof_default_instance_),
  reinterpret_cast<const ::google::protobuf::Message*>(&::proto3::_TestMap_BoolMapEntry_DoNotUse_default_instance_),
  reinterpret_cast<const ::google::protobuf::Message*>(&::proto3::_TestMap_Int32MapEntry_DoNotUse_default_instance_),
  reinterpret_cast<const ::google::protobuf::Message*>(&::proto3::_TestMap_Int64MapEntry_DoNotUse_default_instance_),
  reinterpret_cast<const ::google::protobuf::Message*>(&::proto3::_TestMap_Uint32MapEntry_DoNotUse_default_instance_),
  reinterpret_cast<const ::google::protobuf::Message*>(&::proto3::_TestMap_Uint64MapEntry_DoNotUse_default_instance_),
  reinterpret_cast<const ::google::protobuf::Message*>(&::proto3::_TestMap_StringMapEntry_DoNotUse_default_instance_),
  reinterpret_cast<const ::google::protobuf::Message*>(&::proto3::_TestMap_default_instance_),
  reinterpret_cast<const ::google::protobuf::Message*>(&::proto3::_TestNestedMap_BoolMapEntry_DoNotUse_default_instance_),
  reinterpret_cast<const ::google::protobuf::Message*>(&::proto3::_TestNestedMap_Int32MapEntry_DoNotUse_default_instance_),
  reinterpret_cast<const ::google::protobuf::Message*>(&::proto3::_TestNestedMap_Int64MapEntry_DoNotUse_default_instance_),
  reinterpret_cast<const ::google::protobuf::Message*>(&::proto3::_TestNestedMap_Uint32MapEntry_DoNotUse_default_instance_),
  reinterpret_cast<const ::google::protobuf::Message*>(&::proto3::_TestNestedMap_Uint64MapEntry_DoNotUse_default_instance_),
  reinterpret_cast<const ::google::protobuf::Message*>(&::proto3::_TestNestedMap_StringMapEntry_DoNotUse_default_instance_),
  reinterpret_cast<const ::google::protobuf::Message*>(&::proto3::_TestNestedMap_MapMapEntry_DoNotUse_default_instance_),
  reinterpret_cast<const ::google::protobuf::Message*>(&::proto3::_TestNestedMap_default_instance_),
  reinterpret_cast<const ::google::protobuf::Message*>(&::proto3::_TestWrapper_default_instance_),
  reinterpret_cast<const ::google::protobuf::Message*>(&::proto3::_TestTimestamp_default_instance_),
  reinterpret_cast<const ::google::protobuf::Message*>(&::proto3::_TestDuration_default_instance_),
  reinterpret_cast<const ::google::protobuf::Message*>(&::proto3::_TestFieldMask_default_instance_),
  reinterpret_cast<const ::google::protobuf::Message*>(&::proto3::_TestStruct_default_instance_),
  reinterpret_cast<const ::google::protobuf::Message*>(&::proto3::_TestAny_default_instance_),
  reinterpret_cast<const ::google::protobuf::Message*>(&::proto3::_TestValue_default_instance_),
  reinterpret_cast<const ::google::protobuf::Message*>(&::proto3::_TestListValue_default_instance_),
  reinterpret_cast<const ::google::protobuf::Message*>(&::proto3::_TestBoolValue_BoolMapEntry_DoNotUse_default_instance_),
  reinterpret_cast<const ::google::protobuf::Message*>(&::proto3::_TestBoolValue_default_instance_),
  reinterpret_cast<const ::google::protobuf::Message*>(&::proto3::_TestCustomJsonName_default_instance_),
  reinterpret_cast<const ::google::protobuf::Message*>(&::proto3::_TestExtensions_default_instance_),
  reinterpret_cast<const ::google::protobuf::Message*>(&::proto3::_TestEnumValue_default_instance_),
};

void protobuf_AssignDescriptors() {
  AddDescriptors();
  AssignDescriptors(
      "google/protobuf/util/json_format_proto3.proto", schemas, file_default_instances, TableStruct::offsets,
      file_level_metadata, file_level_enum_descriptors, NULL);
}

void protobuf_AssignDescriptorsOnce() {
  static ::google::protobuf::internal::once_flag once;
  ::google::protobuf::internal::call_once(once, protobuf_AssignDescriptors);
}

void protobuf_RegisterTypes(const ::std::string&) GOOGLE_PROTOBUF_ATTRIBUTE_COLD;
void protobuf_RegisterTypes(const ::std::string&) {
  protobuf_AssignDescriptorsOnce();
  ::google::protobuf::internal::RegisterAllTypes(file_level_metadata, 31);
}

void AddDescriptorsImpl() {
  InitDefaults();
  static const char descriptor[] GOOGLE_PROTOBUF_ATTRIBUTE_SECTION_VARIABLE(protodesc_cold) = {
      "\n-google/protobuf/util/json_format_proto"
      "3.proto\022\006proto3\032\036google/protobuf/duratio"
      "n.proto\032\037google/protobuf/timestamp.proto"
      "\032\036google/protobuf/wrappers.proto\032\034google"
      "/protobuf/struct.proto\032\031google/protobuf/"
      "any.proto\032 google/protobuf/field_mask.pr"
      "oto\032\036google/protobuf/unittest.proto\"\034\n\013M"
      "essageType\022\r\n\005value\030\001 \001(\005\"\224\005\n\013TestMessag"
      "e\022\022\n\nbool_value\030\001 \001(\010\022\023\n\013int32_value\030\002 \001"
      "(\005\022\023\n\013int64_value\030\003 \001(\003\022\024\n\014uint32_value\030"
      "\004 \001(\r\022\024\n\014uint64_value\030\005 \001(\004\022\023\n\013float_val"
      "ue\030\006 \001(\002\022\024\n\014double_value\030\007 \001(\001\022\024\n\014string"
      "_value\030\010 \001(\t\022\023\n\013bytes_value\030\t \001(\014\022$\n\nenu"
      "m_value\030\n \001(\0162\020.proto3.EnumType\022*\n\rmessa"
      "ge_value\030\013 \001(\0132\023.proto3.MessageType\022\033\n\023r"
      "epeated_bool_value\030\025 \003(\010\022\034\n\024repeated_int"
      "32_value\030\026 \003(\005\022\034\n\024repeated_int64_value\030\027"
      " \003(\003\022\035\n\025repeated_uint32_value\030\030 \003(\r\022\035\n\025r"
      "epeated_uint64_value\030\031 \003(\004\022\034\n\024repeated_f"
      "loat_value\030\032 \003(\002\022\035\n\025repeated_double_valu"
      "e\030\033 \003(\001\022\035\n\025repeated_string_value\030\034 \003(\t\022\034"
      "\n\024repeated_bytes_value\030\035 \003(\014\022-\n\023repeated"
      "_enum_value\030\036 \003(\0162\020.proto3.EnumType\0223\n\026r"
      "epeated_message_value\030\037 \003(\0132\023.proto3.Mes"
      "sageType\"\324\001\n\tTestOneof\022\033\n\021oneof_int32_va"
      "lue\030\001 \001(\005H\000\022\034\n\022oneof_string_value\030\002 \001(\tH"
      "\000\022\033\n\021oneof_bytes_value\030\003 \001(\014H\000\022,\n\020oneof_"
      "enum_value\030\004 \001(\0162\020.proto3.EnumTypeH\000\0222\n\023"
      "oneof_message_value\030\005 \001(\0132\023.proto3.Messa"
      "geTypeH\000B\r\n\013oneof_value\"\341\004\n\007TestMap\022.\n\010b"
      "ool_map\030\001 \003(\0132\034.proto3.TestMap.BoolMapEn"
      "try\0220\n\tint32_map\030\002 \003(\0132\035.proto3.TestMap."
      "Int32MapEntry\0220\n\tint64_map\030\003 \003(\0132\035.proto"
      "3.TestMap.Int64MapEntry\0222\n\nuint32_map\030\004 "
      "\003(\0132\036.proto3.TestMap.Uint32MapEntry\0222\n\nu"
      "int64_map\030\005 \003(\0132\036.proto3.TestMap.Uint64M"
      "apEntry\0222\n\nstring_map\030\006 \003(\0132\036.proto3.Tes"
      "tMap.StringMapEntry\032.\n\014BoolMapEntry\022\013\n\003k"
      "ey\030\001 \001(\010\022\r\n\005value\030\002 \001(\005:\0028\001\032/\n\rInt32MapE"
      "ntry\022\013\n\003key\030\001 \001(\005\022\r\n\005value\030\002 \001(\005:\0028\001\032/\n\r"
      "Int64MapEntry\022\013\n\003key\030\001 \001(\003\022\r\n\005value\030\002 \001("
      "\005:\0028\001\0320\n\016Uint32MapEntry\022\013\n\003key\030\001 \001(\r\022\r\n\005"
      "value\030\002 \001(\005:\0028\001\0320\n\016Uint64MapEntry\022\013\n\003key"
      "\030\001 \001(\004\022\r\n\005value\030\002 \001(\005:\0028\001\0320\n\016StringMapEn"
      "try\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\005:\0028\001\"\205\006\n\r"
      "TestNestedMap\0224\n\010bool_map\030\001 \003(\0132\".proto3"
      ".TestNestedMap.BoolMapEntry\0226\n\tint32_map"
      "\030\002 \003(\0132#.proto3.TestNestedMap.Int32MapEn"
      "try\0226\n\tint64_map\030\003 \003(\0132#.proto3.TestNest"
      "edMap.Int64MapEntry\0228\n\nuint32_map\030\004 \003(\0132"
      "$.proto3.TestNestedMap.Uint32MapEntry\0228\n"
      "\nuint64_map\030\005 \003(\0132$.proto3.TestNestedMap"
      ".Uint64MapEntry\0228\n\nstring_map\030\006 \003(\0132$.pr"
      "oto3.TestNestedMap.StringMapEntry\0222\n\007map"
      "_map\030\007 \003(\0132!.proto3.TestNestedMap.MapMap"
      "Entry\032.\n\014BoolMapEntry\022\013\n\003key\030\001 \001(\010\022\r\n\005va"
      "lue\030\002 \001(\005:\0028\001\032/\n\rInt32MapEntry\022\013\n\003key\030\001 "
      "\001(\005\022\r\n\005value\030\002 \001(\005:\0028\001\032/\n\rInt64MapEntry\022"
      "\013\n\003key\030\001 \001(\003\022\r\n\005value\030\002 \001(\005:\0028\001\0320\n\016Uint3"
      "2MapEntry\022\013\n\003key\030\001 \001(\r\022\r\n\005value\030\002 \001(\005:\0028"
      "\001\0320\n\016Uint64MapEntry\022\013\n\003key\030\001 \001(\004\022\r\n\005valu"
      "e\030\002 \001(\005:\0028\001\0320\n\016StringMapEntry\022\013\n\003key\030\001 \001"
      "(\t\022\r\n\005value\030\002 \001(\005:\0028\001\032D\n\013MapMapEntry\022\013\n\003"
      "key\030\001 \001(\t\022$\n\005value\030\002 \001(\0132\025.proto3.TestNe"
      "stedMap:\0028\001\"\356\007\n\013TestWrapper\022.\n\nbool_valu"
      "e\030\001 \001(\0132\032.google.protobuf.BoolValue\0220\n\013i"
      "nt32_value\030\002 \001(\0132\033.google.protobuf.Int32"
      "Value\0220\n\013int64_value\030\003 \001(\0132\033.google.prot"
      "obuf.Int64Value\0222\n\014uint32_value\030\004 \001(\0132\034."
      "google.protobuf.UInt32Value\0222\n\014uint64_va"
      "lue\030\005 \001(\0132\034.google.protobuf.UInt64Value\022"
      "0\n\013float_value\030\006 \001(\0132\033.google.protobuf.F"
      "loatValue\0222\n\014double_value\030\007 \001(\0132\034.google"
      ".protobuf.DoubleValue\0222\n\014string_value\030\010 "
      "\001(\0132\034.google.protobuf.StringValue\0220\n\013byt"
      "es_value\030\t \001(\0132\033.google.protobuf.BytesVa"
      "lue\0227\n\023repeated_bool_value\030\013 \003(\0132\032.googl"
      "e.protobuf.BoolValue\0229\n\024repeated_int32_v"
      "alue\030\014 \003(\0132\033.google.protobuf.Int32Value\022"
      "9\n\024repeated_int64_value\030\r \003(\0132\033.google.p"
      "rotobuf.Int64Value\022;\n\025repeated_uint32_va"
      "lue\030\016 \003(\0132\034.google.protobuf.UInt32Value\022"
      ";\n\025repeated_uint64_value\030\017 \003(\0132\034.google."
      "protobuf.UInt64Value\0229\n\024repeated_float_v"
      "alue\030\020 \003(\0132\033.google.protobuf.FloatValue\022"
      ";\n\025repeated_double_value\030\021 \003(\0132\034.google."
      "protobuf.DoubleValue\022;\n\025repeated_string_"
      "value\030\022 \003(\0132\034.google.protobuf.StringValu"
      "e\0229\n\024repeated_bytes_value\030\023 \003(\0132\033.google"
      ".protobuf.BytesValue\"n\n\rTestTimestamp\022)\n"
      "\005value\030\001 \001(\0132\032.google.protobuf.Timestamp"
      "\0222\n\016repeated_value\030\002 \003(\0132\032.google.protob"
      "uf.Timestamp\"k\n\014TestDuration\022(\n\005value\030\001 "
      "\001(\0132\031.google.protobuf.Duration\0221\n\016repeat"
      "ed_value\030\002 \003(\0132\031.google.protobuf.Duratio"
      "n\":\n\rTestFieldMask\022)\n\005value\030\001 \001(\0132\032.goog"
      "le.protobuf.FieldMask\"e\n\nTestStruct\022&\n\005v"
      "alue\030\001 \001(\0132\027.google.protobuf.Struct\022/\n\016r"
      "epeated_value\030\002 \003(\0132\027.google.protobuf.St"
      "ruct\"\\\n\007TestAny\022#\n\005value\030\001 \001(\0132\024.google."
      "protobuf.Any\022,\n\016repeated_value\030\002 \003(\0132\024.g"
      "oogle.protobuf.Any\"b\n\tTestValue\022%\n\005value"
      "\030\001 \001(\0132\026.google.protobuf.Value\022.\n\016repeat"
      "ed_value\030\002 \003(\0132\026.google.protobuf.Value\"n"
      "\n\rTestListValue\022)\n\005value\030\001 \001(\0132\032.google."
      "protobuf.ListValue\0222\n\016repeated_value\030\002 \003"
      "(\0132\032.google.protobuf.ListValue\"\211\001\n\rTestB"
      "oolValue\022\022\n\nbool_value\030\001 \001(\010\0224\n\010bool_map"
      "\030\002 \003(\0132\".proto3.TestBoolValue.BoolMapEnt"
      "ry\032.\n\014BoolMapEntry\022\013\n\003key\030\001 \001(\010\022\r\n\005value"
      "\030\002 \001(\005:\0028\001\"+\n\022TestCustomJsonName\022\025\n\005valu"
      "e\030\001 \001(\005R\006@value\"J\n\016TestExtensions\0228\n\next"
      "ensions\030\001 \001(\0132$.protobuf_unittest.TestAl"
      "lExtensions\"\204\001\n\rTestEnumValue\022%\n\013enum_va"
      "lue1\030\001 \001(\0162\020.proto3.EnumType\022%\n\013enum_val"
      "ue2\030\002 \001(\0162\020.proto3.EnumType\022%\n\013enum_valu"
      "e3\030\003 \001(\0162\020.proto3.EnumType*\034\n\010EnumType\022\007"
      "\n\003FOO\020\000\022\007\n\003BAR\020\001B,\n\030com.google.protobuf."
      "utilB\020JsonFormatProto3b\006proto3"
  };
  ::google::protobuf::DescriptorPool::InternalAddGeneratedFile(
      descriptor, 4750);
  ::google::protobuf::MessageFactory::InternalRegisterGeneratedFile(
    "google/protobuf/util/json_format_proto3.proto", &protobuf_RegisterTypes);
  ::protobuf_google_2fprotobuf_2fduration_2eproto::AddDescriptors();
  ::protobuf_google_2fprotobuf_2ftimestamp_2eproto::AddDescriptors();
  ::protobuf_google_2fprotobuf_2fwrappers_2eproto::AddDescriptors();
  ::protobuf_google_2fprotobuf_2fstruct_2eproto::AddDescriptors();
  ::protobuf_google_2fprotobuf_2fany_2eproto::AddDescriptors();
  ::protobuf_google_2fprotobuf_2ffield_5fmask_2eproto::AddDescriptors();
  ::protobuf_google_2fprotobuf_2funittest_2eproto::AddDescriptors();
}

void AddDescriptors() {
  static ::google::protobuf::internal::once_flag once;
  ::google::protobuf::internal::call_once(once, AddDescriptorsImpl);
}
// Force AddDescriptors() to be called at dynamic initialization time.
struct StaticDescriptorInitializer {
  StaticDescriptorInitializer() {
    AddDescriptors();
  }
} static_descriptor_initializer;
}  // namespace protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto
namespace proto3 {
const ::google::protobuf::EnumDescriptor* EnumType_descriptor() {
  protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::protobuf_AssignDescriptorsOnce();
  return protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::file_level_enum_descriptors[0];
}
bool EnumType_IsValid(int value) {
  switch (value) {
    case 0:
    case 1:
      return true;
    default:
      return false;
  }
}


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

void MessageType::InitAsDefaultInstance() {
}
#if !defined(_MSC_VER) || _MSC_VER >= 1900
const int MessageType::kValueFieldNumber;
#endif  // !defined(_MSC_VER) || _MSC_VER >= 1900

MessageType::MessageType()
  : ::google::protobuf::Message(), _internal_metadata_(NULL) {
  ::google::protobuf::internal::InitSCC(
      &protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::scc_info_MessageType.base);
  SharedCtor();
  // @@protoc_insertion_point(constructor:proto3.MessageType)
}
MessageType::MessageType(const MessageType& from)
  : ::google::protobuf::Message(),
      _internal_metadata_(NULL) {
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  value_ = from.value_;
  // @@protoc_insertion_point(copy_constructor:proto3.MessageType)
}

void MessageType::SharedCtor() {
  value_ = 0;
}

MessageType::~MessageType() {
  // @@protoc_insertion_point(destructor:proto3.MessageType)
  SharedDtor();
}

void MessageType::SharedDtor() {
}

void MessageType::SetCachedSize(int size) const {
  _cached_size_.Set(size);
}
const ::google::protobuf::Descriptor* MessageType::descriptor() {
  ::protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
}

const MessageType& MessageType::default_instance() {
  ::google::protobuf::internal::InitSCC(&protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::scc_info_MessageType.base);
  return *internal_default_instance();
}


void MessageType::Clear() {
// @@protoc_insertion_point(message_clear_start:proto3.MessageType)
  ::google::protobuf::uint32 cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  value_ = 0;
  _internal_metadata_.Clear();
}

bool MessageType::MergePartialFromCodedStream(
    ::google::protobuf::io::CodedInputStream* input) {
#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
  ::google::protobuf::uint32 tag;
  // @@protoc_insertion_point(parse_start:proto3.MessageType)
  for (;;) {
    ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
    tag = p.first;
    if (!p.second) goto handle_unusual;
    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
      // int32 value = 1;
      case 1: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(8u /* 8 & 0xFF */)) {

          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
                 input, &value_)));
        } else {
          goto handle_unusual;
        }
        break;
      }

      default: {
      handle_unusual:
        if (tag == 0) {
          goto success;
        }
        DO_(::google::protobuf::internal::WireFormat::SkipField(
              input, tag, _internal_metadata_.mutable_unknown_fields()));
        break;
      }
    }
  }
success:
  // @@protoc_insertion_point(parse_success:proto3.MessageType)
  return true;
failure:
  // @@protoc_insertion_point(parse_failure:proto3.MessageType)
  return false;
#undef DO_
}

void MessageType::SerializeWithCachedSizes(
    ::google::protobuf::io::CodedOutputStream* output) const {
  // @@protoc_insertion_point(serialize_start:proto3.MessageType)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  // int32 value = 1;
  if (this->value() != 0) {
    ::google::protobuf::internal::WireFormatLite::WriteInt32(1, this->value(), output);
  }

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), output);
  }
  // @@protoc_insertion_point(serialize_end:proto3.MessageType)
}

::google::protobuf::uint8* MessageType::InternalSerializeWithCachedSizesToArray(
    bool deterministic, ::google::protobuf::uint8* target) const {
  (void)deterministic; // Unused
  // @@protoc_insertion_point(serialize_to_array_start:proto3.MessageType)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  // int32 value = 1;
  if (this->value() != 0) {
    target = ::google::protobuf::internal::WireFormatLite::WriteInt32ToArray(1, this->value(), target);
  }

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), target);
  }
  // @@protoc_insertion_point(serialize_to_array_end:proto3.MessageType)
  return target;
}

size_t MessageType::ByteSizeLong() const {
// @@protoc_insertion_point(message_byte_size_start:proto3.MessageType)
  size_t total_size = 0;

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    total_size +=
      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()));
  }
  // int32 value = 1;
  if (this->value() != 0) {
    total_size += 1 +
      ::google::protobuf::internal::WireFormatLite::Int32Size(
        this->value());
  }

  int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
  SetCachedSize(cached_size);
  return total_size;
}

void MessageType::MergeFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_merge_from_start:proto3.MessageType)
  GOOGLE_DCHECK_NE(&from, this);
  const MessageType* source =
      ::google::protobuf::internal::DynamicCastToGenerated<const MessageType>(
          &from);
  if (source == NULL) {
  // @@protoc_insertion_point(generalized_merge_from_cast_fail:proto3.MessageType)
    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
  } else {
  // @@protoc_insertion_point(generalized_merge_from_cast_success:proto3.MessageType)
    MergeFrom(*source);
  }
}

void MessageType::MergeFrom(const MessageType& from) {
// @@protoc_insertion_point(class_specific_merge_from_start:proto3.MessageType)
  GOOGLE_DCHECK_NE(&from, this);
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  if (from.value() != 0) {
    set_value(from.value());
  }
}

void MessageType::CopyFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_copy_from_start:proto3.MessageType)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

void MessageType::CopyFrom(const MessageType& from) {
// @@protoc_insertion_point(class_specific_copy_from_start:proto3.MessageType)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

bool MessageType::IsInitialized() const {
  return true;
}

void MessageType::Swap(MessageType* other) {
  if (other == this) return;
  InternalSwap(other);
}
void MessageType::InternalSwap(MessageType* other) {
  using std::swap;
  swap(value_, other->value_);
  _internal_metadata_.Swap(&other->_internal_metadata_);
}

::google::protobuf::Metadata MessageType::GetMetadata() const {
  protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::file_level_metadata[kIndexInFileMessages];
}


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

void TestMessage::InitAsDefaultInstance() {
  ::proto3::_TestMessage_default_instance_._instance.get_mutable()->message_value_ = const_cast< ::proto3::MessageType*>(
      ::proto3::MessageType::internal_default_instance());
}
#if !defined(_MSC_VER) || _MSC_VER >= 1900
const int TestMessage::kBoolValueFieldNumber;
const int TestMessage::kInt32ValueFieldNumber;
const int TestMessage::kInt64ValueFieldNumber;
const int TestMessage::kUint32ValueFieldNumber;
const int TestMessage::kUint64ValueFieldNumber;
const int TestMessage::kFloatValueFieldNumber;
const int TestMessage::kDoubleValueFieldNumber;
const int TestMessage::kStringValueFieldNumber;
const int TestMessage::kBytesValueFieldNumber;
const int TestMessage::kEnumValueFieldNumber;
const int TestMessage::kMessageValueFieldNumber;
const int TestMessage::kRepeatedBoolValueFieldNumber;
const int TestMessage::kRepeatedInt32ValueFieldNumber;
const int TestMessage::kRepeatedInt64ValueFieldNumber;
const int TestMessage::kRepeatedUint32ValueFieldNumber;
const int TestMessage::kRepeatedUint64ValueFieldNumber;
const int TestMessage::kRepeatedFloatValueFieldNumber;
const int TestMessage::kRepeatedDoubleValueFieldNumber;
const int TestMessage::kRepeatedStringValueFieldNumber;
const int TestMessage::kRepeatedBytesValueFieldNumber;
const int TestMessage::kRepeatedEnumValueFieldNumber;
const int TestMessage::kRepeatedMessageValueFieldNumber;
#endif  // !defined(_MSC_VER) || _MSC_VER >= 1900

TestMessage::TestMessage()
  : ::google::protobuf::Message(), _internal_metadata_(NULL) {
  ::google::protobuf::internal::InitSCC(
      &protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::scc_info_TestMessage.base);
  SharedCtor();
  // @@protoc_insertion_point(constructor:proto3.TestMessage)
}
TestMessage::TestMessage(const TestMessage& from)
  : ::google::protobuf::Message(),
      _internal_metadata_(NULL),
      repeated_bool_value_(from.repeated_bool_value_),
      repeated_int32_value_(from.repeated_int32_value_),
      repeated_int64_value_(from.repeated_int64_value_),
      repeated_uint32_value_(from.repeated_uint32_value_),
      repeated_uint64_value_(from.repeated_uint64_value_),
      repeated_float_value_(from.repeated_float_value_),
      repeated_double_value_(from.repeated_double_value_),
      repeated_string_value_(from.repeated_string_value_),
      repeated_bytes_value_(from.repeated_bytes_value_),
      repeated_enum_value_(from.repeated_enum_value_),
      repeated_message_value_(from.repeated_message_value_) {
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  string_value_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  if (from.string_value().size() > 0) {
    string_value_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.string_value_);
  }
  bytes_value_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  if (from.bytes_value().size() > 0) {
    bytes_value_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.bytes_value_);
  }
  if (from.has_message_value()) {
    message_value_ = new ::proto3::MessageType(*from.message_value_);
  } else {
    message_value_ = NULL;
  }
  ::memcpy(&bool_value_, &from.bool_value_,
    static_cast<size_t>(reinterpret_cast<char*>(&enum_value_) -
    reinterpret_cast<char*>(&bool_value_)) + sizeof(enum_value_));
  // @@protoc_insertion_point(copy_constructor:proto3.TestMessage)
}

void TestMessage::SharedCtor() {
  string_value_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  bytes_value_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  ::memset(&message_value_, 0, static_cast<size_t>(
      reinterpret_cast<char*>(&enum_value_) -
      reinterpret_cast<char*>(&message_value_)) + sizeof(enum_value_));
}

TestMessage::~TestMessage() {
  // @@protoc_insertion_point(destructor:proto3.TestMessage)
  SharedDtor();
}

void TestMessage::SharedDtor() {
  string_value_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  bytes_value_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  if (this != internal_default_instance()) delete message_value_;
}

void TestMessage::SetCachedSize(int size) const {
  _cached_size_.Set(size);
}
const ::google::protobuf::Descriptor* TestMessage::descriptor() {
  ::protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
}

const TestMessage& TestMessage::default_instance() {
  ::google::protobuf::internal::InitSCC(&protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::scc_info_TestMessage.base);
  return *internal_default_instance();
}


void TestMessage::Clear() {
// @@protoc_insertion_point(message_clear_start:proto3.TestMessage)
  ::google::protobuf::uint32 cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  repeated_bool_value_.Clear();
  repeated_int32_value_.Clear();
  repeated_int64_value_.Clear();
  repeated_uint32_value_.Clear();
  repeated_uint64_value_.Clear();
  repeated_float_value_.Clear();
  repeated_double_value_.Clear();
  repeated_string_value_.Clear();
  repeated_bytes_value_.Clear();
  repeated_enum_value_.Clear();
  repeated_message_value_.Clear();
  string_value_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  bytes_value_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  if (GetArenaNoVirtual() == NULL && message_value_ != NULL) {
    delete message_value_;
  }
  message_value_ = NULL;
  ::memset(&bool_value_, 0, static_cast<size_t>(
      reinterpret_cast<char*>(&enum_value_) -
      reinterpret_cast<char*>(&bool_value_)) + sizeof(enum_value_));
  _internal_metadata_.Clear();
}

bool TestMessage::MergePartialFromCodedStream(
    ::google::protobuf::io::CodedInputStream* input) {
#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
  ::google::protobuf::uint32 tag;
  // @@protoc_insertion_point(parse_start:proto3.TestMessage)
  for (;;) {
    ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(16383u);
    tag = p.first;
    if (!p.second) goto handle_unusual;
    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
      // bool bool_value = 1;
      case 1: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(8u /* 8 & 0xFF */)) {

          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                   bool, ::google::protobuf::internal::WireFormatLite::TYPE_BOOL>(
                 input, &bool_value_)));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // int32 int32_value = 2;
      case 2: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(16u /* 16 & 0xFF */)) {

          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
                 input, &int32_value_)));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // int64 int64_value = 3;
      case 3: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(24u /* 24 & 0xFF */)) {

          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                   ::google::protobuf::int64, ::google::protobuf::internal::WireFormatLite::TYPE_INT64>(
                 input, &int64_value_)));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // uint32 uint32_value = 4;
      case 4: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(32u /* 32 & 0xFF */)) {

          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                   ::google::protobuf::uint32, ::google::protobuf::internal::WireFormatLite::TYPE_UINT32>(
                 input, &uint32_value_)));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // uint64 uint64_value = 5;
      case 5: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(40u /* 40 & 0xFF */)) {

          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                   ::google::protobuf::uint64, ::google::protobuf::internal::WireFormatLite::TYPE_UINT64>(
                 input, &uint64_value_)));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // float float_value = 6;
      case 6: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(53u /* 53 & 0xFF */)) {

          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                   float, ::google::protobuf::internal::WireFormatLite::TYPE_FLOAT>(
                 input, &float_value_)));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // double double_value = 7;
      case 7: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(57u /* 57 & 0xFF */)) {

          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                   double, ::google::protobuf::internal::WireFormatLite::TYPE_DOUBLE>(
                 input, &double_value_)));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // string string_value = 8;
      case 8: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(66u /* 66 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                input, this->mutable_string_value()));
          DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
            this->string_value().data(), static_cast<int>(this->string_value().length()),
            ::google::protobuf::internal::WireFormatLite::PARSE,
            "proto3.TestMessage.string_value"));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // bytes bytes_value = 9;
      case 9: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(74u /* 74 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadBytes(
                input, this->mutable_bytes_value()));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // .proto3.EnumType enum_value = 10;
      case 10: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(80u /* 80 & 0xFF */)) {
          int value;
          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                   int, ::google::protobuf::internal::WireFormatLite::TYPE_ENUM>(
                 input, &value)));
          set_enum_value(static_cast< ::proto3::EnumType >(value));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // .proto3.MessageType message_value = 11;
      case 11: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(90u /* 90 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
               input, mutable_message_value()));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated bool repeated_bool_value = 21;
      case 21: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(170u /* 170 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitive<
                   bool, ::google::protobuf::internal::WireFormatLite::TYPE_BOOL>(
                 input, this->mutable_repeated_bool_value())));
        } else if (
            static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(168u /* 168 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitiveNoInline<
                   bool, ::google::protobuf::internal::WireFormatLite::TYPE_BOOL>(
                 2, 170u, input, this->mutable_repeated_bool_value())));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated int32 repeated_int32_value = 22;
      case 22: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(178u /* 178 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitive<
                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
                 input, this->mutable_repeated_int32_value())));
        } else if (
            static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(176u /* 176 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitiveNoInline<
                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
                 2, 178u, input, this->mutable_repeated_int32_value())));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated int64 repeated_int64_value = 23;
      case 23: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(186u /* 186 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitive<
                   ::google::protobuf::int64, ::google::protobuf::internal::WireFormatLite::TYPE_INT64>(
                 input, this->mutable_repeated_int64_value())));
        } else if (
            static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(184u /* 184 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitiveNoInline<
                   ::google::protobuf::int64, ::google::protobuf::internal::WireFormatLite::TYPE_INT64>(
                 2, 186u, input, this->mutable_repeated_int64_value())));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated uint32 repeated_uint32_value = 24;
      case 24: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(194u /* 194 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitive<
                   ::google::protobuf::uint32, ::google::protobuf::internal::WireFormatLite::TYPE_UINT32>(
                 input, this->mutable_repeated_uint32_value())));
        } else if (
            static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(192u /* 192 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitiveNoInline<
                   ::google::protobuf::uint32, ::google::protobuf::internal::WireFormatLite::TYPE_UINT32>(
                 2, 194u, input, this->mutable_repeated_uint32_value())));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated uint64 repeated_uint64_value = 25;
      case 25: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(202u /* 202 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitive<
                   ::google::protobuf::uint64, ::google::protobuf::internal::WireFormatLite::TYPE_UINT64>(
                 input, this->mutable_repeated_uint64_value())));
        } else if (
            static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(200u /* 200 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitiveNoInline<
                   ::google::protobuf::uint64, ::google::protobuf::internal::WireFormatLite::TYPE_UINT64>(
                 2, 202u, input, this->mutable_repeated_uint64_value())));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated float repeated_float_value = 26;
      case 26: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(210u /* 210 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitive<
                   float, ::google::protobuf::internal::WireFormatLite::TYPE_FLOAT>(
                 input, this->mutable_repeated_float_value())));
        } else if (
            static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(213u /* 213 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitiveNoInline<
                   float, ::google::protobuf::internal::WireFormatLite::TYPE_FLOAT>(
                 2, 210u, input, this->mutable_repeated_float_value())));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated double repeated_double_value = 27;
      case 27: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(218u /* 218 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitive<
                   double, ::google::protobuf::internal::WireFormatLite::TYPE_DOUBLE>(
                 input, this->mutable_repeated_double_value())));
        } else if (
            static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(217u /* 217 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitiveNoInline<
                   double, ::google::protobuf::internal::WireFormatLite::TYPE_DOUBLE>(
                 2, 218u, input, this->mutable_repeated_double_value())));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated string repeated_string_value = 28;
      case 28: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(226u /* 226 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                input, this->add_repeated_string_value()));
          DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
            this->repeated_string_value(this->repeated_string_value_size() - 1).data(),
            static_cast<int>(this->repeated_string_value(this->repeated_string_value_size() - 1).length()),
            ::google::protobuf::internal::WireFormatLite::PARSE,
            "proto3.TestMessage.repeated_string_value"));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated bytes repeated_bytes_value = 29;
      case 29: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(234u /* 234 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadBytes(
                input, this->add_repeated_bytes_value()));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated .proto3.EnumType repeated_enum_value = 30;
      case 30: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(242u /* 242 & 0xFF */)) {
          ::google::protobuf::uint32 length;
          DO_(input->ReadVarint32(&length));
          ::google::protobuf::io::CodedInputStream::Limit limit = input->PushLimit(static_cast<int>(length));
          while (input->BytesUntilLimit() > 0) {
            int value;
            DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                   int, ::google::protobuf::internal::WireFormatLite::TYPE_ENUM>(
                 input, &value)));
            add_repeated_enum_value(static_cast< ::proto3::EnumType >(value));
          }
          input->PopLimit(limit);
        } else if (
            static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(240u /* 240 & 0xFF */)) {
          int value;
          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                   int, ::google::protobuf::internal::WireFormatLite::TYPE_ENUM>(
                 input, &value)));
          add_repeated_enum_value(static_cast< ::proto3::EnumType >(value));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated .proto3.MessageType repeated_message_value = 31;
      case 31: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(250u /* 250 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
                input, add_repeated_message_value()));
        } else {
          goto handle_unusual;
        }
        break;
      }

      default: {
      handle_unusual:
        if (tag == 0) {
          goto success;
        }
        DO_(::google::protobuf::internal::WireFormat::SkipField(
              input, tag, _internal_metadata_.mutable_unknown_fields()));
        break;
      }
    }
  }
success:
  // @@protoc_insertion_point(parse_success:proto3.TestMessage)
  return true;
failure:
  // @@protoc_insertion_point(parse_failure:proto3.TestMessage)
  return false;
#undef DO_
}

void TestMessage::SerializeWithCachedSizes(
    ::google::protobuf::io::CodedOutputStream* output) const {
  // @@protoc_insertion_point(serialize_start:proto3.TestMessage)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  // bool bool_value = 1;
  if (this->bool_value() != 0) {
    ::google::protobuf::internal::WireFormatLite::WriteBool(1, this->bool_value(), output);
  }

  // int32 int32_value = 2;
  if (this->int32_value() != 0) {
    ::google::protobuf::internal::WireFormatLite::WriteInt32(2, this->int32_value(), output);
  }

  // int64 int64_value = 3;
  if (this->int64_value() != 0) {
    ::google::protobuf::internal::WireFormatLite::WriteInt64(3, this->int64_value(), output);
  }

  // uint32 uint32_value = 4;
  if (this->uint32_value() != 0) {
    ::google::protobuf::internal::WireFormatLite::WriteUInt32(4, this->uint32_value(), output);
  }

  // uint64 uint64_value = 5;
  if (this->uint64_value() != 0) {
    ::google::protobuf::internal::WireFormatLite::WriteUInt64(5, this->uint64_value(), output);
  }

  // float float_value = 6;
  if (this->float_value() != 0) {
    ::google::protobuf::internal::WireFormatLite::WriteFloat(6, this->float_value(), output);
  }

  // double double_value = 7;
  if (this->double_value() != 0) {
    ::google::protobuf::internal::WireFormatLite::WriteDouble(7, this->double_value(), output);
  }

  // string string_value = 8;
  if (this->string_value().size() > 0) {
    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
      this->string_value().data(), static_cast<int>(this->string_value().length()),
      ::google::protobuf::internal::WireFormatLite::SERIALIZE,
      "proto3.TestMessage.string_value");
    ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
      8, this->string_value(), output);
  }

  // bytes bytes_value = 9;
  if (this->bytes_value().size() > 0) {
    ::google::protobuf::internal::WireFormatLite::WriteBytesMaybeAliased(
      9, this->bytes_value(), output);
  }

  // .proto3.EnumType enum_value = 10;
  if (this->enum_value() != 0) {
    ::google::protobuf::internal::WireFormatLite::WriteEnum(
      10, this->enum_value(), output);
  }

  // .proto3.MessageType message_value = 11;
  if (this->has_message_value()) {
    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
      11, this->_internal_message_value(), output);
  }

  // repeated bool repeated_bool_value = 21;
  if (this->repeated_bool_value_size() > 0) {
    ::google::protobuf::internal::WireFormatLite::WriteTag(21, ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED, output);
    output->WriteVarint32(static_cast< ::google::protobuf::uint32>(
        _repeated_bool_value_cached_byte_size_));
    ::google::protobuf::internal::WireFormatLite::WriteBoolArray(
      this->repeated_bool_value().data(), this->repeated_bool_value_size(), output);
  }

  // repeated int32 repeated_int32_value = 22;
  if (this->repeated_int32_value_size() > 0) {
    ::google::protobuf::internal::WireFormatLite::WriteTag(22, ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED, output);
    output->WriteVarint32(static_cast< ::google::protobuf::uint32>(
        _repeated_int32_value_cached_byte_size_));
  }
  for (int i = 0, n = this->repeated_int32_value_size(); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::WriteInt32NoTag(
      this->repeated_int32_value(i), output);
  }

  // repeated int64 repeated_int64_value = 23;
  if (this->repeated_int64_value_size() > 0) {
    ::google::protobuf::internal::WireFormatLite::WriteTag(23, ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED, output);
    output->WriteVarint32(static_cast< ::google::protobuf::uint32>(
        _repeated_int64_value_cached_byte_size_));
  }
  for (int i = 0, n = this->repeated_int64_value_size(); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::WriteInt64NoTag(
      this->repeated_int64_value(i), output);
  }

  // repeated uint32 repeated_uint32_value = 24;
  if (this->repeated_uint32_value_size() > 0) {
    ::google::protobuf::internal::WireFormatLite::WriteTag(24, ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED, output);
    output->WriteVarint32(static_cast< ::google::protobuf::uint32>(
        _repeated_uint32_value_cached_byte_size_));
  }
  for (int i = 0, n = this->repeated_uint32_value_size(); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::WriteUInt32NoTag(
      this->repeated_uint32_value(i), output);
  }

  // repeated uint64 repeated_uint64_value = 25;
  if (this->repeated_uint64_value_size() > 0) {
    ::google::protobuf::internal::WireFormatLite::WriteTag(25, ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED, output);
    output->WriteVarint32(static_cast< ::google::protobuf::uint32>(
        _repeated_uint64_value_cached_byte_size_));
  }
  for (int i = 0, n = this->repeated_uint64_value_size(); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::WriteUInt64NoTag(
      this->repeated_uint64_value(i), output);
  }

  // repeated float repeated_float_value = 26;
  if (this->repeated_float_value_size() > 0) {
    ::google::protobuf::internal::WireFormatLite::WriteTag(26, ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED, output);
    output->WriteVarint32(static_cast< ::google::protobuf::uint32>(
        _repeated_float_value_cached_byte_size_));
    ::google::protobuf::internal::WireFormatLite::WriteFloatArray(
      this->repeated_float_value().data(), this->repeated_float_value_size(), output);
  }

  // repeated double repeated_double_value = 27;
  if (this->repeated_double_value_size() > 0) {
    ::google::protobuf::internal::WireFormatLite::WriteTag(27, ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED, output);
    output->WriteVarint32(static_cast< ::google::protobuf::uint32>(
        _repeated_double_value_cached_byte_size_));
    ::google::protobuf::internal::WireFormatLite::WriteDoubleArray(
      this->repeated_double_value().data(), this->repeated_double_value_size(), output);
  }

  // repeated string repeated_string_value = 28;
  for (int i = 0, n = this->repeated_string_value_size(); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
      this->repeated_string_value(i).data(), static_cast<int>(this->repeated_string_value(i).length()),
      ::google::protobuf::internal::WireFormatLite::SERIALIZE,
      "proto3.TestMessage.repeated_string_value");
    ::google::protobuf::internal::WireFormatLite::WriteString(
      28, this->repeated_string_value(i), output);
  }

  // repeated bytes repeated_bytes_value = 29;
  for (int i = 0, n = this->repeated_bytes_value_size(); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::WriteBytes(
      29, this->repeated_bytes_value(i), output);
  }

  // repeated .proto3.EnumType repeated_enum_value = 30;
  if (this->repeated_enum_value_size() > 0) {
    ::google::protobuf::internal::WireFormatLite::WriteTag(
      30,
      ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED,
      output);
    output->WriteVarint32(
        static_cast< ::google::protobuf::uint32>(_repeated_enum_value_cached_byte_size_));
  }
  for (int i = 0, n = this->repeated_enum_value_size(); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::WriteEnumNoTag(
      this->repeated_enum_value(i), output);
  }

  // repeated .proto3.MessageType repeated_message_value = 31;
  for (unsigned int i = 0,
      n = static_cast<unsigned int>(this->repeated_message_value_size()); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
      31,
      this->repeated_message_value(static_cast<int>(i)),
      output);
  }

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), output);
  }
  // @@protoc_insertion_point(serialize_end:proto3.TestMessage)
}

::google::protobuf::uint8* TestMessage::InternalSerializeWithCachedSizesToArray(
    bool deterministic, ::google::protobuf::uint8* target) const {
  (void)deterministic; // Unused
  // @@protoc_insertion_point(serialize_to_array_start:proto3.TestMessage)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  // bool bool_value = 1;
  if (this->bool_value() != 0) {
    target = ::google::protobuf::internal::WireFormatLite::WriteBoolToArray(1, this->bool_value(), target);
  }

  // int32 int32_value = 2;
  if (this->int32_value() != 0) {
    target = ::google::protobuf::internal::WireFormatLite::WriteInt32ToArray(2, this->int32_value(), target);
  }

  // int64 int64_value = 3;
  if (this->int64_value() != 0) {
    target = ::google::protobuf::internal::WireFormatLite::WriteInt64ToArray(3, this->int64_value(), target);
  }

  // uint32 uint32_value = 4;
  if (this->uint32_value() != 0) {
    target = ::google::protobuf::internal::WireFormatLite::WriteUInt32ToArray(4, this->uint32_value(), target);
  }

  // uint64 uint64_value = 5;
  if (this->uint64_value() != 0) {
    target = ::google::protobuf::internal::WireFormatLite::WriteUInt64ToArray(5, this->uint64_value(), target);
  }

  // float float_value = 6;
  if (this->float_value() != 0) {
    target = ::google::protobuf::internal::WireFormatLite::WriteFloatToArray(6, this->float_value(), target);
  }

  // double double_value = 7;
  if (this->double_value() != 0) {
    target = ::google::protobuf::internal::WireFormatLite::WriteDoubleToArray(7, this->double_value(), target);
  }

  // string string_value = 8;
  if (this->string_value().size() > 0) {
    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
      this->string_value().data(), static_cast<int>(this->string_value().length()),
      ::google::protobuf::internal::WireFormatLite::SERIALIZE,
      "proto3.TestMessage.string_value");
    target =
      ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
        8, this->string_value(), target);
  }

  // bytes bytes_value = 9;
  if (this->bytes_value().size() > 0) {
    target =
      ::google::protobuf::internal::WireFormatLite::WriteBytesToArray(
        9, this->bytes_value(), target);
  }

  // .proto3.EnumType enum_value = 10;
  if (this->enum_value() != 0) {
    target = ::google::protobuf::internal::WireFormatLite::WriteEnumToArray(
      10, this->enum_value(), target);
  }

  // .proto3.MessageType message_value = 11;
  if (this->has_message_value()) {
    target = ::google::protobuf::internal::WireFormatLite::
      InternalWriteMessageToArray(
        11, this->_internal_message_value(), deterministic, target);
  }

  // repeated bool repeated_bool_value = 21;
  if (this->repeated_bool_value_size() > 0) {
    target = ::google::protobuf::internal::WireFormatLite::WriteTagToArray(
      21,
      ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED,
      target);
    target = ::google::protobuf::io::CodedOutputStream::WriteVarint32ToArray(
        static_cast< ::google::protobuf::int32>(
            _repeated_bool_value_cached_byte_size_), target);
    target = ::google::protobuf::internal::WireFormatLite::
      WriteBoolNoTagToArray(this->repeated_bool_value_, target);
  }

  // repeated int32 repeated_int32_value = 22;
  if (this->repeated_int32_value_size() > 0) {
    target = ::google::protobuf::internal::WireFormatLite::WriteTagToArray(
      22,
      ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED,
      target);
    target = ::google::protobuf::io::CodedOutputStream::WriteVarint32ToArray(
        static_cast< ::google::protobuf::int32>(
            _repeated_int32_value_cached_byte_size_), target);
    target = ::google::protobuf::internal::WireFormatLite::
      WriteInt32NoTagToArray(this->repeated_int32_value_, target);
  }

  // repeated int64 repeated_int64_value = 23;
  if (this->repeated_int64_value_size() > 0) {
    target = ::google::protobuf::internal::WireFormatLite::WriteTagToArray(
      23,
      ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED,
      target);
    target = ::google::protobuf::io::CodedOutputStream::WriteVarint32ToArray(
        static_cast< ::google::protobuf::int32>(
            _repeated_int64_value_cached_byte_size_), target);
    target = ::google::protobuf::internal::WireFormatLite::
      WriteInt64NoTagToArray(this->repeated_int64_value_, target);
  }

  // repeated uint32 repeated_uint32_value = 24;
  if (this->repeated_uint32_value_size() > 0) {
    target = ::google::protobuf::internal::WireFormatLite::WriteTagToArray(
      24,
      ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED,
      target);
    target = ::google::protobuf::io::CodedOutputStream::WriteVarint32ToArray(
        static_cast< ::google::protobuf::int32>(
            _repeated_uint32_value_cached_byte_size_), target);
    target = ::google::protobuf::internal::WireFormatLite::
      WriteUInt32NoTagToArray(this->repeated_uint32_value_, target);
  }

  // repeated uint64 repeated_uint64_value = 25;
  if (this->repeated_uint64_value_size() > 0) {
    target = ::google::protobuf::internal::WireFormatLite::WriteTagToArray(
      25,
      ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED,
      target);
    target = ::google::protobuf::io::CodedOutputStream::WriteVarint32ToArray(
        static_cast< ::google::protobuf::int32>(
            _repeated_uint64_value_cached_byte_size_), target);
    target = ::google::protobuf::internal::WireFormatLite::
      WriteUInt64NoTagToArray(this->repeated_uint64_value_, target);
  }

  // repeated float repeated_float_value = 26;
  if (this->repeated_float_value_size() > 0) {
    target = ::google::protobuf::internal::WireFormatLite::WriteTagToArray(
      26,
      ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED,
      target);
    target = ::google::protobuf::io::CodedOutputStream::WriteVarint32ToArray(
        static_cast< ::google::protobuf::int32>(
            _repeated_float_value_cached_byte_size_), target);
    target = ::google::protobuf::internal::WireFormatLite::
      WriteFloatNoTagToArray(this->repeated_float_value_, target);
  }

  // repeated double repeated_double_value = 27;
  if (this->repeated_double_value_size() > 0) {
    target = ::google::protobuf::internal::WireFormatLite::WriteTagToArray(
      27,
      ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED,
      target);
    target = ::google::protobuf::io::CodedOutputStream::WriteVarint32ToArray(
        static_cast< ::google::protobuf::int32>(
            _repeated_double_value_cached_byte_size_), target);
    target = ::google::protobuf::internal::WireFormatLite::
      WriteDoubleNoTagToArray(this->repeated_double_value_, target);
  }

  // repeated string repeated_string_value = 28;
  for (int i = 0, n = this->repeated_string_value_size(); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
      this->repeated_string_value(i).data(), static_cast<int>(this->repeated_string_value(i).length()),
      ::google::protobuf::internal::WireFormatLite::SERIALIZE,
      "proto3.TestMessage.repeated_string_value");
    target = ::google::protobuf::internal::WireFormatLite::
      WriteStringToArray(28, this->repeated_string_value(i), target);
  }

  // repeated bytes repeated_bytes_value = 29;
  for (int i = 0, n = this->repeated_bytes_value_size(); i < n; i++) {
    target = ::google::protobuf::internal::WireFormatLite::
      WriteBytesToArray(29, this->repeated_bytes_value(i), target);
  }

  // repeated .proto3.EnumType repeated_enum_value = 30;
  if (this->repeated_enum_value_size() > 0) {
    target = ::google::protobuf::internal::WireFormatLite::WriteTagToArray(
      30,
      ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED,
      target);
    target = ::google::protobuf::io::CodedOutputStream::WriteVarint32ToArray(      static_cast< ::google::protobuf::uint32>(
            _repeated_enum_value_cached_byte_size_), target);
    target = ::google::protobuf::internal::WireFormatLite::WriteEnumNoTagToArray(
      this->repeated_enum_value_, target);
  }

  // repeated .proto3.MessageType repeated_message_value = 31;
  for (unsigned int i = 0,
      n = static_cast<unsigned int>(this->repeated_message_value_size()); i < n; i++) {
    target = ::google::protobuf::internal::WireFormatLite::
      InternalWriteMessageToArray(
        31, this->repeated_message_value(static_cast<int>(i)), deterministic, target);
  }

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), target);
  }
  // @@protoc_insertion_point(serialize_to_array_end:proto3.TestMessage)
  return target;
}

size_t TestMessage::ByteSizeLong() const {
// @@protoc_insertion_point(message_byte_size_start:proto3.TestMessage)
  size_t total_size = 0;

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    total_size +=
      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()));
  }
  // repeated bool repeated_bool_value = 21;
  {
    unsigned int count = static_cast<unsigned int>(this->repeated_bool_value_size());
    size_t data_size = 1UL * count;
    if (data_size > 0) {
      total_size += 2 +
        ::google::protobuf::internal::WireFormatLite::Int32Size(
            static_cast< ::google::protobuf::int32>(data_size));
    }
    int cached_size = ::google::protobuf::internal::ToCachedSize(data_size);
    GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
    _repeated_bool_value_cached_byte_size_ = cached_size;
    GOOGLE_SAFE_CONCURRENT_WRITES_END();
    total_size += data_size;
  }

  // repeated int32 repeated_int32_value = 22;
  {
    size_t data_size = ::google::protobuf::internal::WireFormatLite::
      Int32Size(this->repeated_int32_value_);
    if (data_size > 0) {
      total_size += 2 +
        ::google::protobuf::internal::WireFormatLite::Int32Size(
            static_cast< ::google::protobuf::int32>(data_size));
    }
    int cached_size = ::google::protobuf::internal::ToCachedSize(data_size);
    GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
    _repeated_int32_value_cached_byte_size_ = cached_size;
    GOOGLE_SAFE_CONCURRENT_WRITES_END();
    total_size += data_size;
  }

  // repeated int64 repeated_int64_value = 23;
  {
    size_t data_size = ::google::protobuf::internal::WireFormatLite::
      Int64Size(this->repeated_int64_value_);
    if (data_size > 0) {
      total_size += 2 +
        ::google::protobuf::internal::WireFormatLite::Int32Size(
            static_cast< ::google::protobuf::int32>(data_size));
    }
    int cached_size = ::google::protobuf::internal::ToCachedSize(data_size);
    GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
    _repeated_int64_value_cached_byte_size_ = cached_size;
    GOOGLE_SAFE_CONCURRENT_WRITES_END();
    total_size += data_size;
  }

  // repeated uint32 repeated_uint32_value = 24;
  {
    size_t data_size = ::google::protobuf::internal::WireFormatLite::
      UInt32Size(this->repeated_uint32_value_);
    if (data_size > 0) {
      total_size += 2 +
        ::google::protobuf::internal::WireFormatLite::Int32Size(
            static_cast< ::google::protobuf::int32>(data_size));
    }
    int cached_size = ::google::protobuf::internal::ToCachedSize(data_size);
    GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
    _repeated_uint32_value_cached_byte_size_ = cached_size;
    GOOGLE_SAFE_CONCURRENT_WRITES_END();
    total_size += data_size;
  }

  // repeated uint64 repeated_uint64_value = 25;
  {
    size_t data_size = ::google::protobuf::internal::WireFormatLite::
      UInt64Size(this->repeated_uint64_value_);
    if (data_size > 0) {
      total_size += 2 +
        ::google::protobuf::internal::WireFormatLite::Int32Size(
            static_cast< ::google::protobuf::int32>(data_size));
    }
    int cached_size = ::google::protobuf::internal::ToCachedSize(data_size);
    GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
    _repeated_uint64_value_cached_byte_size_ = cached_size;
    GOOGLE_SAFE_CONCURRENT_WRITES_END();
    total_size += data_size;
  }

  // repeated float repeated_float_value = 26;
  {
    unsigned int count = static_cast<unsigned int>(this->repeated_float_value_size());
    size_t data_size = 4UL * count;
    if (data_size > 0) {
      total_size += 2 +
        ::google::protobuf::internal::WireFormatLite::Int32Size(
            static_cast< ::google::protobuf::int32>(data_size));
    }
    int cached_size = ::google::protobuf::internal::ToCachedSize(data_size);
    GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
    _repeated_float_value_cached_byte_size_ = cached_size;
    GOOGLE_SAFE_CONCURRENT_WRITES_END();
    total_size += data_size;
  }

  // repeated double repeated_double_value = 27;
  {
    unsigned int count = static_cast<unsigned int>(this->repeated_double_value_size());
    size_t data_size = 8UL * count;
    if (data_size > 0) {
      total_size += 2 +
        ::google::protobuf::internal::WireFormatLite::Int32Size(
            static_cast< ::google::protobuf::int32>(data_size));
    }
    int cached_size = ::google::protobuf::internal::ToCachedSize(data_size);
    GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
    _repeated_double_value_cached_byte_size_ = cached_size;
    GOOGLE_SAFE_CONCURRENT_WRITES_END();
    total_size += data_size;
  }

  // repeated string repeated_string_value = 28;
  total_size += 2 *
      ::google::protobuf::internal::FromIntSize(this->repeated_string_value_size());
  for (int i = 0, n = this->repeated_string_value_size(); i < n; i++) {
    total_size += ::google::protobuf::internal::WireFormatLite::StringSize(
      this->repeated_string_value(i));
  }

  // repeated bytes repeated_bytes_value = 29;
  total_size += 2 *
      ::google::protobuf::internal::FromIntSize(this->repeated_bytes_value_size());
  for (int i = 0, n = this->repeated_bytes_value_size(); i < n; i++) {
    total_size += ::google::protobuf::internal::WireFormatLite::BytesSize(
      this->repeated_bytes_value(i));
  }

  // repeated .proto3.EnumType repeated_enum_value = 30;
  {
    size_t data_size = 0;
    unsigned int count = static_cast<unsigned int>(this->repeated_enum_value_size());for (unsigned int i = 0; i < count; i++) {
      data_size += ::google::protobuf::internal::WireFormatLite::EnumSize(
        this->repeated_enum_value(static_cast<int>(i)));
    }
    if (data_size > 0) {
      total_size += 2 +
        ::google::protobuf::internal::WireFormatLite::Int32Size(
            static_cast< ::google::protobuf::int32>(data_size));
    }
    int cached_size = ::google::protobuf::internal::ToCachedSize(data_size);
    GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
    _repeated_enum_value_cached_byte_size_ = cached_size;
    GOOGLE_SAFE_CONCURRENT_WRITES_END();
    total_size += data_size;
  }

  // repeated .proto3.MessageType repeated_message_value = 31;
  {
    unsigned int count = static_cast<unsigned int>(this->repeated_message_value_size());
    total_size += 2UL * count;
    for (unsigned int i = 0; i < count; i++) {
      total_size +=
        ::google::protobuf::internal::WireFormatLite::MessageSize(
          this->repeated_message_value(static_cast<int>(i)));
    }
  }

  // string string_value = 8;
  if (this->string_value().size() > 0) {
    total_size += 1 +
      ::google::protobuf::internal::WireFormatLite::StringSize(
        this->string_value());
  }

  // bytes bytes_value = 9;
  if (this->bytes_value().size() > 0) {
    total_size += 1 +
      ::google::protobuf::internal::WireFormatLite::BytesSize(
        this->bytes_value());
  }

  // .proto3.MessageType message_value = 11;
  if (this->has_message_value()) {
    total_size += 1 +
      ::google::protobuf::internal::WireFormatLite::MessageSize(
        *message_value_);
  }

  // bool bool_value = 1;
  if (this->bool_value() != 0) {
    total_size += 1 + 1;
  }

  // int32 int32_value = 2;
  if (this->int32_value() != 0) {
    total_size += 1 +
      ::google::protobuf::internal::WireFormatLite::Int32Size(
        this->int32_value());
  }

  // int64 int64_value = 3;
  if (this->int64_value() != 0) {
    total_size += 1 +
      ::google::protobuf::internal::WireFormatLite::Int64Size(
        this->int64_value());
  }

  // uint64 uint64_value = 5;
  if (this->uint64_value() != 0) {
    total_size += 1 +
      ::google::protobuf::internal::WireFormatLite::UInt64Size(
        this->uint64_value());
  }

  // uint32 uint32_value = 4;
  if (this->uint32_value() != 0) {
    total_size += 1 +
      ::google::protobuf::internal::WireFormatLite::UInt32Size(
        this->uint32_value());
  }

  // float float_value = 6;
  if (this->float_value() != 0) {
    total_size += 1 + 4;
  }

  // double double_value = 7;
  if (this->double_value() != 0) {
    total_size += 1 + 8;
  }

  // .proto3.EnumType enum_value = 10;
  if (this->enum_value() != 0) {
    total_size += 1 +
      ::google::protobuf::internal::WireFormatLite::EnumSize(this->enum_value());
  }

  int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
  SetCachedSize(cached_size);
  return total_size;
}

void TestMessage::MergeFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_merge_from_start:proto3.TestMessage)
  GOOGLE_DCHECK_NE(&from, this);
  const TestMessage* source =
      ::google::protobuf::internal::DynamicCastToGenerated<const TestMessage>(
          &from);
  if (source == NULL) {
  // @@protoc_insertion_point(generalized_merge_from_cast_fail:proto3.TestMessage)
    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
  } else {
  // @@protoc_insertion_point(generalized_merge_from_cast_success:proto3.TestMessage)
    MergeFrom(*source);
  }
}

void TestMessage::MergeFrom(const TestMessage& from) {
// @@protoc_insertion_point(class_specific_merge_from_start:proto3.TestMessage)
  GOOGLE_DCHECK_NE(&from, this);
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  repeated_bool_value_.MergeFrom(from.repeated_bool_value_);
  repeated_int32_value_.MergeFrom(from.repeated_int32_value_);
  repeated_int64_value_.MergeFrom(from.repeated_int64_value_);
  repeated_uint32_value_.MergeFrom(from.repeated_uint32_value_);
  repeated_uint64_value_.MergeFrom(from.repeated_uint64_value_);
  repeated_float_value_.MergeFrom(from.repeated_float_value_);
  repeated_double_value_.MergeFrom(from.repeated_double_value_);
  repeated_string_value_.MergeFrom(from.repeated_string_value_);
  repeated_bytes_value_.MergeFrom(from.repeated_bytes_value_);
  repeated_enum_value_.MergeFrom(from.repeated_enum_value_);
  repeated_message_value_.MergeFrom(from.repeated_message_value_);
  if (from.string_value().size() > 0) {

    string_value_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.string_value_);
  }
  if (from.bytes_value().size() > 0) {

    bytes_value_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.bytes_value_);
  }
  if (from.has_message_value()) {
    mutable_message_value()->::proto3::MessageType::MergeFrom(from.message_value());
  }
  if (from.bool_value() != 0) {
    set_bool_value(from.bool_value());
  }
  if (from.int32_value() != 0) {
    set_int32_value(from.int32_value());
  }
  if (from.int64_value() != 0) {
    set_int64_value(from.int64_value());
  }
  if (from.uint64_value() != 0) {
    set_uint64_value(from.uint64_value());
  }
  if (from.uint32_value() != 0) {
    set_uint32_value(from.uint32_value());
  }
  if (from.float_value() != 0) {
    set_float_value(from.float_value());
  }
  if (from.double_value() != 0) {
    set_double_value(from.double_value());
  }
  if (from.enum_value() != 0) {
    set_enum_value(from.enum_value());
  }
}

void TestMessage::CopyFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_copy_from_start:proto3.TestMessage)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

void TestMessage::CopyFrom(const TestMessage& from) {
// @@protoc_insertion_point(class_specific_copy_from_start:proto3.TestMessage)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

bool TestMessage::IsInitialized() const {
  return true;
}

void TestMessage::Swap(TestMessage* other) {
  if (other == this) return;
  InternalSwap(other);
}
void TestMessage::InternalSwap(TestMessage* other) {
  using std::swap;
  repeated_bool_value_.InternalSwap(&other->repeated_bool_value_);
  repeated_int32_value_.InternalSwap(&other->repeated_int32_value_);
  repeated_int64_value_.InternalSwap(&other->repeated_int64_value_);
  repeated_uint32_value_.InternalSwap(&other->repeated_uint32_value_);
  repeated_uint64_value_.InternalSwap(&other->repeated_uint64_value_);
  repeated_float_value_.InternalSwap(&other->repeated_float_value_);
  repeated_double_value_.InternalSwap(&other->repeated_double_value_);
  repeated_string_value_.InternalSwap(CastToBase(&other->repeated_string_value_));
  repeated_bytes_value_.InternalSwap(CastToBase(&other->repeated_bytes_value_));
  repeated_enum_value_.InternalSwap(&other->repeated_enum_value_);
  CastToBase(&repeated_message_value_)->InternalSwap(CastToBase(&other->repeated_message_value_));
  string_value_.Swap(&other->string_value_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
    GetArenaNoVirtual());
  bytes_value_.Swap(&other->bytes_value_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
    GetArenaNoVirtual());
  swap(message_value_, other->message_value_);
  swap(bool_value_, other->bool_value_);
  swap(int32_value_, other->int32_value_);
  swap(int64_value_, other->int64_value_);
  swap(uint64_value_, other->uint64_value_);
  swap(uint32_value_, other->uint32_value_);
  swap(float_value_, other->float_value_);
  swap(double_value_, other->double_value_);
  swap(enum_value_, other->enum_value_);
  _internal_metadata_.Swap(&other->_internal_metadata_);
}

::google::protobuf::Metadata TestMessage::GetMetadata() const {
  protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::file_level_metadata[kIndexInFileMessages];
}


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

void TestOneof::InitAsDefaultInstance() {
  ::proto3::_TestOneof_default_instance_.oneof_int32_value_ = 0;
  ::proto3::_TestOneof_default_instance_.oneof_string_value_.UnsafeSetDefault(
      &::google::protobuf::internal::GetEmptyStringAlreadyInited());
  ::proto3::_TestOneof_default_instance_.oneof_bytes_value_.UnsafeSetDefault(
      &::google::protobuf::internal::GetEmptyStringAlreadyInited());
  ::proto3::_TestOneof_default_instance_.oneof_enum_value_ = 0;
  ::proto3::_TestOneof_default_instance_.oneof_message_value_ = const_cast< ::proto3::MessageType*>(
      ::proto3::MessageType::internal_default_instance());
}
void TestOneof::set_allocated_oneof_message_value(::proto3::MessageType* oneof_message_value) {
  ::google::protobuf::Arena* message_arena = GetArenaNoVirtual();
  clear_oneof_value();
  if (oneof_message_value) {
    ::google::protobuf::Arena* submessage_arena = NULL;
    if (message_arena != submessage_arena) {
      oneof_message_value = ::google::protobuf::internal::GetOwnedMessage(
          message_arena, oneof_message_value, submessage_arena);
    }
    set_has_oneof_message_value();
    oneof_value_.oneof_message_value_ = oneof_message_value;
  }
  // @@protoc_insertion_point(field_set_allocated:proto3.TestOneof.oneof_message_value)
}
#if !defined(_MSC_VER) || _MSC_VER >= 1900
const int TestOneof::kOneofInt32ValueFieldNumber;
const int TestOneof::kOneofStringValueFieldNumber;
const int TestOneof::kOneofBytesValueFieldNumber;
const int TestOneof::kOneofEnumValueFieldNumber;
const int TestOneof::kOneofMessageValueFieldNumber;
#endif  // !defined(_MSC_VER) || _MSC_VER >= 1900

TestOneof::TestOneof()
  : ::google::protobuf::Message(), _internal_metadata_(NULL) {
  ::google::protobuf::internal::InitSCC(
      &protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::scc_info_TestOneof.base);
  SharedCtor();
  // @@protoc_insertion_point(constructor:proto3.TestOneof)
}
TestOneof::TestOneof(const TestOneof& from)
  : ::google::protobuf::Message(),
      _internal_metadata_(NULL) {
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  clear_has_oneof_value();
  switch (from.oneof_value_case()) {
    case kOneofInt32Value: {
      set_oneof_int32_value(from.oneof_int32_value());
      break;
    }
    case kOneofStringValue: {
      set_oneof_string_value(from.oneof_string_value());
      break;
    }
    case kOneofBytesValue: {
      set_oneof_bytes_value(from.oneof_bytes_value());
      break;
    }
    case kOneofEnumValue: {
      set_oneof_enum_value(from.oneof_enum_value());
      break;
    }
    case kOneofMessageValue: {
      mutable_oneof_message_value()->::proto3::MessageType::MergeFrom(from.oneof_message_value());
      break;
    }
    case ONEOF_VALUE_NOT_SET: {
      break;
    }
  }
  // @@protoc_insertion_point(copy_constructor:proto3.TestOneof)
}

void TestOneof::SharedCtor() {
  clear_has_oneof_value();
}

TestOneof::~TestOneof() {
  // @@protoc_insertion_point(destructor:proto3.TestOneof)
  SharedDtor();
}

void TestOneof::SharedDtor() {
  if (has_oneof_value()) {
    clear_oneof_value();
  }
}

void TestOneof::SetCachedSize(int size) const {
  _cached_size_.Set(size);
}
const ::google::protobuf::Descriptor* TestOneof::descriptor() {
  ::protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
}

const TestOneof& TestOneof::default_instance() {
  ::google::protobuf::internal::InitSCC(&protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::scc_info_TestOneof.base);
  return *internal_default_instance();
}


void TestOneof::clear_oneof_value() {
// @@protoc_insertion_point(one_of_clear_start:proto3.TestOneof)
  switch (oneof_value_case()) {
    case kOneofInt32Value: {
      // No need to clear
      break;
    }
    case kOneofStringValue: {
      oneof_value_.oneof_string_value_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
      break;
    }
    case kOneofBytesValue: {
      oneof_value_.oneof_bytes_value_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
      break;
    }
    case kOneofEnumValue: {
      // No need to clear
      break;
    }
    case kOneofMessageValue: {
      delete oneof_value_.oneof_message_value_;
      break;
    }
    case ONEOF_VALUE_NOT_SET: {
      break;
    }
  }
  _oneof_case_[0] = ONEOF_VALUE_NOT_SET;
}


void TestOneof::Clear() {
// @@protoc_insertion_point(message_clear_start:proto3.TestOneof)
  ::google::protobuf::uint32 cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  clear_oneof_value();
  _internal_metadata_.Clear();
}

bool TestOneof::MergePartialFromCodedStream(
    ::google::protobuf::io::CodedInputStream* input) {
#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
  ::google::protobuf::uint32 tag;
  // @@protoc_insertion_point(parse_start:proto3.TestOneof)
  for (;;) {
    ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
    tag = p.first;
    if (!p.second) goto handle_unusual;
    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
      // int32 oneof_int32_value = 1;
      case 1: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(8u /* 8 & 0xFF */)) {
          clear_oneof_value();
          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
                 input, &oneof_value_.oneof_int32_value_)));
          set_has_oneof_int32_value();
        } else {
          goto handle_unusual;
        }
        break;
      }

      // string oneof_string_value = 2;
      case 2: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(18u /* 18 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                input, this->mutable_oneof_string_value()));
          DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
            this->oneof_string_value().data(), static_cast<int>(this->oneof_string_value().length()),
            ::google::protobuf::internal::WireFormatLite::PARSE,
            "proto3.TestOneof.oneof_string_value"));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // bytes oneof_bytes_value = 3;
      case 3: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(26u /* 26 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadBytes(
                input, this->mutable_oneof_bytes_value()));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // .proto3.EnumType oneof_enum_value = 4;
      case 4: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(32u /* 32 & 0xFF */)) {
          int value;
          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                   int, ::google::protobuf::internal::WireFormatLite::TYPE_ENUM>(
                 input, &value)));
          set_oneof_enum_value(static_cast< ::proto3::EnumType >(value));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // .proto3.MessageType oneof_message_value = 5;
      case 5: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(42u /* 42 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
               input, mutable_oneof_message_value()));
        } else {
          goto handle_unusual;
        }
        break;
      }

      default: {
      handle_unusual:
        if (tag == 0) {
          goto success;
        }
        DO_(::google::protobuf::internal::WireFormat::SkipField(
              input, tag, _internal_metadata_.mutable_unknown_fields()));
        break;
      }
    }
  }
success:
  // @@protoc_insertion_point(parse_success:proto3.TestOneof)
  return true;
failure:
  // @@protoc_insertion_point(parse_failure:proto3.TestOneof)
  return false;
#undef DO_
}

void TestOneof::SerializeWithCachedSizes(
    ::google::protobuf::io::CodedOutputStream* output) const {
  // @@protoc_insertion_point(serialize_start:proto3.TestOneof)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  // int32 oneof_int32_value = 1;
  if (has_oneof_int32_value()) {
    ::google::protobuf::internal::WireFormatLite::WriteInt32(1, this->oneof_int32_value(), output);
  }

  // string oneof_string_value = 2;
  if (has_oneof_string_value()) {
    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
      this->oneof_string_value().data(), static_cast<int>(this->oneof_string_value().length()),
      ::google::protobuf::internal::WireFormatLite::SERIALIZE,
      "proto3.TestOneof.oneof_string_value");
    ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
      2, this->oneof_string_value(), output);
  }

  // bytes oneof_bytes_value = 3;
  if (has_oneof_bytes_value()) {
    ::google::protobuf::internal::WireFormatLite::WriteBytesMaybeAliased(
      3, this->oneof_bytes_value(), output);
  }

  // .proto3.EnumType oneof_enum_value = 4;
  if (has_oneof_enum_value()) {
    ::google::protobuf::internal::WireFormatLite::WriteEnum(
      4, this->oneof_enum_value(), output);
  }

  // .proto3.MessageType oneof_message_value = 5;
  if (has_oneof_message_value()) {
    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
      5, this->_internal_oneof_message_value(), output);
  }

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), output);
  }
  // @@protoc_insertion_point(serialize_end:proto3.TestOneof)
}

::google::protobuf::uint8* TestOneof::InternalSerializeWithCachedSizesToArray(
    bool deterministic, ::google::protobuf::uint8* target) const {
  (void)deterministic; // Unused
  // @@protoc_insertion_point(serialize_to_array_start:proto3.TestOneof)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  // int32 oneof_int32_value = 1;
  if (has_oneof_int32_value()) {
    target = ::google::protobuf::internal::WireFormatLite::WriteInt32ToArray(1, this->oneof_int32_value(), target);
  }

  // string oneof_string_value = 2;
  if (has_oneof_string_value()) {
    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
      this->oneof_string_value().data(), static_cast<int>(this->oneof_string_value().length()),
      ::google::protobuf::internal::WireFormatLite::SERIALIZE,
      "proto3.TestOneof.oneof_string_value");
    target =
      ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
        2, this->oneof_string_value(), target);
  }

  // bytes oneof_bytes_value = 3;
  if (has_oneof_bytes_value()) {
    target =
      ::google::protobuf::internal::WireFormatLite::WriteBytesToArray(
        3, this->oneof_bytes_value(), target);
  }

  // .proto3.EnumType oneof_enum_value = 4;
  if (has_oneof_enum_value()) {
    target = ::google::protobuf::internal::WireFormatLite::WriteEnumToArray(
      4, this->oneof_enum_value(), target);
  }

  // .proto3.MessageType oneof_message_value = 5;
  if (has_oneof_message_value()) {
    target = ::google::protobuf::internal::WireFormatLite::
      InternalWriteMessageToArray(
        5, this->_internal_oneof_message_value(), deterministic, target);
  }

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), target);
  }
  // @@protoc_insertion_point(serialize_to_array_end:proto3.TestOneof)
  return target;
}

size_t TestOneof::ByteSizeLong() const {
// @@protoc_insertion_point(message_byte_size_start:proto3.TestOneof)
  size_t total_size = 0;

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    total_size +=
      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()));
  }
  switch (oneof_value_case()) {
    // int32 oneof_int32_value = 1;
    case kOneofInt32Value: {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::Int32Size(
          this->oneof_int32_value());
      break;
    }
    // string oneof_string_value = 2;
    case kOneofStringValue: {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::StringSize(
          this->oneof_string_value());
      break;
    }
    // bytes oneof_bytes_value = 3;
    case kOneofBytesValue: {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::BytesSize(
          this->oneof_bytes_value());
      break;
    }
    // .proto3.EnumType oneof_enum_value = 4;
    case kOneofEnumValue: {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::EnumSize(this->oneof_enum_value());
      break;
    }
    // .proto3.MessageType oneof_message_value = 5;
    case kOneofMessageValue: {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::MessageSize(
          *oneof_value_.oneof_message_value_);
      break;
    }
    case ONEOF_VALUE_NOT_SET: {
      break;
    }
  }
  int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
  SetCachedSize(cached_size);
  return total_size;
}

void TestOneof::MergeFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_merge_from_start:proto3.TestOneof)
  GOOGLE_DCHECK_NE(&from, this);
  const TestOneof* source =
      ::google::protobuf::internal::DynamicCastToGenerated<const TestOneof>(
          &from);
  if (source == NULL) {
  // @@protoc_insertion_point(generalized_merge_from_cast_fail:proto3.TestOneof)
    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
  } else {
  // @@protoc_insertion_point(generalized_merge_from_cast_success:proto3.TestOneof)
    MergeFrom(*source);
  }
}

void TestOneof::MergeFrom(const TestOneof& from) {
// @@protoc_insertion_point(class_specific_merge_from_start:proto3.TestOneof)
  GOOGLE_DCHECK_NE(&from, this);
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  switch (from.oneof_value_case()) {
    case kOneofInt32Value: {
      set_oneof_int32_value(from.oneof_int32_value());
      break;
    }
    case kOneofStringValue: {
      set_oneof_string_value(from.oneof_string_value());
      break;
    }
    case kOneofBytesValue: {
      set_oneof_bytes_value(from.oneof_bytes_value());
      break;
    }
    case kOneofEnumValue: {
      set_oneof_enum_value(from.oneof_enum_value());
      break;
    }
    case kOneofMessageValue: {
      mutable_oneof_message_value()->::proto3::MessageType::MergeFrom(from.oneof_message_value());
      break;
    }
    case ONEOF_VALUE_NOT_SET: {
      break;
    }
  }
}

void TestOneof::CopyFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_copy_from_start:proto3.TestOneof)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

void TestOneof::CopyFrom(const TestOneof& from) {
// @@protoc_insertion_point(class_specific_copy_from_start:proto3.TestOneof)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

bool TestOneof::IsInitialized() const {
  return true;
}

void TestOneof::Swap(TestOneof* other) {
  if (other == this) return;
  InternalSwap(other);
}
void TestOneof::InternalSwap(TestOneof* other) {
  using std::swap;
  swap(oneof_value_, other->oneof_value_);
  swap(_oneof_case_[0], other->_oneof_case_[0]);
  _internal_metadata_.Swap(&other->_internal_metadata_);
}

::google::protobuf::Metadata TestOneof::GetMetadata() const {
  protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::file_level_metadata[kIndexInFileMessages];
}


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

TestMap_BoolMapEntry_DoNotUse::TestMap_BoolMapEntry_DoNotUse() {}
TestMap_BoolMapEntry_DoNotUse::TestMap_BoolMapEntry_DoNotUse(::google::protobuf::Arena* arena) : SuperType(arena) {}
void TestMap_BoolMapEntry_DoNotUse::MergeFrom(const TestMap_BoolMapEntry_DoNotUse& other) {
  MergeFromInternal(other);
}
::google::protobuf::Metadata TestMap_BoolMapEntry_DoNotUse::GetMetadata() const {
  ::protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::file_level_metadata[3];
}
void TestMap_BoolMapEntry_DoNotUse::MergeFrom(
    const ::google::protobuf::Message& other) {
  ::google::protobuf::Message::MergeFrom(other);
}


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

TestMap_Int32MapEntry_DoNotUse::TestMap_Int32MapEntry_DoNotUse() {}
TestMap_Int32MapEntry_DoNotUse::TestMap_Int32MapEntry_DoNotUse(::google::protobuf::Arena* arena) : SuperType(arena) {}
void TestMap_Int32MapEntry_DoNotUse::MergeFrom(const TestMap_Int32MapEntry_DoNotUse& other) {
  MergeFromInternal(other);
}
::google::protobuf::Metadata TestMap_Int32MapEntry_DoNotUse::GetMetadata() const {
  ::protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::file_level_metadata[4];
}
void TestMap_Int32MapEntry_DoNotUse::MergeFrom(
    const ::google::protobuf::Message& other) {
  ::google::protobuf::Message::MergeFrom(other);
}


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

TestMap_Int64MapEntry_DoNotUse::TestMap_Int64MapEntry_DoNotUse() {}
TestMap_Int64MapEntry_DoNotUse::TestMap_Int64MapEntry_DoNotUse(::google::protobuf::Arena* arena) : SuperType(arena) {}
void TestMap_Int64MapEntry_DoNotUse::MergeFrom(const TestMap_Int64MapEntry_DoNotUse& other) {
  MergeFromInternal(other);
}
::google::protobuf::Metadata TestMap_Int64MapEntry_DoNotUse::GetMetadata() const {
  ::protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::file_level_metadata[5];
}
void TestMap_Int64MapEntry_DoNotUse::MergeFrom(
    const ::google::protobuf::Message& other) {
  ::google::protobuf::Message::MergeFrom(other);
}


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

TestMap_Uint32MapEntry_DoNotUse::TestMap_Uint32MapEntry_DoNotUse() {}
TestMap_Uint32MapEntry_DoNotUse::TestMap_Uint32MapEntry_DoNotUse(::google::protobuf::Arena* arena) : SuperType(arena) {}
void TestMap_Uint32MapEntry_DoNotUse::MergeFrom(const TestMap_Uint32MapEntry_DoNotUse& other) {
  MergeFromInternal(other);
}
::google::protobuf::Metadata TestMap_Uint32MapEntry_DoNotUse::GetMetadata() const {
  ::protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::file_level_metadata[6];
}
void TestMap_Uint32MapEntry_DoNotUse::MergeFrom(
    const ::google::protobuf::Message& other) {
  ::google::protobuf::Message::MergeFrom(other);
}


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

TestMap_Uint64MapEntry_DoNotUse::TestMap_Uint64MapEntry_DoNotUse() {}
TestMap_Uint64MapEntry_DoNotUse::TestMap_Uint64MapEntry_DoNotUse(::google::protobuf::Arena* arena) : SuperType(arena) {}
void TestMap_Uint64MapEntry_DoNotUse::MergeFrom(const TestMap_Uint64MapEntry_DoNotUse& other) {
  MergeFromInternal(other);
}
::google::protobuf::Metadata TestMap_Uint64MapEntry_DoNotUse::GetMetadata() const {
  ::protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::file_level_metadata[7];
}
void TestMap_Uint64MapEntry_DoNotUse::MergeFrom(
    const ::google::protobuf::Message& other) {
  ::google::protobuf::Message::MergeFrom(other);
}


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

TestMap_StringMapEntry_DoNotUse::TestMap_StringMapEntry_DoNotUse() {}
TestMap_StringMapEntry_DoNotUse::TestMap_StringMapEntry_DoNotUse(::google::protobuf::Arena* arena) : SuperType(arena) {}
void TestMap_StringMapEntry_DoNotUse::MergeFrom(const TestMap_StringMapEntry_DoNotUse& other) {
  MergeFromInternal(other);
}
::google::protobuf::Metadata TestMap_StringMapEntry_DoNotUse::GetMetadata() const {
  ::protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::file_level_metadata[8];
}
void TestMap_StringMapEntry_DoNotUse::MergeFrom(
    const ::google::protobuf::Message& other) {
  ::google::protobuf::Message::MergeFrom(other);
}


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

void TestMap::InitAsDefaultInstance() {
}
#if !defined(_MSC_VER) || _MSC_VER >= 1900
const int TestMap::kBoolMapFieldNumber;
const int TestMap::kInt32MapFieldNumber;
const int TestMap::kInt64MapFieldNumber;
const int TestMap::kUint32MapFieldNumber;
const int TestMap::kUint64MapFieldNumber;
const int TestMap::kStringMapFieldNumber;
#endif  // !defined(_MSC_VER) || _MSC_VER >= 1900

TestMap::TestMap()
  : ::google::protobuf::Message(), _internal_metadata_(NULL) {
  ::google::protobuf::internal::InitSCC(
      &protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::scc_info_TestMap.base);
  SharedCtor();
  // @@protoc_insertion_point(constructor:proto3.TestMap)
}
TestMap::TestMap(const TestMap& from)
  : ::google::protobuf::Message(),
      _internal_metadata_(NULL) {
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  bool_map_.MergeFrom(from.bool_map_);
  int32_map_.MergeFrom(from.int32_map_);
  int64_map_.MergeFrom(from.int64_map_);
  uint32_map_.MergeFrom(from.uint32_map_);
  uint64_map_.MergeFrom(from.uint64_map_);
  string_map_.MergeFrom(from.string_map_);
  // @@protoc_insertion_point(copy_constructor:proto3.TestMap)
}

void TestMap::SharedCtor() {
}

TestMap::~TestMap() {
  // @@protoc_insertion_point(destructor:proto3.TestMap)
  SharedDtor();
}

void TestMap::SharedDtor() {
}

void TestMap::SetCachedSize(int size) const {
  _cached_size_.Set(size);
}
const ::google::protobuf::Descriptor* TestMap::descriptor() {
  ::protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
}

const TestMap& TestMap::default_instance() {
  ::google::protobuf::internal::InitSCC(&protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::scc_info_TestMap.base);
  return *internal_default_instance();
}


void TestMap::Clear() {
// @@protoc_insertion_point(message_clear_start:proto3.TestMap)
  ::google::protobuf::uint32 cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  bool_map_.Clear();
  int32_map_.Clear();
  int64_map_.Clear();
  uint32_map_.Clear();
  uint64_map_.Clear();
  string_map_.Clear();
  _internal_metadata_.Clear();
}

bool TestMap::MergePartialFromCodedStream(
    ::google::protobuf::io::CodedInputStream* input) {
#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
  ::google::protobuf::uint32 tag;
  // @@protoc_insertion_point(parse_start:proto3.TestMap)
  for (;;) {
    ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
    tag = p.first;
    if (!p.second) goto handle_unusual;
    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
      // map<bool, int32> bool_map = 1;
      case 1: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(10u /* 10 & 0xFF */)) {
          TestMap_BoolMapEntry_DoNotUse::Parser< ::google::protobuf::internal::MapField<
              TestMap_BoolMapEntry_DoNotUse,
              bool, ::google::protobuf::int32,
              ::google::protobuf::internal::WireFormatLite::TYPE_BOOL,
              ::google::protobuf::internal::WireFormatLite::TYPE_INT32,
              0 >,
            ::google::protobuf::Map< bool, ::google::protobuf::int32 > > parser(&bool_map_);
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual(
              input, &parser));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // map<int32, int32> int32_map = 2;
      case 2: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(18u /* 18 & 0xFF */)) {
          TestMap_Int32MapEntry_DoNotUse::Parser< ::google::protobuf::internal::MapField<
              TestMap_Int32MapEntry_DoNotUse,
              ::google::protobuf::int32, ::google::protobuf::int32,
              ::google::protobuf::internal::WireFormatLite::TYPE_INT32,
              ::google::protobuf::internal::WireFormatLite::TYPE_INT32,
              0 >,
            ::google::protobuf::Map< ::google::protobuf::int32, ::google::protobuf::int32 > > parser(&int32_map_);
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual(
              input, &parser));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // map<int64, int32> int64_map = 3;
      case 3: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(26u /* 26 & 0xFF */)) {
          TestMap_Int64MapEntry_DoNotUse::Parser< ::google::protobuf::internal::MapField<
              TestMap_Int64MapEntry_DoNotUse,
              ::google::protobuf::int64, ::google::protobuf::int32,
              ::google::protobuf::internal::WireFormatLite::TYPE_INT64,
              ::google::protobuf::internal::WireFormatLite::TYPE_INT32,
              0 >,
            ::google::protobuf::Map< ::google::protobuf::int64, ::google::protobuf::int32 > > parser(&int64_map_);
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual(
              input, &parser));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // map<uint32, int32> uint32_map = 4;
      case 4: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(34u /* 34 & 0xFF */)) {
          TestMap_Uint32MapEntry_DoNotUse::Parser< ::google::protobuf::internal::MapField<
              TestMap_Uint32MapEntry_DoNotUse,
              ::google::protobuf::uint32, ::google::protobuf::int32,
              ::google::protobuf::internal::WireFormatLite::TYPE_UINT32,
              ::google::protobuf::internal::WireFormatLite::TYPE_INT32,
              0 >,
            ::google::protobuf::Map< ::google::protobuf::uint32, ::google::protobuf::int32 > > parser(&uint32_map_);
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual(
              input, &parser));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // map<uint64, int32> uint64_map = 5;
      case 5: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(42u /* 42 & 0xFF */)) {
          TestMap_Uint64MapEntry_DoNotUse::Parser< ::google::protobuf::internal::MapField<
              TestMap_Uint64MapEntry_DoNotUse,
              ::google::protobuf::uint64, ::google::protobuf::int32,
              ::google::protobuf::internal::WireFormatLite::TYPE_UINT64,
              ::google::protobuf::internal::WireFormatLite::TYPE_INT32,
              0 >,
            ::google::protobuf::Map< ::google::protobuf::uint64, ::google::protobuf::int32 > > parser(&uint64_map_);
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual(
              input, &parser));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // map<string, int32> string_map = 6;
      case 6: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(50u /* 50 & 0xFF */)) {
          TestMap_StringMapEntry_DoNotUse::Parser< ::google::protobuf::internal::MapField<
              TestMap_StringMapEntry_DoNotUse,
              ::std::string, ::google::protobuf::int32,
              ::google::protobuf::internal::WireFormatLite::TYPE_STRING,
              ::google::protobuf::internal::WireFormatLite::TYPE_INT32,
              0 >,
            ::google::protobuf::Map< ::std::string, ::google::protobuf::int32 > > parser(&string_map_);
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual(
              input, &parser));
          DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
            parser.key().data(), static_cast<int>(parser.key().length()),
            ::google::protobuf::internal::WireFormatLite::PARSE,
            "proto3.TestMap.StringMapEntry.key"));
        } else {
          goto handle_unusual;
        }
        break;
      }

      default: {
      handle_unusual:
        if (tag == 0) {
          goto success;
        }
        DO_(::google::protobuf::internal::WireFormat::SkipField(
              input, tag, _internal_metadata_.mutable_unknown_fields()));
        break;
      }
    }
  }
success:
  // @@protoc_insertion_point(parse_success:proto3.TestMap)
  return true;
failure:
  // @@protoc_insertion_point(parse_failure:proto3.TestMap)
  return false;
#undef DO_
}

void TestMap::SerializeWithCachedSizes(
    ::google::protobuf::io::CodedOutputStream* output) const {
  // @@protoc_insertion_point(serialize_start:proto3.TestMap)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  // map<bool, int32> bool_map = 1;
  if (!this->bool_map().empty()) {
    typedef ::google::protobuf::Map< bool, ::google::protobuf::int32 >::const_pointer
        ConstPtr;
    typedef ::google::protobuf::internal::SortItem< bool, ConstPtr > SortItem;
    typedef ::google::protobuf::internal::CompareByFirstField<SortItem> Less;

    if (output->IsSerializationDeterministic() &&
        this->bool_map().size() > 1) {
      ::std::unique_ptr<SortItem[]> items(
          new SortItem[this->bool_map().size()]);
      typedef ::google::protobuf::Map< bool, ::google::protobuf::int32 >::size_type size_type;
      size_type n = 0;
      for (::google::protobuf::Map< bool, ::google::protobuf::int32 >::const_iterator
          it = this->bool_map().begin();
          it != this->bool_map().end(); ++it, ++n) {
        items[static_cast<ptrdiff_t>(n)] = SortItem(&*it);
      }
      ::std::sort(&items[0], &items[static_cast<ptrdiff_t>(n)], Less());
      ::std::unique_ptr<TestMap_BoolMapEntry_DoNotUse> entry;
      for (size_type i = 0; i < n; i++) {
        entry.reset(bool_map_.NewEntryWrapper(
            items[static_cast<ptrdiff_t>(i)].second->first, items[static_cast<ptrdiff_t>(i)].second->second));
        ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
            1, *entry, output);
      }
    } else {
      ::std::unique_ptr<TestMap_BoolMapEntry_DoNotUse> entry;
      for (::google::protobuf::Map< bool, ::google::protobuf::int32 >::const_iterator
          it = this->bool_map().begin();
          it != this->bool_map().end(); ++it) {
        entry.reset(bool_map_.NewEntryWrapper(
            it->first, it->second));
        ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
            1, *entry, output);
      }
    }
  }

  // map<int32, int32> int32_map = 2;
  if (!this->int32_map().empty()) {
    typedef ::google::protobuf::Map< ::google::protobuf::int32, ::google::protobuf::int32 >::const_pointer
        ConstPtr;
    typedef ::google::protobuf::internal::SortItem< ::google::protobuf::int32, ConstPtr > SortItem;
    typedef ::google::protobuf::internal::CompareByFirstField<SortItem> Less;

    if (output->IsSerializationDeterministic() &&
        this->int32_map().size() > 1) {
      ::std::unique_ptr<SortItem[]> items(
          new SortItem[this->int32_map().size()]);
      typedef ::google::protobuf::Map< ::google::protobuf::int32, ::google::protobuf::int32 >::size_type size_type;
      size_type n = 0;
      for (::google::protobuf::Map< ::google::protobuf::int32, ::google::protobuf::int32 >::const_iterator
          it = this->int32_map().begin();
          it != this->int32_map().end(); ++it, ++n) {
        items[static_cast<ptrdiff_t>(n)] = SortItem(&*it);
      }
      ::std::sort(&items[0], &items[static_cast<ptrdiff_t>(n)], Less());
      ::std::unique_ptr<TestMap_Int32MapEntry_DoNotUse> entry;
      for (size_type i = 0; i < n; i++) {
        entry.reset(int32_map_.NewEntryWrapper(
            items[static_cast<ptrdiff_t>(i)].second->first, items[static_cast<ptrdiff_t>(i)].second->second));
        ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
            2, *entry, output);
      }
    } else {
      ::std::unique_ptr<TestMap_Int32MapEntry_DoNotUse> entry;
      for (::google::protobuf::Map< ::google::protobuf::int32, ::google::protobuf::int32 >::const_iterator
          it = this->int32_map().begin();
          it != this->int32_map().end(); ++it) {
        entry.reset(int32_map_.NewEntryWrapper(
            it->first, it->second));
        ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
            2, *entry, output);
      }
    }
  }

  // map<int64, int32> int64_map = 3;
  if (!this->int64_map().empty()) {
    typedef ::google::protobuf::Map< ::google::protobuf::int64, ::google::protobuf::int32 >::const_pointer
        ConstPtr;
    typedef ::google::protobuf::internal::SortItem< ::google::protobuf::int64, ConstPtr > SortItem;
    typedef ::google::protobuf::internal::CompareByFirstField<SortItem> Less;

    if (output->IsSerializationDeterministic() &&
        this->int64_map().size() > 1) {
      ::std::unique_ptr<SortItem[]> items(
          new SortItem[this->int64_map().size()]);
      typedef ::google::protobuf::Map< ::google::protobuf::int64, ::google::protobuf::int32 >::size_type size_type;
      size_type n = 0;
      for (::google::protobuf::Map< ::google::protobuf::int64, ::google::protobuf::int32 >::const_iterator
          it = this->int64_map().begin();
          it != this->int64_map().end(); ++it, ++n) {
        items[static_cast<ptrdiff_t>(n)] = SortItem(&*it);
      }
      ::std::sort(&items[0], &items[static_cast<ptrdiff_t>(n)], Less());
      ::std::unique_ptr<TestMap_Int64MapEntry_DoNotUse> entry;
      for (size_type i = 0; i < n; i++) {
        entry.reset(int64_map_.NewEntryWrapper(
            items[static_cast<ptrdiff_t>(i)].second->first, items[static_cast<ptrdiff_t>(i)].second->second));
        ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
            3, *entry, output);
      }
    } else {
      ::std::unique_ptr<TestMap_Int64MapEntry_DoNotUse> entry;
      for (::google::protobuf::Map< ::google::protobuf::int64, ::google::protobuf::int32 >::const_iterator
          it = this->int64_map().begin();
          it != this->int64_map().end(); ++it) {
        entry.reset(int64_map_.NewEntryWrapper(
            it->first, it->second));
        ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
            3, *entry, output);
      }
    }
  }

  // map<uint32, int32> uint32_map = 4;
  if (!this->uint32_map().empty()) {
    typedef ::google::protobuf::Map< ::google::protobuf::uint32, ::google::protobuf::int32 >::const_pointer
        ConstPtr;
    typedef ::google::protobuf::internal::SortItem< ::google::protobuf::uint32, ConstPtr > SortItem;
    typedef ::google::protobuf::internal::CompareByFirstField<SortItem> Less;

    if (output->IsSerializationDeterministic() &&
        this->uint32_map().size() > 1) {
      ::std::unique_ptr<SortItem[]> items(
          new SortItem[this->uint32_map().size()]);
      typedef ::google::protobuf::Map< ::google::protobuf::uint32, ::google::protobuf::int32 >::size_type size_type;
      size_type n = 0;
      for (::google::protobuf::Map< ::google::protobuf::uint32, ::google::protobuf::int32 >::const_iterator
          it = this->uint32_map().begin();
          it != this->uint32_map().end(); ++it, ++n) {
        items[static_cast<ptrdiff_t>(n)] = SortItem(&*it);
      }
      ::std::sort(&items[0], &items[static_cast<ptrdiff_t>(n)], Less());
      ::std::unique_ptr<TestMap_Uint32MapEntry_DoNotUse> entry;
      for (size_type i = 0; i < n; i++) {
        entry.reset(uint32_map_.NewEntryWrapper(
            items[static_cast<ptrdiff_t>(i)].second->first, items[static_cast<ptrdiff_t>(i)].second->second));
        ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
            4, *entry, output);
      }
    } else {
      ::std::unique_ptr<TestMap_Uint32MapEntry_DoNotUse> entry;
      for (::google::protobuf::Map< ::google::protobuf::uint32, ::google::protobuf::int32 >::const_iterator
          it = this->uint32_map().begin();
          it != this->uint32_map().end(); ++it) {
        entry.reset(uint32_map_.NewEntryWrapper(
            it->first, it->second));
        ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
            4, *entry, output);
      }
    }
  }

  // map<uint64, int32> uint64_map = 5;
  if (!this->uint64_map().empty()) {
    typedef ::google::protobuf::Map< ::google::protobuf::uint64, ::google::protobuf::int32 >::const_pointer
        ConstPtr;
    typedef ::google::protobuf::internal::SortItem< ::google::protobuf::uint64, ConstPtr > SortItem;
    typedef ::google::protobuf::internal::CompareByFirstField<SortItem> Less;

    if (output->IsSerializationDeterministic() &&
        this->uint64_map().size() > 1) {
      ::std::unique_ptr<SortItem[]> items(
          new SortItem[this->uint64_map().size()]);
      typedef ::google::protobuf::Map< ::google::protobuf::uint64, ::google::protobuf::int32 >::size_type size_type;
      size_type n = 0;
      for (::google::protobuf::Map< ::google::protobuf::uint64, ::google::protobuf::int32 >::const_iterator
          it = this->uint64_map().begin();
          it != this->uint64_map().end(); ++it, ++n) {
        items[static_cast<ptrdiff_t>(n)] = SortItem(&*it);
      }
      ::std::sort(&items[0], &items[static_cast<ptrdiff_t>(n)], Less());
      ::std::unique_ptr<TestMap_Uint64MapEntry_DoNotUse> entry;
      for (size_type i = 0; i < n; i++) {
        entry.reset(uint64_map_.NewEntryWrapper(
            items[static_cast<ptrdiff_t>(i)].second->first, items[static_cast<ptrdiff_t>(i)].second->second));
        ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
            5, *entry, output);
      }
    } else {
      ::std::unique_ptr<TestMap_Uint64MapEntry_DoNotUse> entry;
      for (::google::protobuf::Map< ::google::protobuf::uint64, ::google::protobuf::int32 >::const_iterator
          it = this->uint64_map().begin();
          it != this->uint64_map().end(); ++it) {
        entry.reset(uint64_map_.NewEntryWrapper(
            it->first, it->second));
        ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
            5, *entry, output);
      }
    }
  }

  // map<string, int32> string_map = 6;
  if (!this->string_map().empty()) {
    typedef ::google::protobuf::Map< ::std::string, ::google::protobuf::int32 >::const_pointer
        ConstPtr;
    typedef ConstPtr SortItem;
    typedef ::google::protobuf::internal::CompareByDerefFirst<SortItem> Less;
    struct Utf8Check {
      static void Check(ConstPtr p) {
        ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
          p->first.data(), static_cast<int>(p->first.length()),
          ::google::protobuf::internal::WireFormatLite::SERIALIZE,
          "proto3.TestMap.StringMapEntry.key");
      }
    };

    if (output->IsSerializationDeterministic() &&
        this->string_map().size() > 1) {
      ::std::unique_ptr<SortItem[]> items(
          new SortItem[this->string_map().size()]);
      typedef ::google::protobuf::Map< ::std::string, ::google::protobuf::int32 >::size_type size_type;
      size_type n = 0;
      for (::google::protobuf::Map< ::std::string, ::google::protobuf::int32 >::const_iterator
          it = this->string_map().begin();
          it != this->string_map().end(); ++it, ++n) {
        items[static_cast<ptrdiff_t>(n)] = SortItem(&*it);
      }
      ::std::sort(&items[0], &items[static_cast<ptrdiff_t>(n)], Less());
      ::std::unique_ptr<TestMap_StringMapEntry_DoNotUse> entry;
      for (size_type i = 0; i < n; i++) {
        entry.reset(string_map_.NewEntryWrapper(
            items[static_cast<ptrdiff_t>(i)]->first, items[static_cast<ptrdiff_t>(i)]->second));
        ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
            6, *entry, output);
        Utf8Check::Check(items[static_cast<ptrdiff_t>(i)]);
      }
    } else {
      ::std::unique_ptr<TestMap_StringMapEntry_DoNotUse> entry;
      for (::google::protobuf::Map< ::std::string, ::google::protobuf::int32 >::const_iterator
          it = this->string_map().begin();
          it != this->string_map().end(); ++it) {
        entry.reset(string_map_.NewEntryWrapper(
            it->first, it->second));
        ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
            6, *entry, output);
        Utf8Check::Check(&*it);
      }
    }
  }

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), output);
  }
  // @@protoc_insertion_point(serialize_end:proto3.TestMap)
}

::google::protobuf::uint8* TestMap::InternalSerializeWithCachedSizesToArray(
    bool deterministic, ::google::protobuf::uint8* target) const {
  (void)deterministic; // Unused
  // @@protoc_insertion_point(serialize_to_array_start:proto3.TestMap)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  // map<bool, int32> bool_map = 1;
  if (!this->bool_map().empty()) {
    typedef ::google::protobuf::Map< bool, ::google::protobuf::int32 >::const_pointer
        ConstPtr;
    typedef ::google::protobuf::internal::SortItem< bool, ConstPtr > SortItem;
    typedef ::google::protobuf::internal::CompareByFirstField<SortItem> Less;

    if (deterministic &&
        this->bool_map().size() > 1) {
      ::std::unique_ptr<SortItem[]> items(
          new SortItem[this->bool_map().size()]);
      typedef ::google::protobuf::Map< bool, ::google::protobuf::int32 >::size_type size_type;
      size_type n = 0;
      for (::google::protobuf::Map< bool, ::google::protobuf::int32 >::const_iterator
          it = this->bool_map().begin();
          it != this->bool_map().end(); ++it, ++n) {
        items[static_cast<ptrdiff_t>(n)] = SortItem(&*it);
      }
      ::std::sort(&items[0], &items[static_cast<ptrdiff_t>(n)], Less());
      ::std::unique_ptr<TestMap_BoolMapEntry_DoNotUse> entry;
      for (size_type i = 0; i < n; i++) {
        entry.reset(bool_map_.NewEntryWrapper(
            items[static_cast<ptrdiff_t>(i)].second->first, items[static_cast<ptrdiff_t>(i)].second->second));
        target = ::google::protobuf::internal::WireFormatLite::
                   InternalWriteMessageNoVirtualToArray(
                       1, *entry, deterministic, target);
;
      }
    } else {
      ::std::unique_ptr<TestMap_BoolMapEntry_DoNotUse> entry;
      for (::google::protobuf::Map< bool, ::google::protobuf::int32 >::const_iterator
          it = this->bool_map().begin();
          it != this->bool_map().end(); ++it) {
        entry.reset(bool_map_.NewEntryWrapper(
            it->first, it->second));
        target = ::google::protobuf::internal::WireFormatLite::
                   InternalWriteMessageNoVirtualToArray(
                       1, *entry, deterministic, target);
;
      }
    }
  }

  // map<int32, int32> int32_map = 2;
  if (!this->int32_map().empty()) {
    typedef ::google::protobuf::Map< ::google::protobuf::int32, ::google::protobuf::int32 >::const_pointer
        ConstPtr;
    typedef ::google::protobuf::internal::SortItem< ::google::protobuf::int32, ConstPtr > SortItem;
    typedef ::google::protobuf::internal::CompareByFirstField<SortItem> Less;

    if (deterministic &&
        this->int32_map().size() > 1) {
      ::std::unique_ptr<SortItem[]> items(
          new SortItem[this->int32_map().size()]);
      typedef ::google::protobuf::Map< ::google::protobuf::int32, ::google::protobuf::int32 >::size_type size_type;
      size_type n = 0;
      for (::google::protobuf::Map< ::google::protobuf::int32, ::google::protobuf::int32 >::const_iterator
          it = this->int32_map().begin();
          it != this->int32_map().end(); ++it, ++n) {
        items[static_cast<ptrdiff_t>(n)] = SortItem(&*it);
      }
      ::std::sort(&items[0], &items[static_cast<ptrdiff_t>(n)], Less());
      ::std::unique_ptr<TestMap_Int32MapEntry_DoNotUse> entry;
      for (size_type i = 0; i < n; i++) {
        entry.reset(int32_map_.NewEntryWrapper(
            items[static_cast<ptrdiff_t>(i)].second->first, items[static_cast<ptrdiff_t>(i)].second->second));
        target = ::google::protobuf::internal::WireFormatLite::
                   InternalWriteMessageNoVirtualToArray(
                       2, *entry, deterministic, target);
;
      }
    } else {
      ::std::unique_ptr<TestMap_Int32MapEntry_DoNotUse> entry;
      for (::google::protobuf::Map< ::google::protobuf::int32, ::google::protobuf::int32 >::const_iterator
          it = this->int32_map().begin();
          it != this->int32_map().end(); ++it) {
        entry.reset(int32_map_.NewEntryWrapper(
            it->first, it->second));
        target = ::google::protobuf::internal::WireFormatLite::
                   InternalWriteMessageNoVirtualToArray(
                       2, *entry, deterministic, target);
;
      }
    }
  }

  // map<int64, int32> int64_map = 3;
  if (!this->int64_map().empty()) {
    typedef ::google::protobuf::Map< ::google::protobuf::int64, ::google::protobuf::int32 >::const_pointer
        ConstPtr;
    typedef ::google::protobuf::internal::SortItem< ::google::protobuf::int64, ConstPtr > SortItem;
    typedef ::google::protobuf::internal::CompareByFirstField<SortItem> Less;

    if (deterministic &&
        this->int64_map().size() > 1) {
      ::std::unique_ptr<SortItem[]> items(
          new SortItem[this->int64_map().size()]);
      typedef ::google::protobuf::Map< ::google::protobuf::int64, ::google::protobuf::int32 >::size_type size_type;
      size_type n = 0;
      for (::google::protobuf::Map< ::google::protobuf::int64, ::google::protobuf::int32 >::const_iterator
          it = this->int64_map().begin();
          it != this->int64_map().end(); ++it, ++n) {
        items[static_cast<ptrdiff_t>(n)] = SortItem(&*it);
      }
      ::std::sort(&items[0], &items[static_cast<ptrdiff_t>(n)], Less());
      ::std::unique_ptr<TestMap_Int64MapEntry_DoNotUse> entry;
      for (size_type i = 0; i < n; i++) {
        entry.reset(int64_map_.NewEntryWrapper(
            items[static_cast<ptrdiff_t>(i)].second->first, items[static_cast<ptrdiff_t>(i)].second->second));
        target = ::google::protobuf::internal::WireFormatLite::
                   InternalWriteMessageNoVirtualToArray(
                       3, *entry, deterministic, target);
;
      }
    } else {
      ::std::unique_ptr<TestMap_Int64MapEntry_DoNotUse> entry;
      for (::google::protobuf::Map< ::google::protobuf::int64, ::google::protobuf::int32 >::const_iterator
          it = this->int64_map().begin();
          it != this->int64_map().end(); ++it) {
        entry.reset(int64_map_.NewEntryWrapper(
            it->first, it->second));
        target = ::google::protobuf::internal::WireFormatLite::
                   InternalWriteMessageNoVirtualToArray(
                       3, *entry, deterministic, target);
;
      }
    }
  }

  // map<uint32, int32> uint32_map = 4;
  if (!this->uint32_map().empty()) {
    typedef ::google::protobuf::Map< ::google::protobuf::uint32, ::google::protobuf::int32 >::const_pointer
        ConstPtr;
    typedef ::google::protobuf::internal::SortItem< ::google::protobuf::uint32, ConstPtr > SortItem;
    typedef ::google::protobuf::internal::CompareByFirstField<SortItem> Less;

    if (deterministic &&
        this->uint32_map().size() > 1) {
      ::std::unique_ptr<SortItem[]> items(
          new SortItem[this->uint32_map().size()]);
      typedef ::google::protobuf::Map< ::google::protobuf::uint32, ::google::protobuf::int32 >::size_type size_type;
      size_type n = 0;
      for (::google::protobuf::Map< ::google::protobuf::uint32, ::google::protobuf::int32 >::const_iterator
          it = this->uint32_map().begin();
          it != this->uint32_map().end(); ++it, ++n) {
        items[static_cast<ptrdiff_t>(n)] = SortItem(&*it);
      }
      ::std::sort(&items[0], &items[static_cast<ptrdiff_t>(n)], Less());
      ::std::unique_ptr<TestMap_Uint32MapEntry_DoNotUse> entry;
      for (size_type i = 0; i < n; i++) {
        entry.reset(uint32_map_.NewEntryWrapper(
            items[static_cast<ptrdiff_t>(i)].second->first, items[static_cast<ptrdiff_t>(i)].second->second));
        target = ::google::protobuf::internal::WireFormatLite::
                   InternalWriteMessageNoVirtualToArray(
                       4, *entry, deterministic, target);
;
      }
    } else {
      ::std::unique_ptr<TestMap_Uint32MapEntry_DoNotUse> entry;
      for (::google::protobuf::Map< ::google::protobuf::uint32, ::google::protobuf::int32 >::const_iterator
          it = this->uint32_map().begin();
          it != this->uint32_map().end(); ++it) {
        entry.reset(uint32_map_.NewEntryWrapper(
            it->first, it->second));
        target = ::google::protobuf::internal::WireFormatLite::
                   InternalWriteMessageNoVirtualToArray(
                       4, *entry, deterministic, target);
;
      }
    }
  }

  // map<uint64, int32> uint64_map = 5;
  if (!this->uint64_map().empty()) {
    typedef ::google::protobuf::Map< ::google::protobuf::uint64, ::google::protobuf::int32 >::const_pointer
        ConstPtr;
    typedef ::google::protobuf::internal::SortItem< ::google::protobuf::uint64, ConstPtr > SortItem;
    typedef ::google::protobuf::internal::CompareByFirstField<SortItem> Less;

    if (deterministic &&
        this->uint64_map().size() > 1) {
      ::std::unique_ptr<SortItem[]> items(
          new SortItem[this->uint64_map().size()]);
      typedef ::google::protobuf::Map< ::google::protobuf::uint64, ::google::protobuf::int32 >::size_type size_type;
      size_type n = 0;
      for (::google::protobuf::Map< ::google::protobuf::uint64, ::google::protobuf::int32 >::const_iterator
          it = this->uint64_map().begin();
          it != this->uint64_map().end(); ++it, ++n) {
        items[static_cast<ptrdiff_t>(n)] = SortItem(&*it);
      }
      ::std::sort(&items[0], &items[static_cast<ptrdiff_t>(n)], Less());
      ::std::unique_ptr<TestMap_Uint64MapEntry_DoNotUse> entry;
      for (size_type i = 0; i < n; i++) {
        entry.reset(uint64_map_.NewEntryWrapper(
            items[static_cast<ptrdiff_t>(i)].second->first, items[static_cast<ptrdiff_t>(i)].second->second));
        target = ::google::protobuf::internal::WireFormatLite::
                   InternalWriteMessageNoVirtualToArray(
                       5, *entry, deterministic, target);
;
      }
    } else {
      ::std::unique_ptr<TestMap_Uint64MapEntry_DoNotUse> entry;
      for (::google::protobuf::Map< ::google::protobuf::uint64, ::google::protobuf::int32 >::const_iterator
          it = this->uint64_map().begin();
          it != this->uint64_map().end(); ++it) {
        entry.reset(uint64_map_.NewEntryWrapper(
            it->first, it->second));
        target = ::google::protobuf::internal::WireFormatLite::
                   InternalWriteMessageNoVirtualToArray(
                       5, *entry, deterministic, target);
;
      }
    }
  }

  // map<string, int32> string_map = 6;
  if (!this->string_map().empty()) {
    typedef ::google::protobuf::Map< ::std::string, ::google::protobuf::int32 >::const_pointer
        ConstPtr;
    typedef ConstPtr SortItem;
    typedef ::google::protobuf::internal::CompareByDerefFirst<SortItem> Less;
    struct Utf8Check {
      static void Check(ConstPtr p) {
        ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
          p->first.data(), static_cast<int>(p->first.length()),
          ::google::protobuf::internal::WireFormatLite::SERIALIZE,
          "proto3.TestMap.StringMapEntry.key");
      }
    };

    if (deterministic &&
        this->string_map().size() > 1) {
      ::std::unique_ptr<SortItem[]> items(
          new SortItem[this->string_map().size()]);
      typedef ::google::protobuf::Map< ::std::string, ::google::protobuf::int32 >::size_type size_type;
      size_type n = 0;
      for (::google::protobuf::Map< ::std::string, ::google::protobuf::int32 >::const_iterator
          it = this->string_map().begin();
          it != this->string_map().end(); ++it, ++n) {
        items[static_cast<ptrdiff_t>(n)] = SortItem(&*it);
      }
      ::std::sort(&items[0], &items[static_cast<ptrdiff_t>(n)], Less());
      ::std::unique_ptr<TestMap_StringMapEntry_DoNotUse> entry;
      for (size_type i = 0; i < n; i++) {
        entry.reset(string_map_.NewEntryWrapper(
            items[static_cast<ptrdiff_t>(i)]->first, items[static_cast<ptrdiff_t>(i)]->second));
        target = ::google::protobuf::internal::WireFormatLite::
                   InternalWriteMessageNoVirtualToArray(
                       6, *entry, deterministic, target);
;
        Utf8Check::Check(items[static_cast<ptrdiff_t>(i)]);
      }
    } else {
      ::std::unique_ptr<TestMap_StringMapEntry_DoNotUse> entry;
      for (::google::protobuf::Map< ::std::string, ::google::protobuf::int32 >::const_iterator
          it = this->string_map().begin();
          it != this->string_map().end(); ++it) {
        entry.reset(string_map_.NewEntryWrapper(
            it->first, it->second));
        target = ::google::protobuf::internal::WireFormatLite::
                   InternalWriteMessageNoVirtualToArray(
                       6, *entry, deterministic, target);
;
        Utf8Check::Check(&*it);
      }
    }
  }

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), target);
  }
  // @@protoc_insertion_point(serialize_to_array_end:proto3.TestMap)
  return target;
}

size_t TestMap::ByteSizeLong() const {
// @@protoc_insertion_point(message_byte_size_start:proto3.TestMap)
  size_t total_size = 0;

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    total_size +=
      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()));
  }
  // map<bool, int32> bool_map = 1;
  total_size += 1 *
      ::google::protobuf::internal::FromIntSize(this->bool_map_size());
  {
    ::std::unique_ptr<TestMap_BoolMapEntry_DoNotUse> entry;
    for (::google::protobuf::Map< bool, ::google::protobuf::int32 >::const_iterator
        it = this->bool_map().begin();
        it != this->bool_map().end(); ++it) {
      entry.reset(bool_map_.NewEntryWrapper(it->first, it->second));
      total_size += ::google::protobuf::internal::WireFormatLite::
          MessageSizeNoVirtual(*entry);
    }
  }

  // map<int32, int32> int32_map = 2;
  total_size += 1 *
      ::google::protobuf::internal::FromIntSize(this->int32_map_size());
  {
    ::std::unique_ptr<TestMap_Int32MapEntry_DoNotUse> entry;
    for (::google::protobuf::Map< ::google::protobuf::int32, ::google::protobuf::int32 >::const_iterator
        it = this->int32_map().begin();
        it != this->int32_map().end(); ++it) {
      entry.reset(int32_map_.NewEntryWrapper(it->first, it->second));
      total_size += ::google::protobuf::internal::WireFormatLite::
          MessageSizeNoVirtual(*entry);
    }
  }

  // map<int64, int32> int64_map = 3;
  total_size += 1 *
      ::google::protobuf::internal::FromIntSize(this->int64_map_size());
  {
    ::std::unique_ptr<TestMap_Int64MapEntry_DoNotUse> entry;
    for (::google::protobuf::Map< ::google::protobuf::int64, ::google::protobuf::int32 >::const_iterator
        it = this->int64_map().begin();
        it != this->int64_map().end(); ++it) {
      entry.reset(int64_map_.NewEntryWrapper(it->first, it->second));
      total_size += ::google::protobuf::internal::WireFormatLite::
          MessageSizeNoVirtual(*entry);
    }
  }

  // map<uint32, int32> uint32_map = 4;
  total_size += 1 *
      ::google::protobuf::internal::FromIntSize(this->uint32_map_size());
  {
    ::std::unique_ptr<TestMap_Uint32MapEntry_DoNotUse> entry;
    for (::google::protobuf::Map< ::google::protobuf::uint32, ::google::protobuf::int32 >::const_iterator
        it = this->uint32_map().begin();
        it != this->uint32_map().end(); ++it) {
      entry.reset(uint32_map_.NewEntryWrapper(it->first, it->second));
      total_size += ::google::protobuf::internal::WireFormatLite::
          MessageSizeNoVirtual(*entry);
    }
  }

  // map<uint64, int32> uint64_map = 5;
  total_size += 1 *
      ::google::protobuf::internal::FromIntSize(this->uint64_map_size());
  {
    ::std::unique_ptr<TestMap_Uint64MapEntry_DoNotUse> entry;
    for (::google::protobuf::Map< ::google::protobuf::uint64, ::google::protobuf::int32 >::const_iterator
        it = this->uint64_map().begin();
        it != this->uint64_map().end(); ++it) {
      entry.reset(uint64_map_.NewEntryWrapper(it->first, it->second));
      total_size += ::google::protobuf::internal::WireFormatLite::
          MessageSizeNoVirtual(*entry);
    }
  }

  // map<string, int32> string_map = 6;
  total_size += 1 *
      ::google::protobuf::internal::FromIntSize(this->string_map_size());
  {
    ::std::unique_ptr<TestMap_StringMapEntry_DoNotUse> entry;
    for (::google::protobuf::Map< ::std::string, ::google::protobuf::int32 >::const_iterator
        it = this->string_map().begin();
        it != this->string_map().end(); ++it) {
      entry.reset(string_map_.NewEntryWrapper(it->first, it->second));
      total_size += ::google::protobuf::internal::WireFormatLite::
          MessageSizeNoVirtual(*entry);
    }
  }

  int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
  SetCachedSize(cached_size);
  return total_size;
}

void TestMap::MergeFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_merge_from_start:proto3.TestMap)
  GOOGLE_DCHECK_NE(&from, this);
  const TestMap* source =
      ::google::protobuf::internal::DynamicCastToGenerated<const TestMap>(
          &from);
  if (source == NULL) {
  // @@protoc_insertion_point(generalized_merge_from_cast_fail:proto3.TestMap)
    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
  } else {
  // @@protoc_insertion_point(generalized_merge_from_cast_success:proto3.TestMap)
    MergeFrom(*source);
  }
}

void TestMap::MergeFrom(const TestMap& from) {
// @@protoc_insertion_point(class_specific_merge_from_start:proto3.TestMap)
  GOOGLE_DCHECK_NE(&from, this);
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  bool_map_.MergeFrom(from.bool_map_);
  int32_map_.MergeFrom(from.int32_map_);
  int64_map_.MergeFrom(from.int64_map_);
  uint32_map_.MergeFrom(from.uint32_map_);
  uint64_map_.MergeFrom(from.uint64_map_);
  string_map_.MergeFrom(from.string_map_);
}

void TestMap::CopyFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_copy_from_start:proto3.TestMap)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

void TestMap::CopyFrom(const TestMap& from) {
// @@protoc_insertion_point(class_specific_copy_from_start:proto3.TestMap)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

bool TestMap::IsInitialized() const {
  return true;
}

void TestMap::Swap(TestMap* other) {
  if (other == this) return;
  InternalSwap(other);
}
void TestMap::InternalSwap(TestMap* other) {
  using std::swap;
  bool_map_.Swap(&other->bool_map_);
  int32_map_.Swap(&other->int32_map_);
  int64_map_.Swap(&other->int64_map_);
  uint32_map_.Swap(&other->uint32_map_);
  uint64_map_.Swap(&other->uint64_map_);
  string_map_.Swap(&other->string_map_);
  _internal_metadata_.Swap(&other->_internal_metadata_);
}

::google::protobuf::Metadata TestMap::GetMetadata() const {
  protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::file_level_metadata[kIndexInFileMessages];
}


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

TestNestedMap_BoolMapEntry_DoNotUse::TestNestedMap_BoolMapEntry_DoNotUse() {}
TestNestedMap_BoolMapEntry_DoNotUse::TestNestedMap_BoolMapEntry_DoNotUse(::google::protobuf::Arena* arena) : SuperType(arena) {}
void TestNestedMap_BoolMapEntry_DoNotUse::MergeFrom(const TestNestedMap_BoolMapEntry_DoNotUse& other) {
  MergeFromInternal(other);
}
::google::protobuf::Metadata TestNestedMap_BoolMapEntry_DoNotUse::GetMetadata() const {
  ::protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::file_level_metadata[10];
}
void TestNestedMap_BoolMapEntry_DoNotUse::MergeFrom(
    const ::google::protobuf::Message& other) {
  ::google::protobuf::Message::MergeFrom(other);
}


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

TestNestedMap_Int32MapEntry_DoNotUse::TestNestedMap_Int32MapEntry_DoNotUse() {}
TestNestedMap_Int32MapEntry_DoNotUse::TestNestedMap_Int32MapEntry_DoNotUse(::google::protobuf::Arena* arena) : SuperType(arena) {}
void TestNestedMap_Int32MapEntry_DoNotUse::MergeFrom(const TestNestedMap_Int32MapEntry_DoNotUse& other) {
  MergeFromInternal(other);
}
::google::protobuf::Metadata TestNestedMap_Int32MapEntry_DoNotUse::GetMetadata() const {
  ::protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::file_level_metadata[11];
}
void TestNestedMap_Int32MapEntry_DoNotUse::MergeFrom(
    const ::google::protobuf::Message& other) {
  ::google::protobuf::Message::MergeFrom(other);
}


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

TestNestedMap_Int64MapEntry_DoNotUse::TestNestedMap_Int64MapEntry_DoNotUse() {}
TestNestedMap_Int64MapEntry_DoNotUse::TestNestedMap_Int64MapEntry_DoNotUse(::google::protobuf::Arena* arena) : SuperType(arena) {}
void TestNestedMap_Int64MapEntry_DoNotUse::MergeFrom(const TestNestedMap_Int64MapEntry_DoNotUse& other) {
  MergeFromInternal(other);
}
::google::protobuf::Metadata TestNestedMap_Int64MapEntry_DoNotUse::GetMetadata() const {
  ::protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::file_level_metadata[12];
}
void TestNestedMap_Int64MapEntry_DoNotUse::MergeFrom(
    const ::google::protobuf::Message& other) {
  ::google::protobuf::Message::MergeFrom(other);
}


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

TestNestedMap_Uint32MapEntry_DoNotUse::TestNestedMap_Uint32MapEntry_DoNotUse() {}
TestNestedMap_Uint32MapEntry_DoNotUse::TestNestedMap_Uint32MapEntry_DoNotUse(::google::protobuf::Arena* arena) : SuperType(arena) {}
void TestNestedMap_Uint32MapEntry_DoNotUse::MergeFrom(const TestNestedMap_Uint32MapEntry_DoNotUse& other) {
  MergeFromInternal(other);
}
::google::protobuf::Metadata TestNestedMap_Uint32MapEntry_DoNotUse::GetMetadata() const {
  ::protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::file_level_metadata[13];
}
void TestNestedMap_Uint32MapEntry_DoNotUse::MergeFrom(
    const ::google::protobuf::Message& other) {
  ::google::protobuf::Message::MergeFrom(other);
}


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

TestNestedMap_Uint64MapEntry_DoNotUse::TestNestedMap_Uint64MapEntry_DoNotUse() {}
TestNestedMap_Uint64MapEntry_DoNotUse::TestNestedMap_Uint64MapEntry_DoNotUse(::google::protobuf::Arena* arena) : SuperType(arena) {}
void TestNestedMap_Uint64MapEntry_DoNotUse::MergeFrom(const TestNestedMap_Uint64MapEntry_DoNotUse& other) {
  MergeFromInternal(other);
}
::google::protobuf::Metadata TestNestedMap_Uint64MapEntry_DoNotUse::GetMetadata() const {
  ::protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::file_level_metadata[14];
}
void TestNestedMap_Uint64MapEntry_DoNotUse::MergeFrom(
    const ::google::protobuf::Message& other) {
  ::google::protobuf::Message::MergeFrom(other);
}


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

TestNestedMap_StringMapEntry_DoNotUse::TestNestedMap_StringMapEntry_DoNotUse() {}
TestNestedMap_StringMapEntry_DoNotUse::TestNestedMap_StringMapEntry_DoNotUse(::google::protobuf::Arena* arena) : SuperType(arena) {}
void TestNestedMap_StringMapEntry_DoNotUse::MergeFrom(const TestNestedMap_StringMapEntry_DoNotUse& other) {
  MergeFromInternal(other);
}
::google::protobuf::Metadata TestNestedMap_StringMapEntry_DoNotUse::GetMetadata() const {
  ::protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::file_level_metadata[15];
}
void TestNestedMap_StringMapEntry_DoNotUse::MergeFrom(
    const ::google::protobuf::Message& other) {
  ::google::protobuf::Message::MergeFrom(other);
}


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

TestNestedMap_MapMapEntry_DoNotUse::TestNestedMap_MapMapEntry_DoNotUse() {}
TestNestedMap_MapMapEntry_DoNotUse::TestNestedMap_MapMapEntry_DoNotUse(::google::protobuf::Arena* arena) : SuperType(arena) {}
void TestNestedMap_MapMapEntry_DoNotUse::MergeFrom(const TestNestedMap_MapMapEntry_DoNotUse& other) {
  MergeFromInternal(other);
}
::google::protobuf::Metadata TestNestedMap_MapMapEntry_DoNotUse::GetMetadata() const {
  ::protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::file_level_metadata[16];
}
void TestNestedMap_MapMapEntry_DoNotUse::MergeFrom(
    const ::google::protobuf::Message& other) {
  ::google::protobuf::Message::MergeFrom(other);
}


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

void TestNestedMap::InitAsDefaultInstance() {
}
#if !defined(_MSC_VER) || _MSC_VER >= 1900
const int TestNestedMap::kBoolMapFieldNumber;
const int TestNestedMap::kInt32MapFieldNumber;
const int TestNestedMap::kInt64MapFieldNumber;
const int TestNestedMap::kUint32MapFieldNumber;
const int TestNestedMap::kUint64MapFieldNumber;
const int TestNestedMap::kStringMapFieldNumber;
const int TestNestedMap::kMapMapFieldNumber;
#endif  // !defined(_MSC_VER) || _MSC_VER >= 1900

TestNestedMap::TestNestedMap()
  : ::google::protobuf::Message(), _internal_metadata_(NULL) {
  ::google::protobuf::internal::InitSCC(
      &protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::scc_info_TestNestedMap.base);
  SharedCtor();
  // @@protoc_insertion_point(constructor:proto3.TestNestedMap)
}
TestNestedMap::TestNestedMap(const TestNestedMap& from)
  : ::google::protobuf::Message(),
      _internal_metadata_(NULL) {
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  bool_map_.MergeFrom(from.bool_map_);
  int32_map_.MergeFrom(from.int32_map_);
  int64_map_.MergeFrom(from.int64_map_);
  uint32_map_.MergeFrom(from.uint32_map_);
  uint64_map_.MergeFrom(from.uint64_map_);
  string_map_.MergeFrom(from.string_map_);
  map_map_.MergeFrom(from.map_map_);
  // @@protoc_insertion_point(copy_constructor:proto3.TestNestedMap)
}

void TestNestedMap::SharedCtor() {
}

TestNestedMap::~TestNestedMap() {
  // @@protoc_insertion_point(destructor:proto3.TestNestedMap)
  SharedDtor();
}

void TestNestedMap::SharedDtor() {
}

void TestNestedMap::SetCachedSize(int size) const {
  _cached_size_.Set(size);
}
const ::google::protobuf::Descriptor* TestNestedMap::descriptor() {
  ::protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
}

const TestNestedMap& TestNestedMap::default_instance() {
  ::google::protobuf::internal::InitSCC(&protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::scc_info_TestNestedMap.base);
  return *internal_default_instance();
}


void TestNestedMap::Clear() {
// @@protoc_insertion_point(message_clear_start:proto3.TestNestedMap)
  ::google::protobuf::uint32 cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  bool_map_.Clear();
  int32_map_.Clear();
  int64_map_.Clear();
  uint32_map_.Clear();
  uint64_map_.Clear();
  string_map_.Clear();
  map_map_.Clear();
  _internal_metadata_.Clear();
}

bool TestNestedMap::MergePartialFromCodedStream(
    ::google::protobuf::io::CodedInputStream* input) {
#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
  ::google::protobuf::uint32 tag;
  // @@protoc_insertion_point(parse_start:proto3.TestNestedMap)
  for (;;) {
    ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
    tag = p.first;
    if (!p.second) goto handle_unusual;
    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
      // map<bool, int32> bool_map = 1;
      case 1: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(10u /* 10 & 0xFF */)) {
          TestNestedMap_BoolMapEntry_DoNotUse::Parser< ::google::protobuf::internal::MapField<
              TestNestedMap_BoolMapEntry_DoNotUse,
              bool, ::google::protobuf::int32,
              ::google::protobuf::internal::WireFormatLite::TYPE_BOOL,
              ::google::protobuf::internal::WireFormatLite::TYPE_INT32,
              0 >,
            ::google::protobuf::Map< bool, ::google::protobuf::int32 > > parser(&bool_map_);
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual(
              input, &parser));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // map<int32, int32> int32_map = 2;
      case 2: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(18u /* 18 & 0xFF */)) {
          TestNestedMap_Int32MapEntry_DoNotUse::Parser< ::google::protobuf::internal::MapField<
              TestNestedMap_Int32MapEntry_DoNotUse,
              ::google::protobuf::int32, ::google::protobuf::int32,
              ::google::protobuf::internal::WireFormatLite::TYPE_INT32,
              ::google::protobuf::internal::WireFormatLite::TYPE_INT32,
              0 >,
            ::google::protobuf::Map< ::google::protobuf::int32, ::google::protobuf::int32 > > parser(&int32_map_);
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual(
              input, &parser));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // map<int64, int32> int64_map = 3;
      case 3: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(26u /* 26 & 0xFF */)) {
          TestNestedMap_Int64MapEntry_DoNotUse::Parser< ::google::protobuf::internal::MapField<
              TestNestedMap_Int64MapEntry_DoNotUse,
              ::google::protobuf::int64, ::google::protobuf::int32,
              ::google::protobuf::internal::WireFormatLite::TYPE_INT64,
              ::google::protobuf::internal::WireFormatLite::TYPE_INT32,
              0 >,
            ::google::protobuf::Map< ::google::protobuf::int64, ::google::protobuf::int32 > > parser(&int64_map_);
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual(
              input, &parser));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // map<uint32, int32> uint32_map = 4;
      case 4: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(34u /* 34 & 0xFF */)) {
          TestNestedMap_Uint32MapEntry_DoNotUse::Parser< ::google::protobuf::internal::MapField<
              TestNestedMap_Uint32MapEntry_DoNotUse,
              ::google::protobuf::uint32, ::google::protobuf::int32,
              ::google::protobuf::internal::WireFormatLite::TYPE_UINT32,
              ::google::protobuf::internal::WireFormatLite::TYPE_INT32,
              0 >,
            ::google::protobuf::Map< ::google::protobuf::uint32, ::google::protobuf::int32 > > parser(&uint32_map_);
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual(
              input, &parser));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // map<uint64, int32> uint64_map = 5;
      case 5: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(42u /* 42 & 0xFF */)) {
          TestNestedMap_Uint64MapEntry_DoNotUse::Parser< ::google::protobuf::internal::MapField<
              TestNestedMap_Uint64MapEntry_DoNotUse,
              ::google::protobuf::uint64, ::google::protobuf::int32,
              ::google::protobuf::internal::WireFormatLite::TYPE_UINT64,
              ::google::protobuf::internal::WireFormatLite::TYPE_INT32,
              0 >,
            ::google::protobuf::Map< ::google::protobuf::uint64, ::google::protobuf::int32 > > parser(&uint64_map_);
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual(
              input, &parser));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // map<string, int32> string_map = 6;
      case 6: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(50u /* 50 & 0xFF */)) {
          TestNestedMap_StringMapEntry_DoNotUse::Parser< ::google::protobuf::internal::MapField<
              TestNestedMap_StringMapEntry_DoNotUse,
              ::std::string, ::google::protobuf::int32,
              ::google::protobuf::internal::WireFormatLite::TYPE_STRING,
              ::google::protobuf::internal::WireFormatLite::TYPE_INT32,
              0 >,
            ::google::protobuf::Map< ::std::string, ::google::protobuf::int32 > > parser(&string_map_);
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual(
              input, &parser));
          DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
            parser.key().data(), static_cast<int>(parser.key().length()),
            ::google::protobuf::internal::WireFormatLite::PARSE,
            "proto3.TestNestedMap.StringMapEntry.key"));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // map<string, .proto3.TestNestedMap> map_map = 7;
      case 7: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(58u /* 58 & 0xFF */)) {
          TestNestedMap_MapMapEntry_DoNotUse::Parser< ::google::protobuf::internal::MapField<
              TestNestedMap_MapMapEntry_DoNotUse,
              ::std::string, ::proto3::TestNestedMap,
              ::google::protobuf::internal::WireFormatLite::TYPE_STRING,
              ::google::protobuf::internal::WireFormatLite::TYPE_MESSAGE,
              0 >,
            ::google::protobuf::Map< ::std::string, ::proto3::TestNestedMap > > parser(&map_map_);
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual(
              input, &parser));
          DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
            parser.key().data(), static_cast<int>(parser.key().length()),
            ::google::protobuf::internal::WireFormatLite::PARSE,
            "proto3.TestNestedMap.MapMapEntry.key"));
        } else {
          goto handle_unusual;
        }
        break;
      }

      default: {
      handle_unusual:
        if (tag == 0) {
          goto success;
        }
        DO_(::google::protobuf::internal::WireFormat::SkipField(
              input, tag, _internal_metadata_.mutable_unknown_fields()));
        break;
      }
    }
  }
success:
  // @@protoc_insertion_point(parse_success:proto3.TestNestedMap)
  return true;
failure:
  // @@protoc_insertion_point(parse_failure:proto3.TestNestedMap)
  return false;
#undef DO_
}

void TestNestedMap::SerializeWithCachedSizes(
    ::google::protobuf::io::CodedOutputStream* output) const {
  // @@protoc_insertion_point(serialize_start:proto3.TestNestedMap)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  // map<bool, int32> bool_map = 1;
  if (!this->bool_map().empty()) {
    typedef ::google::protobuf::Map< bool, ::google::protobuf::int32 >::const_pointer
        ConstPtr;
    typedef ::google::protobuf::internal::SortItem< bool, ConstPtr > SortItem;
    typedef ::google::protobuf::internal::CompareByFirstField<SortItem> Less;

    if (output->IsSerializationDeterministic() &&
        this->bool_map().size() > 1) {
      ::std::unique_ptr<SortItem[]> items(
          new SortItem[this->bool_map().size()]);
      typedef ::google::protobuf::Map< bool, ::google::protobuf::int32 >::size_type size_type;
      size_type n = 0;
      for (::google::protobuf::Map< bool, ::google::protobuf::int32 >::const_iterator
          it = this->bool_map().begin();
          it != this->bool_map().end(); ++it, ++n) {
        items[static_cast<ptrdiff_t>(n)] = SortItem(&*it);
      }
      ::std::sort(&items[0], &items[static_cast<ptrdiff_t>(n)], Less());
      ::std::unique_ptr<TestNestedMap_BoolMapEntry_DoNotUse> entry;
      for (size_type i = 0; i < n; i++) {
        entry.reset(bool_map_.NewEntryWrapper(
            items[static_cast<ptrdiff_t>(i)].second->first, items[static_cast<ptrdiff_t>(i)].second->second));
        ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
            1, *entry, output);
      }
    } else {
      ::std::unique_ptr<TestNestedMap_BoolMapEntry_DoNotUse> entry;
      for (::google::protobuf::Map< bool, ::google::protobuf::int32 >::const_iterator
          it = this->bool_map().begin();
          it != this->bool_map().end(); ++it) {
        entry.reset(bool_map_.NewEntryWrapper(
            it->first, it->second));
        ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
            1, *entry, output);
      }
    }
  }

  // map<int32, int32> int32_map = 2;
  if (!this->int32_map().empty()) {
    typedef ::google::protobuf::Map< ::google::protobuf::int32, ::google::protobuf::int32 >::const_pointer
        ConstPtr;
    typedef ::google::protobuf::internal::SortItem< ::google::protobuf::int32, ConstPtr > SortItem;
    typedef ::google::protobuf::internal::CompareByFirstField<SortItem> Less;

    if (output->IsSerializationDeterministic() &&
        this->int32_map().size() > 1) {
      ::std::unique_ptr<SortItem[]> items(
          new SortItem[this->int32_map().size()]);
      typedef ::google::protobuf::Map< ::google::protobuf::int32, ::google::protobuf::int32 >::size_type size_type;
      size_type n = 0;
      for (::google::protobuf::Map< ::google::protobuf::int32, ::google::protobuf::int32 >::const_iterator
          it = this->int32_map().begin();
          it != this->int32_map().end(); ++it, ++n) {
        items[static_cast<ptrdiff_t>(n)] = SortItem(&*it);
      }
      ::std::sort(&items[0], &items[static_cast<ptrdiff_t>(n)], Less());
      ::std::unique_ptr<TestNestedMap_Int32MapEntry_DoNotUse> entry;
      for (size_type i = 0; i < n; i++) {
        entry.reset(int32_map_.NewEntryWrapper(
            items[static_cast<ptrdiff_t>(i)].second->first, items[static_cast<ptrdiff_t>(i)].second->second));
        ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
            2, *entry, output);
      }
    } else {
      ::std::unique_ptr<TestNestedMap_Int32MapEntry_DoNotUse> entry;
      for (::google::protobuf::Map< ::google::protobuf::int32, ::google::protobuf::int32 >::const_iterator
          it = this->int32_map().begin();
          it != this->int32_map().end(); ++it) {
        entry.reset(int32_map_.NewEntryWrapper(
            it->first, it->second));
        ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
            2, *entry, output);
      }
    }
  }

  // map<int64, int32> int64_map = 3;
  if (!this->int64_map().empty()) {
    typedef ::google::protobuf::Map< ::google::protobuf::int64, ::google::protobuf::int32 >::const_pointer
        ConstPtr;
    typedef ::google::protobuf::internal::SortItem< ::google::protobuf::int64, ConstPtr > SortItem;
    typedef ::google::protobuf::internal::CompareByFirstField<SortItem> Less;

    if (output->IsSerializationDeterministic() &&
        this->int64_map().size() > 1) {
      ::std::unique_ptr<SortItem[]> items(
          new SortItem[this->int64_map().size()]);
      typedef ::google::protobuf::Map< ::google::protobuf::int64, ::google::protobuf::int32 >::size_type size_type;
      size_type n = 0;
      for (::google::protobuf::Map< ::google::protobuf::int64, ::google::protobuf::int32 >::const_iterator
          it = this->int64_map().begin();
          it != this->int64_map().end(); ++it, ++n) {
        items[static_cast<ptrdiff_t>(n)] = SortItem(&*it);
      }
      ::std::sort(&items[0], &items[static_cast<ptrdiff_t>(n)], Less());
      ::std::unique_ptr<TestNestedMap_Int64MapEntry_DoNotUse> entry;
      for (size_type i = 0; i < n; i++) {
        entry.reset(int64_map_.NewEntryWrapper(
            items[static_cast<ptrdiff_t>(i)].second->first, items[static_cast<ptrdiff_t>(i)].second->second));
        ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
            3, *entry, output);
      }
    } else {
      ::std::unique_ptr<TestNestedMap_Int64MapEntry_DoNotUse> entry;
      for (::google::protobuf::Map< ::google::protobuf::int64, ::google::protobuf::int32 >::const_iterator
          it = this->int64_map().begin();
          it != this->int64_map().end(); ++it) {
        entry.reset(int64_map_.NewEntryWrapper(
            it->first, it->second));
        ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
            3, *entry, output);
      }
    }
  }

  // map<uint32, int32> uint32_map = 4;
  if (!this->uint32_map().empty()) {
    typedef ::google::protobuf::Map< ::google::protobuf::uint32, ::google::protobuf::int32 >::const_pointer
        ConstPtr;
    typedef ::google::protobuf::internal::SortItem< ::google::protobuf::uint32, ConstPtr > SortItem;
    typedef ::google::protobuf::internal::CompareByFirstField<SortItem> Less;

    if (output->IsSerializationDeterministic() &&
        this->uint32_map().size() > 1) {
      ::std::unique_ptr<SortItem[]> items(
          new SortItem[this->uint32_map().size()]);
      typedef ::google::protobuf::Map< ::google::protobuf::uint32, ::google::protobuf::int32 >::size_type size_type;
      size_type n = 0;
      for (::google::protobuf::Map< ::google::protobuf::uint32, ::google::protobuf::int32 >::const_iterator
          it = this->uint32_map().begin();
          it != this->uint32_map().end(); ++it, ++n) {
        items[static_cast<ptrdiff_t>(n)] = SortItem(&*it);
      }
      ::std::sort(&items[0], &items[static_cast<ptrdiff_t>(n)], Less());
      ::std::unique_ptr<TestNestedMap_Uint32MapEntry_DoNotUse> entry;
      for (size_type i = 0; i < n; i++) {
        entry.reset(uint32_map_.NewEntryWrapper(
            items[static_cast<ptrdiff_t>(i)].second->first, items[static_cast<ptrdiff_t>(i)].second->second));
        ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
            4, *entry, output);
      }
    } else {
      ::std::unique_ptr<TestNestedMap_Uint32MapEntry_DoNotUse> entry;
      for (::google::protobuf::Map< ::google::protobuf::uint32, ::google::protobuf::int32 >::const_iterator
          it = this->uint32_map().begin();
          it != this->uint32_map().end(); ++it) {
        entry.reset(uint32_map_.NewEntryWrapper(
            it->first, it->second));
        ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
            4, *entry, output);
      }
    }
  }

  // map<uint64, int32> uint64_map = 5;
  if (!this->uint64_map().empty()) {
    typedef ::google::protobuf::Map< ::google::protobuf::uint64, ::google::protobuf::int32 >::const_pointer
        ConstPtr;
    typedef ::google::protobuf::internal::SortItem< ::google::protobuf::uint64, ConstPtr > SortItem;
    typedef ::google::protobuf::internal::CompareByFirstField<SortItem> Less;

    if (output->IsSerializationDeterministic() &&
        this->uint64_map().size() > 1) {
      ::std::unique_ptr<SortItem[]> items(
          new SortItem[this->uint64_map().size()]);
      typedef ::google::protobuf::Map< ::google::protobuf::uint64, ::google::protobuf::int32 >::size_type size_type;
      size_type n = 0;
      for (::google::protobuf::Map< ::google::protobuf::uint64, ::google::protobuf::int32 >::const_iterator
          it = this->uint64_map().begin();
          it != this->uint64_map().end(); ++it, ++n) {
        items[static_cast<ptrdiff_t>(n)] = SortItem(&*it);
      }
      ::std::sort(&items[0], &items[static_cast<ptrdiff_t>(n)], Less());
      ::std::unique_ptr<TestNestedMap_Uint64MapEntry_DoNotUse> entry;
      for (size_type i = 0; i < n; i++) {
        entry.reset(uint64_map_.NewEntryWrapper(
            items[static_cast<ptrdiff_t>(i)].second->first, items[static_cast<ptrdiff_t>(i)].second->second));
        ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
            5, *entry, output);
      }
    } else {
      ::std::unique_ptr<TestNestedMap_Uint64MapEntry_DoNotUse> entry;
      for (::google::protobuf::Map< ::google::protobuf::uint64, ::google::protobuf::int32 >::const_iterator
          it = this->uint64_map().begin();
          it != this->uint64_map().end(); ++it) {
        entry.reset(uint64_map_.NewEntryWrapper(
            it->first, it->second));
        ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
            5, *entry, output);
      }
    }
  }

  // map<string, int32> string_map = 6;
  if (!this->string_map().empty()) {
    typedef ::google::protobuf::Map< ::std::string, ::google::protobuf::int32 >::const_pointer
        ConstPtr;
    typedef ConstPtr SortItem;
    typedef ::google::protobuf::internal::CompareByDerefFirst<SortItem> Less;
    struct Utf8Check {
      static void Check(ConstPtr p) {
        ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
          p->first.data(), static_cast<int>(p->first.length()),
          ::google::protobuf::internal::WireFormatLite::SERIALIZE,
          "proto3.TestNestedMap.StringMapEntry.key");
      }
    };

    if (output->IsSerializationDeterministic() &&
        this->string_map().size() > 1) {
      ::std::unique_ptr<SortItem[]> items(
          new SortItem[this->string_map().size()]);
      typedef ::google::protobuf::Map< ::std::string, ::google::protobuf::int32 >::size_type size_type;
      size_type n = 0;
      for (::google::protobuf::Map< ::std::string, ::google::protobuf::int32 >::const_iterator
          it = this->string_map().begin();
          it != this->string_map().end(); ++it, ++n) {
        items[static_cast<ptrdiff_t>(n)] = SortItem(&*it);
      }
      ::std::sort(&items[0], &items[static_cast<ptrdiff_t>(n)], Less());
      ::std::unique_ptr<TestNestedMap_StringMapEntry_DoNotUse> entry;
      for (size_type i = 0; i < n; i++) {
        entry.reset(string_map_.NewEntryWrapper(
            items[static_cast<ptrdiff_t>(i)]->first, items[static_cast<ptrdiff_t>(i)]->second));
        ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
            6, *entry, output);
        Utf8Check::Check(items[static_cast<ptrdiff_t>(i)]);
      }
    } else {
      ::std::unique_ptr<TestNestedMap_StringMapEntry_DoNotUse> entry;
      for (::google::protobuf::Map< ::std::string, ::google::protobuf::int32 >::const_iterator
          it = this->string_map().begin();
          it != this->string_map().end(); ++it) {
        entry.reset(string_map_.NewEntryWrapper(
            it->first, it->second));
        ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
            6, *entry, output);
        Utf8Check::Check(&*it);
      }
    }
  }

  // map<string, .proto3.TestNestedMap> map_map = 7;
  if (!this->map_map().empty()) {
    typedef ::google::protobuf::Map< ::std::string, ::proto3::TestNestedMap >::const_pointer
        ConstPtr;
    typedef ConstPtr SortItem;
    typedef ::google::protobuf::internal::CompareByDerefFirst<SortItem> Less;
    struct Utf8Check {
      static void Check(ConstPtr p) {
        ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
          p->first.data(), static_cast<int>(p->first.length()),
          ::google::protobuf::internal::WireFormatLite::SERIALIZE,
          "proto3.TestNestedMap.MapMapEntry.key");
      }
    };

    if (output->IsSerializationDeterministic() &&
        this->map_map().size() > 1) {
      ::std::unique_ptr<SortItem[]> items(
          new SortItem[this->map_map().size()]);
      typedef ::google::protobuf::Map< ::std::string, ::proto3::TestNestedMap >::size_type size_type;
      size_type n = 0;
      for (::google::protobuf::Map< ::std::string, ::proto3::TestNestedMap >::const_iterator
          it = this->map_map().begin();
          it != this->map_map().end(); ++it, ++n) {
        items[static_cast<ptrdiff_t>(n)] = SortItem(&*it);
      }
      ::std::sort(&items[0], &items[static_cast<ptrdiff_t>(n)], Less());
      ::std::unique_ptr<TestNestedMap_MapMapEntry_DoNotUse> entry;
      for (size_type i = 0; i < n; i++) {
        entry.reset(map_map_.NewEntryWrapper(
            items[static_cast<ptrdiff_t>(i)]->first, items[static_cast<ptrdiff_t>(i)]->second));
        ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
            7, *entry, output);
        Utf8Check::Check(items[static_cast<ptrdiff_t>(i)]);
      }
    } else {
      ::std::unique_ptr<TestNestedMap_MapMapEntry_DoNotUse> entry;
      for (::google::protobuf::Map< ::std::string, ::proto3::TestNestedMap >::const_iterator
          it = this->map_map().begin();
          it != this->map_map().end(); ++it) {
        entry.reset(map_map_.NewEntryWrapper(
            it->first, it->second));
        ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
            7, *entry, output);
        Utf8Check::Check(&*it);
      }
    }
  }

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), output);
  }
  // @@protoc_insertion_point(serialize_end:proto3.TestNestedMap)
}

::google::protobuf::uint8* TestNestedMap::InternalSerializeWithCachedSizesToArray(
    bool deterministic, ::google::protobuf::uint8* target) const {
  (void)deterministic; // Unused
  // @@protoc_insertion_point(serialize_to_array_start:proto3.TestNestedMap)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  // map<bool, int32> bool_map = 1;
  if (!this->bool_map().empty()) {
    typedef ::google::protobuf::Map< bool, ::google::protobuf::int32 >::const_pointer
        ConstPtr;
    typedef ::google::protobuf::internal::SortItem< bool, ConstPtr > SortItem;
    typedef ::google::protobuf::internal::CompareByFirstField<SortItem> Less;

    if (deterministic &&
        this->bool_map().size() > 1) {
      ::std::unique_ptr<SortItem[]> items(
          new SortItem[this->bool_map().size()]);
      typedef ::google::protobuf::Map< bool, ::google::protobuf::int32 >::size_type size_type;
      size_type n = 0;
      for (::google::protobuf::Map< bool, ::google::protobuf::int32 >::const_iterator
          it = this->bool_map().begin();
          it != this->bool_map().end(); ++it, ++n) {
        items[static_cast<ptrdiff_t>(n)] = SortItem(&*it);
      }
      ::std::sort(&items[0], &items[static_cast<ptrdiff_t>(n)], Less());
      ::std::unique_ptr<TestNestedMap_BoolMapEntry_DoNotUse> entry;
      for (size_type i = 0; i < n; i++) {
        entry.reset(bool_map_.NewEntryWrapper(
            items[static_cast<ptrdiff_t>(i)].second->first, items[static_cast<ptrdiff_t>(i)].second->second));
        target = ::google::protobuf::internal::WireFormatLite::
                   InternalWriteMessageNoVirtualToArray(
                       1, *entry, deterministic, target);
;
      }
    } else {
      ::std::unique_ptr<TestNestedMap_BoolMapEntry_DoNotUse> entry;
      for (::google::protobuf::Map< bool, ::google::protobuf::int32 >::const_iterator
          it = this->bool_map().begin();
          it != this->bool_map().end(); ++it) {
        entry.reset(bool_map_.NewEntryWrapper(
            it->first, it->second));
        target = ::google::protobuf::internal::WireFormatLite::
                   InternalWriteMessageNoVirtualToArray(
                       1, *entry, deterministic, target);
;
      }
    }
  }

  // map<int32, int32> int32_map = 2;
  if (!this->int32_map().empty()) {
    typedef ::google::protobuf::Map< ::google::protobuf::int32, ::google::protobuf::int32 >::const_pointer
        ConstPtr;
    typedef ::google::protobuf::internal::SortItem< ::google::protobuf::int32, ConstPtr > SortItem;
    typedef ::google::protobuf::internal::CompareByFirstField<SortItem> Less;

    if (deterministic &&
        this->int32_map().size() > 1) {
      ::std::unique_ptr<SortItem[]> items(
          new SortItem[this->int32_map().size()]);
      typedef ::google::protobuf::Map< ::google::protobuf::int32, ::google::protobuf::int32 >::size_type size_type;
      size_type n = 0;
      for (::google::protobuf::Map< ::google::protobuf::int32, ::google::protobuf::int32 >::const_iterator
          it = this->int32_map().begin();
          it != this->int32_map().end(); ++it, ++n) {
        items[static_cast<ptrdiff_t>(n)] = SortItem(&*it);
      }
      ::std::sort(&items[0], &items[static_cast<ptrdiff_t>(n)], Less());
      ::std::unique_ptr<TestNestedMap_Int32MapEntry_DoNotUse> entry;
      for (size_type i = 0; i < n; i++) {
        entry.reset(int32_map_.NewEntryWrapper(
            items[static_cast<ptrdiff_t>(i)].second->first, items[static_cast<ptrdiff_t>(i)].second->second));
        target = ::google::protobuf::internal::WireFormatLite::
                   InternalWriteMessageNoVirtualToArray(
                       2, *entry, deterministic, target);
;
      }
    } else {
      ::std::unique_ptr<TestNestedMap_Int32MapEntry_DoNotUse> entry;
      for (::google::protobuf::Map< ::google::protobuf::int32, ::google::protobuf::int32 >::const_iterator
          it = this->int32_map().begin();
          it != this->int32_map().end(); ++it) {
        entry.reset(int32_map_.NewEntryWrapper(
            it->first, it->second));
        target = ::google::protobuf::internal::WireFormatLite::
                   InternalWriteMessageNoVirtualToArray(
                       2, *entry, deterministic, target);
;
      }
    }
  }

  // map<int64, int32> int64_map = 3;
  if (!this->int64_map().empty()) {
    typedef ::google::protobuf::Map< ::google::protobuf::int64, ::google::protobuf::int32 >::const_pointer
        ConstPtr;
    typedef ::google::protobuf::internal::SortItem< ::google::protobuf::int64, ConstPtr > SortItem;
    typedef ::google::protobuf::internal::CompareByFirstField<SortItem> Less;

    if (deterministic &&
        this->int64_map().size() > 1) {
      ::std::unique_ptr<SortItem[]> items(
          new SortItem[this->int64_map().size()]);
      typedef ::google::protobuf::Map< ::google::protobuf::int64, ::google::protobuf::int32 >::size_type size_type;
      size_type n = 0;
      for (::google::protobuf::Map< ::google::protobuf::int64, ::google::protobuf::int32 >::const_iterator
          it = this->int64_map().begin();
          it != this->int64_map().end(); ++it, ++n) {
        items[static_cast<ptrdiff_t>(n)] = SortItem(&*it);
      }
      ::std::sort(&items[0], &items[static_cast<ptrdiff_t>(n)], Less());
      ::std::unique_ptr<TestNestedMap_Int64MapEntry_DoNotUse> entry;
      for (size_type i = 0; i < n; i++) {
        entry.reset(int64_map_.NewEntryWrapper(
            items[static_cast<ptrdiff_t>(i)].second->first, items[static_cast<ptrdiff_t>(i)].second->second));
        target = ::google::protobuf::internal::WireFormatLite::
                   InternalWriteMessageNoVirtualToArray(
                       3, *entry, deterministic, target);
;
      }
    } else {
      ::std::unique_ptr<TestNestedMap_Int64MapEntry_DoNotUse> entry;
      for (::google::protobuf::Map< ::google::protobuf::int64, ::google::protobuf::int32 >::const_iterator
          it = this->int64_map().begin();
          it != this->int64_map().end(); ++it) {
        entry.reset(int64_map_.NewEntryWrapper(
            it->first, it->second));
        target = ::google::protobuf::internal::WireFormatLite::
                   InternalWriteMessageNoVirtualToArray(
                       3, *entry, deterministic, target);
;
      }
    }
  }

  // map<uint32, int32> uint32_map = 4;
  if (!this->uint32_map().empty()) {
    typedef ::google::protobuf::Map< ::google::protobuf::uint32, ::google::protobuf::int32 >::const_pointer
        ConstPtr;
    typedef ::google::protobuf::internal::SortItem< ::google::protobuf::uint32, ConstPtr > SortItem;
    typedef ::google::protobuf::internal::CompareByFirstField<SortItem> Less;

    if (deterministic &&
        this->uint32_map().size() > 1) {
      ::std::unique_ptr<SortItem[]> items(
          new SortItem[this->uint32_map().size()]);
      typedef ::google::protobuf::Map< ::google::protobuf::uint32, ::google::protobuf::int32 >::size_type size_type;
      size_type n = 0;
      for (::google::protobuf::Map< ::google::protobuf::uint32, ::google::protobuf::int32 >::const_iterator
          it = this->uint32_map().begin();
          it != this->uint32_map().end(); ++it, ++n) {
        items[static_cast<ptrdiff_t>(n)] = SortItem(&*it);
      }
      ::std::sort(&items[0], &items[static_cast<ptrdiff_t>(n)], Less());
      ::std::unique_ptr<TestNestedMap_Uint32MapEntry_DoNotUse> entry;
      for (size_type i = 0; i < n; i++) {
        entry.reset(uint32_map_.NewEntryWrapper(
            items[static_cast<ptrdiff_t>(i)].second->first, items[static_cast<ptrdiff_t>(i)].second->second));
        target = ::google::protobuf::internal::WireFormatLite::
                   InternalWriteMessageNoVirtualToArray(
                       4, *entry, deterministic, target);
;
      }
    } else {
      ::std::unique_ptr<TestNestedMap_Uint32MapEntry_DoNotUse> entry;
      for (::google::protobuf::Map< ::google::protobuf::uint32, ::google::protobuf::int32 >::const_iterator
          it = this->uint32_map().begin();
          it != this->uint32_map().end(); ++it) {
        entry.reset(uint32_map_.NewEntryWrapper(
            it->first, it->second));
        target = ::google::protobuf::internal::WireFormatLite::
                   InternalWriteMessageNoVirtualToArray(
                       4, *entry, deterministic, target);
;
      }
    }
  }

  // map<uint64, int32> uint64_map = 5;
  if (!this->uint64_map().empty()) {
    typedef ::google::protobuf::Map< ::google::protobuf::uint64, ::google::protobuf::int32 >::const_pointer
        ConstPtr;
    typedef ::google::protobuf::internal::SortItem< ::google::protobuf::uint64, ConstPtr > SortItem;
    typedef ::google::protobuf::internal::CompareByFirstField<SortItem> Less;

    if (deterministic &&
        this->uint64_map().size() > 1) {
      ::std::unique_ptr<SortItem[]> items(
          new SortItem[this->uint64_map().size()]);
      typedef ::google::protobuf::Map< ::google::protobuf::uint64, ::google::protobuf::int32 >::size_type size_type;
      size_type n = 0;
      for (::google::protobuf::Map< ::google::protobuf::uint64, ::google::protobuf::int32 >::const_iterator
          it = this->uint64_map().begin();
          it != this->uint64_map().end(); ++it, ++n) {
        items[static_cast<ptrdiff_t>(n)] = SortItem(&*it);
      }
      ::std::sort(&items[0], &items[static_cast<ptrdiff_t>(n)], Less());
      ::std::unique_ptr<TestNestedMap_Uint64MapEntry_DoNotUse> entry;
      for (size_type i = 0; i < n; i++) {
        entry.reset(uint64_map_.NewEntryWrapper(
            items[static_cast<ptrdiff_t>(i)].second->first, items[static_cast<ptrdiff_t>(i)].second->second));
        target = ::google::protobuf::internal::WireFormatLite::
                   InternalWriteMessageNoVirtualToArray(
                       5, *entry, deterministic, target);
;
      }
    } else {
      ::std::unique_ptr<TestNestedMap_Uint64MapEntry_DoNotUse> entry;
      for (::google::protobuf::Map< ::google::protobuf::uint64, ::google::protobuf::int32 >::const_iterator
          it = this->uint64_map().begin();
          it != this->uint64_map().end(); ++it) {
        entry.reset(uint64_map_.NewEntryWrapper(
            it->first, it->second));
        target = ::google::protobuf::internal::WireFormatLite::
                   InternalWriteMessageNoVirtualToArray(
                       5, *entry, deterministic, target);
;
      }
    }
  }

  // map<string, int32> string_map = 6;
  if (!this->string_map().empty()) {
    typedef ::google::protobuf::Map< ::std::string, ::google::protobuf::int32 >::const_pointer
        ConstPtr;
    typedef ConstPtr SortItem;
    typedef ::google::protobuf::internal::CompareByDerefFirst<SortItem> Less;
    struct Utf8Check {
      static void Check(ConstPtr p) {
        ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
          p->first.data(), static_cast<int>(p->first.length()),
          ::google::protobuf::internal::WireFormatLite::SERIALIZE,
          "proto3.TestNestedMap.StringMapEntry.key");
      }
    };

    if (deterministic &&
        this->string_map().size() > 1) {
      ::std::unique_ptr<SortItem[]> items(
          new SortItem[this->string_map().size()]);
      typedef ::google::protobuf::Map< ::std::string, ::google::protobuf::int32 >::size_type size_type;
      size_type n = 0;
      for (::google::protobuf::Map< ::std::string, ::google::protobuf::int32 >::const_iterator
          it = this->string_map().begin();
          it != this->string_map().end(); ++it, ++n) {
        items[static_cast<ptrdiff_t>(n)] = SortItem(&*it);
      }
      ::std::sort(&items[0], &items[static_cast<ptrdiff_t>(n)], Less());
      ::std::unique_ptr<TestNestedMap_StringMapEntry_DoNotUse> entry;
      for (size_type i = 0; i < n; i++) {
        entry.reset(string_map_.NewEntryWrapper(
            items[static_cast<ptrdiff_t>(i)]->first, items[static_cast<ptrdiff_t>(i)]->second));
        target = ::google::protobuf::internal::WireFormatLite::
                   InternalWriteMessageNoVirtualToArray(
                       6, *entry, deterministic, target);
;
        Utf8Check::Check(items[static_cast<ptrdiff_t>(i)]);
      }
    } else {
      ::std::unique_ptr<TestNestedMap_StringMapEntry_DoNotUse> entry;
      for (::google::protobuf::Map< ::std::string, ::google::protobuf::int32 >::const_iterator
          it = this->string_map().begin();
          it != this->string_map().end(); ++it) {
        entry.reset(string_map_.NewEntryWrapper(
            it->first, it->second));
        target = ::google::protobuf::internal::WireFormatLite::
                   InternalWriteMessageNoVirtualToArray(
                       6, *entry, deterministic, target);
;
        Utf8Check::Check(&*it);
      }
    }
  }

  // map<string, .proto3.TestNestedMap> map_map = 7;
  if (!this->map_map().empty()) {
    typedef ::google::protobuf::Map< ::std::string, ::proto3::TestNestedMap >::const_pointer
        ConstPtr;
    typedef ConstPtr SortItem;
    typedef ::google::protobuf::internal::CompareByDerefFirst<SortItem> Less;
    struct Utf8Check {
      static void Check(ConstPtr p) {
        ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
          p->first.data(), static_cast<int>(p->first.length()),
          ::google::protobuf::internal::WireFormatLite::SERIALIZE,
          "proto3.TestNestedMap.MapMapEntry.key");
      }
    };

    if (deterministic &&
        this->map_map().size() > 1) {
      ::std::unique_ptr<SortItem[]> items(
          new SortItem[this->map_map().size()]);
      typedef ::google::protobuf::Map< ::std::string, ::proto3::TestNestedMap >::size_type size_type;
      size_type n = 0;
      for (::google::protobuf::Map< ::std::string, ::proto3::TestNestedMap >::const_iterator
          it = this->map_map().begin();
          it != this->map_map().end(); ++it, ++n) {
        items[static_cast<ptrdiff_t>(n)] = SortItem(&*it);
      }
      ::std::sort(&items[0], &items[static_cast<ptrdiff_t>(n)], Less());
      ::std::unique_ptr<TestNestedMap_MapMapEntry_DoNotUse> entry;
      for (size_type i = 0; i < n; i++) {
        entry.reset(map_map_.NewEntryWrapper(
            items[static_cast<ptrdiff_t>(i)]->first, items[static_cast<ptrdiff_t>(i)]->second));
        target = ::google::protobuf::internal::WireFormatLite::
                   InternalWriteMessageNoVirtualToArray(
                       7, *entry, deterministic, target);
;
        Utf8Check::Check(items[static_cast<ptrdiff_t>(i)]);
      }
    } else {
      ::std::unique_ptr<TestNestedMap_MapMapEntry_DoNotUse> entry;
      for (::google::protobuf::Map< ::std::string, ::proto3::TestNestedMap >::const_iterator
          it = this->map_map().begin();
          it != this->map_map().end(); ++it) {
        entry.reset(map_map_.NewEntryWrapper(
            it->first, it->second));
        target = ::google::protobuf::internal::WireFormatLite::
                   InternalWriteMessageNoVirtualToArray(
                       7, *entry, deterministic, target);
;
        Utf8Check::Check(&*it);
      }
    }
  }

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), target);
  }
  // @@protoc_insertion_point(serialize_to_array_end:proto3.TestNestedMap)
  return target;
}

size_t TestNestedMap::ByteSizeLong() const {
// @@protoc_insertion_point(message_byte_size_start:proto3.TestNestedMap)
  size_t total_size = 0;

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    total_size +=
      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()));
  }
  // map<bool, int32> bool_map = 1;
  total_size += 1 *
      ::google::protobuf::internal::FromIntSize(this->bool_map_size());
  {
    ::std::unique_ptr<TestNestedMap_BoolMapEntry_DoNotUse> entry;
    for (::google::protobuf::Map< bool, ::google::protobuf::int32 >::const_iterator
        it = this->bool_map().begin();
        it != this->bool_map().end(); ++it) {
      entry.reset(bool_map_.NewEntryWrapper(it->first, it->second));
      total_size += ::google::protobuf::internal::WireFormatLite::
          MessageSizeNoVirtual(*entry);
    }
  }

  // map<int32, int32> int32_map = 2;
  total_size += 1 *
      ::google::protobuf::internal::FromIntSize(this->int32_map_size());
  {
    ::std::unique_ptr<TestNestedMap_Int32MapEntry_DoNotUse> entry;
    for (::google::protobuf::Map< ::google::protobuf::int32, ::google::protobuf::int32 >::const_iterator
        it = this->int32_map().begin();
        it != this->int32_map().end(); ++it) {
      entry.reset(int32_map_.NewEntryWrapper(it->first, it->second));
      total_size += ::google::protobuf::internal::WireFormatLite::
          MessageSizeNoVirtual(*entry);
    }
  }

  // map<int64, int32> int64_map = 3;
  total_size += 1 *
      ::google::protobuf::internal::FromIntSize(this->int64_map_size());
  {
    ::std::unique_ptr<TestNestedMap_Int64MapEntry_DoNotUse> entry;
    for (::google::protobuf::Map< ::google::protobuf::int64, ::google::protobuf::int32 >::const_iterator
        it = this->int64_map().begin();
        it != this->int64_map().end(); ++it) {
      entry.reset(int64_map_.NewEntryWrapper(it->first, it->second));
      total_size += ::google::protobuf::internal::WireFormatLite::
          MessageSizeNoVirtual(*entry);
    }
  }

  // map<uint32, int32> uint32_map = 4;
  total_size += 1 *
      ::google::protobuf::internal::FromIntSize(this->uint32_map_size());
  {
    ::std::unique_ptr<TestNestedMap_Uint32MapEntry_DoNotUse> entry;
    for (::google::protobuf::Map< ::google::protobuf::uint32, ::google::protobuf::int32 >::const_iterator
        it = this->uint32_map().begin();
        it != this->uint32_map().end(); ++it) {
      entry.reset(uint32_map_.NewEntryWrapper(it->first, it->second));
      total_size += ::google::protobuf::internal::WireFormatLite::
          MessageSizeNoVirtual(*entry);
    }
  }

  // map<uint64, int32> uint64_map = 5;
  total_size += 1 *
      ::google::protobuf::internal::FromIntSize(this->uint64_map_size());
  {
    ::std::unique_ptr<TestNestedMap_Uint64MapEntry_DoNotUse> entry;
    for (::google::protobuf::Map< ::google::protobuf::uint64, ::google::protobuf::int32 >::const_iterator
        it = this->uint64_map().begin();
        it != this->uint64_map().end(); ++it) {
      entry.reset(uint64_map_.NewEntryWrapper(it->first, it->second));
      total_size += ::google::protobuf::internal::WireFormatLite::
          MessageSizeNoVirtual(*entry);
    }
  }

  // map<string, int32> string_map = 6;
  total_size += 1 *
      ::google::protobuf::internal::FromIntSize(this->string_map_size());
  {
    ::std::unique_ptr<TestNestedMap_StringMapEntry_DoNotUse> entry;
    for (::google::protobuf::Map< ::std::string, ::google::protobuf::int32 >::const_iterator
        it = this->string_map().begin();
        it != this->string_map().end(); ++it) {
      entry.reset(string_map_.NewEntryWrapper(it->first, it->second));
      total_size += ::google::protobuf::internal::WireFormatLite::
          MessageSizeNoVirtual(*entry);
    }
  }

  // map<string, .proto3.TestNestedMap> map_map = 7;
  total_size += 1 *
      ::google::protobuf::internal::FromIntSize(this->map_map_size());
  {
    ::std::unique_ptr<TestNestedMap_MapMapEntry_DoNotUse> entry;
    for (::google::protobuf::Map< ::std::string, ::proto3::TestNestedMap >::const_iterator
        it = this->map_map().begin();
        it != this->map_map().end(); ++it) {
      entry.reset(map_map_.NewEntryWrapper(it->first, it->second));
      total_size += ::google::protobuf::internal::WireFormatLite::
          MessageSizeNoVirtual(*entry);
    }
  }

  int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
  SetCachedSize(cached_size);
  return total_size;
}

void TestNestedMap::MergeFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_merge_from_start:proto3.TestNestedMap)
  GOOGLE_DCHECK_NE(&from, this);
  const TestNestedMap* source =
      ::google::protobuf::internal::DynamicCastToGenerated<const TestNestedMap>(
          &from);
  if (source == NULL) {
  // @@protoc_insertion_point(generalized_merge_from_cast_fail:proto3.TestNestedMap)
    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
  } else {
  // @@protoc_insertion_point(generalized_merge_from_cast_success:proto3.TestNestedMap)
    MergeFrom(*source);
  }
}

void TestNestedMap::MergeFrom(const TestNestedMap& from) {
// @@protoc_insertion_point(class_specific_merge_from_start:proto3.TestNestedMap)
  GOOGLE_DCHECK_NE(&from, this);
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  bool_map_.MergeFrom(from.bool_map_);
  int32_map_.MergeFrom(from.int32_map_);
  int64_map_.MergeFrom(from.int64_map_);
  uint32_map_.MergeFrom(from.uint32_map_);
  uint64_map_.MergeFrom(from.uint64_map_);
  string_map_.MergeFrom(from.string_map_);
  map_map_.MergeFrom(from.map_map_);
}

void TestNestedMap::CopyFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_copy_from_start:proto3.TestNestedMap)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

void TestNestedMap::CopyFrom(const TestNestedMap& from) {
// @@protoc_insertion_point(class_specific_copy_from_start:proto3.TestNestedMap)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

bool TestNestedMap::IsInitialized() const {
  return true;
}

void TestNestedMap::Swap(TestNestedMap* other) {
  if (other == this) return;
  InternalSwap(other);
}
void TestNestedMap::InternalSwap(TestNestedMap* other) {
  using std::swap;
  bool_map_.Swap(&other->bool_map_);
  int32_map_.Swap(&other->int32_map_);
  int64_map_.Swap(&other->int64_map_);
  uint32_map_.Swap(&other->uint32_map_);
  uint64_map_.Swap(&other->uint64_map_);
  string_map_.Swap(&other->string_map_);
  map_map_.Swap(&other->map_map_);
  _internal_metadata_.Swap(&other->_internal_metadata_);
}

::google::protobuf::Metadata TestNestedMap::GetMetadata() const {
  protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::file_level_metadata[kIndexInFileMessages];
}


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

void TestWrapper::InitAsDefaultInstance() {
  ::proto3::_TestWrapper_default_instance_._instance.get_mutable()->bool_value_ = const_cast< ::google::protobuf::BoolValue*>(
      ::google::protobuf::BoolValue::internal_default_instance());
  ::proto3::_TestWrapper_default_instance_._instance.get_mutable()->int32_value_ = const_cast< ::google::protobuf::Int32Value*>(
      ::google::protobuf::Int32Value::internal_default_instance());
  ::proto3::_TestWrapper_default_instance_._instance.get_mutable()->int64_value_ = const_cast< ::google::protobuf::Int64Value*>(
      ::google::protobuf::Int64Value::internal_default_instance());
  ::proto3::_TestWrapper_default_instance_._instance.get_mutable()->uint32_value_ = const_cast< ::google::protobuf::UInt32Value*>(
      ::google::protobuf::UInt32Value::internal_default_instance());
  ::proto3::_TestWrapper_default_instance_._instance.get_mutable()->uint64_value_ = const_cast< ::google::protobuf::UInt64Value*>(
      ::google::protobuf::UInt64Value::internal_default_instance());
  ::proto3::_TestWrapper_default_instance_._instance.get_mutable()->float_value_ = const_cast< ::google::protobuf::FloatValue*>(
      ::google::protobuf::FloatValue::internal_default_instance());
  ::proto3::_TestWrapper_default_instance_._instance.get_mutable()->double_value_ = const_cast< ::google::protobuf::DoubleValue*>(
      ::google::protobuf::DoubleValue::internal_default_instance());
  ::proto3::_TestWrapper_default_instance_._instance.get_mutable()->string_value_ = const_cast< ::google::protobuf::StringValue*>(
      ::google::protobuf::StringValue::internal_default_instance());
  ::proto3::_TestWrapper_default_instance_._instance.get_mutable()->bytes_value_ = const_cast< ::google::protobuf::BytesValue*>(
      ::google::protobuf::BytesValue::internal_default_instance());
}
void TestWrapper::clear_bool_value() {
  if (GetArenaNoVirtual() == NULL && bool_value_ != NULL) {
    delete bool_value_;
  }
  bool_value_ = NULL;
}
void TestWrapper::clear_int32_value() {
  if (GetArenaNoVirtual() == NULL && int32_value_ != NULL) {
    delete int32_value_;
  }
  int32_value_ = NULL;
}
void TestWrapper::clear_int64_value() {
  if (GetArenaNoVirtual() == NULL && int64_value_ != NULL) {
    delete int64_value_;
  }
  int64_value_ = NULL;
}
void TestWrapper::clear_uint32_value() {
  if (GetArenaNoVirtual() == NULL && uint32_value_ != NULL) {
    delete uint32_value_;
  }
  uint32_value_ = NULL;
}
void TestWrapper::clear_uint64_value() {
  if (GetArenaNoVirtual() == NULL && uint64_value_ != NULL) {
    delete uint64_value_;
  }
  uint64_value_ = NULL;
}
void TestWrapper::clear_float_value() {
  if (GetArenaNoVirtual() == NULL && float_value_ != NULL) {
    delete float_value_;
  }
  float_value_ = NULL;
}
void TestWrapper::clear_double_value() {
  if (GetArenaNoVirtual() == NULL && double_value_ != NULL) {
    delete double_value_;
  }
  double_value_ = NULL;
}
void TestWrapper::clear_string_value() {
  if (GetArenaNoVirtual() == NULL && string_value_ != NULL) {
    delete string_value_;
  }
  string_value_ = NULL;
}
void TestWrapper::clear_bytes_value() {
  if (GetArenaNoVirtual() == NULL && bytes_value_ != NULL) {
    delete bytes_value_;
  }
  bytes_value_ = NULL;
}
void TestWrapper::clear_repeated_bool_value() {
  repeated_bool_value_.Clear();
}
void TestWrapper::clear_repeated_int32_value() {
  repeated_int32_value_.Clear();
}
void TestWrapper::clear_repeated_int64_value() {
  repeated_int64_value_.Clear();
}
void TestWrapper::clear_repeated_uint32_value() {
  repeated_uint32_value_.Clear();
}
void TestWrapper::clear_repeated_uint64_value() {
  repeated_uint64_value_.Clear();
}
void TestWrapper::clear_repeated_float_value() {
  repeated_float_value_.Clear();
}
void TestWrapper::clear_repeated_double_value() {
  repeated_double_value_.Clear();
}
void TestWrapper::clear_repeated_string_value() {
  repeated_string_value_.Clear();
}
void TestWrapper::clear_repeated_bytes_value() {
  repeated_bytes_value_.Clear();
}
#if !defined(_MSC_VER) || _MSC_VER >= 1900
const int TestWrapper::kBoolValueFieldNumber;
const int TestWrapper::kInt32ValueFieldNumber;
const int TestWrapper::kInt64ValueFieldNumber;
const int TestWrapper::kUint32ValueFieldNumber;
const int TestWrapper::kUint64ValueFieldNumber;
const int TestWrapper::kFloatValueFieldNumber;
const int TestWrapper::kDoubleValueFieldNumber;
const int TestWrapper::kStringValueFieldNumber;
const int TestWrapper::kBytesValueFieldNumber;
const int TestWrapper::kRepeatedBoolValueFieldNumber;
const int TestWrapper::kRepeatedInt32ValueFieldNumber;
const int TestWrapper::kRepeatedInt64ValueFieldNumber;
const int TestWrapper::kRepeatedUint32ValueFieldNumber;
const int TestWrapper::kRepeatedUint64ValueFieldNumber;
const int TestWrapper::kRepeatedFloatValueFieldNumber;
const int TestWrapper::kRepeatedDoubleValueFieldNumber;
const int TestWrapper::kRepeatedStringValueFieldNumber;
const int TestWrapper::kRepeatedBytesValueFieldNumber;
#endif  // !defined(_MSC_VER) || _MSC_VER >= 1900

TestWrapper::TestWrapper()
  : ::google::protobuf::Message(), _internal_metadata_(NULL) {
  ::google::protobuf::internal::InitSCC(
      &protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::scc_info_TestWrapper.base);
  SharedCtor();
  // @@protoc_insertion_point(constructor:proto3.TestWrapper)
}
TestWrapper::TestWrapper(const TestWrapper& from)
  : ::google::protobuf::Message(),
      _internal_metadata_(NULL),
      repeated_bool_value_(from.repeated_bool_value_),
      repeated_int32_value_(from.repeated_int32_value_),
      repeated_int64_value_(from.repeated_int64_value_),
      repeated_uint32_value_(from.repeated_uint32_value_),
      repeated_uint64_value_(from.repeated_uint64_value_),
      repeated_float_value_(from.repeated_float_value_),
      repeated_double_value_(from.repeated_double_value_),
      repeated_string_value_(from.repeated_string_value_),
      repeated_bytes_value_(from.repeated_bytes_value_) {
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  if (from.has_bool_value()) {
    bool_value_ = new ::google::protobuf::BoolValue(*from.bool_value_);
  } else {
    bool_value_ = NULL;
  }
  if (from.has_int32_value()) {
    int32_value_ = new ::google::protobuf::Int32Value(*from.int32_value_);
  } else {
    int32_value_ = NULL;
  }
  if (from.has_int64_value()) {
    int64_value_ = new ::google::protobuf::Int64Value(*from.int64_value_);
  } else {
    int64_value_ = NULL;
  }
  if (from.has_uint32_value()) {
    uint32_value_ = new ::google::protobuf::UInt32Value(*from.uint32_value_);
  } else {
    uint32_value_ = NULL;
  }
  if (from.has_uint64_value()) {
    uint64_value_ = new ::google::protobuf::UInt64Value(*from.uint64_value_);
  } else {
    uint64_value_ = NULL;
  }
  if (from.has_float_value()) {
    float_value_ = new ::google::protobuf::FloatValue(*from.float_value_);
  } else {
    float_value_ = NULL;
  }
  if (from.has_double_value()) {
    double_value_ = new ::google::protobuf::DoubleValue(*from.double_value_);
  } else {
    double_value_ = NULL;
  }
  if (from.has_string_value()) {
    string_value_ = new ::google::protobuf::StringValue(*from.string_value_);
  } else {
    string_value_ = NULL;
  }
  if (from.has_bytes_value()) {
    bytes_value_ = new ::google::protobuf::BytesValue(*from.bytes_value_);
  } else {
    bytes_value_ = NULL;
  }
  // @@protoc_insertion_point(copy_constructor:proto3.TestWrapper)
}

void TestWrapper::SharedCtor() {
  ::memset(&bool_value_, 0, static_cast<size_t>(
      reinterpret_cast<char*>(&bytes_value_) -
      reinterpret_cast<char*>(&bool_value_)) + sizeof(bytes_value_));
}

TestWrapper::~TestWrapper() {
  // @@protoc_insertion_point(destructor:proto3.TestWrapper)
  SharedDtor();
}

void TestWrapper::SharedDtor() {
  if (this != internal_default_instance()) delete bool_value_;
  if (this != internal_default_instance()) delete int32_value_;
  if (this != internal_default_instance()) delete int64_value_;
  if (this != internal_default_instance()) delete uint32_value_;
  if (this != internal_default_instance()) delete uint64_value_;
  if (this != internal_default_instance()) delete float_value_;
  if (this != internal_default_instance()) delete double_value_;
  if (this != internal_default_instance()) delete string_value_;
  if (this != internal_default_instance()) delete bytes_value_;
}

void TestWrapper::SetCachedSize(int size) const {
  _cached_size_.Set(size);
}
const ::google::protobuf::Descriptor* TestWrapper::descriptor() {
  ::protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
}

const TestWrapper& TestWrapper::default_instance() {
  ::google::protobuf::internal::InitSCC(&protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::scc_info_TestWrapper.base);
  return *internal_default_instance();
}


void TestWrapper::Clear() {
// @@protoc_insertion_point(message_clear_start:proto3.TestWrapper)
  ::google::protobuf::uint32 cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  repeated_bool_value_.Clear();
  repeated_int32_value_.Clear();
  repeated_int64_value_.Clear();
  repeated_uint32_value_.Clear();
  repeated_uint64_value_.Clear();
  repeated_float_value_.Clear();
  repeated_double_value_.Clear();
  repeated_string_value_.Clear();
  repeated_bytes_value_.Clear();
  if (GetArenaNoVirtual() == NULL && bool_value_ != NULL) {
    delete bool_value_;
  }
  bool_value_ = NULL;
  if (GetArenaNoVirtual() == NULL && int32_value_ != NULL) {
    delete int32_value_;
  }
  int32_value_ = NULL;
  if (GetArenaNoVirtual() == NULL && int64_value_ != NULL) {
    delete int64_value_;
  }
  int64_value_ = NULL;
  if (GetArenaNoVirtual() == NULL && uint32_value_ != NULL) {
    delete uint32_value_;
  }
  uint32_value_ = NULL;
  if (GetArenaNoVirtual() == NULL && uint64_value_ != NULL) {
    delete uint64_value_;
  }
  uint64_value_ = NULL;
  if (GetArenaNoVirtual() == NULL && float_value_ != NULL) {
    delete float_value_;
  }
  float_value_ = NULL;
  if (GetArenaNoVirtual() == NULL && double_value_ != NULL) {
    delete double_value_;
  }
  double_value_ = NULL;
  if (GetArenaNoVirtual() == NULL && string_value_ != NULL) {
    delete string_value_;
  }
  string_value_ = NULL;
  if (GetArenaNoVirtual() == NULL && bytes_value_ != NULL) {
    delete bytes_value_;
  }
  bytes_value_ = NULL;
  _internal_metadata_.Clear();
}

bool TestWrapper::MergePartialFromCodedStream(
    ::google::protobuf::io::CodedInputStream* input) {
#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
  ::google::protobuf::uint32 tag;
  // @@protoc_insertion_point(parse_start:proto3.TestWrapper)
  for (;;) {
    ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(16383u);
    tag = p.first;
    if (!p.second) goto handle_unusual;
    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
      // .google.protobuf.BoolValue bool_value = 1;
      case 1: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(10u /* 10 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
               input, mutable_bool_value()));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // .google.protobuf.Int32Value int32_value = 2;
      case 2: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(18u /* 18 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
               input, mutable_int32_value()));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // .google.protobuf.Int64Value int64_value = 3;
      case 3: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(26u /* 26 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
               input, mutable_int64_value()));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // .google.protobuf.UInt32Value uint32_value = 4;
      case 4: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(34u /* 34 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
               input, mutable_uint32_value()));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // .google.protobuf.UInt64Value uint64_value = 5;
      case 5: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(42u /* 42 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
               input, mutable_uint64_value()));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // .google.protobuf.FloatValue float_value = 6;
      case 6: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(50u /* 50 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
               input, mutable_float_value()));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // .google.protobuf.DoubleValue double_value = 7;
      case 7: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(58u /* 58 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
               input, mutable_double_value()));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // .google.protobuf.StringValue string_value = 8;
      case 8: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(66u /* 66 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
               input, mutable_string_value()));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // .google.protobuf.BytesValue bytes_value = 9;
      case 9: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(74u /* 74 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
               input, mutable_bytes_value()));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated .google.protobuf.BoolValue repeated_bool_value = 11;
      case 11: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(90u /* 90 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
                input, add_repeated_bool_value()));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated .google.protobuf.Int32Value repeated_int32_value = 12;
      case 12: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(98u /* 98 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
                input, add_repeated_int32_value()));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated .google.protobuf.Int64Value repeated_int64_value = 13;
      case 13: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(106u /* 106 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
                input, add_repeated_int64_value()));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated .google.protobuf.UInt32Value repeated_uint32_value = 14;
      case 14: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(114u /* 114 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
                input, add_repeated_uint32_value()));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated .google.protobuf.UInt64Value repeated_uint64_value = 15;
      case 15: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(122u /* 122 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
                input, add_repeated_uint64_value()));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated .google.protobuf.FloatValue repeated_float_value = 16;
      case 16: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(130u /* 130 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
                input, add_repeated_float_value()));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated .google.protobuf.DoubleValue repeated_double_value = 17;
      case 17: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(138u /* 138 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
                input, add_repeated_double_value()));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated .google.protobuf.StringValue repeated_string_value = 18;
      case 18: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(146u /* 146 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
                input, add_repeated_string_value()));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated .google.protobuf.BytesValue repeated_bytes_value = 19;
      case 19: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(154u /* 154 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
                input, add_repeated_bytes_value()));
        } else {
          goto handle_unusual;
        }
        break;
      }

      default: {
      handle_unusual:
        if (tag == 0) {
          goto success;
        }
        DO_(::google::protobuf::internal::WireFormat::SkipField(
              input, tag, _internal_metadata_.mutable_unknown_fields()));
        break;
      }
    }
  }
success:
  // @@protoc_insertion_point(parse_success:proto3.TestWrapper)
  return true;
failure:
  // @@protoc_insertion_point(parse_failure:proto3.TestWrapper)
  return false;
#undef DO_
}

void TestWrapper::SerializeWithCachedSizes(
    ::google::protobuf::io::CodedOutputStream* output) const {
  // @@protoc_insertion_point(serialize_start:proto3.TestWrapper)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  // .google.protobuf.BoolValue bool_value = 1;
  if (this->has_bool_value()) {
    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
      1, this->_internal_bool_value(), output);
  }

  // .google.protobuf.Int32Value int32_value = 2;
  if (this->has_int32_value()) {
    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
      2, this->_internal_int32_value(), output);
  }

  // .google.protobuf.Int64Value int64_value = 3;
  if (this->has_int64_value()) {
    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
      3, this->_internal_int64_value(), output);
  }

  // .google.protobuf.UInt32Value uint32_value = 4;
  if (this->has_uint32_value()) {
    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
      4, this->_internal_uint32_value(), output);
  }

  // .google.protobuf.UInt64Value uint64_value = 5;
  if (this->has_uint64_value()) {
    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
      5, this->_internal_uint64_value(), output);
  }

  // .google.protobuf.FloatValue float_value = 6;
  if (this->has_float_value()) {
    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
      6, this->_internal_float_value(), output);
  }

  // .google.protobuf.DoubleValue double_value = 7;
  if (this->has_double_value()) {
    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
      7, this->_internal_double_value(), output);
  }

  // .google.protobuf.StringValue string_value = 8;
  if (this->has_string_value()) {
    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
      8, this->_internal_string_value(), output);
  }

  // .google.protobuf.BytesValue bytes_value = 9;
  if (this->has_bytes_value()) {
    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
      9, this->_internal_bytes_value(), output);
  }

  // repeated .google.protobuf.BoolValue repeated_bool_value = 11;
  for (unsigned int i = 0,
      n = static_cast<unsigned int>(this->repeated_bool_value_size()); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
      11,
      this->repeated_bool_value(static_cast<int>(i)),
      output);
  }

  // repeated .google.protobuf.Int32Value repeated_int32_value = 12;
  for (unsigned int i = 0,
      n = static_cast<unsigned int>(this->repeated_int32_value_size()); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
      12,
      this->repeated_int32_value(static_cast<int>(i)),
      output);
  }

  // repeated .google.protobuf.Int64Value repeated_int64_value = 13;
  for (unsigned int i = 0,
      n = static_cast<unsigned int>(this->repeated_int64_value_size()); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
      13,
      this->repeated_int64_value(static_cast<int>(i)),
      output);
  }

  // repeated .google.protobuf.UInt32Value repeated_uint32_value = 14;
  for (unsigned int i = 0,
      n = static_cast<unsigned int>(this->repeated_uint32_value_size()); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
      14,
      this->repeated_uint32_value(static_cast<int>(i)),
      output);
  }

  // repeated .google.protobuf.UInt64Value repeated_uint64_value = 15;
  for (unsigned int i = 0,
      n = static_cast<unsigned int>(this->repeated_uint64_value_size()); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
      15,
      this->repeated_uint64_value(static_cast<int>(i)),
      output);
  }

  // repeated .google.protobuf.FloatValue repeated_float_value = 16;
  for (unsigned int i = 0,
      n = static_cast<unsigned int>(this->repeated_float_value_size()); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
      16,
      this->repeated_float_value(static_cast<int>(i)),
      output);
  }

  // repeated .google.protobuf.DoubleValue repeated_double_value = 17;
  for (unsigned int i = 0,
      n = static_cast<unsigned int>(this->repeated_double_value_size()); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
      17,
      this->repeated_double_value(static_cast<int>(i)),
      output);
  }

  // repeated .google.protobuf.StringValue repeated_string_value = 18;
  for (unsigned int i = 0,
      n = static_cast<unsigned int>(this->repeated_string_value_size()); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
      18,
      this->repeated_string_value(static_cast<int>(i)),
      output);
  }

  // repeated .google.protobuf.BytesValue repeated_bytes_value = 19;
  for (unsigned int i = 0,
      n = static_cast<unsigned int>(this->repeated_bytes_value_size()); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
      19,
      this->repeated_bytes_value(static_cast<int>(i)),
      output);
  }

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), output);
  }
  // @@protoc_insertion_point(serialize_end:proto3.TestWrapper)
}

::google::protobuf::uint8* TestWrapper::InternalSerializeWithCachedSizesToArray(
    bool deterministic, ::google::protobuf::uint8* target) const {
  (void)deterministic; // Unused
  // @@protoc_insertion_point(serialize_to_array_start:proto3.TestWrapper)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  // .google.protobuf.BoolValue bool_value = 1;
  if (this->has_bool_value()) {
    target = ::google::protobuf::internal::WireFormatLite::
      InternalWriteMessageToArray(
        1, this->_internal_bool_value(), deterministic, target);
  }

  // .google.protobuf.Int32Value int32_value = 2;
  if (this->has_int32_value()) {
    target = ::google::protobuf::internal::WireFormatLite::
      InternalWriteMessageToArray(
        2, this->_internal_int32_value(), deterministic, target);
  }

  // .google.protobuf.Int64Value int64_value = 3;
  if (this->has_int64_value()) {
    target = ::google::protobuf::internal::WireFormatLite::
      InternalWriteMessageToArray(
        3, this->_internal_int64_value(), deterministic, target);
  }

  // .google.protobuf.UInt32Value uint32_value = 4;
  if (this->has_uint32_value()) {
    target = ::google::protobuf::internal::WireFormatLite::
      InternalWriteMessageToArray(
        4, this->_internal_uint32_value(), deterministic, target);
  }

  // .google.protobuf.UInt64Value uint64_value = 5;
  if (this->has_uint64_value()) {
    target = ::google::protobuf::internal::WireFormatLite::
      InternalWriteMessageToArray(
        5, this->_internal_uint64_value(), deterministic, target);
  }

  // .google.protobuf.FloatValue float_value = 6;
  if (this->has_float_value()) {
    target = ::google::protobuf::internal::WireFormatLite::
      InternalWriteMessageToArray(
        6, this->_internal_float_value(), deterministic, target);
  }

  // .google.protobuf.DoubleValue double_value = 7;
  if (this->has_double_value()) {
    target = ::google::protobuf::internal::WireFormatLite::
      InternalWriteMessageToArray(
        7, this->_internal_double_value(), deterministic, target);
  }

  // .google.protobuf.StringValue string_value = 8;
  if (this->has_string_value()) {
    target = ::google::protobuf::internal::WireFormatLite::
      InternalWriteMessageToArray(
        8, this->_internal_string_value(), deterministic, target);
  }

  // .google.protobuf.BytesValue bytes_value = 9;
  if (this->has_bytes_value()) {
    target = ::google::protobuf::internal::WireFormatLite::
      InternalWriteMessageToArray(
        9, this->_internal_bytes_value(), deterministic, target);
  }

  // repeated .google.protobuf.BoolValue repeated_bool_value = 11;
  for (unsigned int i = 0,
      n = static_cast<unsigned int>(this->repeated_bool_value_size()); i < n; i++) {
    target = ::google::protobuf::internal::WireFormatLite::
      InternalWriteMessageToArray(
        11, this->repeated_bool_value(static_cast<int>(i)), deterministic, target);
  }

  // repeated .google.protobuf.Int32Value repeated_int32_value = 12;
  for (unsigned int i = 0,
      n = static_cast<unsigned int>(this->repeated_int32_value_size()); i < n; i++) {
    target = ::google::protobuf::internal::WireFormatLite::
      InternalWriteMessageToArray(
        12, this->repeated_int32_value(static_cast<int>(i)), deterministic, target);
  }

  // repeated .google.protobuf.Int64Value repeated_int64_value = 13;
  for (unsigned int i = 0,
      n = static_cast<unsigned int>(this->repeated_int64_value_size()); i < n; i++) {
    target = ::google::protobuf::internal::WireFormatLite::
      InternalWriteMessageToArray(
        13, this->repeated_int64_value(static_cast<int>(i)), deterministic, target);
  }

  // repeated .google.protobuf.UInt32Value repeated_uint32_value = 14;
  for (unsigned int i = 0,
      n = static_cast<unsigned int>(this->repeated_uint32_value_size()); i < n; i++) {
    target = ::google::protobuf::internal::WireFormatLite::
      InternalWriteMessageToArray(
        14, this->repeated_uint32_value(static_cast<int>(i)), deterministic, target);
  }

  // repeated .google.protobuf.UInt64Value repeated_uint64_value = 15;
  for (unsigned int i = 0,
      n = static_cast<unsigned int>(this->repeated_uint64_value_size()); i < n; i++) {
    target = ::google::protobuf::internal::WireFormatLite::
      InternalWriteMessageToArray(
        15, this->repeated_uint64_value(static_cast<int>(i)), deterministic, target);
  }

  // repeated .google.protobuf.FloatValue repeated_float_value = 16;
  for (unsigned int i = 0,
      n = static_cast<unsigned int>(this->repeated_float_value_size()); i < n; i++) {
    target = ::google::protobuf::internal::WireFormatLite::
      InternalWriteMessageToArray(
        16, this->repeated_float_value(static_cast<int>(i)), deterministic, target);
  }

  // repeated .google.protobuf.DoubleValue repeated_double_value = 17;
  for (unsigned int i = 0,
      n = static_cast<unsigned int>(this->repeated_double_value_size()); i < n; i++) {
    target = ::google::protobuf::internal::WireFormatLite::
      InternalWriteMessageToArray(
        17, this->repeated_double_value(static_cast<int>(i)), deterministic, target);
  }

  // repeated .google.protobuf.StringValue repeated_string_value = 18;
  for (unsigned int i = 0,
      n = static_cast<unsigned int>(this->repeated_string_value_size()); i < n; i++) {
    target = ::google::protobuf::internal::WireFormatLite::
      InternalWriteMessageToArray(
        18, this->repeated_string_value(static_cast<int>(i)), deterministic, target);
  }

  // repeated .google.protobuf.BytesValue repeated_bytes_value = 19;
  for (unsigned int i = 0,
      n = static_cast<unsigned int>(this->repeated_bytes_value_size()); i < n; i++) {
    target = ::google::protobuf::internal::WireFormatLite::
      InternalWriteMessageToArray(
        19, this->repeated_bytes_value(static_cast<int>(i)), deterministic, target);
  }

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), target);
  }
  // @@protoc_insertion_point(serialize_to_array_end:proto3.TestWrapper)
  return target;
}

size_t TestWrapper::ByteSizeLong() const {
// @@protoc_insertion_point(message_byte_size_start:proto3.TestWrapper)
  size_t total_size = 0;

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    total_size +=
      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()));
  }
  // repeated .google.protobuf.BoolValue repeated_bool_value = 11;
  {
    unsigned int count = static_cast<unsigned int>(this->repeated_bool_value_size());
    total_size += 1UL * count;
    for (unsigned int i = 0; i < count; i++) {
      total_size +=
        ::google::protobuf::internal::WireFormatLite::MessageSize(
          this->repeated_bool_value(static_cast<int>(i)));
    }
  }

  // repeated .google.protobuf.Int32Value repeated_int32_value = 12;
  {
    unsigned int count = static_cast<unsigned int>(this->repeated_int32_value_size());
    total_size += 1UL * count;
    for (unsigned int i = 0; i < count; i++) {
      total_size +=
        ::google::protobuf::internal::WireFormatLite::MessageSize(
          this->repeated_int32_value(static_cast<int>(i)));
    }
  }

  // repeated .google.protobuf.Int64Value repeated_int64_value = 13;
  {
    unsigned int count = static_cast<unsigned int>(this->repeated_int64_value_size());
    total_size += 1UL * count;
    for (unsigned int i = 0; i < count; i++) {
      total_size +=
        ::google::protobuf::internal::WireFormatLite::MessageSize(
          this->repeated_int64_value(static_cast<int>(i)));
    }
  }

  // repeated .google.protobuf.UInt32Value repeated_uint32_value = 14;
  {
    unsigned int count = static_cast<unsigned int>(this->repeated_uint32_value_size());
    total_size += 1UL * count;
    for (unsigned int i = 0; i < count; i++) {
      total_size +=
        ::google::protobuf::internal::WireFormatLite::MessageSize(
          this->repeated_uint32_value(static_cast<int>(i)));
    }
  }

  // repeated .google.protobuf.UInt64Value repeated_uint64_value = 15;
  {
    unsigned int count = static_cast<unsigned int>(this->repeated_uint64_value_size());
    total_size += 1UL * count;
    for (unsigned int i = 0; i < count; i++) {
      total_size +=
        ::google::protobuf::internal::WireFormatLite::MessageSize(
          this->repeated_uint64_value(static_cast<int>(i)));
    }
  }

  // repeated .google.protobuf.FloatValue repeated_float_value = 16;
  {
    unsigned int count = static_cast<unsigned int>(this->repeated_float_value_size());
    total_size += 2UL * count;
    for (unsigned int i = 0; i < count; i++) {
      total_size +=
        ::google::protobuf::internal::WireFormatLite::MessageSize(
          this->repeated_float_value(static_cast<int>(i)));
    }
  }

  // repeated .google.protobuf.DoubleValue repeated_double_value = 17;
  {
    unsigned int count = static_cast<unsigned int>(this->repeated_double_value_size());
    total_size += 2UL * count;
    for (unsigned int i = 0; i < count; i++) {
      total_size +=
        ::google::protobuf::internal::WireFormatLite::MessageSize(
          this->repeated_double_value(static_cast<int>(i)));
    }
  }

  // repeated .google.protobuf.StringValue repeated_string_value = 18;
  {
    unsigned int count = static_cast<unsigned int>(this->repeated_string_value_size());
    total_size += 2UL * count;
    for (unsigned int i = 0; i < count; i++) {
      total_size +=
        ::google::protobuf::internal::WireFormatLite::MessageSize(
          this->repeated_string_value(static_cast<int>(i)));
    }
  }

  // repeated .google.protobuf.BytesValue repeated_bytes_value = 19;
  {
    unsigned int count = static_cast<unsigned int>(this->repeated_bytes_value_size());
    total_size += 2UL * count;
    for (unsigned int i = 0; i < count; i++) {
      total_size +=
        ::google::protobuf::internal::WireFormatLite::MessageSize(
          this->repeated_bytes_value(static_cast<int>(i)));
    }
  }

  // .google.protobuf.BoolValue bool_value = 1;
  if (this->has_bool_value()) {
    total_size += 1 +
      ::google::protobuf::internal::WireFormatLite::MessageSize(
        *bool_value_);
  }

  // .google.protobuf.Int32Value int32_value = 2;
  if (this->has_int32_value()) {
    total_size += 1 +
      ::google::protobuf::internal::WireFormatLite::MessageSize(
        *int32_value_);
  }

  // .google.protobuf.Int64Value int64_value = 3;
  if (this->has_int64_value()) {
    total_size += 1 +
      ::google::protobuf::internal::WireFormatLite::MessageSize(
        *int64_value_);
  }

  // .google.protobuf.UInt32Value uint32_value = 4;
  if (this->has_uint32_value()) {
    total_size += 1 +
      ::google::protobuf::internal::WireFormatLite::MessageSize(
        *uint32_value_);
  }

  // .google.protobuf.UInt64Value uint64_value = 5;
  if (this->has_uint64_value()) {
    total_size += 1 +
      ::google::protobuf::internal::WireFormatLite::MessageSize(
        *uint64_value_);
  }

  // .google.protobuf.FloatValue float_value = 6;
  if (this->has_float_value()) {
    total_size += 1 +
      ::google::protobuf::internal::WireFormatLite::MessageSize(
        *float_value_);
  }

  // .google.protobuf.DoubleValue double_value = 7;
  if (this->has_double_value()) {
    total_size += 1 +
      ::google::protobuf::internal::WireFormatLite::MessageSize(
        *double_value_);
  }

  // .google.protobuf.StringValue string_value = 8;
  if (this->has_string_value()) {
    total_size += 1 +
      ::google::protobuf::internal::WireFormatLite::MessageSize(
        *string_value_);
  }

  // .google.protobuf.BytesValue bytes_value = 9;
  if (this->has_bytes_value()) {
    total_size += 1 +
      ::google::protobuf::internal::WireFormatLite::MessageSize(
        *bytes_value_);
  }

  int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
  SetCachedSize(cached_size);
  return total_size;
}

void TestWrapper::MergeFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_merge_from_start:proto3.TestWrapper)
  GOOGLE_DCHECK_NE(&from, this);
  const TestWrapper* source =
      ::google::protobuf::internal::DynamicCastToGenerated<const TestWrapper>(
          &from);
  if (source == NULL) {
  // @@protoc_insertion_point(generalized_merge_from_cast_fail:proto3.TestWrapper)
    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
  } else {
  // @@protoc_insertion_point(generalized_merge_from_cast_success:proto3.TestWrapper)
    MergeFrom(*source);
  }
}

void TestWrapper::MergeFrom(const TestWrapper& from) {
// @@protoc_insertion_point(class_specific_merge_from_start:proto3.TestWrapper)
  GOOGLE_DCHECK_NE(&from, this);
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  repeated_bool_value_.MergeFrom(from.repeated_bool_value_);
  repeated_int32_value_.MergeFrom(from.repeated_int32_value_);
  repeated_int64_value_.MergeFrom(from.repeated_int64_value_);
  repeated_uint32_value_.MergeFrom(from.repeated_uint32_value_);
  repeated_uint64_value_.MergeFrom(from.repeated_uint64_value_);
  repeated_float_value_.MergeFrom(from.repeated_float_value_);
  repeated_double_value_.MergeFrom(from.repeated_double_value_);
  repeated_string_value_.MergeFrom(from.repeated_string_value_);
  repeated_bytes_value_.MergeFrom(from.repeated_bytes_value_);
  if (from.has_bool_value()) {
    mutable_bool_value()->::google::protobuf::BoolValue::MergeFrom(from.bool_value());
  }
  if (from.has_int32_value()) {
    mutable_int32_value()->::google::protobuf::Int32Value::MergeFrom(from.int32_value());
  }
  if (from.has_int64_value()) {
    mutable_int64_value()->::google::protobuf::Int64Value::MergeFrom(from.int64_value());
  }
  if (from.has_uint32_value()) {
    mutable_uint32_value()->::google::protobuf::UInt32Value::MergeFrom(from.uint32_value());
  }
  if (from.has_uint64_value()) {
    mutable_uint64_value()->::google::protobuf::UInt64Value::MergeFrom(from.uint64_value());
  }
  if (from.has_float_value()) {
    mutable_float_value()->::google::protobuf::FloatValue::MergeFrom(from.float_value());
  }
  if (from.has_double_value()) {
    mutable_double_value()->::google::protobuf::DoubleValue::MergeFrom(from.double_value());
  }
  if (from.has_string_value()) {
    mutable_string_value()->::google::protobuf::StringValue::MergeFrom(from.string_value());
  }
  if (from.has_bytes_value()) {
    mutable_bytes_value()->::google::protobuf::BytesValue::MergeFrom(from.bytes_value());
  }
}

void TestWrapper::CopyFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_copy_from_start:proto3.TestWrapper)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

void TestWrapper::CopyFrom(const TestWrapper& from) {
// @@protoc_insertion_point(class_specific_copy_from_start:proto3.TestWrapper)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

bool TestWrapper::IsInitialized() const {
  return true;
}

void TestWrapper::Swap(TestWrapper* other) {
  if (other == this) return;
  InternalSwap(other);
}
void TestWrapper::InternalSwap(TestWrapper* other) {
  using std::swap;
  CastToBase(&repeated_bool_value_)->InternalSwap(CastToBase(&other->repeated_bool_value_));
  CastToBase(&repeated_int32_value_)->InternalSwap(CastToBase(&other->repeated_int32_value_));
  CastToBase(&repeated_int64_value_)->InternalSwap(CastToBase(&other->repeated_int64_value_));
  CastToBase(&repeated_uint32_value_)->InternalSwap(CastToBase(&other->repeated_uint32_value_));
  CastToBase(&repeated_uint64_value_)->InternalSwap(CastToBase(&other->repeated_uint64_value_));
  CastToBase(&repeated_float_value_)->InternalSwap(CastToBase(&other->repeated_float_value_));
  CastToBase(&repeated_double_value_)->InternalSwap(CastToBase(&other->repeated_double_value_));
  CastToBase(&repeated_string_value_)->InternalSwap(CastToBase(&other->repeated_string_value_));
  CastToBase(&repeated_bytes_value_)->InternalSwap(CastToBase(&other->repeated_bytes_value_));
  swap(bool_value_, other->bool_value_);
  swap(int32_value_, other->int32_value_);
  swap(int64_value_, other->int64_value_);
  swap(uint32_value_, other->uint32_value_);
  swap(uint64_value_, other->uint64_value_);
  swap(float_value_, other->float_value_);
  swap(double_value_, other->double_value_);
  swap(string_value_, other->string_value_);
  swap(bytes_value_, other->bytes_value_);
  _internal_metadata_.Swap(&other->_internal_metadata_);
}

::google::protobuf::Metadata TestWrapper::GetMetadata() const {
  protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::file_level_metadata[kIndexInFileMessages];
}


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

void TestTimestamp::InitAsDefaultInstance() {
  ::proto3::_TestTimestamp_default_instance_._instance.get_mutable()->value_ = const_cast< ::google::protobuf::Timestamp*>(
      ::google::protobuf::Timestamp::internal_default_instance());
}
void TestTimestamp::clear_value() {
  if (GetArenaNoVirtual() == NULL && value_ != NULL) {
    delete value_;
  }
  value_ = NULL;
}
void TestTimestamp::clear_repeated_value() {
  repeated_value_.Clear();
}
#if !defined(_MSC_VER) || _MSC_VER >= 1900
const int TestTimestamp::kValueFieldNumber;
const int TestTimestamp::kRepeatedValueFieldNumber;
#endif  // !defined(_MSC_VER) || _MSC_VER >= 1900

TestTimestamp::TestTimestamp()
  : ::google::protobuf::Message(), _internal_metadata_(NULL) {
  ::google::protobuf::internal::InitSCC(
      &protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::scc_info_TestTimestamp.base);
  SharedCtor();
  // @@protoc_insertion_point(constructor:proto3.TestTimestamp)
}
TestTimestamp::TestTimestamp(const TestTimestamp& from)
  : ::google::protobuf::Message(),
      _internal_metadata_(NULL),
      repeated_value_(from.repeated_value_) {
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  if (from.has_value()) {
    value_ = new ::google::protobuf::Timestamp(*from.value_);
  } else {
    value_ = NULL;
  }
  // @@protoc_insertion_point(copy_constructor:proto3.TestTimestamp)
}

void TestTimestamp::SharedCtor() {
  value_ = NULL;
}

TestTimestamp::~TestTimestamp() {
  // @@protoc_insertion_point(destructor:proto3.TestTimestamp)
  SharedDtor();
}

void TestTimestamp::SharedDtor() {
  if (this != internal_default_instance()) delete value_;
}

void TestTimestamp::SetCachedSize(int size) const {
  _cached_size_.Set(size);
}
const ::google::protobuf::Descriptor* TestTimestamp::descriptor() {
  ::protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
}

const TestTimestamp& TestTimestamp::default_instance() {
  ::google::protobuf::internal::InitSCC(&protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::scc_info_TestTimestamp.base);
  return *internal_default_instance();
}


void TestTimestamp::Clear() {
// @@protoc_insertion_point(message_clear_start:proto3.TestTimestamp)
  ::google::protobuf::uint32 cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  repeated_value_.Clear();
  if (GetArenaNoVirtual() == NULL && value_ != NULL) {
    delete value_;
  }
  value_ = NULL;
  _internal_metadata_.Clear();
}

bool TestTimestamp::MergePartialFromCodedStream(
    ::google::protobuf::io::CodedInputStream* input) {
#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
  ::google::protobuf::uint32 tag;
  // @@protoc_insertion_point(parse_start:proto3.TestTimestamp)
  for (;;) {
    ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
    tag = p.first;
    if (!p.second) goto handle_unusual;
    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
      // .google.protobuf.Timestamp value = 1;
      case 1: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(10u /* 10 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
               input, mutable_value()));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated .google.protobuf.Timestamp repeated_value = 2;
      case 2: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(18u /* 18 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
                input, add_repeated_value()));
        } else {
          goto handle_unusual;
        }
        break;
      }

      default: {
      handle_unusual:
        if (tag == 0) {
          goto success;
        }
        DO_(::google::protobuf::internal::WireFormat::SkipField(
              input, tag, _internal_metadata_.mutable_unknown_fields()));
        break;
      }
    }
  }
success:
  // @@protoc_insertion_point(parse_success:proto3.TestTimestamp)
  return true;
failure:
  // @@protoc_insertion_point(parse_failure:proto3.TestTimestamp)
  return false;
#undef DO_
}

void TestTimestamp::SerializeWithCachedSizes(
    ::google::protobuf::io::CodedOutputStream* output) const {
  // @@protoc_insertion_point(serialize_start:proto3.TestTimestamp)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  // .google.protobuf.Timestamp value = 1;
  if (this->has_value()) {
    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
      1, this->_internal_value(), output);
  }

  // repeated .google.protobuf.Timestamp repeated_value = 2;
  for (unsigned int i = 0,
      n = static_cast<unsigned int>(this->repeated_value_size()); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
      2,
      this->repeated_value(static_cast<int>(i)),
      output);
  }

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), output);
  }
  // @@protoc_insertion_point(serialize_end:proto3.TestTimestamp)
}

::google::protobuf::uint8* TestTimestamp::InternalSerializeWithCachedSizesToArray(
    bool deterministic, ::google::protobuf::uint8* target) const {
  (void)deterministic; // Unused
  // @@protoc_insertion_point(serialize_to_array_start:proto3.TestTimestamp)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  // .google.protobuf.Timestamp value = 1;
  if (this->has_value()) {
    target = ::google::protobuf::internal::WireFormatLite::
      InternalWriteMessageToArray(
        1, this->_internal_value(), deterministic, target);
  }

  // repeated .google.protobuf.Timestamp repeated_value = 2;
  for (unsigned int i = 0,
      n = static_cast<unsigned int>(this->repeated_value_size()); i < n; i++) {
    target = ::google::protobuf::internal::WireFormatLite::
      InternalWriteMessageToArray(
        2, this->repeated_value(static_cast<int>(i)), deterministic, target);
  }

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), target);
  }
  // @@protoc_insertion_point(serialize_to_array_end:proto3.TestTimestamp)
  return target;
}

size_t TestTimestamp::ByteSizeLong() const {
// @@protoc_insertion_point(message_byte_size_start:proto3.TestTimestamp)
  size_t total_size = 0;

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    total_size +=
      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()));
  }
  // repeated .google.protobuf.Timestamp repeated_value = 2;
  {
    unsigned int count = static_cast<unsigned int>(this->repeated_value_size());
    total_size += 1UL * count;
    for (unsigned int i = 0; i < count; i++) {
      total_size +=
        ::google::protobuf::internal::WireFormatLite::MessageSize(
          this->repeated_value(static_cast<int>(i)));
    }
  }

  // .google.protobuf.Timestamp value = 1;
  if (this->has_value()) {
    total_size += 1 +
      ::google::protobuf::internal::WireFormatLite::MessageSize(
        *value_);
  }

  int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
  SetCachedSize(cached_size);
  return total_size;
}

void TestTimestamp::MergeFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_merge_from_start:proto3.TestTimestamp)
  GOOGLE_DCHECK_NE(&from, this);
  const TestTimestamp* source =
      ::google::protobuf::internal::DynamicCastToGenerated<const TestTimestamp>(
          &from);
  if (source == NULL) {
  // @@protoc_insertion_point(generalized_merge_from_cast_fail:proto3.TestTimestamp)
    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
  } else {
  // @@protoc_insertion_point(generalized_merge_from_cast_success:proto3.TestTimestamp)
    MergeFrom(*source);
  }
}

void TestTimestamp::MergeFrom(const TestTimestamp& from) {
// @@protoc_insertion_point(class_specific_merge_from_start:proto3.TestTimestamp)
  GOOGLE_DCHECK_NE(&from, this);
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  repeated_value_.MergeFrom(from.repeated_value_);
  if (from.has_value()) {
    mutable_value()->::google::protobuf::Timestamp::MergeFrom(from.value());
  }
}

void TestTimestamp::CopyFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_copy_from_start:proto3.TestTimestamp)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

void TestTimestamp::CopyFrom(const TestTimestamp& from) {
// @@protoc_insertion_point(class_specific_copy_from_start:proto3.TestTimestamp)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

bool TestTimestamp::IsInitialized() const {
  return true;
}

void TestTimestamp::Swap(TestTimestamp* other) {
  if (other == this) return;
  InternalSwap(other);
}
void TestTimestamp::InternalSwap(TestTimestamp* other) {
  using std::swap;
  CastToBase(&repeated_value_)->InternalSwap(CastToBase(&other->repeated_value_));
  swap(value_, other->value_);
  _internal_metadata_.Swap(&other->_internal_metadata_);
}

::google::protobuf::Metadata TestTimestamp::GetMetadata() const {
  protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::file_level_metadata[kIndexInFileMessages];
}


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

void TestDuration::InitAsDefaultInstance() {
  ::proto3::_TestDuration_default_instance_._instance.get_mutable()->value_ = const_cast< ::google::protobuf::Duration*>(
      ::google::protobuf::Duration::internal_default_instance());
}
void TestDuration::clear_value() {
  if (GetArenaNoVirtual() == NULL && value_ != NULL) {
    delete value_;
  }
  value_ = NULL;
}
void TestDuration::clear_repeated_value() {
  repeated_value_.Clear();
}
#if !defined(_MSC_VER) || _MSC_VER >= 1900
const int TestDuration::kValueFieldNumber;
const int TestDuration::kRepeatedValueFieldNumber;
#endif  // !defined(_MSC_VER) || _MSC_VER >= 1900

TestDuration::TestDuration()
  : ::google::protobuf::Message(), _internal_metadata_(NULL) {
  ::google::protobuf::internal::InitSCC(
      &protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::scc_info_TestDuration.base);
  SharedCtor();
  // @@protoc_insertion_point(constructor:proto3.TestDuration)
}
TestDuration::TestDuration(const TestDuration& from)
  : ::google::protobuf::Message(),
      _internal_metadata_(NULL),
      repeated_value_(from.repeated_value_) {
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  if (from.has_value()) {
    value_ = new ::google::protobuf::Duration(*from.value_);
  } else {
    value_ = NULL;
  }
  // @@protoc_insertion_point(copy_constructor:proto3.TestDuration)
}

void TestDuration::SharedCtor() {
  value_ = NULL;
}

TestDuration::~TestDuration() {
  // @@protoc_insertion_point(destructor:proto3.TestDuration)
  SharedDtor();
}

void TestDuration::SharedDtor() {
  if (this != internal_default_instance()) delete value_;
}

void TestDuration::SetCachedSize(int size) const {
  _cached_size_.Set(size);
}
const ::google::protobuf::Descriptor* TestDuration::descriptor() {
  ::protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
}

const TestDuration& TestDuration::default_instance() {
  ::google::protobuf::internal::InitSCC(&protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::scc_info_TestDuration.base);
  return *internal_default_instance();
}


void TestDuration::Clear() {
// @@protoc_insertion_point(message_clear_start:proto3.TestDuration)
  ::google::protobuf::uint32 cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  repeated_value_.Clear();
  if (GetArenaNoVirtual() == NULL && value_ != NULL) {
    delete value_;
  }
  value_ = NULL;
  _internal_metadata_.Clear();
}

bool TestDuration::MergePartialFromCodedStream(
    ::google::protobuf::io::CodedInputStream* input) {
#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
  ::google::protobuf::uint32 tag;
  // @@protoc_insertion_point(parse_start:proto3.TestDuration)
  for (;;) {
    ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
    tag = p.first;
    if (!p.second) goto handle_unusual;
    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
      // .google.protobuf.Duration value = 1;
      case 1: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(10u /* 10 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
               input, mutable_value()));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated .google.protobuf.Duration repeated_value = 2;
      case 2: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(18u /* 18 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
                input, add_repeated_value()));
        } else {
          goto handle_unusual;
        }
        break;
      }

      default: {
      handle_unusual:
        if (tag == 0) {
          goto success;
        }
        DO_(::google::protobuf::internal::WireFormat::SkipField(
              input, tag, _internal_metadata_.mutable_unknown_fields()));
        break;
      }
    }
  }
success:
  // @@protoc_insertion_point(parse_success:proto3.TestDuration)
  return true;
failure:
  // @@protoc_insertion_point(parse_failure:proto3.TestDuration)
  return false;
#undef DO_
}

void TestDuration::SerializeWithCachedSizes(
    ::google::protobuf::io::CodedOutputStream* output) const {
  // @@protoc_insertion_point(serialize_start:proto3.TestDuration)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  // .google.protobuf.Duration value = 1;
  if (this->has_value()) {
    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
      1, this->_internal_value(), output);
  }

  // repeated .google.protobuf.Duration repeated_value = 2;
  for (unsigned int i = 0,
      n = static_cast<unsigned int>(this->repeated_value_size()); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
      2,
      this->repeated_value(static_cast<int>(i)),
      output);
  }

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), output);
  }
  // @@protoc_insertion_point(serialize_end:proto3.TestDuration)
}

::google::protobuf::uint8* TestDuration::InternalSerializeWithCachedSizesToArray(
    bool deterministic, ::google::protobuf::uint8* target) const {
  (void)deterministic; // Unused
  // @@protoc_insertion_point(serialize_to_array_start:proto3.TestDuration)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  // .google.protobuf.Duration value = 1;
  if (this->has_value()) {
    target = ::google::protobuf::internal::WireFormatLite::
      InternalWriteMessageToArray(
        1, this->_internal_value(), deterministic, target);
  }

  // repeated .google.protobuf.Duration repeated_value = 2;
  for (unsigned int i = 0,
      n = static_cast<unsigned int>(this->repeated_value_size()); i < n; i++) {
    target = ::google::protobuf::internal::WireFormatLite::
      InternalWriteMessageToArray(
        2, this->repeated_value(static_cast<int>(i)), deterministic, target);
  }

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), target);
  }
  // @@protoc_insertion_point(serialize_to_array_end:proto3.TestDuration)
  return target;
}

size_t TestDuration::ByteSizeLong() const {
// @@protoc_insertion_point(message_byte_size_start:proto3.TestDuration)
  size_t total_size = 0;

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    total_size +=
      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()));
  }
  // repeated .google.protobuf.Duration repeated_value = 2;
  {
    unsigned int count = static_cast<unsigned int>(this->repeated_value_size());
    total_size += 1UL * count;
    for (unsigned int i = 0; i < count; i++) {
      total_size +=
        ::google::protobuf::internal::WireFormatLite::MessageSize(
          this->repeated_value(static_cast<int>(i)));
    }
  }

  // .google.protobuf.Duration value = 1;
  if (this->has_value()) {
    total_size += 1 +
      ::google::protobuf::internal::WireFormatLite::MessageSize(
        *value_);
  }

  int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
  SetCachedSize(cached_size);
  return total_size;
}

void TestDuration::MergeFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_merge_from_start:proto3.TestDuration)
  GOOGLE_DCHECK_NE(&from, this);
  const TestDuration* source =
      ::google::protobuf::internal::DynamicCastToGenerated<const TestDuration>(
          &from);
  if (source == NULL) {
  // @@protoc_insertion_point(generalized_merge_from_cast_fail:proto3.TestDuration)
    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
  } else {
  // @@protoc_insertion_point(generalized_merge_from_cast_success:proto3.TestDuration)
    MergeFrom(*source);
  }
}

void TestDuration::MergeFrom(const TestDuration& from) {
// @@protoc_insertion_point(class_specific_merge_from_start:proto3.TestDuration)
  GOOGLE_DCHECK_NE(&from, this);
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  repeated_value_.MergeFrom(from.repeated_value_);
  if (from.has_value()) {
    mutable_value()->::google::protobuf::Duration::MergeFrom(from.value());
  }
}

void TestDuration::CopyFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_copy_from_start:proto3.TestDuration)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

void TestDuration::CopyFrom(const TestDuration& from) {
// @@protoc_insertion_point(class_specific_copy_from_start:proto3.TestDuration)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

bool TestDuration::IsInitialized() const {
  return true;
}

void TestDuration::Swap(TestDuration* other) {
  if (other == this) return;
  InternalSwap(other);
}
void TestDuration::InternalSwap(TestDuration* other) {
  using std::swap;
  CastToBase(&repeated_value_)->InternalSwap(CastToBase(&other->repeated_value_));
  swap(value_, other->value_);
  _internal_metadata_.Swap(&other->_internal_metadata_);
}

::google::protobuf::Metadata TestDuration::GetMetadata() const {
  protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::file_level_metadata[kIndexInFileMessages];
}


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

void TestFieldMask::InitAsDefaultInstance() {
  ::proto3::_TestFieldMask_default_instance_._instance.get_mutable()->value_ = const_cast< ::google::protobuf::FieldMask*>(
      ::google::protobuf::FieldMask::internal_default_instance());
}
void TestFieldMask::clear_value() {
  if (GetArenaNoVirtual() == NULL && value_ != NULL) {
    delete value_;
  }
  value_ = NULL;
}
#if !defined(_MSC_VER) || _MSC_VER >= 1900
const int TestFieldMask::kValueFieldNumber;
#endif  // !defined(_MSC_VER) || _MSC_VER >= 1900

TestFieldMask::TestFieldMask()
  : ::google::protobuf::Message(), _internal_metadata_(NULL) {
  ::google::protobuf::internal::InitSCC(
      &protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::scc_info_TestFieldMask.base);
  SharedCtor();
  // @@protoc_insertion_point(constructor:proto3.TestFieldMask)
}
TestFieldMask::TestFieldMask(const TestFieldMask& from)
  : ::google::protobuf::Message(),
      _internal_metadata_(NULL) {
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  if (from.has_value()) {
    value_ = new ::google::protobuf::FieldMask(*from.value_);
  } else {
    value_ = NULL;
  }
  // @@protoc_insertion_point(copy_constructor:proto3.TestFieldMask)
}

void TestFieldMask::SharedCtor() {
  value_ = NULL;
}

TestFieldMask::~TestFieldMask() {
  // @@protoc_insertion_point(destructor:proto3.TestFieldMask)
  SharedDtor();
}

void TestFieldMask::SharedDtor() {
  if (this != internal_default_instance()) delete value_;
}

void TestFieldMask::SetCachedSize(int size) const {
  _cached_size_.Set(size);
}
const ::google::protobuf::Descriptor* TestFieldMask::descriptor() {
  ::protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
}

const TestFieldMask& TestFieldMask::default_instance() {
  ::google::protobuf::internal::InitSCC(&protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::scc_info_TestFieldMask.base);
  return *internal_default_instance();
}


void TestFieldMask::Clear() {
// @@protoc_insertion_point(message_clear_start:proto3.TestFieldMask)
  ::google::protobuf::uint32 cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  if (GetArenaNoVirtual() == NULL && value_ != NULL) {
    delete value_;
  }
  value_ = NULL;
  _internal_metadata_.Clear();
}

bool TestFieldMask::MergePartialFromCodedStream(
    ::google::protobuf::io::CodedInputStream* input) {
#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
  ::google::protobuf::uint32 tag;
  // @@protoc_insertion_point(parse_start:proto3.TestFieldMask)
  for (;;) {
    ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
    tag = p.first;
    if (!p.second) goto handle_unusual;
    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
      // .google.protobuf.FieldMask value = 1;
      case 1: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(10u /* 10 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
               input, mutable_value()));
        } else {
          goto handle_unusual;
        }
        break;
      }

      default: {
      handle_unusual:
        if (tag == 0) {
          goto success;
        }
        DO_(::google::protobuf::internal::WireFormat::SkipField(
              input, tag, _internal_metadata_.mutable_unknown_fields()));
        break;
      }
    }
  }
success:
  // @@protoc_insertion_point(parse_success:proto3.TestFieldMask)
  return true;
failure:
  // @@protoc_insertion_point(parse_failure:proto3.TestFieldMask)
  return false;
#undef DO_
}

void TestFieldMask::SerializeWithCachedSizes(
    ::google::protobuf::io::CodedOutputStream* output) const {
  // @@protoc_insertion_point(serialize_start:proto3.TestFieldMask)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  // .google.protobuf.FieldMask value = 1;
  if (this->has_value()) {
    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
      1, this->_internal_value(), output);
  }

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), output);
  }
  // @@protoc_insertion_point(serialize_end:proto3.TestFieldMask)
}

::google::protobuf::uint8* TestFieldMask::InternalSerializeWithCachedSizesToArray(
    bool deterministic, ::google::protobuf::uint8* target) const {
  (void)deterministic; // Unused
  // @@protoc_insertion_point(serialize_to_array_start:proto3.TestFieldMask)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  // .google.protobuf.FieldMask value = 1;
  if (this->has_value()) {
    target = ::google::protobuf::internal::WireFormatLite::
      InternalWriteMessageToArray(
        1, this->_internal_value(), deterministic, target);
  }

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), target);
  }
  // @@protoc_insertion_point(serialize_to_array_end:proto3.TestFieldMask)
  return target;
}

size_t TestFieldMask::ByteSizeLong() const {
// @@protoc_insertion_point(message_byte_size_start:proto3.TestFieldMask)
  size_t total_size = 0;

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    total_size +=
      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()));
  }
  // .google.protobuf.FieldMask value = 1;
  if (this->has_value()) {
    total_size += 1 +
      ::google::protobuf::internal::WireFormatLite::MessageSize(
        *value_);
  }

  int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
  SetCachedSize(cached_size);
  return total_size;
}

void TestFieldMask::MergeFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_merge_from_start:proto3.TestFieldMask)
  GOOGLE_DCHECK_NE(&from, this);
  const TestFieldMask* source =
      ::google::protobuf::internal::DynamicCastToGenerated<const TestFieldMask>(
          &from);
  if (source == NULL) {
  // @@protoc_insertion_point(generalized_merge_from_cast_fail:proto3.TestFieldMask)
    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
  } else {
  // @@protoc_insertion_point(generalized_merge_from_cast_success:proto3.TestFieldMask)
    MergeFrom(*source);
  }
}

void TestFieldMask::MergeFrom(const TestFieldMask& from) {
// @@protoc_insertion_point(class_specific_merge_from_start:proto3.TestFieldMask)
  GOOGLE_DCHECK_NE(&from, this);
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  if (from.has_value()) {
    mutable_value()->::google::protobuf::FieldMask::MergeFrom(from.value());
  }
}

void TestFieldMask::CopyFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_copy_from_start:proto3.TestFieldMask)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

void TestFieldMask::CopyFrom(const TestFieldMask& from) {
// @@protoc_insertion_point(class_specific_copy_from_start:proto3.TestFieldMask)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

bool TestFieldMask::IsInitialized() const {
  return true;
}

void TestFieldMask::Swap(TestFieldMask* other) {
  if (other == this) return;
  InternalSwap(other);
}
void TestFieldMask::InternalSwap(TestFieldMask* other) {
  using std::swap;
  swap(value_, other->value_);
  _internal_metadata_.Swap(&other->_internal_metadata_);
}

::google::protobuf::Metadata TestFieldMask::GetMetadata() const {
  protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::file_level_metadata[kIndexInFileMessages];
}


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

void TestStruct::InitAsDefaultInstance() {
  ::proto3::_TestStruct_default_instance_._instance.get_mutable()->value_ = const_cast< ::google::protobuf::Struct*>(
      ::google::protobuf::Struct::internal_default_instance());
}
void TestStruct::clear_value() {
  if (GetArenaNoVirtual() == NULL && value_ != NULL) {
    delete value_;
  }
  value_ = NULL;
}
void TestStruct::clear_repeated_value() {
  repeated_value_.Clear();
}
#if !defined(_MSC_VER) || _MSC_VER >= 1900
const int TestStruct::kValueFieldNumber;
const int TestStruct::kRepeatedValueFieldNumber;
#endif  // !defined(_MSC_VER) || _MSC_VER >= 1900

TestStruct::TestStruct()
  : ::google::protobuf::Message(), _internal_metadata_(NULL) {
  ::google::protobuf::internal::InitSCC(
      &protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::scc_info_TestStruct.base);
  SharedCtor();
  // @@protoc_insertion_point(constructor:proto3.TestStruct)
}
TestStruct::TestStruct(const TestStruct& from)
  : ::google::protobuf::Message(),
      _internal_metadata_(NULL),
      repeated_value_(from.repeated_value_) {
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  if (from.has_value()) {
    value_ = new ::google::protobuf::Struct(*from.value_);
  } else {
    value_ = NULL;
  }
  // @@protoc_insertion_point(copy_constructor:proto3.TestStruct)
}

void TestStruct::SharedCtor() {
  value_ = NULL;
}

TestStruct::~TestStruct() {
  // @@protoc_insertion_point(destructor:proto3.TestStruct)
  SharedDtor();
}

void TestStruct::SharedDtor() {
  if (this != internal_default_instance()) delete value_;
}

void TestStruct::SetCachedSize(int size) const {
  _cached_size_.Set(size);
}
const ::google::protobuf::Descriptor* TestStruct::descriptor() {
  ::protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
}

const TestStruct& TestStruct::default_instance() {
  ::google::protobuf::internal::InitSCC(&protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::scc_info_TestStruct.base);
  return *internal_default_instance();
}


void TestStruct::Clear() {
// @@protoc_insertion_point(message_clear_start:proto3.TestStruct)
  ::google::protobuf::uint32 cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  repeated_value_.Clear();
  if (GetArenaNoVirtual() == NULL && value_ != NULL) {
    delete value_;
  }
  value_ = NULL;
  _internal_metadata_.Clear();
}

bool TestStruct::MergePartialFromCodedStream(
    ::google::protobuf::io::CodedInputStream* input) {
#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
  ::google::protobuf::uint32 tag;
  // @@protoc_insertion_point(parse_start:proto3.TestStruct)
  for (;;) {
    ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
    tag = p.first;
    if (!p.second) goto handle_unusual;
    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
      // .google.protobuf.Struct value = 1;
      case 1: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(10u /* 10 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
               input, mutable_value()));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated .google.protobuf.Struct repeated_value = 2;
      case 2: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(18u /* 18 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
                input, add_repeated_value()));
        } else {
          goto handle_unusual;
        }
        break;
      }

      default: {
      handle_unusual:
        if (tag == 0) {
          goto success;
        }
        DO_(::google::protobuf::internal::WireFormat::SkipField(
              input, tag, _internal_metadata_.mutable_unknown_fields()));
        break;
      }
    }
  }
success:
  // @@protoc_insertion_point(parse_success:proto3.TestStruct)
  return true;
failure:
  // @@protoc_insertion_point(parse_failure:proto3.TestStruct)
  return false;
#undef DO_
}

void TestStruct::SerializeWithCachedSizes(
    ::google::protobuf::io::CodedOutputStream* output) const {
  // @@protoc_insertion_point(serialize_start:proto3.TestStruct)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  // .google.protobuf.Struct value = 1;
  if (this->has_value()) {
    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
      1, this->_internal_value(), output);
  }

  // repeated .google.protobuf.Struct repeated_value = 2;
  for (unsigned int i = 0,
      n = static_cast<unsigned int>(this->repeated_value_size()); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
      2,
      this->repeated_value(static_cast<int>(i)),
      output);
  }

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), output);
  }
  // @@protoc_insertion_point(serialize_end:proto3.TestStruct)
}

::google::protobuf::uint8* TestStruct::InternalSerializeWithCachedSizesToArray(
    bool deterministic, ::google::protobuf::uint8* target) const {
  (void)deterministic; // Unused
  // @@protoc_insertion_point(serialize_to_array_start:proto3.TestStruct)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  // .google.protobuf.Struct value = 1;
  if (this->has_value()) {
    target = ::google::protobuf::internal::WireFormatLite::
      InternalWriteMessageToArray(
        1, this->_internal_value(), deterministic, target);
  }

  // repeated .google.protobuf.Struct repeated_value = 2;
  for (unsigned int i = 0,
      n = static_cast<unsigned int>(this->repeated_value_size()); i < n; i++) {
    target = ::google::protobuf::internal::WireFormatLite::
      InternalWriteMessageToArray(
        2, this->repeated_value(static_cast<int>(i)), deterministic, target);
  }

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), target);
  }
  // @@protoc_insertion_point(serialize_to_array_end:proto3.TestStruct)
  return target;
}

size_t TestStruct::ByteSizeLong() const {
// @@protoc_insertion_point(message_byte_size_start:proto3.TestStruct)
  size_t total_size = 0;

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    total_size +=
      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()));
  }
  // repeated .google.protobuf.Struct repeated_value = 2;
  {
    unsigned int count = static_cast<unsigned int>(this->repeated_value_size());
    total_size += 1UL * count;
    for (unsigned int i = 0; i < count; i++) {
      total_size +=
        ::google::protobuf::internal::WireFormatLite::MessageSize(
          this->repeated_value(static_cast<int>(i)));
    }
  }

  // .google.protobuf.Struct value = 1;
  if (this->has_value()) {
    total_size += 1 +
      ::google::protobuf::internal::WireFormatLite::MessageSize(
        *value_);
  }

  int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
  SetCachedSize(cached_size);
  return total_size;
}

void TestStruct::MergeFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_merge_from_start:proto3.TestStruct)
  GOOGLE_DCHECK_NE(&from, this);
  const TestStruct* source =
      ::google::protobuf::internal::DynamicCastToGenerated<const TestStruct>(
          &from);
  if (source == NULL) {
  // @@protoc_insertion_point(generalized_merge_from_cast_fail:proto3.TestStruct)
    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
  } else {
  // @@protoc_insertion_point(generalized_merge_from_cast_success:proto3.TestStruct)
    MergeFrom(*source);
  }
}

void TestStruct::MergeFrom(const TestStruct& from) {
// @@protoc_insertion_point(class_specific_merge_from_start:proto3.TestStruct)
  GOOGLE_DCHECK_NE(&from, this);
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  repeated_value_.MergeFrom(from.repeated_value_);
  if (from.has_value()) {
    mutable_value()->::google::protobuf::Struct::MergeFrom(from.value());
  }
}

void TestStruct::CopyFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_copy_from_start:proto3.TestStruct)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

void TestStruct::CopyFrom(const TestStruct& from) {
// @@protoc_insertion_point(class_specific_copy_from_start:proto3.TestStruct)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

bool TestStruct::IsInitialized() const {
  return true;
}

void TestStruct::Swap(TestStruct* other) {
  if (other == this) return;
  InternalSwap(other);
}
void TestStruct::InternalSwap(TestStruct* other) {
  using std::swap;
  CastToBase(&repeated_value_)->InternalSwap(CastToBase(&other->repeated_value_));
  swap(value_, other->value_);
  _internal_metadata_.Swap(&other->_internal_metadata_);
}

::google::protobuf::Metadata TestStruct::GetMetadata() const {
  protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::file_level_metadata[kIndexInFileMessages];
}


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

void TestAny::InitAsDefaultInstance() {
  ::proto3::_TestAny_default_instance_._instance.get_mutable()->value_ = const_cast< ::google::protobuf::Any*>(
      ::google::protobuf::Any::internal_default_instance());
}
void TestAny::clear_value() {
  if (GetArenaNoVirtual() == NULL && value_ != NULL) {
    delete value_;
  }
  value_ = NULL;
}
void TestAny::clear_repeated_value() {
  repeated_value_.Clear();
}
#if !defined(_MSC_VER) || _MSC_VER >= 1900
const int TestAny::kValueFieldNumber;
const int TestAny::kRepeatedValueFieldNumber;
#endif  // !defined(_MSC_VER) || _MSC_VER >= 1900

TestAny::TestAny()
  : ::google::protobuf::Message(), _internal_metadata_(NULL) {
  ::google::protobuf::internal::InitSCC(
      &protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::scc_info_TestAny.base);
  SharedCtor();
  // @@protoc_insertion_point(constructor:proto3.TestAny)
}
TestAny::TestAny(const TestAny& from)
  : ::google::protobuf::Message(),
      _internal_metadata_(NULL),
      repeated_value_(from.repeated_value_) {
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  if (from.has_value()) {
    value_ = new ::google::protobuf::Any(*from.value_);
  } else {
    value_ = NULL;
  }
  // @@protoc_insertion_point(copy_constructor:proto3.TestAny)
}

void TestAny::SharedCtor() {
  value_ = NULL;
}

TestAny::~TestAny() {
  // @@protoc_insertion_point(destructor:proto3.TestAny)
  SharedDtor();
}

void TestAny::SharedDtor() {
  if (this != internal_default_instance()) delete value_;
}

void TestAny::SetCachedSize(int size) const {
  _cached_size_.Set(size);
}
const ::google::protobuf::Descriptor* TestAny::descriptor() {
  ::protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
}

const TestAny& TestAny::default_instance() {
  ::google::protobuf::internal::InitSCC(&protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::scc_info_TestAny.base);
  return *internal_default_instance();
}


void TestAny::Clear() {
// @@protoc_insertion_point(message_clear_start:proto3.TestAny)
  ::google::protobuf::uint32 cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  repeated_value_.Clear();
  if (GetArenaNoVirtual() == NULL && value_ != NULL) {
    delete value_;
  }
  value_ = NULL;
  _internal_metadata_.Clear();
}

bool TestAny::MergePartialFromCodedStream(
    ::google::protobuf::io::CodedInputStream* input) {
#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
  ::google::protobuf::uint32 tag;
  // @@protoc_insertion_point(parse_start:proto3.TestAny)
  for (;;) {
    ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
    tag = p.first;
    if (!p.second) goto handle_unusual;
    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
      // .google.protobuf.Any value = 1;
      case 1: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(10u /* 10 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
               input, mutable_value()));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated .google.protobuf.Any repeated_value = 2;
      case 2: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(18u /* 18 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
                input, add_repeated_value()));
        } else {
          goto handle_unusual;
        }
        break;
      }

      default: {
      handle_unusual:
        if (tag == 0) {
          goto success;
        }
        DO_(::google::protobuf::internal::WireFormat::SkipField(
              input, tag, _internal_metadata_.mutable_unknown_fields()));
        break;
      }
    }
  }
success:
  // @@protoc_insertion_point(parse_success:proto3.TestAny)
  return true;
failure:
  // @@protoc_insertion_point(parse_failure:proto3.TestAny)
  return false;
#undef DO_
}

void TestAny::SerializeWithCachedSizes(
    ::google::protobuf::io::CodedOutputStream* output) const {
  // @@protoc_insertion_point(serialize_start:proto3.TestAny)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  // .google.protobuf.Any value = 1;
  if (this->has_value()) {
    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
      1, this->_internal_value(), output);
  }

  // repeated .google.protobuf.Any repeated_value = 2;
  for (unsigned int i = 0,
      n = static_cast<unsigned int>(this->repeated_value_size()); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
      2,
      this->repeated_value(static_cast<int>(i)),
      output);
  }

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), output);
  }
  // @@protoc_insertion_point(serialize_end:proto3.TestAny)
}

::google::protobuf::uint8* TestAny::InternalSerializeWithCachedSizesToArray(
    bool deterministic, ::google::protobuf::uint8* target) const {
  (void)deterministic; // Unused
  // @@protoc_insertion_point(serialize_to_array_start:proto3.TestAny)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  // .google.protobuf.Any value = 1;
  if (this->has_value()) {
    target = ::google::protobuf::internal::WireFormatLite::
      InternalWriteMessageToArray(
        1, this->_internal_value(), deterministic, target);
  }

  // repeated .google.protobuf.Any repeated_value = 2;
  for (unsigned int i = 0,
      n = static_cast<unsigned int>(this->repeated_value_size()); i < n; i++) {
    target = ::google::protobuf::internal::WireFormatLite::
      InternalWriteMessageToArray(
        2, this->repeated_value(static_cast<int>(i)), deterministic, target);
  }

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), target);
  }
  // @@protoc_insertion_point(serialize_to_array_end:proto3.TestAny)
  return target;
}

size_t TestAny::ByteSizeLong() const {
// @@protoc_insertion_point(message_byte_size_start:proto3.TestAny)
  size_t total_size = 0;

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    total_size +=
      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()));
  }
  // repeated .google.protobuf.Any repeated_value = 2;
  {
    unsigned int count = static_cast<unsigned int>(this->repeated_value_size());
    total_size += 1UL * count;
    for (unsigned int i = 0; i < count; i++) {
      total_size +=
        ::google::protobuf::internal::WireFormatLite::MessageSize(
          this->repeated_value(static_cast<int>(i)));
    }
  }

  // .google.protobuf.Any value = 1;
  if (this->has_value()) {
    total_size += 1 +
      ::google::protobuf::internal::WireFormatLite::MessageSize(
        *value_);
  }

  int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
  SetCachedSize(cached_size);
  return total_size;
}

void TestAny::MergeFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_merge_from_start:proto3.TestAny)
  GOOGLE_DCHECK_NE(&from, this);
  const TestAny* source =
      ::google::protobuf::internal::DynamicCastToGenerated<const TestAny>(
          &from);
  if (source == NULL) {
  // @@protoc_insertion_point(generalized_merge_from_cast_fail:proto3.TestAny)
    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
  } else {
  // @@protoc_insertion_point(generalized_merge_from_cast_success:proto3.TestAny)
    MergeFrom(*source);
  }
}

void TestAny::MergeFrom(const TestAny& from) {
// @@protoc_insertion_point(class_specific_merge_from_start:proto3.TestAny)
  GOOGLE_DCHECK_NE(&from, this);
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  repeated_value_.MergeFrom(from.repeated_value_);
  if (from.has_value()) {
    mutable_value()->::google::protobuf::Any::MergeFrom(from.value());
  }
}

void TestAny::CopyFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_copy_from_start:proto3.TestAny)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

void TestAny::CopyFrom(const TestAny& from) {
// @@protoc_insertion_point(class_specific_copy_from_start:proto3.TestAny)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

bool TestAny::IsInitialized() const {
  return true;
}

void TestAny::Swap(TestAny* other) {
  if (other == this) return;
  InternalSwap(other);
}
void TestAny::InternalSwap(TestAny* other) {
  using std::swap;
  CastToBase(&repeated_value_)->InternalSwap(CastToBase(&other->repeated_value_));
  swap(value_, other->value_);
  _internal_metadata_.Swap(&other->_internal_metadata_);
}

::google::protobuf::Metadata TestAny::GetMetadata() const {
  protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::file_level_metadata[kIndexInFileMessages];
}


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

void TestValue::InitAsDefaultInstance() {
  ::proto3::_TestValue_default_instance_._instance.get_mutable()->value_ = const_cast< ::google::protobuf::Value*>(
      ::google::protobuf::Value::internal_default_instance());
}
void TestValue::clear_value() {
  if (GetArenaNoVirtual() == NULL && value_ != NULL) {
    delete value_;
  }
  value_ = NULL;
}
void TestValue::clear_repeated_value() {
  repeated_value_.Clear();
}
#if !defined(_MSC_VER) || _MSC_VER >= 1900
const int TestValue::kValueFieldNumber;
const int TestValue::kRepeatedValueFieldNumber;
#endif  // !defined(_MSC_VER) || _MSC_VER >= 1900

TestValue::TestValue()
  : ::google::protobuf::Message(), _internal_metadata_(NULL) {
  ::google::protobuf::internal::InitSCC(
      &protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::scc_info_TestValue.base);
  SharedCtor();
  // @@protoc_insertion_point(constructor:proto3.TestValue)
}
TestValue::TestValue(const TestValue& from)
  : ::google::protobuf::Message(),
      _internal_metadata_(NULL),
      repeated_value_(from.repeated_value_) {
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  if (from.has_value()) {
    value_ = new ::google::protobuf::Value(*from.value_);
  } else {
    value_ = NULL;
  }
  // @@protoc_insertion_point(copy_constructor:proto3.TestValue)
}

void TestValue::SharedCtor() {
  value_ = NULL;
}

TestValue::~TestValue() {
  // @@protoc_insertion_point(destructor:proto3.TestValue)
  SharedDtor();
}

void TestValue::SharedDtor() {
  if (this != internal_default_instance()) delete value_;
}

void TestValue::SetCachedSize(int size) const {
  _cached_size_.Set(size);
}
const ::google::protobuf::Descriptor* TestValue::descriptor() {
  ::protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
}

const TestValue& TestValue::default_instance() {
  ::google::protobuf::internal::InitSCC(&protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::scc_info_TestValue.base);
  return *internal_default_instance();
}


void TestValue::Clear() {
// @@protoc_insertion_point(message_clear_start:proto3.TestValue)
  ::google::protobuf::uint32 cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  repeated_value_.Clear();
  if (GetArenaNoVirtual() == NULL && value_ != NULL) {
    delete value_;
  }
  value_ = NULL;
  _internal_metadata_.Clear();
}

bool TestValue::MergePartialFromCodedStream(
    ::google::protobuf::io::CodedInputStream* input) {
#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
  ::google::protobuf::uint32 tag;
  // @@protoc_insertion_point(parse_start:proto3.TestValue)
  for (;;) {
    ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
    tag = p.first;
    if (!p.second) goto handle_unusual;
    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
      // .google.protobuf.Value value = 1;
      case 1: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(10u /* 10 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
               input, mutable_value()));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated .google.protobuf.Value repeated_value = 2;
      case 2: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(18u /* 18 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
                input, add_repeated_value()));
        } else {
          goto handle_unusual;
        }
        break;
      }

      default: {
      handle_unusual:
        if (tag == 0) {
          goto success;
        }
        DO_(::google::protobuf::internal::WireFormat::SkipField(
              input, tag, _internal_metadata_.mutable_unknown_fields()));
        break;
      }
    }
  }
success:
  // @@protoc_insertion_point(parse_success:proto3.TestValue)
  return true;
failure:
  // @@protoc_insertion_point(parse_failure:proto3.TestValue)
  return false;
#undef DO_
}

void TestValue::SerializeWithCachedSizes(
    ::google::protobuf::io::CodedOutputStream* output) const {
  // @@protoc_insertion_point(serialize_start:proto3.TestValue)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  // .google.protobuf.Value value = 1;
  if (this->has_value()) {
    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
      1, this->_internal_value(), output);
  }

  // repeated .google.protobuf.Value repeated_value = 2;
  for (unsigned int i = 0,
      n = static_cast<unsigned int>(this->repeated_value_size()); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
      2,
      this->repeated_value(static_cast<int>(i)),
      output);
  }

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), output);
  }
  // @@protoc_insertion_point(serialize_end:proto3.TestValue)
}

::google::protobuf::uint8* TestValue::InternalSerializeWithCachedSizesToArray(
    bool deterministic, ::google::protobuf::uint8* target) const {
  (void)deterministic; // Unused
  // @@protoc_insertion_point(serialize_to_array_start:proto3.TestValue)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  // .google.protobuf.Value value = 1;
  if (this->has_value()) {
    target = ::google::protobuf::internal::WireFormatLite::
      InternalWriteMessageToArray(
        1, this->_internal_value(), deterministic, target);
  }

  // repeated .google.protobuf.Value repeated_value = 2;
  for (unsigned int i = 0,
      n = static_cast<unsigned int>(this->repeated_value_size()); i < n; i++) {
    target = ::google::protobuf::internal::WireFormatLite::
      InternalWriteMessageToArray(
        2, this->repeated_value(static_cast<int>(i)), deterministic, target);
  }

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), target);
  }
  // @@protoc_insertion_point(serialize_to_array_end:proto3.TestValue)
  return target;
}

size_t TestValue::ByteSizeLong() const {
// @@protoc_insertion_point(message_byte_size_start:proto3.TestValue)
  size_t total_size = 0;

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    total_size +=
      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()));
  }
  // repeated .google.protobuf.Value repeated_value = 2;
  {
    unsigned int count = static_cast<unsigned int>(this->repeated_value_size());
    total_size += 1UL * count;
    for (unsigned int i = 0; i < count; i++) {
      total_size +=
        ::google::protobuf::internal::WireFormatLite::MessageSize(
          this->repeated_value(static_cast<int>(i)));
    }
  }

  // .google.protobuf.Value value = 1;
  if (this->has_value()) {
    total_size += 1 +
      ::google::protobuf::internal::WireFormatLite::MessageSize(
        *value_);
  }

  int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
  SetCachedSize(cached_size);
  return total_size;
}

void TestValue::MergeFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_merge_from_start:proto3.TestValue)
  GOOGLE_DCHECK_NE(&from, this);
  const TestValue* source =
      ::google::protobuf::internal::DynamicCastToGenerated<const TestValue>(
          &from);
  if (source == NULL) {
  // @@protoc_insertion_point(generalized_merge_from_cast_fail:proto3.TestValue)
    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
  } else {
  // @@protoc_insertion_point(generalized_merge_from_cast_success:proto3.TestValue)
    MergeFrom(*source);
  }
}

void TestValue::MergeFrom(const TestValue& from) {
// @@protoc_insertion_point(class_specific_merge_from_start:proto3.TestValue)
  GOOGLE_DCHECK_NE(&from, this);
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  repeated_value_.MergeFrom(from.repeated_value_);
  if (from.has_value()) {
    mutable_value()->::google::protobuf::Value::MergeFrom(from.value());
  }
}

void TestValue::CopyFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_copy_from_start:proto3.TestValue)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

void TestValue::CopyFrom(const TestValue& from) {
// @@protoc_insertion_point(class_specific_copy_from_start:proto3.TestValue)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

bool TestValue::IsInitialized() const {
  return true;
}

void TestValue::Swap(TestValue* other) {
  if (other == this) return;
  InternalSwap(other);
}
void TestValue::InternalSwap(TestValue* other) {
  using std::swap;
  CastToBase(&repeated_value_)->InternalSwap(CastToBase(&other->repeated_value_));
  swap(value_, other->value_);
  _internal_metadata_.Swap(&other->_internal_metadata_);
}

::google::protobuf::Metadata TestValue::GetMetadata() const {
  protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::file_level_metadata[kIndexInFileMessages];
}


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

void TestListValue::InitAsDefaultInstance() {
  ::proto3::_TestListValue_default_instance_._instance.get_mutable()->value_ = const_cast< ::google::protobuf::ListValue*>(
      ::google::protobuf::ListValue::internal_default_instance());
}
void TestListValue::clear_value() {
  if (GetArenaNoVirtual() == NULL && value_ != NULL) {
    delete value_;
  }
  value_ = NULL;
}
void TestListValue::clear_repeated_value() {
  repeated_value_.Clear();
}
#if !defined(_MSC_VER) || _MSC_VER >= 1900
const int TestListValue::kValueFieldNumber;
const int TestListValue::kRepeatedValueFieldNumber;
#endif  // !defined(_MSC_VER) || _MSC_VER >= 1900

TestListValue::TestListValue()
  : ::google::protobuf::Message(), _internal_metadata_(NULL) {
  ::google::protobuf::internal::InitSCC(
      &protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::scc_info_TestListValue.base);
  SharedCtor();
  // @@protoc_insertion_point(constructor:proto3.TestListValue)
}
TestListValue::TestListValue(const TestListValue& from)
  : ::google::protobuf::Message(),
      _internal_metadata_(NULL),
      repeated_value_(from.repeated_value_) {
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  if (from.has_value()) {
    value_ = new ::google::protobuf::ListValue(*from.value_);
  } else {
    value_ = NULL;
  }
  // @@protoc_insertion_point(copy_constructor:proto3.TestListValue)
}

void TestListValue::SharedCtor() {
  value_ = NULL;
}

TestListValue::~TestListValue() {
  // @@protoc_insertion_point(destructor:proto3.TestListValue)
  SharedDtor();
}

void TestListValue::SharedDtor() {
  if (this != internal_default_instance()) delete value_;
}

void TestListValue::SetCachedSize(int size) const {
  _cached_size_.Set(size);
}
const ::google::protobuf::Descriptor* TestListValue::descriptor() {
  ::protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
}

const TestListValue& TestListValue::default_instance() {
  ::google::protobuf::internal::InitSCC(&protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::scc_info_TestListValue.base);
  return *internal_default_instance();
}


void TestListValue::Clear() {
// @@protoc_insertion_point(message_clear_start:proto3.TestListValue)
  ::google::protobuf::uint32 cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  repeated_value_.Clear();
  if (GetArenaNoVirtual() == NULL && value_ != NULL) {
    delete value_;
  }
  value_ = NULL;
  _internal_metadata_.Clear();
}

bool TestListValue::MergePartialFromCodedStream(
    ::google::protobuf::io::CodedInputStream* input) {
#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
  ::google::protobuf::uint32 tag;
  // @@protoc_insertion_point(parse_start:proto3.TestListValue)
  for (;;) {
    ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
    tag = p.first;
    if (!p.second) goto handle_unusual;
    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
      // .google.protobuf.ListValue value = 1;
      case 1: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(10u /* 10 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
               input, mutable_value()));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated .google.protobuf.ListValue repeated_value = 2;
      case 2: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(18u /* 18 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
                input, add_repeated_value()));
        } else {
          goto handle_unusual;
        }
        break;
      }

      default: {
      handle_unusual:
        if (tag == 0) {
          goto success;
        }
        DO_(::google::protobuf::internal::WireFormat::SkipField(
              input, tag, _internal_metadata_.mutable_unknown_fields()));
        break;
      }
    }
  }
success:
  // @@protoc_insertion_point(parse_success:proto3.TestListValue)
  return true;
failure:
  // @@protoc_insertion_point(parse_failure:proto3.TestListValue)
  return false;
#undef DO_
}

void TestListValue::SerializeWithCachedSizes(
    ::google::protobuf::io::CodedOutputStream* output) const {
  // @@protoc_insertion_point(serialize_start:proto3.TestListValue)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  // .google.protobuf.ListValue value = 1;
  if (this->has_value()) {
    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
      1, this->_internal_value(), output);
  }

  // repeated .google.protobuf.ListValue repeated_value = 2;
  for (unsigned int i = 0,
      n = static_cast<unsigned int>(this->repeated_value_size()); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
      2,
      this->repeated_value(static_cast<int>(i)),
      output);
  }

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), output);
  }
  // @@protoc_insertion_point(serialize_end:proto3.TestListValue)
}

::google::protobuf::uint8* TestListValue::InternalSerializeWithCachedSizesToArray(
    bool deterministic, ::google::protobuf::uint8* target) const {
  (void)deterministic; // Unused
  // @@protoc_insertion_point(serialize_to_array_start:proto3.TestListValue)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  // .google.protobuf.ListValue value = 1;
  if (this->has_value()) {
    target = ::google::protobuf::internal::WireFormatLite::
      InternalWriteMessageToArray(
        1, this->_internal_value(), deterministic, target);
  }

  // repeated .google.protobuf.ListValue repeated_value = 2;
  for (unsigned int i = 0,
      n = static_cast<unsigned int>(this->repeated_value_size()); i < n; i++) {
    target = ::google::protobuf::internal::WireFormatLite::
      InternalWriteMessageToArray(
        2, this->repeated_value(static_cast<int>(i)), deterministic, target);
  }

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), target);
  }
  // @@protoc_insertion_point(serialize_to_array_end:proto3.TestListValue)
  return target;
}

size_t TestListValue::ByteSizeLong() const {
// @@protoc_insertion_point(message_byte_size_start:proto3.TestListValue)
  size_t total_size = 0;

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    total_size +=
      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()));
  }
  // repeated .google.protobuf.ListValue repeated_value = 2;
  {
    unsigned int count = static_cast<unsigned int>(this->repeated_value_size());
    total_size += 1UL * count;
    for (unsigned int i = 0; i < count; i++) {
      total_size +=
        ::google::protobuf::internal::WireFormatLite::MessageSize(
          this->repeated_value(static_cast<int>(i)));
    }
  }

  // .google.protobuf.ListValue value = 1;
  if (this->has_value()) {
    total_size += 1 +
      ::google::protobuf::internal::WireFormatLite::MessageSize(
        *value_);
  }

  int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
  SetCachedSize(cached_size);
  return total_size;
}

void TestListValue::MergeFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_merge_from_start:proto3.TestListValue)
  GOOGLE_DCHECK_NE(&from, this);
  const TestListValue* source =
      ::google::protobuf::internal::DynamicCastToGenerated<const TestListValue>(
          &from);
  if (source == NULL) {
  // @@protoc_insertion_point(generalized_merge_from_cast_fail:proto3.TestListValue)
    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
  } else {
  // @@protoc_insertion_point(generalized_merge_from_cast_success:proto3.TestListValue)
    MergeFrom(*source);
  }
}

void TestListValue::MergeFrom(const TestListValue& from) {
// @@protoc_insertion_point(class_specific_merge_from_start:proto3.TestListValue)
  GOOGLE_DCHECK_NE(&from, this);
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  repeated_value_.MergeFrom(from.repeated_value_);
  if (from.has_value()) {
    mutable_value()->::google::protobuf::ListValue::MergeFrom(from.value());
  }
}

void TestListValue::CopyFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_copy_from_start:proto3.TestListValue)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

void TestListValue::CopyFrom(const TestListValue& from) {
// @@protoc_insertion_point(class_specific_copy_from_start:proto3.TestListValue)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

bool TestListValue::IsInitialized() const {
  return true;
}

void TestListValue::Swap(TestListValue* other) {
  if (other == this) return;
  InternalSwap(other);
}
void TestListValue::InternalSwap(TestListValue* other) {
  using std::swap;
  CastToBase(&repeated_value_)->InternalSwap(CastToBase(&other->repeated_value_));
  swap(value_, other->value_);
  _internal_metadata_.Swap(&other->_internal_metadata_);
}

::google::protobuf::Metadata TestListValue::GetMetadata() const {
  protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::file_level_metadata[kIndexInFileMessages];
}


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

TestBoolValue_BoolMapEntry_DoNotUse::TestBoolValue_BoolMapEntry_DoNotUse() {}
TestBoolValue_BoolMapEntry_DoNotUse::TestBoolValue_BoolMapEntry_DoNotUse(::google::protobuf::Arena* arena) : SuperType(arena) {}
void TestBoolValue_BoolMapEntry_DoNotUse::MergeFrom(const TestBoolValue_BoolMapEntry_DoNotUse& other) {
  MergeFromInternal(other);
}
::google::protobuf::Metadata TestBoolValue_BoolMapEntry_DoNotUse::GetMetadata() const {
  ::protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::file_level_metadata[26];
}
void TestBoolValue_BoolMapEntry_DoNotUse::MergeFrom(
    const ::google::protobuf::Message& other) {
  ::google::protobuf::Message::MergeFrom(other);
}


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

void TestBoolValue::InitAsDefaultInstance() {
}
#if !defined(_MSC_VER) || _MSC_VER >= 1900
const int TestBoolValue::kBoolValueFieldNumber;
const int TestBoolValue::kBoolMapFieldNumber;
#endif  // !defined(_MSC_VER) || _MSC_VER >= 1900

TestBoolValue::TestBoolValue()
  : ::google::protobuf::Message(), _internal_metadata_(NULL) {
  ::google::protobuf::internal::InitSCC(
      &protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::scc_info_TestBoolValue.base);
  SharedCtor();
  // @@protoc_insertion_point(constructor:proto3.TestBoolValue)
}
TestBoolValue::TestBoolValue(const TestBoolValue& from)
  : ::google::protobuf::Message(),
      _internal_metadata_(NULL) {
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  bool_map_.MergeFrom(from.bool_map_);
  bool_value_ = from.bool_value_;
  // @@protoc_insertion_point(copy_constructor:proto3.TestBoolValue)
}

void TestBoolValue::SharedCtor() {
  bool_value_ = false;
}

TestBoolValue::~TestBoolValue() {
  // @@protoc_insertion_point(destructor:proto3.TestBoolValue)
  SharedDtor();
}

void TestBoolValue::SharedDtor() {
}

void TestBoolValue::SetCachedSize(int size) const {
  _cached_size_.Set(size);
}
const ::google::protobuf::Descriptor* TestBoolValue::descriptor() {
  ::protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
}

const TestBoolValue& TestBoolValue::default_instance() {
  ::google::protobuf::internal::InitSCC(&protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::scc_info_TestBoolValue.base);
  return *internal_default_instance();
}


void TestBoolValue::Clear() {
// @@protoc_insertion_point(message_clear_start:proto3.TestBoolValue)
  ::google::protobuf::uint32 cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  bool_map_.Clear();
  bool_value_ = false;
  _internal_metadata_.Clear();
}

bool TestBoolValue::MergePartialFromCodedStream(
    ::google::protobuf::io::CodedInputStream* input) {
#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
  ::google::protobuf::uint32 tag;
  // @@protoc_insertion_point(parse_start:proto3.TestBoolValue)
  for (;;) {
    ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
    tag = p.first;
    if (!p.second) goto handle_unusual;
    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
      // bool bool_value = 1;
      case 1: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(8u /* 8 & 0xFF */)) {

          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                   bool, ::google::protobuf::internal::WireFormatLite::TYPE_BOOL>(
                 input, &bool_value_)));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // map<bool, int32> bool_map = 2;
      case 2: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(18u /* 18 & 0xFF */)) {
          TestBoolValue_BoolMapEntry_DoNotUse::Parser< ::google::protobuf::internal::MapField<
              TestBoolValue_BoolMapEntry_DoNotUse,
              bool, ::google::protobuf::int32,
              ::google::protobuf::internal::WireFormatLite::TYPE_BOOL,
              ::google::protobuf::internal::WireFormatLite::TYPE_INT32,
              0 >,
            ::google::protobuf::Map< bool, ::google::protobuf::int32 > > parser(&bool_map_);
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual(
              input, &parser));
        } else {
          goto handle_unusual;
        }
        break;
      }

      default: {
      handle_unusual:
        if (tag == 0) {
          goto success;
        }
        DO_(::google::protobuf::internal::WireFormat::SkipField(
              input, tag, _internal_metadata_.mutable_unknown_fields()));
        break;
      }
    }
  }
success:
  // @@protoc_insertion_point(parse_success:proto3.TestBoolValue)
  return true;
failure:
  // @@protoc_insertion_point(parse_failure:proto3.TestBoolValue)
  return false;
#undef DO_
}

void TestBoolValue::SerializeWithCachedSizes(
    ::google::protobuf::io::CodedOutputStream* output) const {
  // @@protoc_insertion_point(serialize_start:proto3.TestBoolValue)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  // bool bool_value = 1;
  if (this->bool_value() != 0) {
    ::google::protobuf::internal::WireFormatLite::WriteBool(1, this->bool_value(), output);
  }

  // map<bool, int32> bool_map = 2;
  if (!this->bool_map().empty()) {
    typedef ::google::protobuf::Map< bool, ::google::protobuf::int32 >::const_pointer
        ConstPtr;
    typedef ::google::protobuf::internal::SortItem< bool, ConstPtr > SortItem;
    typedef ::google::protobuf::internal::CompareByFirstField<SortItem> Less;

    if (output->IsSerializationDeterministic() &&
        this->bool_map().size() > 1) {
      ::std::unique_ptr<SortItem[]> items(
          new SortItem[this->bool_map().size()]);
      typedef ::google::protobuf::Map< bool, ::google::protobuf::int32 >::size_type size_type;
      size_type n = 0;
      for (::google::protobuf::Map< bool, ::google::protobuf::int32 >::const_iterator
          it = this->bool_map().begin();
          it != this->bool_map().end(); ++it, ++n) {
        items[static_cast<ptrdiff_t>(n)] = SortItem(&*it);
      }
      ::std::sort(&items[0], &items[static_cast<ptrdiff_t>(n)], Less());
      ::std::unique_ptr<TestBoolValue_BoolMapEntry_DoNotUse> entry;
      for (size_type i = 0; i < n; i++) {
        entry.reset(bool_map_.NewEntryWrapper(
            items[static_cast<ptrdiff_t>(i)].second->first, items[static_cast<ptrdiff_t>(i)].second->second));
        ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
            2, *entry, output);
      }
    } else {
      ::std::unique_ptr<TestBoolValue_BoolMapEntry_DoNotUse> entry;
      for (::google::protobuf::Map< bool, ::google::protobuf::int32 >::const_iterator
          it = this->bool_map().begin();
          it != this->bool_map().end(); ++it) {
        entry.reset(bool_map_.NewEntryWrapper(
            it->first, it->second));
        ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
            2, *entry, output);
      }
    }
  }

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), output);
  }
  // @@protoc_insertion_point(serialize_end:proto3.TestBoolValue)
}

::google::protobuf::uint8* TestBoolValue::InternalSerializeWithCachedSizesToArray(
    bool deterministic, ::google::protobuf::uint8* target) const {
  (void)deterministic; // Unused
  // @@protoc_insertion_point(serialize_to_array_start:proto3.TestBoolValue)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  // bool bool_value = 1;
  if (this->bool_value() != 0) {
    target = ::google::protobuf::internal::WireFormatLite::WriteBoolToArray(1, this->bool_value(), target);
  }

  // map<bool, int32> bool_map = 2;
  if (!this->bool_map().empty()) {
    typedef ::google::protobuf::Map< bool, ::google::protobuf::int32 >::const_pointer
        ConstPtr;
    typedef ::google::protobuf::internal::SortItem< bool, ConstPtr > SortItem;
    typedef ::google::protobuf::internal::CompareByFirstField<SortItem> Less;

    if (deterministic &&
        this->bool_map().size() > 1) {
      ::std::unique_ptr<SortItem[]> items(
          new SortItem[this->bool_map().size()]);
      typedef ::google::protobuf::Map< bool, ::google::protobuf::int32 >::size_type size_type;
      size_type n = 0;
      for (::google::protobuf::Map< bool, ::google::protobuf::int32 >::const_iterator
          it = this->bool_map().begin();
          it != this->bool_map().end(); ++it, ++n) {
        items[static_cast<ptrdiff_t>(n)] = SortItem(&*it);
      }
      ::std::sort(&items[0], &items[static_cast<ptrdiff_t>(n)], Less());
      ::std::unique_ptr<TestBoolValue_BoolMapEntry_DoNotUse> entry;
      for (size_type i = 0; i < n; i++) {
        entry.reset(bool_map_.NewEntryWrapper(
            items[static_cast<ptrdiff_t>(i)].second->first, items[static_cast<ptrdiff_t>(i)].second->second));
        target = ::google::protobuf::internal::WireFormatLite::
                   InternalWriteMessageNoVirtualToArray(
                       2, *entry, deterministic, target);
;
      }
    } else {
      ::std::unique_ptr<TestBoolValue_BoolMapEntry_DoNotUse> entry;
      for (::google::protobuf::Map< bool, ::google::protobuf::int32 >::const_iterator
          it = this->bool_map().begin();
          it != this->bool_map().end(); ++it) {
        entry.reset(bool_map_.NewEntryWrapper(
            it->first, it->second));
        target = ::google::protobuf::internal::WireFormatLite::
                   InternalWriteMessageNoVirtualToArray(
                       2, *entry, deterministic, target);
;
      }
    }
  }

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), target);
  }
  // @@protoc_insertion_point(serialize_to_array_end:proto3.TestBoolValue)
  return target;
}

size_t TestBoolValue::ByteSizeLong() const {
// @@protoc_insertion_point(message_byte_size_start:proto3.TestBoolValue)
  size_t total_size = 0;

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    total_size +=
      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()));
  }
  // map<bool, int32> bool_map = 2;
  total_size += 1 *
      ::google::protobuf::internal::FromIntSize(this->bool_map_size());
  {
    ::std::unique_ptr<TestBoolValue_BoolMapEntry_DoNotUse> entry;
    for (::google::protobuf::Map< bool, ::google::protobuf::int32 >::const_iterator
        it = this->bool_map().begin();
        it != this->bool_map().end(); ++it) {
      entry.reset(bool_map_.NewEntryWrapper(it->first, it->second));
      total_size += ::google::protobuf::internal::WireFormatLite::
          MessageSizeNoVirtual(*entry);
    }
  }

  // bool bool_value = 1;
  if (this->bool_value() != 0) {
    total_size += 1 + 1;
  }

  int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
  SetCachedSize(cached_size);
  return total_size;
}

void TestBoolValue::MergeFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_merge_from_start:proto3.TestBoolValue)
  GOOGLE_DCHECK_NE(&from, this);
  const TestBoolValue* source =
      ::google::protobuf::internal::DynamicCastToGenerated<const TestBoolValue>(
          &from);
  if (source == NULL) {
  // @@protoc_insertion_point(generalized_merge_from_cast_fail:proto3.TestBoolValue)
    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
  } else {
  // @@protoc_insertion_point(generalized_merge_from_cast_success:proto3.TestBoolValue)
    MergeFrom(*source);
  }
}

void TestBoolValue::MergeFrom(const TestBoolValue& from) {
// @@protoc_insertion_point(class_specific_merge_from_start:proto3.TestBoolValue)
  GOOGLE_DCHECK_NE(&from, this);
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  bool_map_.MergeFrom(from.bool_map_);
  if (from.bool_value() != 0) {
    set_bool_value(from.bool_value());
  }
}

void TestBoolValue::CopyFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_copy_from_start:proto3.TestBoolValue)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

void TestBoolValue::CopyFrom(const TestBoolValue& from) {
// @@protoc_insertion_point(class_specific_copy_from_start:proto3.TestBoolValue)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

bool TestBoolValue::IsInitialized() const {
  return true;
}

void TestBoolValue::Swap(TestBoolValue* other) {
  if (other == this) return;
  InternalSwap(other);
}
void TestBoolValue::InternalSwap(TestBoolValue* other) {
  using std::swap;
  bool_map_.Swap(&other->bool_map_);
  swap(bool_value_, other->bool_value_);
  _internal_metadata_.Swap(&other->_internal_metadata_);
}

::google::protobuf::Metadata TestBoolValue::GetMetadata() const {
  protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::file_level_metadata[kIndexInFileMessages];
}


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

void TestCustomJsonName::InitAsDefaultInstance() {
}
#if !defined(_MSC_VER) || _MSC_VER >= 1900
const int TestCustomJsonName::kValueFieldNumber;
#endif  // !defined(_MSC_VER) || _MSC_VER >= 1900

TestCustomJsonName::TestCustomJsonName()
  : ::google::protobuf::Message(), _internal_metadata_(NULL) {
  ::google::protobuf::internal::InitSCC(
      &protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::scc_info_TestCustomJsonName.base);
  SharedCtor();
  // @@protoc_insertion_point(constructor:proto3.TestCustomJsonName)
}
TestCustomJsonName::TestCustomJsonName(const TestCustomJsonName& from)
  : ::google::protobuf::Message(),
      _internal_metadata_(NULL) {
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  value_ = from.value_;
  // @@protoc_insertion_point(copy_constructor:proto3.TestCustomJsonName)
}

void TestCustomJsonName::SharedCtor() {
  value_ = 0;
}

TestCustomJsonName::~TestCustomJsonName() {
  // @@protoc_insertion_point(destructor:proto3.TestCustomJsonName)
  SharedDtor();
}

void TestCustomJsonName::SharedDtor() {
}

void TestCustomJsonName::SetCachedSize(int size) const {
  _cached_size_.Set(size);
}
const ::google::protobuf::Descriptor* TestCustomJsonName::descriptor() {
  ::protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
}

const TestCustomJsonName& TestCustomJsonName::default_instance() {
  ::google::protobuf::internal::InitSCC(&protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::scc_info_TestCustomJsonName.base);
  return *internal_default_instance();
}


void TestCustomJsonName::Clear() {
// @@protoc_insertion_point(message_clear_start:proto3.TestCustomJsonName)
  ::google::protobuf::uint32 cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  value_ = 0;
  _internal_metadata_.Clear();
}

bool TestCustomJsonName::MergePartialFromCodedStream(
    ::google::protobuf::io::CodedInputStream* input) {
#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
  ::google::protobuf::uint32 tag;
  // @@protoc_insertion_point(parse_start:proto3.TestCustomJsonName)
  for (;;) {
    ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
    tag = p.first;
    if (!p.second) goto handle_unusual;
    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
      // int32 value = 1[json_name = "@value"];
      case 1: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(8u /* 8 & 0xFF */)) {

          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
                 input, &value_)));
        } else {
          goto handle_unusual;
        }
        break;
      }

      default: {
      handle_unusual:
        if (tag == 0) {
          goto success;
        }
        DO_(::google::protobuf::internal::WireFormat::SkipField(
              input, tag, _internal_metadata_.mutable_unknown_fields()));
        break;
      }
    }
  }
success:
  // @@protoc_insertion_point(parse_success:proto3.TestCustomJsonName)
  return true;
failure:
  // @@protoc_insertion_point(parse_failure:proto3.TestCustomJsonName)
  return false;
#undef DO_
}

void TestCustomJsonName::SerializeWithCachedSizes(
    ::google::protobuf::io::CodedOutputStream* output) const {
  // @@protoc_insertion_point(serialize_start:proto3.TestCustomJsonName)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  // int32 value = 1[json_name = "@value"];
  if (this->value() != 0) {
    ::google::protobuf::internal::WireFormatLite::WriteInt32(1, this->value(), output);
  }

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), output);
  }
  // @@protoc_insertion_point(serialize_end:proto3.TestCustomJsonName)
}

::google::protobuf::uint8* TestCustomJsonName::InternalSerializeWithCachedSizesToArray(
    bool deterministic, ::google::protobuf::uint8* target) const {
  (void)deterministic; // Unused
  // @@protoc_insertion_point(serialize_to_array_start:proto3.TestCustomJsonName)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  // int32 value = 1[json_name = "@value"];
  if (this->value() != 0) {
    target = ::google::protobuf::internal::WireFormatLite::WriteInt32ToArray(1, this->value(), target);
  }

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), target);
  }
  // @@protoc_insertion_point(serialize_to_array_end:proto3.TestCustomJsonName)
  return target;
}

size_t TestCustomJsonName::ByteSizeLong() const {
// @@protoc_insertion_point(message_byte_size_start:proto3.TestCustomJsonName)
  size_t total_size = 0;

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    total_size +=
      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()));
  }
  // int32 value = 1[json_name = "@value"];
  if (this->value() != 0) {
    total_size += 1 +
      ::google::protobuf::internal::WireFormatLite::Int32Size(
        this->value());
  }

  int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
  SetCachedSize(cached_size);
  return total_size;
}

void TestCustomJsonName::MergeFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_merge_from_start:proto3.TestCustomJsonName)
  GOOGLE_DCHECK_NE(&from, this);
  const TestCustomJsonName* source =
      ::google::protobuf::internal::DynamicCastToGenerated<const TestCustomJsonName>(
          &from);
  if (source == NULL) {
  // @@protoc_insertion_point(generalized_merge_from_cast_fail:proto3.TestCustomJsonName)
    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
  } else {
  // @@protoc_insertion_point(generalized_merge_from_cast_success:proto3.TestCustomJsonName)
    MergeFrom(*source);
  }
}

void TestCustomJsonName::MergeFrom(const TestCustomJsonName& from) {
// @@protoc_insertion_point(class_specific_merge_from_start:proto3.TestCustomJsonName)
  GOOGLE_DCHECK_NE(&from, this);
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  if (from.value() != 0) {
    set_value(from.value());
  }
}

void TestCustomJsonName::CopyFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_copy_from_start:proto3.TestCustomJsonName)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

void TestCustomJsonName::CopyFrom(const TestCustomJsonName& from) {
// @@protoc_insertion_point(class_specific_copy_from_start:proto3.TestCustomJsonName)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

bool TestCustomJsonName::IsInitialized() const {
  return true;
}

void TestCustomJsonName::Swap(TestCustomJsonName* other) {
  if (other == this) return;
  InternalSwap(other);
}
void TestCustomJsonName::InternalSwap(TestCustomJsonName* other) {
  using std::swap;
  swap(value_, other->value_);
  _internal_metadata_.Swap(&other->_internal_metadata_);
}

::google::protobuf::Metadata TestCustomJsonName::GetMetadata() const {
  protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::file_level_metadata[kIndexInFileMessages];
}


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

void TestExtensions::InitAsDefaultInstance() {
  ::proto3::_TestExtensions_default_instance_._instance.get_mutable()->extensions_ = const_cast< ::protobuf_unittest::TestAllExtensions*>(
      ::protobuf_unittest::TestAllExtensions::internal_default_instance());
}
void TestExtensions::clear_extensions() {
  if (GetArenaNoVirtual() == NULL && extensions_ != NULL) {
    delete extensions_;
  }
  extensions_ = NULL;
}
#if !defined(_MSC_VER) || _MSC_VER >= 1900
const int TestExtensions::kExtensionsFieldNumber;
#endif  // !defined(_MSC_VER) || _MSC_VER >= 1900

TestExtensions::TestExtensions()
  : ::google::protobuf::Message(), _internal_metadata_(NULL) {
  ::google::protobuf::internal::InitSCC(
      &protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::scc_info_TestExtensions.base);
  SharedCtor();
  // @@protoc_insertion_point(constructor:proto3.TestExtensions)
}
TestExtensions::TestExtensions(const TestExtensions& from)
  : ::google::protobuf::Message(),
      _internal_metadata_(NULL) {
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  if (from.has_extensions()) {
    extensions_ = new ::protobuf_unittest::TestAllExtensions(*from.extensions_);
  } else {
    extensions_ = NULL;
  }
  // @@protoc_insertion_point(copy_constructor:proto3.TestExtensions)
}

void TestExtensions::SharedCtor() {
  extensions_ = NULL;
}

TestExtensions::~TestExtensions() {
  // @@protoc_insertion_point(destructor:proto3.TestExtensions)
  SharedDtor();
}

void TestExtensions::SharedDtor() {
  if (this != internal_default_instance()) delete extensions_;
}

void TestExtensions::SetCachedSize(int size) const {
  _cached_size_.Set(size);
}
const ::google::protobuf::Descriptor* TestExtensions::descriptor() {
  ::protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
}

const TestExtensions& TestExtensions::default_instance() {
  ::google::protobuf::internal::InitSCC(&protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::scc_info_TestExtensions.base);
  return *internal_default_instance();
}


void TestExtensions::Clear() {
// @@protoc_insertion_point(message_clear_start:proto3.TestExtensions)
  ::google::protobuf::uint32 cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  if (GetArenaNoVirtual() == NULL && extensions_ != NULL) {
    delete extensions_;
  }
  extensions_ = NULL;
  _internal_metadata_.Clear();
}

bool TestExtensions::MergePartialFromCodedStream(
    ::google::protobuf::io::CodedInputStream* input) {
#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
  ::google::protobuf::uint32 tag;
  // @@protoc_insertion_point(parse_start:proto3.TestExtensions)
  for (;;) {
    ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
    tag = p.first;
    if (!p.second) goto handle_unusual;
    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
      // .protobuf_unittest.TestAllExtensions extensions = 1;
      case 1: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(10u /* 10 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
               input, mutable_extensions()));
        } else {
          goto handle_unusual;
        }
        break;
      }

      default: {
      handle_unusual:
        if (tag == 0) {
          goto success;
        }
        DO_(::google::protobuf::internal::WireFormat::SkipField(
              input, tag, _internal_metadata_.mutable_unknown_fields()));
        break;
      }
    }
  }
success:
  // @@protoc_insertion_point(parse_success:proto3.TestExtensions)
  return true;
failure:
  // @@protoc_insertion_point(parse_failure:proto3.TestExtensions)
  return false;
#undef DO_
}

void TestExtensions::SerializeWithCachedSizes(
    ::google::protobuf::io::CodedOutputStream* output) const {
  // @@protoc_insertion_point(serialize_start:proto3.TestExtensions)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  // .protobuf_unittest.TestAllExtensions extensions = 1;
  if (this->has_extensions()) {
    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
      1, this->_internal_extensions(), output);
  }

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), output);
  }
  // @@protoc_insertion_point(serialize_end:proto3.TestExtensions)
}

::google::protobuf::uint8* TestExtensions::InternalSerializeWithCachedSizesToArray(
    bool deterministic, ::google::protobuf::uint8* target) const {
  (void)deterministic; // Unused
  // @@protoc_insertion_point(serialize_to_array_start:proto3.TestExtensions)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  // .protobuf_unittest.TestAllExtensions extensions = 1;
  if (this->has_extensions()) {
    target = ::google::protobuf::internal::WireFormatLite::
      InternalWriteMessageToArray(
        1, this->_internal_extensions(), deterministic, target);
  }

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), target);
  }
  // @@protoc_insertion_point(serialize_to_array_end:proto3.TestExtensions)
  return target;
}

size_t TestExtensions::ByteSizeLong() const {
// @@protoc_insertion_point(message_byte_size_start:proto3.TestExtensions)
  size_t total_size = 0;

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    total_size +=
      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()));
  }
  // .protobuf_unittest.TestAllExtensions extensions = 1;
  if (this->has_extensions()) {
    total_size += 1 +
      ::google::protobuf::internal::WireFormatLite::MessageSize(
        *extensions_);
  }

  int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
  SetCachedSize(cached_size);
  return total_size;
}

void TestExtensions::MergeFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_merge_from_start:proto3.TestExtensions)
  GOOGLE_DCHECK_NE(&from, this);
  const TestExtensions* source =
      ::google::protobuf::internal::DynamicCastToGenerated<const TestExtensions>(
          &from);
  if (source == NULL) {
  // @@protoc_insertion_point(generalized_merge_from_cast_fail:proto3.TestExtensions)
    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
  } else {
  // @@protoc_insertion_point(generalized_merge_from_cast_success:proto3.TestExtensions)
    MergeFrom(*source);
  }
}

void TestExtensions::MergeFrom(const TestExtensions& from) {
// @@protoc_insertion_point(class_specific_merge_from_start:proto3.TestExtensions)
  GOOGLE_DCHECK_NE(&from, this);
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  if (from.has_extensions()) {
    mutable_extensions()->::protobuf_unittest::TestAllExtensions::MergeFrom(from.extensions());
  }
}

void TestExtensions::CopyFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_copy_from_start:proto3.TestExtensions)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

void TestExtensions::CopyFrom(const TestExtensions& from) {
// @@protoc_insertion_point(class_specific_copy_from_start:proto3.TestExtensions)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

bool TestExtensions::IsInitialized() const {
  if (has_extensions()) {
    if (!this->extensions_->IsInitialized()) return false;
  }
  return true;
}

void TestExtensions::Swap(TestExtensions* other) {
  if (other == this) return;
  InternalSwap(other);
}
void TestExtensions::InternalSwap(TestExtensions* other) {
  using std::swap;
  swap(extensions_, other->extensions_);
  _internal_metadata_.Swap(&other->_internal_metadata_);
}

::google::protobuf::Metadata TestExtensions::GetMetadata() const {
  protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::file_level_metadata[kIndexInFileMessages];
}


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

void TestEnumValue::InitAsDefaultInstance() {
}
#if !defined(_MSC_VER) || _MSC_VER >= 1900
const int TestEnumValue::kEnumValue1FieldNumber;
const int TestEnumValue::kEnumValue2FieldNumber;
const int TestEnumValue::kEnumValue3FieldNumber;
#endif  // !defined(_MSC_VER) || _MSC_VER >= 1900

TestEnumValue::TestEnumValue()
  : ::google::protobuf::Message(), _internal_metadata_(NULL) {
  ::google::protobuf::internal::InitSCC(
      &protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::scc_info_TestEnumValue.base);
  SharedCtor();
  // @@protoc_insertion_point(constructor:proto3.TestEnumValue)
}
TestEnumValue::TestEnumValue(const TestEnumValue& from)
  : ::google::protobuf::Message(),
      _internal_metadata_(NULL) {
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  ::memcpy(&enum_value1_, &from.enum_value1_,
    static_cast<size_t>(reinterpret_cast<char*>(&enum_value3_) -
    reinterpret_cast<char*>(&enum_value1_)) + sizeof(enum_value3_));
  // @@protoc_insertion_point(copy_constructor:proto3.TestEnumValue)
}

void TestEnumValue::SharedCtor() {
  ::memset(&enum_value1_, 0, static_cast<size_t>(
      reinterpret_cast<char*>(&enum_value3_) -
      reinterpret_cast<char*>(&enum_value1_)) + sizeof(enum_value3_));
}

TestEnumValue::~TestEnumValue() {
  // @@protoc_insertion_point(destructor:proto3.TestEnumValue)
  SharedDtor();
}

void TestEnumValue::SharedDtor() {
}

void TestEnumValue::SetCachedSize(int size) const {
  _cached_size_.Set(size);
}
const ::google::protobuf::Descriptor* TestEnumValue::descriptor() {
  ::protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
}

const TestEnumValue& TestEnumValue::default_instance() {
  ::google::protobuf::internal::InitSCC(&protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::scc_info_TestEnumValue.base);
  return *internal_default_instance();
}


void TestEnumValue::Clear() {
// @@protoc_insertion_point(message_clear_start:proto3.TestEnumValue)
  ::google::protobuf::uint32 cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  ::memset(&enum_value1_, 0, static_cast<size_t>(
      reinterpret_cast<char*>(&enum_value3_) -
      reinterpret_cast<char*>(&enum_value1_)) + sizeof(enum_value3_));
  _internal_metadata_.Clear();
}

bool TestEnumValue::MergePartialFromCodedStream(
    ::google::protobuf::io::CodedInputStream* input) {
#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
  ::google::protobuf::uint32 tag;
  // @@protoc_insertion_point(parse_start:proto3.TestEnumValue)
  for (;;) {
    ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
    tag = p.first;
    if (!p.second) goto handle_unusual;
    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
      // .proto3.EnumType enum_value1 = 1;
      case 1: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(8u /* 8 & 0xFF */)) {
          int value;
          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                   int, ::google::protobuf::internal::WireFormatLite::TYPE_ENUM>(
                 input, &value)));
          set_enum_value1(static_cast< ::proto3::EnumType >(value));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // .proto3.EnumType enum_value2 = 2;
      case 2: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(16u /* 16 & 0xFF */)) {
          int value;
          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                   int, ::google::protobuf::internal::WireFormatLite::TYPE_ENUM>(
                 input, &value)));
          set_enum_value2(static_cast< ::proto3::EnumType >(value));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // .proto3.EnumType enum_value3 = 3;
      case 3: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(24u /* 24 & 0xFF */)) {
          int value;
          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                   int, ::google::protobuf::internal::WireFormatLite::TYPE_ENUM>(
                 input, &value)));
          set_enum_value3(static_cast< ::proto3::EnumType >(value));
        } else {
          goto handle_unusual;
        }
        break;
      }

      default: {
      handle_unusual:
        if (tag == 0) {
          goto success;
        }
        DO_(::google::protobuf::internal::WireFormat::SkipField(
              input, tag, _internal_metadata_.mutable_unknown_fields()));
        break;
      }
    }
  }
success:
  // @@protoc_insertion_point(parse_success:proto3.TestEnumValue)
  return true;
failure:
  // @@protoc_insertion_point(parse_failure:proto3.TestEnumValue)
  return false;
#undef DO_
}

void TestEnumValue::SerializeWithCachedSizes(
    ::google::protobuf::io::CodedOutputStream* output) const {
  // @@protoc_insertion_point(serialize_start:proto3.TestEnumValue)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  // .proto3.EnumType enum_value1 = 1;
  if (this->enum_value1() != 0) {
    ::google::protobuf::internal::WireFormatLite::WriteEnum(
      1, this->enum_value1(), output);
  }

  // .proto3.EnumType enum_value2 = 2;
  if (this->enum_value2() != 0) {
    ::google::protobuf::internal::WireFormatLite::WriteEnum(
      2, this->enum_value2(), output);
  }

  // .proto3.EnumType enum_value3 = 3;
  if (this->enum_value3() != 0) {
    ::google::protobuf::internal::WireFormatLite::WriteEnum(
      3, this->enum_value3(), output);
  }

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), output);
  }
  // @@protoc_insertion_point(serialize_end:proto3.TestEnumValue)
}

::google::protobuf::uint8* TestEnumValue::InternalSerializeWithCachedSizesToArray(
    bool deterministic, ::google::protobuf::uint8* target) const {
  (void)deterministic; // Unused
  // @@protoc_insertion_point(serialize_to_array_start:proto3.TestEnumValue)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  // .proto3.EnumType enum_value1 = 1;
  if (this->enum_value1() != 0) {
    target = ::google::protobuf::internal::WireFormatLite::WriteEnumToArray(
      1, this->enum_value1(), target);
  }

  // .proto3.EnumType enum_value2 = 2;
  if (this->enum_value2() != 0) {
    target = ::google::protobuf::internal::WireFormatLite::WriteEnumToArray(
      2, this->enum_value2(), target);
  }

  // .proto3.EnumType enum_value3 = 3;
  if (this->enum_value3() != 0) {
    target = ::google::protobuf::internal::WireFormatLite::WriteEnumToArray(
      3, this->enum_value3(), target);
  }

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), target);
  }
  // @@protoc_insertion_point(serialize_to_array_end:proto3.TestEnumValue)
  return target;
}

size_t TestEnumValue::ByteSizeLong() const {
// @@protoc_insertion_point(message_byte_size_start:proto3.TestEnumValue)
  size_t total_size = 0;

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    total_size +=
      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()));
  }
  // .proto3.EnumType enum_value1 = 1;
  if (this->enum_value1() != 0) {
    total_size += 1 +
      ::google::protobuf::internal::WireFormatLite::EnumSize(this->enum_value1());
  }

  // .proto3.EnumType enum_value2 = 2;
  if (this->enum_value2() != 0) {
    total_size += 1 +
      ::google::protobuf::internal::WireFormatLite::EnumSize(this->enum_value2());
  }

  // .proto3.EnumType enum_value3 = 3;
  if (this->enum_value3() != 0) {
    total_size += 1 +
      ::google::protobuf::internal::WireFormatLite::EnumSize(this->enum_value3());
  }

  int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
  SetCachedSize(cached_size);
  return total_size;
}

void TestEnumValue::MergeFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_merge_from_start:proto3.TestEnumValue)
  GOOGLE_DCHECK_NE(&from, this);
  const TestEnumValue* source =
      ::google::protobuf::internal::DynamicCastToGenerated<const TestEnumValue>(
          &from);
  if (source == NULL) {
  // @@protoc_insertion_point(generalized_merge_from_cast_fail:proto3.TestEnumValue)
    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
  } else {
  // @@protoc_insertion_point(generalized_merge_from_cast_success:proto3.TestEnumValue)
    MergeFrom(*source);
  }
}

void TestEnumValue::MergeFrom(const TestEnumValue& from) {
// @@protoc_insertion_point(class_specific_merge_from_start:proto3.TestEnumValue)
  GOOGLE_DCHECK_NE(&from, this);
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  if (from.enum_value1() != 0) {
    set_enum_value1(from.enum_value1());
  }
  if (from.enum_value2() != 0) {
    set_enum_value2(from.enum_value2());
  }
  if (from.enum_value3() != 0) {
    set_enum_value3(from.enum_value3());
  }
}

void TestEnumValue::CopyFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_copy_from_start:proto3.TestEnumValue)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

void TestEnumValue::CopyFrom(const TestEnumValue& from) {
// @@protoc_insertion_point(class_specific_copy_from_start:proto3.TestEnumValue)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

bool TestEnumValue::IsInitialized() const {
  return true;
}

void TestEnumValue::Swap(TestEnumValue* other) {
  if (other == this) return;
  InternalSwap(other);
}
void TestEnumValue::InternalSwap(TestEnumValue* other) {
  using std::swap;
  swap(enum_value1_, other->enum_value1_);
  swap(enum_value2_, other->enum_value2_);
  swap(enum_value3_, other->enum_value3_);
  _internal_metadata_.Swap(&other->_internal_metadata_);
}

::google::protobuf::Metadata TestEnumValue::GetMetadata() const {
  protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2fprotobuf_2futil_2fjson_5fformat_5fproto3_2eproto::file_level_metadata[kIndexInFileMessages];
}


// @@protoc_insertion_point(namespace_scope)
}  // namespace proto3
namespace google {
namespace protobuf {
template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::proto3::MessageType* Arena::CreateMaybeMessage< ::proto3::MessageType >(Arena* arena) {
  return Arena::CreateInternal< ::proto3::MessageType >(arena);
}
template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::proto3::TestMessage* Arena::CreateMaybeMessage< ::proto3::TestMessage >(Arena* arena) {
  return Arena::CreateInternal< ::proto3::TestMessage >(arena);
}
template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::proto3::TestOneof* Arena::CreateMaybeMessage< ::proto3::TestOneof >(Arena* arena) {
  return Arena::CreateInternal< ::proto3::TestOneof >(arena);
}
template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::proto3::TestMap_BoolMapEntry_DoNotUse* Arena::CreateMaybeMessage< ::proto3::TestMap_BoolMapEntry_DoNotUse >(Arena* arena) {
  return Arena::CreateInternal< ::proto3::TestMap_BoolMapEntry_DoNotUse >(arena);
}
template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::proto3::TestMap_Int32MapEntry_DoNotUse* Arena::CreateMaybeMessage< ::proto3::TestMap_Int32MapEntry_DoNotUse >(Arena* arena) {
  return Arena::CreateInternal< ::proto3::TestMap_Int32MapEntry_DoNotUse >(arena);
}
template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::proto3::TestMap_Int64MapEntry_DoNotUse* Arena::CreateMaybeMessage< ::proto3::TestMap_Int64MapEntry_DoNotUse >(Arena* arena) {
  return Arena::CreateInternal< ::proto3::TestMap_Int64MapEntry_DoNotUse >(arena);
}
template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::proto3::TestMap_Uint32MapEntry_DoNotUse* Arena::CreateMaybeMessage< ::proto3::TestMap_Uint32MapEntry_DoNotUse >(Arena* arena) {
  return Arena::CreateInternal< ::proto3::TestMap_Uint32MapEntry_DoNotUse >(arena);
}
template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::proto3::TestMap_Uint64MapEntry_DoNotUse* Arena::CreateMaybeMessage< ::proto3::TestMap_Uint64MapEntry_DoNotUse >(Arena* arena) {
  return Arena::CreateInternal< ::proto3::TestMap_Uint64MapEntry_DoNotUse >(arena);
}
template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::proto3::TestMap_StringMapEntry_DoNotUse* Arena::CreateMaybeMessage< ::proto3::TestMap_StringMapEntry_DoNotUse >(Arena* arena) {
  return Arena::CreateInternal< ::proto3::TestMap_StringMapEntry_DoNotUse >(arena);
}
template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::proto3::TestMap* Arena::CreateMaybeMessage< ::proto3::TestMap >(Arena* arena) {
  return Arena::CreateInternal< ::proto3::TestMap >(arena);
}
template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::proto3::TestNestedMap_BoolMapEntry_DoNotUse* Arena::CreateMaybeMessage< ::proto3::TestNestedMap_BoolMapEntry_DoNotUse >(Arena* arena) {
  return Arena::CreateInternal< ::proto3::TestNestedMap_BoolMapEntry_DoNotUse >(arena);
}
template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::proto3::TestNestedMap_Int32MapEntry_DoNotUse* Arena::CreateMaybeMessage< ::proto3::TestNestedMap_Int32MapEntry_DoNotUse >(Arena* arena) {
  return Arena::CreateInternal< ::proto3::TestNestedMap_Int32MapEntry_DoNotUse >(arena);
}
template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::proto3::TestNestedMap_Int64MapEntry_DoNotUse* Arena::CreateMaybeMessage< ::proto3::TestNestedMap_Int64MapEntry_DoNotUse >(Arena* arena) {
  return Arena::CreateInternal< ::proto3::TestNestedMap_Int64MapEntry_DoNotUse >(arena);
}
template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::proto3::TestNestedMap_Uint32MapEntry_DoNotUse* Arena::CreateMaybeMessage< ::proto3::TestNestedMap_Uint32MapEntry_DoNotUse >(Arena* arena) {
  return Arena::CreateInternal< ::proto3::TestNestedMap_Uint32MapEntry_DoNotUse >(arena);
}
template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::proto3::TestNestedMap_Uint64MapEntry_DoNotUse* Arena::CreateMaybeMessage< ::proto3::TestNestedMap_Uint64MapEntry_DoNotUse >(Arena* arena) {
  return Arena::CreateInternal< ::proto3::TestNestedMap_Uint64MapEntry_DoNotUse >(arena);
}
template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::proto3::TestNestedMap_StringMapEntry_DoNotUse* Arena::CreateMaybeMessage< ::proto3::TestNestedMap_StringMapEntry_DoNotUse >(Arena* arena) {
  return Arena::CreateInternal< ::proto3::TestNestedMap_StringMapEntry_DoNotUse >(arena);
}
template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::proto3::TestNestedMap_MapMapEntry_DoNotUse* Arena::CreateMaybeMessage< ::proto3::TestNestedMap_MapMapEntry_DoNotUse >(Arena* arena) {
  return Arena::CreateInternal< ::proto3::TestNestedMap_MapMapEntry_DoNotUse >(arena);
}
template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::proto3::TestNestedMap* Arena::CreateMaybeMessage< ::proto3::TestNestedMap >(Arena* arena) {
  return Arena::CreateInternal< ::proto3::TestNestedMap >(arena);
}
template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::proto3::TestWrapper* Arena::CreateMaybeMessage< ::proto3::TestWrapper >(Arena* arena) {
  return Arena::CreateInternal< ::proto3::TestWrapper >(arena);
}
template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::proto3::TestTimestamp* Arena::CreateMaybeMessage< ::proto3::TestTimestamp >(Arena* arena) {
  return Arena::CreateInternal< ::proto3::TestTimestamp >(arena);
}
template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::proto3::TestDuration* Arena::CreateMaybeMessage< ::proto3::TestDuration >(Arena* arena) {
  return Arena::CreateInternal< ::proto3::TestDuration >(arena);
}
template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::proto3::TestFieldMask* Arena::CreateMaybeMessage< ::proto3::TestFieldMask >(Arena* arena) {
  return Arena::CreateInternal< ::proto3::TestFieldMask >(arena);
}
template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::proto3::TestStruct* Arena::CreateMaybeMessage< ::proto3::TestStruct >(Arena* arena) {
  return Arena::CreateInternal< ::proto3::TestStruct >(arena);
}
template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::proto3::TestAny* Arena::CreateMaybeMessage< ::proto3::TestAny >(Arena* arena) {
  return Arena::CreateInternal< ::proto3::TestAny >(arena);
}
template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::proto3::TestValue* Arena::CreateMaybeMessage< ::proto3::TestValue >(Arena* arena) {
  return Arena::CreateInternal< ::proto3::TestValue >(arena);
}
template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::proto3::TestListValue* Arena::CreateMaybeMessage< ::proto3::TestListValue >(Arena* arena) {
  return Arena::CreateInternal< ::proto3::TestListValue >(arena);
}
template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::proto3::TestBoolValue_BoolMapEntry_DoNotUse* Arena::CreateMaybeMessage< ::proto3::TestBoolValue_BoolMapEntry_DoNotUse >(Arena* arena) {
  return Arena::CreateInternal< ::proto3::TestBoolValue_BoolMapEntry_DoNotUse >(arena);
}
template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::proto3::TestBoolValue* Arena::CreateMaybeMessage< ::proto3::TestBoolValue >(Arena* arena) {
  return Arena::CreateInternal< ::proto3::TestBoolValue >(arena);
}
template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::proto3::TestCustomJsonName* Arena::CreateMaybeMessage< ::proto3::TestCustomJsonName >(Arena* arena) {
  return Arena::CreateInternal< ::proto3::TestCustomJsonName >(arena);
}
template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::proto3::TestExtensions* Arena::CreateMaybeMessage< ::proto3::TestExtensions >(Arena* arena) {
  return Arena::CreateInternal< ::proto3::TestExtensions >(arena);
}
template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::proto3::TestEnumValue* Arena::CreateMaybeMessage< ::proto3::TestEnumValue >(Arena* arena) {
  return Arena::CreateInternal< ::proto3::TestEnumValue >(arena);
}
}  // namespace protobuf
}  // namespace google

// @@protoc_insertion_point(global_scope)
