// Generated by the protocol buffer compiler.  DO NOT EDIT!
// NO CHECKED-IN PROTOBUF GENCODE
// source: components/optimization_guide/proto/features/product_specifications.proto
// Protobuf C++ Version: 7.35.1

#include "components/optimization_guide/proto/features/product_specifications.pb.h"

#include <algorithm>
#include <type_traits>
#include "google/protobuf/io/coded_stream.h"
#include "google/protobuf/generated_message_tctable_impl.h"
#include "google/protobuf/internal_visibility.h"
#include "google/protobuf/extension_set.h"
#include "google/protobuf/generated_message_util.h"
#include "google/protobuf/wire_format_lite.h"
#include "google/protobuf/io/zero_copy_stream_impl_lite.h"
// @@protoc_insertion_point(includes)

// Must be included last.
#include "google/protobuf/port_def.inc"
PROTOBUF_PRAGMA_INIT_SEG
namespace _pb = ::google::protobuf;
namespace _pbi = ::google::protobuf::internal;
namespace _fl = ::google::protobuf::internal::field_layout;
namespace optimization_guide {
namespace proto {
class ProductSpecificationSection::_Internal {
 public:
  using HasBits = decltype(::std::declval<ProductSpecificationSection>()._impl_._has_bits_);
  static constexpr ::int32_t kHasBitsOffset =
      8 * PROTOBUF_FIELD_OFFSET(ProductSpecificationSection, _impl_._has_bits_);
};

constexpr ProductSpecificationSection::ParseTableT_ ProductSpecificationSection::InternalGenerateParseTable_(const ::_pbi::ClassData* class_data) {
  return ParseTableT_{
    {
      PROTOBUF_FIELD_OFFSET(ProductSpecificationSection, _impl_._has_bits_),
      0, // no _extensions_
      2, 8,  // max_field_number, fast_idx_mask
      offsetof(ParseTableT_, field_lookup_table),
      4294967292,  // skipmap
      offsetof(ParseTableT_, field_entries),
      2,  // num_field_entries
      0,  // num_aux_entries
      offsetof(ParseTableT_, field_names),  // no aux_entries
      class_data,
      nullptr,  // post_loop_handler
      ::_pbi::TcParser::GenericFallbackLite,  // fallback
      #ifdef PROTOBUF_PREFETCH_PARSE_TABLE
      ::_pbi::TcParser::GetTable<::optimization_guide::proto::ProductSpecificationSection>(),  // to_prefetch
      #endif  // PROTOBUF_PREFETCH_PARSE_TABLE
    }, {{
      // string title = 2 [features = {
      {::_pbi::TcParser::FastUS1,
       {18, 1, 0,
        PROTOBUF_FIELD_OFFSET(ProductSpecificationSection, _impl_.title_)}},
      // string key = 1 [features = {
      {::_pbi::TcParser::FastUS1,
       {10, 0, 0,
        PROTOBUF_FIELD_OFFSET(ProductSpecificationSection, _impl_.key_)}},
    }}, {{
      65535, 65535
    }}, {{
      // string key = 1 [features = {
      {PROTOBUF_FIELD_OFFSET(ProductSpecificationSection, _impl_.key_), _Internal::kHasBitsOffset + 0, 0, (0 | ::_fl::kFcOptional | ::_fl::kUtf8String | ::_fl::kRepAString)},
      // string title = 2 [features = {
      {PROTOBUF_FIELD_OFFSET(ProductSpecificationSection, _impl_.title_), _Internal::kHasBitsOffset + 1, 0, (0 | ::_fl::kFcOptional | ::_fl::kUtf8String | ::_fl::kRepAString)},
    }},
    // no aux_entries
    {{
      "\64\3\5\0\0\0\0\0"
      "optimization_guide.proto.ProductSpecificationSection"
      "key"
      "title"
    }},
  };
}


inline constexpr ProductSpecificationSection::Impl_::Impl_(
    [[maybe_unused]] ::google::protobuf::internal::InternalVisibility visibility,
    ::_pbi::ConstantInitialized) noexcept
      : _cached_size_{0},
        key_(
            &::google::protobuf::internal::fixed_address_empty_string,
            ::_pbi::ConstantInitialized()),
        title_(
            &::google::protobuf::internal::fixed_address_empty_string,
            ::_pbi::ConstantInitialized()) {}

template <typename>
constexpr ProductSpecificationSection::ProductSpecificationSection(::_pbi::ConstantInitialized,
                       const ::_pbi::ClassData* PROTOBUF_NONNULL class_data)
    : ::google::protobuf::MessageLite(
#if defined(PROTOBUF_CUSTOM_VTABLE)
          class_data
#endif  // PROTOBUF_CUSTOM_VTABLE
          ),
      _impl_(internal_visibility(), ::_pbi::ConstantInitialized()) {
}
inline void* PROTOBUF_NONNULL ProductSpecificationSection::PlacementNew_(
    const void* PROTOBUF_NONNULL, void* PROTOBUF_NONNULL mem,
    ::google::protobuf::Arena* PROTOBUF_NULLABLE arena) {
  return ::new (mem) ProductSpecificationSection(arena);
}
constexpr auto ProductSpecificationSection::InternalNewImpl_() {
  return ::google::protobuf::internal::MessageCreator::CopyInit(sizeof(ProductSpecificationSection), alignof(ProductSpecificationSection));
}
constexpr auto ProductSpecificationSection::InternalGenerateClassData_(
    const MessageLite& prototype,
    const ::google::protobuf::internal::TcParseTableBase* tc_table) {
  return ::google::protobuf::internal::ClassDataLite{
      {
          &prototype,
#ifndef PROTOBUF_MESSAGE_GLOBALS
          &_table_.header,
#else
          tc_table,
#endif
          nullptr,  // IsInitialized
          &ProductSpecificationSection::MergeImpl,
          ::google::protobuf::MessageLite::GetNewImpl<ProductSpecificationSection>(),
#if defined(PROTOBUF_CUSTOM_VTABLE)
          &ProductSpecificationSection::SharedDtor,
          ::google::protobuf::MessageLite::GetClearImpl<ProductSpecificationSection>(), &ProductSpecificationSection::ByteSizeLong,
              &ProductSpecificationSection::_InternalSerialize,
#endif  // PROTOBUF_CUSTOM_VTABLE
          PROTOBUF_FIELD_OFFSET(ProductSpecificationSection, _impl_._cached_size_),
          true,
      },
      "optimization_guide.proto.ProductSpecificationSection",
  };
}
struct ProductSpecificationSectionGlobalsTypeInternal : ::_pbi::MessageGlobalsBase {
  constexpr ProductSpecificationSectionGlobalsTypeInternal()
      :
#ifndef PROTOBUF_MESSAGE_GLOBALS
        _default(::_pbi::ConstantInitialized{},
                 ProductSpecificationSection_class_data_.base())
#else   // !PROTOBUF_MESSAGE_GLOBALS
        MessageGlobalsBase(ProductSpecificationSection::InternalGenerateClassData_(
            _default, &ProductSpecificationSection_globals_._table.header)),
        _default(::_pbi::ConstantInitialized{}, GetClassData()),
        _table(::_pbi::PrivateAccess::GenerateParseTable<ProductSpecificationSection>(
            GetClassData()))
#endif  // PROTOBUF_MESSAGE_GLOBALS
  {
  }
  ~ProductSpecificationSectionGlobalsTypeInternal() {}
  union {
    alignas(::_pbi::kMaxMessageAlignment) ProductSpecificationSection _default;
  };
#ifdef PROTOBUF_MESSAGE_GLOBALS
  decltype(::_pbi::PrivateAccess::GenerateParseTable<ProductSpecificationSection>(
      ::std::declval<const ::_pbi::ClassData*>())) _table;
#endif
};
#ifdef PROTOBUF_MESSAGE_GLOBALS
static_assert(PROTOBUF_FIELD_OFFSET(ProductSpecificationSectionGlobalsTypeInternal, _default) ==
              ::_pbi::MessageGlobalsBase::OffsetToDefault());
#endif  // PROTOBUF_MESSAGE_GLOBALS

PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT
    PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 PROTOBUF_MESSAGE_GLOBALS_CONST ProductSpecificationSectionGlobalsTypeInternal ProductSpecificationSection_globals_
        PROTOBUF_MESSAGE_GLOBALS_SECTION(.data.rel.ro);
#if defined(PROTOBUF_CUSTOM_VTABLE)
namespace {
const ::_pbi::ClassData* ProductSpecificationSection_get_class_data() {
#ifdef PROTOBUF_MESSAGE_GLOBALS
  return ProductSpecificationSection_globals_.GetClassData();
#else
  return ProductSpecificationSection_class_data_.base();
#endif  // PROTOBUF_MESSAGE_GLOBALS
}
}  // namespace
#endif  // PROTOBUF_CUSTOM_VTABLE
class ProductSpecificationIdentifiers::_Internal {
 public:
  using HasBits = decltype(::std::declval<ProductSpecificationIdentifiers>()._impl_._has_bits_);
  static constexpr ::int32_t kHasBitsOffset =
      8 * PROTOBUF_FIELD_OFFSET(ProductSpecificationIdentifiers, _impl_._has_bits_);
};

constexpr ProductSpecificationIdentifiers::ParseTableT_ ProductSpecificationIdentifiers::InternalGenerateParseTable_(const ::_pbi::ClassData* class_data) {
  return ParseTableT_{
    {
      PROTOBUF_FIELD_OFFSET(ProductSpecificationIdentifiers, _impl_._has_bits_),
      0, // no _extensions_
      2, 8,  // max_field_number, fast_idx_mask
      offsetof(ParseTableT_, field_lookup_table),
      4294967292,  // skipmap
      offsetof(ParseTableT_, field_entries),
      2,  // num_field_entries
      0,  // num_aux_entries
      offsetof(ParseTableT_, field_names),  // no aux_entries
      class_data,
      nullptr,  // post_loop_handler
      ::_pbi::TcParser::GenericFallbackLite,  // fallback
      #ifdef PROTOBUF_PREFETCH_PARSE_TABLE
      ::_pbi::TcParser::GetTable<::optimization_guide::proto::ProductSpecificationIdentifiers>(),  // to_prefetch
      #endif  // PROTOBUF_PREFETCH_PARSE_TABLE
    }, {{
      // string mid = 2 [features = {
      {::_pbi::TcParser::FastUS1,
       {18, 0, 0,
        PROTOBUF_FIELD_OFFSET(ProductSpecificationIdentifiers, _impl_.mid_)}},
      // uint64 gpc_id = 1 [features = {
      {::_pbi::TcParser::FastV64S1,
       {8, 1, 0,
        PROTOBUF_FIELD_OFFSET(ProductSpecificationIdentifiers, _impl_.gpc_id_)}},
    }}, {{
      65535, 65535
    }}, {{
      // uint64 gpc_id = 1 [features = {
      {PROTOBUF_FIELD_OFFSET(ProductSpecificationIdentifiers, _impl_.gpc_id_), _Internal::kHasBitsOffset + 1, 0, (0 | ::_fl::kFcOptional | ::_fl::kUInt64)},
      // string mid = 2 [features = {
      {PROTOBUF_FIELD_OFFSET(ProductSpecificationIdentifiers, _impl_.mid_), _Internal::kHasBitsOffset + 0, 0, (0 | ::_fl::kFcOptional | ::_fl::kUtf8String | ::_fl::kRepAString)},
    }},
    // no aux_entries
    {{
      "\70\0\3\0\0\0\0\0"
      "optimization_guide.proto.ProductSpecificationIdentifiers"
      "mid"
    }},
  };
}


inline constexpr ProductSpecificationIdentifiers::Impl_::Impl_(
    [[maybe_unused]] ::google::protobuf::internal::InternalVisibility visibility,
    ::_pbi::ConstantInitialized) noexcept
      : _cached_size_{0},
        mid_(
            &::google::protobuf::internal::fixed_address_empty_string,
            ::_pbi::ConstantInitialized()),
        gpc_id_{::uint64_t{0u}} {}

template <typename>
constexpr ProductSpecificationIdentifiers::ProductSpecificationIdentifiers(::_pbi::ConstantInitialized,
                       const ::_pbi::ClassData* PROTOBUF_NONNULL class_data)
    : ::google::protobuf::MessageLite(
#if defined(PROTOBUF_CUSTOM_VTABLE)
          class_data
#endif  // PROTOBUF_CUSTOM_VTABLE
          ),
      _impl_(internal_visibility(), ::_pbi::ConstantInitialized()) {
}
inline void* PROTOBUF_NONNULL ProductSpecificationIdentifiers::PlacementNew_(
    const void* PROTOBUF_NONNULL, void* PROTOBUF_NONNULL mem,
    ::google::protobuf::Arena* PROTOBUF_NULLABLE arena) {
  return ::new (mem) ProductSpecificationIdentifiers(arena);
}
constexpr auto ProductSpecificationIdentifiers::InternalNewImpl_() {
  return ::google::protobuf::internal::MessageCreator::CopyInit(sizeof(ProductSpecificationIdentifiers), alignof(ProductSpecificationIdentifiers));
}
constexpr auto ProductSpecificationIdentifiers::InternalGenerateClassData_(
    const MessageLite& prototype,
    const ::google::protobuf::internal::TcParseTableBase* tc_table) {
  return ::google::protobuf::internal::ClassDataLite{
      {
          &prototype,
#ifndef PROTOBUF_MESSAGE_GLOBALS
          &_table_.header,
#else
          tc_table,
#endif
          nullptr,  // IsInitialized
          &ProductSpecificationIdentifiers::MergeImpl,
          ::google::protobuf::MessageLite::GetNewImpl<ProductSpecificationIdentifiers>(),
#if defined(PROTOBUF_CUSTOM_VTABLE)
          &ProductSpecificationIdentifiers::SharedDtor,
          ::google::protobuf::MessageLite::GetClearImpl<ProductSpecificationIdentifiers>(), &ProductSpecificationIdentifiers::ByteSizeLong,
              &ProductSpecificationIdentifiers::_InternalSerialize,
#endif  // PROTOBUF_CUSTOM_VTABLE
          PROTOBUF_FIELD_OFFSET(ProductSpecificationIdentifiers, _impl_._cached_size_),
          true,
      },
      "optimization_guide.proto.ProductSpecificationIdentifiers",
  };
}
struct ProductSpecificationIdentifiersGlobalsTypeInternal : ::_pbi::MessageGlobalsBase {
  constexpr ProductSpecificationIdentifiersGlobalsTypeInternal()
      :
#ifndef PROTOBUF_MESSAGE_GLOBALS
        _default(::_pbi::ConstantInitialized{},
                 ProductSpecificationIdentifiers_class_data_.base())
#else   // !PROTOBUF_MESSAGE_GLOBALS
        MessageGlobalsBase(ProductSpecificationIdentifiers::InternalGenerateClassData_(
            _default, &ProductSpecificationIdentifiers_globals_._table.header)),
        _default(::_pbi::ConstantInitialized{}, GetClassData()),
        _table(::_pbi::PrivateAccess::GenerateParseTable<ProductSpecificationIdentifiers>(
            GetClassData()))
#endif  // PROTOBUF_MESSAGE_GLOBALS
  {
  }
  ~ProductSpecificationIdentifiersGlobalsTypeInternal() {}
  union {
    alignas(::_pbi::kMaxMessageAlignment) ProductSpecificationIdentifiers _default;
  };
#ifdef PROTOBUF_MESSAGE_GLOBALS
  decltype(::_pbi::PrivateAccess::GenerateParseTable<ProductSpecificationIdentifiers>(
      ::std::declval<const ::_pbi::ClassData*>())) _table;
#endif
};
#ifdef PROTOBUF_MESSAGE_GLOBALS
static_assert(PROTOBUF_FIELD_OFFSET(ProductSpecificationIdentifiersGlobalsTypeInternal, _default) ==
              ::_pbi::MessageGlobalsBase::OffsetToDefault());
#endif  // PROTOBUF_MESSAGE_GLOBALS

PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT
    PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 PROTOBUF_MESSAGE_GLOBALS_CONST ProductSpecificationIdentifiersGlobalsTypeInternal ProductSpecificationIdentifiers_globals_
        PROTOBUF_MESSAGE_GLOBALS_SECTION(.data.rel.ro);
#if defined(PROTOBUF_CUSTOM_VTABLE)
namespace {
const ::_pbi::ClassData* ProductSpecificationIdentifiers_get_class_data() {
#ifdef PROTOBUF_MESSAGE_GLOBALS
  return ProductSpecificationIdentifiers_globals_.GetClassData();
#else
  return ProductSpecificationIdentifiers_class_data_.base();
#endif  // PROTOBUF_MESSAGE_GLOBALS
}
}  // namespace
#endif  // PROTOBUF_CUSTOM_VTABLE
class ProductIdentifier::_Internal {
 public:
  using HasBits = decltype(::std::declval<ProductIdentifier>()._impl_._has_bits_);
  static constexpr ::int32_t kHasBitsOffset =
      8 * PROTOBUF_FIELD_OFFSET(ProductIdentifier, _impl_._has_bits_);
};

constexpr ProductIdentifier::ParseTableT_ ProductIdentifier::InternalGenerateParseTable_(const ::_pbi::ClassData* class_data) {
  return ParseTableT_{
    {
      PROTOBUF_FIELD_OFFSET(ProductIdentifier, _impl_._has_bits_),
      0, // no _extensions_
      2, 8,  // max_field_number, fast_idx_mask
      offsetof(ParseTableT_, field_lookup_table),
      4294967292,  // skipmap
      offsetof(ParseTableT_, field_entries),
      2,  // num_field_entries
      0,  // num_aux_entries
      offsetof(ParseTableT_, field_names),  // no aux_entries
      class_data,
      nullptr,  // post_loop_handler
      ::_pbi::TcParser::GenericFallbackLite,  // fallback
      #ifdef PROTOBUF_PREFETCH_PARSE_TABLE
      ::_pbi::TcParser::GetTable<::optimization_guide::proto::ProductIdentifier>(),  // to_prefetch
      #endif  // PROTOBUF_PREFETCH_PARSE_TABLE
    }, {{
      // string product_url = 2 [features = {
      {::_pbi::TcParser::FastUS1,
       {18, 0, 0,
        PROTOBUF_FIELD_OFFSET(ProductIdentifier, _impl_.product_url_)}},
      // uint64 gpc_id = 1 [features = {
      {::_pbi::TcParser::FastV64S1,
       {8, 1, 0,
        PROTOBUF_FIELD_OFFSET(ProductIdentifier, _impl_.gpc_id_)}},
    }}, {{
      65535, 65535
    }}, {{
      // uint64 gpc_id = 1 [features = {
      {PROTOBUF_FIELD_OFFSET(ProductIdentifier, _impl_.gpc_id_), _Internal::kHasBitsOffset + 1, 0, (0 | ::_fl::kFcOptional | ::_fl::kUInt64)},
      // string product_url = 2 [features = {
      {PROTOBUF_FIELD_OFFSET(ProductIdentifier, _impl_.product_url_), _Internal::kHasBitsOffset + 0, 0, (0 | ::_fl::kFcOptional | ::_fl::kUtf8String | ::_fl::kRepAString)},
    }},
    // no aux_entries
    {{
      "\52\0\13\0\0\0\0\0"
      "optimization_guide.proto.ProductIdentifier"
      "product_url"
    }},
  };
}


inline constexpr ProductIdentifier::Impl_::Impl_(
    [[maybe_unused]] ::google::protobuf::internal::InternalVisibility visibility,
    ::_pbi::ConstantInitialized) noexcept
      : _cached_size_{0},
        product_url_(
            &::google::protobuf::internal::fixed_address_empty_string,
            ::_pbi::ConstantInitialized()),
        gpc_id_{::uint64_t{0u}} {}

template <typename>
constexpr ProductIdentifier::ProductIdentifier(::_pbi::ConstantInitialized,
                       const ::_pbi::ClassData* PROTOBUF_NONNULL class_data)
    : ::google::protobuf::MessageLite(
#if defined(PROTOBUF_CUSTOM_VTABLE)
          class_data
#endif  // PROTOBUF_CUSTOM_VTABLE
          ),
      _impl_(internal_visibility(), ::_pbi::ConstantInitialized()) {
}
inline void* PROTOBUF_NONNULL ProductIdentifier::PlacementNew_(
    const void* PROTOBUF_NONNULL, void* PROTOBUF_NONNULL mem,
    ::google::protobuf::Arena* PROTOBUF_NULLABLE arena) {
  return ::new (mem) ProductIdentifier(arena);
}
constexpr auto ProductIdentifier::InternalNewImpl_() {
  return ::google::protobuf::internal::MessageCreator::CopyInit(sizeof(ProductIdentifier), alignof(ProductIdentifier));
}
constexpr auto ProductIdentifier::InternalGenerateClassData_(
    const MessageLite& prototype,
    const ::google::protobuf::internal::TcParseTableBase* tc_table) {
  return ::google::protobuf::internal::ClassDataLite{
      {
          &prototype,
#ifndef PROTOBUF_MESSAGE_GLOBALS
          &_table_.header,
#else
          tc_table,
#endif
          nullptr,  // IsInitialized
          &ProductIdentifier::MergeImpl,
          ::google::protobuf::MessageLite::GetNewImpl<ProductIdentifier>(),
#if defined(PROTOBUF_CUSTOM_VTABLE)
          &ProductIdentifier::SharedDtor,
          ::google::protobuf::MessageLite::GetClearImpl<ProductIdentifier>(), &ProductIdentifier::ByteSizeLong,
              &ProductIdentifier::_InternalSerialize,
#endif  // PROTOBUF_CUSTOM_VTABLE
          PROTOBUF_FIELD_OFFSET(ProductIdentifier, _impl_._cached_size_),
          true,
      },
      "optimization_guide.proto.ProductIdentifier",
  };
}
struct ProductIdentifierGlobalsTypeInternal : ::_pbi::MessageGlobalsBase {
  constexpr ProductIdentifierGlobalsTypeInternal()
      :
#ifndef PROTOBUF_MESSAGE_GLOBALS
        _default(::_pbi::ConstantInitialized{},
                 ProductIdentifier_class_data_.base())
#else   // !PROTOBUF_MESSAGE_GLOBALS
        MessageGlobalsBase(ProductIdentifier::InternalGenerateClassData_(
            _default, &ProductIdentifier_globals_._table.header)),
        _default(::_pbi::ConstantInitialized{}, GetClassData()),
        _table(::_pbi::PrivateAccess::GenerateParseTable<ProductIdentifier>(
            GetClassData()))
#endif  // PROTOBUF_MESSAGE_GLOBALS
  {
  }
  ~ProductIdentifierGlobalsTypeInternal() {}
  union {
    alignas(::_pbi::kMaxMessageAlignment) ProductIdentifier _default;
  };
#ifdef PROTOBUF_MESSAGE_GLOBALS
  decltype(::_pbi::PrivateAccess::GenerateParseTable<ProductIdentifier>(
      ::std::declval<const ::_pbi::ClassData*>())) _table;
#endif
};
#ifdef PROTOBUF_MESSAGE_GLOBALS
static_assert(PROTOBUF_FIELD_OFFSET(ProductIdentifierGlobalsTypeInternal, _default) ==
              ::_pbi::MessageGlobalsBase::OffsetToDefault());
#endif  // PROTOBUF_MESSAGE_GLOBALS

PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT
    PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 PROTOBUF_MESSAGE_GLOBALS_CONST ProductIdentifierGlobalsTypeInternal ProductIdentifier_globals_
        PROTOBUF_MESSAGE_GLOBALS_SECTION(.data.rel.ro);
#if defined(PROTOBUF_CUSTOM_VTABLE)
namespace {
const ::_pbi::ClassData* ProductIdentifier_get_class_data() {
#ifdef PROTOBUF_MESSAGE_GLOBALS
  return ProductIdentifier_globals_.GetClassData();
#else
  return ProductIdentifier_class_data_.base();
#endif  // PROTOBUF_MESSAGE_GLOBALS
}
}  // namespace
#endif  // PROTOBUF_CUSTOM_VTABLE
class DescriptionText_ReferenceUrl::_Internal {
 public:
  using HasBits = decltype(::std::declval<DescriptionText_ReferenceUrl>()._impl_._has_bits_);
  static constexpr ::int32_t kHasBitsOffset =
      8 * PROTOBUF_FIELD_OFFSET(DescriptionText_ReferenceUrl, _impl_._has_bits_);
};

constexpr DescriptionText_ReferenceUrl::ParseTableT_ DescriptionText_ReferenceUrl::InternalGenerateParseTable_(const ::_pbi::ClassData* class_data) {
  return ParseTableT_{
    {
      PROTOBUF_FIELD_OFFSET(DescriptionText_ReferenceUrl, _impl_._has_bits_),
      0, // no _extensions_
      4, 24,  // max_field_number, fast_idx_mask
      offsetof(ParseTableT_, field_lookup_table),
      4294967280,  // skipmap
      offsetof(ParseTableT_, field_entries),
      4,  // num_field_entries
      0,  // num_aux_entries
      offsetof(ParseTableT_, field_names),  // no aux_entries
      class_data,
      nullptr,  // post_loop_handler
      ::_pbi::TcParser::GenericFallbackLite,  // fallback
      #ifdef PROTOBUF_PREFETCH_PARSE_TABLE
      ::_pbi::TcParser::GetTable<::optimization_guide::proto::DescriptionText_ReferenceUrl>(),  // to_prefetch
      #endif  // PROTOBUF_PREFETCH_PARSE_TABLE
    }, {{
      // string thumbail_image_url = 4 [features = {
      {::_pbi::TcParser::FastUS1,
       {34, 3, 0,
        PROTOBUF_FIELD_OFFSET(DescriptionText_ReferenceUrl, _impl_.thumbail_image_url_)}},
      // string url = 1 [features = {
      {::_pbi::TcParser::FastUS1,
       {10, 0, 0,
        PROTOBUF_FIELD_OFFSET(DescriptionText_ReferenceUrl, _impl_.url_)}},
      // string title = 2 [features = {
      {::_pbi::TcParser::FastUS1,
       {18, 1, 0,
        PROTOBUF_FIELD_OFFSET(DescriptionText_ReferenceUrl, _impl_.title_)}},
      // string favicon_url = 3 [features = {
      {::_pbi::TcParser::FastUS1,
       {26, 2, 0,
        PROTOBUF_FIELD_OFFSET(DescriptionText_ReferenceUrl, _impl_.favicon_url_)}},
    }}, {{
      65535, 65535
    }}, {{
      // string url = 1 [features = {
      {PROTOBUF_FIELD_OFFSET(DescriptionText_ReferenceUrl, _impl_.url_), _Internal::kHasBitsOffset + 0, 0, (0 | ::_fl::kFcOptional | ::_fl::kUtf8String | ::_fl::kRepAString)},
      // string title = 2 [features = {
      {PROTOBUF_FIELD_OFFSET(DescriptionText_ReferenceUrl, _impl_.title_), _Internal::kHasBitsOffset + 1, 0, (0 | ::_fl::kFcOptional | ::_fl::kUtf8String | ::_fl::kRepAString)},
      // string favicon_url = 3 [features = {
      {PROTOBUF_FIELD_OFFSET(DescriptionText_ReferenceUrl, _impl_.favicon_url_), _Internal::kHasBitsOffset + 2, 0, (0 | ::_fl::kFcOptional | ::_fl::kUtf8String | ::_fl::kRepAString)},
      // string thumbail_image_url = 4 [features = {
      {PROTOBUF_FIELD_OFFSET(DescriptionText_ReferenceUrl, _impl_.thumbail_image_url_), _Internal::kHasBitsOffset + 3, 0, (0 | ::_fl::kFcOptional | ::_fl::kUtf8String | ::_fl::kRepAString)},
    }},
    // no aux_entries
    {{
      "\65\3\5\13\22\0\0\0"
      "optimization_guide.proto.DescriptionText.ReferenceUrl"
      "url"
      "title"
      "favicon_url"
      "thumbail_image_url"
    }},
  };
}


inline constexpr DescriptionText_ReferenceUrl::Impl_::Impl_(
    [[maybe_unused]] ::google::protobuf::internal::InternalVisibility visibility,
    ::_pbi::ConstantInitialized) noexcept
      : _cached_size_{0},
        url_(
            &::google::protobuf::internal::fixed_address_empty_string,
            ::_pbi::ConstantInitialized()),
        title_(
            &::google::protobuf::internal::fixed_address_empty_string,
            ::_pbi::ConstantInitialized()),
        favicon_url_(
            &::google::protobuf::internal::fixed_address_empty_string,
            ::_pbi::ConstantInitialized()),
        thumbail_image_url_(
            &::google::protobuf::internal::fixed_address_empty_string,
            ::_pbi::ConstantInitialized()) {}

template <typename>
constexpr DescriptionText_ReferenceUrl::DescriptionText_ReferenceUrl(::_pbi::ConstantInitialized,
                       const ::_pbi::ClassData* PROTOBUF_NONNULL class_data)
    : ::google::protobuf::MessageLite(
#if defined(PROTOBUF_CUSTOM_VTABLE)
          class_data
#endif  // PROTOBUF_CUSTOM_VTABLE
          ),
      _impl_(internal_visibility(), ::_pbi::ConstantInitialized()) {
}
inline void* PROTOBUF_NONNULL DescriptionText_ReferenceUrl::PlacementNew_(
    const void* PROTOBUF_NONNULL, void* PROTOBUF_NONNULL mem,
    ::google::protobuf::Arena* PROTOBUF_NULLABLE arena) {
  return ::new (mem) DescriptionText_ReferenceUrl(arena);
}
constexpr auto DescriptionText_ReferenceUrl::InternalNewImpl_() {
  return ::google::protobuf::internal::MessageCreator::CopyInit(sizeof(DescriptionText_ReferenceUrl), alignof(DescriptionText_ReferenceUrl));
}
constexpr auto DescriptionText_ReferenceUrl::InternalGenerateClassData_(
    const MessageLite& prototype,
    const ::google::protobuf::internal::TcParseTableBase* tc_table) {
  return ::google::protobuf::internal::ClassDataLite{
      {
          &prototype,
#ifndef PROTOBUF_MESSAGE_GLOBALS
          &_table_.header,
#else
          tc_table,
#endif
          nullptr,  // IsInitialized
          &DescriptionText_ReferenceUrl::MergeImpl,
          ::google::protobuf::MessageLite::GetNewImpl<DescriptionText_ReferenceUrl>(),
#if defined(PROTOBUF_CUSTOM_VTABLE)
          &DescriptionText_ReferenceUrl::SharedDtor,
          ::google::protobuf::MessageLite::GetClearImpl<DescriptionText_ReferenceUrl>(), &DescriptionText_ReferenceUrl::ByteSizeLong,
              &DescriptionText_ReferenceUrl::_InternalSerialize,
#endif  // PROTOBUF_CUSTOM_VTABLE
          PROTOBUF_FIELD_OFFSET(DescriptionText_ReferenceUrl, _impl_._cached_size_),
          true,
      },
      "optimization_guide.proto.DescriptionText.ReferenceUrl",
  };
}
struct DescriptionText_ReferenceUrlGlobalsTypeInternal : ::_pbi::MessageGlobalsBase {
  constexpr DescriptionText_ReferenceUrlGlobalsTypeInternal()
      :
#ifndef PROTOBUF_MESSAGE_GLOBALS
        _default(::_pbi::ConstantInitialized{},
                 DescriptionText_ReferenceUrl_class_data_.base())
#else   // !PROTOBUF_MESSAGE_GLOBALS
        MessageGlobalsBase(DescriptionText_ReferenceUrl::InternalGenerateClassData_(
            _default, &DescriptionText_ReferenceUrl_globals_._table.header)),
        _default(::_pbi::ConstantInitialized{}, GetClassData()),
        _table(::_pbi::PrivateAccess::GenerateParseTable<DescriptionText_ReferenceUrl>(
            GetClassData()))
#endif  // PROTOBUF_MESSAGE_GLOBALS
  {
  }
  ~DescriptionText_ReferenceUrlGlobalsTypeInternal() {}
  union {
    alignas(::_pbi::kMaxMessageAlignment) DescriptionText_ReferenceUrl _default;
  };
#ifdef PROTOBUF_MESSAGE_GLOBALS
  decltype(::_pbi::PrivateAccess::GenerateParseTable<DescriptionText_ReferenceUrl>(
      ::std::declval<const ::_pbi::ClassData*>())) _table;
#endif
};
#ifdef PROTOBUF_MESSAGE_GLOBALS
static_assert(PROTOBUF_FIELD_OFFSET(DescriptionText_ReferenceUrlGlobalsTypeInternal, _default) ==
              ::_pbi::MessageGlobalsBase::OffsetToDefault());
#endif  // PROTOBUF_MESSAGE_GLOBALS

PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT
    PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 PROTOBUF_MESSAGE_GLOBALS_CONST DescriptionText_ReferenceUrlGlobalsTypeInternal DescriptionText_ReferenceUrl_globals_
        PROTOBUF_MESSAGE_GLOBALS_SECTION(.data.rel.ro);
#if defined(PROTOBUF_CUSTOM_VTABLE)
namespace {
const ::_pbi::ClassData* DescriptionText_ReferenceUrl_get_class_data() {
#ifdef PROTOBUF_MESSAGE_GLOBALS
  return DescriptionText_ReferenceUrl_globals_.GetClassData();
#else
  return DescriptionText_ReferenceUrl_class_data_.base();
#endif  // PROTOBUF_MESSAGE_GLOBALS
}
}  // namespace
#endif  // PROTOBUF_CUSTOM_VTABLE
class DescriptionText::_Internal {
 public:
  using HasBits = decltype(::std::declval<DescriptionText>()._impl_._has_bits_);
  static constexpr ::int32_t kHasBitsOffset =
      8 * PROTOBUF_FIELD_OFFSET(DescriptionText, _impl_._has_bits_);
};

constexpr DescriptionText::ParseTableT_ DescriptionText::InternalGenerateParseTable_(const ::_pbi::ClassData* class_data) {
  return ParseTableT_{
    {
      PROTOBUF_FIELD_OFFSET(DescriptionText, _impl_._has_bits_),
      0, // no _extensions_
      2, 8,  // max_field_number, fast_idx_mask
      offsetof(ParseTableT_, field_lookup_table),
      4294967292,  // skipmap
      offsetof(ParseTableT_, field_entries),
      2,  // num_field_entries
      1,  // num_aux_entries
      offsetof(ParseTableT_, aux_entries),
      class_data,
      nullptr,  // post_loop_handler
      ::_pbi::TcParser::GenericFallbackLite,  // fallback
      #ifdef PROTOBUF_PREFETCH_PARSE_TABLE
      ::_pbi::TcParser::GetTable<::optimization_guide::proto::DescriptionText>(),  // to_prefetch
      #endif  // PROTOBUF_PREFETCH_PARSE_TABLE
    }, {{
      // repeated .optimization_guide.proto.DescriptionText.ReferenceUrl urls = 2;
      {::_pbi::TcParser::FastMtR1,
       {18, 0, 0,
        PROTOBUF_FIELD_OFFSET(DescriptionText, _impl_.urls_)}},
      // string text = 1 [features = {
      {::_pbi::TcParser::FastUS1,
       {10, 1, 0,
        PROTOBUF_FIELD_OFFSET(DescriptionText, _impl_.text_)}},
    }}, {{
      65535, 65535
    }}, {{
      // string text = 1 [features = {
      {PROTOBUF_FIELD_OFFSET(DescriptionText, _impl_.text_), _Internal::kHasBitsOffset + 1, 0, (0 | ::_fl::kFcOptional | ::_fl::kUtf8String | ::_fl::kRepAString)},
      // repeated .optimization_guide.proto.DescriptionText.ReferenceUrl urls = 2;
      {PROTOBUF_FIELD_OFFSET(DescriptionText, _impl_.urls_), _Internal::kHasBitsOffset + 0, 0, (0 | ::_fl::kFcRepeated | ::_fl::kMessage | ::_fl::kTvTable)},
    }},
    {{
        #ifndef PROTOBUF_MESSAGE_GLOBALS
        {::_pbi::TcParser::GetTable<::optimization_guide::proto::DescriptionText_ReferenceUrl>()},
        #else
        {::_pbi::FieldAuxMessageGlobals(), &::optimization_guide::proto::DescriptionText_ReferenceUrl_globals_},
        #endif
    }},
    {{
      "\50\4\0\0\0\0\0\0"
      "optimization_guide.proto.DescriptionText"
      "text"
    }},
  };
}


inline constexpr DescriptionText::Impl_::Impl_(
    [[maybe_unused]] ::google::protobuf::internal::InternalVisibility visibility,
    ::_pbi::ConstantInitialized) noexcept
      : _cached_size_{0},
        urls_ { visibility, ::_pbi::InternalMetadataOffset::Build<
            ::optimization_guide::proto::DescriptionText,
            PROTOBUF_FIELD_OFFSET(::optimization_guide::proto::DescriptionText, _impl_.urls_)>()
         }
        ,
        text_(
            &::google::protobuf::internal::fixed_address_empty_string,
            ::_pbi::ConstantInitialized()) {}

template <typename>
constexpr DescriptionText::DescriptionText(::_pbi::ConstantInitialized,
                       const ::_pbi::ClassData* PROTOBUF_NONNULL class_data)
    : ::google::protobuf::MessageLite(
#if defined(PROTOBUF_CUSTOM_VTABLE)
          class_data
#endif  // PROTOBUF_CUSTOM_VTABLE
          ),
      _impl_(internal_visibility(), ::_pbi::ConstantInitialized()) {
}
inline void* PROTOBUF_NONNULL DescriptionText::PlacementNew_(
    const void* PROTOBUF_NONNULL, void* PROTOBUF_NONNULL mem,
    ::google::protobuf::Arena* PROTOBUF_NULLABLE arena) {
  return ::new (mem) DescriptionText(arena);
}
constexpr auto DescriptionText::InternalNewImpl_() {
  return ::google::protobuf::internal::MessageCreator::CopyInit(sizeof(DescriptionText), alignof(DescriptionText));
}
constexpr auto DescriptionText::InternalGenerateClassData_(
    const MessageLite& prototype,
    const ::google::protobuf::internal::TcParseTableBase* tc_table) {
  return ::google::protobuf::internal::ClassDataLite{
      {
          &prototype,
#ifndef PROTOBUF_MESSAGE_GLOBALS
          &_table_.header,
#else
          tc_table,
#endif
          nullptr,  // IsInitialized
          &DescriptionText::MergeImpl,
          ::google::protobuf::MessageLite::GetNewImpl<DescriptionText>(),
#if defined(PROTOBUF_CUSTOM_VTABLE)
          &DescriptionText::SharedDtor,
          ::google::protobuf::MessageLite::GetClearImpl<DescriptionText>(), &DescriptionText::ByteSizeLong,
              &DescriptionText::_InternalSerialize,
#endif  // PROTOBUF_CUSTOM_VTABLE
          PROTOBUF_FIELD_OFFSET(DescriptionText, _impl_._cached_size_),
          true,
      },
      "optimization_guide.proto.DescriptionText",
  };
}
struct DescriptionTextGlobalsTypeInternal : ::_pbi::MessageGlobalsBase {
  constexpr DescriptionTextGlobalsTypeInternal()
      :
#ifndef PROTOBUF_MESSAGE_GLOBALS
        _default(::_pbi::ConstantInitialized{},
                 DescriptionText_class_data_.base())
#else   // !PROTOBUF_MESSAGE_GLOBALS
        MessageGlobalsBase(DescriptionText::InternalGenerateClassData_(
            _default, &DescriptionText_globals_._table.header)),
        _default(::_pbi::ConstantInitialized{}, GetClassData()),
        _table(::_pbi::PrivateAccess::GenerateParseTable<DescriptionText>(
            GetClassData()))
#endif  // PROTOBUF_MESSAGE_GLOBALS
  {
  }
  ~DescriptionTextGlobalsTypeInternal() {}
  union {
    alignas(::_pbi::kMaxMessageAlignment) DescriptionText _default;
  };
#ifdef PROTOBUF_MESSAGE_GLOBALS
  decltype(::_pbi::PrivateAccess::GenerateParseTable<DescriptionText>(
      ::std::declval<const ::_pbi::ClassData*>())) _table;
#endif
};
#ifdef PROTOBUF_MESSAGE_GLOBALS
static_assert(PROTOBUF_FIELD_OFFSET(DescriptionTextGlobalsTypeInternal, _default) ==
              ::_pbi::MessageGlobalsBase::OffsetToDefault());
#endif  // PROTOBUF_MESSAGE_GLOBALS

PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT
    PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 PROTOBUF_MESSAGE_GLOBALS_CONST DescriptionTextGlobalsTypeInternal DescriptionText_globals_
        PROTOBUF_MESSAGE_GLOBALS_SECTION(.data.rel.ro);
#if defined(PROTOBUF_CUSTOM_VTABLE)
namespace {
const ::_pbi::ClassData* DescriptionText_get_class_data() {
#ifdef PROTOBUF_MESSAGE_GLOBALS
  return DescriptionText_globals_.GetClassData();
#else
  return DescriptionText_class_data_.base();
#endif  // PROTOBUF_MESSAGE_GLOBALS
}
}  // namespace
#endif  // PROTOBUF_CUSTOM_VTABLE
class ProductSpecificationDescription_Option::_Internal {
 public:
  using HasBits = decltype(::std::declval<ProductSpecificationDescription_Option>()._impl_._has_bits_);
  static constexpr ::int32_t kHasBitsOffset =
      8 * PROTOBUF_FIELD_OFFSET(ProductSpecificationDescription_Option, _impl_._has_bits_);
};

constexpr ProductSpecificationDescription_Option::ParseTableT_ ProductSpecificationDescription_Option::InternalGenerateParseTable_(const ::_pbi::ClassData* class_data) {
  return ParseTableT_{
    {
      PROTOBUF_FIELD_OFFSET(ProductSpecificationDescription_Option, _impl_._has_bits_),
      0, // no _extensions_
      1, 0,  // max_field_number, fast_idx_mask
      offsetof(ParseTableT_, field_lookup_table),
      4294967294,  // skipmap
      offsetof(ParseTableT_, field_entries),
      1,  // num_field_entries
      1,  // num_aux_entries
      offsetof(ParseTableT_, aux_entries),
      class_data,
      nullptr,  // post_loop_handler
      ::_pbi::TcParser::GenericFallbackLite,  // fallback
      #ifdef PROTOBUF_PREFETCH_PARSE_TABLE
      ::_pbi::TcParser::GetTable<::optimization_guide::proto::ProductSpecificationDescription_Option>(),  // to_prefetch
      #endif  // PROTOBUF_PREFETCH_PARSE_TABLE
    }, {{
      // repeated .optimization_guide.proto.DescriptionText description = 1;
      {::_pbi::TcParser::FastMtR1,
       {10, 0, 0,
        PROTOBUF_FIELD_OFFSET(ProductSpecificationDescription_Option, _impl_.description_)}},
    }}, {{
      65535, 65535
    }}, {{
      // repeated .optimization_guide.proto.DescriptionText description = 1;
      {PROTOBUF_FIELD_OFFSET(ProductSpecificationDescription_Option, _impl_.description_), _Internal::kHasBitsOffset + 0, 0, (0 | ::_fl::kFcRepeated | ::_fl::kMessage | ::_fl::kTvTable)},
    }},
    {{
        #ifndef PROTOBUF_MESSAGE_GLOBALS
        {::_pbi::TcParser::GetTable<::optimization_guide::proto::DescriptionText>()},
        #else
        {::_pbi::FieldAuxMessageGlobals(), &::optimization_guide::proto::DescriptionText_globals_},
        #endif
    }},
    {{
    }},
  };
}


inline constexpr ProductSpecificationDescription_Option::Impl_::Impl_(
    [[maybe_unused]] ::google::protobuf::internal::InternalVisibility visibility,
    ::_pbi::ConstantInitialized) noexcept
      : _cached_size_{0},
        description_ { visibility, ::_pbi::InternalMetadataOffset::Build<
            ::optimization_guide::proto::ProductSpecificationDescription_Option,
            PROTOBUF_FIELD_OFFSET(::optimization_guide::proto::ProductSpecificationDescription_Option, _impl_.description_)>()
         }
     {}

template <typename>
constexpr ProductSpecificationDescription_Option::ProductSpecificationDescription_Option(::_pbi::ConstantInitialized,
                       const ::_pbi::ClassData* PROTOBUF_NONNULL class_data)
    : ::google::protobuf::MessageLite(
#if defined(PROTOBUF_CUSTOM_VTABLE)
          class_data
#endif  // PROTOBUF_CUSTOM_VTABLE
          ),
      _impl_(internal_visibility(), ::_pbi::ConstantInitialized()) {
}
inline void* PROTOBUF_NONNULL ProductSpecificationDescription_Option::PlacementNew_(
    const void* PROTOBUF_NONNULL, void* PROTOBUF_NONNULL mem,
    ::google::protobuf::Arena* PROTOBUF_NULLABLE arena) {
  return ::new (mem) ProductSpecificationDescription_Option(arena);
}
constexpr auto ProductSpecificationDescription_Option::InternalNewImpl_() {
  return ::google::protobuf::internal::MessageCreator::CopyInit(sizeof(ProductSpecificationDescription_Option), alignof(ProductSpecificationDescription_Option));
}
constexpr auto ProductSpecificationDescription_Option::InternalGenerateClassData_(
    const MessageLite& prototype,
    const ::google::protobuf::internal::TcParseTableBase* tc_table) {
  return ::google::protobuf::internal::ClassDataLite{
      {
          &prototype,
#ifndef PROTOBUF_MESSAGE_GLOBALS
          &_table_.header,
#else
          tc_table,
#endif
          nullptr,  // IsInitialized
          &ProductSpecificationDescription_Option::MergeImpl,
          ::google::protobuf::MessageLite::GetNewImpl<ProductSpecificationDescription_Option>(),
#if defined(PROTOBUF_CUSTOM_VTABLE)
          &ProductSpecificationDescription_Option::SharedDtor,
          ::google::protobuf::MessageLite::GetClearImpl<ProductSpecificationDescription_Option>(), &ProductSpecificationDescription_Option::ByteSizeLong,
              &ProductSpecificationDescription_Option::_InternalSerialize,
#endif  // PROTOBUF_CUSTOM_VTABLE
          PROTOBUF_FIELD_OFFSET(ProductSpecificationDescription_Option, _impl_._cached_size_),
          true,
      },
      "optimization_guide.proto.ProductSpecificationDescription.Option",
  };
}
struct ProductSpecificationDescription_OptionGlobalsTypeInternal : ::_pbi::MessageGlobalsBase {
  constexpr ProductSpecificationDescription_OptionGlobalsTypeInternal()
      :
#ifndef PROTOBUF_MESSAGE_GLOBALS
        _default(::_pbi::ConstantInitialized{},
                 ProductSpecificationDescription_Option_class_data_.base())
#else   // !PROTOBUF_MESSAGE_GLOBALS
        MessageGlobalsBase(ProductSpecificationDescription_Option::InternalGenerateClassData_(
            _default, &ProductSpecificationDescription_Option_globals_._table.header)),
        _default(::_pbi::ConstantInitialized{}, GetClassData()),
        _table(::_pbi::PrivateAccess::GenerateParseTable<ProductSpecificationDescription_Option>(
            GetClassData()))
#endif  // PROTOBUF_MESSAGE_GLOBALS
  {
  }
  ~ProductSpecificationDescription_OptionGlobalsTypeInternal() {}
  union {
    alignas(::_pbi::kMaxMessageAlignment) ProductSpecificationDescription_Option _default;
  };
#ifdef PROTOBUF_MESSAGE_GLOBALS
  decltype(::_pbi::PrivateAccess::GenerateParseTable<ProductSpecificationDescription_Option>(
      ::std::declval<const ::_pbi::ClassData*>())) _table;
#endif
};
#ifdef PROTOBUF_MESSAGE_GLOBALS
static_assert(PROTOBUF_FIELD_OFFSET(ProductSpecificationDescription_OptionGlobalsTypeInternal, _default) ==
              ::_pbi::MessageGlobalsBase::OffsetToDefault());
#endif  // PROTOBUF_MESSAGE_GLOBALS

PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT
    PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 PROTOBUF_MESSAGE_GLOBALS_CONST ProductSpecificationDescription_OptionGlobalsTypeInternal ProductSpecificationDescription_Option_globals_
        PROTOBUF_MESSAGE_GLOBALS_SECTION(.data.rel.ro);
#if defined(PROTOBUF_CUSTOM_VTABLE)
namespace {
const ::_pbi::ClassData* ProductSpecificationDescription_Option_get_class_data() {
#ifdef PROTOBUF_MESSAGE_GLOBALS
  return ProductSpecificationDescription_Option_globals_.GetClassData();
#else
  return ProductSpecificationDescription_Option_class_data_.base();
#endif  // PROTOBUF_MESSAGE_GLOBALS
}
}  // namespace
#endif  // PROTOBUF_CUSTOM_VTABLE
class ProductSpecificationDescription::_Internal {
 public:
  using HasBits = decltype(::std::declval<ProductSpecificationDescription>()._impl_._has_bits_);
  static constexpr ::int32_t kHasBitsOffset =
      8 * PROTOBUF_FIELD_OFFSET(ProductSpecificationDescription, _impl_._has_bits_);
};

constexpr ProductSpecificationDescription::ParseTableT_ ProductSpecificationDescription::InternalGenerateParseTable_(const ::_pbi::ClassData* class_data) {
  return ParseTableT_{
    {
      PROTOBUF_FIELD_OFFSET(ProductSpecificationDescription, _impl_._has_bits_),
      0, // no _extensions_
      4, 24,  // max_field_number, fast_idx_mask
      offsetof(ParseTableT_, field_lookup_table),
      4294967280,  // skipmap
      offsetof(ParseTableT_, field_entries),
      4,  // num_field_entries
      1,  // num_aux_entries
      offsetof(ParseTableT_, aux_entries),
      class_data,
      nullptr,  // post_loop_handler
      ::_pbi::TcParser::GenericFallbackLite,  // fallback
      #ifdef PROTOBUF_PREFETCH_PARSE_TABLE
      ::_pbi::TcParser::GetTable<::optimization_guide::proto::ProductSpecificationDescription>(),  // to_prefetch
      #endif  // PROTOBUF_PREFETCH_PARSE_TABLE
    }, {{
      // string attribute_id = 4 [features = {
      {::_pbi::TcParser::FastUS1,
       {34, 3, 0,
        PROTOBUF_FIELD_OFFSET(ProductSpecificationDescription, _impl_.attribute_id_)}},
      // repeated .optimization_guide.proto.ProductSpecificationDescription.Option options = 1;
      {::_pbi::TcParser::FastMtR1,
       {10, 0, 0,
        PROTOBUF_FIELD_OFFSET(ProductSpecificationDescription, _impl_.options_)}},
      // string label = 2 [features = {
      {::_pbi::TcParser::FastUS1,
       {18, 1, 0,
        PROTOBUF_FIELD_OFFSET(ProductSpecificationDescription, _impl_.label_)}},
      // string alternative_text = 3 [features = {
      {::_pbi::TcParser::FastUS1,
       {26, 2, 0,
        PROTOBUF_FIELD_OFFSET(ProductSpecificationDescription, _impl_.alternative_text_)}},
    }}, {{
      65535, 65535
    }}, {{
      // repeated .optimization_guide.proto.ProductSpecificationDescription.Option options = 1;
      {PROTOBUF_FIELD_OFFSET(ProductSpecificationDescription, _impl_.options_), _Internal::kHasBitsOffset + 0, 0, (0 | ::_fl::kFcRepeated | ::_fl::kMessage | ::_fl::kTvTable)},
      // string label = 2 [features = {
      {PROTOBUF_FIELD_OFFSET(ProductSpecificationDescription, _impl_.label_), _Internal::kHasBitsOffset + 1, 0, (0 | ::_fl::kFcOptional | ::_fl::kUtf8String | ::_fl::kRepAString)},
      // string alternative_text = 3 [features = {
      {PROTOBUF_FIELD_OFFSET(ProductSpecificationDescription, _impl_.alternative_text_), _Internal::kHasBitsOffset + 2, 0, (0 | ::_fl::kFcOptional | ::_fl::kUtf8String | ::_fl::kRepAString)},
      // string attribute_id = 4 [features = {
      {PROTOBUF_FIELD_OFFSET(ProductSpecificationDescription, _impl_.attribute_id_), _Internal::kHasBitsOffset + 3, 0, (0 | ::_fl::kFcOptional | ::_fl::kUtf8String | ::_fl::kRepAString)},
    }},
    {{
        #ifndef PROTOBUF_MESSAGE_GLOBALS
        {::_pbi::TcParser::GetTable<::optimization_guide::proto::ProductSpecificationDescription_Option>()},
        #else
        {::_pbi::FieldAuxMessageGlobals(), &::optimization_guide::proto::ProductSpecificationDescription_Option_globals_},
        #endif
    }},
    {{
      "\70\0\5\20\14\0\0\0"
      "optimization_guide.proto.ProductSpecificationDescription"
      "label"
      "alternative_text"
      "attribute_id"
    }},
  };
}


inline constexpr ProductSpecificationDescription::Impl_::Impl_(
    [[maybe_unused]] ::google::protobuf::internal::InternalVisibility visibility,
    ::_pbi::ConstantInitialized) noexcept
      : _cached_size_{0},
        options_ { visibility, ::_pbi::InternalMetadataOffset::Build<
            ::optimization_guide::proto::ProductSpecificationDescription,
            PROTOBUF_FIELD_OFFSET(::optimization_guide::proto::ProductSpecificationDescription, _impl_.options_)>()
         }
        ,
        label_(
            &::google::protobuf::internal::fixed_address_empty_string,
            ::_pbi::ConstantInitialized()),
        alternative_text_(
            &::google::protobuf::internal::fixed_address_empty_string,
            ::_pbi::ConstantInitialized()),
        attribute_id_(
            &::google::protobuf::internal::fixed_address_empty_string,
            ::_pbi::ConstantInitialized()) {}

template <typename>
constexpr ProductSpecificationDescription::ProductSpecificationDescription(::_pbi::ConstantInitialized,
                       const ::_pbi::ClassData* PROTOBUF_NONNULL class_data)
    : ::google::protobuf::MessageLite(
#if defined(PROTOBUF_CUSTOM_VTABLE)
          class_data
#endif  // PROTOBUF_CUSTOM_VTABLE
          ),
      _impl_(internal_visibility(), ::_pbi::ConstantInitialized()) {
}
inline void* PROTOBUF_NONNULL ProductSpecificationDescription::PlacementNew_(
    const void* PROTOBUF_NONNULL, void* PROTOBUF_NONNULL mem,
    ::google::protobuf::Arena* PROTOBUF_NULLABLE arena) {
  return ::new (mem) ProductSpecificationDescription(arena);
}
constexpr auto ProductSpecificationDescription::InternalNewImpl_() {
  return ::google::protobuf::internal::MessageCreator::CopyInit(sizeof(ProductSpecificationDescription), alignof(ProductSpecificationDescription));
}
constexpr auto ProductSpecificationDescription::InternalGenerateClassData_(
    const MessageLite& prototype,
    const ::google::protobuf::internal::TcParseTableBase* tc_table) {
  return ::google::protobuf::internal::ClassDataLite{
      {
          &prototype,
#ifndef PROTOBUF_MESSAGE_GLOBALS
          &_table_.header,
#else
          tc_table,
#endif
          nullptr,  // IsInitialized
          &ProductSpecificationDescription::MergeImpl,
          ::google::protobuf::MessageLite::GetNewImpl<ProductSpecificationDescription>(),
#if defined(PROTOBUF_CUSTOM_VTABLE)
          &ProductSpecificationDescription::SharedDtor,
          ::google::protobuf::MessageLite::GetClearImpl<ProductSpecificationDescription>(), &ProductSpecificationDescription::ByteSizeLong,
              &ProductSpecificationDescription::_InternalSerialize,
#endif  // PROTOBUF_CUSTOM_VTABLE
          PROTOBUF_FIELD_OFFSET(ProductSpecificationDescription, _impl_._cached_size_),
          true,
      },
      "optimization_guide.proto.ProductSpecificationDescription",
  };
}
struct ProductSpecificationDescriptionGlobalsTypeInternal : ::_pbi::MessageGlobalsBase {
  constexpr ProductSpecificationDescriptionGlobalsTypeInternal()
      :
#ifndef PROTOBUF_MESSAGE_GLOBALS
        _default(::_pbi::ConstantInitialized{},
                 ProductSpecificationDescription_class_data_.base())
#else   // !PROTOBUF_MESSAGE_GLOBALS
        MessageGlobalsBase(ProductSpecificationDescription::InternalGenerateClassData_(
            _default, &ProductSpecificationDescription_globals_._table.header)),
        _default(::_pbi::ConstantInitialized{}, GetClassData()),
        _table(::_pbi::PrivateAccess::GenerateParseTable<ProductSpecificationDescription>(
            GetClassData()))
#endif  // PROTOBUF_MESSAGE_GLOBALS
  {
  }
  ~ProductSpecificationDescriptionGlobalsTypeInternal() {}
  union {
    alignas(::_pbi::kMaxMessageAlignment) ProductSpecificationDescription _default;
  };
#ifdef PROTOBUF_MESSAGE_GLOBALS
  decltype(::_pbi::PrivateAccess::GenerateParseTable<ProductSpecificationDescription>(
      ::std::declval<const ::_pbi::ClassData*>())) _table;
#endif
};
#ifdef PROTOBUF_MESSAGE_GLOBALS
static_assert(PROTOBUF_FIELD_OFFSET(ProductSpecificationDescriptionGlobalsTypeInternal, _default) ==
              ::_pbi::MessageGlobalsBase::OffsetToDefault());
#endif  // PROTOBUF_MESSAGE_GLOBALS

PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT
    PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 PROTOBUF_MESSAGE_GLOBALS_CONST ProductSpecificationDescriptionGlobalsTypeInternal ProductSpecificationDescription_globals_
        PROTOBUF_MESSAGE_GLOBALS_SECTION(.data.rel.ro);
#if defined(PROTOBUF_CUSTOM_VTABLE)
namespace {
const ::_pbi::ClassData* ProductSpecificationDescription_get_class_data() {
#ifdef PROTOBUF_MESSAGE_GLOBALS
  return ProductSpecificationDescription_globals_.GetClassData();
#else
  return ProductSpecificationDescription_class_data_.base();
#endif  // PROTOBUF_MESSAGE_GLOBALS
}
}  // namespace
#endif  // PROTOBUF_CUSTOM_VTABLE
class ProductSpecificationValue::_Internal {
 public:
  using HasBits = decltype(::std::declval<ProductSpecificationValue>()._impl_._has_bits_);
  static constexpr ::int32_t kHasBitsOffset =
      8 * PROTOBUF_FIELD_OFFSET(ProductSpecificationValue, _impl_._has_bits_);
};

constexpr ProductSpecificationValue::ParseTableT_ ProductSpecificationValue::InternalGenerateParseTable_(const ::_pbi::ClassData* class_data) {
  return ParseTableT_{
    {
      PROTOBUF_FIELD_OFFSET(ProductSpecificationValue, _impl_._has_bits_),
      0, // no _extensions_
      3, 24,  // max_field_number, fast_idx_mask
      offsetof(ParseTableT_, field_lookup_table),
      4294967288,  // skipmap
      offsetof(ParseTableT_, field_entries),
      3,  // num_field_entries
      2,  // num_aux_entries
      offsetof(ParseTableT_, aux_entries),
      class_data,
      nullptr,  // post_loop_handler
      ::_pbi::TcParser::GenericFallbackLite,  // fallback
      #ifdef PROTOBUF_PREFETCH_PARSE_TABLE
      ::_pbi::TcParser::GetTable<::optimization_guide::proto::ProductSpecificationValue>(),  // to_prefetch
      #endif  // PROTOBUF_PREFETCH_PARSE_TABLE
    }, {{
      {::_pbi::TcParser::MiniParse, {}},
      // string key = 1 [features = {
      {::_pbi::TcParser::FastUS1,
       {10, 2, 0,
        PROTOBUF_FIELD_OFFSET(ProductSpecificationValue, _impl_.key_)}},
      // repeated .optimization_guide.proto.ProductSpecificationDescription specification_descriptions = 2;
      {::_pbi::TcParser::FastMtR1,
       {18, 0, 0,
        PROTOBUF_FIELD_OFFSET(ProductSpecificationValue, _impl_.specification_descriptions_)}},
      // repeated .optimization_guide.proto.DescriptionText summary_description = 3;
      {::_pbi::TcParser::FastMtR1,
       {26, 1, 1,
        PROTOBUF_FIELD_OFFSET(ProductSpecificationValue, _impl_.summary_description_)}},
    }}, {{
      65535, 65535
    }}, {{
      // string key = 1 [features = {
      {PROTOBUF_FIELD_OFFSET(ProductSpecificationValue, _impl_.key_), _Internal::kHasBitsOffset + 2, 0, (0 | ::_fl::kFcOptional | ::_fl::kUtf8String | ::_fl::kRepAString)},
      // repeated .optimization_guide.proto.ProductSpecificationDescription specification_descriptions = 2;
      {PROTOBUF_FIELD_OFFSET(ProductSpecificationValue, _impl_.specification_descriptions_), _Internal::kHasBitsOffset + 0, 0, (0 | ::_fl::kFcRepeated | ::_fl::kMessage | ::_fl::kTvTable)},
      // repeated .optimization_guide.proto.DescriptionText summary_description = 3;
      {PROTOBUF_FIELD_OFFSET(ProductSpecificationValue, _impl_.summary_description_), _Internal::kHasBitsOffset + 1, 1, (0 | ::_fl::kFcRepeated | ::_fl::kMessage | ::_fl::kTvTable)},
    }},
    {{
        #ifndef PROTOBUF_MESSAGE_GLOBALS
        {::_pbi::TcParser::GetTable<::optimization_guide::proto::ProductSpecificationDescription>()},
        #else
        {::_pbi::FieldAuxMessageGlobals(), &::optimization_guide::proto::ProductSpecificationDescription_globals_},
        #endif
        #ifndef PROTOBUF_MESSAGE_GLOBALS
        {::_pbi::TcParser::GetTable<::optimization_guide::proto::DescriptionText>()},
        #else
        {::_pbi::FieldAuxMessageGlobals(), &::optimization_guide::proto::DescriptionText_globals_},
        #endif
    }},
    {{
      "\62\3\0\0\0\0\0\0"
      "optimization_guide.proto.ProductSpecificationValue"
      "key"
    }},
  };
}


inline constexpr ProductSpecificationValue::Impl_::Impl_(
    [[maybe_unused]] ::google::protobuf::internal::InternalVisibility visibility,
    ::_pbi::ConstantInitialized) noexcept
      : _cached_size_{0},
        specification_descriptions_ { visibility, ::_pbi::InternalMetadataOffset::Build<
            ::optimization_guide::proto::ProductSpecificationValue,
            PROTOBUF_FIELD_OFFSET(::optimization_guide::proto::ProductSpecificationValue, _impl_.specification_descriptions_)>()
         }
        ,
        summary_description_ { visibility, ::_pbi::InternalMetadataOffset::Build<
            ::optimization_guide::proto::ProductSpecificationValue,
            PROTOBUF_FIELD_OFFSET(::optimization_guide::proto::ProductSpecificationValue, _impl_.summary_description_)>()
         }
        ,
        key_(
            &::google::protobuf::internal::fixed_address_empty_string,
            ::_pbi::ConstantInitialized()) {}

template <typename>
constexpr ProductSpecificationValue::ProductSpecificationValue(::_pbi::ConstantInitialized,
                       const ::_pbi::ClassData* PROTOBUF_NONNULL class_data)
    : ::google::protobuf::MessageLite(
#if defined(PROTOBUF_CUSTOM_VTABLE)
          class_data
#endif  // PROTOBUF_CUSTOM_VTABLE
          ),
      _impl_(internal_visibility(), ::_pbi::ConstantInitialized()) {
}
inline void* PROTOBUF_NONNULL ProductSpecificationValue::PlacementNew_(
    const void* PROTOBUF_NONNULL, void* PROTOBUF_NONNULL mem,
    ::google::protobuf::Arena* PROTOBUF_NULLABLE arena) {
  return ::new (mem) ProductSpecificationValue(arena);
}
constexpr auto ProductSpecificationValue::InternalNewImpl_() {
  return ::google::protobuf::internal::MessageCreator::CopyInit(sizeof(ProductSpecificationValue), alignof(ProductSpecificationValue));
}
constexpr auto ProductSpecificationValue::InternalGenerateClassData_(
    const MessageLite& prototype,
    const ::google::protobuf::internal::TcParseTableBase* tc_table) {
  return ::google::protobuf::internal::ClassDataLite{
      {
          &prototype,
#ifndef PROTOBUF_MESSAGE_GLOBALS
          &_table_.header,
#else
          tc_table,
#endif
          nullptr,  // IsInitialized
          &ProductSpecificationValue::MergeImpl,
          ::google::protobuf::MessageLite::GetNewImpl<ProductSpecificationValue>(),
#if defined(PROTOBUF_CUSTOM_VTABLE)
          &ProductSpecificationValue::SharedDtor,
          ::google::protobuf::MessageLite::GetClearImpl<ProductSpecificationValue>(), &ProductSpecificationValue::ByteSizeLong,
              &ProductSpecificationValue::_InternalSerialize,
#endif  // PROTOBUF_CUSTOM_VTABLE
          PROTOBUF_FIELD_OFFSET(ProductSpecificationValue, _impl_._cached_size_),
          true,
      },
      "optimization_guide.proto.ProductSpecificationValue",
  };
}
struct ProductSpecificationValueGlobalsTypeInternal : ::_pbi::MessageGlobalsBase {
  constexpr ProductSpecificationValueGlobalsTypeInternal()
      :
#ifndef PROTOBUF_MESSAGE_GLOBALS
        _default(::_pbi::ConstantInitialized{},
                 ProductSpecificationValue_class_data_.base())
#else   // !PROTOBUF_MESSAGE_GLOBALS
        MessageGlobalsBase(ProductSpecificationValue::InternalGenerateClassData_(
            _default, &ProductSpecificationValue_globals_._table.header)),
        _default(::_pbi::ConstantInitialized{}, GetClassData()),
        _table(::_pbi::PrivateAccess::GenerateParseTable<ProductSpecificationValue>(
            GetClassData()))
#endif  // PROTOBUF_MESSAGE_GLOBALS
  {
  }
  ~ProductSpecificationValueGlobalsTypeInternal() {}
  union {
    alignas(::_pbi::kMaxMessageAlignment) ProductSpecificationValue _default;
  };
#ifdef PROTOBUF_MESSAGE_GLOBALS
  decltype(::_pbi::PrivateAccess::GenerateParseTable<ProductSpecificationValue>(
      ::std::declval<const ::_pbi::ClassData*>())) _table;
#endif
};
#ifdef PROTOBUF_MESSAGE_GLOBALS
static_assert(PROTOBUF_FIELD_OFFSET(ProductSpecificationValueGlobalsTypeInternal, _default) ==
              ::_pbi::MessageGlobalsBase::OffsetToDefault());
#endif  // PROTOBUF_MESSAGE_GLOBALS

PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT
    PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 PROTOBUF_MESSAGE_GLOBALS_CONST ProductSpecificationValueGlobalsTypeInternal ProductSpecificationValue_globals_
        PROTOBUF_MESSAGE_GLOBALS_SECTION(.data.rel.ro);
#if defined(PROTOBUF_CUSTOM_VTABLE)
namespace {
const ::_pbi::ClassData* ProductSpecificationValue_get_class_data() {
#ifdef PROTOBUF_MESSAGE_GLOBALS
  return ProductSpecificationValue_globals_.GetClassData();
#else
  return ProductSpecificationValue_class_data_.base();
#endif  // PROTOBUF_MESSAGE_GLOBALS
}
}  // namespace
#endif  // PROTOBUF_CUSTOM_VTABLE
class ProductSpecification::_Internal {
 public:
  using HasBits = decltype(::std::declval<ProductSpecification>()._impl_._has_bits_);
  static constexpr ::int32_t kHasBitsOffset =
      8 * PROTOBUF_FIELD_OFFSET(ProductSpecification, _impl_._has_bits_);
};

constexpr ProductSpecification::ParseTableT_ ProductSpecification::InternalGenerateParseTable_(const ::_pbi::ClassData* class_data) {
  return ParseTableT_{
    {
      PROTOBUF_FIELD_OFFSET(ProductSpecification, _impl_._has_bits_),
      0, // no _extensions_
      6, 56,  // max_field_number, fast_idx_mask
      offsetof(ParseTableT_, field_lookup_table),
      4294967232,  // skipmap
      offsetof(ParseTableT_, field_entries),
      6,  // num_field_entries
      3,  // num_aux_entries
      offsetof(ParseTableT_, aux_entries),
      class_data,
      nullptr,  // post_loop_handler
      ::_pbi::TcParser::GenericFallbackLite,  // fallback
      #ifdef PROTOBUF_PREFETCH_PARSE_TABLE
      ::_pbi::TcParser::GetTable<::optimization_guide::proto::ProductSpecification>(),  // to_prefetch
      #endif  // PROTOBUF_PREFETCH_PARSE_TABLE
    }, {{
      {::_pbi::TcParser::MiniParse, {}},
      // .optimization_guide.proto.ProductSpecificationIdentifiers identifiers = 1 [features = {
      {::_pbi::TcParser::FastMtS1,
       {10, 5, 0,
        PROTOBUF_FIELD_OFFSET(ProductSpecification, _impl_.identifiers_)}},
      // string title = 2 [features = {
      {::_pbi::TcParser::FastUS1,
       {18, 2, 0,
        PROTOBUF_FIELD_OFFSET(ProductSpecification, _impl_.title_)}},
      // string image_url = 3 [features = {
      {::_pbi::TcParser::FastUS1,
       {26, 3, 0,
        PROTOBUF_FIELD_OFFSET(ProductSpecification, _impl_.image_url_)}},
      // repeated .optimization_guide.proto.ProductSpecificationValue product_specification_values = 4;
      {::_pbi::TcParser::FastMtR1,
       {34, 0, 1,
        PROTOBUF_FIELD_OFFSET(ProductSpecification, _impl_.product_specification_values_)}},
      // repeated .optimization_guide.proto.DescriptionText summary_description = 5;
      {::_pbi::TcParser::FastMtR1,
       {42, 1, 2,
        PROTOBUF_FIELD_OFFSET(ProductSpecification, _impl_.summary_description_)}},
      // string buying_options_url = 6 [features = {
      {::_pbi::TcParser::FastUS1,
       {50, 4, 0,
        PROTOBUF_FIELD_OFFSET(ProductSpecification, _impl_.buying_options_url_)}},
      {::_pbi::TcParser::MiniParse, {}},
    }}, {{
      65535, 65535
    }}, {{
      // .optimization_guide.proto.ProductSpecificationIdentifiers identifiers = 1 [features = {
      {PROTOBUF_FIELD_OFFSET(ProductSpecification, _impl_.identifiers_), _Internal::kHasBitsOffset + 5, 0, (0 | ::_fl::kFcOptional | ::_fl::kMessage | ::_fl::kTvTable)},
      // string title = 2 [features = {
      {PROTOBUF_FIELD_OFFSET(ProductSpecification, _impl_.title_), _Internal::kHasBitsOffset + 2, 0, (0 | ::_fl::kFcOptional | ::_fl::kUtf8String | ::_fl::kRepAString)},
      // string image_url = 3 [features = {
      {PROTOBUF_FIELD_OFFSET(ProductSpecification, _impl_.image_url_), _Internal::kHasBitsOffset + 3, 0, (0 | ::_fl::kFcOptional | ::_fl::kUtf8String | ::_fl::kRepAString)},
      // repeated .optimization_guide.proto.ProductSpecificationValue product_specification_values = 4;
      {PROTOBUF_FIELD_OFFSET(ProductSpecification, _impl_.product_specification_values_), _Internal::kHasBitsOffset + 0, 1, (0 | ::_fl::kFcRepeated | ::_fl::kMessage | ::_fl::kTvTable)},
      // repeated .optimization_guide.proto.DescriptionText summary_description = 5;
      {PROTOBUF_FIELD_OFFSET(ProductSpecification, _impl_.summary_description_), _Internal::kHasBitsOffset + 1, 2, (0 | ::_fl::kFcRepeated | ::_fl::kMessage | ::_fl::kTvTable)},
      // string buying_options_url = 6 [features = {
      {PROTOBUF_FIELD_OFFSET(ProductSpecification, _impl_.buying_options_url_), _Internal::kHasBitsOffset + 4, 0, (0 | ::_fl::kFcOptional | ::_fl::kUtf8String | ::_fl::kRepAString)},
    }},
    {{
        #ifndef PROTOBUF_MESSAGE_GLOBALS
        {::_pbi::TcParser::GetTable<::optimization_guide::proto::ProductSpecificationIdentifiers>()},
        #else
        {::_pbi::FieldAuxMessageGlobals(), &::optimization_guide::proto::ProductSpecificationIdentifiers_globals_},
        #endif
        #ifndef PROTOBUF_MESSAGE_GLOBALS
        {::_pbi::TcParser::GetTable<::optimization_guide::proto::ProductSpecificationValue>()},
        #else
        {::_pbi::FieldAuxMessageGlobals(), &::optimization_guide::proto::ProductSpecificationValue_globals_},
        #endif
        #ifndef PROTOBUF_MESSAGE_GLOBALS
        {::_pbi::TcParser::GetTable<::optimization_guide::proto::DescriptionText>()},
        #else
        {::_pbi::FieldAuxMessageGlobals(), &::optimization_guide::proto::DescriptionText_globals_},
        #endif
    }},
    {{
      "\55\0\5\11\0\0\22\0"
      "optimization_guide.proto.ProductSpecification"
      "title"
      "image_url"
      "buying_options_url"
    }},
  };
}


inline constexpr ProductSpecification::Impl_::Impl_(
    [[maybe_unused]] ::google::protobuf::internal::InternalVisibility visibility,
    ::_pbi::ConstantInitialized) noexcept
      : _cached_size_{0},
        product_specification_values_ { visibility, ::_pbi::InternalMetadataOffset::Build<
            ::optimization_guide::proto::ProductSpecification,
            PROTOBUF_FIELD_OFFSET(::optimization_guide::proto::ProductSpecification, _impl_.product_specification_values_)>()
         }
        ,
        summary_description_ { visibility, ::_pbi::InternalMetadataOffset::Build<
            ::optimization_guide::proto::ProductSpecification,
            PROTOBUF_FIELD_OFFSET(::optimization_guide::proto::ProductSpecification, _impl_.summary_description_)>()
         }
        ,
        title_(
            &::google::protobuf::internal::fixed_address_empty_string,
            ::_pbi::ConstantInitialized()),
        image_url_(
            &::google::protobuf::internal::fixed_address_empty_string,
            ::_pbi::ConstantInitialized()),
        buying_options_url_(
            &::google::protobuf::internal::fixed_address_empty_string,
            ::_pbi::ConstantInitialized()),
        identifiers_{nullptr} {}

template <typename>
constexpr ProductSpecification::ProductSpecification(::_pbi::ConstantInitialized,
                       const ::_pbi::ClassData* PROTOBUF_NONNULL class_data)
    : ::google::protobuf::MessageLite(
#if defined(PROTOBUF_CUSTOM_VTABLE)
          class_data
#endif  // PROTOBUF_CUSTOM_VTABLE
          ),
      _impl_(internal_visibility(), ::_pbi::ConstantInitialized()) {
}
inline void* PROTOBUF_NONNULL ProductSpecification::PlacementNew_(
    const void* PROTOBUF_NONNULL, void* PROTOBUF_NONNULL mem,
    ::google::protobuf::Arena* PROTOBUF_NULLABLE arena) {
  return ::new (mem) ProductSpecification(arena);
}
constexpr auto ProductSpecification::InternalNewImpl_() {
  return ::google::protobuf::internal::MessageCreator::CopyInit(sizeof(ProductSpecification), alignof(ProductSpecification));
}
constexpr auto ProductSpecification::InternalGenerateClassData_(
    const MessageLite& prototype,
    const ::google::protobuf::internal::TcParseTableBase* tc_table) {
  return ::google::protobuf::internal::ClassDataLite{
      {
          &prototype,
#ifndef PROTOBUF_MESSAGE_GLOBALS
          &_table_.header,
#else
          tc_table,
#endif
          nullptr,  // IsInitialized
          &ProductSpecification::MergeImpl,
          ::google::protobuf::MessageLite::GetNewImpl<ProductSpecification>(),
#if defined(PROTOBUF_CUSTOM_VTABLE)
          &ProductSpecification::SharedDtor,
          ::google::protobuf::MessageLite::GetClearImpl<ProductSpecification>(), &ProductSpecification::ByteSizeLong,
              &ProductSpecification::_InternalSerialize,
#endif  // PROTOBUF_CUSTOM_VTABLE
          PROTOBUF_FIELD_OFFSET(ProductSpecification, _impl_._cached_size_),
          true,
      },
      "optimization_guide.proto.ProductSpecification",
  };
}
struct ProductSpecificationGlobalsTypeInternal : ::_pbi::MessageGlobalsBase {
  constexpr ProductSpecificationGlobalsTypeInternal()
      :
#ifndef PROTOBUF_MESSAGE_GLOBALS
        _default(::_pbi::ConstantInitialized{},
                 ProductSpecification_class_data_.base())
#else   // !PROTOBUF_MESSAGE_GLOBALS
        MessageGlobalsBase(ProductSpecification::InternalGenerateClassData_(
            _default, &ProductSpecification_globals_._table.header)),
        _default(::_pbi::ConstantInitialized{}, GetClassData()),
        _table(::_pbi::PrivateAccess::GenerateParseTable<ProductSpecification>(
            GetClassData()))
#endif  // PROTOBUF_MESSAGE_GLOBALS
  {
  }
  ~ProductSpecificationGlobalsTypeInternal() {}
  union {
    alignas(::_pbi::kMaxMessageAlignment) ProductSpecification _default;
  };
#ifdef PROTOBUF_MESSAGE_GLOBALS
  decltype(::_pbi::PrivateAccess::GenerateParseTable<ProductSpecification>(
      ::std::declval<const ::_pbi::ClassData*>())) _table;
#endif
};
#ifdef PROTOBUF_MESSAGE_GLOBALS
static_assert(PROTOBUF_FIELD_OFFSET(ProductSpecificationGlobalsTypeInternal, _default) ==
              ::_pbi::MessageGlobalsBase::OffsetToDefault());
#endif  // PROTOBUF_MESSAGE_GLOBALS

PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT
    PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 PROTOBUF_MESSAGE_GLOBALS_CONST ProductSpecificationGlobalsTypeInternal ProductSpecification_globals_
        PROTOBUF_MESSAGE_GLOBALS_SECTION(.data.rel.ro);
#if defined(PROTOBUF_CUSTOM_VTABLE)
namespace {
const ::_pbi::ClassData* ProductSpecification_get_class_data() {
#ifdef PROTOBUF_MESSAGE_GLOBALS
  return ProductSpecification_globals_.GetClassData();
#else
  return ProductSpecification_class_data_.base();
#endif  // PROTOBUF_MESSAGE_GLOBALS
}
}  // namespace
#endif  // PROTOBUF_CUSTOM_VTABLE
class ProductSpecificationData::_Internal {
 public:
  using HasBits = decltype(::std::declval<ProductSpecificationData>()._impl_._has_bits_);
  static constexpr ::int32_t kHasBitsOffset =
      8 * PROTOBUF_FIELD_OFFSET(ProductSpecificationData, _impl_._has_bits_);
};

constexpr ProductSpecificationData::ParseTableT_ ProductSpecificationData::InternalGenerateParseTable_(const ::_pbi::ClassData* class_data) {
  return ParseTableT_{
    {
      PROTOBUF_FIELD_OFFSET(ProductSpecificationData, _impl_._has_bits_),
      0, // no _extensions_
      2, 8,  // max_field_number, fast_idx_mask
      offsetof(ParseTableT_, field_lookup_table),
      4294967292,  // skipmap
      offsetof(ParseTableT_, field_entries),
      2,  // num_field_entries
      2,  // num_aux_entries
      offsetof(ParseTableT_, aux_entries),
      class_data,
      nullptr,  // post_loop_handler
      ::_pbi::TcParser::GenericFallbackLite,  // fallback
      #ifdef PROTOBUF_PREFETCH_PARSE_TABLE
      ::_pbi::TcParser::GetTable<::optimization_guide::proto::ProductSpecificationData>(),  // to_prefetch
      #endif  // PROTOBUF_PREFETCH_PARSE_TABLE
    }, {{
      // repeated .optimization_guide.proto.ProductSpecification product_specifications = 2;
      {::_pbi::TcParser::FastMtR1,
       {18, 1, 1,
        PROTOBUF_FIELD_OFFSET(ProductSpecificationData, _impl_.product_specifications_)}},
      // repeated .optimization_guide.proto.ProductSpecificationSection product_specification_sections = 1;
      {::_pbi::TcParser::FastMtR1,
       {10, 0, 0,
        PROTOBUF_FIELD_OFFSET(ProductSpecificationData, _impl_.product_specification_sections_)}},
    }}, {{
      65535, 65535
    }}, {{
      // repeated .optimization_guide.proto.ProductSpecificationSection product_specification_sections = 1;
      {PROTOBUF_FIELD_OFFSET(ProductSpecificationData, _impl_.product_specification_sections_), _Internal::kHasBitsOffset + 0, 0, (0 | ::_fl::kFcRepeated | ::_fl::kMessage | ::_fl::kTvTable)},
      // repeated .optimization_guide.proto.ProductSpecification product_specifications = 2;
      {PROTOBUF_FIELD_OFFSET(ProductSpecificationData, _impl_.product_specifications_), _Internal::kHasBitsOffset + 1, 1, (0 | ::_fl::kFcRepeated | ::_fl::kMessage | ::_fl::kTvTable)},
    }},
    {{
        #ifndef PROTOBUF_MESSAGE_GLOBALS
        {::_pbi::TcParser::GetTable<::optimization_guide::proto::ProductSpecificationSection>()},
        #else
        {::_pbi::FieldAuxMessageGlobals(), &::optimization_guide::proto::ProductSpecificationSection_globals_},
        #endif
        #ifndef PROTOBUF_MESSAGE_GLOBALS
        {::_pbi::TcParser::GetTable<::optimization_guide::proto::ProductSpecification>()},
        #else
        {::_pbi::FieldAuxMessageGlobals(), &::optimization_guide::proto::ProductSpecification_globals_},
        #endif
    }},
    {{
    }},
  };
}


inline constexpr ProductSpecificationData::Impl_::Impl_(
    [[maybe_unused]] ::google::protobuf::internal::InternalVisibility visibility,
    ::_pbi::ConstantInitialized) noexcept
      : _cached_size_{0},
        product_specification_sections_ { visibility, ::_pbi::InternalMetadataOffset::Build<
            ::optimization_guide::proto::ProductSpecificationData,
            PROTOBUF_FIELD_OFFSET(::optimization_guide::proto::ProductSpecificationData, _impl_.product_specification_sections_)>()
         }
        ,
        product_specifications_ { visibility, ::_pbi::InternalMetadataOffset::Build<
            ::optimization_guide::proto::ProductSpecificationData,
            PROTOBUF_FIELD_OFFSET(::optimization_guide::proto::ProductSpecificationData, _impl_.product_specifications_)>()
         }
     {}

template <typename>
constexpr ProductSpecificationData::ProductSpecificationData(::_pbi::ConstantInitialized,
                       const ::_pbi::ClassData* PROTOBUF_NONNULL class_data)
    : ::google::protobuf::MessageLite(
#if defined(PROTOBUF_CUSTOM_VTABLE)
          class_data
#endif  // PROTOBUF_CUSTOM_VTABLE
          ),
      _impl_(internal_visibility(), ::_pbi::ConstantInitialized()) {
}
inline void* PROTOBUF_NONNULL ProductSpecificationData::PlacementNew_(
    const void* PROTOBUF_NONNULL, void* PROTOBUF_NONNULL mem,
    ::google::protobuf::Arena* PROTOBUF_NULLABLE arena) {
  return ::new (mem) ProductSpecificationData(arena);
}
constexpr auto ProductSpecificationData::InternalNewImpl_() {
  return ::google::protobuf::internal::MessageCreator::CopyInit(sizeof(ProductSpecificationData), alignof(ProductSpecificationData));
}
constexpr auto ProductSpecificationData::InternalGenerateClassData_(
    const MessageLite& prototype,
    const ::google::protobuf::internal::TcParseTableBase* tc_table) {
  return ::google::protobuf::internal::ClassDataLite{
      {
          &prototype,
#ifndef PROTOBUF_MESSAGE_GLOBALS
          &_table_.header,
#else
          tc_table,
#endif
          nullptr,  // IsInitialized
          &ProductSpecificationData::MergeImpl,
          ::google::protobuf::MessageLite::GetNewImpl<ProductSpecificationData>(),
#if defined(PROTOBUF_CUSTOM_VTABLE)
          &ProductSpecificationData::SharedDtor,
          ::google::protobuf::MessageLite::GetClearImpl<ProductSpecificationData>(), &ProductSpecificationData::ByteSizeLong,
              &ProductSpecificationData::_InternalSerialize,
#endif  // PROTOBUF_CUSTOM_VTABLE
          PROTOBUF_FIELD_OFFSET(ProductSpecificationData, _impl_._cached_size_),
          true,
      },
      "optimization_guide.proto.ProductSpecificationData",
  };
}
struct ProductSpecificationDataGlobalsTypeInternal : ::_pbi::MessageGlobalsBase {
  constexpr ProductSpecificationDataGlobalsTypeInternal()
      :
#ifndef PROTOBUF_MESSAGE_GLOBALS
        _default(::_pbi::ConstantInitialized{},
                 ProductSpecificationData_class_data_.base())
#else   // !PROTOBUF_MESSAGE_GLOBALS
        MessageGlobalsBase(ProductSpecificationData::InternalGenerateClassData_(
            _default, &ProductSpecificationData_globals_._table.header)),
        _default(::_pbi::ConstantInitialized{}, GetClassData()),
        _table(::_pbi::PrivateAccess::GenerateParseTable<ProductSpecificationData>(
            GetClassData()))
#endif  // PROTOBUF_MESSAGE_GLOBALS
  {
  }
  ~ProductSpecificationDataGlobalsTypeInternal() {}
  union {
    alignas(::_pbi::kMaxMessageAlignment) ProductSpecificationData _default;
  };
#ifdef PROTOBUF_MESSAGE_GLOBALS
  decltype(::_pbi::PrivateAccess::GenerateParseTable<ProductSpecificationData>(
      ::std::declval<const ::_pbi::ClassData*>())) _table;
#endif
};
#ifdef PROTOBUF_MESSAGE_GLOBALS
static_assert(PROTOBUF_FIELD_OFFSET(ProductSpecificationDataGlobalsTypeInternal, _default) ==
              ::_pbi::MessageGlobalsBase::OffsetToDefault());
#endif  // PROTOBUF_MESSAGE_GLOBALS

PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT
    PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 PROTOBUF_MESSAGE_GLOBALS_CONST ProductSpecificationDataGlobalsTypeInternal ProductSpecificationData_globals_
        PROTOBUF_MESSAGE_GLOBALS_SECTION(.data.rel.ro);
#if defined(PROTOBUF_CUSTOM_VTABLE)
namespace {
const ::_pbi::ClassData* ProductSpecificationData_get_class_data() {
#ifdef PROTOBUF_MESSAGE_GLOBALS
  return ProductSpecificationData_globals_.GetClassData();
#else
  return ProductSpecificationData_class_data_.base();
#endif  // PROTOBUF_MESSAGE_GLOBALS
}
}  // namespace
#endif  // PROTOBUF_CUSTOM_VTABLE
class ProductSpecificationsQuality::_Internal {
 public:
  using HasBits = decltype(::std::declval<ProductSpecificationsQuality>()._impl_._has_bits_);
  static constexpr ::int32_t kHasBitsOffset =
      8 * PROTOBUF_FIELD_OFFSET(ProductSpecificationsQuality, _impl_._has_bits_);
};

constexpr ProductSpecificationsQuality::ParseTableT_ ProductSpecificationsQuality::InternalGenerateParseTable_(const ::_pbi::ClassData* class_data) {
  return ParseTableT_{
    {
      PROTOBUF_FIELD_OFFSET(ProductSpecificationsQuality, _impl_._has_bits_),
      0, // no _extensions_
      4, 24,  // max_field_number, fast_idx_mask
      offsetof(ParseTableT_, field_lookup_table),
      4294967280,  // skipmap
      offsetof(ParseTableT_, field_entries),
      4,  // num_field_entries
      2,  // num_aux_entries
      offsetof(ParseTableT_, aux_entries),
      class_data,
      nullptr,  // post_loop_handler
      ::_pbi::TcParser::GenericFallbackLite,  // fallback
      #ifdef PROTOBUF_PREFETCH_PARSE_TABLE
      ::_pbi::TcParser::GetTable<::optimization_guide::proto::ProductSpecificationsQuality>(),  // to_prefetch
      #endif  // PROTOBUF_PREFETCH_PARSE_TABLE
    }, {{
      // string table_id = 4 [features = {
      {::_pbi::TcParser::FastUS1,
       {34, 1, 0,
        PROTOBUF_FIELD_OFFSET(ProductSpecificationsQuality, _impl_.table_id_)}},
      // repeated .optimization_guide.proto.ProductIdentifier product_identifiers = 1;
      {::_pbi::TcParser::FastMtR1,
       {10, 0, 0,
        PROTOBUF_FIELD_OFFSET(ProductSpecificationsQuality, _impl_.product_identifiers_)}},
      // .optimization_guide.proto.ProductSpecificationData product_specification_data = 2 [features = {
      {::_pbi::TcParser::FastMtS1,
       {18, 2, 1,
        PROTOBUF_FIELD_OFFSET(ProductSpecificationsQuality, _impl_.product_specification_data_)}},
      // .optimization_guide.proto.UserFeedback user_feedback = 3 [features = {
      {::_pbi::TcParser::FastV32S1,
       {24, 3, 0,
        PROTOBUF_FIELD_OFFSET(ProductSpecificationsQuality, _impl_.user_feedback_)}},
    }}, {{
      65535, 65535
    }}, {{
      // repeated .optimization_guide.proto.ProductIdentifier product_identifiers = 1;
      {PROTOBUF_FIELD_OFFSET(ProductSpecificationsQuality, _impl_.product_identifiers_), _Internal::kHasBitsOffset + 0, 0, (0 | ::_fl::kFcRepeated | ::_fl::kMessage | ::_fl::kTvTable)},
      // .optimization_guide.proto.ProductSpecificationData product_specification_data = 2 [features = {
      {PROTOBUF_FIELD_OFFSET(ProductSpecificationsQuality, _impl_.product_specification_data_), _Internal::kHasBitsOffset + 2, 1, (0 | ::_fl::kFcOptional | ::_fl::kMessage | ::_fl::kTvTable)},
      // .optimization_guide.proto.UserFeedback user_feedback = 3 [features = {
      {PROTOBUF_FIELD_OFFSET(ProductSpecificationsQuality, _impl_.user_feedback_), _Internal::kHasBitsOffset + 3, 0, (0 | ::_fl::kFcOptional | ::_fl::kOpenEnum)},
      // string table_id = 4 [features = {
      {PROTOBUF_FIELD_OFFSET(ProductSpecificationsQuality, _impl_.table_id_), _Internal::kHasBitsOffset + 1, 0, (0 | ::_fl::kFcOptional | ::_fl::kUtf8String | ::_fl::kRepAString)},
    }},
    {{
        #ifndef PROTOBUF_MESSAGE_GLOBALS
        {::_pbi::TcParser::GetTable<::optimization_guide::proto::ProductIdentifier>()},
        #else
        {::_pbi::FieldAuxMessageGlobals(), &::optimization_guide::proto::ProductIdentifier_globals_},
        #endif
        #ifndef PROTOBUF_MESSAGE_GLOBALS
        {::_pbi::TcParser::GetTable<::optimization_guide::proto::ProductSpecificationData>()},
        #else
        {::_pbi::FieldAuxMessageGlobals(), &::optimization_guide::proto::ProductSpecificationData_globals_},
        #endif
    }},
    {{
      "\65\0\0\0\10\0\0\0"
      "optimization_guide.proto.ProductSpecificationsQuality"
      "table_id"
    }},
  };
}


inline constexpr ProductSpecificationsQuality::Impl_::Impl_(
    [[maybe_unused]] ::google::protobuf::internal::InternalVisibility visibility,
    ::_pbi::ConstantInitialized) noexcept
      : _cached_size_{0},
        product_identifiers_ { visibility, ::_pbi::InternalMetadataOffset::Build<
            ::optimization_guide::proto::ProductSpecificationsQuality,
            PROTOBUF_FIELD_OFFSET(::optimization_guide::proto::ProductSpecificationsQuality, _impl_.product_identifiers_)>()
         }
        ,
        table_id_(
            &::google::protobuf::internal::fixed_address_empty_string,
            ::_pbi::ConstantInitialized()),
        product_specification_data_{nullptr},
        user_feedback_{static_cast< ::optimization_guide::proto::UserFeedback >(0)} {}

template <typename>
constexpr ProductSpecificationsQuality::ProductSpecificationsQuality(::_pbi::ConstantInitialized,
                       const ::_pbi::ClassData* PROTOBUF_NONNULL class_data)
    : ::google::protobuf::MessageLite(
#if defined(PROTOBUF_CUSTOM_VTABLE)
          class_data
#endif  // PROTOBUF_CUSTOM_VTABLE
          ),
      _impl_(internal_visibility(), ::_pbi::ConstantInitialized()) {
}
inline void* PROTOBUF_NONNULL ProductSpecificationsQuality::PlacementNew_(
    const void* PROTOBUF_NONNULL, void* PROTOBUF_NONNULL mem,
    ::google::protobuf::Arena* PROTOBUF_NULLABLE arena) {
  return ::new (mem) ProductSpecificationsQuality(arena);
}
constexpr auto ProductSpecificationsQuality::InternalNewImpl_() {
  return ::google::protobuf::internal::MessageCreator::CopyInit(sizeof(ProductSpecificationsQuality), alignof(ProductSpecificationsQuality));
}
constexpr auto ProductSpecificationsQuality::InternalGenerateClassData_(
    const MessageLite& prototype,
    const ::google::protobuf::internal::TcParseTableBase* tc_table) {
  return ::google::protobuf::internal::ClassDataLite{
      {
          &prototype,
#ifndef PROTOBUF_MESSAGE_GLOBALS
          &_table_.header,
#else
          tc_table,
#endif
          nullptr,  // IsInitialized
          &ProductSpecificationsQuality::MergeImpl,
          ::google::protobuf::MessageLite::GetNewImpl<ProductSpecificationsQuality>(),
#if defined(PROTOBUF_CUSTOM_VTABLE)
          &ProductSpecificationsQuality::SharedDtor,
          ::google::protobuf::MessageLite::GetClearImpl<ProductSpecificationsQuality>(), &ProductSpecificationsQuality::ByteSizeLong,
              &ProductSpecificationsQuality::_InternalSerialize,
#endif  // PROTOBUF_CUSTOM_VTABLE
          PROTOBUF_FIELD_OFFSET(ProductSpecificationsQuality, _impl_._cached_size_),
          true,
      },
      "optimization_guide.proto.ProductSpecificationsQuality",
  };
}
struct ProductSpecificationsQualityGlobalsTypeInternal : ::_pbi::MessageGlobalsBase {
  constexpr ProductSpecificationsQualityGlobalsTypeInternal()
      :
#ifndef PROTOBUF_MESSAGE_GLOBALS
        _default(::_pbi::ConstantInitialized{},
                 ProductSpecificationsQuality_class_data_.base())
#else   // !PROTOBUF_MESSAGE_GLOBALS
        MessageGlobalsBase(ProductSpecificationsQuality::InternalGenerateClassData_(
            _default, &ProductSpecificationsQuality_globals_._table.header)),
        _default(::_pbi::ConstantInitialized{}, GetClassData()),
        _table(::_pbi::PrivateAccess::GenerateParseTable<ProductSpecificationsQuality>(
            GetClassData()))
#endif  // PROTOBUF_MESSAGE_GLOBALS
  {
  }
  ~ProductSpecificationsQualityGlobalsTypeInternal() {}
  union {
    alignas(::_pbi::kMaxMessageAlignment) ProductSpecificationsQuality _default;
  };
#ifdef PROTOBUF_MESSAGE_GLOBALS
  decltype(::_pbi::PrivateAccess::GenerateParseTable<ProductSpecificationsQuality>(
      ::std::declval<const ::_pbi::ClassData*>())) _table;
#endif
};
#ifdef PROTOBUF_MESSAGE_GLOBALS
static_assert(PROTOBUF_FIELD_OFFSET(ProductSpecificationsQualityGlobalsTypeInternal, _default) ==
              ::_pbi::MessageGlobalsBase::OffsetToDefault());
#endif  // PROTOBUF_MESSAGE_GLOBALS

PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT
    PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 PROTOBUF_MESSAGE_GLOBALS_CONST ProductSpecificationsQualityGlobalsTypeInternal ProductSpecificationsQuality_globals_
        PROTOBUF_MESSAGE_GLOBALS_SECTION(.data.rel.ro);
#if defined(PROTOBUF_CUSTOM_VTABLE)
namespace {
const ::_pbi::ClassData* ProductSpecificationsQuality_get_class_data() {
#ifdef PROTOBUF_MESSAGE_GLOBALS
  return ProductSpecificationsQuality_globals_.GetClassData();
#else
  return ProductSpecificationsQuality_class_data_.base();
#endif  // PROTOBUF_MESSAGE_GLOBALS
}
}  // namespace
#endif  // PROTOBUF_CUSTOM_VTABLE
class ProductSpecificationsLoggingData::_Internal {
 public:
  using HasBits = decltype(::std::declval<ProductSpecificationsLoggingData>()._impl_._has_bits_);
  static constexpr ::int32_t kHasBitsOffset =
      8 * PROTOBUF_FIELD_OFFSET(ProductSpecificationsLoggingData, _impl_._has_bits_);
};

constexpr ProductSpecificationsLoggingData::ParseTableT_ ProductSpecificationsLoggingData::InternalGenerateParseTable_(const ::_pbi::ClassData* class_data) {
  return ParseTableT_{
    {
      PROTOBUF_FIELD_OFFSET(ProductSpecificationsLoggingData, _impl_._has_bits_),
      0, // no _extensions_
      3, 0,  // max_field_number, fast_idx_mask
      offsetof(ParseTableT_, field_lookup_table),
      4294967291,  // skipmap
      offsetof(ParseTableT_, field_entries),
      1,  // num_field_entries
      1,  // num_aux_entries
      offsetof(ParseTableT_, aux_entries),
      class_data,
      nullptr,  // post_loop_handler
      ::_pbi::TcParser::GenericFallbackLite,  // fallback
      #ifdef PROTOBUF_PREFETCH_PARSE_TABLE
      ::_pbi::TcParser::GetTable<::optimization_guide::proto::ProductSpecificationsLoggingData>(),  // to_prefetch
      #endif  // PROTOBUF_PREFETCH_PARSE_TABLE
    }, {{
      // .optimization_guide.proto.ProductSpecificationsQuality quality = 3 [features = {
      {::_pbi::TcParser::FastMtS1,
       {26, 0, 0,
        PROTOBUF_FIELD_OFFSET(ProductSpecificationsLoggingData, _impl_.quality_)}},
    }}, {{
      65535, 65535
    }}, {{
      // .optimization_guide.proto.ProductSpecificationsQuality quality = 3 [features = {
      {PROTOBUF_FIELD_OFFSET(ProductSpecificationsLoggingData, _impl_.quality_), _Internal::kHasBitsOffset + 0, 0, (0 | ::_fl::kFcOptional | ::_fl::kMessage | ::_fl::kTvTable)},
    }},
    {{
        #ifndef PROTOBUF_MESSAGE_GLOBALS
        {::_pbi::TcParser::GetTable<::optimization_guide::proto::ProductSpecificationsQuality>()},
        #else
        {::_pbi::FieldAuxMessageGlobals(), &::optimization_guide::proto::ProductSpecificationsQuality_globals_},
        #endif
    }},
    {{
    }},
  };
}


inline constexpr ProductSpecificationsLoggingData::Impl_::Impl_(
    [[maybe_unused]] ::google::protobuf::internal::InternalVisibility visibility,
    ::_pbi::ConstantInitialized) noexcept
      : _cached_size_{0},
        quality_{nullptr} {}

template <typename>
constexpr ProductSpecificationsLoggingData::ProductSpecificationsLoggingData(::_pbi::ConstantInitialized,
                       const ::_pbi::ClassData* PROTOBUF_NONNULL class_data)
    : ::google::protobuf::MessageLite(
#if defined(PROTOBUF_CUSTOM_VTABLE)
          class_data
#endif  // PROTOBUF_CUSTOM_VTABLE
          ),
      _impl_(internal_visibility(), ::_pbi::ConstantInitialized()) {
}
inline void* PROTOBUF_NONNULL ProductSpecificationsLoggingData::PlacementNew_(
    const void* PROTOBUF_NONNULL, void* PROTOBUF_NONNULL mem,
    ::google::protobuf::Arena* PROTOBUF_NULLABLE arena) {
  return ::new (mem) ProductSpecificationsLoggingData(arena);
}
constexpr auto ProductSpecificationsLoggingData::InternalNewImpl_() {
  return ::google::protobuf::internal::MessageCreator::ZeroInit(sizeof(ProductSpecificationsLoggingData), alignof(ProductSpecificationsLoggingData));
}
constexpr auto ProductSpecificationsLoggingData::InternalGenerateClassData_(
    const MessageLite& prototype,
    const ::google::protobuf::internal::TcParseTableBase* tc_table) {
  return ::google::protobuf::internal::ClassDataLite{
      {
          &prototype,
#ifndef PROTOBUF_MESSAGE_GLOBALS
          &_table_.header,
#else
          tc_table,
#endif
          nullptr,  // IsInitialized
          &ProductSpecificationsLoggingData::MergeImpl,
          ::google::protobuf::MessageLite::GetNewImpl<ProductSpecificationsLoggingData>(),
#if defined(PROTOBUF_CUSTOM_VTABLE)
          &ProductSpecificationsLoggingData::SharedDtor,
          ::google::protobuf::MessageLite::GetClearImpl<ProductSpecificationsLoggingData>(), &ProductSpecificationsLoggingData::ByteSizeLong,
              &ProductSpecificationsLoggingData::_InternalSerialize,
#endif  // PROTOBUF_CUSTOM_VTABLE
          PROTOBUF_FIELD_OFFSET(ProductSpecificationsLoggingData, _impl_._cached_size_),
          true,
      },
      "optimization_guide.proto.ProductSpecificationsLoggingData",
  };
}
struct ProductSpecificationsLoggingDataGlobalsTypeInternal : ::_pbi::MessageGlobalsBase {
  constexpr ProductSpecificationsLoggingDataGlobalsTypeInternal()
      :
#ifndef PROTOBUF_MESSAGE_GLOBALS
        _default(::_pbi::ConstantInitialized{},
                 ProductSpecificationsLoggingData_class_data_.base())
#else   // !PROTOBUF_MESSAGE_GLOBALS
        MessageGlobalsBase(ProductSpecificationsLoggingData::InternalGenerateClassData_(
            _default, &ProductSpecificationsLoggingData_globals_._table.header)),
        _default(::_pbi::ConstantInitialized{}, GetClassData()),
        _table(::_pbi::PrivateAccess::GenerateParseTable<ProductSpecificationsLoggingData>(
            GetClassData()))
#endif  // PROTOBUF_MESSAGE_GLOBALS
  {
  }
  ~ProductSpecificationsLoggingDataGlobalsTypeInternal() {}
  union {
    alignas(::_pbi::kMaxMessageAlignment) ProductSpecificationsLoggingData _default;
  };
#ifdef PROTOBUF_MESSAGE_GLOBALS
  decltype(::_pbi::PrivateAccess::GenerateParseTable<ProductSpecificationsLoggingData>(
      ::std::declval<const ::_pbi::ClassData*>())) _table;
#endif
};
#ifdef PROTOBUF_MESSAGE_GLOBALS
static_assert(PROTOBUF_FIELD_OFFSET(ProductSpecificationsLoggingDataGlobalsTypeInternal, _default) ==
              ::_pbi::MessageGlobalsBase::OffsetToDefault());
#endif  // PROTOBUF_MESSAGE_GLOBALS

PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT
    PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 PROTOBUF_MESSAGE_GLOBALS_CONST ProductSpecificationsLoggingDataGlobalsTypeInternal ProductSpecificationsLoggingData_globals_
        PROTOBUF_MESSAGE_GLOBALS_SECTION(.data.rel.ro);
#if defined(PROTOBUF_CUSTOM_VTABLE)
namespace {
const ::_pbi::ClassData* ProductSpecificationsLoggingData_get_class_data() {
#ifdef PROTOBUF_MESSAGE_GLOBALS
  return ProductSpecificationsLoggingData_globals_.GetClassData();
#else
  return ProductSpecificationsLoggingData_class_data_.base();
#endif  // PROTOBUF_MESSAGE_GLOBALS
}
}  // namespace
#endif  // PROTOBUF_CUSTOM_VTABLE
}  // namespace proto
}  // namespace optimization_guide
namespace optimization_guide {
namespace proto {
// ===================================================================

ProductSpecificationsLoggingData::ProductSpecificationsLoggingData(::google::protobuf::Arena* PROTOBUF_NULLABLE arena)
#if defined(PROTOBUF_CUSTOM_VTABLE)
    : ::google::protobuf::MessageLite(arena, ProductSpecificationsLoggingData_get_class_data()) {
#else   // PROTOBUF_CUSTOM_VTABLE
    : ::google::protobuf::MessageLite(arena) {
#endif  // PROTOBUF_CUSTOM_VTABLE
  SharedCtor(arena);
  // @@protoc_insertion_point(arena_constructor:optimization_guide.proto.ProductSpecificationsLoggingData)
}
PROTOBUF_NDEBUG_INLINE ProductSpecificationsLoggingData::Impl_::Impl_(
    [[maybe_unused]] ::google::protobuf::internal::InternalVisibility visibility,
    [[maybe_unused]] ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const Impl_& from,
    [[maybe_unused]] const ::optimization_guide::proto::ProductSpecificationsLoggingData& from_msg)
      : _has_bits_{from._has_bits_},
        _cached_size_{0} {}

ProductSpecificationsLoggingData::ProductSpecificationsLoggingData(
    ::google::protobuf::Arena* PROTOBUF_NULLABLE arena,
    const ProductSpecificationsLoggingData& from)
#if defined(PROTOBUF_CUSTOM_VTABLE)
    : ::google::protobuf::MessageLite(arena, ProductSpecificationsLoggingData_get_class_data()) {

#else   // PROTOBUF_CUSTOM_VTABLE
    : ::google::protobuf::MessageLite(arena) {
#endif  // PROTOBUF_CUSTOM_VTABLE
  ProductSpecificationsLoggingData* const _this = this;
  (void)_this;
  _internal_metadata_.MergeFrom<::std::string>(
      from._internal_metadata_);
  new (&_impl_) Impl_(internal_visibility(), arena, from._impl_, from);
  ::uint32_t cached_has_bits = _impl_._has_bits_[0];
  _impl_.quality_ = (CheckHasBit(cached_has_bits, 0x00000001U))
                ? ::google::protobuf::MessageLite::CopyConstruct(arena, *from._impl_.quality_)
                : nullptr;

  // @@protoc_insertion_point(copy_constructor:optimization_guide.proto.ProductSpecificationsLoggingData)
}
PROTOBUF_NDEBUG_INLINE ProductSpecificationsLoggingData::Impl_::Impl_(
    [[maybe_unused]] ::google::protobuf::internal::InternalVisibility visibility,
    [[maybe_unused]] ::google::protobuf::Arena* PROTOBUF_NULLABLE arena)
      : _cached_size_{0} {}

inline void ProductSpecificationsLoggingData::SharedCtor(::_pb::Arena* PROTOBUF_NULLABLE arena) {
  new (&_impl_) Impl_(internal_visibility(), arena);
  _impl_.quality_ = {};
}
ProductSpecificationsLoggingData::~ProductSpecificationsLoggingData() {
  // @@protoc_insertion_point(destructor:optimization_guide.proto.ProductSpecificationsLoggingData)
  SharedDtor(*this);
}
inline void ProductSpecificationsLoggingData::SharedDtor(MessageLite& self) {
  ProductSpecificationsLoggingData& this_ = static_cast<ProductSpecificationsLoggingData&>(self);
  if constexpr (::_pbi::DebugHardenCheckHasBitConsistency()) {
    this_.CheckHasBitConsistency();
  }
  this_._internal_metadata_.Delete<::std::string>();
  ABSL_DCHECK(this_.GetArena() == nullptr);
  delete this_._impl_.quality_;
  this_._impl_.~Impl_();
}

#ifndef PROTOBUF_MESSAGE_GLOBALS
PROTOBUF_CONSTINIT
PROTOBUF_ATTRIBUTE_INIT_PRIORITY1
const ::google::protobuf::internal::ClassDataLite ProductSpecificationsLoggingData_class_data_ =
    ProductSpecificationsLoggingData::InternalGenerateClassData_(ProductSpecificationsLoggingData_globals_._default);

PROTOBUF_ATTRIBUTE_WEAK const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL
ProductSpecificationsLoggingData::GetClassData() const {
  return ProductSpecificationsLoggingData_class_data_.base();
}
#else
PROTOBUF_ATTRIBUTE_WEAK const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL
ProductSpecificationsLoggingData::GetClassData() const {
  return ProductSpecificationsLoggingData_globals_.GetClassData();
}
#endif  // !PROTOBUF_MESSAGE_GLOBALS
#ifndef PROTOBUF_MESSAGE_GLOBALS
PROTOBUF_CONSTINIT
PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 const ProductSpecificationsLoggingData::ParseTableT_
    ProductSpecificationsLoggingData::_table_ =
        ProductSpecificationsLoggingData::InternalGenerateParseTable_(ProductSpecificationsLoggingData_class_data_.base());
#endif  // !PROTOBUF_MESSAGE_GLOBALS
PROTOBUF_NOINLINE void ProductSpecificationsLoggingData::Clear() {
// @@protoc_insertion_point(message_clear_start:optimization_guide.proto.ProductSpecificationsLoggingData)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  ::uint32_t cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  cached_has_bits = _impl_._has_bits_[0];
  if (CheckHasBit(cached_has_bits, 0x00000001U)) {
    ABSL_DCHECK(_impl_.quality_ != nullptr);
    _impl_.quality_->Clear();
  }
  _impl_._has_bits_.Clear();
  _internal_metadata_.Clear<::std::string>();
}

#if defined(PROTOBUF_CUSTOM_VTABLE)
::uint8_t* PROTOBUF_NONNULL ProductSpecificationsLoggingData::_InternalSerialize(
    const ::google::protobuf::MessageLite& base, ::uint8_t* PROTOBUF_NONNULL target,
    ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) {
  const ProductSpecificationsLoggingData& this_ = static_cast<const ProductSpecificationsLoggingData&>(base);
#else   // PROTOBUF_CUSTOM_VTABLE
::uint8_t* PROTOBUF_NONNULL ProductSpecificationsLoggingData::_InternalSerialize(
    ::uint8_t* PROTOBUF_NONNULL target,
    ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const {
  const ProductSpecificationsLoggingData& this_ = *this;
#endif  // PROTOBUF_CUSTOM_VTABLE
  if constexpr (::_pbi::DebugHardenCheckHasBitConsistency()) {
    this_.CheckHasBitConsistency();
  }
  // @@protoc_insertion_point(serialize_to_array_start:optimization_guide.proto.ProductSpecificationsLoggingData)
  ::uint32_t cached_has_bits = 0;
  (void)cached_has_bits;

  cached_has_bits = this_._impl_._has_bits_[0];
  // .optimization_guide.proto.ProductSpecificationsQuality quality = 3 [features = {
  if (CheckHasBit(cached_has_bits, 0x00000001U)) {
    target = ::google::protobuf::internal::WireFormatLite::InternalWriteMessage(
        3, *this_._impl_.quality_, this_._impl_.quality_->GetCachedSize(), target,
        stream);
  }

  if (ABSL_PREDICT_FALSE(this_._internal_metadata_.have_unknown_fields())) {
    target = stream->WriteRaw(
        this_._internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString).data(),
        static_cast<int>(this_._internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString).size()), target);
  }
  // @@protoc_insertion_point(serialize_to_array_end:optimization_guide.proto.ProductSpecificationsLoggingData)
  return target;
}

#if defined(PROTOBUF_CUSTOM_VTABLE)
::size_t ProductSpecificationsLoggingData::ByteSizeLong(const MessageLite& base) {
  const ProductSpecificationsLoggingData& this_ = static_cast<const ProductSpecificationsLoggingData&>(base);
#else   // PROTOBUF_CUSTOM_VTABLE
::size_t ProductSpecificationsLoggingData::ByteSizeLong() const {
  const ProductSpecificationsLoggingData& this_ = *this;
#endif  // PROTOBUF_CUSTOM_VTABLE
  // @@protoc_insertion_point(message_byte_size_start:optimization_guide.proto.ProductSpecificationsLoggingData)
  ::size_t total_size = 0;

  ::uint32_t cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void)cached_has_bits;

   {
    // .optimization_guide.proto.ProductSpecificationsQuality quality = 3 [features = {
    cached_has_bits = this_._impl_._has_bits_[0];
    if (CheckHasBit(cached_has_bits, 0x00000001U)) {
      total_size += 1 +
                    ::google::protobuf::internal::WireFormatLite::MessageSize(*this_._impl_.quality_);
    }
  }
  if (ABSL_PREDICT_FALSE(this_._internal_metadata_.have_unknown_fields())) {
    total_size += this_._internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString).size();
  }
  this_._impl_._cached_size_.Set(::_pbi::ToCachedSize(total_size));
  return total_size;
}

void ProductSpecificationsLoggingData::MergeImpl(::google::protobuf::MessageLite& to_msg,
                      const ::google::protobuf::MessageLite& from_msg) {
   auto* const _this = static_cast<ProductSpecificationsLoggingData*>(&to_msg);
  auto& from = static_cast<const ProductSpecificationsLoggingData&>(from_msg);
  if constexpr (::_pbi::DebugHardenCheckHasBitConsistency()) {
    from.CheckHasBitConsistency();
  }
  ::google::protobuf::Arena* arena = _this->GetArena();
  // @@protoc_insertion_point(class_specific_merge_from_start:optimization_guide.proto.ProductSpecificationsLoggingData)
  ABSL_DCHECK_NE(&from, _this);
  ::uint32_t cached_has_bits = 0;
  (void)cached_has_bits;

  cached_has_bits = from._impl_._has_bits_[0];
  if (CheckHasBit(cached_has_bits, 0x00000001U)) {
    ABSL_DCHECK(from._impl_.quality_ != nullptr);
    if (_this->_impl_.quality_ == nullptr) {
      _this->_impl_.quality_ = ::google::protobuf::MessageLite::CopyConstruct(arena, *from._impl_.quality_);
    } else {
      _this->_impl_.quality_->MergeFrom(*from._impl_.quality_);
    }
  }
  _this->_impl_._has_bits_[0] |= cached_has_bits;
  _this->_internal_metadata_.MergeFrom<::std::string>(
      from._internal_metadata_);
}

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


void ProductSpecificationsLoggingData::InternalSwap(ProductSpecificationsLoggingData* PROTOBUF_RESTRICT PROTOBUF_NONNULL other) {
  using ::std::swap;
  _internal_metadata_.InternalSwap(&other->_internal_metadata_);
  swap(_impl_._has_bits_[0], other->_impl_._has_bits_[0]);
  swap(_impl_.quality_, other->_impl_.quality_);
}

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

ProductSpecificationsQuality::ProductSpecificationsQuality(::google::protobuf::Arena* PROTOBUF_NULLABLE arena)
#if defined(PROTOBUF_CUSTOM_VTABLE)
    : ::google::protobuf::MessageLite(arena, ProductSpecificationsQuality_get_class_data()) {
#else   // PROTOBUF_CUSTOM_VTABLE
    : ::google::protobuf::MessageLite(arena) {
#endif  // PROTOBUF_CUSTOM_VTABLE
  SharedCtor(arena);
  // @@protoc_insertion_point(arena_constructor:optimization_guide.proto.ProductSpecificationsQuality)
}
PROTOBUF_NDEBUG_INLINE ProductSpecificationsQuality::Impl_::Impl_(
    [[maybe_unused]] ::google::protobuf::internal::InternalVisibility visibility,
    [[maybe_unused]] ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const Impl_& from,
    [[maybe_unused]] const ::optimization_guide::proto::ProductSpecificationsQuality& from_msg)
      : _has_bits_{from._has_bits_},
        _cached_size_{0},
        product_identifiers_ {
          visibility, ::_pbi::InternalMetadataOffset::Build<
              ::optimization_guide::proto::ProductSpecificationsQuality,
              PROTOBUF_FIELD_OFFSET(::optimization_guide::proto::ProductSpecificationsQuality, _impl_.product_identifiers_)>()
          , from.product_identifiers_
        }
        ,
        table_id_(arena, from.table_id_) {}

ProductSpecificationsQuality::ProductSpecificationsQuality(
    ::google::protobuf::Arena* PROTOBUF_NULLABLE arena,
    const ProductSpecificationsQuality& from)
#if defined(PROTOBUF_CUSTOM_VTABLE)
    : ::google::protobuf::MessageLite(arena, ProductSpecificationsQuality_get_class_data()) {

#else   // PROTOBUF_CUSTOM_VTABLE
    : ::google::protobuf::MessageLite(arena) {
#endif  // PROTOBUF_CUSTOM_VTABLE
  ProductSpecificationsQuality* const _this = this;
  (void)_this;
  _internal_metadata_.MergeFrom<::std::string>(
      from._internal_metadata_);
  new (&_impl_) Impl_(internal_visibility(), arena, from._impl_, from);
  ::uint32_t cached_has_bits = _impl_._has_bits_[0];
  _impl_.product_specification_data_ = (CheckHasBit(cached_has_bits, 0x00000004U))
                ? ::google::protobuf::MessageLite::CopyConstruct(arena, *from._impl_.product_specification_data_)
                : nullptr;
  _impl_.user_feedback_ = from._impl_.user_feedback_;

  // @@protoc_insertion_point(copy_constructor:optimization_guide.proto.ProductSpecificationsQuality)
}
PROTOBUF_NDEBUG_INLINE ProductSpecificationsQuality::Impl_::Impl_(
    [[maybe_unused]] ::google::protobuf::internal::InternalVisibility visibility,
    [[maybe_unused]] ::google::protobuf::Arena* PROTOBUF_NULLABLE arena)
      : _cached_size_{0},
        product_identifiers_ { visibility, ::_pbi::InternalMetadataOffset::Build<
            ::optimization_guide::proto::ProductSpecificationsQuality,
            PROTOBUF_FIELD_OFFSET(::optimization_guide::proto::ProductSpecificationsQuality, _impl_.product_identifiers_)>()
         }
        ,
        table_id_(arena) {}

inline void ProductSpecificationsQuality::SharedCtor(::_pb::Arena* PROTOBUF_NULLABLE arena) {
  new (&_impl_) Impl_(internal_visibility(), arena);
  ::memset(reinterpret_cast<char*>(&_impl_) +
               offsetof(Impl_, product_specification_data_),
           0,
           offsetof(Impl_, user_feedback_) -
               offsetof(Impl_, product_specification_data_) +
               sizeof(Impl_::user_feedback_));
}
ProductSpecificationsQuality::~ProductSpecificationsQuality() {
  // @@protoc_insertion_point(destructor:optimization_guide.proto.ProductSpecificationsQuality)
  SharedDtor(*this);
}
inline void ProductSpecificationsQuality::SharedDtor(MessageLite& self) {
  ProductSpecificationsQuality& this_ = static_cast<ProductSpecificationsQuality&>(self);
  if constexpr (::_pbi::DebugHardenCheckHasBitConsistency()) {
    this_.CheckHasBitConsistency();
  }
  this_._internal_metadata_.Delete<::std::string>();
  ABSL_DCHECK(this_.GetArena() == nullptr);
  this_._impl_.table_id_.Destroy();
  delete this_._impl_.product_specification_data_;
  this_._impl_.~Impl_();
}

#ifndef PROTOBUF_MESSAGE_GLOBALS
PROTOBUF_CONSTINIT
PROTOBUF_ATTRIBUTE_INIT_PRIORITY1
const ::google::protobuf::internal::ClassDataLite ProductSpecificationsQuality_class_data_ =
    ProductSpecificationsQuality::InternalGenerateClassData_(ProductSpecificationsQuality_globals_._default);

PROTOBUF_ATTRIBUTE_WEAK const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL
ProductSpecificationsQuality::GetClassData() const {
  return ProductSpecificationsQuality_class_data_.base();
}
#else
PROTOBUF_ATTRIBUTE_WEAK const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL
ProductSpecificationsQuality::GetClassData() const {
  return ProductSpecificationsQuality_globals_.GetClassData();
}
#endif  // !PROTOBUF_MESSAGE_GLOBALS
#ifndef PROTOBUF_MESSAGE_GLOBALS
PROTOBUF_CONSTINIT
PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 const ProductSpecificationsQuality::ParseTableT_
    ProductSpecificationsQuality::_table_ =
        ProductSpecificationsQuality::InternalGenerateParseTable_(ProductSpecificationsQuality_class_data_.base());
#endif  // !PROTOBUF_MESSAGE_GLOBALS
PROTOBUF_NOINLINE void ProductSpecificationsQuality::Clear() {
// @@protoc_insertion_point(message_clear_start:optimization_guide.proto.ProductSpecificationsQuality)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  ::uint32_t cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  cached_has_bits = _impl_._has_bits_[0];
  if (BatchCheckHasBit(cached_has_bits, 0x00000007U)) {
    if (CheckHasBit(cached_has_bits, 0x00000001U)) {
      _impl_.product_identifiers_.Clear();
    }
    if (CheckHasBit(cached_has_bits, 0x00000002U)) {
      _impl_.table_id_.ClearNonDefaultToEmpty();
    }
    if (CheckHasBit(cached_has_bits, 0x00000004U)) {
      ABSL_DCHECK(_impl_.product_specification_data_ != nullptr);
      _impl_.product_specification_data_->Clear();
    }
  }
  _impl_.user_feedback_ = 0;
  _impl_._has_bits_.Clear();
  _internal_metadata_.Clear<::std::string>();
}

#if defined(PROTOBUF_CUSTOM_VTABLE)
::uint8_t* PROTOBUF_NONNULL ProductSpecificationsQuality::_InternalSerialize(
    const ::google::protobuf::MessageLite& base, ::uint8_t* PROTOBUF_NONNULL target,
    ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) {
  const ProductSpecificationsQuality& this_ = static_cast<const ProductSpecificationsQuality&>(base);
#else   // PROTOBUF_CUSTOM_VTABLE
::uint8_t* PROTOBUF_NONNULL ProductSpecificationsQuality::_InternalSerialize(
    ::uint8_t* PROTOBUF_NONNULL target,
    ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const {
  const ProductSpecificationsQuality& this_ = *this;
#endif  // PROTOBUF_CUSTOM_VTABLE
  if constexpr (::_pbi::DebugHardenCheckHasBitConsistency()) {
    this_.CheckHasBitConsistency();
  }
  // @@protoc_insertion_point(serialize_to_array_start:optimization_guide.proto.ProductSpecificationsQuality)
  ::uint32_t cached_has_bits = 0;
  (void)cached_has_bits;

  cached_has_bits = this_._impl_._has_bits_[0];
  // repeated .optimization_guide.proto.ProductIdentifier product_identifiers = 1;
  if (CheckHasBit(cached_has_bits, 0x00000001U)) {
    for (unsigned i = 0, n = static_cast<unsigned>(
                             this_._internal_product_identifiers_size());
         i < n; i++) {
      const auto& repfield = this_._internal_product_identifiers().Get(i);
      target =
          ::google::protobuf::internal::WireFormatLite::InternalWriteMessage(
              1, repfield, repfield.GetCachedSize(),
              target, stream);
    }
  }

  // .optimization_guide.proto.ProductSpecificationData product_specification_data = 2 [features = {
  if (CheckHasBit(cached_has_bits, 0x00000004U)) {
    target = ::google::protobuf::internal::WireFormatLite::InternalWriteMessage(
        2, *this_._impl_.product_specification_data_, this_._impl_.product_specification_data_->GetCachedSize(), target,
        stream);
  }

  // .optimization_guide.proto.UserFeedback user_feedback = 3 [features = {
  if (CheckHasBit(cached_has_bits, 0x00000008U)) {
    target = stream->EnsureSpace(target);
    target = ::_pbi::WireFormatLite::WriteEnumToArray(
        3, this_._internal_user_feedback(), target);
  }

  // string table_id = 4 [features = {
  if (CheckHasBit(cached_has_bits, 0x00000002U)) {
    const ::std::string& _s = this_._internal_table_id();
    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        _s.data(), static_cast<int>(_s.length()), ::google::protobuf::internal::WireFormatLite::SERIALIZE, "optimization_guide.proto.ProductSpecificationsQuality.table_id");
    target = stream->WriteStringMaybeAliased(4, _s, target);
  }

  if (ABSL_PREDICT_FALSE(this_._internal_metadata_.have_unknown_fields())) {
    target = stream->WriteRaw(
        this_._internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString).data(),
        static_cast<int>(this_._internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString).size()), target);
  }
  // @@protoc_insertion_point(serialize_to_array_end:optimization_guide.proto.ProductSpecificationsQuality)
  return target;
}

#if defined(PROTOBUF_CUSTOM_VTABLE)
::size_t ProductSpecificationsQuality::ByteSizeLong(const MessageLite& base) {
  const ProductSpecificationsQuality& this_ = static_cast<const ProductSpecificationsQuality&>(base);
#else   // PROTOBUF_CUSTOM_VTABLE
::size_t ProductSpecificationsQuality::ByteSizeLong() const {
  const ProductSpecificationsQuality& this_ = *this;
#endif  // PROTOBUF_CUSTOM_VTABLE
  // @@protoc_insertion_point(message_byte_size_start:optimization_guide.proto.ProductSpecificationsQuality)
  ::size_t total_size = 0;

  ::uint32_t cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void)cached_has_bits;

  ::_pbi::Prefetch5LinesFrom7Lines(&this_);
  cached_has_bits = this_._impl_._has_bits_[0];
  if (BatchCheckHasBit(cached_has_bits, 0x0000000fU)) {
    // repeated .optimization_guide.proto.ProductIdentifier product_identifiers = 1;
    if (CheckHasBit(cached_has_bits, 0x00000001U)) {
      total_size += 1UL * this_._internal_product_identifiers_size();
      for (const auto& msg : this_._internal_product_identifiers()) {
        total_size += ::google::protobuf::internal::WireFormatLite::MessageSize(msg);
      }
    }
    // string table_id = 4 [features = {
    if (CheckHasBit(cached_has_bits, 0x00000002U)) {
      total_size += 1 + ::google::protobuf::internal::WireFormatLite::StringSize(
                                      this_._internal_table_id());
    }
    // .optimization_guide.proto.ProductSpecificationData product_specification_data = 2 [features = {
    if (CheckHasBit(cached_has_bits, 0x00000004U)) {
      total_size += 1 +
                    ::google::protobuf::internal::WireFormatLite::MessageSize(*this_._impl_.product_specification_data_);
    }
    // .optimization_guide.proto.UserFeedback user_feedback = 3 [features = {
    if (CheckHasBit(cached_has_bits, 0x00000008U)) {
      total_size += 1 +
                    ::_pbi::WireFormatLite::EnumSize(this_._internal_user_feedback());
    }
  }
  if (ABSL_PREDICT_FALSE(this_._internal_metadata_.have_unknown_fields())) {
    total_size += this_._internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString).size();
  }
  this_._impl_._cached_size_.Set(::_pbi::ToCachedSize(total_size));
  return total_size;
}

void ProductSpecificationsQuality::MergeImpl(::google::protobuf::MessageLite& to_msg,
                      const ::google::protobuf::MessageLite& from_msg) {
   auto* const _this = static_cast<ProductSpecificationsQuality*>(&to_msg);
  auto& from = static_cast<const ProductSpecificationsQuality&>(from_msg);
  if constexpr (::_pbi::DebugHardenCheckHasBitConsistency()) {
    from.CheckHasBitConsistency();
  }
  ::google::protobuf::Arena* arena = _this->GetArena();
  // @@protoc_insertion_point(class_specific_merge_from_start:optimization_guide.proto.ProductSpecificationsQuality)
  ABSL_DCHECK_NE(&from, _this);
  ::uint32_t cached_has_bits = 0;
  (void)cached_has_bits;

  cached_has_bits = from._impl_._has_bits_[0];
  if (BatchCheckHasBit(cached_has_bits, 0x0000000fU)) {
    if (CheckHasBit(cached_has_bits, 0x00000001U)) {
      _this->_internal_mutable_product_identifiers()->InternalMergeFromWithArena(
          ::google::protobuf::MessageLite::internal_visibility(), arena,
          from._internal_product_identifiers());
    }
    if (CheckHasBit(cached_has_bits, 0x00000002U)) {
      _this->_internal_set_table_id(from._internal_table_id());
    }
    if (CheckHasBit(cached_has_bits, 0x00000004U)) {
      ABSL_DCHECK(from._impl_.product_specification_data_ != nullptr);
      if (_this->_impl_.product_specification_data_ == nullptr) {
        _this->_impl_.product_specification_data_ = ::google::protobuf::MessageLite::CopyConstruct(arena, *from._impl_.product_specification_data_);
      } else {
        _this->_impl_.product_specification_data_->MergeFrom(*from._impl_.product_specification_data_);
      }
    }
    if (CheckHasBit(cached_has_bits, 0x00000008U)) {
      _this->_impl_.user_feedback_ = from._impl_.user_feedback_;
    }
  }
  _this->_impl_._has_bits_[0] |= cached_has_bits;
  _this->_internal_metadata_.MergeFrom<::std::string>(
      from._internal_metadata_);
}

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


void ProductSpecificationsQuality::InternalSwap(ProductSpecificationsQuality* PROTOBUF_RESTRICT PROTOBUF_NONNULL other) {
  using ::std::swap;
  auto* arena = GetArena();
  ABSL_DCHECK_EQ(arena, other->GetArena());
  _internal_metadata_.InternalSwap(&other->_internal_metadata_);
  swap(_impl_._has_bits_[0], other->_impl_._has_bits_[0]);
  _impl_.product_identifiers_.InternalSwap(&other->_impl_.product_identifiers_);
  ::_pbi::ArenaStringPtr::InternalSwap(&_impl_.table_id_, &other->_impl_.table_id_, arena);
  ::google::protobuf::internal::memswap<
      PROTOBUF_FIELD_OFFSET(ProductSpecificationsQuality, _impl_.user_feedback_)
      + sizeof(ProductSpecificationsQuality::_impl_.user_feedback_)
      - PROTOBUF_FIELD_OFFSET(ProductSpecificationsQuality, _impl_.product_specification_data_)>(
          reinterpret_cast<char*>(&_impl_.product_specification_data_),
          reinterpret_cast<char*>(&other->_impl_.product_specification_data_));
}

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

ProductIdentifier::ProductIdentifier(::google::protobuf::Arena* PROTOBUF_NULLABLE arena)
#if defined(PROTOBUF_CUSTOM_VTABLE)
    : ::google::protobuf::MessageLite(arena, ProductIdentifier_get_class_data()) {
#else   // PROTOBUF_CUSTOM_VTABLE
    : ::google::protobuf::MessageLite(arena) {
#endif  // PROTOBUF_CUSTOM_VTABLE
  SharedCtor(arena);
  // @@protoc_insertion_point(arena_constructor:optimization_guide.proto.ProductIdentifier)
}
PROTOBUF_NDEBUG_INLINE ProductIdentifier::Impl_::Impl_(
    [[maybe_unused]] ::google::protobuf::internal::InternalVisibility visibility,
    [[maybe_unused]] ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const Impl_& from,
    [[maybe_unused]] const ::optimization_guide::proto::ProductIdentifier& from_msg)
      : _has_bits_{from._has_bits_},
        _cached_size_{0},
        product_url_(arena, from.product_url_) {}

ProductIdentifier::ProductIdentifier(
    ::google::protobuf::Arena* PROTOBUF_NULLABLE arena,
    const ProductIdentifier& from)
#if defined(PROTOBUF_CUSTOM_VTABLE)
    : ::google::protobuf::MessageLite(arena, ProductIdentifier_get_class_data()) {

#else   // PROTOBUF_CUSTOM_VTABLE
    : ::google::protobuf::MessageLite(arena) {
#endif  // PROTOBUF_CUSTOM_VTABLE
  ProductIdentifier* const _this = this;
  (void)_this;
  _internal_metadata_.MergeFrom<::std::string>(
      from._internal_metadata_);
  new (&_impl_) Impl_(internal_visibility(), arena, from._impl_, from);
  _impl_.gpc_id_ = from._impl_.gpc_id_;

  // @@protoc_insertion_point(copy_constructor:optimization_guide.proto.ProductIdentifier)
}
PROTOBUF_NDEBUG_INLINE ProductIdentifier::Impl_::Impl_(
    [[maybe_unused]] ::google::protobuf::internal::InternalVisibility visibility,
    [[maybe_unused]] ::google::protobuf::Arena* PROTOBUF_NULLABLE arena)
      : _cached_size_{0},
        product_url_(arena) {}

inline void ProductIdentifier::SharedCtor(::_pb::Arena* PROTOBUF_NULLABLE arena) {
  new (&_impl_) Impl_(internal_visibility(), arena);
  _impl_.gpc_id_ = {};
}
ProductIdentifier::~ProductIdentifier() {
  // @@protoc_insertion_point(destructor:optimization_guide.proto.ProductIdentifier)
  SharedDtor(*this);
}
inline void ProductIdentifier::SharedDtor(MessageLite& self) {
  ProductIdentifier& this_ = static_cast<ProductIdentifier&>(self);
  if constexpr (::_pbi::DebugHardenCheckHasBitConsistency()) {
    this_.CheckHasBitConsistency();
  }
  this_._internal_metadata_.Delete<::std::string>();
  ABSL_DCHECK(this_.GetArena() == nullptr);
  this_._impl_.product_url_.Destroy();
  this_._impl_.~Impl_();
}

#ifndef PROTOBUF_MESSAGE_GLOBALS
PROTOBUF_CONSTINIT
PROTOBUF_ATTRIBUTE_INIT_PRIORITY1
const ::google::protobuf::internal::ClassDataLite ProductIdentifier_class_data_ =
    ProductIdentifier::InternalGenerateClassData_(ProductIdentifier_globals_._default);

PROTOBUF_ATTRIBUTE_WEAK const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL
ProductIdentifier::GetClassData() const {
  return ProductIdentifier_class_data_.base();
}
#else
PROTOBUF_ATTRIBUTE_WEAK const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL
ProductIdentifier::GetClassData() const {
  return ProductIdentifier_globals_.GetClassData();
}
#endif  // !PROTOBUF_MESSAGE_GLOBALS
#ifndef PROTOBUF_MESSAGE_GLOBALS
PROTOBUF_CONSTINIT
PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 const ProductIdentifier::ParseTableT_
    ProductIdentifier::_table_ =
        ProductIdentifier::InternalGenerateParseTable_(ProductIdentifier_class_data_.base());
#endif  // !PROTOBUF_MESSAGE_GLOBALS
PROTOBUF_NOINLINE void ProductIdentifier::Clear() {
// @@protoc_insertion_point(message_clear_start:optimization_guide.proto.ProductIdentifier)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  ::uint32_t cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  cached_has_bits = _impl_._has_bits_[0];
  if (CheckHasBit(cached_has_bits, 0x00000001U)) {
    _impl_.product_url_.ClearNonDefaultToEmpty();
  }
  _impl_.gpc_id_ = ::uint64_t{0u};
  _impl_._has_bits_.Clear();
  _internal_metadata_.Clear<::std::string>();
}

#if defined(PROTOBUF_CUSTOM_VTABLE)
::uint8_t* PROTOBUF_NONNULL ProductIdentifier::_InternalSerialize(
    const ::google::protobuf::MessageLite& base, ::uint8_t* PROTOBUF_NONNULL target,
    ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) {
  const ProductIdentifier& this_ = static_cast<const ProductIdentifier&>(base);
#else   // PROTOBUF_CUSTOM_VTABLE
::uint8_t* PROTOBUF_NONNULL ProductIdentifier::_InternalSerialize(
    ::uint8_t* PROTOBUF_NONNULL target,
    ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const {
  const ProductIdentifier& this_ = *this;
#endif  // PROTOBUF_CUSTOM_VTABLE
  if constexpr (::_pbi::DebugHardenCheckHasBitConsistency()) {
    this_.CheckHasBitConsistency();
  }
  // @@protoc_insertion_point(serialize_to_array_start:optimization_guide.proto.ProductIdentifier)
  ::uint32_t cached_has_bits = 0;
  (void)cached_has_bits;

  cached_has_bits = this_._impl_._has_bits_[0];
  // uint64 gpc_id = 1 [features = {
  if (CheckHasBit(cached_has_bits, 0x00000002U)) {
    target = stream->EnsureSpace(target);
    target = ::_pbi::WireFormatLite::WriteUInt64ToArray(
        1, this_._internal_gpc_id(), target);
  }

  // string product_url = 2 [features = {
  if (CheckHasBit(cached_has_bits, 0x00000001U)) {
    const ::std::string& _s = this_._internal_product_url();
    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        _s.data(), static_cast<int>(_s.length()), ::google::protobuf::internal::WireFormatLite::SERIALIZE, "optimization_guide.proto.ProductIdentifier.product_url");
    target = stream->WriteStringMaybeAliased(2, _s, target);
  }

  if (ABSL_PREDICT_FALSE(this_._internal_metadata_.have_unknown_fields())) {
    target = stream->WriteRaw(
        this_._internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString).data(),
        static_cast<int>(this_._internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString).size()), target);
  }
  // @@protoc_insertion_point(serialize_to_array_end:optimization_guide.proto.ProductIdentifier)
  return target;
}

#if defined(PROTOBUF_CUSTOM_VTABLE)
::size_t ProductIdentifier::ByteSizeLong(const MessageLite& base) {
  const ProductIdentifier& this_ = static_cast<const ProductIdentifier&>(base);
#else   // PROTOBUF_CUSTOM_VTABLE
::size_t ProductIdentifier::ByteSizeLong() const {
  const ProductIdentifier& this_ = *this;
#endif  // PROTOBUF_CUSTOM_VTABLE
  // @@protoc_insertion_point(message_byte_size_start:optimization_guide.proto.ProductIdentifier)
  ::size_t total_size = 0;

  ::uint32_t cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void)cached_has_bits;

  ::_pbi::Prefetch5LinesFrom7Lines(&this_);
  cached_has_bits = this_._impl_._has_bits_[0];
  if (BatchCheckHasBit(cached_has_bits, 0x00000003U)) {
    // string product_url = 2 [features = {
    if (CheckHasBit(cached_has_bits, 0x00000001U)) {
      total_size += 1 + ::google::protobuf::internal::WireFormatLite::StringSize(
                                      this_._internal_product_url());
    }
    // uint64 gpc_id = 1 [features = {
    if (CheckHasBit(cached_has_bits, 0x00000002U)) {
      total_size += ::_pbi::WireFormatLite::UInt64SizePlusOne(
          this_._internal_gpc_id());
    }
  }
  if (ABSL_PREDICT_FALSE(this_._internal_metadata_.have_unknown_fields())) {
    total_size += this_._internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString).size();
  }
  this_._impl_._cached_size_.Set(::_pbi::ToCachedSize(total_size));
  return total_size;
}

void ProductIdentifier::MergeImpl(::google::protobuf::MessageLite& to_msg,
                      const ::google::protobuf::MessageLite& from_msg) {
   auto* const _this = static_cast<ProductIdentifier*>(&to_msg);
  auto& from = static_cast<const ProductIdentifier&>(from_msg);
  if constexpr (::_pbi::DebugHardenCheckHasBitConsistency()) {
    from.CheckHasBitConsistency();
  }
  // @@protoc_insertion_point(class_specific_merge_from_start:optimization_guide.proto.ProductIdentifier)
  ABSL_DCHECK_NE(&from, _this);
  ::uint32_t cached_has_bits = 0;
  (void)cached_has_bits;

  cached_has_bits = from._impl_._has_bits_[0];
  if (BatchCheckHasBit(cached_has_bits, 0x00000003U)) {
    if (CheckHasBit(cached_has_bits, 0x00000001U)) {
      _this->_internal_set_product_url(from._internal_product_url());
    }
    if (CheckHasBit(cached_has_bits, 0x00000002U)) {
      _this->_impl_.gpc_id_ = from._impl_.gpc_id_;
    }
  }
  _this->_impl_._has_bits_[0] |= cached_has_bits;
  _this->_internal_metadata_.MergeFrom<::std::string>(
      from._internal_metadata_);
}

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


void ProductIdentifier::InternalSwap(ProductIdentifier* PROTOBUF_RESTRICT PROTOBUF_NONNULL other) {
  using ::std::swap;
  auto* arena = GetArena();
  ABSL_DCHECK_EQ(arena, other->GetArena());
  _internal_metadata_.InternalSwap(&other->_internal_metadata_);
  swap(_impl_._has_bits_[0], other->_impl_._has_bits_[0]);
  ::_pbi::ArenaStringPtr::InternalSwap(&_impl_.product_url_, &other->_impl_.product_url_, arena);
  swap(_impl_.gpc_id_, other->_impl_.gpc_id_);
}

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

ProductSpecificationData::ProductSpecificationData(::google::protobuf::Arena* PROTOBUF_NULLABLE arena)
#if defined(PROTOBUF_CUSTOM_VTABLE)
    : ::google::protobuf::MessageLite(arena, ProductSpecificationData_get_class_data()) {
#else   // PROTOBUF_CUSTOM_VTABLE
    : ::google::protobuf::MessageLite(arena) {
#endif  // PROTOBUF_CUSTOM_VTABLE
  SharedCtor(arena);
  // @@protoc_insertion_point(arena_constructor:optimization_guide.proto.ProductSpecificationData)
}
PROTOBUF_NDEBUG_INLINE ProductSpecificationData::Impl_::Impl_(
    [[maybe_unused]] ::google::protobuf::internal::InternalVisibility visibility,
    [[maybe_unused]] ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const Impl_& from,
    [[maybe_unused]] const ::optimization_guide::proto::ProductSpecificationData& from_msg)
      : _has_bits_{from._has_bits_},
        _cached_size_{0},
        product_specification_sections_ {
          visibility, ::_pbi::InternalMetadataOffset::Build<
              ::optimization_guide::proto::ProductSpecificationData,
              PROTOBUF_FIELD_OFFSET(::optimization_guide::proto::ProductSpecificationData, _impl_.product_specification_sections_)>()
          , from.product_specification_sections_
        }
        ,
        product_specifications_ {
          visibility, ::_pbi::InternalMetadataOffset::Build<
              ::optimization_guide::proto::ProductSpecificationData,
              PROTOBUF_FIELD_OFFSET(::optimization_guide::proto::ProductSpecificationData, _impl_.product_specifications_)>()
          , from.product_specifications_
        }
     {}

ProductSpecificationData::ProductSpecificationData(
    ::google::protobuf::Arena* PROTOBUF_NULLABLE arena,
    const ProductSpecificationData& from)
#if defined(PROTOBUF_CUSTOM_VTABLE)
    : ::google::protobuf::MessageLite(arena, ProductSpecificationData_get_class_data()) {

#else   // PROTOBUF_CUSTOM_VTABLE
    : ::google::protobuf::MessageLite(arena) {
#endif  // PROTOBUF_CUSTOM_VTABLE
  ProductSpecificationData* const _this = this;
  (void)_this;
  _internal_metadata_.MergeFrom<::std::string>(
      from._internal_metadata_);
  new (&_impl_) Impl_(internal_visibility(), arena, from._impl_, from);

  // @@protoc_insertion_point(copy_constructor:optimization_guide.proto.ProductSpecificationData)
}
PROTOBUF_NDEBUG_INLINE ProductSpecificationData::Impl_::Impl_(
    [[maybe_unused]] ::google::protobuf::internal::InternalVisibility visibility,
    [[maybe_unused]] ::google::protobuf::Arena* PROTOBUF_NULLABLE arena)
      : _cached_size_{0},
        product_specification_sections_ { visibility, ::_pbi::InternalMetadataOffset::Build<
            ::optimization_guide::proto::ProductSpecificationData,
            PROTOBUF_FIELD_OFFSET(::optimization_guide::proto::ProductSpecificationData, _impl_.product_specification_sections_)>()
         }
        ,
        product_specifications_ { visibility, ::_pbi::InternalMetadataOffset::Build<
            ::optimization_guide::proto::ProductSpecificationData,
            PROTOBUF_FIELD_OFFSET(::optimization_guide::proto::ProductSpecificationData, _impl_.product_specifications_)>()
         }
     {}

inline void ProductSpecificationData::SharedCtor(::_pb::Arena* PROTOBUF_NULLABLE arena) {
  new (&_impl_) Impl_(internal_visibility(), arena);
}
ProductSpecificationData::~ProductSpecificationData() {
  // @@protoc_insertion_point(destructor:optimization_guide.proto.ProductSpecificationData)
  SharedDtor(*this);
}
inline void ProductSpecificationData::SharedDtor(MessageLite& self) {
  ProductSpecificationData& this_ = static_cast<ProductSpecificationData&>(self);
  if constexpr (::_pbi::DebugHardenCheckHasBitConsistency()) {
    this_.CheckHasBitConsistency();
  }
  this_._internal_metadata_.Delete<::std::string>();
  ABSL_DCHECK(this_.GetArena() == nullptr);
  this_._impl_.~Impl_();
}

#ifndef PROTOBUF_MESSAGE_GLOBALS
PROTOBUF_CONSTINIT
PROTOBUF_ATTRIBUTE_INIT_PRIORITY1
const ::google::protobuf::internal::ClassDataLite ProductSpecificationData_class_data_ =
    ProductSpecificationData::InternalGenerateClassData_(ProductSpecificationData_globals_._default);

PROTOBUF_ATTRIBUTE_WEAK const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL
ProductSpecificationData::GetClassData() const {
  return ProductSpecificationData_class_data_.base();
}
#else
PROTOBUF_ATTRIBUTE_WEAK const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL
ProductSpecificationData::GetClassData() const {
  return ProductSpecificationData_globals_.GetClassData();
}
#endif  // !PROTOBUF_MESSAGE_GLOBALS
#ifndef PROTOBUF_MESSAGE_GLOBALS
PROTOBUF_CONSTINIT
PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 const ProductSpecificationData::ParseTableT_
    ProductSpecificationData::_table_ =
        ProductSpecificationData::InternalGenerateParseTable_(ProductSpecificationData_class_data_.base());
#endif  // !PROTOBUF_MESSAGE_GLOBALS
PROTOBUF_NOINLINE void ProductSpecificationData::Clear() {
// @@protoc_insertion_point(message_clear_start:optimization_guide.proto.ProductSpecificationData)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  ::uint32_t cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  cached_has_bits = _impl_._has_bits_[0];
  if (BatchCheckHasBit(cached_has_bits, 0x00000003U)) {
    if (CheckHasBit(cached_has_bits, 0x00000001U)) {
      _impl_.product_specification_sections_.Clear();
    }
    if (CheckHasBit(cached_has_bits, 0x00000002U)) {
      _impl_.product_specifications_.Clear();
    }
  }
  _impl_._has_bits_.Clear();
  _internal_metadata_.Clear<::std::string>();
}

#if defined(PROTOBUF_CUSTOM_VTABLE)
::uint8_t* PROTOBUF_NONNULL ProductSpecificationData::_InternalSerialize(
    const ::google::protobuf::MessageLite& base, ::uint8_t* PROTOBUF_NONNULL target,
    ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) {
  const ProductSpecificationData& this_ = static_cast<const ProductSpecificationData&>(base);
#else   // PROTOBUF_CUSTOM_VTABLE
::uint8_t* PROTOBUF_NONNULL ProductSpecificationData::_InternalSerialize(
    ::uint8_t* PROTOBUF_NONNULL target,
    ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const {
  const ProductSpecificationData& this_ = *this;
#endif  // PROTOBUF_CUSTOM_VTABLE
  if constexpr (::_pbi::DebugHardenCheckHasBitConsistency()) {
    this_.CheckHasBitConsistency();
  }
  // @@protoc_insertion_point(serialize_to_array_start:optimization_guide.proto.ProductSpecificationData)
  ::uint32_t cached_has_bits = 0;
  (void)cached_has_bits;

  cached_has_bits = this_._impl_._has_bits_[0];
  // repeated .optimization_guide.proto.ProductSpecificationSection product_specification_sections = 1;
  if (CheckHasBit(cached_has_bits, 0x00000001U)) {
    for (unsigned i = 0, n = static_cast<unsigned>(
                             this_._internal_product_specification_sections_size());
         i < n; i++) {
      const auto& repfield = this_._internal_product_specification_sections().Get(i);
      target =
          ::google::protobuf::internal::WireFormatLite::InternalWriteMessage(
              1, repfield, repfield.GetCachedSize(),
              target, stream);
    }
  }

  // repeated .optimization_guide.proto.ProductSpecification product_specifications = 2;
  if (CheckHasBit(cached_has_bits, 0x00000002U)) {
    for (unsigned i = 0, n = static_cast<unsigned>(
                             this_._internal_product_specifications_size());
         i < n; i++) {
      const auto& repfield = this_._internal_product_specifications().Get(i);
      target =
          ::google::protobuf::internal::WireFormatLite::InternalWriteMessage(
              2, repfield, repfield.GetCachedSize(),
              target, stream);
    }
  }

  if (ABSL_PREDICT_FALSE(this_._internal_metadata_.have_unknown_fields())) {
    target = stream->WriteRaw(
        this_._internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString).data(),
        static_cast<int>(this_._internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString).size()), target);
  }
  // @@protoc_insertion_point(serialize_to_array_end:optimization_guide.proto.ProductSpecificationData)
  return target;
}

#if defined(PROTOBUF_CUSTOM_VTABLE)
::size_t ProductSpecificationData::ByteSizeLong(const MessageLite& base) {
  const ProductSpecificationData& this_ = static_cast<const ProductSpecificationData&>(base);
#else   // PROTOBUF_CUSTOM_VTABLE
::size_t ProductSpecificationData::ByteSizeLong() const {
  const ProductSpecificationData& this_ = *this;
#endif  // PROTOBUF_CUSTOM_VTABLE
  // @@protoc_insertion_point(message_byte_size_start:optimization_guide.proto.ProductSpecificationData)
  ::size_t total_size = 0;

  ::uint32_t cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void)cached_has_bits;

  ::_pbi::Prefetch5LinesFrom7Lines(&this_);
  cached_has_bits = this_._impl_._has_bits_[0];
  if (BatchCheckHasBit(cached_has_bits, 0x00000003U)) {
    // repeated .optimization_guide.proto.ProductSpecificationSection product_specification_sections = 1;
    if (CheckHasBit(cached_has_bits, 0x00000001U)) {
      total_size += 1UL * this_._internal_product_specification_sections_size();
      for (const auto& msg : this_._internal_product_specification_sections()) {
        total_size += ::google::protobuf::internal::WireFormatLite::MessageSize(msg);
      }
    }
    // repeated .optimization_guide.proto.ProductSpecification product_specifications = 2;
    if (CheckHasBit(cached_has_bits, 0x00000002U)) {
      total_size += 1UL * this_._internal_product_specifications_size();
      for (const auto& msg : this_._internal_product_specifications()) {
        total_size += ::google::protobuf::internal::WireFormatLite::MessageSize(msg);
      }
    }
  }
  if (ABSL_PREDICT_FALSE(this_._internal_metadata_.have_unknown_fields())) {
    total_size += this_._internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString).size();
  }
  this_._impl_._cached_size_.Set(::_pbi::ToCachedSize(total_size));
  return total_size;
}

void ProductSpecificationData::MergeImpl(::google::protobuf::MessageLite& to_msg,
                      const ::google::protobuf::MessageLite& from_msg) {
   auto* const _this = static_cast<ProductSpecificationData*>(&to_msg);
  auto& from = static_cast<const ProductSpecificationData&>(from_msg);
  if constexpr (::_pbi::DebugHardenCheckHasBitConsistency()) {
    from.CheckHasBitConsistency();
  }
  ::google::protobuf::Arena* arena = _this->GetArena();
  // @@protoc_insertion_point(class_specific_merge_from_start:optimization_guide.proto.ProductSpecificationData)
  ABSL_DCHECK_NE(&from, _this);
  ::uint32_t cached_has_bits = 0;
  (void)cached_has_bits;

  cached_has_bits = from._impl_._has_bits_[0];
  if (BatchCheckHasBit(cached_has_bits, 0x00000003U)) {
    if (CheckHasBit(cached_has_bits, 0x00000001U)) {
      _this->_internal_mutable_product_specification_sections()->InternalMergeFromWithArena(
          ::google::protobuf::MessageLite::internal_visibility(), arena,
          from._internal_product_specification_sections());
    }
    if (CheckHasBit(cached_has_bits, 0x00000002U)) {
      _this->_internal_mutable_product_specifications()->InternalMergeFromWithArena(
          ::google::protobuf::MessageLite::internal_visibility(), arena,
          from._internal_product_specifications());
    }
  }
  _this->_impl_._has_bits_[0] |= cached_has_bits;
  _this->_internal_metadata_.MergeFrom<::std::string>(
      from._internal_metadata_);
}

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


void ProductSpecificationData::InternalSwap(ProductSpecificationData* PROTOBUF_RESTRICT PROTOBUF_NONNULL other) {
  using ::std::swap;
  _internal_metadata_.InternalSwap(&other->_internal_metadata_);
  swap(_impl_._has_bits_[0], other->_impl_._has_bits_[0]);
  _impl_.product_specification_sections_.InternalSwap(&other->_impl_.product_specification_sections_);
  _impl_.product_specifications_.InternalSwap(&other->_impl_.product_specifications_);
}

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

ProductSpecificationSection::ProductSpecificationSection(::google::protobuf::Arena* PROTOBUF_NULLABLE arena)
#if defined(PROTOBUF_CUSTOM_VTABLE)
    : ::google::protobuf::MessageLite(arena, ProductSpecificationSection_get_class_data()) {
#else   // PROTOBUF_CUSTOM_VTABLE
    : ::google::protobuf::MessageLite(arena) {
#endif  // PROTOBUF_CUSTOM_VTABLE
  SharedCtor(arena);
  // @@protoc_insertion_point(arena_constructor:optimization_guide.proto.ProductSpecificationSection)
}
PROTOBUF_NDEBUG_INLINE ProductSpecificationSection::Impl_::Impl_(
    [[maybe_unused]] ::google::protobuf::internal::InternalVisibility visibility,
    [[maybe_unused]] ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const Impl_& from,
    [[maybe_unused]] const ::optimization_guide::proto::ProductSpecificationSection& from_msg)
      : _has_bits_{from._has_bits_},
        _cached_size_{0},
        key_(arena, from.key_),
        title_(arena, from.title_) {}

ProductSpecificationSection::ProductSpecificationSection(
    ::google::protobuf::Arena* PROTOBUF_NULLABLE arena,
    const ProductSpecificationSection& from)
#if defined(PROTOBUF_CUSTOM_VTABLE)
    : ::google::protobuf::MessageLite(arena, ProductSpecificationSection_get_class_data()) {

#else   // PROTOBUF_CUSTOM_VTABLE
    : ::google::protobuf::MessageLite(arena) {
#endif  // PROTOBUF_CUSTOM_VTABLE
  ProductSpecificationSection* const _this = this;
  (void)_this;
  _internal_metadata_.MergeFrom<::std::string>(
      from._internal_metadata_);
  new (&_impl_) Impl_(internal_visibility(), arena, from._impl_, from);

  // @@protoc_insertion_point(copy_constructor:optimization_guide.proto.ProductSpecificationSection)
}
PROTOBUF_NDEBUG_INLINE ProductSpecificationSection::Impl_::Impl_(
    [[maybe_unused]] ::google::protobuf::internal::InternalVisibility visibility,
    [[maybe_unused]] ::google::protobuf::Arena* PROTOBUF_NULLABLE arena)
      : _cached_size_{0},
        key_(arena),
        title_(arena) {}

inline void ProductSpecificationSection::SharedCtor(::_pb::Arena* PROTOBUF_NULLABLE arena) {
  new (&_impl_) Impl_(internal_visibility(), arena);
}
ProductSpecificationSection::~ProductSpecificationSection() {
  // @@protoc_insertion_point(destructor:optimization_guide.proto.ProductSpecificationSection)
  SharedDtor(*this);
}
inline void ProductSpecificationSection::SharedDtor(MessageLite& self) {
  ProductSpecificationSection& this_ = static_cast<ProductSpecificationSection&>(self);
  if constexpr (::_pbi::DebugHardenCheckHasBitConsistency()) {
    this_.CheckHasBitConsistency();
  }
  this_._internal_metadata_.Delete<::std::string>();
  ABSL_DCHECK(this_.GetArena() == nullptr);
  this_._impl_.key_.Destroy();
  this_._impl_.title_.Destroy();
  this_._impl_.~Impl_();
}

#ifndef PROTOBUF_MESSAGE_GLOBALS
PROTOBUF_CONSTINIT
PROTOBUF_ATTRIBUTE_INIT_PRIORITY1
const ::google::protobuf::internal::ClassDataLite ProductSpecificationSection_class_data_ =
    ProductSpecificationSection::InternalGenerateClassData_(ProductSpecificationSection_globals_._default);

PROTOBUF_ATTRIBUTE_WEAK const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL
ProductSpecificationSection::GetClassData() const {
  return ProductSpecificationSection_class_data_.base();
}
#else
PROTOBUF_ATTRIBUTE_WEAK const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL
ProductSpecificationSection::GetClassData() const {
  return ProductSpecificationSection_globals_.GetClassData();
}
#endif  // !PROTOBUF_MESSAGE_GLOBALS
#ifndef PROTOBUF_MESSAGE_GLOBALS
PROTOBUF_CONSTINIT
PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 const ProductSpecificationSection::ParseTableT_
    ProductSpecificationSection::_table_ =
        ProductSpecificationSection::InternalGenerateParseTable_(ProductSpecificationSection_class_data_.base());
#endif  // !PROTOBUF_MESSAGE_GLOBALS
PROTOBUF_NOINLINE void ProductSpecificationSection::Clear() {
// @@protoc_insertion_point(message_clear_start:optimization_guide.proto.ProductSpecificationSection)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  ::uint32_t cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  cached_has_bits = _impl_._has_bits_[0];
  if (BatchCheckHasBit(cached_has_bits, 0x00000003U)) {
    if (CheckHasBit(cached_has_bits, 0x00000001U)) {
      _impl_.key_.ClearNonDefaultToEmpty();
    }
    if (CheckHasBit(cached_has_bits, 0x00000002U)) {
      _impl_.title_.ClearNonDefaultToEmpty();
    }
  }
  _impl_._has_bits_.Clear();
  _internal_metadata_.Clear<::std::string>();
}

#if defined(PROTOBUF_CUSTOM_VTABLE)
::uint8_t* PROTOBUF_NONNULL ProductSpecificationSection::_InternalSerialize(
    const ::google::protobuf::MessageLite& base, ::uint8_t* PROTOBUF_NONNULL target,
    ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) {
  const ProductSpecificationSection& this_ = static_cast<const ProductSpecificationSection&>(base);
#else   // PROTOBUF_CUSTOM_VTABLE
::uint8_t* PROTOBUF_NONNULL ProductSpecificationSection::_InternalSerialize(
    ::uint8_t* PROTOBUF_NONNULL target,
    ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const {
  const ProductSpecificationSection& this_ = *this;
#endif  // PROTOBUF_CUSTOM_VTABLE
  if constexpr (::_pbi::DebugHardenCheckHasBitConsistency()) {
    this_.CheckHasBitConsistency();
  }
  // @@protoc_insertion_point(serialize_to_array_start:optimization_guide.proto.ProductSpecificationSection)
  ::uint32_t cached_has_bits = 0;
  (void)cached_has_bits;

  cached_has_bits = this_._impl_._has_bits_[0];
  // string key = 1 [features = {
  if (CheckHasBit(cached_has_bits, 0x00000001U)) {
    const ::std::string& _s = this_._internal_key();
    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        _s.data(), static_cast<int>(_s.length()), ::google::protobuf::internal::WireFormatLite::SERIALIZE, "optimization_guide.proto.ProductSpecificationSection.key");
    target = stream->WriteStringMaybeAliased(1, _s, target);
  }

  // string title = 2 [features = {
  if (CheckHasBit(cached_has_bits, 0x00000002U)) {
    const ::std::string& _s = this_._internal_title();
    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        _s.data(), static_cast<int>(_s.length()), ::google::protobuf::internal::WireFormatLite::SERIALIZE, "optimization_guide.proto.ProductSpecificationSection.title");
    target = stream->WriteStringMaybeAliased(2, _s, target);
  }

  if (ABSL_PREDICT_FALSE(this_._internal_metadata_.have_unknown_fields())) {
    target = stream->WriteRaw(
        this_._internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString).data(),
        static_cast<int>(this_._internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString).size()), target);
  }
  // @@protoc_insertion_point(serialize_to_array_end:optimization_guide.proto.ProductSpecificationSection)
  return target;
}

#if defined(PROTOBUF_CUSTOM_VTABLE)
::size_t ProductSpecificationSection::ByteSizeLong(const MessageLite& base) {
  const ProductSpecificationSection& this_ = static_cast<const ProductSpecificationSection&>(base);
#else   // PROTOBUF_CUSTOM_VTABLE
::size_t ProductSpecificationSection::ByteSizeLong() const {
  const ProductSpecificationSection& this_ = *this;
#endif  // PROTOBUF_CUSTOM_VTABLE
  // @@protoc_insertion_point(message_byte_size_start:optimization_guide.proto.ProductSpecificationSection)
  ::size_t total_size = 0;

  ::uint32_t cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void)cached_has_bits;

  ::_pbi::Prefetch5LinesFrom7Lines(&this_);
  cached_has_bits = this_._impl_._has_bits_[0];
  if (BatchCheckHasBit(cached_has_bits, 0x00000003U)) {
    // string key = 1 [features = {
    if (CheckHasBit(cached_has_bits, 0x00000001U)) {
      total_size += 1 + ::google::protobuf::internal::WireFormatLite::StringSize(
                                      this_._internal_key());
    }
    // string title = 2 [features = {
    if (CheckHasBit(cached_has_bits, 0x00000002U)) {
      total_size += 1 + ::google::protobuf::internal::WireFormatLite::StringSize(
                                      this_._internal_title());
    }
  }
  if (ABSL_PREDICT_FALSE(this_._internal_metadata_.have_unknown_fields())) {
    total_size += this_._internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString).size();
  }
  this_._impl_._cached_size_.Set(::_pbi::ToCachedSize(total_size));
  return total_size;
}

void ProductSpecificationSection::MergeImpl(::google::protobuf::MessageLite& to_msg,
                      const ::google::protobuf::MessageLite& from_msg) {
   auto* const _this = static_cast<ProductSpecificationSection*>(&to_msg);
  auto& from = static_cast<const ProductSpecificationSection&>(from_msg);
  if constexpr (::_pbi::DebugHardenCheckHasBitConsistency()) {
    from.CheckHasBitConsistency();
  }
  // @@protoc_insertion_point(class_specific_merge_from_start:optimization_guide.proto.ProductSpecificationSection)
  ABSL_DCHECK_NE(&from, _this);
  ::uint32_t cached_has_bits = 0;
  (void)cached_has_bits;

  cached_has_bits = from._impl_._has_bits_[0];
  if (BatchCheckHasBit(cached_has_bits, 0x00000003U)) {
    if (CheckHasBit(cached_has_bits, 0x00000001U)) {
      _this->_internal_set_key(from._internal_key());
    }
    if (CheckHasBit(cached_has_bits, 0x00000002U)) {
      _this->_internal_set_title(from._internal_title());
    }
  }
  _this->_impl_._has_bits_[0] |= cached_has_bits;
  _this->_internal_metadata_.MergeFrom<::std::string>(
      from._internal_metadata_);
}

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


void ProductSpecificationSection::InternalSwap(ProductSpecificationSection* PROTOBUF_RESTRICT PROTOBUF_NONNULL other) {
  using ::std::swap;
  auto* arena = GetArena();
  ABSL_DCHECK_EQ(arena, other->GetArena());
  _internal_metadata_.InternalSwap(&other->_internal_metadata_);
  swap(_impl_._has_bits_[0], other->_impl_._has_bits_[0]);
  ::_pbi::ArenaStringPtr::InternalSwap(&_impl_.key_, &other->_impl_.key_, arena);
  ::_pbi::ArenaStringPtr::InternalSwap(&_impl_.title_, &other->_impl_.title_, arena);
}

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

ProductSpecification::ProductSpecification(::google::protobuf::Arena* PROTOBUF_NULLABLE arena)
#if defined(PROTOBUF_CUSTOM_VTABLE)
    : ::google::protobuf::MessageLite(arena, ProductSpecification_get_class_data()) {
#else   // PROTOBUF_CUSTOM_VTABLE
    : ::google::protobuf::MessageLite(arena) {
#endif  // PROTOBUF_CUSTOM_VTABLE
  SharedCtor(arena);
  // @@protoc_insertion_point(arena_constructor:optimization_guide.proto.ProductSpecification)
}
PROTOBUF_NDEBUG_INLINE ProductSpecification::Impl_::Impl_(
    [[maybe_unused]] ::google::protobuf::internal::InternalVisibility visibility,
    [[maybe_unused]] ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const Impl_& from,
    [[maybe_unused]] const ::optimization_guide::proto::ProductSpecification& from_msg)
      : _has_bits_{from._has_bits_},
        _cached_size_{0},
        product_specification_values_ {
          visibility, ::_pbi::InternalMetadataOffset::Build<
              ::optimization_guide::proto::ProductSpecification,
              PROTOBUF_FIELD_OFFSET(::optimization_guide::proto::ProductSpecification, _impl_.product_specification_values_)>()
          , from.product_specification_values_
        }
        ,
        summary_description_ {
          visibility, ::_pbi::InternalMetadataOffset::Build<
              ::optimization_guide::proto::ProductSpecification,
              PROTOBUF_FIELD_OFFSET(::optimization_guide::proto::ProductSpecification, _impl_.summary_description_)>()
          , from.summary_description_
        }
        ,
        title_(arena, from.title_),
        image_url_(arena, from.image_url_),
        buying_options_url_(arena, from.buying_options_url_) {}

ProductSpecification::ProductSpecification(
    ::google::protobuf::Arena* PROTOBUF_NULLABLE arena,
    const ProductSpecification& from)
#if defined(PROTOBUF_CUSTOM_VTABLE)
    : ::google::protobuf::MessageLite(arena, ProductSpecification_get_class_data()) {

#else   // PROTOBUF_CUSTOM_VTABLE
    : ::google::protobuf::MessageLite(arena) {
#endif  // PROTOBUF_CUSTOM_VTABLE
  ProductSpecification* const _this = this;
  (void)_this;
  _internal_metadata_.MergeFrom<::std::string>(
      from._internal_metadata_);
  new (&_impl_) Impl_(internal_visibility(), arena, from._impl_, from);
  ::uint32_t cached_has_bits = _impl_._has_bits_[0];
  _impl_.identifiers_ = (CheckHasBit(cached_has_bits, 0x00000020U))
                ? ::google::protobuf::MessageLite::CopyConstruct(arena, *from._impl_.identifiers_)
                : nullptr;

  // @@protoc_insertion_point(copy_constructor:optimization_guide.proto.ProductSpecification)
}
PROTOBUF_NDEBUG_INLINE ProductSpecification::Impl_::Impl_(
    [[maybe_unused]] ::google::protobuf::internal::InternalVisibility visibility,
    [[maybe_unused]] ::google::protobuf::Arena* PROTOBUF_NULLABLE arena)
      : _cached_size_{0},
        product_specification_values_ { visibility, ::_pbi::InternalMetadataOffset::Build<
            ::optimization_guide::proto::ProductSpecification,
            PROTOBUF_FIELD_OFFSET(::optimization_guide::proto::ProductSpecification, _impl_.product_specification_values_)>()
         }
        ,
        summary_description_ { visibility, ::_pbi::InternalMetadataOffset::Build<
            ::optimization_guide::proto::ProductSpecification,
            PROTOBUF_FIELD_OFFSET(::optimization_guide::proto::ProductSpecification, _impl_.summary_description_)>()
         }
        ,
        title_(arena),
        image_url_(arena),
        buying_options_url_(arena) {}

inline void ProductSpecification::SharedCtor(::_pb::Arena* PROTOBUF_NULLABLE arena) {
  new (&_impl_) Impl_(internal_visibility(), arena);
  _impl_.identifiers_ = {};
}
ProductSpecification::~ProductSpecification() {
  // @@protoc_insertion_point(destructor:optimization_guide.proto.ProductSpecification)
  SharedDtor(*this);
}
inline void ProductSpecification::SharedDtor(MessageLite& self) {
  ProductSpecification& this_ = static_cast<ProductSpecification&>(self);
  if constexpr (::_pbi::DebugHardenCheckHasBitConsistency()) {
    this_.CheckHasBitConsistency();
  }
  this_._internal_metadata_.Delete<::std::string>();
  ABSL_DCHECK(this_.GetArena() == nullptr);
  this_._impl_.title_.Destroy();
  this_._impl_.image_url_.Destroy();
  this_._impl_.buying_options_url_.Destroy();
  delete this_._impl_.identifiers_;
  this_._impl_.~Impl_();
}

#ifndef PROTOBUF_MESSAGE_GLOBALS
PROTOBUF_CONSTINIT
PROTOBUF_ATTRIBUTE_INIT_PRIORITY1
const ::google::protobuf::internal::ClassDataLite ProductSpecification_class_data_ =
    ProductSpecification::InternalGenerateClassData_(ProductSpecification_globals_._default);

PROTOBUF_ATTRIBUTE_WEAK const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL
ProductSpecification::GetClassData() const {
  return ProductSpecification_class_data_.base();
}
#else
PROTOBUF_ATTRIBUTE_WEAK const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL
ProductSpecification::GetClassData() const {
  return ProductSpecification_globals_.GetClassData();
}
#endif  // !PROTOBUF_MESSAGE_GLOBALS
#ifndef PROTOBUF_MESSAGE_GLOBALS
PROTOBUF_CONSTINIT
PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 const ProductSpecification::ParseTableT_
    ProductSpecification::_table_ =
        ProductSpecification::InternalGenerateParseTable_(ProductSpecification_class_data_.base());
#endif  // !PROTOBUF_MESSAGE_GLOBALS
PROTOBUF_NOINLINE void ProductSpecification::Clear() {
// @@protoc_insertion_point(message_clear_start:optimization_guide.proto.ProductSpecification)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  ::uint32_t cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  cached_has_bits = _impl_._has_bits_[0];
  if (BatchCheckHasBit(cached_has_bits, 0x0000003fU)) {
    if (CheckHasBit(cached_has_bits, 0x00000001U)) {
      _impl_.product_specification_values_.Clear();
    }
    if (CheckHasBit(cached_has_bits, 0x00000002U)) {
      _impl_.summary_description_.Clear();
    }
    if (CheckHasBit(cached_has_bits, 0x00000004U)) {
      _impl_.title_.ClearNonDefaultToEmpty();
    }
    if (CheckHasBit(cached_has_bits, 0x00000008U)) {
      _impl_.image_url_.ClearNonDefaultToEmpty();
    }
    if (CheckHasBit(cached_has_bits, 0x00000010U)) {
      _impl_.buying_options_url_.ClearNonDefaultToEmpty();
    }
    if (CheckHasBit(cached_has_bits, 0x00000020U)) {
      ABSL_DCHECK(_impl_.identifiers_ != nullptr);
      _impl_.identifiers_->Clear();
    }
  }
  _impl_._has_bits_.Clear();
  _internal_metadata_.Clear<::std::string>();
}

#if defined(PROTOBUF_CUSTOM_VTABLE)
::uint8_t* PROTOBUF_NONNULL ProductSpecification::_InternalSerialize(
    const ::google::protobuf::MessageLite& base, ::uint8_t* PROTOBUF_NONNULL target,
    ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) {
  const ProductSpecification& this_ = static_cast<const ProductSpecification&>(base);
#else   // PROTOBUF_CUSTOM_VTABLE
::uint8_t* PROTOBUF_NONNULL ProductSpecification::_InternalSerialize(
    ::uint8_t* PROTOBUF_NONNULL target,
    ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const {
  const ProductSpecification& this_ = *this;
#endif  // PROTOBUF_CUSTOM_VTABLE
  if constexpr (::_pbi::DebugHardenCheckHasBitConsistency()) {
    this_.CheckHasBitConsistency();
  }
  // @@protoc_insertion_point(serialize_to_array_start:optimization_guide.proto.ProductSpecification)
  ::uint32_t cached_has_bits = 0;
  (void)cached_has_bits;

  cached_has_bits = this_._impl_._has_bits_[0];
  // .optimization_guide.proto.ProductSpecificationIdentifiers identifiers = 1 [features = {
  if (CheckHasBit(cached_has_bits, 0x00000020U)) {
    target = ::google::protobuf::internal::WireFormatLite::InternalWriteMessage(
        1, *this_._impl_.identifiers_, this_._impl_.identifiers_->GetCachedSize(), target,
        stream);
  }

  // string title = 2 [features = {
  if (CheckHasBit(cached_has_bits, 0x00000004U)) {
    const ::std::string& _s = this_._internal_title();
    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        _s.data(), static_cast<int>(_s.length()), ::google::protobuf::internal::WireFormatLite::SERIALIZE, "optimization_guide.proto.ProductSpecification.title");
    target = stream->WriteStringMaybeAliased(2, _s, target);
  }

  // string image_url = 3 [features = {
  if (CheckHasBit(cached_has_bits, 0x00000008U)) {
    const ::std::string& _s = this_._internal_image_url();
    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        _s.data(), static_cast<int>(_s.length()), ::google::protobuf::internal::WireFormatLite::SERIALIZE, "optimization_guide.proto.ProductSpecification.image_url");
    target = stream->WriteStringMaybeAliased(3, _s, target);
  }

  // repeated .optimization_guide.proto.ProductSpecificationValue product_specification_values = 4;
  if (CheckHasBit(cached_has_bits, 0x00000001U)) {
    for (unsigned i = 0, n = static_cast<unsigned>(
                             this_._internal_product_specification_values_size());
         i < n; i++) {
      const auto& repfield = this_._internal_product_specification_values().Get(i);
      target =
          ::google::protobuf::internal::WireFormatLite::InternalWriteMessage(
              4, repfield, repfield.GetCachedSize(),
              target, stream);
    }
  }

  // repeated .optimization_guide.proto.DescriptionText summary_description = 5;
  if (CheckHasBit(cached_has_bits, 0x00000002U)) {
    for (unsigned i = 0, n = static_cast<unsigned>(
                             this_._internal_summary_description_size());
         i < n; i++) {
      const auto& repfield = this_._internal_summary_description().Get(i);
      target =
          ::google::protobuf::internal::WireFormatLite::InternalWriteMessage(
              5, repfield, repfield.GetCachedSize(),
              target, stream);
    }
  }

  // string buying_options_url = 6 [features = {
  if (CheckHasBit(cached_has_bits, 0x00000010U)) {
    const ::std::string& _s = this_._internal_buying_options_url();
    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        _s.data(), static_cast<int>(_s.length()), ::google::protobuf::internal::WireFormatLite::SERIALIZE, "optimization_guide.proto.ProductSpecification.buying_options_url");
    target = stream->WriteStringMaybeAliased(6, _s, target);
  }

  if (ABSL_PREDICT_FALSE(this_._internal_metadata_.have_unknown_fields())) {
    target = stream->WriteRaw(
        this_._internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString).data(),
        static_cast<int>(this_._internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString).size()), target);
  }
  // @@protoc_insertion_point(serialize_to_array_end:optimization_guide.proto.ProductSpecification)
  return target;
}

#if defined(PROTOBUF_CUSTOM_VTABLE)
::size_t ProductSpecification::ByteSizeLong(const MessageLite& base) {
  const ProductSpecification& this_ = static_cast<const ProductSpecification&>(base);
#else   // PROTOBUF_CUSTOM_VTABLE
::size_t ProductSpecification::ByteSizeLong() const {
  const ProductSpecification& this_ = *this;
#endif  // PROTOBUF_CUSTOM_VTABLE
  // @@protoc_insertion_point(message_byte_size_start:optimization_guide.proto.ProductSpecification)
  ::size_t total_size = 0;

  ::uint32_t cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void)cached_has_bits;

  ::_pbi::Prefetch5LinesFrom7Lines(&this_);
  cached_has_bits = this_._impl_._has_bits_[0];
  if (BatchCheckHasBit(cached_has_bits, 0x0000003fU)) {
    // repeated .optimization_guide.proto.ProductSpecificationValue product_specification_values = 4;
    if (CheckHasBit(cached_has_bits, 0x00000001U)) {
      total_size += 1UL * this_._internal_product_specification_values_size();
      for (const auto& msg : this_._internal_product_specification_values()) {
        total_size += ::google::protobuf::internal::WireFormatLite::MessageSize(msg);
      }
    }
    // repeated .optimization_guide.proto.DescriptionText summary_description = 5;
    if (CheckHasBit(cached_has_bits, 0x00000002U)) {
      total_size += 1UL * this_._internal_summary_description_size();
      for (const auto& msg : this_._internal_summary_description()) {
        total_size += ::google::protobuf::internal::WireFormatLite::MessageSize(msg);
      }
    }
    // string title = 2 [features = {
    if (CheckHasBit(cached_has_bits, 0x00000004U)) {
      total_size += 1 + ::google::protobuf::internal::WireFormatLite::StringSize(
                                      this_._internal_title());
    }
    // string image_url = 3 [features = {
    if (CheckHasBit(cached_has_bits, 0x00000008U)) {
      total_size += 1 + ::google::protobuf::internal::WireFormatLite::StringSize(
                                      this_._internal_image_url());
    }
    // string buying_options_url = 6 [features = {
    if (CheckHasBit(cached_has_bits, 0x00000010U)) {
      total_size += 1 + ::google::protobuf::internal::WireFormatLite::StringSize(
                                      this_._internal_buying_options_url());
    }
    // .optimization_guide.proto.ProductSpecificationIdentifiers identifiers = 1 [features = {
    if (CheckHasBit(cached_has_bits, 0x00000020U)) {
      total_size += 1 +
                    ::google::protobuf::internal::WireFormatLite::MessageSize(*this_._impl_.identifiers_);
    }
  }
  if (ABSL_PREDICT_FALSE(this_._internal_metadata_.have_unknown_fields())) {
    total_size += this_._internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString).size();
  }
  this_._impl_._cached_size_.Set(::_pbi::ToCachedSize(total_size));
  return total_size;
}

void ProductSpecification::MergeImpl(::google::protobuf::MessageLite& to_msg,
                      const ::google::protobuf::MessageLite& from_msg) {
   auto* const _this = static_cast<ProductSpecification*>(&to_msg);
  auto& from = static_cast<const ProductSpecification&>(from_msg);
  if constexpr (::_pbi::DebugHardenCheckHasBitConsistency()) {
    from.CheckHasBitConsistency();
  }
  ::google::protobuf::Arena* arena = _this->GetArena();
  // @@protoc_insertion_point(class_specific_merge_from_start:optimization_guide.proto.ProductSpecification)
  ABSL_DCHECK_NE(&from, _this);
  ::uint32_t cached_has_bits = 0;
  (void)cached_has_bits;

  cached_has_bits = from._impl_._has_bits_[0];
  if (BatchCheckHasBit(cached_has_bits, 0x0000003fU)) {
    if (CheckHasBit(cached_has_bits, 0x00000001U)) {
      _this->_internal_mutable_product_specification_values()->InternalMergeFromWithArena(
          ::google::protobuf::MessageLite::internal_visibility(), arena,
          from._internal_product_specification_values());
    }
    if (CheckHasBit(cached_has_bits, 0x00000002U)) {
      _this->_internal_mutable_summary_description()->InternalMergeFromWithArena(
          ::google::protobuf::MessageLite::internal_visibility(), arena,
          from._internal_summary_description());
    }
    if (CheckHasBit(cached_has_bits, 0x00000004U)) {
      _this->_internal_set_title(from._internal_title());
    }
    if (CheckHasBit(cached_has_bits, 0x00000008U)) {
      _this->_internal_set_image_url(from._internal_image_url());
    }
    if (CheckHasBit(cached_has_bits, 0x00000010U)) {
      _this->_internal_set_buying_options_url(from._internal_buying_options_url());
    }
    if (CheckHasBit(cached_has_bits, 0x00000020U)) {
      ABSL_DCHECK(from._impl_.identifiers_ != nullptr);
      if (_this->_impl_.identifiers_ == nullptr) {
        _this->_impl_.identifiers_ = ::google::protobuf::MessageLite::CopyConstruct(arena, *from._impl_.identifiers_);
      } else {
        _this->_impl_.identifiers_->MergeFrom(*from._impl_.identifiers_);
      }
    }
  }
  _this->_impl_._has_bits_[0] |= cached_has_bits;
  _this->_internal_metadata_.MergeFrom<::std::string>(
      from._internal_metadata_);
}

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


void ProductSpecification::InternalSwap(ProductSpecification* PROTOBUF_RESTRICT PROTOBUF_NONNULL other) {
  using ::std::swap;
  auto* arena = GetArena();
  ABSL_DCHECK_EQ(arena, other->GetArena());
  _internal_metadata_.InternalSwap(&other->_internal_metadata_);
  swap(_impl_._has_bits_[0], other->_impl_._has_bits_[0]);
  _impl_.product_specification_values_.InternalSwap(&other->_impl_.product_specification_values_);
  _impl_.summary_description_.InternalSwap(&other->_impl_.summary_description_);
  ::_pbi::ArenaStringPtr::InternalSwap(&_impl_.title_, &other->_impl_.title_, arena);
  ::_pbi::ArenaStringPtr::InternalSwap(&_impl_.image_url_, &other->_impl_.image_url_, arena);
  ::_pbi::ArenaStringPtr::InternalSwap(&_impl_.buying_options_url_, &other->_impl_.buying_options_url_, arena);
  swap(_impl_.identifiers_, other->_impl_.identifiers_);
}

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

ProductSpecificationIdentifiers::ProductSpecificationIdentifiers(::google::protobuf::Arena* PROTOBUF_NULLABLE arena)
#if defined(PROTOBUF_CUSTOM_VTABLE)
    : ::google::protobuf::MessageLite(arena, ProductSpecificationIdentifiers_get_class_data()) {
#else   // PROTOBUF_CUSTOM_VTABLE
    : ::google::protobuf::MessageLite(arena) {
#endif  // PROTOBUF_CUSTOM_VTABLE
  SharedCtor(arena);
  // @@protoc_insertion_point(arena_constructor:optimization_guide.proto.ProductSpecificationIdentifiers)
}
PROTOBUF_NDEBUG_INLINE ProductSpecificationIdentifiers::Impl_::Impl_(
    [[maybe_unused]] ::google::protobuf::internal::InternalVisibility visibility,
    [[maybe_unused]] ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const Impl_& from,
    [[maybe_unused]] const ::optimization_guide::proto::ProductSpecificationIdentifiers& from_msg)
      : _has_bits_{from._has_bits_},
        _cached_size_{0},
        mid_(arena, from.mid_) {}

ProductSpecificationIdentifiers::ProductSpecificationIdentifiers(
    ::google::protobuf::Arena* PROTOBUF_NULLABLE arena,
    const ProductSpecificationIdentifiers& from)
#if defined(PROTOBUF_CUSTOM_VTABLE)
    : ::google::protobuf::MessageLite(arena, ProductSpecificationIdentifiers_get_class_data()) {

#else   // PROTOBUF_CUSTOM_VTABLE
    : ::google::protobuf::MessageLite(arena) {
#endif  // PROTOBUF_CUSTOM_VTABLE
  ProductSpecificationIdentifiers* const _this = this;
  (void)_this;
  _internal_metadata_.MergeFrom<::std::string>(
      from._internal_metadata_);
  new (&_impl_) Impl_(internal_visibility(), arena, from._impl_, from);
  _impl_.gpc_id_ = from._impl_.gpc_id_;

  // @@protoc_insertion_point(copy_constructor:optimization_guide.proto.ProductSpecificationIdentifiers)
}
PROTOBUF_NDEBUG_INLINE ProductSpecificationIdentifiers::Impl_::Impl_(
    [[maybe_unused]] ::google::protobuf::internal::InternalVisibility visibility,
    [[maybe_unused]] ::google::protobuf::Arena* PROTOBUF_NULLABLE arena)
      : _cached_size_{0},
        mid_(arena) {}

inline void ProductSpecificationIdentifiers::SharedCtor(::_pb::Arena* PROTOBUF_NULLABLE arena) {
  new (&_impl_) Impl_(internal_visibility(), arena);
  _impl_.gpc_id_ = {};
}
ProductSpecificationIdentifiers::~ProductSpecificationIdentifiers() {
  // @@protoc_insertion_point(destructor:optimization_guide.proto.ProductSpecificationIdentifiers)
  SharedDtor(*this);
}
inline void ProductSpecificationIdentifiers::SharedDtor(MessageLite& self) {
  ProductSpecificationIdentifiers& this_ = static_cast<ProductSpecificationIdentifiers&>(self);
  if constexpr (::_pbi::DebugHardenCheckHasBitConsistency()) {
    this_.CheckHasBitConsistency();
  }
  this_._internal_metadata_.Delete<::std::string>();
  ABSL_DCHECK(this_.GetArena() == nullptr);
  this_._impl_.mid_.Destroy();
  this_._impl_.~Impl_();
}

#ifndef PROTOBUF_MESSAGE_GLOBALS
PROTOBUF_CONSTINIT
PROTOBUF_ATTRIBUTE_INIT_PRIORITY1
const ::google::protobuf::internal::ClassDataLite ProductSpecificationIdentifiers_class_data_ =
    ProductSpecificationIdentifiers::InternalGenerateClassData_(ProductSpecificationIdentifiers_globals_._default);

PROTOBUF_ATTRIBUTE_WEAK const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL
ProductSpecificationIdentifiers::GetClassData() const {
  return ProductSpecificationIdentifiers_class_data_.base();
}
#else
PROTOBUF_ATTRIBUTE_WEAK const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL
ProductSpecificationIdentifiers::GetClassData() const {
  return ProductSpecificationIdentifiers_globals_.GetClassData();
}
#endif  // !PROTOBUF_MESSAGE_GLOBALS
#ifndef PROTOBUF_MESSAGE_GLOBALS
PROTOBUF_CONSTINIT
PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 const ProductSpecificationIdentifiers::ParseTableT_
    ProductSpecificationIdentifiers::_table_ =
        ProductSpecificationIdentifiers::InternalGenerateParseTable_(ProductSpecificationIdentifiers_class_data_.base());
#endif  // !PROTOBUF_MESSAGE_GLOBALS
PROTOBUF_NOINLINE void ProductSpecificationIdentifiers::Clear() {
// @@protoc_insertion_point(message_clear_start:optimization_guide.proto.ProductSpecificationIdentifiers)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  ::uint32_t cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  cached_has_bits = _impl_._has_bits_[0];
  if (CheckHasBit(cached_has_bits, 0x00000001U)) {
    _impl_.mid_.ClearNonDefaultToEmpty();
  }
  _impl_.gpc_id_ = ::uint64_t{0u};
  _impl_._has_bits_.Clear();
  _internal_metadata_.Clear<::std::string>();
}

#if defined(PROTOBUF_CUSTOM_VTABLE)
::uint8_t* PROTOBUF_NONNULL ProductSpecificationIdentifiers::_InternalSerialize(
    const ::google::protobuf::MessageLite& base, ::uint8_t* PROTOBUF_NONNULL target,
    ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) {
  const ProductSpecificationIdentifiers& this_ = static_cast<const ProductSpecificationIdentifiers&>(base);
#else   // PROTOBUF_CUSTOM_VTABLE
::uint8_t* PROTOBUF_NONNULL ProductSpecificationIdentifiers::_InternalSerialize(
    ::uint8_t* PROTOBUF_NONNULL target,
    ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const {
  const ProductSpecificationIdentifiers& this_ = *this;
#endif  // PROTOBUF_CUSTOM_VTABLE
  if constexpr (::_pbi::DebugHardenCheckHasBitConsistency()) {
    this_.CheckHasBitConsistency();
  }
  // @@protoc_insertion_point(serialize_to_array_start:optimization_guide.proto.ProductSpecificationIdentifiers)
  ::uint32_t cached_has_bits = 0;
  (void)cached_has_bits;

  cached_has_bits = this_._impl_._has_bits_[0];
  // uint64 gpc_id = 1 [features = {
  if (CheckHasBit(cached_has_bits, 0x00000002U)) {
    target = stream->EnsureSpace(target);
    target = ::_pbi::WireFormatLite::WriteUInt64ToArray(
        1, this_._internal_gpc_id(), target);
  }

  // string mid = 2 [features = {
  if (CheckHasBit(cached_has_bits, 0x00000001U)) {
    const ::std::string& _s = this_._internal_mid();
    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        _s.data(), static_cast<int>(_s.length()), ::google::protobuf::internal::WireFormatLite::SERIALIZE, "optimization_guide.proto.ProductSpecificationIdentifiers.mid");
    target = stream->WriteStringMaybeAliased(2, _s, target);
  }

  if (ABSL_PREDICT_FALSE(this_._internal_metadata_.have_unknown_fields())) {
    target = stream->WriteRaw(
        this_._internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString).data(),
        static_cast<int>(this_._internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString).size()), target);
  }
  // @@protoc_insertion_point(serialize_to_array_end:optimization_guide.proto.ProductSpecificationIdentifiers)
  return target;
}

#if defined(PROTOBUF_CUSTOM_VTABLE)
::size_t ProductSpecificationIdentifiers::ByteSizeLong(const MessageLite& base) {
  const ProductSpecificationIdentifiers& this_ = static_cast<const ProductSpecificationIdentifiers&>(base);
#else   // PROTOBUF_CUSTOM_VTABLE
::size_t ProductSpecificationIdentifiers::ByteSizeLong() const {
  const ProductSpecificationIdentifiers& this_ = *this;
#endif  // PROTOBUF_CUSTOM_VTABLE
  // @@protoc_insertion_point(message_byte_size_start:optimization_guide.proto.ProductSpecificationIdentifiers)
  ::size_t total_size = 0;

  ::uint32_t cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void)cached_has_bits;

  ::_pbi::Prefetch5LinesFrom7Lines(&this_);
  cached_has_bits = this_._impl_._has_bits_[0];
  if (BatchCheckHasBit(cached_has_bits, 0x00000003U)) {
    // string mid = 2 [features = {
    if (CheckHasBit(cached_has_bits, 0x00000001U)) {
      total_size += 1 + ::google::protobuf::internal::WireFormatLite::StringSize(
                                      this_._internal_mid());
    }
    // uint64 gpc_id = 1 [features = {
    if (CheckHasBit(cached_has_bits, 0x00000002U)) {
      total_size += ::_pbi::WireFormatLite::UInt64SizePlusOne(
          this_._internal_gpc_id());
    }
  }
  if (ABSL_PREDICT_FALSE(this_._internal_metadata_.have_unknown_fields())) {
    total_size += this_._internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString).size();
  }
  this_._impl_._cached_size_.Set(::_pbi::ToCachedSize(total_size));
  return total_size;
}

void ProductSpecificationIdentifiers::MergeImpl(::google::protobuf::MessageLite& to_msg,
                      const ::google::protobuf::MessageLite& from_msg) {
   auto* const _this = static_cast<ProductSpecificationIdentifiers*>(&to_msg);
  auto& from = static_cast<const ProductSpecificationIdentifiers&>(from_msg);
  if constexpr (::_pbi::DebugHardenCheckHasBitConsistency()) {
    from.CheckHasBitConsistency();
  }
  // @@protoc_insertion_point(class_specific_merge_from_start:optimization_guide.proto.ProductSpecificationIdentifiers)
  ABSL_DCHECK_NE(&from, _this);
  ::uint32_t cached_has_bits = 0;
  (void)cached_has_bits;

  cached_has_bits = from._impl_._has_bits_[0];
  if (BatchCheckHasBit(cached_has_bits, 0x00000003U)) {
    if (CheckHasBit(cached_has_bits, 0x00000001U)) {
      _this->_internal_set_mid(from._internal_mid());
    }
    if (CheckHasBit(cached_has_bits, 0x00000002U)) {
      _this->_impl_.gpc_id_ = from._impl_.gpc_id_;
    }
  }
  _this->_impl_._has_bits_[0] |= cached_has_bits;
  _this->_internal_metadata_.MergeFrom<::std::string>(
      from._internal_metadata_);
}

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


void ProductSpecificationIdentifiers::InternalSwap(ProductSpecificationIdentifiers* PROTOBUF_RESTRICT PROTOBUF_NONNULL other) {
  using ::std::swap;
  auto* arena = GetArena();
  ABSL_DCHECK_EQ(arena, other->GetArena());
  _internal_metadata_.InternalSwap(&other->_internal_metadata_);
  swap(_impl_._has_bits_[0], other->_impl_._has_bits_[0]);
  ::_pbi::ArenaStringPtr::InternalSwap(&_impl_.mid_, &other->_impl_.mid_, arena);
  swap(_impl_.gpc_id_, other->_impl_.gpc_id_);
}

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

ProductSpecificationValue::ProductSpecificationValue(::google::protobuf::Arena* PROTOBUF_NULLABLE arena)
#if defined(PROTOBUF_CUSTOM_VTABLE)
    : ::google::protobuf::MessageLite(arena, ProductSpecificationValue_get_class_data()) {
#else   // PROTOBUF_CUSTOM_VTABLE
    : ::google::protobuf::MessageLite(arena) {
#endif  // PROTOBUF_CUSTOM_VTABLE
  SharedCtor(arena);
  // @@protoc_insertion_point(arena_constructor:optimization_guide.proto.ProductSpecificationValue)
}
PROTOBUF_NDEBUG_INLINE ProductSpecificationValue::Impl_::Impl_(
    [[maybe_unused]] ::google::protobuf::internal::InternalVisibility visibility,
    [[maybe_unused]] ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const Impl_& from,
    [[maybe_unused]] const ::optimization_guide::proto::ProductSpecificationValue& from_msg)
      : _has_bits_{from._has_bits_},
        _cached_size_{0},
        specification_descriptions_ {
          visibility, ::_pbi::InternalMetadataOffset::Build<
              ::optimization_guide::proto::ProductSpecificationValue,
              PROTOBUF_FIELD_OFFSET(::optimization_guide::proto::ProductSpecificationValue, _impl_.specification_descriptions_)>()
          , from.specification_descriptions_
        }
        ,
        summary_description_ {
          visibility, ::_pbi::InternalMetadataOffset::Build<
              ::optimization_guide::proto::ProductSpecificationValue,
              PROTOBUF_FIELD_OFFSET(::optimization_guide::proto::ProductSpecificationValue, _impl_.summary_description_)>()
          , from.summary_description_
        }
        ,
        key_(arena, from.key_) {}

ProductSpecificationValue::ProductSpecificationValue(
    ::google::protobuf::Arena* PROTOBUF_NULLABLE arena,
    const ProductSpecificationValue& from)
#if defined(PROTOBUF_CUSTOM_VTABLE)
    : ::google::protobuf::MessageLite(arena, ProductSpecificationValue_get_class_data()) {

#else   // PROTOBUF_CUSTOM_VTABLE
    : ::google::protobuf::MessageLite(arena) {
#endif  // PROTOBUF_CUSTOM_VTABLE
  ProductSpecificationValue* const _this = this;
  (void)_this;
  _internal_metadata_.MergeFrom<::std::string>(
      from._internal_metadata_);
  new (&_impl_) Impl_(internal_visibility(), arena, from._impl_, from);

  // @@protoc_insertion_point(copy_constructor:optimization_guide.proto.ProductSpecificationValue)
}
PROTOBUF_NDEBUG_INLINE ProductSpecificationValue::Impl_::Impl_(
    [[maybe_unused]] ::google::protobuf::internal::InternalVisibility visibility,
    [[maybe_unused]] ::google::protobuf::Arena* PROTOBUF_NULLABLE arena)
      : _cached_size_{0},
        specification_descriptions_ { visibility, ::_pbi::InternalMetadataOffset::Build<
            ::optimization_guide::proto::ProductSpecificationValue,
            PROTOBUF_FIELD_OFFSET(::optimization_guide::proto::ProductSpecificationValue, _impl_.specification_descriptions_)>()
         }
        ,
        summary_description_ { visibility, ::_pbi::InternalMetadataOffset::Build<
            ::optimization_guide::proto::ProductSpecificationValue,
            PROTOBUF_FIELD_OFFSET(::optimization_guide::proto::ProductSpecificationValue, _impl_.summary_description_)>()
         }
        ,
        key_(arena) {}

inline void ProductSpecificationValue::SharedCtor(::_pb::Arena* PROTOBUF_NULLABLE arena) {
  new (&_impl_) Impl_(internal_visibility(), arena);
}
ProductSpecificationValue::~ProductSpecificationValue() {
  // @@protoc_insertion_point(destructor:optimization_guide.proto.ProductSpecificationValue)
  SharedDtor(*this);
}
inline void ProductSpecificationValue::SharedDtor(MessageLite& self) {
  ProductSpecificationValue& this_ = static_cast<ProductSpecificationValue&>(self);
  if constexpr (::_pbi::DebugHardenCheckHasBitConsistency()) {
    this_.CheckHasBitConsistency();
  }
  this_._internal_metadata_.Delete<::std::string>();
  ABSL_DCHECK(this_.GetArena() == nullptr);
  this_._impl_.key_.Destroy();
  this_._impl_.~Impl_();
}

#ifndef PROTOBUF_MESSAGE_GLOBALS
PROTOBUF_CONSTINIT
PROTOBUF_ATTRIBUTE_INIT_PRIORITY1
const ::google::protobuf::internal::ClassDataLite ProductSpecificationValue_class_data_ =
    ProductSpecificationValue::InternalGenerateClassData_(ProductSpecificationValue_globals_._default);

PROTOBUF_ATTRIBUTE_WEAK const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL
ProductSpecificationValue::GetClassData() const {
  return ProductSpecificationValue_class_data_.base();
}
#else
PROTOBUF_ATTRIBUTE_WEAK const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL
ProductSpecificationValue::GetClassData() const {
  return ProductSpecificationValue_globals_.GetClassData();
}
#endif  // !PROTOBUF_MESSAGE_GLOBALS
#ifndef PROTOBUF_MESSAGE_GLOBALS
PROTOBUF_CONSTINIT
PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 const ProductSpecificationValue::ParseTableT_
    ProductSpecificationValue::_table_ =
        ProductSpecificationValue::InternalGenerateParseTable_(ProductSpecificationValue_class_data_.base());
#endif  // !PROTOBUF_MESSAGE_GLOBALS
PROTOBUF_NOINLINE void ProductSpecificationValue::Clear() {
// @@protoc_insertion_point(message_clear_start:optimization_guide.proto.ProductSpecificationValue)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  ::uint32_t cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  cached_has_bits = _impl_._has_bits_[0];
  if (BatchCheckHasBit(cached_has_bits, 0x00000007U)) {
    if (CheckHasBit(cached_has_bits, 0x00000001U)) {
      _impl_.specification_descriptions_.Clear();
    }
    if (CheckHasBit(cached_has_bits, 0x00000002U)) {
      _impl_.summary_description_.Clear();
    }
    if (CheckHasBit(cached_has_bits, 0x00000004U)) {
      _impl_.key_.ClearNonDefaultToEmpty();
    }
  }
  _impl_._has_bits_.Clear();
  _internal_metadata_.Clear<::std::string>();
}

#if defined(PROTOBUF_CUSTOM_VTABLE)
::uint8_t* PROTOBUF_NONNULL ProductSpecificationValue::_InternalSerialize(
    const ::google::protobuf::MessageLite& base, ::uint8_t* PROTOBUF_NONNULL target,
    ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) {
  const ProductSpecificationValue& this_ = static_cast<const ProductSpecificationValue&>(base);
#else   // PROTOBUF_CUSTOM_VTABLE
::uint8_t* PROTOBUF_NONNULL ProductSpecificationValue::_InternalSerialize(
    ::uint8_t* PROTOBUF_NONNULL target,
    ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const {
  const ProductSpecificationValue& this_ = *this;
#endif  // PROTOBUF_CUSTOM_VTABLE
  if constexpr (::_pbi::DebugHardenCheckHasBitConsistency()) {
    this_.CheckHasBitConsistency();
  }
  // @@protoc_insertion_point(serialize_to_array_start:optimization_guide.proto.ProductSpecificationValue)
  ::uint32_t cached_has_bits = 0;
  (void)cached_has_bits;

  cached_has_bits = this_._impl_._has_bits_[0];
  // string key = 1 [features = {
  if (CheckHasBit(cached_has_bits, 0x00000004U)) {
    const ::std::string& _s = this_._internal_key();
    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        _s.data(), static_cast<int>(_s.length()), ::google::protobuf::internal::WireFormatLite::SERIALIZE, "optimization_guide.proto.ProductSpecificationValue.key");
    target = stream->WriteStringMaybeAliased(1, _s, target);
  }

  // repeated .optimization_guide.proto.ProductSpecificationDescription specification_descriptions = 2;
  if (CheckHasBit(cached_has_bits, 0x00000001U)) {
    for (unsigned i = 0, n = static_cast<unsigned>(
                             this_._internal_specification_descriptions_size());
         i < n; i++) {
      const auto& repfield = this_._internal_specification_descriptions().Get(i);
      target =
          ::google::protobuf::internal::WireFormatLite::InternalWriteMessage(
              2, repfield, repfield.GetCachedSize(),
              target, stream);
    }
  }

  // repeated .optimization_guide.proto.DescriptionText summary_description = 3;
  if (CheckHasBit(cached_has_bits, 0x00000002U)) {
    for (unsigned i = 0, n = static_cast<unsigned>(
                             this_._internal_summary_description_size());
         i < n; i++) {
      const auto& repfield = this_._internal_summary_description().Get(i);
      target =
          ::google::protobuf::internal::WireFormatLite::InternalWriteMessage(
              3, repfield, repfield.GetCachedSize(),
              target, stream);
    }
  }

  if (ABSL_PREDICT_FALSE(this_._internal_metadata_.have_unknown_fields())) {
    target = stream->WriteRaw(
        this_._internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString).data(),
        static_cast<int>(this_._internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString).size()), target);
  }
  // @@protoc_insertion_point(serialize_to_array_end:optimization_guide.proto.ProductSpecificationValue)
  return target;
}

#if defined(PROTOBUF_CUSTOM_VTABLE)
::size_t ProductSpecificationValue::ByteSizeLong(const MessageLite& base) {
  const ProductSpecificationValue& this_ = static_cast<const ProductSpecificationValue&>(base);
#else   // PROTOBUF_CUSTOM_VTABLE
::size_t ProductSpecificationValue::ByteSizeLong() const {
  const ProductSpecificationValue& this_ = *this;
#endif  // PROTOBUF_CUSTOM_VTABLE
  // @@protoc_insertion_point(message_byte_size_start:optimization_guide.proto.ProductSpecificationValue)
  ::size_t total_size = 0;

  ::uint32_t cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void)cached_has_bits;

  ::_pbi::Prefetch5LinesFrom7Lines(&this_);
  cached_has_bits = this_._impl_._has_bits_[0];
  if (BatchCheckHasBit(cached_has_bits, 0x00000007U)) {
    // repeated .optimization_guide.proto.ProductSpecificationDescription specification_descriptions = 2;
    if (CheckHasBit(cached_has_bits, 0x00000001U)) {
      total_size += 1UL * this_._internal_specification_descriptions_size();
      for (const auto& msg : this_._internal_specification_descriptions()) {
        total_size += ::google::protobuf::internal::WireFormatLite::MessageSize(msg);
      }
    }
    // repeated .optimization_guide.proto.DescriptionText summary_description = 3;
    if (CheckHasBit(cached_has_bits, 0x00000002U)) {
      total_size += 1UL * this_._internal_summary_description_size();
      for (const auto& msg : this_._internal_summary_description()) {
        total_size += ::google::protobuf::internal::WireFormatLite::MessageSize(msg);
      }
    }
    // string key = 1 [features = {
    if (CheckHasBit(cached_has_bits, 0x00000004U)) {
      total_size += 1 + ::google::protobuf::internal::WireFormatLite::StringSize(
                                      this_._internal_key());
    }
  }
  if (ABSL_PREDICT_FALSE(this_._internal_metadata_.have_unknown_fields())) {
    total_size += this_._internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString).size();
  }
  this_._impl_._cached_size_.Set(::_pbi::ToCachedSize(total_size));
  return total_size;
}

void ProductSpecificationValue::MergeImpl(::google::protobuf::MessageLite& to_msg,
                      const ::google::protobuf::MessageLite& from_msg) {
   auto* const _this = static_cast<ProductSpecificationValue*>(&to_msg);
  auto& from = static_cast<const ProductSpecificationValue&>(from_msg);
  if constexpr (::_pbi::DebugHardenCheckHasBitConsistency()) {
    from.CheckHasBitConsistency();
  }
  ::google::protobuf::Arena* arena = _this->GetArena();
  // @@protoc_insertion_point(class_specific_merge_from_start:optimization_guide.proto.ProductSpecificationValue)
  ABSL_DCHECK_NE(&from, _this);
  ::uint32_t cached_has_bits = 0;
  (void)cached_has_bits;

  cached_has_bits = from._impl_._has_bits_[0];
  if (BatchCheckHasBit(cached_has_bits, 0x00000007U)) {
    if (CheckHasBit(cached_has_bits, 0x00000001U)) {
      _this->_internal_mutable_specification_descriptions()->InternalMergeFromWithArena(
          ::google::protobuf::MessageLite::internal_visibility(), arena,
          from._internal_specification_descriptions());
    }
    if (CheckHasBit(cached_has_bits, 0x00000002U)) {
      _this->_internal_mutable_summary_description()->InternalMergeFromWithArena(
          ::google::protobuf::MessageLite::internal_visibility(), arena,
          from._internal_summary_description());
    }
    if (CheckHasBit(cached_has_bits, 0x00000004U)) {
      _this->_internal_set_key(from._internal_key());
    }
  }
  _this->_impl_._has_bits_[0] |= cached_has_bits;
  _this->_internal_metadata_.MergeFrom<::std::string>(
      from._internal_metadata_);
}

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


void ProductSpecificationValue::InternalSwap(ProductSpecificationValue* PROTOBUF_RESTRICT PROTOBUF_NONNULL other) {
  using ::std::swap;
  auto* arena = GetArena();
  ABSL_DCHECK_EQ(arena, other->GetArena());
  _internal_metadata_.InternalSwap(&other->_internal_metadata_);
  swap(_impl_._has_bits_[0], other->_impl_._has_bits_[0]);
  _impl_.specification_descriptions_.InternalSwap(&other->_impl_.specification_descriptions_);
  _impl_.summary_description_.InternalSwap(&other->_impl_.summary_description_);
  ::_pbi::ArenaStringPtr::InternalSwap(&_impl_.key_, &other->_impl_.key_, arena);
}

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

ProductSpecificationDescription_Option::ProductSpecificationDescription_Option(::google::protobuf::Arena* PROTOBUF_NULLABLE arena)
#if defined(PROTOBUF_CUSTOM_VTABLE)
    : ::google::protobuf::MessageLite(arena, ProductSpecificationDescription_Option_get_class_data()) {
#else   // PROTOBUF_CUSTOM_VTABLE
    : ::google::protobuf::MessageLite(arena) {
#endif  // PROTOBUF_CUSTOM_VTABLE
  SharedCtor(arena);
  // @@protoc_insertion_point(arena_constructor:optimization_guide.proto.ProductSpecificationDescription.Option)
}
PROTOBUF_NDEBUG_INLINE ProductSpecificationDescription_Option::Impl_::Impl_(
    [[maybe_unused]] ::google::protobuf::internal::InternalVisibility visibility,
    [[maybe_unused]] ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const Impl_& from,
    [[maybe_unused]] const ::optimization_guide::proto::ProductSpecificationDescription_Option& from_msg)
      : _has_bits_{from._has_bits_},
        _cached_size_{0},
        description_ {
          visibility, ::_pbi::InternalMetadataOffset::Build<
              ::optimization_guide::proto::ProductSpecificationDescription_Option,
              PROTOBUF_FIELD_OFFSET(::optimization_guide::proto::ProductSpecificationDescription_Option, _impl_.description_)>()
          , from.description_
        }
     {}

ProductSpecificationDescription_Option::ProductSpecificationDescription_Option(
    ::google::protobuf::Arena* PROTOBUF_NULLABLE arena,
    const ProductSpecificationDescription_Option& from)
#if defined(PROTOBUF_CUSTOM_VTABLE)
    : ::google::protobuf::MessageLite(arena, ProductSpecificationDescription_Option_get_class_data()) {

#else   // PROTOBUF_CUSTOM_VTABLE
    : ::google::protobuf::MessageLite(arena) {
#endif  // PROTOBUF_CUSTOM_VTABLE
  ProductSpecificationDescription_Option* const _this = this;
  (void)_this;
  _internal_metadata_.MergeFrom<::std::string>(
      from._internal_metadata_);
  new (&_impl_) Impl_(internal_visibility(), arena, from._impl_, from);

  // @@protoc_insertion_point(copy_constructor:optimization_guide.proto.ProductSpecificationDescription.Option)
}
PROTOBUF_NDEBUG_INLINE ProductSpecificationDescription_Option::Impl_::Impl_(
    [[maybe_unused]] ::google::protobuf::internal::InternalVisibility visibility,
    [[maybe_unused]] ::google::protobuf::Arena* PROTOBUF_NULLABLE arena)
      : _cached_size_{0},
        description_ { visibility, ::_pbi::InternalMetadataOffset::Build<
            ::optimization_guide::proto::ProductSpecificationDescription_Option,
            PROTOBUF_FIELD_OFFSET(::optimization_guide::proto::ProductSpecificationDescription_Option, _impl_.description_)>()
         }
     {}

inline void ProductSpecificationDescription_Option::SharedCtor(::_pb::Arena* PROTOBUF_NULLABLE arena) {
  new (&_impl_) Impl_(internal_visibility(), arena);
}
ProductSpecificationDescription_Option::~ProductSpecificationDescription_Option() {
  // @@protoc_insertion_point(destructor:optimization_guide.proto.ProductSpecificationDescription.Option)
  SharedDtor(*this);
}
inline void ProductSpecificationDescription_Option::SharedDtor(MessageLite& self) {
  ProductSpecificationDescription_Option& this_ = static_cast<ProductSpecificationDescription_Option&>(self);
  if constexpr (::_pbi::DebugHardenCheckHasBitConsistency()) {
    this_.CheckHasBitConsistency();
  }
  this_._internal_metadata_.Delete<::std::string>();
  ABSL_DCHECK(this_.GetArena() == nullptr);
  this_._impl_.~Impl_();
}

#ifndef PROTOBUF_MESSAGE_GLOBALS
PROTOBUF_CONSTINIT
PROTOBUF_ATTRIBUTE_INIT_PRIORITY1
const ::google::protobuf::internal::ClassDataLite ProductSpecificationDescription_Option_class_data_ =
    ProductSpecificationDescription_Option::InternalGenerateClassData_(ProductSpecificationDescription_Option_globals_._default);

PROTOBUF_ATTRIBUTE_WEAK const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL
ProductSpecificationDescription_Option::GetClassData() const {
  return ProductSpecificationDescription_Option_class_data_.base();
}
#else
PROTOBUF_ATTRIBUTE_WEAK const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL
ProductSpecificationDescription_Option::GetClassData() const {
  return ProductSpecificationDescription_Option_globals_.GetClassData();
}
#endif  // !PROTOBUF_MESSAGE_GLOBALS
#ifndef PROTOBUF_MESSAGE_GLOBALS
PROTOBUF_CONSTINIT
PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 const ProductSpecificationDescription_Option::ParseTableT_
    ProductSpecificationDescription_Option::_table_ =
        ProductSpecificationDescription_Option::InternalGenerateParseTable_(ProductSpecificationDescription_Option_class_data_.base());
#endif  // !PROTOBUF_MESSAGE_GLOBALS
PROTOBUF_NOINLINE void ProductSpecificationDescription_Option::Clear() {
// @@protoc_insertion_point(message_clear_start:optimization_guide.proto.ProductSpecificationDescription.Option)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  ::uint32_t cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  cached_has_bits = _impl_._has_bits_[0];
  if (CheckHasBit(cached_has_bits, 0x00000001U)) {
    _impl_.description_.Clear();
  }
  _impl_._has_bits_.Clear();
  _internal_metadata_.Clear<::std::string>();
}

#if defined(PROTOBUF_CUSTOM_VTABLE)
::uint8_t* PROTOBUF_NONNULL ProductSpecificationDescription_Option::_InternalSerialize(
    const ::google::protobuf::MessageLite& base, ::uint8_t* PROTOBUF_NONNULL target,
    ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) {
  const ProductSpecificationDescription_Option& this_ = static_cast<const ProductSpecificationDescription_Option&>(base);
#else   // PROTOBUF_CUSTOM_VTABLE
::uint8_t* PROTOBUF_NONNULL ProductSpecificationDescription_Option::_InternalSerialize(
    ::uint8_t* PROTOBUF_NONNULL target,
    ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const {
  const ProductSpecificationDescription_Option& this_ = *this;
#endif  // PROTOBUF_CUSTOM_VTABLE
  if constexpr (::_pbi::DebugHardenCheckHasBitConsistency()) {
    this_.CheckHasBitConsistency();
  }
  // @@protoc_insertion_point(serialize_to_array_start:optimization_guide.proto.ProductSpecificationDescription.Option)
  ::uint32_t cached_has_bits = 0;
  (void)cached_has_bits;

  cached_has_bits = this_._impl_._has_bits_[0];
  // repeated .optimization_guide.proto.DescriptionText description = 1;
  if (CheckHasBit(cached_has_bits, 0x00000001U)) {
    for (unsigned i = 0, n = static_cast<unsigned>(
                             this_._internal_description_size());
         i < n; i++) {
      const auto& repfield = this_._internal_description().Get(i);
      target =
          ::google::protobuf::internal::WireFormatLite::InternalWriteMessage(
              1, repfield, repfield.GetCachedSize(),
              target, stream);
    }
  }

  if (ABSL_PREDICT_FALSE(this_._internal_metadata_.have_unknown_fields())) {
    target = stream->WriteRaw(
        this_._internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString).data(),
        static_cast<int>(this_._internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString).size()), target);
  }
  // @@protoc_insertion_point(serialize_to_array_end:optimization_guide.proto.ProductSpecificationDescription.Option)
  return target;
}

#if defined(PROTOBUF_CUSTOM_VTABLE)
::size_t ProductSpecificationDescription_Option::ByteSizeLong(const MessageLite& base) {
  const ProductSpecificationDescription_Option& this_ = static_cast<const ProductSpecificationDescription_Option&>(base);
#else   // PROTOBUF_CUSTOM_VTABLE
::size_t ProductSpecificationDescription_Option::ByteSizeLong() const {
  const ProductSpecificationDescription_Option& this_ = *this;
#endif  // PROTOBUF_CUSTOM_VTABLE
  // @@protoc_insertion_point(message_byte_size_start:optimization_guide.proto.ProductSpecificationDescription.Option)
  ::size_t total_size = 0;

  ::uint32_t cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void)cached_has_bits;

  ::_pbi::Prefetch5LinesFrom7Lines(&this_);
   {
    // repeated .optimization_guide.proto.DescriptionText description = 1;
    cached_has_bits = this_._impl_._has_bits_[0];
    if (CheckHasBit(cached_has_bits, 0x00000001U)) {
      total_size += 1UL * this_._internal_description_size();
      for (const auto& msg : this_._internal_description()) {
        total_size += ::google::protobuf::internal::WireFormatLite::MessageSize(msg);
      }
    }
  }
  if (ABSL_PREDICT_FALSE(this_._internal_metadata_.have_unknown_fields())) {
    total_size += this_._internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString).size();
  }
  this_._impl_._cached_size_.Set(::_pbi::ToCachedSize(total_size));
  return total_size;
}

void ProductSpecificationDescription_Option::MergeImpl(::google::protobuf::MessageLite& to_msg,
                      const ::google::protobuf::MessageLite& from_msg) {
   auto* const _this = static_cast<ProductSpecificationDescription_Option*>(&to_msg);
  auto& from = static_cast<const ProductSpecificationDescription_Option&>(from_msg);
  if constexpr (::_pbi::DebugHardenCheckHasBitConsistency()) {
    from.CheckHasBitConsistency();
  }
  ::google::protobuf::Arena* arena = _this->GetArena();
  // @@protoc_insertion_point(class_specific_merge_from_start:optimization_guide.proto.ProductSpecificationDescription.Option)
  ABSL_DCHECK_NE(&from, _this);
  ::uint32_t cached_has_bits = 0;
  (void)cached_has_bits;

  cached_has_bits = from._impl_._has_bits_[0];
  if (CheckHasBit(cached_has_bits, 0x00000001U)) {
    _this->_internal_mutable_description()->InternalMergeFromWithArena(
        ::google::protobuf::MessageLite::internal_visibility(), arena,
        from._internal_description());
  }
  _this->_impl_._has_bits_[0] |= cached_has_bits;
  _this->_internal_metadata_.MergeFrom<::std::string>(
      from._internal_metadata_);
}

void ProductSpecificationDescription_Option::CopyFrom(const ProductSpecificationDescription_Option& from) {
  // @@protoc_insertion_point(class_specific_copy_from_start:optimization_guide.proto.ProductSpecificationDescription.Option)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}


void ProductSpecificationDescription_Option::InternalSwap(ProductSpecificationDescription_Option* PROTOBUF_RESTRICT PROTOBUF_NONNULL other) {
  using ::std::swap;
  _internal_metadata_.InternalSwap(&other->_internal_metadata_);
  swap(_impl_._has_bits_[0], other->_impl_._has_bits_[0]);
  _impl_.description_.InternalSwap(&other->_impl_.description_);
}

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

ProductSpecificationDescription::ProductSpecificationDescription(::google::protobuf::Arena* PROTOBUF_NULLABLE arena)
#if defined(PROTOBUF_CUSTOM_VTABLE)
    : ::google::protobuf::MessageLite(arena, ProductSpecificationDescription_get_class_data()) {
#else   // PROTOBUF_CUSTOM_VTABLE
    : ::google::protobuf::MessageLite(arena) {
#endif  // PROTOBUF_CUSTOM_VTABLE
  SharedCtor(arena);
  // @@protoc_insertion_point(arena_constructor:optimization_guide.proto.ProductSpecificationDescription)
}
PROTOBUF_NDEBUG_INLINE ProductSpecificationDescription::Impl_::Impl_(
    [[maybe_unused]] ::google::protobuf::internal::InternalVisibility visibility,
    [[maybe_unused]] ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const Impl_& from,
    [[maybe_unused]] const ::optimization_guide::proto::ProductSpecificationDescription& from_msg)
      : _has_bits_{from._has_bits_},
        _cached_size_{0},
        options_ {
          visibility, ::_pbi::InternalMetadataOffset::Build<
              ::optimization_guide::proto::ProductSpecificationDescription,
              PROTOBUF_FIELD_OFFSET(::optimization_guide::proto::ProductSpecificationDescription, _impl_.options_)>()
          , from.options_
        }
        ,
        label_(arena, from.label_),
        alternative_text_(arena, from.alternative_text_),
        attribute_id_(arena, from.attribute_id_) {}

ProductSpecificationDescription::ProductSpecificationDescription(
    ::google::protobuf::Arena* PROTOBUF_NULLABLE arena,
    const ProductSpecificationDescription& from)
#if defined(PROTOBUF_CUSTOM_VTABLE)
    : ::google::protobuf::MessageLite(arena, ProductSpecificationDescription_get_class_data()) {

#else   // PROTOBUF_CUSTOM_VTABLE
    : ::google::protobuf::MessageLite(arena) {
#endif  // PROTOBUF_CUSTOM_VTABLE
  ProductSpecificationDescription* const _this = this;
  (void)_this;
  _internal_metadata_.MergeFrom<::std::string>(
      from._internal_metadata_);
  new (&_impl_) Impl_(internal_visibility(), arena, from._impl_, from);

  // @@protoc_insertion_point(copy_constructor:optimization_guide.proto.ProductSpecificationDescription)
}
PROTOBUF_NDEBUG_INLINE ProductSpecificationDescription::Impl_::Impl_(
    [[maybe_unused]] ::google::protobuf::internal::InternalVisibility visibility,
    [[maybe_unused]] ::google::protobuf::Arena* PROTOBUF_NULLABLE arena)
      : _cached_size_{0},
        options_ { visibility, ::_pbi::InternalMetadataOffset::Build<
            ::optimization_guide::proto::ProductSpecificationDescription,
            PROTOBUF_FIELD_OFFSET(::optimization_guide::proto::ProductSpecificationDescription, _impl_.options_)>()
         }
        ,
        label_(arena),
        alternative_text_(arena),
        attribute_id_(arena) {}

inline void ProductSpecificationDescription::SharedCtor(::_pb::Arena* PROTOBUF_NULLABLE arena) {
  new (&_impl_) Impl_(internal_visibility(), arena);
}
ProductSpecificationDescription::~ProductSpecificationDescription() {
  // @@protoc_insertion_point(destructor:optimization_guide.proto.ProductSpecificationDescription)
  SharedDtor(*this);
}
inline void ProductSpecificationDescription::SharedDtor(MessageLite& self) {
  ProductSpecificationDescription& this_ = static_cast<ProductSpecificationDescription&>(self);
  if constexpr (::_pbi::DebugHardenCheckHasBitConsistency()) {
    this_.CheckHasBitConsistency();
  }
  this_._internal_metadata_.Delete<::std::string>();
  ABSL_DCHECK(this_.GetArena() == nullptr);
  this_._impl_.label_.Destroy();
  this_._impl_.alternative_text_.Destroy();
  this_._impl_.attribute_id_.Destroy();
  this_._impl_.~Impl_();
}

#ifndef PROTOBUF_MESSAGE_GLOBALS
PROTOBUF_CONSTINIT
PROTOBUF_ATTRIBUTE_INIT_PRIORITY1
const ::google::protobuf::internal::ClassDataLite ProductSpecificationDescription_class_data_ =
    ProductSpecificationDescription::InternalGenerateClassData_(ProductSpecificationDescription_globals_._default);

PROTOBUF_ATTRIBUTE_WEAK const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL
ProductSpecificationDescription::GetClassData() const {
  return ProductSpecificationDescription_class_data_.base();
}
#else
PROTOBUF_ATTRIBUTE_WEAK const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL
ProductSpecificationDescription::GetClassData() const {
  return ProductSpecificationDescription_globals_.GetClassData();
}
#endif  // !PROTOBUF_MESSAGE_GLOBALS
#ifndef PROTOBUF_MESSAGE_GLOBALS
PROTOBUF_CONSTINIT
PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 const ProductSpecificationDescription::ParseTableT_
    ProductSpecificationDescription::_table_ =
        ProductSpecificationDescription::InternalGenerateParseTable_(ProductSpecificationDescription_class_data_.base());
#endif  // !PROTOBUF_MESSAGE_GLOBALS
PROTOBUF_NOINLINE void ProductSpecificationDescription::Clear() {
// @@protoc_insertion_point(message_clear_start:optimization_guide.proto.ProductSpecificationDescription)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  ::uint32_t cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  cached_has_bits = _impl_._has_bits_[0];
  if (BatchCheckHasBit(cached_has_bits, 0x0000000fU)) {
    if (CheckHasBit(cached_has_bits, 0x00000001U)) {
      _impl_.options_.Clear();
    }
    if (CheckHasBit(cached_has_bits, 0x00000002U)) {
      _impl_.label_.ClearNonDefaultToEmpty();
    }
    if (CheckHasBit(cached_has_bits, 0x00000004U)) {
      _impl_.alternative_text_.ClearNonDefaultToEmpty();
    }
    if (CheckHasBit(cached_has_bits, 0x00000008U)) {
      _impl_.attribute_id_.ClearNonDefaultToEmpty();
    }
  }
  _impl_._has_bits_.Clear();
  _internal_metadata_.Clear<::std::string>();
}

#if defined(PROTOBUF_CUSTOM_VTABLE)
::uint8_t* PROTOBUF_NONNULL ProductSpecificationDescription::_InternalSerialize(
    const ::google::protobuf::MessageLite& base, ::uint8_t* PROTOBUF_NONNULL target,
    ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) {
  const ProductSpecificationDescription& this_ = static_cast<const ProductSpecificationDescription&>(base);
#else   // PROTOBUF_CUSTOM_VTABLE
::uint8_t* PROTOBUF_NONNULL ProductSpecificationDescription::_InternalSerialize(
    ::uint8_t* PROTOBUF_NONNULL target,
    ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const {
  const ProductSpecificationDescription& this_ = *this;
#endif  // PROTOBUF_CUSTOM_VTABLE
  if constexpr (::_pbi::DebugHardenCheckHasBitConsistency()) {
    this_.CheckHasBitConsistency();
  }
  // @@protoc_insertion_point(serialize_to_array_start:optimization_guide.proto.ProductSpecificationDescription)
  ::uint32_t cached_has_bits = 0;
  (void)cached_has_bits;

  cached_has_bits = this_._impl_._has_bits_[0];
  // repeated .optimization_guide.proto.ProductSpecificationDescription.Option options = 1;
  if (CheckHasBit(cached_has_bits, 0x00000001U)) {
    for (unsigned i = 0, n = static_cast<unsigned>(
                             this_._internal_options_size());
         i < n; i++) {
      const auto& repfield = this_._internal_options().Get(i);
      target =
          ::google::protobuf::internal::WireFormatLite::InternalWriteMessage(
              1, repfield, repfield.GetCachedSize(),
              target, stream);
    }
  }

  // string label = 2 [features = {
  if (CheckHasBit(cached_has_bits, 0x00000002U)) {
    const ::std::string& _s = this_._internal_label();
    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        _s.data(), static_cast<int>(_s.length()), ::google::protobuf::internal::WireFormatLite::SERIALIZE, "optimization_guide.proto.ProductSpecificationDescription.label");
    target = stream->WriteStringMaybeAliased(2, _s, target);
  }

  // string alternative_text = 3 [features = {
  if (CheckHasBit(cached_has_bits, 0x00000004U)) {
    const ::std::string& _s = this_._internal_alternative_text();
    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        _s.data(), static_cast<int>(_s.length()), ::google::protobuf::internal::WireFormatLite::SERIALIZE, "optimization_guide.proto.ProductSpecificationDescription.alternative_text");
    target = stream->WriteStringMaybeAliased(3, _s, target);
  }

  // string attribute_id = 4 [features = {
  if (CheckHasBit(cached_has_bits, 0x00000008U)) {
    const ::std::string& _s = this_._internal_attribute_id();
    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        _s.data(), static_cast<int>(_s.length()), ::google::protobuf::internal::WireFormatLite::SERIALIZE, "optimization_guide.proto.ProductSpecificationDescription.attribute_id");
    target = stream->WriteStringMaybeAliased(4, _s, target);
  }

  if (ABSL_PREDICT_FALSE(this_._internal_metadata_.have_unknown_fields())) {
    target = stream->WriteRaw(
        this_._internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString).data(),
        static_cast<int>(this_._internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString).size()), target);
  }
  // @@protoc_insertion_point(serialize_to_array_end:optimization_guide.proto.ProductSpecificationDescription)
  return target;
}

#if defined(PROTOBUF_CUSTOM_VTABLE)
::size_t ProductSpecificationDescription::ByteSizeLong(const MessageLite& base) {
  const ProductSpecificationDescription& this_ = static_cast<const ProductSpecificationDescription&>(base);
#else   // PROTOBUF_CUSTOM_VTABLE
::size_t ProductSpecificationDescription::ByteSizeLong() const {
  const ProductSpecificationDescription& this_ = *this;
#endif  // PROTOBUF_CUSTOM_VTABLE
  // @@protoc_insertion_point(message_byte_size_start:optimization_guide.proto.ProductSpecificationDescription)
  ::size_t total_size = 0;

  ::uint32_t cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void)cached_has_bits;

  ::_pbi::Prefetch5LinesFrom7Lines(&this_);
  cached_has_bits = this_._impl_._has_bits_[0];
  if (BatchCheckHasBit(cached_has_bits, 0x0000000fU)) {
    // repeated .optimization_guide.proto.ProductSpecificationDescription.Option options = 1;
    if (CheckHasBit(cached_has_bits, 0x00000001U)) {
      total_size += 1UL * this_._internal_options_size();
      for (const auto& msg : this_._internal_options()) {
        total_size += ::google::protobuf::internal::WireFormatLite::MessageSize(msg);
      }
    }
    // string label = 2 [features = {
    if (CheckHasBit(cached_has_bits, 0x00000002U)) {
      total_size += 1 + ::google::protobuf::internal::WireFormatLite::StringSize(
                                      this_._internal_label());
    }
    // string alternative_text = 3 [features = {
    if (CheckHasBit(cached_has_bits, 0x00000004U)) {
      total_size += 1 + ::google::protobuf::internal::WireFormatLite::StringSize(
                                      this_._internal_alternative_text());
    }
    // string attribute_id = 4 [features = {
    if (CheckHasBit(cached_has_bits, 0x00000008U)) {
      total_size += 1 + ::google::protobuf::internal::WireFormatLite::StringSize(
                                      this_._internal_attribute_id());
    }
  }
  if (ABSL_PREDICT_FALSE(this_._internal_metadata_.have_unknown_fields())) {
    total_size += this_._internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString).size();
  }
  this_._impl_._cached_size_.Set(::_pbi::ToCachedSize(total_size));
  return total_size;
}

void ProductSpecificationDescription::MergeImpl(::google::protobuf::MessageLite& to_msg,
                      const ::google::protobuf::MessageLite& from_msg) {
   auto* const _this = static_cast<ProductSpecificationDescription*>(&to_msg);
  auto& from = static_cast<const ProductSpecificationDescription&>(from_msg);
  if constexpr (::_pbi::DebugHardenCheckHasBitConsistency()) {
    from.CheckHasBitConsistency();
  }
  ::google::protobuf::Arena* arena = _this->GetArena();
  // @@protoc_insertion_point(class_specific_merge_from_start:optimization_guide.proto.ProductSpecificationDescription)
  ABSL_DCHECK_NE(&from, _this);
  ::uint32_t cached_has_bits = 0;
  (void)cached_has_bits;

  cached_has_bits = from._impl_._has_bits_[0];
  if (BatchCheckHasBit(cached_has_bits, 0x0000000fU)) {
    if (CheckHasBit(cached_has_bits, 0x00000001U)) {
      _this->_internal_mutable_options()->InternalMergeFromWithArena(
          ::google::protobuf::MessageLite::internal_visibility(), arena,
          from._internal_options());
    }
    if (CheckHasBit(cached_has_bits, 0x00000002U)) {
      _this->_internal_set_label(from._internal_label());
    }
    if (CheckHasBit(cached_has_bits, 0x00000004U)) {
      _this->_internal_set_alternative_text(from._internal_alternative_text());
    }
    if (CheckHasBit(cached_has_bits, 0x00000008U)) {
      _this->_internal_set_attribute_id(from._internal_attribute_id());
    }
  }
  _this->_impl_._has_bits_[0] |= cached_has_bits;
  _this->_internal_metadata_.MergeFrom<::std::string>(
      from._internal_metadata_);
}

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


void ProductSpecificationDescription::InternalSwap(ProductSpecificationDescription* PROTOBUF_RESTRICT PROTOBUF_NONNULL other) {
  using ::std::swap;
  auto* arena = GetArena();
  ABSL_DCHECK_EQ(arena, other->GetArena());
  _internal_metadata_.InternalSwap(&other->_internal_metadata_);
  swap(_impl_._has_bits_[0], other->_impl_._has_bits_[0]);
  _impl_.options_.InternalSwap(&other->_impl_.options_);
  ::_pbi::ArenaStringPtr::InternalSwap(&_impl_.label_, &other->_impl_.label_, arena);
  ::_pbi::ArenaStringPtr::InternalSwap(&_impl_.alternative_text_, &other->_impl_.alternative_text_, arena);
  ::_pbi::ArenaStringPtr::InternalSwap(&_impl_.attribute_id_, &other->_impl_.attribute_id_, arena);
}

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

DescriptionText_ReferenceUrl::DescriptionText_ReferenceUrl(::google::protobuf::Arena* PROTOBUF_NULLABLE arena)
#if defined(PROTOBUF_CUSTOM_VTABLE)
    : ::google::protobuf::MessageLite(arena, DescriptionText_ReferenceUrl_get_class_data()) {
#else   // PROTOBUF_CUSTOM_VTABLE
    : ::google::protobuf::MessageLite(arena) {
#endif  // PROTOBUF_CUSTOM_VTABLE
  SharedCtor(arena);
  // @@protoc_insertion_point(arena_constructor:optimization_guide.proto.DescriptionText.ReferenceUrl)
}
PROTOBUF_NDEBUG_INLINE DescriptionText_ReferenceUrl::Impl_::Impl_(
    [[maybe_unused]] ::google::protobuf::internal::InternalVisibility visibility,
    [[maybe_unused]] ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const Impl_& from,
    [[maybe_unused]] const ::optimization_guide::proto::DescriptionText_ReferenceUrl& from_msg)
      : _has_bits_{from._has_bits_},
        _cached_size_{0},
        url_(arena, from.url_),
        title_(arena, from.title_),
        favicon_url_(arena, from.favicon_url_),
        thumbail_image_url_(arena, from.thumbail_image_url_) {}

DescriptionText_ReferenceUrl::DescriptionText_ReferenceUrl(
    ::google::protobuf::Arena* PROTOBUF_NULLABLE arena,
    const DescriptionText_ReferenceUrl& from)
#if defined(PROTOBUF_CUSTOM_VTABLE)
    : ::google::protobuf::MessageLite(arena, DescriptionText_ReferenceUrl_get_class_data()) {

#else   // PROTOBUF_CUSTOM_VTABLE
    : ::google::protobuf::MessageLite(arena) {
#endif  // PROTOBUF_CUSTOM_VTABLE
  DescriptionText_ReferenceUrl* const _this = this;
  (void)_this;
  _internal_metadata_.MergeFrom<::std::string>(
      from._internal_metadata_);
  new (&_impl_) Impl_(internal_visibility(), arena, from._impl_, from);

  // @@protoc_insertion_point(copy_constructor:optimization_guide.proto.DescriptionText.ReferenceUrl)
}
PROTOBUF_NDEBUG_INLINE DescriptionText_ReferenceUrl::Impl_::Impl_(
    [[maybe_unused]] ::google::protobuf::internal::InternalVisibility visibility,
    [[maybe_unused]] ::google::protobuf::Arena* PROTOBUF_NULLABLE arena)
      : _cached_size_{0},
        url_(arena),
        title_(arena),
        favicon_url_(arena),
        thumbail_image_url_(arena) {}

inline void DescriptionText_ReferenceUrl::SharedCtor(::_pb::Arena* PROTOBUF_NULLABLE arena) {
  new (&_impl_) Impl_(internal_visibility(), arena);
}
DescriptionText_ReferenceUrl::~DescriptionText_ReferenceUrl() {
  // @@protoc_insertion_point(destructor:optimization_guide.proto.DescriptionText.ReferenceUrl)
  SharedDtor(*this);
}
inline void DescriptionText_ReferenceUrl::SharedDtor(MessageLite& self) {
  DescriptionText_ReferenceUrl& this_ = static_cast<DescriptionText_ReferenceUrl&>(self);
  if constexpr (::_pbi::DebugHardenCheckHasBitConsistency()) {
    this_.CheckHasBitConsistency();
  }
  this_._internal_metadata_.Delete<::std::string>();
  ABSL_DCHECK(this_.GetArena() == nullptr);
  this_._impl_.url_.Destroy();
  this_._impl_.title_.Destroy();
  this_._impl_.favicon_url_.Destroy();
  this_._impl_.thumbail_image_url_.Destroy();
  this_._impl_.~Impl_();
}

#ifndef PROTOBUF_MESSAGE_GLOBALS
PROTOBUF_CONSTINIT
PROTOBUF_ATTRIBUTE_INIT_PRIORITY1
const ::google::protobuf::internal::ClassDataLite DescriptionText_ReferenceUrl_class_data_ =
    DescriptionText_ReferenceUrl::InternalGenerateClassData_(DescriptionText_ReferenceUrl_globals_._default);

PROTOBUF_ATTRIBUTE_WEAK const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL
DescriptionText_ReferenceUrl::GetClassData() const {
  return DescriptionText_ReferenceUrl_class_data_.base();
}
#else
PROTOBUF_ATTRIBUTE_WEAK const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL
DescriptionText_ReferenceUrl::GetClassData() const {
  return DescriptionText_ReferenceUrl_globals_.GetClassData();
}
#endif  // !PROTOBUF_MESSAGE_GLOBALS
#ifndef PROTOBUF_MESSAGE_GLOBALS
PROTOBUF_CONSTINIT
PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 const DescriptionText_ReferenceUrl::ParseTableT_
    DescriptionText_ReferenceUrl::_table_ =
        DescriptionText_ReferenceUrl::InternalGenerateParseTable_(DescriptionText_ReferenceUrl_class_data_.base());
#endif  // !PROTOBUF_MESSAGE_GLOBALS
PROTOBUF_NOINLINE void DescriptionText_ReferenceUrl::Clear() {
// @@protoc_insertion_point(message_clear_start:optimization_guide.proto.DescriptionText.ReferenceUrl)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  ::uint32_t cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  cached_has_bits = _impl_._has_bits_[0];
  if (BatchCheckHasBit(cached_has_bits, 0x0000000fU)) {
    if (CheckHasBit(cached_has_bits, 0x00000001U)) {
      _impl_.url_.ClearNonDefaultToEmpty();
    }
    if (CheckHasBit(cached_has_bits, 0x00000002U)) {
      _impl_.title_.ClearNonDefaultToEmpty();
    }
    if (CheckHasBit(cached_has_bits, 0x00000004U)) {
      _impl_.favicon_url_.ClearNonDefaultToEmpty();
    }
    if (CheckHasBit(cached_has_bits, 0x00000008U)) {
      _impl_.thumbail_image_url_.ClearNonDefaultToEmpty();
    }
  }
  _impl_._has_bits_.Clear();
  _internal_metadata_.Clear<::std::string>();
}

#if defined(PROTOBUF_CUSTOM_VTABLE)
::uint8_t* PROTOBUF_NONNULL DescriptionText_ReferenceUrl::_InternalSerialize(
    const ::google::protobuf::MessageLite& base, ::uint8_t* PROTOBUF_NONNULL target,
    ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) {
  const DescriptionText_ReferenceUrl& this_ = static_cast<const DescriptionText_ReferenceUrl&>(base);
#else   // PROTOBUF_CUSTOM_VTABLE
::uint8_t* PROTOBUF_NONNULL DescriptionText_ReferenceUrl::_InternalSerialize(
    ::uint8_t* PROTOBUF_NONNULL target,
    ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const {
  const DescriptionText_ReferenceUrl& this_ = *this;
#endif  // PROTOBUF_CUSTOM_VTABLE
  if constexpr (::_pbi::DebugHardenCheckHasBitConsistency()) {
    this_.CheckHasBitConsistency();
  }
  // @@protoc_insertion_point(serialize_to_array_start:optimization_guide.proto.DescriptionText.ReferenceUrl)
  ::uint32_t cached_has_bits = 0;
  (void)cached_has_bits;

  cached_has_bits = this_._impl_._has_bits_[0];
  // string url = 1 [features = {
  if (CheckHasBit(cached_has_bits, 0x00000001U)) {
    const ::std::string& _s = this_._internal_url();
    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        _s.data(), static_cast<int>(_s.length()), ::google::protobuf::internal::WireFormatLite::SERIALIZE, "optimization_guide.proto.DescriptionText.ReferenceUrl.url");
    target = stream->WriteStringMaybeAliased(1, _s, target);
  }

  // string title = 2 [features = {
  if (CheckHasBit(cached_has_bits, 0x00000002U)) {
    const ::std::string& _s = this_._internal_title();
    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        _s.data(), static_cast<int>(_s.length()), ::google::protobuf::internal::WireFormatLite::SERIALIZE, "optimization_guide.proto.DescriptionText.ReferenceUrl.title");
    target = stream->WriteStringMaybeAliased(2, _s, target);
  }

  // string favicon_url = 3 [features = {
  if (CheckHasBit(cached_has_bits, 0x00000004U)) {
    const ::std::string& _s = this_._internal_favicon_url();
    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        _s.data(), static_cast<int>(_s.length()), ::google::protobuf::internal::WireFormatLite::SERIALIZE, "optimization_guide.proto.DescriptionText.ReferenceUrl.favicon_url");
    target = stream->WriteStringMaybeAliased(3, _s, target);
  }

  // string thumbail_image_url = 4 [features = {
  if (CheckHasBit(cached_has_bits, 0x00000008U)) {
    const ::std::string& _s = this_._internal_thumbail_image_url();
    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        _s.data(), static_cast<int>(_s.length()), ::google::protobuf::internal::WireFormatLite::SERIALIZE, "optimization_guide.proto.DescriptionText.ReferenceUrl.thumbail_image_url");
    target = stream->WriteStringMaybeAliased(4, _s, target);
  }

  if (ABSL_PREDICT_FALSE(this_._internal_metadata_.have_unknown_fields())) {
    target = stream->WriteRaw(
        this_._internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString).data(),
        static_cast<int>(this_._internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString).size()), target);
  }
  // @@protoc_insertion_point(serialize_to_array_end:optimization_guide.proto.DescriptionText.ReferenceUrl)
  return target;
}

