text: /*
   * Copyright 2021 Google LLC
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *      http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  
  // Generated by the protocol buffer compiler.  DO NOT EDIT!
  // source: google/firestore/v1/document.proto
  
  #include "google/firestore/v1/document.pb.h"
  
  #include <algorithm>
  
  #include <google/protobuf/io/coded_stream.h>
  #include <google/protobuf/extension_set.h>
  #include <google/protobuf/wire_format_lite.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>
  // @@protoc_insertion_point(includes)
  #include <google/protobuf/port_def.inc>
  extern PROTOBUF_INTERNAL_EXPORT_google_2ffirestore_2fv1_2fdocument_2eproto ::PROTOBUF_NAMESPACE_ID::internal::SCCInfo<2> scc_info_ArrayValue_google_2ffirestore_2fv1_2fdocument_2eproto;
  extern PROTOBUF_INTERNAL_EXPORT_google_2ffirestore_2fv1_2fdocument_2eproto ::PROTOBUF_NAMESPACE_ID::internal::SCCInfo<1> scc_info_Document_FieldsEntry_DoNotUse_google_2ffirestore_2fv1_2fdocument_2eproto;
  extern PROTOBUF_INTERNAL_EXPORT_google_2fprotobuf_2ftimestamp_2eproto ::PROTOBUF_NAMESPACE_ID::internal::SCCInfo<0> scc_info_Timestamp_google_2fprotobuf_2ftimestamp_2eproto;
  extern PROTOBUF_INTERNAL_EXPORT_google_2ftype_2flatlng_2eproto ::PROTOBUF_NAMESPACE_ID::internal::SCCInfo<0> scc_info_LatLng_google_2ftype_2flatlng_2eproto;
  namespace google {
  namespace firestore {
  namespace v1 {
  class Document_FieldsEntry_DoNotUseDefaultTypeInternal {
   public:
    ::PROTOBUF_NAMESPACE_ID::internal::ExplicitlyConstructed<Document_FieldsEntry_DoNotUse> _instance;
  } _Document_FieldsEntry_DoNotUse_default_instance_;
  class DocumentDefaultTypeInternal {
   public:
    ::PROTOBUF_NAMESPACE_ID::internal::ExplicitlyConstructed<Document> _instance;
  } _Document_default_instance_;
  class ValueDefaultTypeInternal {
   public:
    ::PROTOBUF_NAMESPACE_ID::internal::ExplicitlyConstructed<Value> _instance;
    int null_value_;
    bool boolean_value_;
    ::PROTOBUF_NAMESPACE_ID::int64 integer_value_;
    double double_value_;
    const PROTOBUF_NAMESPACE_ID::Timestamp* timestamp_value_;
    ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr string_value_;
    ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr bytes_value_;
    ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr reference_value_;
    const ::google::type::LatLng* geo_point_value_;
    const ::google::firestore::v1::ArrayValue* array_value_;
    const ::google::firestore::v1::MapValue* map_value_;
  } _Value_default_instance_;
  class ArrayValueDefaultTypeInternal {
   public:
    ::PROTOBUF_NAMESPACE_ID::internal::ExplicitlyConstructed<ArrayValue> _instance;
  } _ArrayValue_default_instance_;
  class MapValue_FieldsEntry_DoNotUseDefaultTypeInternal {
   public:
    ::PROTOBUF_NAMESPACE_ID::internal::ExplicitlyConstructed<MapValue_FieldsEntry_DoNotUse> _instance;
  } _MapValue_FieldsEntry_DoNotUse_default_instance_;
  class MapValueDefaultTypeInternal {
   public:
    ::PROTOBUF_NAMESPACE_ID::internal::ExplicitlyConstructed<MapValue> _instance;
  } _MapValue_default_instance_;
  }  // namespace v1
  }  // namespace firestore
  }  // namespace google
  static void InitDefaultsscc_info_ArrayValue_google_2ffirestore_2fv1_2fdocument_2eproto() {
    GOOGLE_PROTOBUF_VERIFY_VERSION;
  
    {
      void* ptr = &::google::firestore::v1::_Value_default_instance_;
      new (ptr) ::google::firestore::v1::Value();
      ::PROTOBUF_NAMESPACE_ID::internal::OnShutdownDestroyMessage(ptr);
    }
    {
      void* ptr = &::google::firestore::v1::_ArrayValue_default_instance_;
      new (ptr) ::google::firestore::v1::ArrayValue();
      ::PROTOBUF_NAMESPACE_ID::internal::OnShutdownDestroyMessage(ptr);
    }
    {
      void* ptr = &::google::firestore::v1::_MapValue_FieldsEntry_DoNotUse_default_instance_;
      new (ptr) ::google::firestore::v1::MapValue_FieldsEntry_DoNotUse();
    }
    {
      void* ptr = &::google::firestore::v1::_MapValue_default_instance_;
      new (ptr) ::google::firestore::v1::MapValue();
      ::PROTOBUF_NAMESPACE_ID::internal::OnShutdownDestroyMessage(ptr);
    }
    ::google::firestore::v1::Value::InitAsDefaultInstance();
    ::google::firestore::v1::ArrayValue::InitAsDefaultInstance();
    ::google::firestore::v1::MapValue_FieldsEntry_DoNotUse::InitAsDefaultInstance();
    ::google::firestore::v1::MapValue::InitAsDefaultInstance();
  }
  
  ::PROTOBUF_NAMESPACE_ID::internal::SCCInfo<2> scc_info_ArrayValue_google_2ffirestore_2fv1_2fdocument_2eproto =
      {{ATOMIC_VAR_INIT(::PROTOBUF_NAMESPACE_ID::internal::SCCInfoBase::kUninitialized), 2, 0, InitDefaultsscc_info_ArrayValue_google_2ffirestore_2fv1_2fdocument_2eproto}, {
        &scc_info_Timestamp_google_2fprotobuf_2ftimestamp_2eproto.base,
        &scc_info_LatLng_google_2ftype_2flatlng_2eproto.base,}};
  
  static void InitDefaultsscc_info_Document_google_2ffirestore_2fv1_2fdocument_2eproto() {
    GOOGLE_PROTOBUF_VERIFY_VERSION;
  
    {
      void* ptr = &::google::firestore::v1::_Document_default_instance_;
      new (ptr) ::google::firestore::v1::Document();
      ::PROTOBUF_NAMESPACE_ID::internal::OnShutdownDestroyMessage(ptr);
    }
    ::google::firestore::v1::Document::InitAsDefaultInstance();
  }
  
  ::PROTOBUF_NAMESPACE_ID::internal::SCCInfo<2> scc_info_Document_google_2ffirestore_2fv1_2fdocument_2eproto =
      {{ATOMIC_VAR_INIT(::PROTOBUF_NAMESPACE_ID::internal::SCCInfoBase::kUninitialized), 2, 0, InitDefaultsscc_info_Document_google_2ffirestore_2fv1_2fdocument_2eproto}, {
        &scc_info_Document_FieldsEntry_DoNotUse_google_2ffirestore_2fv1_2fdocument_2eproto.base,
        &scc_info_Timestamp_google_2fprotobuf_2ftimestamp_2eproto.base,}};
  
  static void InitDefaultsscc_info_Document_FieldsEntry_DoNotUse_google_2ffirestore_2fv1_2fdocument_2eproto() {
    GOOGLE_PROTOBUF_VERIFY_VERSION;
  
    {
      void* ptr = &::google::firestore::v1::_Document_FieldsEntry_DoNotUse_default_instance_;
      new (ptr) ::google::firestore::v1::Document_FieldsEntry_DoNotUse();
    }
    ::google::firestore::v1::Document_FieldsEntry_DoNotUse::InitAsDefaultInstance();
  }
  
  ::PROTOBUF_NAMESPACE_ID::internal::SCCInfo<1> scc_info_Document_FieldsEntry_DoNotUse_google_2ffirestore_2fv1_2fdocument_2eproto =
      {{ATOMIC_VAR_INIT(::PROTOBUF_NAMESPACE_ID::internal::SCCInfoBase::kUninitialized), 1, 0, InitDefaultsscc_info_Document_FieldsEntry_DoNotUse_google_2ffirestore_2fv1_2fdocument_2eproto}, {
        &scc_info_ArrayValue_google_2ffirestore_2fv1_2fdocument_2eproto.base,}};
  
  static ::PROTOBUF_NAMESPACE_ID::Metadata file_level_metadata_google_2ffirestore_2fv1_2fdocument_2eproto[6];
  static constexpr ::PROTOBUF_NAMESPACE_ID::EnumDescriptor const** file_level_enum_descriptors_google_2ffirestore_2fv1_2fdocument_2eproto = nullptr;
  static constexpr ::PROTOBUF_NAMESPACE_ID::ServiceDescriptor const** file_level_service_descriptors_google_2ffirestore_2fv1_2fdocument_2eproto = nullptr;
  
  const ::PROTOBUF_NAMESPACE_ID::uint32 TableStruct_google_2ffirestore_2fv1_2fdocument_2eproto::offsets[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = {
    PROTOBUF_FIELD_OFFSET(::google::firestore::v1::Document_FieldsEntry_DoNotUse, _has_bits_),
    PROTOBUF_FIELD_OFFSET(::google::firestore::v1::Document_FieldsEntry_DoNotUse, _internal_metadata_),
    ~0u,  // no _extensions_
    ~0u,  // no _oneof_case_
    ~0u,  // no _weak_field_map_
    PROTOBUF_FIELD_OFFSET(::google::firestore::v1::Document_FieldsEntry_DoNotUse, key_),
    PROTOBUF_FIELD_OFFSET(::google::firestore::v1::Document_FieldsEntry_DoNotUse, value_),
    0,
    1,
    ~0u,  // no _has_bits_
    PROTOBUF_FIELD_OFFSET(::google::firestore::v1::Document, _internal_metadata_),
    ~0u,  // no _extensions_
    ~0u,  // no _oneof_case_
    ~0u,  // no _weak_field_map_
    PROTOBUF_FIELD_OFFSET(::google::firestore::v1::Document, name_),
    PROTOBUF_FIELD_OFFSET(::google::firestore::v1::Document, fields_),
    PROTOBUF_FIELD_OFFSET(::google::firestore::v1::Document, create_time_),
    PROTOBUF_FIELD_OFFSET(::google::firestore::v1::Document, update_time_),
    ~0u,  // no _has_bits_
    PROTOBUF_FIELD_OFFSET(::google::firestore::v1::Value, _internal_metadata_),
    ~0u,  // no _extensions_
    PROTOBUF_FIELD_OFFSET(::google::firestore::v1::Value, _oneof_case_[0]),
    ~0u,  // no _weak_field_map_
    offsetof(::google::firestore::v1::ValueDefaultTypeInternal, null_value_),
    offsetof(::google::firestore::v1::ValueDefaultTypeInternal, boolean_value_),
    offsetof(::google::firestore::v1::ValueDefaultTypeInternal, integer_value_),
    offsetof(::google::firestore::v1::ValueDefaultTypeInternal, double_value_),
    offsetof(::google::firestore::v1::ValueDefaultTypeInternal, timestamp_value_),
    offsetof(::google::firestore::v1::ValueDefaultTypeInternal, string_value_),
    offsetof(::google::firestore::v1::ValueDefaultTypeInternal, bytes_value_),
    offsetof(::google::firestore::v1::ValueDefaultTypeInternal, reference_value_),
    offsetof(::google::firestore::v1::ValueDefaultTypeInternal, geo_point_value_),
    offsetof(::google::firestore::v1::ValueDefaultTypeInternal, array_value_),
    offsetof(::google::firestore::v1::ValueDefaultTypeInternal, map_value_),
    PROTOBUF_FIELD_OFFSET(::google::firestore::v1::Value, value_type_),
    ~0u,  // no _has_bits_
    PROTOBUF_FIELD_OFFSET(::google::firestore::v1::ArrayValue, _internal_metadata_),
    ~0u,  // no _extensions_
    ~0u,  // no _oneof_case_
    ~0u,  // no _weak_field_map_
    PROTOBUF_FIELD_OFFSET(::google::firestore::v1::ArrayValue, values_),
    PROTOBUF_FIELD_OFFSET(::google::firestore::v1::MapValue_FieldsEntry_DoNotUse, _has_bits_),
    PROTOBUF_FIELD_OFFSET(::google::firestore::v1::MapValue_FieldsEntry_DoNotUse, _internal_metadata_),
    ~0u,  // no _extensions_
    ~0u,  // no _oneof_case_
    ~0u,  // no _weak_field_map_
    PROTOBUF_FIELD_OFFSET(::google::firestore::v1::MapValue_FieldsEntry_DoNotUse, key_),
    PROTOBUF_FIELD_OFFSET(::google::firestore::v1::MapValue_FieldsEntry_DoNotUse, value_),
    0,
    1,
    ~0u,  // no _has_bits_
    PROTOBUF_FIELD_OFFSET(::google::firestore::v1::MapValue, _internal_metadata_),
    ~0u,  // no _extensions_
    ~0u,  // no _oneof_case_
    ~0u,  // no _weak_field_map_
    PROTOBUF_FIELD_OFFSET(::google::firestore::v1::MapValue, fields_),
  };
  static const ::PROTOBUF_NAMESPACE_ID::internal::MigrationSchema schemas[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = {
    { 0, 7, sizeof(::google::firestore::v1::Document_FieldsEntry_DoNotUse)},
    { 9, -1, sizeof(::google::firestore::v1::Document)},
    { 18, -1, sizeof(::google::firestore::v1::Value)},
    { 35, -1, sizeof(::google::firestore::v1::ArrayValue)},
    { 41, 48, sizeof(::google::firestore::v1::MapValue_FieldsEntry_DoNotUse)},
    { 50, -1, sizeof(::google::firestore::v1::MapValue)},
  };
  
  static ::PROTOBUF_NAMESPACE_ID::Message const * const file_default_instances[] = {
    reinterpret_cast<const ::PROTOBUF_NAMESPACE_ID::Message*>(&::google::firestore::v1::_Document_FieldsEntry_DoNotUse_default_instance_),
    reinterpret_cast<const ::PROTOBUF_NAMESPACE_ID::Message*>(&::google::firestore::v1::_Document_default_instance_),
    reinterpret_cast<const ::PROTOBUF_NAMESPACE_ID::Message*>(&::google::firestore::v1::_Value_default_instance_),
    reinterpret_cast<const ::PROTOBUF_NAMESPACE_ID::Message*>(&::google::firestore::v1::_ArrayValue_default_instance_),
    reinterpret_cast<const ::PROTOBUF_NAMESPACE_ID::Message*>(&::google::firestore::v1::_MapValue_FieldsEntry_DoNotUse_default_instance_),
    reinterpret_cast<const ::PROTOBUF_NAMESPACE_ID::Message*>(&::google::firestore::v1::_MapValue_default_instance_),
  };
  
  const char descriptor_table_protodef_google_2ffirestore_2fv1_2fdocument_2eproto[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) =
    "\n\"google/firestore/v1/document.proto\022\023go"
    "ogle.firestore.v1\032\034google/api/annotation"
    "s.proto\032\034google/protobuf/struct.proto\032\037g"
    "oogle/protobuf/timestamp.proto\032\030google/t"
    "ype/latlng.proto\"\200\002\n\010Document\022\014\n\004name\030\001 "
    "\001(\t\0229\n\006fields\030\002 \003(\0132).google.firestore.v"
    "1.Document.FieldsEntry\022/\n\013create_time\030\003 "
    "\001(\0132\032.google.protobuf.Timestamp\022/\n\013updat"
    "e_time\030\004 \001(\0132\032.google.protobuf.Timestamp"
    "\032I\n\013FieldsEntry\022\013\n\003key\030\001 \001(\t\022)\n\005value\030\002 "
    "\001(\0132\032.google.firestore.v1.Value:\0028\001\"\256\003\n\005"
    "Value\0220\n\nnull_value\030\013 \001(\0162\032.google.proto"
    "buf.NullValueH\000\022\027\n\rboolean_value\030\001 \001(\010H\000"
    "\022\027\n\rinteger_value\030\002 \001(\003H\000\022\026\n\014double_valu"
    "e\030\003 \001(\001H\000\0225\n\017timestamp_value\030\n \001(\0132\032.goo"
    "gle.protobuf.TimestampH\000\022\026\n\014string_value"
    "\030\021 \001(\tH\000\022\025\n\013bytes_value\030\022 \001(\014H\000\022\031\n\017refer"
    "ence_value\030\005 \001(\tH\000\022.\n\017geo_point_value\030\010 "
    "\001(\0132\023.google.type.LatLngH\000\0226\n\013array_valu"
    "e\030\t \001(\0132\037.google.firestore.v1.ArrayValue"
    "H\000\0222\n\tmap_value\030\006 \001(\0132\035.google.firestore"
    ".v1.MapValueH\000B\014\n\nvalue_type\"8\n\nArrayVal"
    "ue\022*\n\006values\030\001 \003(\0132\032.google.firestore.v1"
    ".Value\"\220\001\n\010MapValue\0229\n\006fields\030\001 \003(\0132).go"
    "ogle.firestore.v1.MapValue.FieldsEntry\032I"
    "\n\013FieldsEntry\022\013\n\003key\030\001 \001(\t\022)\n\005value\030\002 \001("
    "\0132\032.google.firestore.v1.Value:\0028\001B\261\001\n\027co"
    "m.google.firestore.v1B\rDocumentProtoP\001Z<"
    "google.golang.org/genproto/googleapis/fi"
    "restore/v1;firestore\242\002\004GCFS\252\002\036Google.Clo"
    "ud.Firestore.V1Beta1\312\002\036Google\\Cloud\\Fire"
    "store\\V1beta1b\006proto3"
    ;
  static const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable*const descriptor_table_google_2ffirestore_2fv1_2fdocument_2eproto_deps[4] = {
    &::descriptor_table_google_2fapi_2fannotations_2eproto,
    &::descriptor_table_google_2fprotobuf_2fstruct_2eproto,
    &::descriptor_table_google_2fprotobuf_2ftimestamp_2eproto,
    &::descriptor_table_google_2ftype_2flatlng_2eproto,
  };
  static ::PROTOBUF_NAMESPACE_ID::internal::SCCInfoBase*const descriptor_table_google_2ffirestore_2fv1_2fdocument_2eproto_sccs[3] = {
    &scc_info_ArrayValue_google_2ffirestore_2fv1_2fdocument_2eproto.base,
    &scc_info_Document_google_2ffirestore_2fv1_2fdocument_2eproto.base,
    &scc_info_Document_FieldsEntry_DoNotUse_google_2ffirestore_2fv1_2fdocument_2eproto.base,
  };
  static ::PROTOBUF_NAMESPACE_ID::internal::once_flag descriptor_table_google_2ffirestore_2fv1_2fdocument_2eproto_once;
  static bool descriptor_table_google_2ffirestore_2fv1_2fdocument_2eproto_initialized = false;
  const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_google_2ffirestore_2fv1_2fdocument_2eproto = {
    &descriptor_table_google_2ffirestore_2fv1_2fdocument_2eproto_initialized, descriptor_table_protodef_google_2ffirestore_2fv1_2fdocument_2eproto, "google/firestore/v1/document.proto", 1261,
    &descriptor_table_google_2ffirestore_2fv1_2fdocument_2eproto_once, descriptor_table_google_2ffirestore_2fv1_2fdocument_2eproto_sccs, descriptor_table_google_2ffirestore_2fv1_2fdocument_2eproto_deps, 3, 4,
    schemas, file_default_instances, TableStruct_google_2ffirestore_2fv1_2fdocument_2eproto::offsets,
    file_level_metadata_google_2ffirestore_2fv1_2fdocument_2eproto, 6, file_level_enum_descriptors_google_2ffirestore_2fv1_2fdocument_2eproto, file_level_service_descriptors_google_2ffirestore_2fv1_2fdocument_2eproto,
  };
  
  // Force running AddDescriptors() at dynamic initialization time.
  static bool dynamic_init_dummy_google_2ffirestore_2fv1_2fdocument_2eproto = (  ::PROTOBUF_NAMESPACE_ID::internal::AddDescriptors(&descriptor_table_google_2ffirestore_2fv1_2fdocument_2eproto), true);
  namespace google {
  namespace firestore {
  namespace v1 {
  
  // ===================================================================
  
  Document_FieldsEntry_DoNotUse::Document_FieldsEntry_DoNotUse() {}
  Document_FieldsEntry_DoNotUse::Document_FieldsEntry_DoNotUse(::PROTOBUF_NAMESPACE_ID::Arena* arena)
      : SuperType(arena) {}
  void Document_FieldsEntry_DoNotUse::MergeFrom(const Document_FieldsEntry_DoNotUse& other) {
    MergeFromInternal(other);
  }
  ::PROTOBUF_NAMESPACE_ID::Metadata Document_FieldsEntry_DoNotUse::GetMetadata() const {
    return GetMetadataStatic();
  }
  void Document_FieldsEntry_DoNotUse::MergeFrom(
      const ::PROTOBUF_NAMESPACE_ID::Message& other) {
    ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom(other);
  }
  
  
  // ===================================================================
  
  void Document::InitAsDefaultInstance() {
    ::google::firestore::v1::_Document_default_instance_._instance.get_mutable()->create_time_ = const_cast< PROTOBUF_NAMESPACE_ID::Timestamp*>(
        PROTOBUF_NAMESPACE_ID::Timestamp::internal_default_instance());
    ::google::firestore::v1::_Document_default_instance_._instance.get_mutable()->update_time_ = const_cast< PROTOBUF_NAMESPACE_ID::Timestamp*>(
        PROTOBUF_NAMESPACE_ID::Timestamp::internal_default_instance());
  }
  class Document::_Internal {
   public:
    static const PROTOBUF_NAMESPACE_ID::Timestamp& create_time(const Document* msg);
    static const PROTOBUF_NAMESPACE_ID::Timestamp& update_time(const Document* msg);
  };
  
  const PROTOBUF_NAMESPACE_ID::Timestamp&
  Document::_Internal::create_time(const Document* msg) {
    return *msg->create_time_;
  }
  const PROTOBUF_NAMESPACE_ID::Timestamp&
  Document::_Internal::update_time(const Document* msg) {
    return *msg->update_time_;
  }
  void Document::clear_create_time() {
    if (GetArenaNoVirtual() == nullptr && create_time_ != nullptr) {
      delete create_time_;
    }
    create_time_ = nullptr;
  }
  void Document::clear_update_time() {
    if (GetArenaNoVirtual() == nullptr && update_time_ != nullptr) {
      delete update_time_;
    }
    update_time_ = nullptr;
  }
  Document::Document()
    : ::PROTOBUF_NAMESPACE_ID::Message(), _internal_metadata_(nullptr) {
    SharedCtor();
    // @@protoc_insertion_point(constructor:google.firestore.v1.Document)
  }
  Document::Document(const Document& from)
    : ::PROTOBUF_NAMESPACE_ID::Message(),
        _internal_metadata_(nullptr) {
    _internal_metadata_.MergeFrom(from._internal_metadata_);
    fields_.MergeFrom(from.fields_);
    name_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
    if (!from._internal_name().empty()) {
      name_.AssignWithDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), from.name_);
    }
    if (from._internal_has_create_time()) {
      create_time_ = new PROTOBUF_NAMESPACE_ID::Timestamp(*from.create_time_);
    } else {
      create_time_ = nullptr;
    }
    if (from._internal_has_update_time()) {
      update_time_ = new PROTOBUF_NAMESPACE_ID::Timestamp(*from.update_time_);
    } else {
      update_time_ = nullptr;
    }
    // @@protoc_insertion_point(copy_constructor:google.firestore.v1.Document)
  }
  
  void Document::SharedCtor() {
    ::PROTOBUF_NAMESPACE_ID::internal::InitSCC(&scc_info_Document_google_2ffirestore_2fv1_2fdocument_2eproto.base);
    name_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
    ::memset(&create_time_, 0, static_cast<size_t>(
        reinterpret_cast<char*>(&update_time_) -
        reinterpret_cast<char*>(&create_time_)) + sizeof(update_time_));
  }
  
  Document::~Document() {
    // @@protoc_insertion_point(destructor:google.firestore.v1.Document)
    SharedDtor();
  }
  
  void Document::SharedDtor() {
    name_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
    if (this != internal_default_instance()) delete create_time_;
    if (this != internal_default_instance()) delete update_time_;
  }
  
  void Document::SetCachedSize(int size) const {
    _cached_size_.Set(size);
  }
  const Document& Document::default_instance() {
    ::PROTOBUF_NAMESPACE_ID::internal::InitSCC(&::scc_info_Document_google_2ffirestore_2fv1_2fdocument_2eproto.base);
    return *internal_default_instance();
  }
  
  
  void Document::Clear() {
  // @@protoc_insertion_point(message_clear_start:google.firestore.v1.Document)
    ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
    // Prevent compiler warnings about cached_has_bits being unused
    (void) cached_has_bits;
  
    fields_.Clear();
    name_.ClearToEmptyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
    if (GetArenaNoVirtual() == nullptr && create_time_ != nullptr) {
      delete create_time_;
    }
    create_time_ = nullptr;
    if (GetArenaNoVirtual() == nullptr && update_time_ != nullptr) {
      delete update_time_;
    }
    update_time_ = nullptr;
    _internal_metadata_.Clear();
  }
  
  const char* Document::_InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) {
  #define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
    while (!ctx->Done(&ptr)) {
      ::PROTOBUF_NAMESPACE_ID::uint32 tag;
      ptr = ::PROTOBUF_NAMESPACE_ID::internal::ReadTag(ptr, &tag);
      CHK_(ptr);
      switch (tag >> 3) {
        // string name = 1;
        case 1:
          if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 10)) {
            auto str = _internal_mutable_name();
            ptr = ::PROTOBUF_NAMESPACE_ID::internal::InlineGreedyStringParser(str, ptr, ctx);
            CHK_(::PROTOBUF_NAMESPACE_ID::internal::VerifyUTF8(str, "google.firestore.v1.Document.name"));
            CHK_(ptr);
          } else goto handle_unusual;
          continue;
        // map<string, .google.firestore.v1.Value> fields = 2;
        case 2:
          if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 18)) {
            ptr -= 1;
            do {
              ptr += 1;
              ptr = ctx->ParseMessage(&fields_, ptr);
              CHK_(ptr);
              if (!ctx->DataAvailable(ptr)) break;
            } while (::PROTOBUF_NAMESPACE_ID::internal::ExpectTag<18>(ptr));
          } else goto handle_unusual;
          continue;
        // .google.protobuf.Timestamp create_time = 3;
        case 3:
          if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 26)) {
            ptr = ctx->ParseMessage(_internal_mutable_create_time(), ptr);
            CHK_(ptr);
          } else goto handle_unusual;
          continue;
        // .google.protobuf.Timestamp update_time = 4;
        case 4:
          if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 34)) {
            ptr = ctx->ParseMessage(_internal_mutable_update_time(), ptr);
            CHK_(ptr);
          } else goto handle_unusual;
          continue;
        default: {
        handle_unusual:
          if ((tag & 7) == 4 || tag == 0) {
            ctx->SetLastTag(tag);
            goto success;
          }
          ptr = UnknownFieldParse(tag, &_internal_metadata_, ptr, ctx);
          CHK_(ptr != nullptr);
          continue;
        }
      }  // switch
    }  // while
  success:
    return ptr;
  failure:
    ptr = nullptr;
    goto success;
  #undef CHK_
  }
  
  ::PROTOBUF_NAMESPACE_ID::uint8* Document::_InternalSerialize(
      ::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const {
    // @@protoc_insertion_point(serialize_to_array_start:google.firestore.v1.Document)
    ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    // string name = 1;
    if (this->name().size() > 0) {
      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
        this->_internal_name().data(), static_cast<int>(this->_internal_name().length()),
        ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
        "google.firestore.v1.Document.name");
      target = stream->WriteStringMaybeAliased(
          1, this->_internal_name(), target);
    }
  
    // map<string, .google.firestore.v1.Value> fields = 2;
    if (!this->_internal_fields().empty()) {
      typedef ::PROTOBUF_NAMESPACE_ID::Map< std::string, ::google::firestore::v1::Value >::const_pointer
          ConstPtr;
      typedef ConstPtr SortItem;
      typedef ::PROTOBUF_NAMESPACE_ID::internal::CompareByDerefFirst<SortItem> Less;
      struct Utf8Check {
        static void Check(ConstPtr p) {
          ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
            p->first.data(), static_cast<int>(p->first.length()),
            ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
            "google.firestore.v1.Document.FieldsEntry.key");
        }
      };
  
      if (stream->IsSerializationDeterministic() &&
          this->_internal_fields().size() > 1) {
        ::std::unique_ptr<SortItem[]> items(
            new SortItem[this->_internal_fields().size()]);
        typedef ::PROTOBUF_NAMESPACE_ID::Map< std::string, ::google::firestore::v1::Value >::size_type size_type;
        size_type n = 0;
        for (::PROTOBUF_NAMESPACE_ID::Map< std::string, ::google::firestore::v1::Value >::const_iterator
            it = this->_internal_fields().begin();
            it != this->_internal_fields().end(); ++it, ++n) {
          items[static_cast<ptrdiff_t>(n)] = SortItem(&*it);
        }
        ::std::sort(&items[0], &items[static_cast<ptrdiff_t>(n)], Less());
        for (size_type i = 0; i < n; i++) {
          target = Document_FieldsEntry_DoNotUse::Funcs::InternalSerialize(2, items[static_cast<ptrdiff_t>(i)]->first, items[static_cast<ptrdiff_t>(i)]->second, target, stream);
          Utf8Check::Check(&(*items[static_cast<ptrdiff_t>(i)]));
        }
      } else {
        for (::PROTOBUF_NAMESPACE_ID::Map< std::string, ::google::firestore::v1::Value >::const_iterator
            it = this->_internal_fields().begin();
            it != this->_internal_fields().end(); ++it) {
          target = Document_FieldsEntry_DoNotUse::Funcs::InternalSerialize(2, it->first, it->second, target, stream);
          Utf8Check::Check(&(*it));
        }
      }
    }
  
    // .google.protobuf.Timestamp create_time = 3;
    if (this->has_create_time()) {
      target = stream->EnsureSpace(target);
      target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
        InternalWriteMessage(
          3, _Internal::create_time(this), target, stream);
    }
  
    // .google.protobuf.Timestamp update_time = 4;
    if (this->has_update_time()) {
      target = stream->EnsureSpace(target);
      target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
        InternalWriteMessage(
          4, _Internal::update_time(this), target, stream);
    }
  
    if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
      target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormat::InternalSerializeUnknownFieldsToArray(
          _internal_metadata_.unknown_fields(), target, stream);
    }
    // @@protoc_insertion_point(serialize_to_array_end:google.firestore.v1.Document)
    return target;
  }
  
  size_t Document::ByteSizeLong() const {
  // @@protoc_insertion_point(message_byte_size_start:google.firestore.v1.Document)
    size_t total_size = 0;
  
    ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
    // Prevent compiler warnings about cached_has_bits being unused
    (void) cached_has_bits;
  
    // map<string, .google.firestore.v1.Value> fields = 2;
    total_size += 1 *
        ::PROTOBUF_NAMESPACE_ID::internal::FromIntSize(this->_internal_fields_size());
    for (::PROTOBUF_NAMESPACE_ID::Map< std::string, ::google::firestore::v1::Value >::const_iterator
        it = this->_internal_fields().begin();
        it != this->_internal_fields().end(); ++it) {
      total_size += Document_FieldsEntry_DoNotUse::Funcs::ByteSizeLong(it->first, it->second);
    }
  
    // string name = 1;
    if (this->name().size() > 0) {
      total_size += 1 +
        ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
          this->_internal_name());
    }
  
    // .google.protobuf.Timestamp create_time = 3;
    if (this->has_create_time()) {
      total_size += 1 +
        ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
          *create_time_);
    }
  
    // .google.protobuf.Timestamp update_time = 4;
    if (this->has_update_time()) {
      total_size += 1 +
        ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
          *update_time_);
    }
  
    if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
      return ::PROTOBUF_NAMESPACE_ID::internal::ComputeUnknownFieldsSize(
          _internal_metadata_, total_size, &_cached_size_);
    }
    int cached_size = ::PROTOBUF_NAMESPACE_ID::internal::ToCachedSize(total_size);
    SetCachedSize(cached_size);
    return total_size;
  }
  
  void Document::MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) {
  // @@protoc_insertion_point(generalized_merge_from_start:google.firestore.v1.Document)
    GOOGLE_DCHECK_NE(&from, this);
    const Document* source =
        ::PROTOBUF_NAMESPACE_ID::DynamicCastToGenerated<Document>(
            &from);
    if (source == nullptr) {
    // @@protoc_insertion_point(generalized_merge_from_cast_fail:google.firestore.v1.Document)
      ::PROTOBUF_NAMESPACE_ID::internal::ReflectionOps::Merge(from, this);
    } else {
    // @@protoc_insertion_point(generalized_merge_from_cast_success:google.firestore.v1.Document)
      MergeFrom(*source);
    }
  }
  
  void Document::MergeFrom(const Document& from) {
  // @@protoc_insertion_point(class_specific_merge_from_start:google.firestore.v1.Document)
    GOOGLE_DCHECK_NE(&from, this);
    _internal_metadata_.MergeFrom(from._internal_metadata_);
    ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    fields_.MergeFrom(from.fields_);
    if (from.name().size() > 0) {
  
      name_.AssignWithDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), from.name_);
    }
    if (from.has_create_time()) {
      _internal_mutable_create_time()->PROTOBUF_NAMESPACE_ID::Timestamp::MergeFrom(from._internal_create_time());
    }
    if (from.has_update_time()) {
      _internal_mutable_update_time()->PROTOBUF_NAMESPACE_ID::Timestamp::MergeFrom(from._internal_update_time());
    }
  }
  
  void Document::CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) {
  // @@protoc_insertion_point(generalized_copy_from_start:google.firestore.v1.Document)
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  void Document::CopyFrom(const Document& from) {
  // @@protoc_insertion_point(class_specific_copy_from_start:google.firestore.v1.Document)
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  bool Document::IsInitialized() const {
    return true;
  }
  
  void Document::InternalSwap(Document* other) {
    using std::swap;
    _internal_metadata_.Swap(&other->_internal_metadata_);
    fields_.Swap(&other->fields_);
    name_.Swap(&other->name_, &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(),
      GetArenaNoVirtual());
    swap(create_time_, other->create_time_);
    swap(update_time_, other->update_time_);
  }
  
  ::PROTOBUF_NAMESPACE_ID::Metadata Document::GetMetadata() const {
    return GetMetadataStatic();
  }
  
  
  // ===================================================================
  
  void Value::InitAsDefaultInstance() {
    ::google::firestore::v1::_Value_default_instance_.null_value_ = 0;
    ::google::firestore::v1::_Value_default_instance_.boolean_value_ = false;
    ::google::firestore::v1::_Value_default_instance_.integer_value_ = PROTOBUF_LONGLONG(0);
    ::google::firestore::v1::_Value_default_instance_.double_value_ = 0;
    ::google::firestore::v1::_Value_default_instance_.timestamp_value_ = const_cast< PROTOBUF_NAMESPACE_ID::Timestamp*>(
        PROTOBUF_NAMESPACE_ID::Timestamp::internal_default_instance());
    ::google::firestore::v1::_Value_default_instance_.string_value_.UnsafeSetDefault(
        &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
    ::google::firestore::v1::_Value_default_instance_.bytes_value_.UnsafeSetDefault(
        &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
    ::google::firestore::v1::_Value_default_instance_.reference_value_.UnsafeSetDefault(
        &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
    ::google::firestore::v1::_Value_default_instance_.geo_point_value_ = const_cast< ::google::type::LatLng*>(
        ::google::type::LatLng::internal_default_instance());
    ::google::firestore::v1::_Value_default_instance_.array_value_ = const_cast< ::google::firestore::v1::ArrayValue*>(
        ::google::firestore::v1::ArrayValue::internal_default_instance());
    ::google::firestore::v1::_Value_default_instance_.map_value_ = const_cast< ::google::firestore::v1::MapValue*>(
        ::google::firestore::v1::MapValue::internal_default_instance());
  }
  class Value::_Internal {
   public:
    static const PROTOBUF_NAMESPACE_ID::Timestamp& timestamp_value(const Value* msg);
    static const ::google::type::LatLng& geo_point_value(const Value* msg);
    static const ::google::firestore::v1::ArrayValue& array_value(const Value* msg);
    static const ::google::firestore::v1::MapValue& map_value(const Value* msg);
  };
  
  const PROTOBUF_NAMESPACE_ID::Timestamp&
  Value::_Internal::timestamp_value(const Value* msg) {
    return *msg->value_type_.timestamp_value_;
  }
  const ::google::type::LatLng&
  Value::_Internal::geo_point_value(const Value* msg) {
    return *msg->value_type_.geo_point_value_;
  }
  const ::google::firestore::v1::ArrayValue&
  Value::_Internal::array_value(const Value* msg) {
    return *msg->value_type_.array_value_;
  }
  const ::google::firestore::v1::MapValue&
  Value::_Internal::map_value(const Value* msg) {
    return *msg->value_type_.map_value_;
  }
  void Value::set_allocated_timestamp_value(PROTOBUF_NAMESPACE_ID::Timestamp* timestamp_value) {
    ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaNoVirtual();
    clear_value_type();
    if (timestamp_value) {
      ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(timestamp_value)->GetArena();
      if (message_arena != submessage_arena) {
        timestamp_value = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
            message_arena, timestamp_value, submessage_arena);
      }
      set_has_timestamp_value();
      value_type_.timestamp_value_ = timestamp_value;
    }
    // @@protoc_insertion_point(field_set_allocated:google.firestore.v1.Value.timestamp_value)
  }
  void Value::clear_timestamp_value() {
    if (_internal_has_timestamp_value()) {
      delete value_type_.timestamp_value_;
      clear_has_value_type();
    }
  }
  void Value::set_allocated_geo_point_value(::google::type::LatLng* geo_point_value) {
    ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaNoVirtual();
    clear_value_type();
    if (geo_point_value) {
      ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena = nullptr;
      if (message_arena != submessage_arena) {
        geo_point_value = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
            message_arena, geo_point_value, submessage_arena);
      }
      set_has_geo_point_value();
      value_type_.geo_point_value_ = geo_point_value;
    }
    // @@protoc_insertion_point(field_set_allocated:google.firestore.v1.Value.geo_point_value)
  }
  void Value::clear_geo_point_value() {
    if (_internal_has_geo_point_value()) {
      delete value_type_.geo_point_value_;
      clear_has_value_type();
    }
  }
  void Value::set_allocated_array_value(::google::firestore::v1::ArrayValue* array_value) {
    ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaNoVirtual();
    clear_value_type();
    if (array_value) {
      ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena = nullptr;
      if (message_arena != submessage_arena) {
        array_value = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
            message_arena, array_value, submessage_arena);
      }
      set_has_array_value();
      value_type_.array_value_ = array_value;
    }
    // @@protoc_insertion_point(field_set_allocated:google.firestore.v1.Value.array_value)
  }
  void Value::set_allocated_map_value(::google::firestore::v1::MapValue* map_value) {
    ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaNoVirtual();
    clear_value_type();
    if (map_value) {
      ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena = nullptr;
      if (message_arena != submessage_arena) {
        map_value = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
            message_arena, map_value, submessage_arena);
      }
      set_has_map_value();
      value_type_.map_value_ = map_value;
    }
    // @@protoc_insertion_point(field_set_allocated:google.firestore.v1.Value.map_value)
  }
  Value::Value()
    : ::PROTOBUF_NAMESPACE_ID::Message(), _internal_metadata_(nullptr) {
    SharedCtor();
    // @@protoc_insertion_point(constructor:google.firestore.v1.Value)
  }
  Value::Value(const Value& from)
    : ::PROTOBUF_NAMESPACE_ID::Message(),
        _internal_metadata_(nullptr) {
    _internal_metadata_.MergeFrom(from._internal_metadata_);
    clear_has_value_type();
    switch (from.value_type_case()) {
      case kNullValue: {
        _internal_set_null_value(from._internal_null_value());
        break;
      }
      case kBooleanValue: {
        _internal_set_boolean_value(from._internal_boolean_value());
        break;
      }
      case kIntegerValue: {
        _internal_set_integer_value(from._internal_integer_value());
        break;
      }
      case kDoubleValue: {
        _internal_set_double_value(from._internal_double_value());
        break;
      }
      case kTimestampValue: {
        _internal_mutable_timestamp_value()->PROTOBUF_NAMESPACE_ID::Timestamp::MergeFrom(from._internal_timestamp_value());
        break;
      }
      case kStringValue: {
        _internal_set_string_value(from._internal_string_value());
        break;
      }
      case kBytesValue: {
        _internal_set_bytes_value(from._internal_bytes_value());
        break;
      }
      case kReferenceValue: {
        _internal_set_reference_value(from._internal_reference_value());
        break;
      }
      case kGeoPointValue: {
        _internal_mutable_geo_point_value()->::google::type::LatLng::MergeFrom(from._internal_geo_point_value());
        break;
      }
      case kArrayValue: {
        _internal_mutable_array_value()->::google::firestore::v1::ArrayValue::MergeFrom(from._internal_array_value());
        break;
      }
      case kMapValue: {
        _internal_mutable_map_value()->::google::firestore::v1::MapValue::MergeFrom(from._internal_map_value());
        break;
      }
      case VALUE_TYPE_NOT_SET: {
        break;
      }
    }
    // @@protoc_insertion_point(copy_constructor:google.firestore.v1.Value)
  }
  
  void Value::SharedCtor() {
    ::PROTOBUF_NAMESPACE_ID::internal::InitSCC(&scc_info_ArrayValue_google_2ffirestore_2fv1_2fdocument_2eproto.base);
    clear_has_value_type();
  }
  
  Value::~Value() {
    // @@protoc_insertion_point(destructor:google.firestore.v1.Value)
    SharedDtor();
  }
  
  void Value::SharedDtor() {
    if (has_value_type()) {
      clear_value_type();
    }
  }
  
  void Value::SetCachedSize(int size) const {
    _cached_size_.Set(size);
  }
  const Value& Value::default_instance() {
    ::PROTOBUF_NAMESPACE_ID::internal::InitSCC(&::scc_info_ArrayValue_google_2ffirestore_2fv1_2fdocument_2eproto.base);
    return *internal_default_instance();
  }
  
  
  void Value::clear_value_type() {
  // @@protoc_insertion_point(one_of_clear_start:google.firestore.v1.Value)
    switch (value_type_case()) {
      case kNullValue: {
        // No need to clear
        break;
      }
      case kBooleanValue: {
        // No need to clear
        break;
      }
      case kIntegerValue: {
        // No need to clear
        break;
      }
      case kDoubleValue: {
        // No need to clear
        break;
      }
      case kTimestampValue: {
        delete value_type_.timestamp_value_;
        break;
      }
      case kStringValue: {
        value_type_.string_value_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
        break;
      }
      case kBytesValue: {
        value_type_.bytes_value_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
        break;
      }
      case kReferenceValue: {
        value_type_.reference_value_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
        break;
      }
      case kGeoPointValue: {
        delete value_type_.geo_point_value_;
        break;
      }
      case kArrayValue: {
        delete value_type_.array_value_;
        break;
      }
      case kMapValue: {
        delete value_type_.map_value_;
        break;
      }
      case VALUE_TYPE_NOT_SET: {
        break;
      }
    }
    _oneof_case_[0] = VALUE_TYPE_NOT_SET;
  }
  
  
  void Value::Clear() {
  // @@protoc_insertion_point(message_clear_start:google.firestore.v1.Value)
    ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
    // Prevent compiler warnings about cached_has_bits being unused
    (void) cached_has_bits;
  
    clear_value_type();
    _internal_metadata_.Clear();
  }
  
  const char* Value::_InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) {
  #define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
    while (!ctx->Done(&ptr)) {
      ::PROTOBUF_NAMESPACE_ID::uint32 tag;
      ptr = ::PROTOBUF_NAMESPACE_ID::internal::ReadTag(ptr, &tag);
      CHK_(ptr);
      switch (tag >> 3) {
        // bool boolean_value = 1;
        case 1:
          if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 8)) {
            _internal_set_boolean_value(::PROTOBUF_NAMESPACE_ID::internal::ReadVarint(&ptr));
            CHK_(ptr);
          } else goto handle_unusual;
          continue;
        // int64 integer_value = 2;
        case 2:
          if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 16)) {
            _internal_set_integer_value(::PROTOBUF_NAMESPACE_ID::internal::ReadVarint(&ptr));
            CHK_(ptr);
          } else goto handle_unusual;
          continue;
        // double double_value = 3;
        case 3:
          if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 25)) {
            _internal_set_double_value(::PROTOBUF_NAMESPACE_ID::internal::UnalignedLoad<double>(ptr));
            ptr += sizeof(double);
          } else goto handle_unusual;
          continue;
        // string reference_value = 5;
        case 5:
          if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 42)) {
            auto str = _internal_mutable_reference_value();
            ptr = ::PROTOBUF_NAMESPACE_ID::internal::InlineGreedyStringParser(str, ptr, ctx);
            CHK_(::PROTOBUF_NAMESPACE_ID::internal::VerifyUTF8(str, "google.firestore.v1.Value.reference_value"));
            CHK_(ptr);
          } else goto handle_unusual;
          continue;
        // .google.firestore.v1.MapValue map_value = 6;
        case 6:
          if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 50)) {
            ptr = ctx->ParseMessage(_internal_mutable_map_value(), ptr);
            CHK_(ptr);
          } else goto handle_unusual;
          continue;
        // .google.type.LatLng geo_point_value = 8;
        case 8:
          if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 66)) {
            ptr = ctx->ParseMessage(_internal_mutable_geo_point_value(), ptr);
            CHK_(ptr);
          } else goto handle_unusual;
          continue;
        // .google.firestore.v1.ArrayValue array_value = 9;
        case 9:
          if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 74)) {
            ptr = ctx->ParseMessage(_internal_mutable_array_value(), ptr);
            CHK_(ptr);
          } else goto handle_unusual;
          continue;
        // .google.protobuf.Timestamp timestamp_value = 10;
        case 10:
          if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 82)) {
            ptr = ctx->ParseMessage(_internal_mutable_timestamp_value(), ptr);
            CHK_(ptr);
          } else goto handle_unusual;
          continue;
        // .google.protobuf.NullValue null_value = 11;
        case 11:
          if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 88)) {
            ::PROTOBUF_NAMESPACE_ID::uint64 val = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint(&ptr);
            CHK_(ptr);
            _internal_set_null_value(static_cast<PROTOBUF_NAMESPACE_ID::NullValue>(val));
          } else goto handle_unusual;
          continue;
        // string string_value = 17;
        case 17:
          if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 138)) {
            auto str = _internal_mutable_string_value();
            ptr = ::PROTOBUF_NAMESPACE_ID::internal::InlineGreedyStringParser(str, ptr, ctx);
            CHK_(::PROTOBUF_NAMESPACE_ID::internal::VerifyUTF8(str, "google.firestore.v1.Value.string_value"));
            CHK_(ptr);
          } else goto handle_unusual;
          continue;
        // bytes bytes_value = 18;
        case 18:
          if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 146)) {
            auto str = _internal_mutable_bytes_value();
            ptr = ::PROTOBUF_NAMESPACE_ID::internal::InlineGreedyStringParser(str, ptr, ctx);
            CHK_(ptr);
          } else goto handle_unusual;
          continue;
        default: {
        handle_unusual:
          if ((tag & 7) == 4 || tag == 0) {
            ctx->SetLastTag(tag);
            goto success;
          }
          ptr = UnknownFieldParse(tag, &_internal_metadata_, ptr, ctx);
          CHK_(ptr != nullptr);
          continue;
        }
      }  // switch
    }  // while
  success:
    return ptr;
  failure:
    ptr = nullptr;
    goto success;
  #undef CHK_
  }
  
  ::PROTOBUF_NAMESPACE_ID::uint8* Value::_InternalSerialize(
      ::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const {
    // @@protoc_insertion_point(serialize_to_array_start:google.firestore.v1.Value)
    ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    // bool boolean_value = 1;
    if (_internal_has_boolean_value()) {
      target = stream->EnsureSpace(target);
      target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteBoolToArray(1, this->_internal_boolean_value(), target);
    }
  
    // int64 integer_value = 2;
    if (_internal_has_integer_value()) {
      target = stream->EnsureSpace(target);
      target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteInt64ToArray(2, this->_internal_integer_value(), target);
    }
  
    // double double_value = 3;
    if (_internal_has_double_value()) {
      target = stream->EnsureSpace(target);
      target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteDoubleToArray(3, this->_internal_double_value(), target);
    }
  
    // string reference_value = 5;
    if (_internal_has_reference_value()) {
      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
        this->_internal_reference_value().data(), static_cast<int>(this->_internal_reference_value().length()),
        ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
        "google.firestore.v1.Value.reference_value");
      target = stream->WriteStringMaybeAliased(
          5, this->_internal_reference_value(), target);
    }
  
    // .google.firestore.v1.MapValue map_value = 6;
    if (_internal_has_map_value()) {
      target = stream->EnsureSpace(target);
      target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
        InternalWriteMessage(
          6, _Internal::map_value(this), target, stream);
    }
  
    // .google.type.LatLng geo_point_value = 8;
    if (_internal_has_geo_point_value()) {
      target = stream->EnsureSpace(target);
      target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
        InternalWriteMessage(
          8, _Internal::geo_point_value(this), target, stream);
    }
  
    // .google.firestore.v1.ArrayValue array_value = 9;
    if (_internal_has_array_value()) {
      target = stream->EnsureSpace(target);
      target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
        InternalWriteMessage(
          9, _Internal::array_value(this), target, stream);
    }
  
    // .google.protobuf.Timestamp timestamp_value = 10;
    if (_internal_has_timestamp_value()) {
      target = stream->EnsureSpace(target);
      target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
        InternalWriteMessage(
          10, _Internal::timestamp_value(this), target, stream);
    }
  
    // .google.protobuf.NullValue null_value = 11;
    if (_internal_has_null_value()) {
      target = stream->EnsureSpace(target);
      target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteEnumToArray(
        11, this->_internal_null_value(), target);
    }
  
    // string string_value = 17;
    if (_internal_has_string_value()) {
      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
        this->_internal_string_value().data(), static_cast<int>(this->_internal_string_value().length()),
        ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
        "google.firestore.v1.Value.string_value");
      target = stream->WriteStringMaybeAliased(
          17, this->_internal_string_value(), target);
    }
  
    // bytes bytes_value = 18;
    if (_internal_has_bytes_value()) {
      target = stream->WriteBytesMaybeAliased(
          18, this->_internal_bytes_value(), target);
    }
  
    if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
      target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormat::InternalSerializeUnknownFieldsToArray(
          _internal_metadata_.unknown_fields(), target, stream);
    }
    // @@protoc_insertion_point(serialize_to_array_end:google.firestore.v1.Value)
    return target;
  }
  
  size_t Value::ByteSizeLong() const {
  // @@protoc_insertion_point(message_byte_size_start:google.firestore.v1.Value)
    size_t total_size = 0;
  
    ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
    // Prevent compiler warnings about cached_has_bits being unused
    (void) cached_has_bits;
  
    switch (value_type_case()) {
      // .google.protobuf.NullValue null_value = 11;
      case kNullValue: {
        total_size += 1 +
          ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::EnumSize(this->_internal_null_value());
        break;
      }
      // bool boolean_value = 1;
      case kBooleanValue: {
        total_size += 1 + 1;
        break;
      }
      // int64 integer_value = 2;
      case kIntegerValue: {
        total_size += 1 +
          ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::Int64Size(
            this->_internal_integer_value());
        break;
      }
      // double double_value = 3;
      case kDoubleValue: {
        total_size += 1 + 8;
        break;
      }
      // .google.protobuf.Timestamp timestamp_value = 10;
      case kTimestampValue: {
        total_size += 1 +
          ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
            *value_type_.timestamp_value_);
        break;
      }
      // string string_value = 17;
      case kStringValue: {
        total_size += 2 +
          ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
            this->_internal_string_value());
        break;
      }
      // bytes bytes_value = 18;
      case kBytesValue: {
        total_size += 2 +
          ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::BytesSize(
            this->_internal_bytes_value());
        break;
      }
      // string reference_value = 5;
      case kReferenceValue: {
        total_size += 1 +
          ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
            this->_internal_reference_value());
        break;
      }
      // .google.type.LatLng geo_point_value = 8;
      case kGeoPointValue: {
        total_size += 1 +
          ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
            *value_type_.geo_point_value_);
        break;
      }
      // .google.firestore.v1.ArrayValue array_value = 9;
      case kArrayValue: {
        total_size += 1 +
          ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
            *value_type_.array_value_);
        break;
      }
      // .google.firestore.v1.MapValue map_value = 6;
      case kMapValue: {
        total_size += 1 +
          ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
            *value_type_.map_value_);
        break;
      }
      case VALUE_TYPE_NOT_SET: {
        break;
      }
    }
    if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
      return ::PROTOBUF_NAMESPACE_ID::internal::ComputeUnknownFieldsSize(
          _internal_metadata_, total_size, &_cached_size_);
    }
    int cached_size = ::PROTOBUF_NAMESPACE_ID::internal::ToCachedSize(total_size);
    SetCachedSize(cached_size);
    return total_size;
  }
  
  void Value::MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) {
  // @@protoc_insertion_point(generalized_merge_from_start:google.firestore.v1.Value)
    GOOGLE_DCHECK_NE(&from, this);
    const Value* source =
        ::PROTOBUF_NAMESPACE_ID::DynamicCastToGenerated<Value>(
            &from);
    if (source == nullptr) {
    // @@protoc_insertion_point(generalized_merge_from_cast_fail:google.firestore.v1.Value)
      ::PROTOBUF_NAMESPACE_ID::internal::ReflectionOps::Merge(from, this);
    } else {
    // @@protoc_insertion_point(generalized_merge_from_cast_success:google.firestore.v1.Value)
      MergeFrom(*source);
    }
  }
  
  void Value::MergeFrom(const Value& from) {
  // @@protoc_insertion_point(class_specific_merge_from_start:google.firestore.v1.Value)
    GOOGLE_DCHECK_NE(&from, this);
    _internal_metadata_.MergeFrom(from._internal_metadata_);
    ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    switch (from.value_type_case()) {
      case kNullValue: {
        _internal_set_null_value(from._internal_null_value());
        break;
      }
      case kBooleanValue: {
        _internal_set_boolean_value(from._internal_boolean_value());
        break;
      }
      case kIntegerValue: {
        _internal_set_integer_value(from._internal_integer_value());
        break;
      }
      case kDoubleValue: {
        _internal_set_double_value(from._internal_double_value());
        break;
      }
      case kTimestampValue: {
        _internal_mutable_timestamp_value()->PROTOBUF_NAMESPACE_ID::Timestamp::MergeFrom(from._internal_timestamp_value());
        break;
      }
      case kStringValue: {
        _internal_set_string_value(from._internal_string_value());
        break;
      }
      case kBytesValue: {
        _internal_set_bytes_value(from._internal_bytes_value());
        break;
      }
      case kReferenceValue: {
        _internal_set_reference_value(from._internal_reference_value());
        break;
      }
      case kGeoPointValue: {
        _internal_mutable_geo_point_value()->::google::type::LatLng::MergeFrom(from._internal_geo_point_value());
        break;
      }
      case kArrayValue: {
        _internal_mutable_array_value()->::google::firestore::v1::ArrayValue::MergeFrom(from._internal_array_value());
        break;
      }
      case kMapValue: {
        _internal_mutable_map_value()->::google::firestore::v1::MapValue::MergeFrom(from._internal_map_value());
        break;
      }
      case VALUE_TYPE_NOT_SET: {
        break;
      }
    }
  }
  
  void Value::CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) {
  // @@protoc_insertion_point(generalized_copy_from_start:google.firestore.v1.Value)
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  void Value::CopyFrom(const Value& from) {
  // @@protoc_insertion_point(class_specific_copy_from_start:google.firestore.v1.Value)
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  bool Value::IsInitialized() const {
    return true;
  }
  
  void Value::InternalSwap(Value* other) {
    using std::swap;
    _internal_metadata_.Swap(&other->_internal_metadata_);
    swap(value_type_, other->value_type_);
    swap(_oneof_case_[0], other->_oneof_case_[0]);
  }
  
  ::PROTOBUF_NAMESPACE_ID::Metadata Value::GetMetadata() const {
    return GetMetadataStatic();
  }
  
  
  // ===================================================================
  
  void ArrayValue::InitAsDefaultInstance() {
  }
  class ArrayValue::_Internal {
   public:
  };
  
  ArrayValue::ArrayValue()
    : ::PROTOBUF_NAMESPACE_ID::Message(), _internal_metadata_(nullptr) {
    SharedCtor();
    // @@protoc_insertion_point(constructor:google.firestore.v1.ArrayValue)
  }
  ArrayValue::ArrayValue(const ArrayValue& from)
    : ::PROTOBUF_NAMESPACE_ID::Message(),
        _internal_metadata_(nullptr),
        values_(from.values_) {
    _internal_metadata_.MergeFrom(from._internal_metadata_);
    // @@protoc_insertion_point(copy_constructor:google.firestore.v1.ArrayValue)
  }
  
  void ArrayValue::SharedCtor() {
    ::PROTOBUF_NAMESPACE_ID::internal::InitSCC(&scc_info_ArrayValue_google_2ffirestore_2fv1_2fdocument_2eproto.base);
  }
  
  ArrayValue::~ArrayValue() {
    // @@protoc_insertion_point(destructor:google.firestore.v1.ArrayValue)
    SharedDtor();
  }
  
  void ArrayValue::SharedDtor() {
  }
  
  void ArrayValue::SetCachedSize(int size) const {
    _cached_size_.Set(size);
  }
  const ArrayValue& ArrayValue::default_instance() {
    ::PROTOBUF_NAMESPACE_ID::internal::InitSCC(&::scc_info_ArrayValue_google_2ffirestore_2fv1_2fdocument_2eproto.base);
    return *internal_default_instance();
  }
  
  
  void ArrayValue::Clear() {
  // @@protoc_insertion_point(message_clear_start:google.firestore.v1.ArrayValue)
    ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
    // Prevent compiler warnings about cached_has_bits being unused
    (void) cached_has_bits;
  
    values_.Clear();
    _internal_metadata_.Clear();
  }
  
  const char* ArrayValue::_InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) {
  #define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
    while (!ctx->Done(&ptr)) {
      ::PROTOBUF_NAMESPACE_ID::uint32 tag;
      ptr = ::PROTOBUF_NAMESPACE_ID::internal::ReadTag(ptr, &tag);
      CHK_(ptr);
      switch (tag >> 3) {
        // repeated .google.firestore.v1.Value values = 1;
        case 1:
          if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 10)) {
            ptr -= 1;
            do {
              ptr += 1;
              ptr = ctx->ParseMessage(_internal_add_values(), ptr);
              CHK_(ptr);
              if (!ctx->DataAvailable(ptr)) break;
            } while (::PROTOBUF_NAMESPACE_ID::internal::ExpectTag<10>(ptr));
          } else goto handle_unusual;
          continue;
        default: {
        handle_unusual:
          if ((tag & 7) == 4 || tag == 0) {
            ctx->SetLastTag(tag);
            goto success;
          }
          ptr = UnknownFieldParse(tag, &_internal_metadata_, ptr, ctx);
          CHK_(ptr != nullptr);
          continue;
        }
      }  // switch
    }  // while
  success:
    return ptr;
  failure:
    ptr = nullptr;
    goto success;
  #undef CHK_
  }
  
  ::PROTOBUF_NAMESPACE_ID::uint8* ArrayValue::_InternalSerialize(
      ::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const {
    // @@protoc_insertion_point(serialize_to_array_start:google.firestore.v1.ArrayValue)
    ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    // repeated .google.firestore.v1.Value values = 1;
    for (unsigned int i = 0,
        n = static_cast<unsigned int>(this->_internal_values_size()); i < n; i++) {
      target = stream->EnsureSpace(target);
      target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
        InternalWriteMessage(1, this->_internal_values(i), target, stream);
    }
  
    if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
      target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormat::InternalSerializeUnknownFieldsToArray(
          _internal_metadata_.unknown_fields(), target, stream);
    }
    // @@protoc_insertion_point(serialize_to_array_end:google.firestore.v1.ArrayValue)
    return target;
  }
  
  size_t ArrayValue::ByteSizeLong() const {
  // @@protoc_insertion_point(message_byte_size_start:google.firestore.v1.ArrayValue)
    size_t total_size = 0;
  
    ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
    // Prevent compiler warnings about cached_has_bits being unused
    (void) cached_has_bits;
  
    // repeated .google.firestore.v1.Value values = 1;
    total_size += 1UL * this->_internal_values_size();
    for (const auto& msg : this->values_) {
      total_size +=
        ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(msg);
    }
  
    if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
      return ::PROTOBUF_NAMESPACE_ID::internal::ComputeUnknownFieldsSize(
          _internal_metadata_, total_size, &_cached_size_);
    }
    int cached_size = ::PROTOBUF_NAMESPACE_ID::internal::ToCachedSize(total_size);
    SetCachedSize(cached_size);
    return total_size;
  }
  
  void ArrayValue::MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) {
  // @@protoc_insertion_point(generalized_merge_from_start:google.firestore.v1.ArrayValue)
    GOOGLE_DCHECK_NE(&from, this);
    const ArrayValue* source =
        ::PROTOBUF_NAMESPACE_ID::DynamicCastToGenerated<ArrayValue>(
            &from);
    if (source == nullptr) {
    // @@protoc_insertion_point(generalized_merge_from_cast_fail:google.firestore.v1.ArrayValue)
      ::PROTOBUF_NAMESPACE_ID::internal::ReflectionOps::Merge(from, this);
    } else {
    // @@protoc_insertion_point(generalized_merge_from_cast_success:google.firestore.v1.ArrayValue)
      MergeFrom(*source);
    }
  }
  
  void ArrayValue::MergeFrom(const ArrayValue& from) {
  // @@protoc_insertion_point(class_specific_merge_from_start:google.firestore.v1.ArrayValue)
    GOOGLE_DCHECK_NE(&from, this);
    _internal_metadata_.MergeFrom(from._internal_metadata_);
    ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    values_.MergeFrom(from.values_);
  }
  
  void ArrayValue::CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) {
  // @@protoc_insertion_point(generalized_copy_from_start:google.firestore.v1.ArrayValue)
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  void ArrayValue::CopyFrom(const ArrayValue& from) {
  // @@protoc_insertion_point(class_specific_copy_from_start:google.firestore.v1.ArrayValue)
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  bool ArrayValue::IsInitialized() const {
    return true;
  }
  
  void ArrayValue::InternalSwap(ArrayValue* other) {
    using std::swap;
    _internal_metadata_.Swap(&other->_internal_metadata_);
    values_.InternalSwap(&other->values_);
  }
  
  ::PROTOBUF_NAMESPACE_ID::Metadata ArrayValue::GetMetadata() const {
    return GetMetadataStatic();
  }
  
  
  // ===================================================================
  
  MapValue_FieldsEntry_DoNotUse::MapValue_FieldsEntry_DoNotUse() {}
  MapValue_FieldsEntry_DoNotUse::MapValue_FieldsEntry_DoNotUse(::PROTOBUF_NAMESPACE_ID::Arena* arena)
      : SuperType(arena) {}
  void MapValue_FieldsEntry_DoNotUse::MergeFrom(const MapValue_FieldsEntry_DoNotUse& other) {
    MergeFromInternal(other);
  }
  ::PROTOBUF_NAMESPACE_ID::Metadata MapValue_FieldsEntry_DoNotUse::GetMetadata() const {
    return GetMetadataStatic();
  }
  void MapValue_FieldsEntry_DoNotUse::MergeFrom(
      const ::PROTOBUF_NAMESPACE_ID::Message& other) {
    ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom(other);
  }
  
  
  // ===================================================================
  
  void MapValue::InitAsDefaultInstance() {
  }
  class MapValue::_Internal {
   public:
  };
  
  MapValue::MapValue()
    : ::PROTOBUF_NAMESPACE_ID::Message(), _internal_metadata_(nullptr) {
    SharedCtor();
    // @@protoc_insertion_point(constructor:google.firestore.v1.MapValue)
  }
  MapValue::MapValue(const MapValue& from)
    : ::PROTOBUF_NAMESPACE_ID::Message(),
        _internal_metadata_(nullptr) {
    _internal_metadata_.MergeFrom(from._internal_metadata_);
    fields_.MergeFrom(from.fields_);
    // @@protoc_insertion_point(copy_constructor:google.firestore.v1.MapValue)
  }
  
  void MapValue::SharedCtor() {
    ::PROTOBUF_NAMESPACE_ID::internal::InitSCC(&scc_info_ArrayValue_google_2ffirestore_2fv1_2fdocument_2eproto.base);
  }
  
  MapValue::~MapValue() {
    // @@protoc_insertion_point(destructor:google.firestore.v1.MapValue)
    SharedDtor();
  }
  
  void MapValue::SharedDtor() {
  }
  
  void MapValue::SetCachedSize(int size) const {
    _cached_size_.Set(size);
  }
  const MapValue& MapValue::default_instance() {
    ::PROTOBUF_NAMESPACE_ID::internal::InitSCC(&::scc_info_ArrayValue_google_2ffirestore_2fv1_2fdocument_2eproto.base);
    return *internal_default_instance();
  }
  
  
  void MapValue::Clear() {
  // @@protoc_insertion_point(message_clear_start:google.firestore.v1.MapValue)
    ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
    // Prevent compiler warnings about cached_has_bits being unused
    (void) cached_has_bits;
  
    fields_.Clear();
    _internal_metadata_.Clear();
  }
  
  const char* MapValue::_InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) {
  #define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
    while (!ctx->Done(&ptr)) {
      ::PROTOBUF_NAMESPACE_ID::uint32 tag;
      ptr = ::PROTOBUF_NAMESPACE_ID::internal::ReadTag(ptr, &tag);
      CHK_(ptr);
      switch (tag >> 3) {
        // map<string, .google.firestore.v1.Value> fields = 1;
        case 1:
          if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 10)) {
            ptr -= 1;
            do {
              ptr += 1;
              ptr = ctx->ParseMessage(&fields_, ptr);
              CHK_(ptr);
              if (!ctx->DataAvailable(ptr)) break;
            } while (::PROTOBUF_NAMESPACE_ID::internal::ExpectTag<10>(ptr));
          } else goto handle_unusual;
          continue;
        default: {
        handle_unusual:
          if ((tag & 7) == 4 || tag == 0) {
            ctx->SetLastTag(tag);
            goto success;
          }
          ptr = UnknownFieldParse(tag, &_internal_metadata_, ptr, ctx);
          CHK_(ptr != nullptr);
          continue;
        }
      }  // switch
    }  // while
  success:
    return ptr;
  failure:
    ptr = nullptr;
    goto success;
  #undef CHK_
  }
  
  ::PROTOBUF_NAMESPACE_ID::uint8* MapValue::_InternalSerialize(
      ::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const {
    // @@protoc_insertion_point(serialize_to_array_start:google.firestore.v1.MapValue)
    ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    // map<string, .google.firestore.v1.Value> fields = 1;
    if (!this->_internal_fields().empty()) {
      typedef ::PROTOBUF_NAMESPACE_ID::Map< std::string, ::google::firestore::v1::Value >::const_pointer
          ConstPtr;
      typedef ConstPtr SortItem;
      typedef ::PROTOBUF_NAMESPACE_ID::internal::CompareByDerefFirst<SortItem> Less;
      struct Utf8Check {
        static void Check(ConstPtr p) {
          ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
            p->first.data(), static_cast<int>(p->first.length()),
            ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
            "google.firestore.v1.MapValue.FieldsEntry.key");
        }
      };
  
      if (stream->IsSerializationDeterministic() &&
          this->_internal_fields().size() > 1) {
        ::std::unique_ptr<SortItem[]> items(
            new SortItem[this->_internal_fields().size()]);
        typedef ::PROTOBUF_NAMESPACE_ID::Map< std::string, ::google::firestore::v1::Value >::size_type size_type;
        size_type n = 0;
        for (::PROTOBUF_NAMESPACE_ID::Map< std::string, ::google::firestore::v1::Value >::const_iterator
            it = this->_internal_fields().begin();
            it != this->_internal_fields().end(); ++it, ++n) {
          items[static_cast<ptrdiff_t>(n)] = SortItem(&*it);
        }
        ::std::sort(&items[0], &items[static_cast<ptrdiff_t>(n)], Less());
        for (size_type i = 0; i < n; i++) {
          target = MapValue_FieldsEntry_DoNotUse::Funcs::InternalSerialize(1, items[static_cast<ptrdiff_t>(i)]->first, items[static_cast<ptrdiff_t>(i)]->second, target, stream);
          Utf8Check::Check(&(*items[static_cast<ptrdiff_t>(i)]));
        }
      } else {
        for (::PROTOBUF_NAMESPACE_ID::Map< std::string, ::google::firestore::v1::Value >::const_iterator
            it = this->_internal_fields().begin();
            it != this->_internal_fields().end(); ++it) {
          target = MapValue_FieldsEntry_DoNotUse::Funcs::InternalSerialize(1, it->first, it->second, target, stream);
          Utf8Check::Check(&(*it));
        }
      }
    }
  
    if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
      target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormat::InternalSerializeUnknownFieldsToArray(
          _internal_metadata_.unknown_fields(), target, stream);
    }
    // @@protoc_insertion_point(serialize_to_array_end:google.firestore.v1.MapValue)
    return target;
  }
  
  size_t MapValue::ByteSizeLong() const {
  // @@protoc_insertion_point(message_byte_size_start:google.firestore.v1.MapValue)
    size_t total_size = 0;
  
    ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
    // Prevent compiler warnings about cached_has_bits being unused
    (void) cached_has_bits;
  
    // map<string, .google.firestore.v1.Value> fields = 1;
    total_size += 1 *
        ::PROTOBUF_NAMESPACE_ID::internal::FromIntSize(this->_internal_fields_size());
    for (::PROTOBUF_NAMESPACE_ID::Map< std::string, ::google::firestore::v1::Value >::const_iterator
        it = this->_internal_fields().begin();
        it != this->_internal_fields().end(); ++it) {
      total_size += MapValue_FieldsEntry_DoNotUse::Funcs::ByteSizeLong(it->first, it->second);
    }
  
    if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
      return ::PROTOBUF_NAMESPACE_ID::internal::ComputeUnknownFieldsSize(
          _internal_metadata_, total_size, &_cached_size_);
    }
    int cached_size = ::PROTOBUF_NAMESPACE_ID::internal::ToCachedSize(total_size);
    SetCachedSize(cached_size);
    return total_size;
  }
  
  void MapValue::MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) {
  // @@protoc_insertion_point(generalized_merge_from_start:google.firestore.v1.MapValue)
    GOOGLE_DCHECK_NE(&from, this);
    const MapValue* source =
        ::PROTOBUF_NAMESPACE_ID::DynamicCastToGenerated<MapValue>(
            &from);
    if (source == nullptr) {
    // @@protoc_insertion_point(generalized_merge_from_cast_fail:google.firestore.v1.MapValue)
      ::PROTOBUF_NAMESPACE_ID::internal::ReflectionOps::Merge(from, this);
    } else {
    // @@protoc_insertion_point(generalized_merge_from_cast_success:google.firestore.v1.MapValue)
      MergeFrom(*source);
    }
  }
  
  void MapValue::MergeFrom(const MapValue& from) {
  // @@protoc_insertion_point(class_specific_merge_from_start:google.firestore.v1.MapValue)
    GOOGLE_DCHECK_NE(&from, this);
    _internal_metadata_.MergeFrom(from._internal_metadata_);
    ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
    (void) cached_has_bits;
  
    fields_.MergeFrom(from.fields_);
  }
  
  void MapValue::CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) {
  // @@protoc_insertion_point(generalized_copy_from_start:google.firestore.v1.MapValue)
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  void MapValue::CopyFrom(const MapValue& from) {
  // @@protoc_insertion_point(class_specific_copy_from_start:google.firestore.v1.MapValue)
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  bool MapValue::IsInitialized() const {
    return true;
  }
  
  void MapValue::InternalSwap(MapValue* other) {
    using std::swap;
    _internal_metadata_.Swap(&other->_internal_metadata_);
    fields_.Swap(&other->fields_);
  }
  
  ::PROTOBUF_NAMESPACE_ID::Metadata MapValue::GetMetadata() const {
    return GetMetadataStatic();
  }
  
  
  // @@protoc_insertion_point(namespace_scope)
  }  // namespace v1
  }  // namespace firestore
  }  // namespace google
  PROTOBUF_NAMESPACE_OPEN
  template<> PROTOBUF_NOINLINE ::google::firestore::v1::Document_FieldsEntry_DoNotUse* Arena::CreateMaybeMessage< ::google::firestore::v1::Document_FieldsEntry_DoNotUse >(Arena* arena) {
    return Arena::CreateInternal< ::google::firestore::v1::Document_FieldsEntry_DoNotUse >(arena);
  }
  template<> PROTOBUF_NOINLINE ::google::firestore::v1::Document* Arena::CreateMaybeMessage< ::google::firestore::v1::Document >(Arena* arena) {
    return Arena::CreateInternal< ::google::firestore::v1::Document >(arena);
  }
  template<> PROTOBUF_NOINLINE ::google::firestore::v1::Value* Arena::CreateMaybeMessage< ::google::firestore::v1::Value >(Arena* arena) {
    return Arena::CreateInternal< ::google::firestore::v1::Value >(arena);
  }
  template<> PROTOBUF_NOINLINE ::google::firestore::v1::ArrayValue* Arena::CreateMaybeMessage< ::google::firestore::v1::ArrayValue >(Arena* arena) {
    return Arena::CreateInternal< ::google::firestore::v1::ArrayValue >(arena);
  }
  template<> PROTOBUF_NOINLINE ::google::firestore::v1::MapValue_FieldsEntry_DoNotUse* Arena::CreateMaybeMessage< ::google::firestore::v1::MapValue_FieldsEntry_DoNotUse >(Arena* arena) {
    return Arena::CreateInternal< ::google::firestore::v1::MapValue_FieldsEntry_DoNotUse >(arena);
  }
  template<> PROTOBUF_NOINLINE ::google::firestore::v1::MapValue* Arena::CreateMaybeMessage< ::google::firestore::v1::MapValue >(Arena* arena) {
    return Arena::CreateInternal< ::google::firestore::v1::MapValue >(arena);
  }
  PROTOBUF_NAMESPACE_CLOSE
  
  // @@protoc_insertion_point(global_scope)
  #include <google/protobuf/port_undef.inc>
  