#if defined(PROTOBUF_CUSTOM_VTABLE)
::size_t DescriptionText_ReferenceUrl::ByteSizeLong(const MessageLite& base) {
  const DescriptionText_ReferenceUrl& this_ = static_cast<const DescriptionText_ReferenceUrl&>(base);
#else   // PROTOBUF_CUSTOM_VTABLE
::size_t DescriptionText_ReferenceUrl::ByteSizeLong() const {
  const DescriptionText_ReferenceUrl& this_ = *this;
#endif  // PROTOBUF_CUSTOM_VTABLE
  // @@protoc_insertion_point(message_byte_size_start:optimization_guide.proto.DescriptionText.ReferenceUrl)
  ::size_t total_size = 0;

  ::uint32_t cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void)cached_has_bits;

  ::_pbi::Prefetch5LinesFrom7Lines(&this_);
  cached_has_bits = this_._impl_._has_bits_[0];
  if (BatchCheckHasBit(cached_has_bits, 0x0000000fU)) {
    // string url = 1 [features = {
    if (CheckHasBit(cached_has_bits, 0x00000001U)) {
      total_size += 1 + ::google::protobuf::internal::WireFormatLite::StringSize(
                                      this_._internal_url());
    }
    // string title = 2 [features = {
    if (CheckHasBit(cached_has_bits, 0x00000002U)) {
      total_size += 1 + ::google::protobuf::internal::WireFormatLite::StringSize(
                                      this_._internal_title());
    }
    // string favicon_url = 3 [features = {
    if (CheckHasBit(cached_has_bits, 0x00000004U)) {
      total_size += 1 + ::google::protobuf::internal::WireFormatLite::StringSize(
                                      this_._internal_favicon_url());
    }
    // string thumbail_image_url = 4 [features = {
    if (CheckHasBit(cached_has_bits, 0x00000008U)) {
      total_size += 1 + ::google::protobuf::internal::WireFormatLite::StringSize(
                                      this_._internal_thumbail_image_url());
    }
  }
  if (ABSL_PREDICT_FALSE(this_._internal_metadata_.have_unknown_fields())) {
    total_size += this_._internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString).size();
  }
  this_._impl_._cached_size_.Set(::_pbi::ToCachedSize(total_size));
  return total_size;
}

void DescriptionText_ReferenceUrl::MergeImpl(::google::protobuf::MessageLite& to_msg,
                      const ::google::protobuf::MessageLite& from_msg) {
   auto* const _this = static_cast<DescriptionText_ReferenceUrl*>(&to_msg);
  auto& from = static_cast<const DescriptionText_ReferenceUrl&>(from_msg);
  if constexpr (::_pbi::DebugHardenCheckHasBitConsistency()) {
    from.CheckHasBitConsistency();
  }
  // @@protoc_insertion_point(class_specific_merge_from_start:optimization_guide.proto.DescriptionText.ReferenceUrl)
  ABSL_DCHECK_NE(&from, _this);
  ::uint32_t cached_has_bits = 0;
  (void)cached_has_bits;

  cached_has_bits = from._impl_._has_bits_[0];
  if (BatchCheckHasBit(cached_has_bits, 0x0000000fU)) {
    if (CheckHasBit(cached_has_bits, 0x00000001U)) {
      _this->_internal_set_url(from._internal_url());
    }
    if (CheckHasBit(cached_has_bits, 0x00000002U)) {
      _this->_internal_set_title(from._internal_title());
    }
    if (CheckHasBit(cached_has_bits, 0x00000004U)) {
      _this->_internal_set_favicon_url(from._internal_favicon_url());
    }
    if (CheckHasBit(cached_has_bits, 0x00000008U)) {
      _this->_internal_set_thumbail_image_url(from._internal_thumbail_image_url());
    }
  }
  _this->_impl_._has_bits_[0] |= cached_has_bits;
  _this->_internal_metadata_.MergeFrom<::std::string>(
      from._internal_metadata_);
}

void DescriptionText_ReferenceUrl::CopyFrom(const DescriptionText_ReferenceUrl& from) {
  // @@protoc_insertion_point(class_specific_copy_from_start:optimization_guide.proto.DescriptionText.ReferenceUrl)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}


void DescriptionText_ReferenceUrl::InternalSwap(DescriptionText_ReferenceUrl* PROTOBUF_RESTRICT PROTOBUF_NONNULL other) {
  using ::std::swap;
  auto* arena = GetArena();
  ABSL_DCHECK_EQ(arena, other->GetArena());
  _internal_metadata_.InternalSwap(&other->_internal_metadata_);
  swap(_impl_._has_bits_[0], other->_impl_._has_bits_[0]);
  ::_pbi::ArenaStringPtr::InternalSwap(&_impl_.url_, &other->_impl_.url_, arena);
  ::_pbi::ArenaStringPtr::InternalSwap(&_impl_.title_, &other->_impl_.title_, arena);
  ::_pbi::ArenaStringPtr::InternalSwap(&_impl_.favicon_url_, &other->_impl_.favicon_url_, arena);
  ::_pbi::ArenaStringPtr::InternalSwap(&_impl_.thumbail_image_url_, &other->_impl_.thumbail_image_url_, arena);
}

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

DescriptionText::DescriptionText(::google::protobuf::Arena* PROTOBUF_NULLABLE arena)
#if defined(PROTOBUF_CUSTOM_VTABLE)
    : ::google::protobuf::MessageLite(arena, DescriptionText_get_class_data()) {
#else   // PROTOBUF_CUSTOM_VTABLE
    : ::google::protobuf::MessageLite(arena) {
#endif  // PROTOBUF_CUSTOM_VTABLE
  SharedCtor(arena);
  // @@protoc_insertion_point(arena_constructor:optimization_guide.proto.DescriptionText)
}
PROTOBUF_NDEBUG_INLINE DescriptionText::Impl_::Impl_(
    [[maybe_unused]] ::google::protobuf::internal::InternalVisibility visibility,
    [[maybe_unused]] ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const Impl_& from,
    [[maybe_unused]] const ::optimization_guide::proto::DescriptionText& from_msg)
      : _has_bits_{from._has_bits_},
        _cached_size_{0},
        urls_ {
          visibility, ::_pbi::InternalMetadataOffset::Build<
              ::optimization_guide::proto::DescriptionText,
              PROTOBUF_FIELD_OFFSET(::optimization_guide::proto::DescriptionText, _impl_.urls_)>()
          , from.urls_
        }
        ,
        text_(arena, from.text_) {}

DescriptionText::DescriptionText(
    ::google::protobuf::Arena* PROTOBUF_NULLABLE arena,
    const DescriptionText& from)
#if defined(PROTOBUF_CUSTOM_VTABLE)
    : ::google::protobuf::MessageLite(arena, DescriptionText_get_class_data()) {

#else   // PROTOBUF_CUSTOM_VTABLE
    : ::google::protobuf::MessageLite(arena) {
#endif  // PROTOBUF_CUSTOM_VTABLE
  DescriptionText* const _this = this;
  (void)_this;
  _internal_metadata_.MergeFrom<::std::string>(
      from._internal_metadata_);
  new (&_impl_) Impl_(internal_visibility(), arena, from._impl_, from);

  // @@protoc_insertion_point(copy_constructor:optimization_guide.proto.DescriptionText)
}
PROTOBUF_NDEBUG_INLINE DescriptionText::Impl_::Impl_(
    [[maybe_unused]] ::google::protobuf::internal::InternalVisibility visibility,
    [[maybe_unused]] ::google::protobuf::Arena* PROTOBUF_NULLABLE arena)
      : _cached_size_{0},
        urls_ { visibility, ::_pbi::InternalMetadataOffset::Build<
            ::optimization_guide::proto::DescriptionText,
            PROTOBUF_FIELD_OFFSET(::optimization_guide::proto::DescriptionText, _impl_.urls_)>()
         }
        ,
        text_(arena) {}

inline void DescriptionText::SharedCtor(::_pb::Arena* PROTOBUF_NULLABLE arena) {
  new (&_impl_) Impl_(internal_visibility(), arena);
}
DescriptionText::~DescriptionText() {
  // @@protoc_insertion_point(destructor:optimization_guide.proto.DescriptionText)
  SharedDtor(*this);
}
inline void DescriptionText::SharedDtor(MessageLite& self) {
  DescriptionText& this_ = static_cast<DescriptionText&>(self);
  if constexpr (::_pbi::DebugHardenCheckHasBitConsistency()) {
    this_.CheckHasBitConsistency();
  }
  this_._internal_metadata_.Delete<::std::string>();
  ABSL_DCHECK(this_.GetArena() == nullptr);
  this_._impl_.text_.Destroy();
  this_._impl_.~Impl_();
}

#ifndef PROTOBUF_MESSAGE_GLOBALS
PROTOBUF_CONSTINIT
PROTOBUF_ATTRIBUTE_INIT_PRIORITY1
const ::google::protobuf::internal::ClassDataLite DescriptionText_class_data_ =
    DescriptionText::InternalGenerateClassData_(DescriptionText_globals_._default);

PROTOBUF_ATTRIBUTE_WEAK const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL
DescriptionText::GetClassData() const {
  return DescriptionText_class_data_.base();
}
#else
PROTOBUF_ATTRIBUTE_WEAK const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL
DescriptionText::GetClassData() const {
  return DescriptionText_globals_.GetClassData();
}
#endif  // !PROTOBUF_MESSAGE_GLOBALS
#ifndef PROTOBUF_MESSAGE_GLOBALS
PROTOBUF_CONSTINIT
PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 const DescriptionText::ParseTableT_
    DescriptionText::_table_ =
        DescriptionText::InternalGenerateParseTable_(DescriptionText_class_data_.base());
#endif  // !PROTOBUF_MESSAGE_GLOBALS
PROTOBUF_NOINLINE void DescriptionText::Clear() {
// @@protoc_insertion_point(message_clear_start:optimization_guide.proto.DescriptionText)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  ::uint32_t cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  cached_has_bits = _impl_._has_bits_[0];
  if (BatchCheckHasBit(cached_has_bits, 0x00000003U)) {
    if (CheckHasBit(cached_has_bits, 0x00000001U)) {
      _impl_.urls_.Clear();
    }
    if (CheckHasBit(cached_has_bits, 0x00000002U)) {
      _impl_.text_.ClearNonDefaultToEmpty();
    }
  }
  _impl_._has_bits_.Clear();
  _internal_metadata_.Clear<::std::string>();
}

#if defined(PROTOBUF_CUSTOM_VTABLE)
::uint8_t* PROTOBUF_NONNULL DescriptionText::_InternalSerialize(
    const ::google::protobuf::MessageLite& base, ::uint8_t* PROTOBUF_NONNULL target,
    ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) {
  const DescriptionText& this_ = static_cast<const DescriptionText&>(base);
#else   // PROTOBUF_CUSTOM_VTABLE
::uint8_t* PROTOBUF_NONNULL DescriptionText::_InternalSerialize(
    ::uint8_t* PROTOBUF_NONNULL target,
    ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const {
  const DescriptionText& this_ = *this;
#endif  // PROTOBUF_CUSTOM_VTABLE
  if constexpr (::_pbi::DebugHardenCheckHasBitConsistency()) {
    this_.CheckHasBitConsistency();
  }
  // @@protoc_insertion_point(serialize_to_array_start:optimization_guide.proto.DescriptionText)
  ::uint32_t cached_has_bits = 0;
  (void)cached_has_bits;

  cached_has_bits = this_._impl_._has_bits_[0];
  // string text = 1 [features = {
  if (CheckHasBit(cached_has_bits, 0x00000002U)) {
    const ::std::string& _s = this_._internal_text();
    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
        _s.data(), static_cast<int>(_s.length()), ::google::protobuf::internal::WireFormatLite::SERIALIZE, "optimization_guide.proto.DescriptionText.text");
    target = stream->WriteStringMaybeAliased(1, _s, target);
  }

  // repeated .optimization_guide.proto.DescriptionText.ReferenceUrl urls = 2;
  if (CheckHasBit(cached_has_bits, 0x00000001U)) {
    for (unsigned i = 0, n = static_cast<unsigned>(
                             this_._internal_urls_size());
         i < n; i++) {
      const auto& repfield = this_._internal_urls().Get(i);
      target =
          ::google::protobuf::internal::WireFormatLite::InternalWriteMessage(
              2, repfield, repfield.GetCachedSize(),
              target, stream);
    }
  }

  if (ABSL_PREDICT_FALSE(this_._internal_metadata_.have_unknown_fields())) {
    target = stream->WriteRaw(
        this_._internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString).data(),
        static_cast<int>(this_._internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString).size()), target);
  }
  // @@protoc_insertion_point(serialize_to_array_end:optimization_guide.proto.DescriptionText)
  return target;
}

#if defined(PROTOBUF_CUSTOM_VTABLE)
::size_t DescriptionText::ByteSizeLong(const MessageLite& base) {
  const DescriptionText& this_ = static_cast<const DescriptionText&>(base);
#else   // PROTOBUF_CUSTOM_VTABLE
::size_t DescriptionText::ByteSizeLong() const {
  const DescriptionText& this_ = *this;
#endif  // PROTOBUF_CUSTOM_VTABLE
  // @@protoc_insertion_point(message_byte_size_start:optimization_guide.proto.DescriptionText)
  ::size_t total_size = 0;

  ::uint32_t cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void)cached_has_bits;

  ::_pbi::Prefetch5LinesFrom7Lines(&this_);
  cached_has_bits = this_._impl_._has_bits_[0];
  if (BatchCheckHasBit(cached_has_bits, 0x00000003U)) {
    // repeated .optimization_guide.proto.DescriptionText.ReferenceUrl urls = 2;
    if (CheckHasBit(cached_has_bits, 0x00000001U)) {
      total_size += 1UL * this_._internal_urls_size();
      for (const auto& msg : this_._internal_urls()) {
        total_size += ::google::protobuf::internal::WireFormatLite::MessageSize(msg);
      }
    }
    // string text = 1 [features = {
    if (CheckHasBit(cached_has_bits, 0x00000002U)) {
      total_size += 1 + ::google::protobuf::internal::WireFormatLite::StringSize(
                                      this_._internal_text());
    }
  }
  if (ABSL_PREDICT_FALSE(this_._internal_metadata_.have_unknown_fields())) {
    total_size += this_._internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString).size();
  }
  this_._impl_._cached_size_.Set(::_pbi::ToCachedSize(total_size));
  return total_size;
}

void DescriptionText::MergeImpl(::google::protobuf::MessageLite& to_msg,
                      const ::google::protobuf::MessageLite& from_msg) {
   auto* const _this = static_cast<DescriptionText*>(&to_msg);
  auto& from = static_cast<const DescriptionText&>(from_msg);
  if constexpr (::_pbi::DebugHardenCheckHasBitConsistency()) {
    from.CheckHasBitConsistency();
  }
  ::google::protobuf::Arena* arena = _this->GetArena();
  // @@protoc_insertion_point(class_specific_merge_from_start:optimization_guide.proto.DescriptionText)
  ABSL_DCHECK_NE(&from, _this);
  ::uint32_t cached_has_bits = 0;
  (void)cached_has_bits;

  cached_has_bits = from._impl_._has_bits_[0];
  if (BatchCheckHasBit(cached_has_bits, 0x00000003U)) {
    if (CheckHasBit(cached_has_bits, 0x00000001U)) {
      _this->_internal_mutable_urls()->InternalMergeFromWithArena(
          ::google::protobuf::MessageLite::internal_visibility(), arena,
          from._internal_urls());
    }
    if (CheckHasBit(cached_has_bits, 0x00000002U)) {
      _this->_internal_set_text(from._internal_text());
    }
  }
  _this->_impl_._has_bits_[0] |= cached_has_bits;
  _this->_internal_metadata_.MergeFrom<::std::string>(
      from._internal_metadata_);
}

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


void DescriptionText::InternalSwap(DescriptionText* PROTOBUF_RESTRICT PROTOBUF_NONNULL other) {
  using ::std::swap;
  auto* arena = GetArena();
  ABSL_DCHECK_EQ(arena, other->GetArena());
  _internal_metadata_.InternalSwap(&other->_internal_metadata_);
  swap(_impl_._has_bits_[0], other->_impl_._has_bits_[0]);
  _impl_.urls_.InternalSwap(&other->_impl_.urls_);
  ::_pbi::ArenaStringPtr::InternalSwap(&_impl_.text_, &other->_impl_.text_, arena);
}

// @@protoc_insertion_point(namespace_scope)
}  // namespace proto
}  // namespace optimization_guide
namespace google {
namespace protobuf {
}  // namespace protobuf
}  // namespace google
// @@protoc_insertion_point(global_scope)
#include "google/protobuf/port_undef.inc"
