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

#ifndef components_2fsegmentation_5fplatform_2fpublic_2fproto_2fmodel_5fmetadata_2eproto_2epb_2eh
#define components_2fsegmentation_5fplatform_2fpublic_2fproto_2fmodel_5fmetadata_2eproto_2epb_2eh

#include <limits>
#include <string>
#include <type_traits>
#include <utility>

// clang-format off
#include "google/protobuf/runtime_version.h"
#if PROTOBUF_VERSION != 7035001
#error "Protobuf C++ gencode is built with an incompatible version of"
#error "Protobuf C++ headers/runtime. See"
#error "https://protobuf.dev/support/cross-version-runtime-guarantee/#cpp"
#endif
#include "google/protobuf/io/coded_stream.h"
#include "google/protobuf/arena.h"
#include "google/protobuf/arenastring.h"
#include "google/protobuf/generated_message_tctable_decl.h"
#include "google/protobuf/generated_message_util.h"
#include "google/protobuf/metadata_lite.h"
#include "google/protobuf/message_lite.h"
#include "google/protobuf/repeated_field.h"  // IWYU pragma: export
#include "google/protobuf/extension_set.h"  // IWYU pragma: export
#include "google/protobuf/map.h"  // IWYU pragma: export
#include "google/protobuf/map_type_handler.h"  // IWYU pragma: export
#include "google/protobuf/map_field_lite.h"
#include "google/protobuf/generated_enum_util.h"
#include "components/segmentation_platform/public/proto/aggregation.pb.h"
#include "components/segmentation_platform/public/proto/output_config.pb.h"
#include "components/segmentation_platform/public/proto/types.pb.h"
// @@protoc_insertion_point(includes)

// Must be included last.
#include "google/protobuf/port_def.inc"

#define PROTOBUF_INTERNAL_EXPORT_components_2fsegmentation_5fplatform_2fpublic_2fproto_2fmodel_5fmetadata_2eproto

namespace google {
namespace protobuf {
namespace internal {
template <typename T>
::absl::string_view GetAnyMessageName();
}  // namespace internal
}  // namespace protobuf
}  // namespace google

// Internal implementation detail -- do not use these members.
struct TableStruct_components_2fsegmentation_5fplatform_2fpublic_2fproto_2fmodel_5fmetadata_2eproto {
  static const ::uint32_t offsets[];
};
namespace segmentation_platform {
namespace proto {
enum CurrentVersion : int;
extern const uint32_t CurrentVersion_internal_data_[];
enum CustomInput_FillPolicy : int;
extern const uint32_t CustomInput_FillPolicy_internal_data_[];
enum ModelSource : int;
extern const uint32_t ModelSource_internal_data_[];
enum SegmentationModelMetadata_OutputDescription : int;
extern const uint32_t SegmentationModelMetadata_OutputDescription_internal_data_[];
enum SqlFeature_BindValue_ParamType : int;
extern const uint32_t SqlFeature_BindValue_ParamType_internal_data_[];
enum TrainingOutputs_TriggerConfig_DecisionType : int;
extern const uint32_t TrainingOutputs_TriggerConfig_DecisionType_internal_data_[];
class CustomInput;
struct CustomInputGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern CustomInputGlobalsTypeInternal CustomInput_globals_;
extern const ::google::protobuf::internal::ClassDataLite CustomInput_class_data_;
#else
extern const CustomInputGlobalsTypeInternal CustomInput_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
class InputFeature;
struct InputFeatureGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern InputFeatureGlobalsTypeInternal InputFeature_globals_;
extern const ::google::protobuf::internal::ClassDataLite InputFeature_class_data_;
#else
extern const InputFeatureGlobalsTypeInternal InputFeature_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
class SegmentationModelMetadata;
struct SegmentationModelMetadataGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern SegmentationModelMetadataGlobalsTypeInternal SegmentationModelMetadata_globals_;
extern const ::google::protobuf::internal::ClassDataLite SegmentationModelMetadata_class_data_;
#else
extern const SegmentationModelMetadataGlobalsTypeInternal SegmentationModelMetadata_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
class SegmentationModelMetadata_DiscreteMapping;
struct SegmentationModelMetadata_DiscreteMappingGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern SegmentationModelMetadata_DiscreteMappingGlobalsTypeInternal SegmentationModelMetadata_DiscreteMapping_globals_;
extern const ::google::protobuf::internal::ClassDataLite SegmentationModelMetadata_DiscreteMapping_class_data_;
#else
extern const SegmentationModelMetadata_DiscreteMappingGlobalsTypeInternal SegmentationModelMetadata_DiscreteMapping_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
class SegmentationModelMetadata_DiscreteMapping_Entry;
struct SegmentationModelMetadata_DiscreteMapping_EntryGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern SegmentationModelMetadata_DiscreteMapping_EntryGlobalsTypeInternal SegmentationModelMetadata_DiscreteMapping_Entry_globals_;
extern const ::google::protobuf::internal::ClassDataLite SegmentationModelMetadata_DiscreteMapping_Entry_class_data_;
#else
extern const SegmentationModelMetadata_DiscreteMapping_EntryGlobalsTypeInternal SegmentationModelMetadata_DiscreteMapping_Entry_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
class SignalFilterConfig;
struct SignalFilterConfigGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern SignalFilterConfigGlobalsTypeInternal SignalFilterConfig_globals_;
extern const ::google::protobuf::internal::ClassDataLite SignalFilterConfig_class_data_;
#else
extern const SignalFilterConfigGlobalsTypeInternal SignalFilterConfig_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
class SignalFilterConfig_UkmEvent;
struct SignalFilterConfig_UkmEventGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern SignalFilterConfig_UkmEventGlobalsTypeInternal SignalFilterConfig_UkmEvent_globals_;
extern const ::google::protobuf::internal::ClassDataLite SignalFilterConfig_UkmEvent_class_data_;
#else
extern const SignalFilterConfig_UkmEventGlobalsTypeInternal SignalFilterConfig_UkmEvent_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
class SqlFeature;
struct SqlFeatureGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern SqlFeatureGlobalsTypeInternal SqlFeature_globals_;
extern const ::google::protobuf::internal::ClassDataLite SqlFeature_class_data_;
#else
extern const SqlFeatureGlobalsTypeInternal SqlFeature_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
class SqlFeature_BindValue;
struct SqlFeature_BindValueGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern SqlFeature_BindValueGlobalsTypeInternal SqlFeature_BindValue_globals_;
extern const ::google::protobuf::internal::ClassDataLite SqlFeature_BindValue_class_data_;
#else
extern const SqlFeature_BindValueGlobalsTypeInternal SqlFeature_BindValue_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
class TrainingOutput;
struct TrainingOutputGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern TrainingOutputGlobalsTypeInternal TrainingOutput_globals_;
extern const ::google::protobuf::internal::ClassDataLite TrainingOutput_class_data_;
#else
extern const TrainingOutputGlobalsTypeInternal TrainingOutput_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
class TrainingOutputs;
struct TrainingOutputsGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern TrainingOutputsGlobalsTypeInternal TrainingOutputs_globals_;
extern const ::google::protobuf::internal::ClassDataLite TrainingOutputs_class_data_;
#else
extern const TrainingOutputsGlobalsTypeInternal TrainingOutputs_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
class TrainingOutputs_TriggerConfig;
struct TrainingOutputs_TriggerConfigGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern TrainingOutputs_TriggerConfigGlobalsTypeInternal TrainingOutputs_TriggerConfig_globals_;
extern const ::google::protobuf::internal::ClassDataLite TrainingOutputs_TriggerConfig_class_data_;
#else
extern const TrainingOutputs_TriggerConfigGlobalsTypeInternal TrainingOutputs_TriggerConfig_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
class TrainingOutputs_TriggerConfig_ObservationTrigger;
struct TrainingOutputs_TriggerConfig_ObservationTriggerGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern TrainingOutputs_TriggerConfig_ObservationTriggerGlobalsTypeInternal TrainingOutputs_TriggerConfig_ObservationTrigger_globals_;
extern const ::google::protobuf::internal::ClassDataLite TrainingOutputs_TriggerConfig_ObservationTrigger_class_data_;
#else
extern const TrainingOutputs_TriggerConfig_ObservationTriggerGlobalsTypeInternal TrainingOutputs_TriggerConfig_ObservationTrigger_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
class UMAFeature;
struct UMAFeatureGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern UMAFeatureGlobalsTypeInternal UMAFeature_globals_;
extern const ::google::protobuf::internal::ClassDataLite UMAFeature_class_data_;
#else
extern const UMAFeatureGlobalsTypeInternal UMAFeature_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
class UMAOutput;
struct UMAOutputGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern UMAOutputGlobalsTypeInternal UMAOutput_globals_;
extern const ::google::protobuf::internal::ClassDataLite UMAOutput_class_data_;
#else
extern const UMAOutputGlobalsTypeInternal UMAOutput_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
class VersionInfo;
struct VersionInfoGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern VersionInfoGlobalsTypeInternal VersionInfo_globals_;
extern const ::google::protobuf::internal::ClassDataLite VersionInfo_class_data_;
#else
extern const VersionInfoGlobalsTypeInternal VersionInfo_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
}  // namespace proto
}  // namespace segmentation_platform
namespace google {
namespace protobuf {
template <>
internal::EnumTraitsT<::segmentation_platform::proto::CurrentVersion_internal_data_>
    internal::EnumTraitsImpl::value<::segmentation_platform::proto::CurrentVersion>;
template <>
internal::EnumTraitsT<::segmentation_platform::proto::CustomInput_FillPolicy_internal_data_>
    internal::EnumTraitsImpl::value<::segmentation_platform::proto::CustomInput_FillPolicy>;
template <>
internal::EnumTraitsT<::segmentation_platform::proto::ModelSource_internal_data_>
    internal::EnumTraitsImpl::value<::segmentation_platform::proto::ModelSource>;
template <>
internal::EnumTraitsT<::segmentation_platform::proto::SegmentationModelMetadata_OutputDescription_internal_data_>
    internal::EnumTraitsImpl::value<::segmentation_platform::proto::SegmentationModelMetadata_OutputDescription>;
template <>
internal::EnumTraitsT<::segmentation_platform::proto::SqlFeature_BindValue_ParamType_internal_data_>
    internal::EnumTraitsImpl::value<::segmentation_platform::proto::SqlFeature_BindValue_ParamType>;
template <>
internal::EnumTraitsT<::segmentation_platform::proto::TrainingOutputs_TriggerConfig_DecisionType_internal_data_>
    internal::EnumTraitsImpl::value<::segmentation_platform::proto::TrainingOutputs_TriggerConfig_DecisionType>;
}  // namespace protobuf
}  // namespace google

namespace segmentation_platform {
namespace proto {
enum CustomInput_FillPolicy : int {
  CustomInput_FillPolicy_UNKNOWN_FILL_POLICY = 0,
  CustomInput_FillPolicy_FILL_PREDICTION_TIME = 1,
  CustomInput_FillPolicy_TIME_RANGE_BEFORE_PREDICTION = 2,
  CustomInput_FillPolicy_PRICE_TRACKING_HINTS = 3,
  CustomInput_FillPolicy_FILL_FROM_INPUT_CONTEXT = 4,
  CustomInput_FillPolicy_FILL_SYNC_DEVICE_INFO = 5,
  CustomInput_FillPolicy_FILL_DEVICE_RAM_MB = 6,
  CustomInput_FillPolicy_FILL_DEVICE_OS_VERSION_NUMBER = 7,
  CustomInput_FillPolicy_FILL_DEVICE_PPI = 8,
  CustomInput_FillPolicy_FILL_TAB_METRICS = 9,
  CustomInput_FillPolicy_FILL_RANDOM = 10,
  CustomInput_FillPolicy_FILL_FROM_SHOPPING_SERVICE = 11,
  CustomInput_FillPolicy_FILL_CLIENT_AGE_DAYS = 12,
};

extern const uint32_t CustomInput_FillPolicy_internal_data_[];
inline constexpr CustomInput_FillPolicy CustomInput_FillPolicy_FillPolicy_MIN =
    static_cast<CustomInput_FillPolicy>(0);
inline constexpr CustomInput_FillPolicy CustomInput_FillPolicy_FillPolicy_MAX =
    static_cast<CustomInput_FillPolicy>(12);
inline bool CustomInput_FillPolicy_IsValid(int value) {
  return 0 <= value && value <= 12;
}
inline constexpr int CustomInput_FillPolicy_FillPolicy_ARRAYSIZE = 12 + 1;
const ::std::string& CustomInput_FillPolicy_Name(CustomInput_FillPolicy value);
template <typename T>
const ::std::string& CustomInput_FillPolicy_Name(T value) {
  static_assert(::std::is_same<T, CustomInput_FillPolicy>::value ||
                    ::std::is_integral<T>::value,
                "Incorrect type passed to FillPolicy_Name().");
  return CustomInput_FillPolicy_Name(static_cast<CustomInput_FillPolicy>(value));
}
bool CustomInput_FillPolicy_Parse(
    ::absl::string_view name, CustomInput_FillPolicy* PROTOBUF_NONNULL value);
enum SqlFeature_BindValue_ParamType : int {
  SqlFeature_BindValue_ParamType_UNKNOWN = 0,
  SqlFeature_BindValue_ParamType_NULL_ = 1,
  SqlFeature_BindValue_ParamType_BOOL = 2,
  SqlFeature_BindValue_ParamType_INT = 3,
  SqlFeature_BindValue_ParamType_INT64 = 4,
  SqlFeature_BindValue_ParamType_DOUBLE = 5,
  SqlFeature_BindValue_ParamType_STRING = 6,
  SqlFeature_BindValue_ParamType_TIME = 7,
};

extern const uint32_t SqlFeature_BindValue_ParamType_internal_data_[];
inline constexpr SqlFeature_BindValue_ParamType SqlFeature_BindValue_ParamType_ParamType_MIN =
    static_cast<SqlFeature_BindValue_ParamType>(0);
inline constexpr SqlFeature_BindValue_ParamType SqlFeature_BindValue_ParamType_ParamType_MAX =
    static_cast<SqlFeature_BindValue_ParamType>(7);
inline bool SqlFeature_BindValue_ParamType_IsValid(int value) {
  return 0 <= value && value <= 7;
}
inline constexpr int SqlFeature_BindValue_ParamType_ParamType_ARRAYSIZE = 7 + 1;
const ::std::string& SqlFeature_BindValue_ParamType_Name(SqlFeature_BindValue_ParamType value);
template <typename T>
const ::std::string& SqlFeature_BindValue_ParamType_Name(T value) {
  static_assert(::std::is_same<T, SqlFeature_BindValue_ParamType>::value ||
                    ::std::is_integral<T>::value,
                "Incorrect type passed to ParamType_Name().");
  return SqlFeature_BindValue_ParamType_Name(static_cast<SqlFeature_BindValue_ParamType>(value));
}
bool SqlFeature_BindValue_ParamType_Parse(
    ::absl::string_view name, SqlFeature_BindValue_ParamType* PROTOBUF_NONNULL value);
enum TrainingOutputs_TriggerConfig_DecisionType : int {
  TrainingOutputs_TriggerConfig_DecisionType_UNKNOWN = 0,
  TrainingOutputs_TriggerConfig_DecisionType_ONDEMAND = 1,
  TrainingOutputs_TriggerConfig_DecisionType_PERIODIC = 2,
};

extern const uint32_t TrainingOutputs_TriggerConfig_DecisionType_internal_data_[];
inline constexpr TrainingOutputs_TriggerConfig_DecisionType TrainingOutputs_TriggerConfig_DecisionType_DecisionType_MIN =
    static_cast<TrainingOutputs_TriggerConfig_DecisionType>(0);
inline constexpr TrainingOutputs_TriggerConfig_DecisionType TrainingOutputs_TriggerConfig_DecisionType_DecisionType_MAX =
    static_cast<TrainingOutputs_TriggerConfig_DecisionType>(2);
inline bool TrainingOutputs_TriggerConfig_DecisionType_IsValid(int value) {
  return 0 <= value && value <= 2;
}
inline constexpr int TrainingOutputs_TriggerConfig_DecisionType_DecisionType_ARRAYSIZE = 2 + 1;
const ::std::string& TrainingOutputs_TriggerConfig_DecisionType_Name(TrainingOutputs_TriggerConfig_DecisionType value);
template <typename T>
const ::std::string& TrainingOutputs_TriggerConfig_DecisionType_Name(T value) {
  static_assert(::std::is_same<T, TrainingOutputs_TriggerConfig_DecisionType>::value ||
                    ::std::is_integral<T>::value,
                "Incorrect type passed to DecisionType_Name().");
  return TrainingOutputs_TriggerConfig_DecisionType_Name(static_cast<TrainingOutputs_TriggerConfig_DecisionType>(value));
}
bool TrainingOutputs_TriggerConfig_DecisionType_Parse(
    ::absl::string_view name, TrainingOutputs_TriggerConfig_DecisionType* PROTOBUF_NONNULL value);
enum SegmentationModelMetadata_OutputDescription : int {
  SegmentationModelMetadata_OutputDescription_UNKNOWN_RETURN_TYPE = 0,
  SegmentationModelMetadata_OutputDescription_RETURN_TYPE_HEURISTIC = 1,
  SegmentationModelMetadata_OutputDescription_RETURN_TYPE_MULTISEGMENT = 2,
  SegmentationModelMetadata_OutputDescription_RETURN_TYPE_PROBABILITY = 3,
  SegmentationModelMetadata_OutputDescription_RETURN_TYPE_INTEGER = 4,
};

extern const uint32_t SegmentationModelMetadata_OutputDescription_internal_data_[];
inline constexpr SegmentationModelMetadata_OutputDescription SegmentationModelMetadata_OutputDescription_OutputDescription_MIN =
    static_cast<SegmentationModelMetadata_OutputDescription>(0);
inline constexpr SegmentationModelMetadata_OutputDescription SegmentationModelMetadata_OutputDescription_OutputDescription_MAX =
    static_cast<SegmentationModelMetadata_OutputDescription>(4);
inline bool SegmentationModelMetadata_OutputDescription_IsValid(int value) {
  return 0 <= value && value <= 4;
}
inline constexpr int SegmentationModelMetadata_OutputDescription_OutputDescription_ARRAYSIZE = 4 + 1;
const ::std::string& SegmentationModelMetadata_OutputDescription_Name(SegmentationModelMetadata_OutputDescription value);
template <typename T>
const ::std::string& SegmentationModelMetadata_OutputDescription_Name(T value) {
  static_assert(::std::is_same<T, SegmentationModelMetadata_OutputDescription>::value ||
                    ::std::is_integral<T>::value,
                "Incorrect type passed to OutputDescription_Name().");
  return SegmentationModelMetadata_OutputDescription_Name(static_cast<SegmentationModelMetadata_OutputDescription>(value));
}
bool SegmentationModelMetadata_OutputDescription_Parse(
    ::absl::string_view name, SegmentationModelMetadata_OutputDescription* PROTOBUF_NONNULL value);
enum CurrentVersion : int {
  METADATA_VERSION = 3,
};

extern const uint32_t CurrentVersion_internal_data_[];
inline constexpr CurrentVersion CurrentVersion_MIN =
    static_cast<CurrentVersion>(3);
inline constexpr CurrentVersion CurrentVersion_MAX =
    static_cast<CurrentVersion>(3);
inline bool CurrentVersion_IsValid(int value) {
  return 3 <= value && value <= 3;
}
inline constexpr int CurrentVersion_ARRAYSIZE = 3 + 1;
const ::std::string& CurrentVersion_Name(CurrentVersion value);
template <typename T>
const ::std::string& CurrentVersion_Name(T value) {
  static_assert(::std::is_same<T, CurrentVersion>::value ||
                    ::std::is_integral<T>::value,
                "Incorrect type passed to CurrentVersion_Name().");
  return CurrentVersion_Name(static_cast<CurrentVersion>(value));
}
bool CurrentVersion_Parse(
    ::absl::string_view name, CurrentVersion* PROTOBUF_NONNULL value);
enum ModelSource : int {
  UNKNOWN_MODEL_SOURCE = 0,
  SERVER_MODEL_SOURCE = 1,
  DEFAULT_MODEL_SOURCE = 2,
};

extern const uint32_t ModelSource_internal_data_[];
inline constexpr ModelSource ModelSource_MIN =
    static_cast<ModelSource>(0);
inline constexpr ModelSource ModelSource_MAX =
    static_cast<ModelSource>(2);
inline bool ModelSource_IsValid(int value) {
  return 0 <= value && value <= 2;
}
inline constexpr int ModelSource_ARRAYSIZE = 2 + 1;
const ::std::string& ModelSource_Name(ModelSource value);
template <typename T>
const ::std::string& ModelSource_Name(T value) {
  static_assert(::std::is_same<T, ModelSource>::value ||
                    ::std::is_integral<T>::value,
                "Incorrect type passed to ModelSource_Name().");
  return ModelSource_Name(static_cast<ModelSource>(value));
}
bool ModelSource_Parse(
    ::absl::string_view name, ModelSource* PROTOBUF_NONNULL value);
using ::google::protobuf::internal::generated_enum::AbslParseFlag;
using ::google::protobuf::internal::generated_enum::AbslUnparseFlag;

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


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

class  VersionInfo final : public ::google::protobuf::MessageLite
/* @@protoc_insertion_point(class_definition:segmentation_platform.proto.VersionInfo) */ {
 public:
  inline VersionInfo() : VersionInfo(nullptr) {}
  ~VersionInfo() PROTOBUF_FINAL;

#if defined(PROTOBUF_CUSTOM_VTABLE)
  void operator delete(VersionInfo* PROTOBUF_NONNULL msg, ::std::destroying_delete_t) {
    SharedDtor(*msg);
    ::google::protobuf::internal::SizedDelete(msg, sizeof(VersionInfo));
  }
#endif

  template <typename = void>
  explicit constexpr VersionInfo(::google::protobuf::internal::ConstantInitialized,
                           const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL
                               class_data);

  inline VersionInfo(const VersionInfo& from) : VersionInfo(nullptr, from) {}
  inline VersionInfo(VersionInfo&& from) noexcept : VersionInfo(nullptr, ::std::move(from)) {}
  inline VersionInfo& operator=(const VersionInfo& from) {
    CopyFrom(from);
    return *this;
  }
  inline VersionInfo& operator=(VersionInfo&& from) noexcept {
    if (this == &from) return *this;
    if (::google::protobuf::internal::CanMoveWithInternalSwap(GetArena(), from.GetArena())) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  inline const ::std::string& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString);
  }
  inline ::std::string* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::std::string>();
  }

  static const VersionInfo& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<VersionInfo>(&VersionInfo_globals_);
  }
  static constexpr int kIndexInFileMessages = 0;
  friend void swap(VersionInfo& a, VersionInfo& b) { a.Swap(&b); }
  PROTOBUF_NOINLINE void Swap(VersionInfo* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(VersionInfo* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  VersionInfo* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::MessageLite::DefaultConstruct<VersionInfo>(arena);
  }
  void CopyFrom(const VersionInfo& from);
  void MergeFrom(const VersionInfo& from) { VersionInfo::MergeImpl(*this, from); }

  private:
  static void MergeImpl(::google::protobuf::MessageLite& to_msg,
                        const ::google::protobuf::MessageLite& from_msg);

  public:
  bool IsInitialized() const {
    return true;
  }
  ABSL_ATTRIBUTE_REINITIALIZES void Clear() PROTOBUF_FINAL;
  #if defined(PROTOBUF_CUSTOM_VTABLE)
  private:
  static ::size_t ByteSizeLong(const ::google::protobuf::MessageLite& msg);
  static ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      const ::google::protobuf::MessageLite& msg, ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream);

  public:
  ::size_t ByteSizeLong() const { return ByteSizeLong(*this); }
  ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const {
    return _InternalSerialize(*this, target, stream);
  }
  #else   // PROTOBUF_CUSTOM_VTABLE
  ::size_t ByteSizeLong() const final;
  ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const final;
  #endif  // PROTOBUF_CUSTOM_VTABLE
  int GetCachedSize() const {
    return _impl_._cached_size_.Get();
  }

  private:
  void SharedCtor(::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  static void SharedDtor(MessageLite& self);
  void InternalSwap(VersionInfo* PROTOBUF_NONNULL other);
 private:
  template <typename T>
  friend ::absl::string_view(::google::protobuf::internal::GetAnyMessageName)();
  static ::absl::string_view FullMessageName() { return "segmentation_platform.proto.VersionInfo"; }

  explicit VersionInfo(::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  VersionInfo(::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const VersionInfo& from);
  VersionInfo(
      ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, VersionInfo&& from) noexcept
      : VersionInfo(arena) {
    *this = ::std::move(from);
  }
  const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL GetClassData() const PROTOBUF_FINAL;
  static void* PROTOBUF_NONNULL PlacementNew_(
      const void* PROTOBUF_NONNULL, void* PROTOBUF_NONNULL mem,
      ::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  static constexpr auto InternalNewImpl_();

 public:
  static constexpr auto InternalGenerateClassData_(
      const MessageLite& prototype,
      const ::google::protobuf::internal::TcParseTableBase* PROTOBUF_NULLABLE tc_table = nullptr);

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

  // accessors -------------------------------------------------------
  enum : int {
    kMetadataMinVersionFieldNumber = 1,
    kMetadataCurVersionFieldNumber = 2,
  };
  // optional int32 metadata_min_version = 1;
  bool has_metadata_min_version()
      const;
  void clear_metadata_min_version() ;
  ::int32_t metadata_min_version() const;
  void set_metadata_min_version(::int32_t value);

  private:
  ::int32_t _internal_metadata_min_version() const;
  void _internal_set_metadata_min_version(::int32_t value);

  public:
  // optional int32 metadata_cur_version = 2;
  bool has_metadata_cur_version()
      const;
  void clear_metadata_cur_version() ;
  ::int32_t metadata_cur_version() const;
  void set_metadata_cur_version(::int32_t value);

  private:
  ::int32_t _internal_metadata_cur_version() const;
  void _internal_set_metadata_cur_version(::int32_t value);

  public:
  // @@protoc_insertion_point(class_scope:segmentation_platform.proto.VersionInfo)
 private:
  class _Internal;
  using ParseTableT_ =
      ::google::protobuf::internal::TcParseTable<1, 2,
                          0, 0,
                          2>;
  static constexpr ParseTableT_ InternalGenerateParseTable_(
      const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL class_data);
  friend class ::google::protobuf::internal::TcParser;
  #ifndef PROTOBUF_MESSAGE_GLOBALS
  static const ParseTableT_ _table_;
  #endif

  friend class ::google::protobuf::MessageLite;
  friend class ::google::protobuf::Arena;
  friend ::google::protobuf::internal::PrivateAccess;
  template <typename T>
  friend class ::google::protobuf::Arena::InternalHelper;
  using InternalArenaConstructable_ = void;
  using DestructorSkippable_ = void;
  struct Impl_ {
    inline explicit constexpr Impl_(::google::protobuf::internal::InternalVisibility visibility,
                                    ::google::protobuf::internal::ConstantInitialized) noexcept;
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const Impl_& from,
        const VersionInfo& from_msg);
    ::google::protobuf::internal::HasBits<1> _has_bits_;
    ::google::protobuf::internal::CachedSize _cached_size_;
    ::int32_t metadata_min_version_;
    ::int32_t metadata_cur_version_;
    PROTOBUF_TSAN_DECLARE_MEMBER
  };
  union { Impl_ _impl_; };
  friend struct ::TableStruct_components_2fsegmentation_5fplatform_2fpublic_2fproto_2fmodel_5fmetadata_2eproto;
};
// -------------------------------------------------------------------

class  UMAFeature final : public ::google::protobuf::MessageLite
/* @@protoc_insertion_point(class_definition:segmentation_platform.proto.UMAFeature) */ {
 public:
  inline UMAFeature() : UMAFeature(nullptr) {}
  ~UMAFeature() PROTOBUF_FINAL;

#if defined(PROTOBUF_CUSTOM_VTABLE)
  void operator delete(UMAFeature* PROTOBUF_NONNULL msg, ::std::destroying_delete_t) {
    SharedDtor(*msg);
    ::google::protobuf::internal::SizedDelete(msg, sizeof(UMAFeature));
  }
#endif

  template <typename = void>
  explicit constexpr UMAFeature(::google::protobuf::internal::ConstantInitialized,
                           const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL
                               class_data);

  inline UMAFeature(const UMAFeature& from) : UMAFeature(nullptr, from) {}
  inline UMAFeature(UMAFeature&& from) noexcept : UMAFeature(nullptr, ::std::move(from)) {}
  inline UMAFeature& operator=(const UMAFeature& from) {
    CopyFrom(from);
    return *this;
  }
  inline UMAFeature& operator=(UMAFeature&& from) noexcept {
    if (this == &from) return *this;
    if (::google::protobuf::internal::CanMoveWithInternalSwap(GetArena(), from.GetArena())) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  inline const ::std::string& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString);
  }
  inline ::std::string* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::std::string>();
  }

  static const UMAFeature& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<UMAFeature>(&UMAFeature_globals_);
  }
  static constexpr int kIndexInFileMessages = 1;
  friend void swap(UMAFeature& a, UMAFeature& b) { a.Swap(&b); }
  PROTOBUF_NOINLINE void Swap(UMAFeature* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(UMAFeature* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  UMAFeature* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::MessageLite::DefaultConstruct<UMAFeature>(arena);
  }
  void CopyFrom(const UMAFeature& from);
  void MergeFrom(const UMAFeature& from) { UMAFeature::MergeImpl(*this, from); }

  private:
  static void MergeImpl(::google::protobuf::MessageLite& to_msg,
                        const ::google::protobuf::MessageLite& from_msg);

  public:
  bool IsInitialized() const {
    return true;
  }
  ABSL_ATTRIBUTE_REINITIALIZES void Clear() PROTOBUF_FINAL;
  #if defined(PROTOBUF_CUSTOM_VTABLE)
  private:
  static ::size_t ByteSizeLong(const ::google::protobuf::MessageLite& msg);
  static ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      const ::google::protobuf::MessageLite& msg, ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream);

  public:
  ::size_t ByteSizeLong() const { return ByteSizeLong(*this); }
  ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const {
    return _InternalSerialize(*this, target, stream);
  }
  #else   // PROTOBUF_CUSTOM_VTABLE
  ::size_t ByteSizeLong() const final;
  ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const final;
  #endif  // PROTOBUF_CUSTOM_VTABLE
  int GetCachedSize() const {
    return _impl_._cached_size_.Get();
  }

  private:
  void SharedCtor(::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  static void SharedDtor(MessageLite& self);
  void InternalSwap(UMAFeature* PROTOBUF_NONNULL other);
 private:
  template <typename T>
  friend ::absl::string_view(::google::protobuf::internal::GetAnyMessageName)();
  static ::absl::string_view FullMessageName() { return "segmentation_platform.proto.UMAFeature"; }

  explicit UMAFeature(::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  UMAFeature(::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const UMAFeature& from);
  UMAFeature(
      ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, UMAFeature&& from) noexcept
      : UMAFeature(arena) {
    *this = ::std::move(from);
  }
  const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL GetClassData() const PROTOBUF_FINAL;
  static void* PROTOBUF_NONNULL PlacementNew_(
      const void* PROTOBUF_NONNULL, void* PROTOBUF_NONNULL mem,
      ::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  static constexpr auto InternalNewImpl_();

 public:
  static constexpr auto InternalGenerateClassData_(
      const MessageLite& prototype,
      const ::google::protobuf::internal::TcParseTableBase* PROTOBUF_NULLABLE tc_table = nullptr);

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

  // accessors -------------------------------------------------------
  enum : int {
    kEnumIdsFieldNumber = 7,
    kDefaultValuesFieldNumber = 8,
    kNameFieldNumber = 2,
    kNameHashFieldNumber = 3,
    kTypeFieldNumber = 1,
    kAggregationFieldNumber = 6,
    kBucketCountFieldNumber = 4,
    kTensorLengthFieldNumber = 5,
  };
  // repeated int32 enum_ids = 7;
  int enum_ids_size()
      const;
  private:
  int _internal_enum_ids_size() const;

  public:
  void clear_enum_ids() ;
  ::int32_t enum_ids(int index) const;
  void set_enum_ids(int index, ::int32_t value);
  void add_enum_ids(::int32_t value);
  const ::google::protobuf::RepeatedField<::int32_t>& enum_ids()
      const;
  ::google::protobuf::RepeatedField<::int32_t>* PROTOBUF_NONNULL mutable_enum_ids();

  private:
  const ::google::protobuf::RepeatedField<::int32_t>& _internal_enum_ids() const;
  ::google::protobuf::RepeatedField<::int32_t>* PROTOBUF_NONNULL _internal_mutable_enum_ids();

  public:
  // repeated float default_values = 8;
  int default_values_size()
      const;
  private:
  int _internal_default_values_size() const;

  public:
  void clear_default_values() ;
  float default_values(int index) const;
  void set_default_values(int index, float value);
  void add_default_values(float value);
  const ::google::protobuf::RepeatedField<float>& default_values()
      const;
  ::google::protobuf::RepeatedField<float>* PROTOBUF_NONNULL mutable_default_values();

  private:
  const ::google::protobuf::RepeatedField<float>& _internal_default_values() const;
  ::google::protobuf::RepeatedField<float>* PROTOBUF_NONNULL _internal_mutable_default_values();

  public:
  // optional string name = 2;
  bool has_name()
      const;
  void clear_name() ;
  const ::std::string& name() const;
  template <typename Arg_ = const ::std::string&, typename... Args_>
  void set_name(Arg_&& arg, Args_... args);
  ::std::string* PROTOBUF_NONNULL mutable_name();
  ::std::string* PROTOBUF_NULLABLE release_name();
  void set_allocated_name(::std::string* PROTOBUF_NULLABLE value);

  private:
  const ::std::string& _internal_name() const;
  PROTOBUF_ALWAYS_INLINE void _internal_set_name(const ::std::string& value);
  ::std::string* PROTOBUF_NONNULL _internal_mutable_name();

  public:
  // optional fixed64 name_hash = 3;
  bool has_name_hash()
      const;
  void clear_name_hash() ;
  ::uint64_t name_hash() const;
  void set_name_hash(::uint64_t value);

  private:
  ::uint64_t _internal_name_hash() const;
  void _internal_set_name_hash(::uint64_t value);

  public:
  // optional .segmentation_platform.proto.SignalType type = 1;
  bool has_type()
      const;
  void clear_type() ;
  ::segmentation_platform::proto::SignalType type() const;
  void set_type(::segmentation_platform::proto::SignalType value);

  private:
  ::segmentation_platform::proto::SignalType _internal_type() const;
  void _internal_set_type(::segmentation_platform::proto::SignalType value);

  public:
  // optional .segmentation_platform.proto.Aggregation aggregation = 6;
  bool has_aggregation()
      const;
  void clear_aggregation() ;
  ::segmentation_platform::proto::Aggregation aggregation() const;
  void set_aggregation(::segmentation_platform::proto::Aggregation value);

  private:
  ::segmentation_platform::proto::Aggregation _internal_aggregation() const;
  void _internal_set_aggregation(::segmentation_platform::proto::Aggregation value);

  public:
  // optional uint64 bucket_count = 4;
  bool has_bucket_count()
      const;
  void clear_bucket_count() ;
  ::uint64_t bucket_count() const;
  void set_bucket_count(::uint64_t value);

  private:
  ::uint64_t _internal_bucket_count() const;
  void _internal_set_bucket_count(::uint64_t value);

  public:
  // optional uint64 tensor_length = 5;
  bool has_tensor_length()
      const;
  void clear_tensor_length() ;
  ::uint64_t tensor_length() const;
  void set_tensor_length(::uint64_t value);

  private:
  ::uint64_t _internal_tensor_length() const;
  void _internal_set_tensor_length(::uint64_t value);

  public:
  // @@protoc_insertion_point(class_scope:segmentation_platform.proto.UMAFeature)
 private:
  class _Internal;
  using ParseTableT_ =
      ::google::protobuf::internal::TcParseTable<3, 8,
                          2, 0,
                          2>;
  static constexpr ParseTableT_ InternalGenerateParseTable_(
      const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL class_data);
  friend class ::google::protobuf::internal::TcParser;
  #ifndef PROTOBUF_MESSAGE_GLOBALS
  static const ParseTableT_ _table_;
  #endif

  friend class ::google::protobuf::MessageLite;
  friend class ::google::protobuf::Arena;
  friend ::google::protobuf::internal::PrivateAccess;
  template <typename T>
  friend class ::google::protobuf::Arena::InternalHelper;
  using InternalArenaConstructable_ = void;
  using DestructorSkippable_ = void;
  struct Impl_ {
    inline explicit constexpr Impl_(::google::protobuf::internal::InternalVisibility visibility,
                                    ::google::protobuf::internal::ConstantInitialized) noexcept;
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const Impl_& from,
        const UMAFeature& from_msg);
    ::google::protobuf::internal::HasBits<1> _has_bits_;
    ::google::protobuf::internal::CachedSize _cached_size_;
    ::google::protobuf::RepeatedField<::int32_t> enum_ids_;
    ::google::protobuf::RepeatedField<float> default_values_;
    ::google::protobuf::internal::ArenaStringPtr name_;
    ::uint64_t name_hash_;
    int type_;
    int aggregation_;
    ::uint64_t bucket_count_;
    ::uint64_t tensor_length_;
    PROTOBUF_TSAN_DECLARE_MEMBER
  };
  union { Impl_ _impl_; };
  friend struct ::TableStruct_components_2fsegmentation_5fplatform_2fpublic_2fproto_2fmodel_5fmetadata_2eproto;
};
// -------------------------------------------------------------------

class  SignalFilterConfig_UkmEvent final : public ::google::protobuf::MessageLite
/* @@protoc_insertion_point(class_definition:segmentation_platform.proto.SignalFilterConfig.UkmEvent) */ {
 public:
  inline SignalFilterConfig_UkmEvent() : SignalFilterConfig_UkmEvent(nullptr) {}
  ~SignalFilterConfig_UkmEvent() PROTOBUF_FINAL;

#if defined(PROTOBUF_CUSTOM_VTABLE)
  void operator delete(SignalFilterConfig_UkmEvent* PROTOBUF_NONNULL msg, ::std::destroying_delete_t) {
    SharedDtor(*msg);
    ::google::protobuf::internal::SizedDelete(msg, sizeof(SignalFilterConfig_UkmEvent));
  }
#endif

  template <typename = void>
  explicit constexpr SignalFilterConfig_UkmEvent(::google::protobuf::internal::ConstantInitialized,
                           const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL
                               class_data);

  inline SignalFilterConfig_UkmEvent(const SignalFilterConfig_UkmEvent& from) : SignalFilterConfig_UkmEvent(nullptr, from) {}
  inline SignalFilterConfig_UkmEvent(SignalFilterConfig_UkmEvent&& from) noexcept : SignalFilterConfig_UkmEvent(nullptr, ::std::move(from)) {}
  inline SignalFilterConfig_UkmEvent& operator=(const SignalFilterConfig_UkmEvent& from) {
    CopyFrom(from);
    return *this;
  }
  inline SignalFilterConfig_UkmEvent& operator=(SignalFilterConfig_UkmEvent&& from) noexcept {
    if (this == &from) return *this;
    if (::google::protobuf::internal::CanMoveWithInternalSwap(GetArena(), from.GetArena())) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  inline const ::std::string& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString);
  }
  inline ::std::string* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::std::string>();
  }

  static const SignalFilterConfig_UkmEvent& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<SignalFilterConfig_UkmEvent>(&SignalFilterConfig_UkmEvent_globals_);
  }
  static constexpr int kIndexInFileMessages = 4;
  friend void swap(SignalFilterConfig_UkmEvent& a, SignalFilterConfig_UkmEvent& b) { a.Swap(&b); }
  PROTOBUF_NOINLINE void Swap(SignalFilterConfig_UkmEvent* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(SignalFilterConfig_UkmEvent* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  SignalFilterConfig_UkmEvent* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::MessageLite::DefaultConstruct<SignalFilterConfig_UkmEvent>(arena);
  }
  void CopyFrom(const SignalFilterConfig_UkmEvent& from);
  void MergeFrom(const SignalFilterConfig_UkmEvent& from) { SignalFilterConfig_UkmEvent::MergeImpl(*this, from); }

  private:
  static void MergeImpl(::google::protobuf::MessageLite& to_msg,
                        const ::google::protobuf::MessageLite& from_msg);

  public:
  bool IsInitialized() const {
    return true;
  }
  ABSL_ATTRIBUTE_REINITIALIZES void Clear() PROTOBUF_FINAL;
  #if defined(PROTOBUF_CUSTOM_VTABLE)
  private:
  static ::size_t ByteSizeLong(const ::google::protobuf::MessageLite& msg);
  static ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      const ::google::protobuf::MessageLite& msg, ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream);

  public:
  ::size_t ByteSizeLong() const { return ByteSizeLong(*this); }
  ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const {
    return _InternalSerialize(*this, target, stream);
  }
  #else   // PROTOBUF_CUSTOM_VTABLE
  ::size_t ByteSizeLong() const final;
  ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const final;
  #endif  // PROTOBUF_CUSTOM_VTABLE
  int GetCachedSize() const {
    return _impl_._cached_size_.Get();
  }

  private:
  void SharedCtor(::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  static void SharedDtor(MessageLite& self);
  void InternalSwap(SignalFilterConfig_UkmEvent* PROTOBUF_NONNULL other);
 private:
  template <typename T>
  friend ::absl::string_view(::google::protobuf::internal::GetAnyMessageName)();
  static ::absl::string_view FullMessageName() { return "segmentation_platform.proto.SignalFilterConfig.UkmEvent"; }

  explicit SignalFilterConfig_UkmEvent(::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  SignalFilterConfig_UkmEvent(::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const SignalFilterConfig_UkmEvent& from);
  SignalFilterConfig_UkmEvent(
      ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, SignalFilterConfig_UkmEvent&& from) noexcept
      : SignalFilterConfig_UkmEvent(arena) {
    *this = ::std::move(from);
  }
  const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL GetClassData() const PROTOBUF_FINAL;
  static void* PROTOBUF_NONNULL PlacementNew_(
      const void* PROTOBUF_NONNULL, void* PROTOBUF_NONNULL mem,
      ::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  static constexpr auto InternalNewImpl_();

 public:
  static constexpr auto InternalGenerateClassData_(
      const MessageLite& prototype,
      const ::google::protobuf::internal::TcParseTableBase* PROTOBUF_NULLABLE tc_table = nullptr);

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

  // accessors -------------------------------------------------------
  enum : int {
    kMetricHashFilterFieldNumber = 2,
    kEventHashFieldNumber = 1,
  };
  // repeated uint64 metric_hash_filter = 2;
  int metric_hash_filter_size()
      const;
  private:
  int _internal_metric_hash_filter_size() const;

  public:
  void clear_metric_hash_filter() ;
  ::uint64_t metric_hash_filter(int index) const;
  void set_metric_hash_filter(int index, ::uint64_t value);
  void add_metric_hash_filter(::uint64_t value);
  const ::google::protobuf::RepeatedField<::uint64_t>& metric_hash_filter()
      const;
  ::google::protobuf::RepeatedField<::uint64_t>* PROTOBUF_NONNULL mutable_metric_hash_filter();

  private:
  const ::google::protobuf::RepeatedField<::uint64_t>& _internal_metric_hash_filter() const;
  ::google::protobuf::RepeatedField<::uint64_t>* PROTOBUF_NONNULL _internal_mutable_metric_hash_filter();

  public:
  // optional uint64 event_hash = 1;
  bool has_event_hash()
      const;
  void clear_event_hash() ;
  ::uint64_t event_hash() const;
  void set_event_hash(::uint64_t value);

  private:
  ::uint64_t _internal_event_hash() const;
  void _internal_set_event_hash(::uint64_t value);

  public:
  // @@protoc_insertion_point(class_scope:segmentation_platform.proto.SignalFilterConfig.UkmEvent)
 private:
  class _Internal;
  using ParseTableT_ =
      ::google::protobuf::internal::TcParseTable<1, 2,
                          0, 0,
                          2>;
  static constexpr ParseTableT_ InternalGenerateParseTable_(
      const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL class_data);
  friend class ::google::protobuf::internal::TcParser;
  #ifndef PROTOBUF_MESSAGE_GLOBALS
  static const ParseTableT_ _table_;
  #endif

  friend class ::google::protobuf::MessageLite;
  friend class ::google::protobuf::Arena;
  friend ::google::protobuf::internal::PrivateAccess;
  template <typename T>
  friend class ::google::protobuf::Arena::InternalHelper;
  using InternalArenaConstructable_ = void;
  using DestructorSkippable_ = void;
  struct Impl_ {
    inline explicit constexpr Impl_(::google::protobuf::internal::InternalVisibility visibility,
                                    ::google::protobuf::internal::ConstantInitialized) noexcept;
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const Impl_& from,
        const SignalFilterConfig_UkmEvent& from_msg);
    ::google::protobuf::internal::HasBits<1> _has_bits_;
    ::google::protobuf::internal::CachedSize _cached_size_;
    ::google::protobuf::RepeatedField<::uint64_t> metric_hash_filter_;
    ::uint64_t event_hash_;
    PROTOBUF_TSAN_DECLARE_MEMBER
  };
  union { Impl_ _impl_; };
  friend struct ::TableStruct_components_2fsegmentation_5fplatform_2fpublic_2fproto_2fmodel_5fmetadata_2eproto;
};
// -------------------------------------------------------------------

class  SegmentationModelMetadata_DiscreteMapping_Entry final : public ::google::protobuf::MessageLite
/* @@protoc_insertion_point(class_definition:segmentation_platform.proto.SegmentationModelMetadata.DiscreteMapping.Entry) */ {
 public:
  inline SegmentationModelMetadata_DiscreteMapping_Entry() : SegmentationModelMetadata_DiscreteMapping_Entry(nullptr) {}
  ~SegmentationModelMetadata_DiscreteMapping_Entry() PROTOBUF_FINAL;

#if defined(PROTOBUF_CUSTOM_VTABLE)
  void operator delete(SegmentationModelMetadata_DiscreteMapping_Entry* PROTOBUF_NONNULL msg, ::std::destroying_delete_t) {
    SharedDtor(*msg);
    ::google::protobuf::internal::SizedDelete(msg, sizeof(SegmentationModelMetadata_DiscreteMapping_Entry));
  }
#endif

  template <typename = void>
  explicit constexpr SegmentationModelMetadata_DiscreteMapping_Entry(::google::protobuf::internal::ConstantInitialized,
                           const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL
                               class_data);

  inline SegmentationModelMetadata_DiscreteMapping_Entry(const SegmentationModelMetadata_DiscreteMapping_Entry& from) : SegmentationModelMetadata_DiscreteMapping_Entry(nullptr, from) {}
  inline SegmentationModelMetadata_DiscreteMapping_Entry(SegmentationModelMetadata_DiscreteMapping_Entry&& from) noexcept : SegmentationModelMetadata_DiscreteMapping_Entry(nullptr, ::std::move(from)) {}
  inline SegmentationModelMetadata_DiscreteMapping_Entry& operator=(const SegmentationModelMetadata_DiscreteMapping_Entry& from) {
    CopyFrom(from);
    return *this;
  }
  inline SegmentationModelMetadata_DiscreteMapping_Entry& operator=(SegmentationModelMetadata_DiscreteMapping_Entry&& from) noexcept {
    if (this == &from) return *this;
    if (::google::protobuf::internal::CanMoveWithInternalSwap(GetArena(), from.GetArena())) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  inline const ::std::string& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString);
  }
  inline ::std::string* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::std::string>();
  }

  static const SegmentationModelMetadata_DiscreteMapping_Entry& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<SegmentationModelMetadata_DiscreteMapping_Entry>(&SegmentationModelMetadata_DiscreteMapping_Entry_globals_);
  }
  static constexpr int kIndexInFileMessages = 14;
  friend void swap(SegmentationModelMetadata_DiscreteMapping_Entry& a, SegmentationModelMetadata_DiscreteMapping_Entry& b) { a.Swap(&b); }
  PROTOBUF_NOINLINE void Swap(SegmentationModelMetadata_DiscreteMapping_Entry* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(SegmentationModelMetadata_DiscreteMapping_Entry* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  SegmentationModelMetadata_DiscreteMapping_Entry* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::MessageLite::DefaultConstruct<SegmentationModelMetadata_DiscreteMapping_Entry>(arena);
  }
  void CopyFrom(const SegmentationModelMetadata_DiscreteMapping_Entry& from);
  void MergeFrom(const SegmentationModelMetadata_DiscreteMapping_Entry& from) { SegmentationModelMetadata_DiscreteMapping_Entry::MergeImpl(*this, from); }

  private:
  static void MergeImpl(::google::protobuf::MessageLite& to_msg,
                        const ::google::protobuf::MessageLite& from_msg);

  public:
  bool IsInitialized() const {
    return true;
  }
  ABSL_ATTRIBUTE_REINITIALIZES void Clear() PROTOBUF_FINAL;
  #if defined(PROTOBUF_CUSTOM_VTABLE)
  private:
  static ::size_t ByteSizeLong(const ::google::protobuf::MessageLite& msg);
  static ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      const ::google::protobuf::MessageLite& msg, ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream);

  public:
  ::size_t ByteSizeLong() const { return ByteSizeLong(*this); }
  ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const {
    return _InternalSerialize(*this, target, stream);
  }
  #else   // PROTOBUF_CUSTOM_VTABLE
  ::size_t ByteSizeLong() const final;
  ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const final;
  #endif  // PROTOBUF_CUSTOM_VTABLE
  int GetCachedSize() const {
    return _impl_._cached_size_.Get();
  }

  private:
  void SharedCtor(::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  static void SharedDtor(MessageLite& self);
  void InternalSwap(SegmentationModelMetadata_DiscreteMapping_Entry* PROTOBUF_NONNULL other);
 private:
  template <typename T>
  friend ::absl::string_view(::google::protobuf::internal::GetAnyMessageName)();
  static ::absl::string_view FullMessageName() { return "segmentation_platform.proto.SegmentationModelMetadata.DiscreteMapping.Entry"; }

  explicit SegmentationModelMetadata_DiscreteMapping_Entry(::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  SegmentationModelMetadata_DiscreteMapping_Entry(::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const SegmentationModelMetadata_DiscreteMapping_Entry& from);
  SegmentationModelMetadata_DiscreteMapping_Entry(
      ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, SegmentationModelMetadata_DiscreteMapping_Entry&& from) noexcept
      : SegmentationModelMetadata_DiscreteMapping_Entry(arena) {
    *this = ::std::move(from);
  }
  const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL GetClassData() const PROTOBUF_FINAL;
  static void* PROTOBUF_NONNULL PlacementNew_(
      const void* PROTOBUF_NONNULL, void* PROTOBUF_NONNULL mem,
      ::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  static constexpr auto InternalNewImpl_();

 public:
  static constexpr auto InternalGenerateClassData_(
      const MessageLite& prototype,
      const ::google::protobuf::internal::TcParseTableBase* PROTOBUF_NULLABLE tc_table = nullptr);

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

  // accessors -------------------------------------------------------
  enum : int {
    kRankFieldNumber = 2,
    kMinResultFieldNumber = 1,
  };
  // optional int64 rank = 2;
  bool has_rank()
      const;
  void clear_rank() ;
  ::int64_t rank() const;
  void set_rank(::int64_t value);

  private:
  ::int64_t _internal_rank() const;
  void _internal_set_rank(::int64_t value);

  public:
  // optional float min_result = 1;
  bool has_min_result()
      const;
  void clear_min_result() ;
  float min_result() const;
  void set_min_result(float value);

  private:
  float _internal_min_result() const;
  void _internal_set_min_result(float value);

  public:
  // @@protoc_insertion_point(class_scope:segmentation_platform.proto.SegmentationModelMetadata.DiscreteMapping.Entry)
 private:
  class _Internal;
  using ParseTableT_ =
      ::google::protobuf::internal::TcParseTable<1, 2,
                          0, 0,
                          2>;
  static constexpr ParseTableT_ InternalGenerateParseTable_(
      const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL class_data);
  friend class ::google::protobuf::internal::TcParser;
  #ifndef PROTOBUF_MESSAGE_GLOBALS
  static const ParseTableT_ _table_;
  #endif

  friend class ::google::protobuf::MessageLite;
  friend class ::google::protobuf::Arena;
  friend ::google::protobuf::internal::PrivateAccess;
  template <typename T>
  friend class ::google::protobuf::Arena::InternalHelper;
  using InternalArenaConstructable_ = void;
  using DestructorSkippable_ = void;
  struct Impl_ {
    inline explicit constexpr Impl_(::google::protobuf::internal::InternalVisibility visibility,
                                    ::google::protobuf::internal::ConstantInitialized) noexcept;
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const Impl_& from,
        const SegmentationModelMetadata_DiscreteMapping_Entry& from_msg);
    ::google::protobuf::internal::HasBits<1> _has_bits_;
    ::google::protobuf::internal::CachedSize _cached_size_;
    ::int64_t rank_;
    float min_result_;
    PROTOBUF_TSAN_DECLARE_MEMBER
  };
  union { Impl_ _impl_; };
  friend struct ::TableStruct_components_2fsegmentation_5fplatform_2fpublic_2fproto_2fmodel_5fmetadata_2eproto;
};
// -------------------------------------------------------------------

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

class  UMAOutput final : public ::google::protobuf::MessageLite
/* @@protoc_insertion_point(class_definition:segmentation_platform.proto.UMAOutput) */ {
 public:
  inline UMAOutput() : UMAOutput(nullptr) {}
  ~UMAOutput() PROTOBUF_FINAL;

#if defined(PROTOBUF_CUSTOM_VTABLE)
  void operator delete(UMAOutput* PROTOBUF_NONNULL msg, ::std::destroying_delete_t) {
    SharedDtor(*msg);
    ::google::protobuf::internal::SizedDelete(msg, sizeof(UMAOutput));
  }
#endif

  template <typename = void>
  explicit constexpr UMAOutput(::google::protobuf::internal::ConstantInitialized,
                           const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL
                               class_data);

  inline UMAOutput(const UMAOutput& from) : UMAOutput(nullptr, from) {}
  inline UMAOutput(UMAOutput&& from) noexcept : UMAOutput(nullptr, ::std::move(from)) {}
  inline UMAOutput& operator=(const UMAOutput& from) {
    CopyFrom(from);
    return *this;
  }
  inline UMAOutput& operator=(UMAOutput&& from) noexcept {
    if (this == &from) return *this;
    if (::google::protobuf::internal::CanMoveWithInternalSwap(GetArena(), from.GetArena())) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  inline const ::std::string& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString);
  }
  inline ::std::string* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::std::string>();
  }

  static const UMAOutput& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<UMAOutput>(&UMAOutput_globals_);
  }
  static constexpr int kIndexInFileMessages = 13;
  friend void swap(UMAOutput& a, UMAOutput& b) { a.Swap(&b); }
  PROTOBUF_NOINLINE void Swap(UMAOutput* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(UMAOutput* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  UMAOutput* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::MessageLite::DefaultConstruct<UMAOutput>(arena);
  }
  void CopyFrom(const UMAOutput& from);
  void MergeFrom(const UMAOutput& from) { UMAOutput::MergeImpl(*this, from); }

  private:
  static void MergeImpl(::google::protobuf::MessageLite& to_msg,
                        const ::google::protobuf::MessageLite& from_msg);

  public:
  bool IsInitialized() const {
    return true;
  }
  ABSL_ATTRIBUTE_REINITIALIZES void Clear() PROTOBUF_FINAL;
  #if defined(PROTOBUF_CUSTOM_VTABLE)
  private:
  static ::size_t ByteSizeLong(const ::google::protobuf::MessageLite& msg);
  static ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      const ::google::protobuf::MessageLite& msg, ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream);

  public:
  ::size_t ByteSizeLong() const { return ByteSizeLong(*this); }
  ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const {
    return _InternalSerialize(*this, target, stream);
  }
  #else   // PROTOBUF_CUSTOM_VTABLE
  ::size_t ByteSizeLong() const final;
  ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const final;
  #endif  // PROTOBUF_CUSTOM_VTABLE
  int GetCachedSize() const {
    return _impl_._cached_size_.Get();
  }

  private:
  void SharedCtor(::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  static void SharedDtor(MessageLite& self);
  void InternalSwap(UMAOutput* PROTOBUF_NONNULL other);
 private:
  template <typename T>
  friend ::absl::string_view(::google::protobuf::internal::GetAnyMessageName)();
  static ::absl::string_view FullMessageName() { return "segmentation_platform.proto.UMAOutput"; }

  explicit UMAOutput(::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  UMAOutput(::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const UMAOutput& from);
  UMAOutput(
      ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, UMAOutput&& from) noexcept
      : UMAOutput(arena) {
    *this = ::std::move(from);
  }
  const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL GetClassData() const PROTOBUF_FINAL;
  static void* PROTOBUF_NONNULL PlacementNew_(
      const void* PROTOBUF_NONNULL, void* PROTOBUF_NONNULL mem,
      ::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  static constexpr auto InternalNewImpl_();

 public:
  static constexpr auto InternalGenerateClassData_(
      const MessageLite& prototype,
      const ::google::protobuf::internal::TcParseTableBase* PROTOBUF_NULLABLE tc_table = nullptr);

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

  // accessors -------------------------------------------------------
  enum : int {
    kUmaFeatureFieldNumber = 1,
    kDurationFieldNumber = 2,
  };
  // optional .segmentation_platform.proto.UMAFeature uma_feature = 1;
  bool has_uma_feature()
      const;
  void clear_uma_feature() ;
  const ::segmentation_platform::proto::UMAFeature& uma_feature() const;
  ::segmentation_platform::proto::UMAFeature* PROTOBUF_NULLABLE release_uma_feature();
  ::segmentation_platform::proto::UMAFeature* PROTOBUF_NONNULL mutable_uma_feature();
  void set_allocated_uma_feature(::segmentation_platform::proto::UMAFeature* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_uma_feature(::segmentation_platform::proto::UMAFeature* PROTOBUF_NULLABLE value);
  ::segmentation_platform::proto::UMAFeature* PROTOBUF_NULLABLE unsafe_arena_release_uma_feature();

  private:
  const ::segmentation_platform::proto::UMAFeature& _internal_uma_feature() const;
  ::segmentation_platform::proto::UMAFeature* PROTOBUF_NONNULL _internal_mutable_uma_feature();

  public:
  // optional uint64 duration = 2;
  bool has_duration()
      const;
  void clear_duration() ;
  ::uint64_t duration() const;
  void set_duration(::uint64_t value);

  private:
  ::uint64_t _internal_duration() const;
  void _internal_set_duration(::uint64_t value);

  public:
  // @@protoc_insertion_point(class_scope:segmentation_platform.proto.UMAOutput)
 private:
  class _Internal;
  using ParseTableT_ =
      ::google::protobuf::internal::TcParseTable<1, 2,
                          1, 0,
                          2>;
  static constexpr ParseTableT_ InternalGenerateParseTable_(
      const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL class_data);
  friend class ::google::protobuf::internal::TcParser;
  #ifndef PROTOBUF_MESSAGE_GLOBALS
  static const ParseTableT_ _table_;
  #endif

  friend class ::google::protobuf::MessageLite;
  friend class ::google::protobuf::Arena;
  friend ::google::protobuf::internal::PrivateAccess;
  template <typename T>
  friend class ::google::protobuf::Arena::InternalHelper;
  using InternalArenaConstructable_ = void;
  using DestructorSkippable_ = void;
  struct Impl_ {
    inline explicit constexpr Impl_(::google::protobuf::internal::InternalVisibility visibility,
                                    ::google::protobuf::internal::ConstantInitialized) noexcept;
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const Impl_& from,
        const UMAOutput& from_msg);
    ::google::protobuf::internal::HasBits<1> _has_bits_;
    ::google::protobuf::internal::CachedSize _cached_size_;
    ::segmentation_platform::proto::UMAFeature* PROTOBUF_NULLABLE uma_feature_;
    ::uint64_t duration_;
    PROTOBUF_TSAN_DECLARE_MEMBER
  };
  union { Impl_ _impl_; };
  friend struct ::TableStruct_components_2fsegmentation_5fplatform_2fpublic_2fproto_2fmodel_5fmetadata_2eproto;
};
// -------------------------------------------------------------------

class  SignalFilterConfig final : public ::google::protobuf::MessageLite
/* @@protoc_insertion_point(class_definition:segmentation_platform.proto.SignalFilterConfig) */ {
 public:
  inline SignalFilterConfig() : SignalFilterConfig(nullptr) {}
  ~SignalFilterConfig() PROTOBUF_FINAL;

#if defined(PROTOBUF_CUSTOM_VTABLE)
  void operator delete(SignalFilterConfig* PROTOBUF_NONNULL msg, ::std::destroying_delete_t) {
    SharedDtor(*msg);
    ::google::protobuf::internal::SizedDelete(msg, sizeof(SignalFilterConfig));
  }
#endif

  template <typename = void>
  explicit constexpr SignalFilterConfig(::google::protobuf::internal::ConstantInitialized,
                           const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL
                               class_data);

  inline SignalFilterConfig(const SignalFilterConfig& from) : SignalFilterConfig(nullptr, from) {}
  inline SignalFilterConfig(SignalFilterConfig&& from) noexcept : SignalFilterConfig(nullptr, ::std::move(from)) {}
  inline SignalFilterConfig& operator=(const SignalFilterConfig& from) {
    CopyFrom(from);
    return *this;
  }
  inline SignalFilterConfig& operator=(SignalFilterConfig&& from) noexcept {
    if (this == &from) return *this;
    if (::google::protobuf::internal::CanMoveWithInternalSwap(GetArena(), from.GetArena())) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  inline const ::std::string& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString);
  }
  inline ::std::string* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::std::string>();
  }

  static const SignalFilterConfig& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<SignalFilterConfig>(&SignalFilterConfig_globals_);
  }
  static constexpr int kIndexInFileMessages = 5;
  friend void swap(SignalFilterConfig& a, SignalFilterConfig& b) { a.Swap(&b); }
  PROTOBUF_NOINLINE void Swap(SignalFilterConfig* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(SignalFilterConfig* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  SignalFilterConfig* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::MessageLite::DefaultConstruct<SignalFilterConfig>(arena);
  }
  void CopyFrom(const SignalFilterConfig& from);
  void MergeFrom(const SignalFilterConfig& from) { SignalFilterConfig::MergeImpl(*this, from); }

  private:
  static void MergeImpl(::google::protobuf::MessageLite& to_msg,
                        const ::google::protobuf::MessageLite& from_msg);

  public:
  bool IsInitialized() const {
    return true;
  }
  ABSL_ATTRIBUTE_REINITIALIZES void Clear() PROTOBUF_FINAL;
  #if defined(PROTOBUF_CUSTOM_VTABLE)
  private:
  static ::size_t ByteSizeLong(const ::google::protobuf::MessageLite& msg);
  static ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      const ::google::protobuf::MessageLite& msg, ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream);

  public:
  ::size_t ByteSizeLong() const { return ByteSizeLong(*this); }
  ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const {
    return _InternalSerialize(*this, target, stream);
  }
  #else   // PROTOBUF_CUSTOM_VTABLE
  ::size_t ByteSizeLong() const final;
  ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const final;
  #endif  // PROTOBUF_CUSTOM_VTABLE
  int GetCachedSize() const {
    return _impl_._cached_size_.Get();
  }

  private:
  void SharedCtor(::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  static void SharedDtor(MessageLite& self);
  void InternalSwap(SignalFilterConfig* PROTOBUF_NONNULL other);
 private:
  template <typename T>
  friend ::absl::string_view(::google::protobuf::internal::GetAnyMessageName)();
  static ::absl::string_view FullMessageName() { return "segmentation_platform.proto.SignalFilterConfig"; }

  explicit SignalFilterConfig(::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  SignalFilterConfig(::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const SignalFilterConfig& from);
  SignalFilterConfig(
      ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, SignalFilterConfig&& from) noexcept
      : SignalFilterConfig(arena) {
    *this = ::std::move(from);
  }
  const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL GetClassData() const PROTOBUF_FINAL;
  static void* PROTOBUF_NONNULL PlacementNew_(
      const void* PROTOBUF_NONNULL, void* PROTOBUF_NONNULL mem,
      ::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  static constexpr auto InternalNewImpl_();

 public:
  static constexpr auto InternalGenerateClassData_(
      const MessageLite& prototype,
      const ::google::protobuf::internal::TcParseTableBase* PROTOBUF_NULLABLE tc_table = nullptr);

  // nested types ----------------------------------------------------
  using UkmEvent = SignalFilterConfig_UkmEvent;

  // accessors -------------------------------------------------------
  enum : int {
    kUkmEventsFieldNumber = 1,
  };
  // repeated .segmentation_platform.proto.SignalFilterConfig.UkmEvent ukm_events = 1;
  int ukm_events_size()
      const;
  private:
  int _internal_ukm_events_size() const;

  public:
  void clear_ukm_events() ;
  const ::segmentation_platform::proto::SignalFilterConfig_UkmEvent& ukm_events(int index) const;
  ::segmentation_platform::proto::SignalFilterConfig_UkmEvent* PROTOBUF_NONNULL mutable_ukm_events(int index);
  ::segmentation_platform::proto::SignalFilterConfig_UkmEvent* PROTOBUF_NONNULL add_ukm_events();
  const ::google::protobuf::RepeatedPtrField<::segmentation_platform::proto::SignalFilterConfig_UkmEvent>&
  ukm_events() const;
  ::google::protobuf::RepeatedPtrField<::segmentation_platform::proto::SignalFilterConfig_UkmEvent>* PROTOBUF_NONNULL
  mutable_ukm_events();

  private:
  const ::google::protobuf::RepeatedPtrField<::segmentation_platform::proto::SignalFilterConfig_UkmEvent>& _internal_ukm_events() const;
  ::google::protobuf::RepeatedPtrField<::segmentation_platform::proto::SignalFilterConfig_UkmEvent>* PROTOBUF_NONNULL _internal_mutable_ukm_events();

  public:
  // @@protoc_insertion_point(class_scope:segmentation_platform.proto.SignalFilterConfig)
 private:
  class _Internal;
  using ParseTableT_ =
      ::google::protobuf::internal::TcParseTable<0, 1,
                          1, 0,
                          2>;
  static constexpr ParseTableT_ InternalGenerateParseTable_(
      const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL class_data);
  friend class ::google::protobuf::internal::TcParser;
  #ifndef PROTOBUF_MESSAGE_GLOBALS
  static const ParseTableT_ _table_;
  #endif

  friend class ::google::protobuf::MessageLite;
  friend class ::google::protobuf::Arena;
  friend ::google::protobuf::internal::PrivateAccess;
  template <typename T>
  friend class ::google::protobuf::Arena::InternalHelper;
  using InternalArenaConstructable_ = void;
  using DestructorSkippable_ = void;
  struct Impl_ {
    inline explicit constexpr Impl_(::google::protobuf::internal::InternalVisibility visibility,
                                    ::google::protobuf::internal::ConstantInitialized) noexcept;
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const Impl_& from,
        const SignalFilterConfig& from_msg);
    ::google::protobuf::internal::HasBits<1> _has_bits_;
    ::google::protobuf::internal::CachedSize _cached_size_;
    ::google::protobuf::RepeatedPtrField< ::segmentation_platform::proto::SignalFilterConfig_UkmEvent > ukm_events_;
    PROTOBUF_TSAN_DECLARE_MEMBER
  };
  union { Impl_ _impl_; };
  friend struct ::TableStruct_components_2fsegmentation_5fplatform_2fpublic_2fproto_2fmodel_5fmetadata_2eproto;
};
// -------------------------------------------------------------------

class  SegmentationModelMetadata_DiscreteMapping final : public ::google::protobuf::MessageLite
/* @@protoc_insertion_point(class_definition:segmentation_platform.proto.SegmentationModelMetadata.DiscreteMapping) */ {
 public:
  inline SegmentationModelMetadata_DiscreteMapping() : SegmentationModelMetadata_DiscreteMapping(nullptr) {}
  ~SegmentationModelMetadata_DiscreteMapping() PROTOBUF_FINAL;

#if defined(PROTOBUF_CUSTOM_VTABLE)
  void operator delete(SegmentationModelMetadata_DiscreteMapping* PROTOBUF_NONNULL msg, ::std::destroying_delete_t) {
    SharedDtor(*msg);
    ::google::protobuf::internal::SizedDelete(msg, sizeof(SegmentationModelMetadata_DiscreteMapping));
  }
#endif

  template <typename = void>
  explicit constexpr SegmentationModelMetadata_DiscreteMapping(::google::protobuf::internal::ConstantInitialized,
                           const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL
                               class_data);

  inline SegmentationModelMetadata_DiscreteMapping(const SegmentationModelMetadata_DiscreteMapping& from) : SegmentationModelMetadata_DiscreteMapping(nullptr, from) {}
  inline SegmentationModelMetadata_DiscreteMapping(SegmentationModelMetadata_DiscreteMapping&& from) noexcept : SegmentationModelMetadata_DiscreteMapping(nullptr, ::std::move(from)) {}
  inline SegmentationModelMetadata_DiscreteMapping& operator=(const SegmentationModelMetadata_DiscreteMapping& from) {
    CopyFrom(from);
    return *this;
  }
  inline SegmentationModelMetadata_DiscreteMapping& operator=(SegmentationModelMetadata_DiscreteMapping&& from) noexcept {
    if (this == &from) return *this;
    if (::google::protobuf::internal::CanMoveWithInternalSwap(GetArena(), from.GetArena())) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  inline const ::std::string& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString);
  }
  inline ::std::string* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::std::string>();
  }

  static const SegmentationModelMetadata_DiscreteMapping& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<SegmentationModelMetadata_DiscreteMapping>(&SegmentationModelMetadata_DiscreteMapping_globals_);
  }
  static constexpr int kIndexInFileMessages = 15;
  friend void swap(SegmentationModelMetadata_DiscreteMapping& a, SegmentationModelMetadata_DiscreteMapping& b) { a.Swap(&b); }
  PROTOBUF_NOINLINE void Swap(SegmentationModelMetadata_DiscreteMapping* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(SegmentationModelMetadata_DiscreteMapping* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  SegmentationModelMetadata_DiscreteMapping* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::MessageLite::DefaultConstruct<SegmentationModelMetadata_DiscreteMapping>(arena);
  }
  void CopyFrom(const SegmentationModelMetadata_DiscreteMapping& from);
  void MergeFrom(const SegmentationModelMetadata_DiscreteMapping& from) { SegmentationModelMetadata_DiscreteMapping::MergeImpl(*this, from); }

  private:
  static void MergeImpl(::google::protobuf::MessageLite& to_msg,
                        const ::google::protobuf::MessageLite& from_msg);

  public:
  bool IsInitialized() const {
    return true;
  }
  ABSL_ATTRIBUTE_REINITIALIZES void Clear() PROTOBUF_FINAL;
  #if defined(PROTOBUF_CUSTOM_VTABLE)
  private:
  static ::size_t ByteSizeLong(const ::google::protobuf::MessageLite& msg);
  static ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      const ::google::protobuf::MessageLite& msg, ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream);

  public:
  ::size_t ByteSizeLong() const { return ByteSizeLong(*this); }
  ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const {
    return _InternalSerialize(*this, target, stream);
  }
  #else   // PROTOBUF_CUSTOM_VTABLE
  ::size_t ByteSizeLong() const final;
  ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const final;
  #endif  // PROTOBUF_CUSTOM_VTABLE
  int GetCachedSize() const {
    return _impl_._cached_size_.Get();
  }

  private:
  void SharedCtor(::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  static void SharedDtor(MessageLite& self);
  void InternalSwap(SegmentationModelMetadata_DiscreteMapping* PROTOBUF_NONNULL other);
 private:
  template <typename T>
  friend ::absl::string_view(::google::protobuf::internal::GetAnyMessageName)();
  static ::absl::string_view FullMessageName() { return "segmentation_platform.proto.SegmentationModelMetadata.DiscreteMapping"; }

  explicit SegmentationModelMetadata_DiscreteMapping(::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  SegmentationModelMetadata_DiscreteMapping(::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const SegmentationModelMetadata_DiscreteMapping& from);
  SegmentationModelMetadata_DiscreteMapping(
      ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, SegmentationModelMetadata_DiscreteMapping&& from) noexcept
      : SegmentationModelMetadata_DiscreteMapping(arena) {
    *this = ::std::move(from);
  }
  const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL GetClassData() const PROTOBUF_FINAL;
  static void* PROTOBUF_NONNULL PlacementNew_(
      const void* PROTOBUF_NONNULL, void* PROTOBUF_NONNULL mem,
      ::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  static constexpr auto InternalNewImpl_();

 public:
  static constexpr auto InternalGenerateClassData_(
      const MessageLite& prototype,
      const ::google::protobuf::internal::TcParseTableBase* PROTOBUF_NULLABLE tc_table = nullptr);

  // nested types ----------------------------------------------------
  using Entry = SegmentationModelMetadata_DiscreteMapping_Entry;

  // accessors -------------------------------------------------------
  enum : int {
    kEntriesFieldNumber = 1,
  };
  // repeated .segmentation_platform.proto.SegmentationModelMetadata.DiscreteMapping.Entry entries = 1;
  int entries_size()
      const;
  private:
  int _internal_entries_size() const;

  public:
  void clear_entries() ;
  const ::segmentation_platform::proto::SegmentationModelMetadata_DiscreteMapping_Entry& entries(int index) const;
  ::segmentation_platform::proto::SegmentationModelMetadata_DiscreteMapping_Entry* PROTOBUF_NONNULL mutable_entries(int index);
  ::segmentation_platform::proto::SegmentationModelMetadata_DiscreteMapping_Entry* PROTOBUF_NONNULL add_entries();
  const ::google::protobuf::RepeatedPtrField<::segmentation_platform::proto::SegmentationModelMetadata_DiscreteMapping_Entry>&
  entries() const;
  ::google::protobuf::RepeatedPtrField<::segmentation_platform::proto::SegmentationModelMetadata_DiscreteMapping_Entry>* PROTOBUF_NONNULL
  mutable_entries();

  private:
  const ::google::protobuf::RepeatedPtrField<::segmentation_platform::proto::SegmentationModelMetadata_DiscreteMapping_Entry>& _internal_entries() const;
  ::google::protobuf::RepeatedPtrField<::segmentation_platform::proto::SegmentationModelMetadata_DiscreteMapping_Entry>* PROTOBUF_NONNULL _internal_mutable_entries();

  public:
  // @@protoc_insertion_point(class_scope:segmentation_platform.proto.SegmentationModelMetadata.DiscreteMapping)
 private:
  class _Internal;
  using ParseTableT_ =
      ::google::protobuf::internal::TcParseTable<0, 1,
                          1, 0,
                          2>;
  static constexpr ParseTableT_ InternalGenerateParseTable_(
      const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL class_data);
  friend class ::google::protobuf::internal::TcParser;
  #ifndef PROTOBUF_MESSAGE_GLOBALS
  static const ParseTableT_ _table_;
  #endif

  friend class ::google::protobuf::MessageLite;
  friend class ::google::protobuf::Arena;
  friend ::google::protobuf::internal::PrivateAccess;
  template <typename T>
  friend class ::google::protobuf::Arena::InternalHelper;
  using InternalArenaConstructable_ = void;
  using DestructorSkippable_ = void;
  struct Impl_ {
    inline explicit constexpr Impl_(::google::protobuf::internal::InternalVisibility visibility,
                                    ::google::protobuf::internal::ConstantInitialized) noexcept;
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const Impl_& from,
        const SegmentationModelMetadata_DiscreteMapping& from_msg);
    ::google::protobuf::internal::HasBits<1> _has_bits_;
    ::google::protobuf::internal::CachedSize _cached_size_;
    ::google::protobuf::RepeatedPtrField< ::segmentation_platform::proto::SegmentationModelMetadata_DiscreteMapping_Entry > entries_;
    PROTOBUF_TSAN_DECLARE_MEMBER
  };
  union { Impl_ _impl_; };
  friend struct ::TableStruct_components_2fsegmentation_5fplatform_2fpublic_2fproto_2fmodel_5fmetadata_2eproto;
};
// -------------------------------------------------------------------

class  CustomInput final : public ::google::protobuf::MessageLite
/* @@protoc_insertion_point(class_definition:segmentation_platform.proto.CustomInput) */ {
 public:
  inline CustomInput() : CustomInput(nullptr) {}
  ~CustomInput() PROTOBUF_FINAL;

#if defined(PROTOBUF_CUSTOM_VTABLE)
  void operator delete(CustomInput* PROTOBUF_NONNULL msg, ::std::destroying_delete_t) {
    SharedDtor(*msg);
    ::google::protobuf::internal::SizedDelete(msg, sizeof(CustomInput));
  }
#endif

  template <typename = void>
  explicit constexpr CustomInput(::google::protobuf::internal::ConstantInitialized,
                           const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL
                               class_data);

  inline CustomInput(const CustomInput& from) : CustomInput(nullptr, from) {}
  inline CustomInput(CustomInput&& from) noexcept : CustomInput(nullptr, ::std::move(from)) {}
  inline CustomInput& operator=(const CustomInput& from) {
    CopyFrom(from);
    return *this;
  }
  inline CustomInput& operator=(CustomInput&& from) noexcept {
    if (this == &from) return *this;
    if (::google::protobuf::internal::CanMoveWithInternalSwap(GetArena(), from.GetArena())) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  inline const ::std::string& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString);
  }
  inline ::std::string* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::std::string>();
  }

  static const CustomInput& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<CustomInput>(&CustomInput_globals_);
  }
  static constexpr int kIndexInFileMessages = 3;
  friend void swap(CustomInput& a, CustomInput& b) { a.Swap(&b); }
  PROTOBUF_NOINLINE void Swap(CustomInput* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(CustomInput* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  CustomInput* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::MessageLite::DefaultConstruct<CustomInput>(arena);
  }
  void CopyFrom(const CustomInput& from);
  void MergeFrom(const CustomInput& from) { CustomInput::MergeImpl(*this, from); }

  private:
  static void MergeImpl(::google::protobuf::MessageLite& to_msg,
                        const ::google::protobuf::MessageLite& from_msg);

  public:
  bool IsInitialized() const {
    return true;
  }
  ABSL_ATTRIBUTE_REINITIALIZES void Clear() PROTOBUF_FINAL;
  #if defined(PROTOBUF_CUSTOM_VTABLE)
  private:
  static ::size_t ByteSizeLong(const ::google::protobuf::MessageLite& msg);
  static ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      const ::google::protobuf::MessageLite& msg, ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream);

  public:
  ::size_t ByteSizeLong() const { return ByteSizeLong(*this); }
  ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const {
    return _InternalSerialize(*this, target, stream);
  }
  #else   // PROTOBUF_CUSTOM_VTABLE
  ::size_t ByteSizeLong() const final;
  ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const final;
  #endif  // PROTOBUF_CUSTOM_VTABLE
  int GetCachedSize() const {
    return _impl_._cached_size_.Get();
  }

  private:
  void SharedCtor(::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  static void SharedDtor(MessageLite& self);
  void InternalSwap(CustomInput* PROTOBUF_NONNULL other);
 private:
  template <typename T>
  friend ::absl::string_view(::google::protobuf::internal::GetAnyMessageName)();
  static ::absl::string_view FullMessageName() { return "segmentation_platform.proto.CustomInput"; }

  explicit CustomInput(::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  CustomInput(::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const CustomInput& from);
  CustomInput(
      ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, CustomInput&& from) noexcept
      : CustomInput(arena) {
    *this = ::std::move(from);
  }
  const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL GetClassData() const PROTOBUF_FINAL;
  static void* PROTOBUF_NONNULL PlacementNew_(
      const void* PROTOBUF_NONNULL, void* PROTOBUF_NONNULL mem,
      ::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  static constexpr auto InternalNewImpl_();

 public:
  static constexpr auto InternalGenerateClassData_(
      const MessageLite& prototype,
      const ::google::protobuf::internal::TcParseTableBase* PROTOBUF_NULLABLE tc_table = nullptr);

  // nested types ----------------------------------------------------
  using FillPolicy = CustomInput_FillPolicy;
  static constexpr FillPolicy UNKNOWN_FILL_POLICY = CustomInput_FillPolicy_UNKNOWN_FILL_POLICY;
  static constexpr FillPolicy FILL_PREDICTION_TIME = CustomInput_FillPolicy_FILL_PREDICTION_TIME;
  static constexpr FillPolicy TIME_RANGE_BEFORE_PREDICTION = CustomInput_FillPolicy_TIME_RANGE_BEFORE_PREDICTION;
  static constexpr FillPolicy PRICE_TRACKING_HINTS = CustomInput_FillPolicy_PRICE_TRACKING_HINTS;
  static constexpr FillPolicy FILL_FROM_INPUT_CONTEXT = CustomInput_FillPolicy_FILL_FROM_INPUT_CONTEXT;
  static constexpr FillPolicy FILL_SYNC_DEVICE_INFO = CustomInput_FillPolicy_FILL_SYNC_DEVICE_INFO;
  static constexpr FillPolicy FILL_DEVICE_RAM_MB = CustomInput_FillPolicy_FILL_DEVICE_RAM_MB;
  static constexpr FillPolicy FILL_DEVICE_OS_VERSION_NUMBER = CustomInput_FillPolicy_FILL_DEVICE_OS_VERSION_NUMBER;
  static constexpr FillPolicy FILL_DEVICE_PPI = CustomInput_FillPolicy_FILL_DEVICE_PPI;
  static constexpr FillPolicy FILL_TAB_METRICS = CustomInput_FillPolicy_FILL_TAB_METRICS;
  static constexpr FillPolicy FILL_RANDOM = CustomInput_FillPolicy_FILL_RANDOM;
  static constexpr FillPolicy FILL_FROM_SHOPPING_SERVICE = CustomInput_FillPolicy_FILL_FROM_SHOPPING_SERVICE;
  static constexpr FillPolicy FILL_CLIENT_AGE_DAYS = CustomInput_FillPolicy_FILL_CLIENT_AGE_DAYS;
  static inline bool FillPolicy_IsValid(int value) {
    return CustomInput_FillPolicy_IsValid(value);
  }
  static constexpr FillPolicy FillPolicy_MIN = CustomInput_FillPolicy_FillPolicy_MIN;
  static constexpr FillPolicy FillPolicy_MAX = CustomInput_FillPolicy_FillPolicy_MAX;
  static constexpr int FillPolicy_ARRAYSIZE = CustomInput_FillPolicy_FillPolicy_ARRAYSIZE;
  template <typename T>
  static inline const ::std::string& FillPolicy_Name(T value) {
    return CustomInput_FillPolicy_Name(value);
  }
  static inline bool FillPolicy_Parse(
      ::absl::string_view name, FillPolicy* PROTOBUF_NONNULL value) {
    return CustomInput_FillPolicy_Parse(name, value);
  }

  // accessors -------------------------------------------------------
  enum : int {
    kDefaultValueFieldNumber = 3,
    kNameFieldNumber = 5,
    kTensorLengthFieldNumber = 1,
    kFillPolicyFieldNumber = 2,
    kAdditionalArgsFieldNumber = 4,
  };
  // repeated float default_value = 3;
  int default_value_size()
      const;
  private:
  int _internal_default_value_size() const;

  public:
  void clear_default_value() ;
  float default_value(int index) const;
  void set_default_value(int index, float value);
  void add_default_value(float value);
  const ::google::protobuf::RepeatedField<float>& default_value()
      const;
  ::google::protobuf::RepeatedField<float>* PROTOBUF_NONNULL mutable_default_value();

  private:
  const ::google::protobuf::RepeatedField<float>& _internal_default_value() const;
  ::google::protobuf::RepeatedField<float>* PROTOBUF_NONNULL _internal_mutable_default_value();

  public:
  // optional string name = 5;
  bool has_name()
      const;
  void clear_name() ;
  const ::std::string& name() const;
  template <typename Arg_ = const ::std::string&, typename... Args_>
  void set_name(Arg_&& arg, Args_... args);
  ::std::string* PROTOBUF_NONNULL mutable_name();
  ::std::string* PROTOBUF_NULLABLE release_name();
  void set_allocated_name(::std::string* PROTOBUF_NULLABLE value);

  private:
  const ::std::string& _internal_name() const;
  PROTOBUF_ALWAYS_INLINE void _internal_set_name(const ::std::string& value);
  ::std::string* PROTOBUF_NONNULL _internal_mutable_name();

  public:
  // optional int32 tensor_length = 1;
  bool has_tensor_length()
      const;
  void clear_tensor_length() ;
  ::int32_t tensor_length() const;
  void set_tensor_length(::int32_t value);

  private:
  ::int32_t _internal_tensor_length() const;
  void _internal_set_tensor_length(::int32_t value);

  public:
  // optional .segmentation_platform.proto.CustomInput.FillPolicy fill_policy = 2;
  bool has_fill_policy()
      const;
  void clear_fill_policy() ;
  ::segmentation_platform::proto::CustomInput_FillPolicy fill_policy() const;
  void set_fill_policy(::segmentation_platform::proto::CustomInput_FillPolicy value);

  private:
  ::segmentation_platform::proto::CustomInput_FillPolicy _internal_fill_policy() const;
  void _internal_set_fill_policy(::segmentation_platform::proto::CustomInput_FillPolicy value);

  public:
  // map<string, string> additional_args = 4;
  int additional_args_size()
      const;
  private:
  int _internal_additional_args_size() const;

  public:
  void clear_additional_args() ;
  const ::google::protobuf::Map<::std::string, ::std::string>& additional_args() const;
  ::google::protobuf::Map<::std::string, ::std::string>* PROTOBUF_NONNULL mutable_additional_args();

  private:
  const ::google::protobuf::Map<::std::string, ::std::string>& _internal_additional_args() const;
  ::google::protobuf::Map<::std::string, ::std::string>* PROTOBUF_NONNULL _internal_mutable_additional_args();

  public:
  // @@protoc_insertion_point(class_scope:segmentation_platform.proto.CustomInput)
 private:
  class _Internal;
  using ParseTableT_ =
      ::google::protobuf::internal::TcParseTable<3, 5,
                          2, 0,
                          2>;
  static constexpr ParseTableT_ InternalGenerateParseTable_(
      const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL class_data);
  friend class ::google::protobuf::internal::TcParser;
  #ifndef PROTOBUF_MESSAGE_GLOBALS
  static const ParseTableT_ _table_;
  #endif

  friend class ::google::protobuf::MessageLite;
  friend class ::google::protobuf::Arena;
  friend ::google::protobuf::internal::PrivateAccess;
  template <typename T>
  friend class ::google::protobuf::Arena::InternalHelper;
  using InternalArenaConstructable_ = void;
  using DestructorSkippable_ = void;
  struct Impl_ {
    inline explicit constexpr Impl_(::google::protobuf::internal::InternalVisibility visibility,
                                    ::google::protobuf::internal::ConstantInitialized) noexcept;
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const Impl_& from,
        const CustomInput& from_msg);
    ::google::protobuf::internal::HasBits<1> _has_bits_;
    ::google::protobuf::internal::CachedSize _cached_size_;
    ::google::protobuf::RepeatedField<float> default_value_;
    ::google::protobuf::internal::ArenaStringPtr name_;
    ::int32_t tensor_length_;
    int fill_policy_;
    ::google::protobuf::internal::MapFieldLite<::std::string, ::std::string> additional_args_;
    PROTOBUF_TSAN_DECLARE_MEMBER
  };
  union { Impl_ _impl_; };
  friend struct ::TableStruct_components_2fsegmentation_5fplatform_2fpublic_2fproto_2fmodel_5fmetadata_2eproto;
};
// -------------------------------------------------------------------

class  TrainingOutputs_TriggerConfig_ObservationTrigger final : public ::google::protobuf::MessageLite
/* @@protoc_insertion_point(class_definition:segmentation_platform.proto.TrainingOutputs.TriggerConfig.ObservationTrigger) */ {
 public:
  inline TrainingOutputs_TriggerConfig_ObservationTrigger() : TrainingOutputs_TriggerConfig_ObservationTrigger(nullptr) {}
  ~TrainingOutputs_TriggerConfig_ObservationTrigger() PROTOBUF_FINAL;

#if defined(PROTOBUF_CUSTOM_VTABLE)
  void operator delete(TrainingOutputs_TriggerConfig_ObservationTrigger* PROTOBUF_NONNULL msg, ::std::destroying_delete_t) {
    SharedDtor(*msg);
    ::google::protobuf::internal::SizedDelete(msg, sizeof(TrainingOutputs_TriggerConfig_ObservationTrigger));
  }
#endif

  template <typename = void>
  explicit constexpr TrainingOutputs_TriggerConfig_ObservationTrigger(::google::protobuf::internal::ConstantInitialized,
                           const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL
                               class_data);

  inline TrainingOutputs_TriggerConfig_ObservationTrigger(const TrainingOutputs_TriggerConfig_ObservationTrigger& from) : TrainingOutputs_TriggerConfig_ObservationTrigger(nullptr, from) {}
  inline TrainingOutputs_TriggerConfig_ObservationTrigger(TrainingOutputs_TriggerConfig_ObservationTrigger&& from) noexcept : TrainingOutputs_TriggerConfig_ObservationTrigger(nullptr, ::std::move(from)) {}
  inline TrainingOutputs_TriggerConfig_ObservationTrigger& operator=(const TrainingOutputs_TriggerConfig_ObservationTrigger& from) {
    CopyFrom(from);
    return *this;
  }
  inline TrainingOutputs_TriggerConfig_ObservationTrigger& operator=(TrainingOutputs_TriggerConfig_ObservationTrigger&& from) noexcept {
    if (this == &from) return *this;
    if (::google::protobuf::internal::CanMoveWithInternalSwap(GetArena(), from.GetArena())) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  inline const ::std::string& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString);
  }
  inline ::std::string* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::std::string>();
  }

  static const TrainingOutputs_TriggerConfig_ObservationTrigger& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<TrainingOutputs_TriggerConfig_ObservationTrigger>(&TrainingOutputs_TriggerConfig_ObservationTrigger_globals_);
  }
  enum TriggerCase {
    kDelaySec = 1,
    kUmaTrigger = 2,
    TRIGGER_NOT_SET = 0,
  };
  static constexpr int kIndexInFileMessages = 9;
  friend void swap(TrainingOutputs_TriggerConfig_ObservationTrigger& a, TrainingOutputs_TriggerConfig_ObservationTrigger& b) { a.Swap(&b); }
  PROTOBUF_NOINLINE void Swap(TrainingOutputs_TriggerConfig_ObservationTrigger* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(TrainingOutputs_TriggerConfig_ObservationTrigger* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  TrainingOutputs_TriggerConfig_ObservationTrigger* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::MessageLite::DefaultConstruct<TrainingOutputs_TriggerConfig_ObservationTrigger>(arena);
  }
  void CopyFrom(const TrainingOutputs_TriggerConfig_ObservationTrigger& from);
  void MergeFrom(const TrainingOutputs_TriggerConfig_ObservationTrigger& from) { TrainingOutputs_TriggerConfig_ObservationTrigger::MergeImpl(*this, from); }

  private:
  static void MergeImpl(::google::protobuf::MessageLite& to_msg,
                        const ::google::protobuf::MessageLite& from_msg);

  public:
  bool IsInitialized() const {
    return true;
  }
  ABSL_ATTRIBUTE_REINITIALIZES void Clear() PROTOBUF_FINAL;
  #if defined(PROTOBUF_CUSTOM_VTABLE)
  private:
  static ::size_t ByteSizeLong(const ::google::protobuf::MessageLite& msg);
  static ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      const ::google::protobuf::MessageLite& msg, ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream);

  public:
  ::size_t ByteSizeLong() const { return ByteSizeLong(*this); }
  ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const {
    return _InternalSerialize(*this, target, stream);
  }
  #else   // PROTOBUF_CUSTOM_VTABLE
  ::size_t ByteSizeLong() const final;
  ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const final;
  #endif  // PROTOBUF_CUSTOM_VTABLE
  int GetCachedSize() const {
    return _impl_._cached_size_.Get();
  }

  private:
  void SharedCtor(::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  static void SharedDtor(MessageLite& self);
  void InternalSwap(TrainingOutputs_TriggerConfig_ObservationTrigger* PROTOBUF_NONNULL other);
 private:
  template <typename T>
  friend ::absl::string_view(::google::protobuf::internal::GetAnyMessageName)();
  static ::absl::string_view FullMessageName() { return "segmentation_platform.proto.TrainingOutputs.TriggerConfig.ObservationTrigger"; }

  explicit TrainingOutputs_TriggerConfig_ObservationTrigger(::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  TrainingOutputs_TriggerConfig_ObservationTrigger(::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const TrainingOutputs_TriggerConfig_ObservationTrigger& from);
  TrainingOutputs_TriggerConfig_ObservationTrigger(
      ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, TrainingOutputs_TriggerConfig_ObservationTrigger&& from) noexcept
      : TrainingOutputs_TriggerConfig_ObservationTrigger(arena) {
    *this = ::std::move(from);
  }
  const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL GetClassData() const PROTOBUF_FINAL;
  static void* PROTOBUF_NONNULL PlacementNew_(
      const void* PROTOBUF_NONNULL, void* PROTOBUF_NONNULL mem,
      ::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  static constexpr auto InternalNewImpl_();

 public:
  static constexpr auto InternalGenerateClassData_(
      const MessageLite& prototype,
      const ::google::protobuf::internal::TcParseTableBase* PROTOBUF_NULLABLE tc_table = nullptr);

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

  // accessors -------------------------------------------------------
  enum : int {
    kDelaySecFieldNumber = 1,
    kUmaTriggerFieldNumber = 2,
  };
  // uint64 delay_sec = 1;
  bool has_delay_sec()
      const;
  void clear_delay_sec() ;
  ::uint64_t delay_sec() const;
  void set_delay_sec(::uint64_t value);

  private:
  ::uint64_t _internal_delay_sec() const;
  void _internal_set_delay_sec(::uint64_t value);

  public:
  // .segmentation_platform.proto.UMAOutput uma_trigger = 2;
  bool has_uma_trigger()
      const;
  private:
  bool _internal_has_uma_trigger() const;

  public:
  void clear_uma_trigger() ;
  const ::segmentation_platform::proto::UMAOutput& uma_trigger() const;
  ::segmentation_platform::proto::UMAOutput* PROTOBUF_NULLABLE release_uma_trigger();
  ::segmentation_platform::proto::UMAOutput* PROTOBUF_NONNULL mutable_uma_trigger();
  void set_allocated_uma_trigger(::segmentation_platform::proto::UMAOutput* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_uma_trigger(::segmentation_platform::proto::UMAOutput* PROTOBUF_NULLABLE value);
  ::segmentation_platform::proto::UMAOutput* PROTOBUF_NULLABLE unsafe_arena_release_uma_trigger();

  private:
  const ::segmentation_platform::proto::UMAOutput& _internal_uma_trigger() const;
  ::segmentation_platform::proto::UMAOutput* PROTOBUF_NONNULL _internal_mutable_uma_trigger();

  public:
  void clear_trigger();
  TriggerCase trigger_case() const;
  // @@protoc_insertion_point(class_scope:segmentation_platform.proto.TrainingOutputs.TriggerConfig.ObservationTrigger)
 private:
  class _Internal;
  void set_has_delay_sec();
  void set_has_uma_trigger();
  inline bool has_trigger() const;
  inline void clear_has_trigger();
  using ParseTableT_ =
      ::google::protobuf::internal::TcParseTable<0, 2,
                          1, 0,
                          2>;
  static constexpr ParseTableT_ InternalGenerateParseTable_(
      const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL class_data);
  friend class ::google::protobuf::internal::TcParser;
  #ifndef PROTOBUF_MESSAGE_GLOBALS
  static const ParseTableT_ _table_;
  #endif

  friend class ::google::protobuf::MessageLite;
  friend class ::google::protobuf::Arena;
  friend ::google::protobuf::internal::PrivateAccess;
  template <typename T>
  friend class ::google::protobuf::Arena::InternalHelper;
  using InternalArenaConstructable_ = void;
  using DestructorSkippable_ = void;
  struct Impl_ {
    inline explicit constexpr Impl_(::google::protobuf::internal::InternalVisibility visibility,
                                    ::google::protobuf::internal::ConstantInitialized) noexcept;
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const Impl_& from,
        const TrainingOutputs_TriggerConfig_ObservationTrigger& from_msg);
    union TriggerUnion {
      constexpr TriggerUnion() : _constinit_{} {}
      ::google::protobuf::internal::ConstantInitialized _constinit_;
      ::uint64_t delay_sec_;
      ::segmentation_platform::proto::UMAOutput* PROTOBUF_NULLABLE uma_trigger_;
    } trigger_;
    ::google::protobuf::internal::CachedSize _cached_size_;
    ::uint32_t _oneof_case_[1];
    PROTOBUF_TSAN_DECLARE_MEMBER
  };
  union { Impl_ _impl_; };
  friend struct ::TableStruct_components_2fsegmentation_5fplatform_2fpublic_2fproto_2fmodel_5fmetadata_2eproto;
};
// -------------------------------------------------------------------

class  TrainingOutput final : public ::google::protobuf::MessageLite
/* @@protoc_insertion_point(class_definition:segmentation_platform.proto.TrainingOutput) */ {
 public:
  inline TrainingOutput() : TrainingOutput(nullptr) {}
  ~TrainingOutput() PROTOBUF_FINAL;

#if defined(PROTOBUF_CUSTOM_VTABLE)
  void operator delete(TrainingOutput* PROTOBUF_NONNULL msg, ::std::destroying_delete_t) {
    SharedDtor(*msg);
    ::google::protobuf::internal::SizedDelete(msg, sizeof(TrainingOutput));
  }
#endif

  template <typename = void>
  explicit constexpr TrainingOutput(::google::protobuf::internal::ConstantInitialized,
                           const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL
                               class_data);

  inline TrainingOutput(const TrainingOutput& from) : TrainingOutput(nullptr, from) {}
  inline TrainingOutput(TrainingOutput&& from) noexcept : TrainingOutput(nullptr, ::std::move(from)) {}
  inline TrainingOutput& operator=(const TrainingOutput& from) {
    CopyFrom(from);
    return *this;
  }
  inline TrainingOutput& operator=(TrainingOutput&& from) noexcept {
    if (this == &from) return *this;
    if (::google::protobuf::internal::CanMoveWithInternalSwap(GetArena(), from.GetArena())) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  inline const ::std::string& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString);
  }
  inline ::std::string* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::std::string>();
  }

  static const TrainingOutput& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<TrainingOutput>(&TrainingOutput_globals_);
  }
  enum OutputCase {
    kUmaOutput = 1,
    OUTPUT_NOT_SET = 0,
  };
  static constexpr int kIndexInFileMessages = 12;
  friend void swap(TrainingOutput& a, TrainingOutput& b) { a.Swap(&b); }
  PROTOBUF_NOINLINE void Swap(TrainingOutput* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(TrainingOutput* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  TrainingOutput* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::MessageLite::DefaultConstruct<TrainingOutput>(arena);
  }
  void CopyFrom(const TrainingOutput& from);
  void MergeFrom(const TrainingOutput& from) { TrainingOutput::MergeImpl(*this, from); }

  private:
  static void MergeImpl(::google::protobuf::MessageLite& to_msg,
                        const ::google::protobuf::MessageLite& from_msg);

  public:
  bool IsInitialized() const {
    return true;
  }
  ABSL_ATTRIBUTE_REINITIALIZES void Clear() PROTOBUF_FINAL;
  #if defined(PROTOBUF_CUSTOM_VTABLE)
  private:
  static ::size_t ByteSizeLong(const ::google::protobuf::MessageLite& msg);
  static ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      const ::google::protobuf::MessageLite& msg, ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream);

  public:
  ::size_t ByteSizeLong() const { return ByteSizeLong(*this); }
  ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const {
    return _InternalSerialize(*this, target, stream);
  }
  #else   // PROTOBUF_CUSTOM_VTABLE
  ::size_t ByteSizeLong() const final;
  ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const final;
  #endif  // PROTOBUF_CUSTOM_VTABLE
  int GetCachedSize() const {
    return _impl_._cached_size_.Get();
  }

  private:
  void SharedCtor(::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  static void SharedDtor(MessageLite& self);
  void InternalSwap(TrainingOutput* PROTOBUF_NONNULL other);
 private:
  template <typename T>
  friend ::absl::string_view(::google::protobuf::internal::GetAnyMessageName)();
  static ::absl::string_view FullMessageName() { return "segmentation_platform.proto.TrainingOutput"; }

  explicit TrainingOutput(::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  TrainingOutput(::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const TrainingOutput& from);
  TrainingOutput(
      ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, TrainingOutput&& from) noexcept
      : TrainingOutput(arena) {
    *this = ::std::move(from);
  }
  const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL GetClassData() const PROTOBUF_FINAL;
  static void* PROTOBUF_NONNULL PlacementNew_(
      const void* PROTOBUF_NONNULL, void* PROTOBUF_NONNULL mem,
      ::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  static constexpr auto InternalNewImpl_();

 public:
  static constexpr auto InternalGenerateClassData_(
      const MessageLite& prototype,
      const ::google::protobuf::internal::TcParseTableBase* PROTOBUF_NULLABLE tc_table = nullptr);

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

  // accessors -------------------------------------------------------
  enum : int {
    kUmaOutputFieldNumber = 1,
  };
  // .segmentation_platform.proto.UMAOutput uma_output = 1;
  bool has_uma_output()
      const;
  private:
  bool _internal_has_uma_output() const;

  public:
  void clear_uma_output() ;
  const ::segmentation_platform::proto::UMAOutput& uma_output() const;
  ::segmentation_platform::proto::UMAOutput* PROTOBUF_NULLABLE release_uma_output();
  ::segmentation_platform::proto::UMAOutput* PROTOBUF_NONNULL mutable_uma_output();
  void set_allocated_uma_output(::segmentation_platform::proto::UMAOutput* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_uma_output(::segmentation_platform::proto::UMAOutput* PROTOBUF_NULLABLE value);
  ::segmentation_platform::proto::UMAOutput* PROTOBUF_NULLABLE unsafe_arena_release_uma_output();

  private:
  const ::segmentation_platform::proto::UMAOutput& _internal_uma_output() const;
  ::segmentation_platform::proto::UMAOutput* PROTOBUF_NONNULL _internal_mutable_uma_output();

  public:
  void clear_output();
  OutputCase output_case() const;
  // @@protoc_insertion_point(class_scope:segmentation_platform.proto.TrainingOutput)
 private:
  class _Internal;
  void set_has_uma_output();
  inline bool has_output() const;
  inline void clear_has_output();
  using ParseTableT_ =
      ::google::protobuf::internal::TcParseTable<0, 1,
                          1, 0,
                          2>;
  static constexpr ParseTableT_ InternalGenerateParseTable_(
      const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL class_data);
  friend class ::google::protobuf::internal::TcParser;
  #ifndef PROTOBUF_MESSAGE_GLOBALS
  static const ParseTableT_ _table_;
  #endif

  friend class ::google::protobuf::MessageLite;
  friend class ::google::protobuf::Arena;
  friend ::google::protobuf::internal::PrivateAccess;
  template <typename T>
  friend class ::google::protobuf::Arena::InternalHelper;
  using InternalArenaConstructable_ = void;
  using DestructorSkippable_ = void;
  struct Impl_ {
    inline explicit constexpr Impl_(::google::protobuf::internal::InternalVisibility visibility,
                                    ::google::protobuf::internal::ConstantInitialized) noexcept;
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const Impl_& from,
        const TrainingOutput& from_msg);
    union OutputUnion {
      constexpr OutputUnion() : _constinit_{} {}
      ::google::protobuf::internal::ConstantInitialized _constinit_;
      ::segmentation_platform::proto::UMAOutput* PROTOBUF_NULLABLE uma_output_;
    } output_;
    ::google::protobuf::internal::CachedSize _cached_size_;
    ::uint32_t _oneof_case_[1];
    PROTOBUF_TSAN_DECLARE_MEMBER
  };
  union { Impl_ _impl_; };
  friend struct ::TableStruct_components_2fsegmentation_5fplatform_2fpublic_2fproto_2fmodel_5fmetadata_2eproto;
};
// -------------------------------------------------------------------

class  SqlFeature_BindValue final : public ::google::protobuf::MessageLite
/* @@protoc_insertion_point(class_definition:segmentation_platform.proto.SqlFeature.BindValue) */ {
 public:
  inline SqlFeature_BindValue() : SqlFeature_BindValue(nullptr) {}
  ~SqlFeature_BindValue() PROTOBUF_FINAL;

#if defined(PROTOBUF_CUSTOM_VTABLE)
  void operator delete(SqlFeature_BindValue* PROTOBUF_NONNULL msg, ::std::destroying_delete_t) {
    SharedDtor(*msg);
    ::google::protobuf::internal::SizedDelete(msg, sizeof(SqlFeature_BindValue));
  }
#endif

  template <typename = void>
  explicit constexpr SqlFeature_BindValue(::google::protobuf::internal::ConstantInitialized,
                           const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL
                               class_data);

  inline SqlFeature_BindValue(const SqlFeature_BindValue& from) : SqlFeature_BindValue(nullptr, from) {}
  inline SqlFeature_BindValue(SqlFeature_BindValue&& from) noexcept : SqlFeature_BindValue(nullptr, ::std::move(from)) {}
  inline SqlFeature_BindValue& operator=(const SqlFeature_BindValue& from) {
    CopyFrom(from);
    return *this;
  }
  inline SqlFeature_BindValue& operator=(SqlFeature_BindValue&& from) noexcept {
    if (this == &from) return *this;
    if (::google::protobuf::internal::CanMoveWithInternalSwap(GetArena(), from.GetArena())) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  inline const ::std::string& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString);
  }
  inline ::std::string* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::std::string>();
  }

  static const SqlFeature_BindValue& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<SqlFeature_BindValue>(&SqlFeature_BindValue_globals_);
  }
  static constexpr int kIndexInFileMessages = 6;
  friend void swap(SqlFeature_BindValue& a, SqlFeature_BindValue& b) { a.Swap(&b); }
  PROTOBUF_NOINLINE void Swap(SqlFeature_BindValue* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(SqlFeature_BindValue* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  SqlFeature_BindValue* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::MessageLite::DefaultConstruct<SqlFeature_BindValue>(arena);
  }
  void CopyFrom(const SqlFeature_BindValue& from);
  void MergeFrom(const SqlFeature_BindValue& from) { SqlFeature_BindValue::MergeImpl(*this, from); }

  private:
  static void MergeImpl(::google::protobuf::MessageLite& to_msg,
                        const ::google::protobuf::MessageLite& from_msg);

  public:
  bool IsInitialized() const {
    return true;
  }
  ABSL_ATTRIBUTE_REINITIALIZES void Clear() PROTOBUF_FINAL;
  #if defined(PROTOBUF_CUSTOM_VTABLE)
  private:
  static ::size_t ByteSizeLong(const ::google::protobuf::MessageLite& msg);
  static ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      const ::google::protobuf::MessageLite& msg, ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream);

  public:
  ::size_t ByteSizeLong() const { return ByteSizeLong(*this); }
  ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const {
    return _InternalSerialize(*this, target, stream);
  }
  #else   // PROTOBUF_CUSTOM_VTABLE
  ::size_t ByteSizeLong() const final;
  ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const final;
  #endif  // PROTOBUF_CUSTOM_VTABLE
  int GetCachedSize() const {
    return _impl_._cached_size_.Get();
  }

  private:
  void SharedCtor(::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  static void SharedDtor(MessageLite& self);
  void InternalSwap(SqlFeature_BindValue* PROTOBUF_NONNULL other);
 private:
  template <typename T>
  friend ::absl::string_view(::google::protobuf::internal::GetAnyMessageName)();
  static ::absl::string_view FullMessageName() { return "segmentation_platform.proto.SqlFeature.BindValue"; }

  explicit SqlFeature_BindValue(::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  SqlFeature_BindValue(::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const SqlFeature_BindValue& from);
  SqlFeature_BindValue(
      ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, SqlFeature_BindValue&& from) noexcept
      : SqlFeature_BindValue(arena) {
    *this = ::std::move(from);
  }
  const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL GetClassData() const PROTOBUF_FINAL;
  static void* PROTOBUF_NONNULL PlacementNew_(
      const void* PROTOBUF_NONNULL, void* PROTOBUF_NONNULL mem,
      ::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  static constexpr auto InternalNewImpl_();

 public:
  static constexpr auto InternalGenerateClassData_(
      const MessageLite& prototype,
      const ::google::protobuf::internal::TcParseTableBase* PROTOBUF_NULLABLE tc_table = nullptr);

  // nested types ----------------------------------------------------
  using ParamType = SqlFeature_BindValue_ParamType;
  static constexpr ParamType UNKNOWN = SqlFeature_BindValue_ParamType_UNKNOWN;
  static constexpr ParamType NULL_ = SqlFeature_BindValue_ParamType_NULL_;
  static constexpr ParamType BOOL = SqlFeature_BindValue_ParamType_BOOL;
  static constexpr ParamType INT = SqlFeature_BindValue_ParamType_INT;
  static constexpr ParamType INT64 = SqlFeature_BindValue_ParamType_INT64;
  static constexpr ParamType DOUBLE = SqlFeature_BindValue_ParamType_DOUBLE;
  static constexpr ParamType STRING = SqlFeature_BindValue_ParamType_STRING;
  static constexpr ParamType TIME = SqlFeature_BindValue_ParamType_TIME;
  static inline bool ParamType_IsValid(int value) {
    return SqlFeature_BindValue_ParamType_IsValid(value);
  }
  static constexpr ParamType ParamType_MIN = SqlFeature_BindValue_ParamType_ParamType_MIN;
  static constexpr ParamType ParamType_MAX = SqlFeature_BindValue_ParamType_ParamType_MAX;
  static constexpr int ParamType_ARRAYSIZE = SqlFeature_BindValue_ParamType_ParamType_ARRAYSIZE;
  template <typename T>
  static inline const ::std::string& ParamType_Name(T value) {
    return SqlFeature_BindValue_ParamType_Name(value);
  }
  static inline bool ParamType_Parse(
      ::absl::string_view name, ParamType* PROTOBUF_NONNULL value) {
    return SqlFeature_BindValue_ParamType_Parse(name, value);
  }

  // accessors -------------------------------------------------------
  enum : int {
    kBindFieldIndexFieldNumber = 1,
    kValueFieldNumber = 3,
    kParamTypeFieldNumber = 2,
  };
  // repeated int32 bind_field_index = 1;
  int bind_field_index_size()
      const;
  private:
  int _internal_bind_field_index_size() const;

  public:
  void clear_bind_field_index() ;
  ::int32_t bind_field_index(int index) const;
  void set_bind_field_index(int index, ::int32_t value);
  void add_bind_field_index(::int32_t value);
  const ::google::protobuf::RepeatedField<::int32_t>& bind_field_index()
      const;
  ::google::protobuf::RepeatedField<::int32_t>* PROTOBUF_NONNULL mutable_bind_field_index();

  private:
  const ::google::protobuf::RepeatedField<::int32_t>& _internal_bind_field_index() const;
  ::google::protobuf::RepeatedField<::int32_t>* PROTOBUF_NONNULL _internal_mutable_bind_field_index();

  public:
  // optional .segmentation_platform.proto.CustomInput value = 3;
  bool has_value()
      const;
  void clear_value() ;
  const ::segmentation_platform::proto::CustomInput& value() const;
  ::segmentation_platform::proto::CustomInput* PROTOBUF_NULLABLE release_value();
  ::segmentation_platform::proto::CustomInput* PROTOBUF_NONNULL mutable_value();
  void set_allocated_value(::segmentation_platform::proto::CustomInput* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_value(::segmentation_platform::proto::CustomInput* PROTOBUF_NULLABLE value);
  ::segmentation_platform::proto::CustomInput* PROTOBUF_NULLABLE unsafe_arena_release_value();

  private:
  const ::segmentation_platform::proto::CustomInput& _internal_value() const;
  ::segmentation_platform::proto::CustomInput* PROTOBUF_NONNULL _internal_mutable_value();

  public:
  // optional .segmentation_platform.proto.SqlFeature.BindValue.ParamType param_type = 2;
  bool has_param_type()
      const;
  void clear_param_type() ;
  ::segmentation_platform::proto::SqlFeature_BindValue_ParamType param_type() const;
  void set_param_type(::segmentation_platform::proto::SqlFeature_BindValue_ParamType value);

  private:
  ::segmentation_platform::proto::SqlFeature_BindValue_ParamType _internal_param_type() const;
  void _internal_set_param_type(::segmentation_platform::proto::SqlFeature_BindValue_ParamType value);

  public:
  // @@protoc_insertion_point(class_scope:segmentation_platform.proto.SqlFeature.BindValue)
 private:
  class _Internal;
  using ParseTableT_ =
      ::google::protobuf::internal::TcParseTable<2, 3,
                          2, 0,
                          2>;
  static constexpr ParseTableT_ InternalGenerateParseTable_(
      const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL class_data);
  friend class ::google::protobuf::internal::TcParser;
  #ifndef PROTOBUF_MESSAGE_GLOBALS
  static const ParseTableT_ _table_;
  #endif

  friend class ::google::protobuf::MessageLite;
  friend class ::google::protobuf::Arena;
  friend ::google::protobuf::internal::PrivateAccess;
  template <typename T>
  friend class ::google::protobuf::Arena::InternalHelper;
  using InternalArenaConstructable_ = void;
  using DestructorSkippable_ = void;
  struct Impl_ {
    inline explicit constexpr Impl_(::google::protobuf::internal::InternalVisibility visibility,
                                    ::google::protobuf::internal::ConstantInitialized) noexcept;
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const Impl_& from,
        const SqlFeature_BindValue& from_msg);
    ::google::protobuf::internal::HasBits<1> _has_bits_;
    ::google::protobuf::internal::CachedSize _cached_size_;
    ::google::protobuf::RepeatedField<::int32_t> bind_field_index_;
    ::segmentation_platform::proto::CustomInput* PROTOBUF_NULLABLE value_;
    int param_type_;
    PROTOBUF_TSAN_DECLARE_MEMBER
  };
  union { Impl_ _impl_; };
  friend struct ::TableStruct_components_2fsegmentation_5fplatform_2fpublic_2fproto_2fmodel_5fmetadata_2eproto;
};
// -------------------------------------------------------------------

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

class  TrainingOutputs_TriggerConfig final : public ::google::protobuf::MessageLite
/* @@protoc_insertion_point(class_definition:segmentation_platform.proto.TrainingOutputs.TriggerConfig) */ {
 public:
  inline TrainingOutputs_TriggerConfig() : TrainingOutputs_TriggerConfig(nullptr) {}
  ~TrainingOutputs_TriggerConfig() PROTOBUF_FINAL;

#if defined(PROTOBUF_CUSTOM_VTABLE)
  void operator delete(TrainingOutputs_TriggerConfig* PROTOBUF_NONNULL msg, ::std::destroying_delete_t) {
    SharedDtor(*msg);
    ::google::protobuf::internal::SizedDelete(msg, sizeof(TrainingOutputs_TriggerConfig));
  }
#endif

  template <typename = void>
  explicit constexpr TrainingOutputs_TriggerConfig(::google::protobuf::internal::ConstantInitialized,
                           const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL
                               class_data);

  inline TrainingOutputs_TriggerConfig(const TrainingOutputs_TriggerConfig& from) : TrainingOutputs_TriggerConfig(nullptr, from) {}
  inline TrainingOutputs_TriggerConfig(TrainingOutputs_TriggerConfig&& from) noexcept : TrainingOutputs_TriggerConfig(nullptr, ::std::move(from)) {}
  inline TrainingOutputs_TriggerConfig& operator=(const TrainingOutputs_TriggerConfig& from) {
    CopyFrom(from);
    return *this;
  }
  inline TrainingOutputs_TriggerConfig& operator=(TrainingOutputs_TriggerConfig&& from) noexcept {
    if (this == &from) return *this;
    if (::google::protobuf::internal::CanMoveWithInternalSwap(GetArena(), from.GetArena())) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  inline const ::std::string& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString);
  }
  inline ::std::string* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::std::string>();
  }

  static const TrainingOutputs_TriggerConfig& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<TrainingOutputs_TriggerConfig>(&TrainingOutputs_TriggerConfig_globals_);
  }
  static constexpr int kIndexInFileMessages = 10;
  friend void swap(TrainingOutputs_TriggerConfig& a, TrainingOutputs_TriggerConfig& b) { a.Swap(&b); }
  PROTOBUF_NOINLINE void Swap(TrainingOutputs_TriggerConfig* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(TrainingOutputs_TriggerConfig* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  TrainingOutputs_TriggerConfig* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::MessageLite::DefaultConstruct<TrainingOutputs_TriggerConfig>(arena);
  }
  void CopyFrom(const TrainingOutputs_TriggerConfig& from);
  void MergeFrom(const TrainingOutputs_TriggerConfig& from) { TrainingOutputs_TriggerConfig::MergeImpl(*this, from); }

  private:
  static void MergeImpl(::google::protobuf::MessageLite& to_msg,
                        const ::google::protobuf::MessageLite& from_msg);

  public:
  bool IsInitialized() const {
    return true;
  }
  ABSL_ATTRIBUTE_REINITIALIZES void Clear() PROTOBUF_FINAL;
  #if defined(PROTOBUF_CUSTOM_VTABLE)
  private:
  static ::size_t ByteSizeLong(const ::google::protobuf::MessageLite& msg);
  static ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      const ::google::protobuf::MessageLite& msg, ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream);

  public:
  ::size_t ByteSizeLong() const { return ByteSizeLong(*this); }
  ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const {
    return _InternalSerialize(*this, target, stream);
  }
  #else   // PROTOBUF_CUSTOM_VTABLE
  ::size_t ByteSizeLong() const final;
  ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const final;
  #endif  // PROTOBUF_CUSTOM_VTABLE
  int GetCachedSize() const {
    return _impl_._cached_size_.Get();
  }

  private:
  void SharedCtor(::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  static void SharedDtor(MessageLite& self);
  void InternalSwap(TrainingOutputs_TriggerConfig* PROTOBUF_NONNULL other);
 private:
  template <typename T>
  friend ::absl::string_view(::google::protobuf::internal::GetAnyMessageName)();
  static ::absl::string_view FullMessageName() { return "segmentation_platform.proto.TrainingOutputs.TriggerConfig"; }

  explicit TrainingOutputs_TriggerConfig(::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  TrainingOutputs_TriggerConfig(::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const TrainingOutputs_TriggerConfig& from);
  TrainingOutputs_TriggerConfig(
      ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, TrainingOutputs_TriggerConfig&& from) noexcept
      : TrainingOutputs_TriggerConfig(arena) {
    *this = ::std::move(from);
  }
  const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL GetClassData() const PROTOBUF_FINAL;
  static void* PROTOBUF_NONNULL PlacementNew_(
      const void* PROTOBUF_NONNULL, void* PROTOBUF_NONNULL mem,
      ::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  static constexpr auto InternalNewImpl_();

 public:
  static constexpr auto InternalGenerateClassData_(
      const MessageLite& prototype,
      const ::google::protobuf::internal::TcParseTableBase* PROTOBUF_NULLABLE tc_table = nullptr);

  // nested types ----------------------------------------------------
  using ObservationTrigger = TrainingOutputs_TriggerConfig_ObservationTrigger;
  using DecisionType = TrainingOutputs_TriggerConfig_DecisionType;
  static constexpr DecisionType UNKNOWN = TrainingOutputs_TriggerConfig_DecisionType_UNKNOWN;
  static constexpr DecisionType ONDEMAND = TrainingOutputs_TriggerConfig_DecisionType_ONDEMAND;
  static constexpr DecisionType PERIODIC = TrainingOutputs_TriggerConfig_DecisionType_PERIODIC;
  static inline bool DecisionType_IsValid(int value) {
    return TrainingOutputs_TriggerConfig_DecisionType_IsValid(value);
  }
  static constexpr DecisionType DecisionType_MIN = TrainingOutputs_TriggerConfig_DecisionType_DecisionType_MIN;
  static constexpr DecisionType DecisionType_MAX = TrainingOutputs_TriggerConfig_DecisionType_DecisionType_MAX;
  static constexpr int DecisionType_ARRAYSIZE = TrainingOutputs_TriggerConfig_DecisionType_DecisionType_ARRAYSIZE;
  template <typename T>
  static inline const ::std::string& DecisionType_Name(T value) {
    return TrainingOutputs_TriggerConfig_DecisionType_Name(value);
  }
  static inline bool DecisionType_Parse(
      ::absl::string_view name, DecisionType* PROTOBUF_NONNULL value) {
    return TrainingOutputs_TriggerConfig_DecisionType_Parse(name, value);
  }

  // accessors -------------------------------------------------------
  enum : int {
    kObservationTriggerFieldNumber = 2,
    kDecisionTypeFieldNumber = 1,
    kUseExactPredictionTimeFieldNumber = 3,
    kUseFlexibleObservationTimeFieldNumber = 4,
  };
  // repeated .segmentation_platform.proto.TrainingOutputs.TriggerConfig.ObservationTrigger observation_trigger = 2;
  int observation_trigger_size()
      const;
  private:
  int _internal_observation_trigger_size() const;

  public:
  void clear_observation_trigger() ;
  const ::segmentation_platform::proto::TrainingOutputs_TriggerConfig_ObservationTrigger& observation_trigger(int index) const;
  ::segmentation_platform::proto::TrainingOutputs_TriggerConfig_ObservationTrigger* PROTOBUF_NONNULL mutable_observation_trigger(int index);
  ::segmentation_platform::proto::TrainingOutputs_TriggerConfig_ObservationTrigger* PROTOBUF_NONNULL add_observation_trigger();
  const ::google::protobuf::RepeatedPtrField<::segmentation_platform::proto::TrainingOutputs_TriggerConfig_ObservationTrigger>&
  observation_trigger() const;
  ::google::protobuf::RepeatedPtrField<::segmentation_platform::proto::TrainingOutputs_TriggerConfig_ObservationTrigger>* PROTOBUF_NONNULL
  mutable_observation_trigger();

  private:
  const ::google::protobuf::RepeatedPtrField<::segmentation_platform::proto::TrainingOutputs_TriggerConfig_ObservationTrigger>& _internal_observation_trigger() const;
  ::google::protobuf::RepeatedPtrField<::segmentation_platform::proto::TrainingOutputs_TriggerConfig_ObservationTrigger>* PROTOBUF_NONNULL _internal_mutable_observation_trigger();

  public:
  // optional .segmentation_platform.proto.TrainingOutputs.TriggerConfig.DecisionType decision_type = 1;
  bool has_decision_type()
      const;
  void clear_decision_type() ;
  ::segmentation_platform::proto::TrainingOutputs_TriggerConfig_DecisionType decision_type() const;
  void set_decision_type(::segmentation_platform::proto::TrainingOutputs_TriggerConfig_DecisionType value);

  private:
  ::segmentation_platform::proto::TrainingOutputs_TriggerConfig_DecisionType _internal_decision_type() const;
  void _internal_set_decision_type(::segmentation_platform::proto::TrainingOutputs_TriggerConfig_DecisionType value);

  public:
  // optional bool use_exact_prediction_time = 3;
  bool has_use_exact_prediction_time()
      const;
  void clear_use_exact_prediction_time() ;
  bool use_exact_prediction_time() const;
  void set_use_exact_prediction_time(bool value);

  private:
  bool _internal_use_exact_prediction_time() const;
  void _internal_set_use_exact_prediction_time(bool value);

  public:
  // optional bool use_flexible_observation_time = 4;
  bool has_use_flexible_observation_time()
      const;
  void clear_use_flexible_observation_time() ;
  bool use_flexible_observation_time() const;
  void set_use_flexible_observation_time(bool value);

  private:
  bool _internal_use_flexible_observation_time() const;
  void _internal_set_use_flexible_observation_time(bool value);

  public:
  // @@protoc_insertion_point(class_scope:segmentation_platform.proto.TrainingOutputs.TriggerConfig)
 private:
  class _Internal;
  using ParseTableT_ =
      ::google::protobuf::internal::TcParseTable<2, 4,
                          2, 0,
                          2>;
  static constexpr ParseTableT_ InternalGenerateParseTable_(
      const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL class_data);
  friend class ::google::protobuf::internal::TcParser;
  #ifndef PROTOBUF_MESSAGE_GLOBALS
  static const ParseTableT_ _table_;
  #endif

  friend class ::google::protobuf::MessageLite;
  friend class ::google::protobuf::Arena;
  friend ::google::protobuf::internal::PrivateAccess;
  template <typename T>
  friend class ::google::protobuf::Arena::InternalHelper;
  using InternalArenaConstructable_ = void;
  using DestructorSkippable_ = void;
  struct Impl_ {
    inline explicit constexpr Impl_(::google::protobuf::internal::InternalVisibility visibility,
                                    ::google::protobuf::internal::ConstantInitialized) noexcept;
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const Impl_& from,
        const TrainingOutputs_TriggerConfig& from_msg);
    ::google::protobuf::internal::HasBits<1> _has_bits_;
    ::google::protobuf::internal::CachedSize _cached_size_;
    ::google::protobuf::RepeatedPtrField< ::segmentation_platform::proto::TrainingOutputs_TriggerConfig_ObservationTrigger > observation_trigger_;
    int decision_type_;
    bool use_exact_prediction_time_;
    bool use_flexible_observation_time_;
    PROTOBUF_TSAN_DECLARE_MEMBER
  };
  union { Impl_ _impl_; };
  friend struct ::TableStruct_components_2fsegmentation_5fplatform_2fpublic_2fproto_2fmodel_5fmetadata_2eproto;
};
// -------------------------------------------------------------------

class  SqlFeature final : public ::google::protobuf::MessageLite
/* @@protoc_insertion_point(class_definition:segmentation_platform.proto.SqlFeature) */ {
 public:
  inline SqlFeature() : SqlFeature(nullptr) {}
  ~SqlFeature() PROTOBUF_FINAL;

#if defined(PROTOBUF_CUSTOM_VTABLE)
  void operator delete(SqlFeature* PROTOBUF_NONNULL msg, ::std::destroying_delete_t) {
    SharedDtor(*msg);
    ::google::protobuf::internal::SizedDelete(msg, sizeof(SqlFeature));
  }
#endif

  template <typename = void>
  explicit constexpr SqlFeature(::google::protobuf::internal::ConstantInitialized,
                           const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL
                               class_data);

  inline SqlFeature(const SqlFeature& from) : SqlFeature(nullptr, from) {}
  inline SqlFeature(SqlFeature&& from) noexcept : SqlFeature(nullptr, ::std::move(from)) {}
  inline SqlFeature& operator=(const SqlFeature& from) {
    CopyFrom(from);
    return *this;
  }
  inline SqlFeature& operator=(SqlFeature&& from) noexcept {
    if (this == &from) return *this;
    if (::google::protobuf::internal::CanMoveWithInternalSwap(GetArena(), from.GetArena())) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  inline const ::std::string& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString);
  }
  inline ::std::string* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::std::string>();
  }

  static const SqlFeature& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<SqlFeature>(&SqlFeature_globals_);
  }
  static constexpr int kIndexInFileMessages = 7;
  friend void swap(SqlFeature& a, SqlFeature& b) { a.Swap(&b); }
  PROTOBUF_NOINLINE void Swap(SqlFeature* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(SqlFeature* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  SqlFeature* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::MessageLite::DefaultConstruct<SqlFeature>(arena);
  }
  void CopyFrom(const SqlFeature& from);
  void MergeFrom(const SqlFeature& from) { SqlFeature::MergeImpl(*this, from); }

  private:
  static void MergeImpl(::google::protobuf::MessageLite& to_msg,
                        const ::google::protobuf::MessageLite& from_msg);

  public:
  bool IsInitialized() const {
    return true;
  }
  ABSL_ATTRIBUTE_REINITIALIZES void Clear() PROTOBUF_FINAL;
  #if defined(PROTOBUF_CUSTOM_VTABLE)
  private:
  static ::size_t ByteSizeLong(const ::google::protobuf::MessageLite& msg);
  static ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      const ::google::protobuf::MessageLite& msg, ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream);

  public:
  ::size_t ByteSizeLong() const { return ByteSizeLong(*this); }
  ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const {
    return _InternalSerialize(*this, target, stream);
  }
  #else   // PROTOBUF_CUSTOM_VTABLE
  ::size_t ByteSizeLong() const final;
  ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const final;
  #endif  // PROTOBUF_CUSTOM_VTABLE
  int GetCachedSize() const {
    return _impl_._cached_size_.Get();
  }

  private:
  void SharedCtor(::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  static void SharedDtor(MessageLite& self);
  void InternalSwap(SqlFeature* PROTOBUF_NONNULL other);
 private:
  template <typename T>
  friend ::absl::string_view(::google::protobuf::internal::GetAnyMessageName)();
  static ::absl::string_view FullMessageName() { return "segmentation_platform.proto.SqlFeature"; }

  explicit SqlFeature(::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  SqlFeature(::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const SqlFeature& from);
  SqlFeature(
      ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, SqlFeature&& from) noexcept
      : SqlFeature(arena) {
    *this = ::std::move(from);
  }
  const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL GetClassData() const PROTOBUF_FINAL;
  static void* PROTOBUF_NONNULL PlacementNew_(
      const void* PROTOBUF_NONNULL, void* PROTOBUF_NONNULL mem,
      ::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  static constexpr auto InternalNewImpl_();

 public:
  static constexpr auto InternalGenerateClassData_(
      const MessageLite& prototype,
      const ::google::protobuf::internal::TcParseTableBase* PROTOBUF_NULLABLE tc_table = nullptr);

  // nested types ----------------------------------------------------
  using BindValue = SqlFeature_BindValue;

  // accessors -------------------------------------------------------
  enum : int {
    kBindValuesFieldNumber = 3,
    kSqlFieldNumber = 1,
    kNameFieldNumber = 4,
    kSignalFilterFieldNumber = 2,
  };
  // repeated .segmentation_platform.proto.SqlFeature.BindValue bind_values = 3;
  int bind_values_size()
      const;
  private:
  int _internal_bind_values_size() const;

  public:
  void clear_bind_values() ;
  const ::segmentation_platform::proto::SqlFeature_BindValue& bind_values(int index) const;
  ::segmentation_platform::proto::SqlFeature_BindValue* PROTOBUF_NONNULL mutable_bind_values(int index);
  ::segmentation_platform::proto::SqlFeature_BindValue* PROTOBUF_NONNULL add_bind_values();
  const ::google::protobuf::RepeatedPtrField<::segmentation_platform::proto::SqlFeature_BindValue>&
  bind_values() const;
  ::google::protobuf::RepeatedPtrField<::segmentation_platform::proto::SqlFeature_BindValue>* PROTOBUF_NONNULL
  mutable_bind_values();

  private:
  const ::google::protobuf::RepeatedPtrField<::segmentation_platform::proto::SqlFeature_BindValue>& _internal_bind_values() const;
  ::google::protobuf::RepeatedPtrField<::segmentation_platform::proto::SqlFeature_BindValue>* PROTOBUF_NONNULL _internal_mutable_bind_values();

  public:
  // optional string sql = 1;
  bool has_sql()
      const;
  void clear_sql() ;
  const ::std::string& sql() const;
  template <typename Arg_ = const ::std::string&, typename... Args_>
  void set_sql(Arg_&& arg, Args_... args);
  ::std::string* PROTOBUF_NONNULL mutable_sql();
  ::std::string* PROTOBUF_NULLABLE release_sql();
  void set_allocated_sql(::std::string* PROTOBUF_NULLABLE value);

  private:
  const ::std::string& _internal_sql() const;
  PROTOBUF_ALWAYS_INLINE void _internal_set_sql(const ::std::string& value);
  ::std::string* PROTOBUF_NONNULL _internal_mutable_sql();

  public:
  // optional string name = 4;
  bool has_name()
      const;
  void clear_name() ;
  const ::std::string& name() const;
  template <typename Arg_ = const ::std::string&, typename... Args_>
  void set_name(Arg_&& arg, Args_... args);
  ::std::string* PROTOBUF_NONNULL mutable_name();
  ::std::string* PROTOBUF_NULLABLE release_name();
  void set_allocated_name(::std::string* PROTOBUF_NULLABLE value);

  private:
  const ::std::string& _internal_name() const;
  PROTOBUF_ALWAYS_INLINE void _internal_set_name(const ::std::string& value);
  ::std::string* PROTOBUF_NONNULL _internal_mutable_name();

  public:
  // optional .segmentation_platform.proto.SignalFilterConfig signal_filter = 2;
  bool has_signal_filter()
      const;
  void clear_signal_filter() ;
  const ::segmentation_platform::proto::SignalFilterConfig& signal_filter() const;
  ::segmentation_platform::proto::SignalFilterConfig* PROTOBUF_NULLABLE release_signal_filter();
  ::segmentation_platform::proto::SignalFilterConfig* PROTOBUF_NONNULL mutable_signal_filter();
  void set_allocated_signal_filter(::segmentation_platform::proto::SignalFilterConfig* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_signal_filter(::segmentation_platform::proto::SignalFilterConfig* PROTOBUF_NULLABLE value);
  ::segmentation_platform::proto::SignalFilterConfig* PROTOBUF_NULLABLE unsafe_arena_release_signal_filter();

  private:
  const ::segmentation_platform::proto::SignalFilterConfig& _internal_signal_filter() const;
  ::segmentation_platform::proto::SignalFilterConfig* PROTOBUF_NONNULL _internal_mutable_signal_filter();

  public:
  // @@protoc_insertion_point(class_scope:segmentation_platform.proto.SqlFeature)
 private:
  class _Internal;
  using ParseTableT_ =
      ::google::protobuf::internal::TcParseTable<2, 4,
                          2, 0,
                          2>;
  static constexpr ParseTableT_ InternalGenerateParseTable_(
      const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL class_data);
  friend class ::google::protobuf::internal::TcParser;
  #ifndef PROTOBUF_MESSAGE_GLOBALS
  static const ParseTableT_ _table_;
  #endif

  friend class ::google::protobuf::MessageLite;
  friend class ::google::protobuf::Arena;
  friend ::google::protobuf::internal::PrivateAccess;
  template <typename T>
  friend class ::google::protobuf::Arena::InternalHelper;
  using InternalArenaConstructable_ = void;
  using DestructorSkippable_ = void;
  struct Impl_ {
    inline explicit constexpr Impl_(::google::protobuf::internal::InternalVisibility visibility,
                                    ::google::protobuf::internal::ConstantInitialized) noexcept;
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const Impl_& from,
        const SqlFeature& from_msg);
    ::google::protobuf::internal::HasBits<1> _has_bits_;
    ::google::protobuf::internal::CachedSize _cached_size_;
    ::google::protobuf::RepeatedPtrField< ::segmentation_platform::proto::SqlFeature_BindValue > bind_values_;
    ::google::protobuf::internal::ArenaStringPtr sql_;
    ::google::protobuf::internal::ArenaStringPtr name_;
    ::segmentation_platform::proto::SignalFilterConfig* PROTOBUF_NULLABLE signal_filter_;
    PROTOBUF_TSAN_DECLARE_MEMBER
  };
  union { Impl_ _impl_; };
  friend struct ::TableStruct_components_2fsegmentation_5fplatform_2fpublic_2fproto_2fmodel_5fmetadata_2eproto;
};
// -------------------------------------------------------------------

class  TrainingOutputs final : public ::google::protobuf::MessageLite
/* @@protoc_insertion_point(class_definition:segmentation_platform.proto.TrainingOutputs) */ {
 public:
  inline TrainingOutputs() : TrainingOutputs(nullptr) {}
  ~TrainingOutputs() PROTOBUF_FINAL;

#if defined(PROTOBUF_CUSTOM_VTABLE)
  void operator delete(TrainingOutputs* PROTOBUF_NONNULL msg, ::std::destroying_delete_t) {
    SharedDtor(*msg);
    ::google::protobuf::internal::SizedDelete(msg, sizeof(TrainingOutputs));
  }
#endif

  template <typename = void>
  explicit constexpr TrainingOutputs(::google::protobuf::internal::ConstantInitialized,
                           const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL
                               class_data);

  inline TrainingOutputs(const TrainingOutputs& from) : TrainingOutputs(nullptr, from) {}
  inline TrainingOutputs(TrainingOutputs&& from) noexcept : TrainingOutputs(nullptr, ::std::move(from)) {}
  inline TrainingOutputs& operator=(const TrainingOutputs& from) {
    CopyFrom(from);
    return *this;
  }
  inline TrainingOutputs& operator=(TrainingOutputs&& from) noexcept {
    if (this == &from) return *this;
    if (::google::protobuf::internal::CanMoveWithInternalSwap(GetArena(), from.GetArena())) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  inline const ::std::string& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString);
  }
  inline ::std::string* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::std::string>();
  }

  static const TrainingOutputs& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<TrainingOutputs>(&TrainingOutputs_globals_);
  }
  static constexpr int kIndexInFileMessages = 11;
  friend void swap(TrainingOutputs& a, TrainingOutputs& b) { a.Swap(&b); }
  PROTOBUF_NOINLINE void Swap(TrainingOutputs* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(TrainingOutputs* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  TrainingOutputs* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::MessageLite::DefaultConstruct<TrainingOutputs>(arena);
  }
  void CopyFrom(const TrainingOutputs& from);
  void MergeFrom(const TrainingOutputs& from) { TrainingOutputs::MergeImpl(*this, from); }

  private:
  static void MergeImpl(::google::protobuf::MessageLite& to_msg,
                        const ::google::protobuf::MessageLite& from_msg);

  public:
  bool IsInitialized() const {
    return true;
  }
  ABSL_ATTRIBUTE_REINITIALIZES void Clear() PROTOBUF_FINAL;
  #if defined(PROTOBUF_CUSTOM_VTABLE)
  private:
  static ::size_t ByteSizeLong(const ::google::protobuf::MessageLite& msg);
  static ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      const ::google::protobuf::MessageLite& msg, ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream);

  public:
  ::size_t ByteSizeLong() const { return ByteSizeLong(*this); }
  ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const {
    return _InternalSerialize(*this, target, stream);
  }
  #else   // PROTOBUF_CUSTOM_VTABLE
  ::size_t ByteSizeLong() const final;
  ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const final;
  #endif  // PROTOBUF_CUSTOM_VTABLE
  int GetCachedSize() const {
    return _impl_._cached_size_.Get();
  }

  private:
  void SharedCtor(::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  static void SharedDtor(MessageLite& self);
  void InternalSwap(TrainingOutputs* PROTOBUF_NONNULL other);
 private:
  template <typename T>
  friend ::absl::string_view(::google::protobuf::internal::GetAnyMessageName)();
  static ::absl::string_view FullMessageName() { return "segmentation_platform.proto.TrainingOutputs"; }

  explicit TrainingOutputs(::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  TrainingOutputs(::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const TrainingOutputs& from);
  TrainingOutputs(
      ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, TrainingOutputs&& from) noexcept
      : TrainingOutputs(arena) {
    *this = ::std::move(from);
  }
  const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL GetClassData() const PROTOBUF_FINAL;
  static void* PROTOBUF_NONNULL PlacementNew_(
      const void* PROTOBUF_NONNULL, void* PROTOBUF_NONNULL mem,
      ::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  static constexpr auto InternalNewImpl_();

 public:
  static constexpr auto InternalGenerateClassData_(
      const MessageLite& prototype,
      const ::google::protobuf::internal::TcParseTableBase* PROTOBUF_NULLABLE tc_table = nullptr);

  // nested types ----------------------------------------------------
  using TriggerConfig = TrainingOutputs_TriggerConfig;

  // accessors -------------------------------------------------------
  enum : int {
    kOutputsFieldNumber = 1,
    kTriggerConfigFieldNumber = 2,
  };
  // repeated .segmentation_platform.proto.TrainingOutput outputs = 1;
  int outputs_size()
      const;
  private:
  int _internal_outputs_size() const;

  public:
  void clear_outputs() ;
  const ::segmentation_platform::proto::TrainingOutput& outputs(int index) const;
  ::segmentation_platform::proto::TrainingOutput* PROTOBUF_NONNULL mutable_outputs(int index);
  ::segmentation_platform::proto::TrainingOutput* PROTOBUF_NONNULL add_outputs();
  const ::google::protobuf::RepeatedPtrField<::segmentation_platform::proto::TrainingOutput>&
  outputs() const;
  ::google::protobuf::RepeatedPtrField<::segmentation_platform::proto::TrainingOutput>* PROTOBUF_NONNULL
  mutable_outputs();

  private:
  const ::google::protobuf::RepeatedPtrField<::segmentation_platform::proto::TrainingOutput>& _internal_outputs() const;
  ::google::protobuf::RepeatedPtrField<::segmentation_platform::proto::TrainingOutput>* PROTOBUF_NONNULL _internal_mutable_outputs();

  public:
  // optional .segmentation_platform.proto.TrainingOutputs.TriggerConfig trigger_config = 2;
  bool has_trigger_config()
      const;
  void clear_trigger_config() ;
  const ::segmentation_platform::proto::TrainingOutputs_TriggerConfig& trigger_config() const;
  ::segmentation_platform::proto::TrainingOutputs_TriggerConfig* PROTOBUF_NULLABLE release_trigger_config();
  ::segmentation_platform::proto::TrainingOutputs_TriggerConfig* PROTOBUF_NONNULL mutable_trigger_config();
  void set_allocated_trigger_config(::segmentation_platform::proto::TrainingOutputs_TriggerConfig* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_trigger_config(::segmentation_platform::proto::TrainingOutputs_TriggerConfig* PROTOBUF_NULLABLE value);
  ::segmentation_platform::proto::TrainingOutputs_TriggerConfig* PROTOBUF_NULLABLE unsafe_arena_release_trigger_config();

  private:
  const ::segmentation_platform::proto::TrainingOutputs_TriggerConfig& _internal_trigger_config() const;
  ::segmentation_platform::proto::TrainingOutputs_TriggerConfig* PROTOBUF_NONNULL _internal_mutable_trigger_config();

  public:
  // @@protoc_insertion_point(class_scope:segmentation_platform.proto.TrainingOutputs)
 private:
  class _Internal;
  using ParseTableT_ =
      ::google::protobuf::internal::TcParseTable<1, 2,
                          2, 0,
                          2>;
  static constexpr ParseTableT_ InternalGenerateParseTable_(
      const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL class_data);
  friend class ::google::protobuf::internal::TcParser;
  #ifndef PROTOBUF_MESSAGE_GLOBALS
  static const ParseTableT_ _table_;
  #endif

  friend class ::google::protobuf::MessageLite;
  friend class ::google::protobuf::Arena;
  friend ::google::protobuf::internal::PrivateAccess;
  template <typename T>
  friend class ::google::protobuf::Arena::InternalHelper;
  using InternalArenaConstructable_ = void;
  using DestructorSkippable_ = void;
  struct Impl_ {
    inline explicit constexpr Impl_(::google::protobuf::internal::InternalVisibility visibility,
                                    ::google::protobuf::internal::ConstantInitialized) noexcept;
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const Impl_& from,
        const TrainingOutputs& from_msg);
    ::google::protobuf::internal::HasBits<1> _has_bits_;
    ::google::protobuf::internal::CachedSize _cached_size_;
    ::google::protobuf::RepeatedPtrField< ::segmentation_platform::proto::TrainingOutput > outputs_;
    ::segmentation_platform::proto::TrainingOutputs_TriggerConfig* PROTOBUF_NULLABLE trigger_config_;
    PROTOBUF_TSAN_DECLARE_MEMBER
  };
  union { Impl_ _impl_; };
  friend struct ::TableStruct_components_2fsegmentation_5fplatform_2fpublic_2fproto_2fmodel_5fmetadata_2eproto;
};
// -------------------------------------------------------------------

class  InputFeature final : public ::google::protobuf::MessageLite
/* @@protoc_insertion_point(class_definition:segmentation_platform.proto.InputFeature) */ {
 public:
  inline InputFeature() : InputFeature(nullptr) {}
  ~InputFeature() PROTOBUF_FINAL;

#if defined(PROTOBUF_CUSTOM_VTABLE)
  void operator delete(InputFeature* PROTOBUF_NONNULL msg, ::std::destroying_delete_t) {
    SharedDtor(*msg);
    ::google::protobuf::internal::SizedDelete(msg, sizeof(InputFeature));
  }
#endif

  template <typename = void>
  explicit constexpr InputFeature(::google::protobuf::internal::ConstantInitialized,
                           const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL
                               class_data);

  inline InputFeature(const InputFeature& from) : InputFeature(nullptr, from) {}
  inline InputFeature(InputFeature&& from) noexcept : InputFeature(nullptr, ::std::move(from)) {}
  inline InputFeature& operator=(const InputFeature& from) {
    CopyFrom(from);
    return *this;
  }
  inline InputFeature& operator=(InputFeature&& from) noexcept {
    if (this == &from) return *this;
    if (::google::protobuf::internal::CanMoveWithInternalSwap(GetArena(), from.GetArena())) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  inline const ::std::string& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString);
  }
  inline ::std::string* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::std::string>();
  }

  static const InputFeature& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<InputFeature>(&InputFeature_globals_);
  }
  enum FeatureCase {
    kUmaFeature = 1,
    kCustomInput = 2,
    kSqlFeature = 3,
    FEATURE_NOT_SET = 0,
  };
  static constexpr int kIndexInFileMessages = 8;
  friend void swap(InputFeature& a, InputFeature& b) { a.Swap(&b); }
  PROTOBUF_NOINLINE void Swap(InputFeature* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(InputFeature* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  InputFeature* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::MessageLite::DefaultConstruct<InputFeature>(arena);
  }
  void CopyFrom(const InputFeature& from);
  void MergeFrom(const InputFeature& from) { InputFeature::MergeImpl(*this, from); }

  private:
  static void MergeImpl(::google::protobuf::MessageLite& to_msg,
                        const ::google::protobuf::MessageLite& from_msg);

  public:
  bool IsInitialized() const {
    return true;
  }
  ABSL_ATTRIBUTE_REINITIALIZES void Clear() PROTOBUF_FINAL;
  #if defined(PROTOBUF_CUSTOM_VTABLE)
  private:
  static ::size_t ByteSizeLong(const ::google::protobuf::MessageLite& msg);
  static ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      const ::google::protobuf::MessageLite& msg, ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream);

  public:
  ::size_t ByteSizeLong() const { return ByteSizeLong(*this); }
  ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const {
    return _InternalSerialize(*this, target, stream);
  }
  #else   // PROTOBUF_CUSTOM_VTABLE
  ::size_t ByteSizeLong() const final;
  ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const final;
  #endif  // PROTOBUF_CUSTOM_VTABLE
  int GetCachedSize() const {
    return _impl_._cached_size_.Get();
  }

  private:
  void SharedCtor(::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  static void SharedDtor(MessageLite& self);
  void InternalSwap(InputFeature* PROTOBUF_NONNULL other);
 private:
  template <typename T>
  friend ::absl::string_view(::google::protobuf::internal::GetAnyMessageName)();
  static ::absl::string_view FullMessageName() { return "segmentation_platform.proto.InputFeature"; }

  explicit InputFeature(::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  InputFeature(::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const InputFeature& from);
  InputFeature(
      ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, InputFeature&& from) noexcept
      : InputFeature(arena) {
    *this = ::std::move(from);
  }
  const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL GetClassData() const PROTOBUF_FINAL;
  static void* PROTOBUF_NONNULL PlacementNew_(
      const void* PROTOBUF_NONNULL, void* PROTOBUF_NONNULL mem,
      ::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  static constexpr auto InternalNewImpl_();

 public:
  static constexpr auto InternalGenerateClassData_(
      const MessageLite& prototype,
      const ::google::protobuf::internal::TcParseTableBase* PROTOBUF_NULLABLE tc_table = nullptr);

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

  // accessors -------------------------------------------------------
  enum : int {
    kUmaFeatureFieldNumber = 1,
    kCustomInputFieldNumber = 2,
    kSqlFeatureFieldNumber = 3,
  };
  // .segmentation_platform.proto.UMAFeature uma_feature = 1;
  bool has_uma_feature()
      const;
  private:
  bool _internal_has_uma_feature() const;

  public:
  void clear_uma_feature() ;
  const ::segmentation_platform::proto::UMAFeature& uma_feature() const;
  ::segmentation_platform::proto::UMAFeature* PROTOBUF_NULLABLE release_uma_feature();
  ::segmentation_platform::proto::UMAFeature* PROTOBUF_NONNULL mutable_uma_feature();
  void set_allocated_uma_feature(::segmentation_platform::proto::UMAFeature* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_uma_feature(::segmentation_platform::proto::UMAFeature* PROTOBUF_NULLABLE value);
  ::segmentation_platform::proto::UMAFeature* PROTOBUF_NULLABLE unsafe_arena_release_uma_feature();

  private:
  const ::segmentation_platform::proto::UMAFeature& _internal_uma_feature() const;
  ::segmentation_platform::proto::UMAFeature* PROTOBUF_NONNULL _internal_mutable_uma_feature();

  public:
  // .segmentation_platform.proto.CustomInput custom_input = 2;
  bool has_custom_input()
      const;
  private:
  bool _internal_has_custom_input() const;

  public:
  void clear_custom_input() ;
  const ::segmentation_platform::proto::CustomInput& custom_input() const;
  ::segmentation_platform::proto::CustomInput* PROTOBUF_NULLABLE release_custom_input();
  ::segmentation_platform::proto::CustomInput* PROTOBUF_NONNULL mutable_custom_input();
  void set_allocated_custom_input(::segmentation_platform::proto::CustomInput* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_custom_input(::segmentation_platform::proto::CustomInput* PROTOBUF_NULLABLE value);
  ::segmentation_platform::proto::CustomInput* PROTOBUF_NULLABLE unsafe_arena_release_custom_input();

  private:
  const ::segmentation_platform::proto::CustomInput& _internal_custom_input() const;
  ::segmentation_platform::proto::CustomInput* PROTOBUF_NONNULL _internal_mutable_custom_input();

  public:
  // .segmentation_platform.proto.SqlFeature sql_feature = 3;
  bool has_sql_feature()
      const;
  private:
  bool _internal_has_sql_feature() const;

  public:
  void clear_sql_feature() ;
  const ::segmentation_platform::proto::SqlFeature& sql_feature() const;
  ::segmentation_platform::proto::SqlFeature* PROTOBUF_NULLABLE release_sql_feature();
  ::segmentation_platform::proto::SqlFeature* PROTOBUF_NONNULL mutable_sql_feature();
  void set_allocated_sql_feature(::segmentation_platform::proto::SqlFeature* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_sql_feature(::segmentation_platform::proto::SqlFeature* PROTOBUF_NULLABLE value);
  ::segmentation_platform::proto::SqlFeature* PROTOBUF_NULLABLE unsafe_arena_release_sql_feature();

  private:
  const ::segmentation_platform::proto::SqlFeature& _internal_sql_feature() const;
  ::segmentation_platform::proto::SqlFeature* PROTOBUF_NONNULL _internal_mutable_sql_feature();

  public:
  void clear_Feature();
  FeatureCase Feature_case() const;
  // @@protoc_insertion_point(class_scope:segmentation_platform.proto.InputFeature)
 private:
  class _Internal;
  void set_has_uma_feature();
  void set_has_custom_input();
  void set_has_sql_feature();
  inline bool has_Feature() const;
  inline void clear_has_Feature();
  using ParseTableT_ =
      ::google::protobuf::internal::TcParseTable<0, 3,
                          3, 0,
                          2>;
  static constexpr ParseTableT_ InternalGenerateParseTable_(
      const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL class_data);
  friend class ::google::protobuf::internal::TcParser;
  #ifndef PROTOBUF_MESSAGE_GLOBALS
  static const ParseTableT_ _table_;
  #endif

  friend class ::google::protobuf::MessageLite;
  friend class ::google::protobuf::Arena;
  friend ::google::protobuf::internal::PrivateAccess;
  template <typename T>
  friend class ::google::protobuf::Arena::InternalHelper;
  using InternalArenaConstructable_ = void;
  using DestructorSkippable_ = void;
  struct Impl_ {
    inline explicit constexpr Impl_(::google::protobuf::internal::InternalVisibility visibility,
                                    ::google::protobuf::internal::ConstantInitialized) noexcept;
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const Impl_& from,
        const InputFeature& from_msg);
    union FeatureUnion {
      constexpr FeatureUnion() : _constinit_{} {}
      ::google::protobuf::internal::ConstantInitialized _constinit_;
      ::google::protobuf::MessageLite* PROTOBUF_NULLABLE uma_feature_;
      ::google::protobuf::MessageLite* PROTOBUF_NULLABLE custom_input_;
      ::google::protobuf::MessageLite* PROTOBUF_NULLABLE sql_feature_;
    } Feature_;
    ::google::protobuf::internal::CachedSize _cached_size_;
    ::uint32_t _oneof_case_[1];
    PROTOBUF_TSAN_DECLARE_MEMBER
  };
  union { Impl_ _impl_; };
  friend struct ::TableStruct_components_2fsegmentation_5fplatform_2fpublic_2fproto_2fmodel_5fmetadata_2eproto;
};
// -------------------------------------------------------------------

class  SegmentationModelMetadata final : public ::google::protobuf::MessageLite
/* @@protoc_insertion_point(class_definition:segmentation_platform.proto.SegmentationModelMetadata) */ {
 public:
  inline SegmentationModelMetadata() : SegmentationModelMetadata(nullptr) {}
  ~SegmentationModelMetadata() PROTOBUF_FINAL;

#if defined(PROTOBUF_CUSTOM_VTABLE)
  void operator delete(SegmentationModelMetadata* PROTOBUF_NONNULL msg, ::std::destroying_delete_t) {
    SharedDtor(*msg);
    ::google::protobuf::internal::SizedDelete(msg, sizeof(SegmentationModelMetadata));
  }
#endif

  template <typename = void>
  explicit constexpr SegmentationModelMetadata(::google::protobuf::internal::ConstantInitialized,
                           const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL
                               class_data);

  inline SegmentationModelMetadata(const SegmentationModelMetadata& from) : SegmentationModelMetadata(nullptr, from) {}
  inline SegmentationModelMetadata(SegmentationModelMetadata&& from) noexcept : SegmentationModelMetadata(nullptr, ::std::move(from)) {}
  inline SegmentationModelMetadata& operator=(const SegmentationModelMetadata& from) {
    CopyFrom(from);
    return *this;
  }
  inline SegmentationModelMetadata& operator=(SegmentationModelMetadata&& from) noexcept {
    if (this == &from) return *this;
    if (::google::protobuf::internal::CanMoveWithInternalSwap(GetArena(), from.GetArena())) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  inline const ::std::string& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString);
  }
  inline ::std::string* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::std::string>();
  }

  static const SegmentationModelMetadata& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<SegmentationModelMetadata>(&SegmentationModelMetadata_globals_);
  }
  static constexpr int kIndexInFileMessages = 17;
  friend void swap(SegmentationModelMetadata& a, SegmentationModelMetadata& b) { a.Swap(&b); }
  PROTOBUF_NOINLINE void Swap(SegmentationModelMetadata* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(SegmentationModelMetadata* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  SegmentationModelMetadata* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::MessageLite::DefaultConstruct<SegmentationModelMetadata>(arena);
  }
  void CopyFrom(const SegmentationModelMetadata& from);
  void MergeFrom(const SegmentationModelMetadata& from) { SegmentationModelMetadata::MergeImpl(*this, from); }

  private:
  static void MergeImpl(::google::protobuf::MessageLite& to_msg,
                        const ::google::protobuf::MessageLite& from_msg);

  public:
  bool IsInitialized() const {
    return true;
  }
  ABSL_ATTRIBUTE_REINITIALIZES void Clear() PROTOBUF_FINAL;
  #if defined(PROTOBUF_CUSTOM_VTABLE)
  private:
  static ::size_t ByteSizeLong(const ::google::protobuf::MessageLite& msg);
  static ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      const ::google::protobuf::MessageLite& msg, ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream);

  public:
  ::size_t ByteSizeLong() const { return ByteSizeLong(*this); }
  ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const {
    return _InternalSerialize(*this, target, stream);
  }
  #else   // PROTOBUF_CUSTOM_VTABLE
  ::size_t ByteSizeLong() const final;
  ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const final;
  #endif  // PROTOBUF_CUSTOM_VTABLE
  int GetCachedSize() const {
    return _impl_._cached_size_.Get();
  }

  private:
  void SharedCtor(::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  static void SharedDtor(MessageLite& self);
  void InternalSwap(SegmentationModelMetadata* PROTOBUF_NONNULL other);
 private:
  template <typename T>
  friend ::absl::string_view(::google::protobuf::internal::GetAnyMessageName)();
  static ::absl::string_view FullMessageName() { return "segmentation_platform.proto.SegmentationModelMetadata"; }

  explicit SegmentationModelMetadata(::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  SegmentationModelMetadata(::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const SegmentationModelMetadata& from);
  SegmentationModelMetadata(
      ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, SegmentationModelMetadata&& from) noexcept
      : SegmentationModelMetadata(arena) {
    *this = ::std::move(from);
  }
  const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL GetClassData() const PROTOBUF_FINAL;
  static void* PROTOBUF_NONNULL PlacementNew_(
      const void* PROTOBUF_NONNULL, void* PROTOBUF_NONNULL mem,
      ::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  static constexpr auto InternalNewImpl_();

 public:
  static constexpr auto InternalGenerateClassData_(
      const MessageLite& prototype,
      const ::google::protobuf::internal::TcParseTableBase* PROTOBUF_NULLABLE tc_table = nullptr);

  // nested types ----------------------------------------------------
  using DiscreteMapping = SegmentationModelMetadata_DiscreteMapping;
  using OutputDescription = SegmentationModelMetadata_OutputDescription;
  static constexpr OutputDescription UNKNOWN_RETURN_TYPE = SegmentationModelMetadata_OutputDescription_UNKNOWN_RETURN_TYPE;
  static constexpr OutputDescription RETURN_TYPE_HEURISTIC = SegmentationModelMetadata_OutputDescription_RETURN_TYPE_HEURISTIC;
  static constexpr OutputDescription RETURN_TYPE_MULTISEGMENT = SegmentationModelMetadata_OutputDescription_RETURN_TYPE_MULTISEGMENT;
  static constexpr OutputDescription RETURN_TYPE_PROBABILITY = SegmentationModelMetadata_OutputDescription_RETURN_TYPE_PROBABILITY;
  static constexpr OutputDescription RETURN_TYPE_INTEGER = SegmentationModelMetadata_OutputDescription_RETURN_TYPE_INTEGER;
  static inline bool OutputDescription_IsValid(int value) {
    return SegmentationModelMetadata_OutputDescription_IsValid(value);
  }
  static constexpr OutputDescription OutputDescription_MIN = SegmentationModelMetadata_OutputDescription_OutputDescription_MIN;
  static constexpr OutputDescription OutputDescription_MAX = SegmentationModelMetadata_OutputDescription_OutputDescription_MAX;
  static constexpr int OutputDescription_ARRAYSIZE = SegmentationModelMetadata_OutputDescription_OutputDescription_ARRAYSIZE;
  template <typename T>
  static inline const ::std::string& OutputDescription_Name(T value) {
    return SegmentationModelMetadata_OutputDescription_Name(value);
  }
  static inline bool OutputDescription_Parse(
      ::absl::string_view name, OutputDescription* PROTOBUF_NONNULL value) {
    return SegmentationModelMetadata_OutputDescription_Parse(name, value);
  }

  // accessors -------------------------------------------------------
  enum : int {
    kFeaturesFieldNumber = 1,
    kInputFeaturesFieldNumber = 10,
    kDefaultDiscreteMappingFieldNumber = 8,
    kVersionInfoFieldNumber = 9,
    kTrainingOutputsFieldNumber = 11,
    kOutputConfigFieldNumber = 16,
    kBucketDurationFieldNumber = 3,
    kSignalStorageLengthFieldNumber = 4,
    kMinSignalCollectionLengthFieldNumber = 5,
    kResultTimeToLiveFieldNumber = 6,
    kTimeUnitFieldNumber = 2,
    kUploadTensorsFieldNumber = 13,
    kFixedPredictionTimestampFieldNumber = 17,
    kReturnTypeFieldNumber = 14,
    kDiscreteMappingsFieldNumber = 7,
  };
  // repeated .segmentation_platform.proto.UMAFeature features = 1;
  int features_size()
      const;
  private:
  int _internal_features_size() const;

  public:
  void clear_features() ;
  const ::segmentation_platform::proto::UMAFeature& features(int index) const;
  ::segmentation_platform::proto::UMAFeature* PROTOBUF_NONNULL mutable_features(int index);
  ::segmentation_platform::proto::UMAFeature* PROTOBUF_NONNULL add_features();
  const ::google::protobuf::RepeatedPtrField<::segmentation_platform::proto::UMAFeature>&
  features() const;
  ::google::protobuf::RepeatedPtrField<::segmentation_platform::proto::UMAFeature>* PROTOBUF_NONNULL
  mutable_features();

  private:
  const ::google::protobuf::RepeatedPtrField<::segmentation_platform::proto::UMAFeature>& _internal_features() const;
  ::google::protobuf::RepeatedPtrField<::segmentation_platform::proto::UMAFeature>* PROTOBUF_NONNULL _internal_mutable_features();

  public:
  // repeated .segmentation_platform.proto.InputFeature input_features = 10;
  int input_features_size()
      const;
  private:
  int _internal_input_features_size() const;

  public:
  void clear_input_features() ;
  const ::segmentation_platform::proto::InputFeature& input_features(int index) const;
  ::segmentation_platform::proto::InputFeature* PROTOBUF_NONNULL mutable_input_features(int index);
  ::segmentation_platform::proto::InputFeature* PROTOBUF_NONNULL add_input_features();
  const ::google::protobuf::RepeatedPtrField<::segmentation_platform::proto::InputFeature>&
  input_features() const;
  ::google::protobuf::RepeatedPtrField<::segmentation_platform::proto::InputFeature>* PROTOBUF_NONNULL
  mutable_input_features();

  private:
  const ::google::protobuf::RepeatedPtrField<::segmentation_platform::proto::InputFeature>& _internal_input_features() const;
  ::google::protobuf::RepeatedPtrField<::segmentation_platform::proto::InputFeature>* PROTOBUF_NONNULL _internal_mutable_input_features();

  public:
  // optional string default_discrete_mapping = 8;
  bool has_default_discrete_mapping()
      const;
  void clear_default_discrete_mapping() ;
  const ::std::string& default_discrete_mapping() const;
  template <typename Arg_ = const ::std::string&, typename... Args_>
  void set_default_discrete_mapping(Arg_&& arg, Args_... args);
  ::std::string* PROTOBUF_NONNULL mutable_default_discrete_mapping();
  ::std::string* PROTOBUF_NULLABLE release_default_discrete_mapping();
  void set_allocated_default_discrete_mapping(::std::string* PROTOBUF_NULLABLE value);

  private:
  const ::std::string& _internal_default_discrete_mapping() const;
  PROTOBUF_ALWAYS_INLINE void _internal_set_default_discrete_mapping(const ::std::string& value);
  ::std::string* PROTOBUF_NONNULL _internal_mutable_default_discrete_mapping();

  public:
  // optional .segmentation_platform.proto.VersionInfo version_info = 9;
  bool has_version_info()
      const;
  void clear_version_info() ;
  const ::segmentation_platform::proto::VersionInfo& version_info() const;
  ::segmentation_platform::proto::VersionInfo* PROTOBUF_NULLABLE release_version_info();
  ::segmentation_platform::proto::VersionInfo* PROTOBUF_NONNULL mutable_version_info();
  void set_allocated_version_info(::segmentation_platform::proto::VersionInfo* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_version_info(::segmentation_platform::proto::VersionInfo* PROTOBUF_NULLABLE value);
  ::segmentation_platform::proto::VersionInfo* PROTOBUF_NULLABLE unsafe_arena_release_version_info();

  private:
  const ::segmentation_platform::proto::VersionInfo& _internal_version_info() const;
  ::segmentation_platform::proto::VersionInfo* PROTOBUF_NONNULL _internal_mutable_version_info();

  public:
  // optional .segmentation_platform.proto.TrainingOutputs training_outputs = 11;
  bool has_training_outputs()
      const;
  void clear_training_outputs() ;
  const ::segmentation_platform::proto::TrainingOutputs& training_outputs() const;
  ::segmentation_platform::proto::TrainingOutputs* PROTOBUF_NULLABLE release_training_outputs();
  ::segmentation_platform::proto::TrainingOutputs* PROTOBUF_NONNULL mutable_training_outputs();
  void set_allocated_training_outputs(::segmentation_platform::proto::TrainingOutputs* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_training_outputs(::segmentation_platform::proto::TrainingOutputs* PROTOBUF_NULLABLE value);
  ::segmentation_platform::proto::TrainingOutputs* PROTOBUF_NULLABLE unsafe_arena_release_training_outputs();

  private:
  const ::segmentation_platform::proto::TrainingOutputs& _internal_training_outputs() const;
  ::segmentation_platform::proto::TrainingOutputs* PROTOBUF_NONNULL _internal_mutable_training_outputs();

  public:
  // optional .segmentation_platform.proto.OutputConfig output_config = 16;
  bool has_output_config()
      const;
  void clear_output_config() ;
  const ::segmentation_platform::proto::OutputConfig& output_config() const;
  ::segmentation_platform::proto::OutputConfig* PROTOBUF_NULLABLE release_output_config();
  ::segmentation_platform::proto::OutputConfig* PROTOBUF_NONNULL mutable_output_config();
  void set_allocated_output_config(::segmentation_platform::proto::OutputConfig* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_output_config(::segmentation_platform::proto::OutputConfig* PROTOBUF_NULLABLE value);
  ::segmentation_platform::proto::OutputConfig* PROTOBUF_NULLABLE unsafe_arena_release_output_config();

  private:
  const ::segmentation_platform::proto::OutputConfig& _internal_output_config() const;
  ::segmentation_platform::proto::OutputConfig* PROTOBUF_NONNULL _internal_mutable_output_config();

  public:
  // optional uint64 bucket_duration = 3;
  bool has_bucket_duration()
      const;
  void clear_bucket_duration() ;
  ::uint64_t bucket_duration() const;
  void set_bucket_duration(::uint64_t value);

  private:
  ::uint64_t _internal_bucket_duration() const;
  void _internal_set_bucket_duration(::uint64_t value);

  public:
  // optional int64 signal_storage_length = 4;
  bool has_signal_storage_length()
      const;
  void clear_signal_storage_length() ;
  ::int64_t signal_storage_length() const;
  void set_signal_storage_length(::int64_t value);

  private:
  ::int64_t _internal_signal_storage_length() const;
  void _internal_set_signal_storage_length(::int64_t value);

  public:
  // optional int64 min_signal_collection_length = 5;
  bool has_min_signal_collection_length()
      const;
  void clear_min_signal_collection_length() ;
  ::int64_t min_signal_collection_length() const;
  void set_min_signal_collection_length(::int64_t value);

  private:
  ::int64_t _internal_min_signal_collection_length() const;
  void _internal_set_min_signal_collection_length(::int64_t value);

  public:
  // optional int64 result_time_to_live = 6;
  bool has_result_time_to_live()
      const;
  void clear_result_time_to_live() ;
  ::int64_t result_time_to_live() const;
  void set_result_time_to_live(::int64_t value);

  private:
  ::int64_t _internal_result_time_to_live() const;
  void _internal_set_result_time_to_live(::int64_t value);

  public:
  // optional .segmentation_platform.proto.TimeUnit time_unit = 2;
  bool has_time_unit()
      const;
  void clear_time_unit() ;
  ::segmentation_platform::proto::TimeUnit time_unit() const;
  void set_time_unit(::segmentation_platform::proto::TimeUnit value);

  private:
  ::segmentation_platform::proto::TimeUnit _internal_time_unit() const;
  void _internal_set_time_unit(::segmentation_platform::proto::TimeUnit value);

  public:
  // optional bool upload_tensors = 13;
  bool has_upload_tensors()
      const;
  void clear_upload_tensors() ;
  bool upload_tensors() const;
  void set_upload_tensors(bool value);

  private:
  bool _internal_upload_tensors() const;
  void _internal_set_upload_tensors(bool value);

  public:
  // optional int64 fixed_prediction_timestamp = 17;
  bool has_fixed_prediction_timestamp()
      const;
  void clear_fixed_prediction_timestamp() ;
  ::int64_t fixed_prediction_timestamp() const;
  void set_fixed_prediction_timestamp(::int64_t value);

  private:
  ::int64_t _internal_fixed_prediction_timestamp() const;
  void _internal_set_fixed_prediction_timestamp(::int64_t value);

  public:
  // optional .segmentation_platform.proto.SegmentationModelMetadata.OutputDescription return_type = 14;
  bool has_return_type()
      const;
  void clear_return_type() ;
  ::segmentation_platform::proto::SegmentationModelMetadata_OutputDescription return_type() const;
  void set_return_type(::segmentation_platform::proto::SegmentationModelMetadata_OutputDescription value);

  private:
  ::segmentation_platform::proto::SegmentationModelMetadata_OutputDescription _internal_return_type() const;
  void _internal_set_return_type(::segmentation_platform::proto::SegmentationModelMetadata_OutputDescription value);

  public:
  // map<string, .segmentation_platform.proto.SegmentationModelMetadata.DiscreteMapping> discrete_mappings = 7;
  int discrete_mappings_size()
      const;
  private:
  int _internal_discrete_mappings_size() const;

  public:
  void clear_discrete_mappings() ;
  const ::google::protobuf::Map<::std::string, ::segmentation_platform::proto::SegmentationModelMetadata_DiscreteMapping>& discrete_mappings() const;
  ::google::protobuf::Map<::std::string, ::segmentation_platform::proto::SegmentationModelMetadata_DiscreteMapping>* PROTOBUF_NONNULL mutable_discrete_mappings();

  private:
  const ::google::protobuf::Map<::std::string, ::segmentation_platform::proto::SegmentationModelMetadata_DiscreteMapping>& _internal_discrete_mappings() const;
  ::google::protobuf::Map<::std::string, ::segmentation_platform::proto::SegmentationModelMetadata_DiscreteMapping>* PROTOBUF_NONNULL _internal_mutable_discrete_mappings();

  public:
  // @@protoc_insertion_point(class_scope:segmentation_platform.proto.SegmentationModelMetadata)
 private:
  class _Internal;
  using ParseTableT_ =
      ::google::protobuf::internal::TcParseTable<4, 15,
                          9, 0,
                          2>;
  static constexpr ParseTableT_ InternalGenerateParseTable_(
      const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL class_data);
  friend class ::google::protobuf::internal::TcParser;
  #ifndef PROTOBUF_MESSAGE_GLOBALS
  static const ParseTableT_ _table_;
  #endif

  friend class ::google::protobuf::MessageLite;
  friend class ::google::protobuf::Arena;
  friend ::google::protobuf::internal::PrivateAccess;
  template <typename T>
  friend class ::google::protobuf::Arena::InternalHelper;
  using InternalArenaConstructable_ = void;
  using DestructorSkippable_ = void;
  struct Impl_ {
    inline explicit constexpr Impl_(::google::protobuf::internal::InternalVisibility visibility,
                                    ::google::protobuf::internal::ConstantInitialized) noexcept;
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const Impl_& from,
        const SegmentationModelMetadata& from_msg);
    ::google::protobuf::internal::HasBits<1> _has_bits_;
    ::google::protobuf::internal::CachedSize _cached_size_;
    ::google::protobuf::RepeatedPtrField< ::segmentation_platform::proto::UMAFeature > features_;
    ::google::protobuf::RepeatedPtrField< ::segmentation_platform::proto::InputFeature > input_features_;
    ::google::protobuf::internal::ArenaStringPtr default_discrete_mapping_;
    ::segmentation_platform::proto::VersionInfo* PROTOBUF_NULLABLE version_info_;
    ::segmentation_platform::proto::TrainingOutputs* PROTOBUF_NULLABLE training_outputs_;
    ::segmentation_platform::proto::OutputConfig* PROTOBUF_NULLABLE output_config_;
    ::uint64_t bucket_duration_;
    ::int64_t signal_storage_length_;
    ::int64_t min_signal_collection_length_;
    ::int64_t result_time_to_live_;
    int time_unit_;
    bool upload_tensors_;
    ::int64_t fixed_prediction_timestamp_;
    int return_type_;
    ::google::protobuf::internal::MapFieldLite<::std::string, ::segmentation_platform::proto::SegmentationModelMetadata_DiscreteMapping> discrete_mappings_;
    PROTOBUF_TSAN_DECLARE_MEMBER
  };
  union { Impl_ _impl_; };
  friend struct ::TableStruct_components_2fsegmentation_5fplatform_2fpublic_2fproto_2fmodel_5fmetadata_2eproto;
};

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




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


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

// VersionInfo

// optional int32 metadata_min_version = 1;
inline bool VersionInfo::has_metadata_min_version() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000001U);
  return value;
}
inline void VersionInfo::clear_metadata_min_version() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.metadata_min_version_ = 0;
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
}
inline ::int32_t VersionInfo::metadata_min_version() const {
  // @@protoc_insertion_point(field_get:segmentation_platform.proto.VersionInfo.metadata_min_version)
  return _internal_metadata_min_version();
}
inline void VersionInfo::set_metadata_min_version(::int32_t value) {
  _internal_set_metadata_min_version(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_set:segmentation_platform.proto.VersionInfo.metadata_min_version)
}
inline ::int32_t VersionInfo::_internal_metadata_min_version() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.metadata_min_version_;
}
inline void VersionInfo::_internal_set_metadata_min_version(::int32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.metadata_min_version_ = value;
}

// optional int32 metadata_cur_version = 2;
inline bool VersionInfo::has_metadata_cur_version() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000002U);
  return value;
}
inline void VersionInfo::clear_metadata_cur_version() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.metadata_cur_version_ = 0;
  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
}
inline ::int32_t VersionInfo::metadata_cur_version() const {
  // @@protoc_insertion_point(field_get:segmentation_platform.proto.VersionInfo.metadata_cur_version)
  return _internal_metadata_cur_version();
}
inline void VersionInfo::set_metadata_cur_version(::int32_t value) {
  _internal_set_metadata_cur_version(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  // @@protoc_insertion_point(field_set:segmentation_platform.proto.VersionInfo.metadata_cur_version)
}
inline ::int32_t VersionInfo::_internal_metadata_cur_version() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.metadata_cur_version_;
}
inline void VersionInfo::_internal_set_metadata_cur_version(::int32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.metadata_cur_version_ = value;
}

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

// UMAFeature

// optional .segmentation_platform.proto.SignalType type = 1;
inline bool UMAFeature::has_type() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000010U);
  return value;
}
inline void UMAFeature::clear_type() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.type_ = 0;
  ClearHasBit(_impl_._has_bits_[0], 0x00000010U);
}
inline ::segmentation_platform::proto::SignalType UMAFeature::type() const {
  // @@protoc_insertion_point(field_get:segmentation_platform.proto.UMAFeature.type)
  return _internal_type();
}
inline void UMAFeature::set_type(::segmentation_platform::proto::SignalType value) {
  _internal_set_type(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000010U);
  // @@protoc_insertion_point(field_set:segmentation_platform.proto.UMAFeature.type)
}
inline ::segmentation_platform::proto::SignalType UMAFeature::_internal_type() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return static_cast<::segmentation_platform::proto::SignalType>(_impl_.type_);
}
inline void UMAFeature::_internal_set_type(::segmentation_platform::proto::SignalType value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);

                                          assert(::google::protobuf::internal::ValidateEnum(
                                              value, ::segmentation_platform::proto::SignalType_internal_data_));
                                          _impl_.type_ = value;
}

// optional string name = 2;
inline bool UMAFeature::has_name() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000004U);
  return value;
}
inline void UMAFeature::clear_name() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.name_.ClearToEmpty();
  ClearHasBit(_impl_._has_bits_[0], 0x00000004U);
}
inline const ::std::string& UMAFeature::name() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:segmentation_platform.proto.UMAFeature.name)
  return _internal_name();
}
template <typename Arg_, typename... Args_>
PROTOBUF_ALWAYS_INLINE void UMAFeature::set_name(Arg_&& arg, Args_... args) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  SetHasBit(_impl_._has_bits_[0], 0x00000004U);
  _impl_.name_.Set(static_cast<Arg_&&>(arg), args..., GetArena());
  // @@protoc_insertion_point(field_set:segmentation_platform.proto.UMAFeature.name)
}
inline ::std::string* PROTOBUF_NONNULL UMAFeature::mutable_name()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000004U);
  ::std::string* _s = _internal_mutable_name();
  // @@protoc_insertion_point(field_mutable:segmentation_platform.proto.UMAFeature.name)
  return _s;
}
inline const ::std::string& UMAFeature::_internal_name() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.name_.Get();
}
inline void UMAFeature::_internal_set_name(const ::std::string& value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.name_.Set(value, GetArena());
}
inline ::std::string* PROTOBUF_NONNULL UMAFeature::_internal_mutable_name() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _impl_.name_.Mutable( GetArena());
}
inline ::std::string* PROTOBUF_NULLABLE UMAFeature::release_name() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:segmentation_platform.proto.UMAFeature.name)
  if (!CheckHasBit(_impl_._has_bits_[0], 0x00000004U)) {
    return nullptr;
  }
  ClearHasBit(_impl_._has_bits_[0], 0x00000004U);
  auto* released = _impl_.name_.Release();
  if (::google::protobuf::internal::DebugHardenForceCopyDefaultString()) {
    _impl_.name_.Set("", GetArena());
  }
  return released;
}
inline void UMAFeature::set_allocated_name(::std::string* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000004U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000004U);
  }
  _impl_.name_.SetAllocated(value, GetArena());
  if (::google::protobuf::internal::DebugHardenForceCopyDefaultString() && _impl_.name_.IsDefault()) {
    _impl_.name_.Set("", GetArena());
  }
  // @@protoc_insertion_point(field_set_allocated:segmentation_platform.proto.UMAFeature.name)
}

// optional fixed64 name_hash = 3;
inline bool UMAFeature::has_name_hash() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000008U);
  return value;
}
inline void UMAFeature::clear_name_hash() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.name_hash_ = ::uint64_t{0u};
  ClearHasBit(_impl_._has_bits_[0], 0x00000008U);
}
inline ::uint64_t UMAFeature::name_hash() const {
  // @@protoc_insertion_point(field_get:segmentation_platform.proto.UMAFeature.name_hash)
  return _internal_name_hash();
}
inline void UMAFeature::set_name_hash(::uint64_t value) {
  _internal_set_name_hash(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000008U);
  // @@protoc_insertion_point(field_set:segmentation_platform.proto.UMAFeature.name_hash)
}
inline ::uint64_t UMAFeature::_internal_name_hash() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.name_hash_;
}
inline void UMAFeature::_internal_set_name_hash(::uint64_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.name_hash_ = value;
}

// optional uint64 bucket_count = 4;
inline bool UMAFeature::has_bucket_count() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000040U);
  return value;
}
inline void UMAFeature::clear_bucket_count() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.bucket_count_ = ::uint64_t{0u};
  ClearHasBit(_impl_._has_bits_[0], 0x00000040U);
}
inline ::uint64_t UMAFeature::bucket_count() const {
  // @@protoc_insertion_point(field_get:segmentation_platform.proto.UMAFeature.bucket_count)
  return _internal_bucket_count();
}
inline void UMAFeature::set_bucket_count(::uint64_t value) {
  _internal_set_bucket_count(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000040U);
  // @@protoc_insertion_point(field_set:segmentation_platform.proto.UMAFeature.bucket_count)
}
inline ::uint64_t UMAFeature::_internal_bucket_count() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.bucket_count_;
}
inline void UMAFeature::_internal_set_bucket_count(::uint64_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.bucket_count_ = value;
}

// optional uint64 tensor_length = 5;
inline bool UMAFeature::has_tensor_length() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000080U);
  return value;
}
inline void UMAFeature::clear_tensor_length() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.tensor_length_ = ::uint64_t{0u};
  ClearHasBit(_impl_._has_bits_[0], 0x00000080U);
}
inline ::uint64_t UMAFeature::tensor_length() const {
  // @@protoc_insertion_point(field_get:segmentation_platform.proto.UMAFeature.tensor_length)
  return _internal_tensor_length();
}
inline void UMAFeature::set_tensor_length(::uint64_t value) {
  _internal_set_tensor_length(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000080U);
  // @@protoc_insertion_point(field_set:segmentation_platform.proto.UMAFeature.tensor_length)
}
inline ::uint64_t UMAFeature::_internal_tensor_length() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.tensor_length_;
}
inline void UMAFeature::_internal_set_tensor_length(::uint64_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.tensor_length_ = value;
}

// optional .segmentation_platform.proto.Aggregation aggregation = 6;
inline bool UMAFeature::has_aggregation() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000020U);
  return value;
}
inline void UMAFeature::clear_aggregation() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.aggregation_ = 0;
  ClearHasBit(_impl_._has_bits_[0], 0x00000020U);
}
inline ::segmentation_platform::proto::Aggregation UMAFeature::aggregation() const {
  // @@protoc_insertion_point(field_get:segmentation_platform.proto.UMAFeature.aggregation)
  return _internal_aggregation();
}
inline void UMAFeature::set_aggregation(::segmentation_platform::proto::Aggregation value) {
  _internal_set_aggregation(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000020U);
  // @@protoc_insertion_point(field_set:segmentation_platform.proto.UMAFeature.aggregation)
}
inline ::segmentation_platform::proto::Aggregation UMAFeature::_internal_aggregation() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return static_cast<::segmentation_platform::proto::Aggregation>(_impl_.aggregation_);
}
inline void UMAFeature::_internal_set_aggregation(::segmentation_platform::proto::Aggregation value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);

                                          assert(::google::protobuf::internal::ValidateEnum(
                                              value, ::segmentation_platform::proto::Aggregation_internal_data_));
                                          _impl_.aggregation_ = value;
}

// repeated int32 enum_ids = 7;
inline int UMAFeature::_internal_enum_ids_size() const {
  return _internal_enum_ids().size();
}
inline int UMAFeature::enum_ids_size() const {
  return _internal_enum_ids_size();
}
inline void UMAFeature::clear_enum_ids() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.enum_ids_.Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
}
inline ::int32_t UMAFeature::enum_ids(int index) const {
  // @@protoc_insertion_point(field_get:segmentation_platform.proto.UMAFeature.enum_ids)
  return _internal_enum_ids().Get(index);
}
inline void UMAFeature::set_enum_ids(int index, ::int32_t value) {
  _internal_mutable_enum_ids()->Set(index, value);
  // @@protoc_insertion_point(field_set:segmentation_platform.proto.UMAFeature.enum_ids)
}
inline void UMAFeature::add_enum_ids(::int32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _internal_mutable_enum_ids()
      ->InternalAddWithArena<const ::google::protobuf::MessageLite*>(
          internal_visibility(), this, value);
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_add:segmentation_platform.proto.UMAFeature.enum_ids)
}
inline const ::google::protobuf::RepeatedField<::int32_t>& UMAFeature::enum_ids() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_list:segmentation_platform.proto.UMAFeature.enum_ids)
  return _internal_enum_ids();
}
inline ::google::protobuf::RepeatedField<::int32_t>* PROTOBUF_NONNULL UMAFeature::mutable_enum_ids()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_mutable_list:segmentation_platform.proto.UMAFeature.enum_ids)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _internal_mutable_enum_ids();
}
inline const ::google::protobuf::RepeatedField<::int32_t>&
UMAFeature::_internal_enum_ids() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.enum_ids_;
}
inline ::google::protobuf::RepeatedField<::int32_t>* PROTOBUF_NONNULL
UMAFeature::_internal_mutable_enum_ids() {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return &_impl_.enum_ids_;
}

// repeated float default_values = 8;
inline int UMAFeature::_internal_default_values_size() const {
  return _internal_default_values().size();
}
inline int UMAFeature::default_values_size() const {
  return _internal_default_values_size();
}
inline void UMAFeature::clear_default_values() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.default_values_.Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
}
inline float UMAFeature::default_values(int index) const {
  // @@protoc_insertion_point(field_get:segmentation_platform.proto.UMAFeature.default_values)
  return _internal_default_values().Get(index);
}
inline void UMAFeature::set_default_values(int index, float value) {
  _internal_mutable_default_values()->Set(index, value);
  // @@protoc_insertion_point(field_set:segmentation_platform.proto.UMAFeature.default_values)
}
inline void UMAFeature::add_default_values(float value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _internal_mutable_default_values()
      ->InternalAddWithArena<const ::google::protobuf::MessageLite*>(
          internal_visibility(), this, value);
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  // @@protoc_insertion_point(field_add:segmentation_platform.proto.UMAFeature.default_values)
}
inline const ::google::protobuf::RepeatedField<float>& UMAFeature::default_values() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_list:segmentation_platform.proto.UMAFeature.default_values)
  return _internal_default_values();
}
inline ::google::protobuf::RepeatedField<float>* PROTOBUF_NONNULL UMAFeature::mutable_default_values()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  // @@protoc_insertion_point(field_mutable_list:segmentation_platform.proto.UMAFeature.default_values)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _internal_mutable_default_values();
}
inline const ::google::protobuf::RepeatedField<float>&
UMAFeature::_internal_default_values() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.default_values_;
}
inline ::google::protobuf::RepeatedField<float>* PROTOBUF_NONNULL
UMAFeature::_internal_mutable_default_values() {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return &_impl_.default_values_;
}

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

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

// CustomInput

// optional int32 tensor_length = 1;
inline bool CustomInput::has_tensor_length() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000004U);
  return value;
}
inline void CustomInput::clear_tensor_length() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.tensor_length_ = 0;
  ClearHasBit(_impl_._has_bits_[0], 0x00000004U);
}
inline ::int32_t CustomInput::tensor_length() const {
  // @@protoc_insertion_point(field_get:segmentation_platform.proto.CustomInput.tensor_length)
  return _internal_tensor_length();
}
inline void CustomInput::set_tensor_length(::int32_t value) {
  _internal_set_tensor_length(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000004U);
  // @@protoc_insertion_point(field_set:segmentation_platform.proto.CustomInput.tensor_length)
}
inline ::int32_t CustomInput::_internal_tensor_length() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.tensor_length_;
}
inline void CustomInput::_internal_set_tensor_length(::int32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.tensor_length_ = value;
}

// optional .segmentation_platform.proto.CustomInput.FillPolicy fill_policy = 2;
inline bool CustomInput::has_fill_policy() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000008U);
  return value;
}
inline void CustomInput::clear_fill_policy() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.fill_policy_ = 0;
  ClearHasBit(_impl_._has_bits_[0], 0x00000008U);
}
inline ::segmentation_platform::proto::CustomInput_FillPolicy CustomInput::fill_policy() const {
  // @@protoc_insertion_point(field_get:segmentation_platform.proto.CustomInput.fill_policy)
  return _internal_fill_policy();
}
inline void CustomInput::set_fill_policy(::segmentation_platform::proto::CustomInput_FillPolicy value) {
  _internal_set_fill_policy(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000008U);
  // @@protoc_insertion_point(field_set:segmentation_platform.proto.CustomInput.fill_policy)
}
inline ::segmentation_platform::proto::CustomInput_FillPolicy CustomInput::_internal_fill_policy() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return static_cast<::segmentation_platform::proto::CustomInput_FillPolicy>(_impl_.fill_policy_);
}
inline void CustomInput::_internal_set_fill_policy(::segmentation_platform::proto::CustomInput_FillPolicy value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);

                                          assert(::google::protobuf::internal::ValidateEnum(
                                              value, ::segmentation_platform::proto::CustomInput_FillPolicy_internal_data_));
                                          _impl_.fill_policy_ = value;
}

// repeated float default_value = 3;
inline int CustomInput::_internal_default_value_size() const {
  return _internal_default_value().size();
}
inline int CustomInput::default_value_size() const {
  return _internal_default_value_size();
}
inline void CustomInput::clear_default_value() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.default_value_.Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
}
inline float CustomInput::default_value(int index) const {
  // @@protoc_insertion_point(field_get:segmentation_platform.proto.CustomInput.default_value)
  return _internal_default_value().Get(index);
}
inline void CustomInput::set_default_value(int index, float value) {
  _internal_mutable_default_value()->Set(index, value);
  // @@protoc_insertion_point(field_set:segmentation_platform.proto.CustomInput.default_value)
}
inline void CustomInput::add_default_value(float value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _internal_mutable_default_value()
      ->InternalAddWithArena<const ::google::protobuf::MessageLite*>(
          internal_visibility(), this, value);
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_add:segmentation_platform.proto.CustomInput.default_value)
}
inline const ::google::protobuf::RepeatedField<float>& CustomInput::default_value() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_list:segmentation_platform.proto.CustomInput.default_value)
  return _internal_default_value();
}
inline ::google::protobuf::RepeatedField<float>* PROTOBUF_NONNULL CustomInput::mutable_default_value()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_mutable_list:segmentation_platform.proto.CustomInput.default_value)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _internal_mutable_default_value();
}
inline const ::google::protobuf::RepeatedField<float>&
CustomInput::_internal_default_value() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.default_value_;
}
inline ::google::protobuf::RepeatedField<float>* PROTOBUF_NONNULL
CustomInput::_internal_mutable_default_value() {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return &_impl_.default_value_;
}

// map<string, string> additional_args = 4;
inline int CustomInput::_internal_additional_args_size() const {
  return _internal_additional_args().size();
}
inline int CustomInput::additional_args_size() const {
  return _internal_additional_args_size();
}
inline void CustomInput::clear_additional_args() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.additional_args_.Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000010U);
}
inline const ::google::protobuf::Map<::std::string, ::std::string>& CustomInput::_internal_additional_args() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.additional_args_.GetMap();
}
inline const ::google::protobuf::Map<::std::string, ::std::string>& CustomInput::additional_args() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_map:segmentation_platform.proto.CustomInput.additional_args)
  return _internal_additional_args();
}
inline ::google::protobuf::Map<::std::string, ::std::string>* PROTOBUF_NONNULL CustomInput::_internal_mutable_additional_args() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _impl_.additional_args_.MutableMap();
}
inline ::google::protobuf::Map<::std::string, ::std::string>* PROTOBUF_NONNULL CustomInput::mutable_additional_args()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000010U);
  // @@protoc_insertion_point(field_mutable_map:segmentation_platform.proto.CustomInput.additional_args)
  return _internal_mutable_additional_args();
}

// optional string name = 5;
inline bool CustomInput::has_name() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000002U);
  return value;
}
inline void CustomInput::clear_name() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.name_.ClearToEmpty();
  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
}
inline const ::std::string& CustomInput::name() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:segmentation_platform.proto.CustomInput.name)
  return _internal_name();
}
template <typename Arg_, typename... Args_>
PROTOBUF_ALWAYS_INLINE void CustomInput::set_name(Arg_&& arg, Args_... args) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  _impl_.name_.Set(static_cast<Arg_&&>(arg), args..., GetArena());
  // @@protoc_insertion_point(field_set:segmentation_platform.proto.CustomInput.name)
}
inline ::std::string* PROTOBUF_NONNULL CustomInput::mutable_name()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  ::std::string* _s = _internal_mutable_name();
  // @@protoc_insertion_point(field_mutable:segmentation_platform.proto.CustomInput.name)
  return _s;
}
inline const ::std::string& CustomInput::_internal_name() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.name_.Get();
}
inline void CustomInput::_internal_set_name(const ::std::string& value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.name_.Set(value, GetArena());
}
inline ::std::string* PROTOBUF_NONNULL CustomInput::_internal_mutable_name() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _impl_.name_.Mutable( GetArena());
}
inline ::std::string* PROTOBUF_NULLABLE CustomInput::release_name() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:segmentation_platform.proto.CustomInput.name)
  if (!CheckHasBit(_impl_._has_bits_[0], 0x00000002U)) {
    return nullptr;
  }
  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
  auto* released = _impl_.name_.Release();
  if (::google::protobuf::internal::DebugHardenForceCopyDefaultString()) {
    _impl_.name_.Set("", GetArena());
  }
  return released;
}
inline void CustomInput::set_allocated_name(::std::string* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
  }
  _impl_.name_.SetAllocated(value, GetArena());
  if (::google::protobuf::internal::DebugHardenForceCopyDefaultString() && _impl_.name_.IsDefault()) {
    _impl_.name_.Set("", GetArena());
  }
  // @@protoc_insertion_point(field_set_allocated:segmentation_platform.proto.CustomInput.name)
}

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

// SignalFilterConfig_UkmEvent

// optional uint64 event_hash = 1;
inline bool SignalFilterConfig_UkmEvent::has_event_hash() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000002U);
  return value;
}
inline void SignalFilterConfig_UkmEvent::clear_event_hash() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.event_hash_ = ::uint64_t{0u};
  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
}
inline ::uint64_t SignalFilterConfig_UkmEvent::event_hash() const {
  // @@protoc_insertion_point(field_get:segmentation_platform.proto.SignalFilterConfig.UkmEvent.event_hash)
  return _internal_event_hash();
}
inline void SignalFilterConfig_UkmEvent::set_event_hash(::uint64_t value) {
  _internal_set_event_hash(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  // @@protoc_insertion_point(field_set:segmentation_platform.proto.SignalFilterConfig.UkmEvent.event_hash)
}
inline ::uint64_t SignalFilterConfig_UkmEvent::_internal_event_hash() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.event_hash_;
}
inline void SignalFilterConfig_UkmEvent::_internal_set_event_hash(::uint64_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.event_hash_ = value;
}

// repeated uint64 metric_hash_filter = 2;
inline int SignalFilterConfig_UkmEvent::_internal_metric_hash_filter_size() const {
  return _internal_metric_hash_filter().size();
}
inline int SignalFilterConfig_UkmEvent::metric_hash_filter_size() const {
  return _internal_metric_hash_filter_size();
}
inline void SignalFilterConfig_UkmEvent::clear_metric_hash_filter() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.metric_hash_filter_.Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
}
inline ::uint64_t SignalFilterConfig_UkmEvent::metric_hash_filter(int index) const {
  // @@protoc_insertion_point(field_get:segmentation_platform.proto.SignalFilterConfig.UkmEvent.metric_hash_filter)
  return _internal_metric_hash_filter().Get(index);
}
inline void SignalFilterConfig_UkmEvent::set_metric_hash_filter(int index, ::uint64_t value) {
  _internal_mutable_metric_hash_filter()->Set(index, value);
  // @@protoc_insertion_point(field_set:segmentation_platform.proto.SignalFilterConfig.UkmEvent.metric_hash_filter)
}
inline void SignalFilterConfig_UkmEvent::add_metric_hash_filter(::uint64_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _internal_mutable_metric_hash_filter()
      ->InternalAddWithArena<const ::google::protobuf::MessageLite*>(
          internal_visibility(), this, value);
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_add:segmentation_platform.proto.SignalFilterConfig.UkmEvent.metric_hash_filter)
}
inline const ::google::protobuf::RepeatedField<::uint64_t>& SignalFilterConfig_UkmEvent::metric_hash_filter() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_list:segmentation_platform.proto.SignalFilterConfig.UkmEvent.metric_hash_filter)
  return _internal_metric_hash_filter();
}
inline ::google::protobuf::RepeatedField<::uint64_t>* PROTOBUF_NONNULL SignalFilterConfig_UkmEvent::mutable_metric_hash_filter()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_mutable_list:segmentation_platform.proto.SignalFilterConfig.UkmEvent.metric_hash_filter)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _internal_mutable_metric_hash_filter();
}
inline const ::google::protobuf::RepeatedField<::uint64_t>&
SignalFilterConfig_UkmEvent::_internal_metric_hash_filter() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.metric_hash_filter_;
}
inline ::google::protobuf::RepeatedField<::uint64_t>* PROTOBUF_NONNULL
SignalFilterConfig_UkmEvent::_internal_mutable_metric_hash_filter() {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return &_impl_.metric_hash_filter_;
}

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

// SignalFilterConfig

// repeated .segmentation_platform.proto.SignalFilterConfig.UkmEvent ukm_events = 1;
inline int SignalFilterConfig::_internal_ukm_events_size() const {
  return _internal_ukm_events().size();
}
inline int SignalFilterConfig::ukm_events_size() const {
  return _internal_ukm_events_size();
}
inline void SignalFilterConfig::clear_ukm_events() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.ukm_events_.Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
}
inline const ::segmentation_platform::proto::SignalFilterConfig_UkmEvent& SignalFilterConfig::ukm_events(int index) const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:segmentation_platform.proto.SignalFilterConfig.ukm_events)
  return _internal_ukm_events().Get(index);
}
inline ::segmentation_platform::proto::SignalFilterConfig_UkmEvent* PROTOBUF_NONNULL SignalFilterConfig::mutable_ukm_events(int index)
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_mutable:segmentation_platform.proto.SignalFilterConfig.ukm_events)
  return _internal_mutable_ukm_events()->Mutable(index);
}
inline ::segmentation_platform::proto::SignalFilterConfig_UkmEvent* PROTOBUF_NONNULL SignalFilterConfig::add_ukm_events()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  ::segmentation_platform::proto::SignalFilterConfig_UkmEvent* _add =
      _internal_mutable_ukm_events()->InternalAddWithArena(
          ::google::protobuf::MessageLite::internal_visibility(), GetArena());
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_add:segmentation_platform.proto.SignalFilterConfig.ukm_events)
  return _add;
}
inline const ::google::protobuf::RepeatedPtrField<::segmentation_platform::proto::SignalFilterConfig_UkmEvent>& SignalFilterConfig::ukm_events() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_list:segmentation_platform.proto.SignalFilterConfig.ukm_events)
  return _internal_ukm_events();
}
inline ::google::protobuf::RepeatedPtrField<::segmentation_platform::proto::SignalFilterConfig_UkmEvent>* PROTOBUF_NONNULL
SignalFilterConfig::mutable_ukm_events() ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_mutable_list:segmentation_platform.proto.SignalFilterConfig.ukm_events)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _internal_mutable_ukm_events();
}
inline const ::google::protobuf::RepeatedPtrField<::segmentation_platform::proto::SignalFilterConfig_UkmEvent>&
SignalFilterConfig::_internal_ukm_events() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.ukm_events_;
}
inline ::google::protobuf::RepeatedPtrField<::segmentation_platform::proto::SignalFilterConfig_UkmEvent>* PROTOBUF_NONNULL
SignalFilterConfig::_internal_mutable_ukm_events() {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return &_impl_.ukm_events_;
}

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

// SqlFeature_BindValue

// repeated int32 bind_field_index = 1;
inline int SqlFeature_BindValue::_internal_bind_field_index_size() const {
  return _internal_bind_field_index().size();
}
inline int SqlFeature_BindValue::bind_field_index_size() const {
  return _internal_bind_field_index_size();
}
inline void SqlFeature_BindValue::clear_bind_field_index() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.bind_field_index_.Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
}
inline ::int32_t SqlFeature_BindValue::bind_field_index(int index) const {
  // @@protoc_insertion_point(field_get:segmentation_platform.proto.SqlFeature.BindValue.bind_field_index)
  return _internal_bind_field_index().Get(index);
}
inline void SqlFeature_BindValue::set_bind_field_index(int index, ::int32_t value) {
  _internal_mutable_bind_field_index()->Set(index, value);
  // @@protoc_insertion_point(field_set:segmentation_platform.proto.SqlFeature.BindValue.bind_field_index)
}
inline void SqlFeature_BindValue::add_bind_field_index(::int32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _internal_mutable_bind_field_index()
      ->InternalAddWithArena<const ::google::protobuf::MessageLite*>(
          internal_visibility(), this, value);
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_add:segmentation_platform.proto.SqlFeature.BindValue.bind_field_index)
}
inline const ::google::protobuf::RepeatedField<::int32_t>& SqlFeature_BindValue::bind_field_index() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_list:segmentation_platform.proto.SqlFeature.BindValue.bind_field_index)
  return _internal_bind_field_index();
}
inline ::google::protobuf::RepeatedField<::int32_t>* PROTOBUF_NONNULL SqlFeature_BindValue::mutable_bind_field_index()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_mutable_list:segmentation_platform.proto.SqlFeature.BindValue.bind_field_index)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _internal_mutable_bind_field_index();
}
inline const ::google::protobuf::RepeatedField<::int32_t>&
SqlFeature_BindValue::_internal_bind_field_index() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.bind_field_index_;
}
inline ::google::protobuf::RepeatedField<::int32_t>* PROTOBUF_NONNULL
SqlFeature_BindValue::_internal_mutable_bind_field_index() {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return &_impl_.bind_field_index_;
}

// optional .segmentation_platform.proto.SqlFeature.BindValue.ParamType param_type = 2;
inline bool SqlFeature_BindValue::has_param_type() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000004U);
  return value;
}
inline void SqlFeature_BindValue::clear_param_type() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.param_type_ = 0;
  ClearHasBit(_impl_._has_bits_[0], 0x00000004U);
}
inline ::segmentation_platform::proto::SqlFeature_BindValue_ParamType SqlFeature_BindValue::param_type() const {
  // @@protoc_insertion_point(field_get:segmentation_platform.proto.SqlFeature.BindValue.param_type)
  return _internal_param_type();
}
inline void SqlFeature_BindValue::set_param_type(::segmentation_platform::proto::SqlFeature_BindValue_ParamType value) {
  _internal_set_param_type(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000004U);
  // @@protoc_insertion_point(field_set:segmentation_platform.proto.SqlFeature.BindValue.param_type)
}
inline ::segmentation_platform::proto::SqlFeature_BindValue_ParamType SqlFeature_BindValue::_internal_param_type() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return static_cast<::segmentation_platform::proto::SqlFeature_BindValue_ParamType>(_impl_.param_type_);
}
inline void SqlFeature_BindValue::_internal_set_param_type(::segmentation_platform::proto::SqlFeature_BindValue_ParamType value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);

                                          assert(::google::protobuf::internal::ValidateEnum(
                                              value, ::segmentation_platform::proto::SqlFeature_BindValue_ParamType_internal_data_));
                                          _impl_.param_type_ = value;
}

// optional .segmentation_platform.proto.CustomInput value = 3;
inline bool SqlFeature_BindValue::has_value() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000002U);
  PROTOBUF_ASSUME(!value || _impl_.value_ != nullptr);
  return value;
}
inline void SqlFeature_BindValue::clear_value() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.value_ != nullptr) _impl_.value_->Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
}
inline const ::segmentation_platform::proto::CustomInput& SqlFeature_BindValue::_internal_value() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::segmentation_platform::proto::CustomInput* p = _impl_.value_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::segmentation_platform::proto::CustomInput>(&::segmentation_platform::proto::CustomInput_globals_);
}
inline const ::segmentation_platform::proto::CustomInput& SqlFeature_BindValue::value() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:segmentation_platform.proto.SqlFeature.BindValue.value)
  return _internal_value();
}
inline void SqlFeature_BindValue::unsafe_arena_set_allocated_value(
    ::segmentation_platform::proto::CustomInput* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.value_);
  }
  _impl_.value_ = reinterpret_cast<::segmentation_platform::proto::CustomInput*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:segmentation_platform.proto.SqlFeature.BindValue.value)
}
inline ::segmentation_platform::proto::CustomInput* PROTOBUF_NULLABLE SqlFeature_BindValue::release_value() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
  ::segmentation_platform::proto::CustomInput* released = _impl_.value_;
  _impl_.value_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::segmentation_platform::proto::CustomInput* PROTOBUF_NULLABLE SqlFeature_BindValue::unsafe_arena_release_value() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:segmentation_platform.proto.SqlFeature.BindValue.value)

  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
  ::segmentation_platform::proto::CustomInput* temp = _impl_.value_;
  _impl_.value_ = nullptr;
  return temp;
}
inline ::segmentation_platform::proto::CustomInput* PROTOBUF_NONNULL SqlFeature_BindValue::_internal_mutable_value() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.value_ == nullptr) {
    auto* p = ::google::protobuf::MessageLite::DefaultConstruct<::segmentation_platform::proto::CustomInput>(GetArena());
    _impl_.value_ = reinterpret_cast<::segmentation_platform::proto::CustomInput*>(p);
  }
  return _impl_.value_;
}
inline ::segmentation_platform::proto::CustomInput* PROTOBUF_NONNULL SqlFeature_BindValue::mutable_value()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  ::segmentation_platform::proto::CustomInput* _msg = _internal_mutable_value();
  // @@protoc_insertion_point(field_mutable:segmentation_platform.proto.SqlFeature.BindValue.value)
  return _msg;
}
inline void SqlFeature_BindValue::set_allocated_value(::segmentation_platform::proto::CustomInput* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.value_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
  }

  _impl_.value_ = reinterpret_cast<::segmentation_platform::proto::CustomInput*>(value);
  // @@protoc_insertion_point(field_set_allocated:segmentation_platform.proto.SqlFeature.BindValue.value)
}

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

// SqlFeature

// optional string sql = 1;
inline bool SqlFeature::has_sql() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000002U);
  return value;
}
inline void SqlFeature::clear_sql() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.sql_.ClearToEmpty();
  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
}
inline const ::std::string& SqlFeature::sql() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:segmentation_platform.proto.SqlFeature.sql)
  return _internal_sql();
}
template <typename Arg_, typename... Args_>
PROTOBUF_ALWAYS_INLINE void SqlFeature::set_sql(Arg_&& arg, Args_... args) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  _impl_.sql_.Set(static_cast<Arg_&&>(arg), args..., GetArena());
  // @@protoc_insertion_point(field_set:segmentation_platform.proto.SqlFeature.sql)
}
inline ::std::string* PROTOBUF_NONNULL SqlFeature::mutable_sql()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  ::std::string* _s = _internal_mutable_sql();
  // @@protoc_insertion_point(field_mutable:segmentation_platform.proto.SqlFeature.sql)
  return _s;
}
inline const ::std::string& SqlFeature::_internal_sql() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.sql_.Get();
}
inline void SqlFeature::_internal_set_sql(const ::std::string& value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.sql_.Set(value, GetArena());
}
inline ::std::string* PROTOBUF_NONNULL SqlFeature::_internal_mutable_sql() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _impl_.sql_.Mutable( GetArena());
}
inline ::std::string* PROTOBUF_NULLABLE SqlFeature::release_sql() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:segmentation_platform.proto.SqlFeature.sql)
  if (!CheckHasBit(_impl_._has_bits_[0], 0x00000002U)) {
    return nullptr;
  }
  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
  auto* released = _impl_.sql_.Release();
  if (::google::protobuf::internal::DebugHardenForceCopyDefaultString()) {
    _impl_.sql_.Set("", GetArena());
  }
  return released;
}
inline void SqlFeature::set_allocated_sql(::std::string* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
  }
  _impl_.sql_.SetAllocated(value, GetArena());
  if (::google::protobuf::internal::DebugHardenForceCopyDefaultString() && _impl_.sql_.IsDefault()) {
    _impl_.sql_.Set("", GetArena());
  }
  // @@protoc_insertion_point(field_set_allocated:segmentation_platform.proto.SqlFeature.sql)
}

// optional .segmentation_platform.proto.SignalFilterConfig signal_filter = 2;
inline bool SqlFeature::has_signal_filter() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000008U);
  PROTOBUF_ASSUME(!value || _impl_.signal_filter_ != nullptr);
  return value;
}
inline void SqlFeature::clear_signal_filter() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.signal_filter_ != nullptr) _impl_.signal_filter_->Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000008U);
}
inline const ::segmentation_platform::proto::SignalFilterConfig& SqlFeature::_internal_signal_filter() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::segmentation_platform::proto::SignalFilterConfig* p = _impl_.signal_filter_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::segmentation_platform::proto::SignalFilterConfig>(&::segmentation_platform::proto::SignalFilterConfig_globals_);
}
inline const ::segmentation_platform::proto::SignalFilterConfig& SqlFeature::signal_filter() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:segmentation_platform.proto.SqlFeature.signal_filter)
  return _internal_signal_filter();
}
inline void SqlFeature::unsafe_arena_set_allocated_signal_filter(
    ::segmentation_platform::proto::SignalFilterConfig* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.signal_filter_);
  }
  _impl_.signal_filter_ = reinterpret_cast<::segmentation_platform::proto::SignalFilterConfig*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000008U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000008U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:segmentation_platform.proto.SqlFeature.signal_filter)
}
inline ::segmentation_platform::proto::SignalFilterConfig* PROTOBUF_NULLABLE SqlFeature::release_signal_filter() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[0], 0x00000008U);
  ::segmentation_platform::proto::SignalFilterConfig* released = _impl_.signal_filter_;
  _impl_.signal_filter_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::segmentation_platform::proto::SignalFilterConfig* PROTOBUF_NULLABLE SqlFeature::unsafe_arena_release_signal_filter() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:segmentation_platform.proto.SqlFeature.signal_filter)

  ClearHasBit(_impl_._has_bits_[0], 0x00000008U);
  ::segmentation_platform::proto::SignalFilterConfig* temp = _impl_.signal_filter_;
  _impl_.signal_filter_ = nullptr;
  return temp;
}
inline ::segmentation_platform::proto::SignalFilterConfig* PROTOBUF_NONNULL SqlFeature::_internal_mutable_signal_filter() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.signal_filter_ == nullptr) {
    auto* p = ::google::protobuf::MessageLite::DefaultConstruct<::segmentation_platform::proto::SignalFilterConfig>(GetArena());
    _impl_.signal_filter_ = reinterpret_cast<::segmentation_platform::proto::SignalFilterConfig*>(p);
  }
  return _impl_.signal_filter_;
}
inline ::segmentation_platform::proto::SignalFilterConfig* PROTOBUF_NONNULL SqlFeature::mutable_signal_filter()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000008U);
  ::segmentation_platform::proto::SignalFilterConfig* _msg = _internal_mutable_signal_filter();
  // @@protoc_insertion_point(field_mutable:segmentation_platform.proto.SqlFeature.signal_filter)
  return _msg;
}
inline void SqlFeature::set_allocated_signal_filter(::segmentation_platform::proto::SignalFilterConfig* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.signal_filter_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[0], 0x00000008U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000008U);
  }

  _impl_.signal_filter_ = reinterpret_cast<::segmentation_platform::proto::SignalFilterConfig*>(value);
  // @@protoc_insertion_point(field_set_allocated:segmentation_platform.proto.SqlFeature.signal_filter)
}

// repeated .segmentation_platform.proto.SqlFeature.BindValue bind_values = 3;
inline int SqlFeature::_internal_bind_values_size() const {
  return _internal_bind_values().size();
}
inline int SqlFeature::bind_values_size() const {
  return _internal_bind_values_size();
}
inline void SqlFeature::clear_bind_values() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.bind_values_.Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
}
inline const ::segmentation_platform::proto::SqlFeature_BindValue& SqlFeature::bind_values(int index) const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:segmentation_platform.proto.SqlFeature.bind_values)
  return _internal_bind_values().Get(index);
}
inline ::segmentation_platform::proto::SqlFeature_BindValue* PROTOBUF_NONNULL SqlFeature::mutable_bind_values(int index)
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_mutable:segmentation_platform.proto.SqlFeature.bind_values)
  return _internal_mutable_bind_values()->Mutable(index);
}
inline ::segmentation_platform::proto::SqlFeature_BindValue* PROTOBUF_NONNULL SqlFeature::add_bind_values()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  ::segmentation_platform::proto::SqlFeature_BindValue* _add =
      _internal_mutable_bind_values()->InternalAddWithArena(
          ::google::protobuf::MessageLite::internal_visibility(), GetArena());
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_add:segmentation_platform.proto.SqlFeature.bind_values)
  return _add;
}
inline const ::google::protobuf::RepeatedPtrField<::segmentation_platform::proto::SqlFeature_BindValue>& SqlFeature::bind_values() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_list:segmentation_platform.proto.SqlFeature.bind_values)
  return _internal_bind_values();
}
inline ::google::protobuf::RepeatedPtrField<::segmentation_platform::proto::SqlFeature_BindValue>* PROTOBUF_NONNULL
SqlFeature::mutable_bind_values() ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_mutable_list:segmentation_platform.proto.SqlFeature.bind_values)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _internal_mutable_bind_values();
}
inline const ::google::protobuf::RepeatedPtrField<::segmentation_platform::proto::SqlFeature_BindValue>&
SqlFeature::_internal_bind_values() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.bind_values_;
}
inline ::google::protobuf::RepeatedPtrField<::segmentation_platform::proto::SqlFeature_BindValue>* PROTOBUF_NONNULL
SqlFeature::_internal_mutable_bind_values() {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return &_impl_.bind_values_;
}

// optional string name = 4;
inline bool SqlFeature::has_name() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000004U);
  return value;
}
inline void SqlFeature::clear_name() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.name_.ClearToEmpty();
  ClearHasBit(_impl_._has_bits_[0], 0x00000004U);
}
inline const ::std::string& SqlFeature::name() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:segmentation_platform.proto.SqlFeature.name)
  return _internal_name();
}
template <typename Arg_, typename... Args_>
PROTOBUF_ALWAYS_INLINE void SqlFeature::set_name(Arg_&& arg, Args_... args) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  SetHasBit(_impl_._has_bits_[0], 0x00000004U);
  _impl_.name_.Set(static_cast<Arg_&&>(arg), args..., GetArena());
  // @@protoc_insertion_point(field_set:segmentation_platform.proto.SqlFeature.name)
}
inline ::std::string* PROTOBUF_NONNULL SqlFeature::mutable_name()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000004U);
  ::std::string* _s = _internal_mutable_name();
  // @@protoc_insertion_point(field_mutable:segmentation_platform.proto.SqlFeature.name)
  return _s;
}
inline const ::std::string& SqlFeature::_internal_name() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.name_.Get();
}
inline void SqlFeature::_internal_set_name(const ::std::string& value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.name_.Set(value, GetArena());
}
inline ::std::string* PROTOBUF_NONNULL SqlFeature::_internal_mutable_name() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _impl_.name_.Mutable( GetArena());
}
inline ::std::string* PROTOBUF_NULLABLE SqlFeature::release_name() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:segmentation_platform.proto.SqlFeature.name)
  if (!CheckHasBit(_impl_._has_bits_[0], 0x00000004U)) {
    return nullptr;
  }
  ClearHasBit(_impl_._has_bits_[0], 0x00000004U);
  auto* released = _impl_.name_.Release();
  if (::google::protobuf::internal::DebugHardenForceCopyDefaultString()) {
    _impl_.name_.Set("", GetArena());
  }
  return released;
}
inline void SqlFeature::set_allocated_name(::std::string* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000004U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000004U);
  }
  _impl_.name_.SetAllocated(value, GetArena());
  if (::google::protobuf::internal::DebugHardenForceCopyDefaultString() && _impl_.name_.IsDefault()) {
    _impl_.name_.Set("", GetArena());
  }
  // @@protoc_insertion_point(field_set_allocated:segmentation_platform.proto.SqlFeature.name)
}

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

// InputFeature

// .segmentation_platform.proto.UMAFeature uma_feature = 1;
inline bool InputFeature::has_uma_feature() const {
  return Feature_case() == kUmaFeature;
}
inline bool InputFeature::_internal_has_uma_feature() const {
  return Feature_case() == kUmaFeature;
}
inline void InputFeature::set_has_uma_feature() {
  _impl_._oneof_case_[0] = kUmaFeature;
}
inline void InputFeature::clear_uma_feature() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (Feature_case() == kUmaFeature) {
    if (GetArena() == nullptr) {
      delete _impl_.Feature_.uma_feature_;
    } else if (::google::protobuf::internal::DebugHardenClearOneofMessageOnArena()) {
      if (_impl_.Feature_.uma_feature_ != nullptr) {
        _impl_.Feature_.uma_feature_->Clear();
      }
    }
    clear_has_Feature();
  }
}
inline ::segmentation_platform::proto::UMAFeature* PROTOBUF_NULLABLE InputFeature::release_uma_feature() {
  // @@protoc_insertion_point(field_release:segmentation_platform.proto.InputFeature.uma_feature)
  if (Feature_case() == kUmaFeature) {
    clear_has_Feature();
    auto* temp = reinterpret_cast<::segmentation_platform::proto::UMAFeature*>(_impl_.Feature_.uma_feature_);
    if (GetArena() != nullptr) {
      temp = ::google::protobuf::internal::DuplicateIfNonNull(temp);
    }
    _impl_.Feature_.uma_feature_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::segmentation_platform::proto::UMAFeature& InputFeature::_internal_uma_feature() const {
  return Feature_case() == kUmaFeature ? static_cast<const ::segmentation_platform::proto::UMAFeature&>(*reinterpret_cast<::segmentation_platform::proto::UMAFeature*>(_impl_.Feature_.uma_feature_))
                     : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::segmentation_platform::proto::UMAFeature>(&::segmentation_platform::proto::UMAFeature_globals_);
}
inline const ::segmentation_platform::proto::UMAFeature& InputFeature::uma_feature() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:segmentation_platform.proto.InputFeature.uma_feature)
  return _internal_uma_feature();
}
inline ::segmentation_platform::proto::UMAFeature* PROTOBUF_NULLABLE InputFeature::unsafe_arena_release_uma_feature() {
  // @@protoc_insertion_point(field_unsafe_arena_release:segmentation_platform.proto.InputFeature.uma_feature)
  if (Feature_case() == kUmaFeature) {
    clear_has_Feature();
    auto* temp = reinterpret_cast<::segmentation_platform::proto::UMAFeature*>(_impl_.Feature_.uma_feature_);
    _impl_.Feature_.uma_feature_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void InputFeature::unsafe_arena_set_allocated_uma_feature(
    ::segmentation_platform::proto::UMAFeature* PROTOBUF_NULLABLE value) {
  // We rely on the oneof clear method to free the earlier contents
  // of this oneof. We can directly use the pointer we're given to
  // set the new value.
  clear_Feature();
  if (value) {
    set_has_uma_feature();
    _impl_.Feature_.uma_feature_ = reinterpret_cast<::google::protobuf::MessageLite*>(value);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:segmentation_platform.proto.InputFeature.uma_feature)
}
inline ::segmentation_platform::proto::UMAFeature* PROTOBUF_NONNULL InputFeature::_internal_mutable_uma_feature() {
  if (Feature_case() != kUmaFeature) {
    clear_Feature();
    set_has_uma_feature();
    _impl_.Feature_.uma_feature_ = reinterpret_cast<::google::protobuf::MessageLite*>(
        ::google::protobuf::MessageLite::DefaultConstruct<::segmentation_platform::proto::UMAFeature>(GetArena()));
  }
  return reinterpret_cast<::segmentation_platform::proto::UMAFeature*>(_impl_.Feature_.uma_feature_);
}
inline ::segmentation_platform::proto::UMAFeature* PROTOBUF_NONNULL InputFeature::mutable_uma_feature()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  ::segmentation_platform::proto::UMAFeature* _msg = _internal_mutable_uma_feature();
  // @@protoc_insertion_point(field_mutable:segmentation_platform.proto.InputFeature.uma_feature)
  return _msg;
}

// .segmentation_platform.proto.CustomInput custom_input = 2;
inline bool InputFeature::has_custom_input() const {
  return Feature_case() == kCustomInput;
}
inline bool InputFeature::_internal_has_custom_input() const {
  return Feature_case() == kCustomInput;
}
inline void InputFeature::set_has_custom_input() {
  _impl_._oneof_case_[0] = kCustomInput;
}
inline void InputFeature::clear_custom_input() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (Feature_case() == kCustomInput) {
    if (GetArena() == nullptr) {
      delete _impl_.Feature_.custom_input_;
    } else if (::google::protobuf::internal::DebugHardenClearOneofMessageOnArena()) {
      if (_impl_.Feature_.custom_input_ != nullptr) {
        _impl_.Feature_.custom_input_->Clear();
      }
    }
    clear_has_Feature();
  }
}
inline ::segmentation_platform::proto::CustomInput* PROTOBUF_NULLABLE InputFeature::release_custom_input() {
  // @@protoc_insertion_point(field_release:segmentation_platform.proto.InputFeature.custom_input)
  if (Feature_case() == kCustomInput) {
    clear_has_Feature();
    auto* temp = reinterpret_cast<::segmentation_platform::proto::CustomInput*>(_impl_.Feature_.custom_input_);
    if (GetArena() != nullptr) {
      temp = ::google::protobuf::internal::DuplicateIfNonNull(temp);
    }
    _impl_.Feature_.custom_input_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::segmentation_platform::proto::CustomInput& InputFeature::_internal_custom_input() const {
  return Feature_case() == kCustomInput ? static_cast<const ::segmentation_platform::proto::CustomInput&>(*reinterpret_cast<::segmentation_platform::proto::CustomInput*>(_impl_.Feature_.custom_input_))
                     : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::segmentation_platform::proto::CustomInput>(&::segmentation_platform::proto::CustomInput_globals_);
}
inline const ::segmentation_platform::proto::CustomInput& InputFeature::custom_input() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:segmentation_platform.proto.InputFeature.custom_input)
  return _internal_custom_input();
}
inline ::segmentation_platform::proto::CustomInput* PROTOBUF_NULLABLE InputFeature::unsafe_arena_release_custom_input() {
  // @@protoc_insertion_point(field_unsafe_arena_release:segmentation_platform.proto.InputFeature.custom_input)
  if (Feature_case() == kCustomInput) {
    clear_has_Feature();
    auto* temp = reinterpret_cast<::segmentation_platform::proto::CustomInput*>(_impl_.Feature_.custom_input_);
    _impl_.Feature_.custom_input_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void InputFeature::unsafe_arena_set_allocated_custom_input(
    ::segmentation_platform::proto::CustomInput* PROTOBUF_NULLABLE value) {
  // We rely on the oneof clear method to free the earlier contents
  // of this oneof. We can directly use the pointer we're given to
  // set the new value.
  clear_Feature();
  if (value) {
    set_has_custom_input();
    _impl_.Feature_.custom_input_ = reinterpret_cast<::google::protobuf::MessageLite*>(value);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:segmentation_platform.proto.InputFeature.custom_input)
}
inline ::segmentation_platform::proto::CustomInput* PROTOBUF_NONNULL InputFeature::_internal_mutable_custom_input() {
  if (Feature_case() != kCustomInput) {
    clear_Feature();
    set_has_custom_input();
    _impl_.Feature_.custom_input_ = reinterpret_cast<::google::protobuf::MessageLite*>(
        ::google::protobuf::MessageLite::DefaultConstruct<::segmentation_platform::proto::CustomInput>(GetArena()));
  }
  return reinterpret_cast<::segmentation_platform::proto::CustomInput*>(_impl_.Feature_.custom_input_);
}
inline ::segmentation_platform::proto::CustomInput* PROTOBUF_NONNULL InputFeature::mutable_custom_input()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  ::segmentation_platform::proto::CustomInput* _msg = _internal_mutable_custom_input();
  // @@protoc_insertion_point(field_mutable:segmentation_platform.proto.InputFeature.custom_input)
  return _msg;
}

// .segmentation_platform.proto.SqlFeature sql_feature = 3;
inline bool InputFeature::has_sql_feature() const {
  return Feature_case() == kSqlFeature;
}
inline bool InputFeature::_internal_has_sql_feature() const {
  return Feature_case() == kSqlFeature;
}
inline void InputFeature::set_has_sql_feature() {
  _impl_._oneof_case_[0] = kSqlFeature;
}
inline void InputFeature::clear_sql_feature() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (Feature_case() == kSqlFeature) {
    if (GetArena() == nullptr) {
      delete _impl_.Feature_.sql_feature_;
    } else if (::google::protobuf::internal::DebugHardenClearOneofMessageOnArena()) {
      if (_impl_.Feature_.sql_feature_ != nullptr) {
        _impl_.Feature_.sql_feature_->Clear();
      }
    }
    clear_has_Feature();
  }
}
inline ::segmentation_platform::proto::SqlFeature* PROTOBUF_NULLABLE InputFeature::release_sql_feature() {
  // @@protoc_insertion_point(field_release:segmentation_platform.proto.InputFeature.sql_feature)
  if (Feature_case() == kSqlFeature) {
    clear_has_Feature();
    auto* temp = reinterpret_cast<::segmentation_platform::proto::SqlFeature*>(_impl_.Feature_.sql_feature_);
    if (GetArena() != nullptr) {
      temp = ::google::protobuf::internal::DuplicateIfNonNull(temp);
    }
    _impl_.Feature_.sql_feature_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::segmentation_platform::proto::SqlFeature& InputFeature::_internal_sql_feature() const {
  return Feature_case() == kSqlFeature ? static_cast<const ::segmentation_platform::proto::SqlFeature&>(*reinterpret_cast<::segmentation_platform::proto::SqlFeature*>(_impl_.Feature_.sql_feature_))
                     : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::segmentation_platform::proto::SqlFeature>(&::segmentation_platform::proto::SqlFeature_globals_);
}
inline const ::segmentation_platform::proto::SqlFeature& InputFeature::sql_feature() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:segmentation_platform.proto.InputFeature.sql_feature)
  return _internal_sql_feature();
}
inline ::segmentation_platform::proto::SqlFeature* PROTOBUF_NULLABLE InputFeature::unsafe_arena_release_sql_feature() {
  // @@protoc_insertion_point(field_unsafe_arena_release:segmentation_platform.proto.InputFeature.sql_feature)
  if (Feature_case() == kSqlFeature) {
    clear_has_Feature();
    auto* temp = reinterpret_cast<::segmentation_platform::proto::SqlFeature*>(_impl_.Feature_.sql_feature_);
    _impl_.Feature_.sql_feature_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void InputFeature::unsafe_arena_set_allocated_sql_feature(
    ::segmentation_platform::proto::SqlFeature* PROTOBUF_NULLABLE value) {
  // We rely on the oneof clear method to free the earlier contents
  // of this oneof. We can directly use the pointer we're given to
  // set the new value.
  clear_Feature();
  if (value) {
    set_has_sql_feature();
    _impl_.Feature_.sql_feature_ = reinterpret_cast<::google::protobuf::MessageLite*>(value);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:segmentation_platform.proto.InputFeature.sql_feature)
}
inline ::segmentation_platform::proto::SqlFeature* PROTOBUF_NONNULL InputFeature::_internal_mutable_sql_feature() {
  if (Feature_case() != kSqlFeature) {
    clear_Feature();
    set_has_sql_feature();
    _impl_.Feature_.sql_feature_ = reinterpret_cast<::google::protobuf::MessageLite*>(
        ::google::protobuf::MessageLite::DefaultConstruct<::segmentation_platform::proto::SqlFeature>(GetArena()));
  }
  return reinterpret_cast<::segmentation_platform::proto::SqlFeature*>(_impl_.Feature_.sql_feature_);
}
inline ::segmentation_platform::proto::SqlFeature* PROTOBUF_NONNULL InputFeature::mutable_sql_feature()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  ::segmentation_platform::proto::SqlFeature* _msg = _internal_mutable_sql_feature();
  // @@protoc_insertion_point(field_mutable:segmentation_platform.proto.InputFeature.sql_feature)
  return _msg;
}

inline bool InputFeature::has_Feature() const {
  return Feature_case() != FEATURE_NOT_SET;
}
inline void InputFeature::clear_has_Feature() {
  _impl_._oneof_case_[0] = FEATURE_NOT_SET;
}
inline InputFeature::FeatureCase InputFeature::Feature_case() const {
  return InputFeature::FeatureCase(_impl_._oneof_case_[0]);
}
// -------------------------------------------------------------------

// TrainingOutputs_TriggerConfig_ObservationTrigger

// uint64 delay_sec = 1;
inline bool TrainingOutputs_TriggerConfig_ObservationTrigger::has_delay_sec() const {
  return trigger_case() == kDelaySec;
}
inline void TrainingOutputs_TriggerConfig_ObservationTrigger::set_has_delay_sec() {
  _impl_._oneof_case_[0] = kDelaySec;
}
inline void TrainingOutputs_TriggerConfig_ObservationTrigger::clear_delay_sec() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (trigger_case() == kDelaySec) {
    _impl_.trigger_.delay_sec_ = ::uint64_t{0u};
    clear_has_trigger();
  }
}
inline ::uint64_t TrainingOutputs_TriggerConfig_ObservationTrigger::delay_sec() const {
  // @@protoc_insertion_point(field_get:segmentation_platform.proto.TrainingOutputs.TriggerConfig.ObservationTrigger.delay_sec)
  return _internal_delay_sec();
}
inline void TrainingOutputs_TriggerConfig_ObservationTrigger::set_delay_sec(::uint64_t value) {
  if (trigger_case() != kDelaySec) {
    clear_trigger();
    set_has_delay_sec();
  }
  _impl_.trigger_.delay_sec_ = value;
  // @@protoc_insertion_point(field_set:segmentation_platform.proto.TrainingOutputs.TriggerConfig.ObservationTrigger.delay_sec)
}
inline ::uint64_t TrainingOutputs_TriggerConfig_ObservationTrigger::_internal_delay_sec() const {
  if (trigger_case() == kDelaySec) {
    return _impl_.trigger_.delay_sec_;
  }
  return ::uint64_t{0u};
}

// .segmentation_platform.proto.UMAOutput uma_trigger = 2;
inline bool TrainingOutputs_TriggerConfig_ObservationTrigger::has_uma_trigger() const {
  return trigger_case() == kUmaTrigger;
}
inline bool TrainingOutputs_TriggerConfig_ObservationTrigger::_internal_has_uma_trigger() const {
  return trigger_case() == kUmaTrigger;
}
inline void TrainingOutputs_TriggerConfig_ObservationTrigger::set_has_uma_trigger() {
  _impl_._oneof_case_[0] = kUmaTrigger;
}
inline void TrainingOutputs_TriggerConfig_ObservationTrigger::clear_uma_trigger() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (trigger_case() == kUmaTrigger) {
    if (GetArena() == nullptr) {
      delete _impl_.trigger_.uma_trigger_;
    } else if (::google::protobuf::internal::DebugHardenClearOneofMessageOnArena()) {
      if (_impl_.trigger_.uma_trigger_ != nullptr) {
        _impl_.trigger_.uma_trigger_->Clear();
      }
    }
    clear_has_trigger();
  }
}
inline ::segmentation_platform::proto::UMAOutput* PROTOBUF_NULLABLE TrainingOutputs_TriggerConfig_ObservationTrigger::release_uma_trigger() {
  // @@protoc_insertion_point(field_release:segmentation_platform.proto.TrainingOutputs.TriggerConfig.ObservationTrigger.uma_trigger)
  if (trigger_case() == kUmaTrigger) {
    clear_has_trigger();
    auto* temp = _impl_.trigger_.uma_trigger_;
    if (GetArena() != nullptr) {
      temp = ::google::protobuf::internal::DuplicateIfNonNull(temp);
    }
    _impl_.trigger_.uma_trigger_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::segmentation_platform::proto::UMAOutput& TrainingOutputs_TriggerConfig_ObservationTrigger::_internal_uma_trigger() const {
  return trigger_case() == kUmaTrigger ? static_cast<const ::segmentation_platform::proto::UMAOutput&>(*_impl_.trigger_.uma_trigger_)
                     : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::segmentation_platform::proto::UMAOutput>(&::segmentation_platform::proto::UMAOutput_globals_);
}
inline const ::segmentation_platform::proto::UMAOutput& TrainingOutputs_TriggerConfig_ObservationTrigger::uma_trigger() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:segmentation_platform.proto.TrainingOutputs.TriggerConfig.ObservationTrigger.uma_trigger)
  return _internal_uma_trigger();
}
inline ::segmentation_platform::proto::UMAOutput* PROTOBUF_NULLABLE TrainingOutputs_TriggerConfig_ObservationTrigger::unsafe_arena_release_uma_trigger() {
  // @@protoc_insertion_point(field_unsafe_arena_release:segmentation_platform.proto.TrainingOutputs.TriggerConfig.ObservationTrigger.uma_trigger)
  if (trigger_case() == kUmaTrigger) {
    clear_has_trigger();
    auto* temp = _impl_.trigger_.uma_trigger_;
    _impl_.trigger_.uma_trigger_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void TrainingOutputs_TriggerConfig_ObservationTrigger::unsafe_arena_set_allocated_uma_trigger(
    ::segmentation_platform::proto::UMAOutput* PROTOBUF_NULLABLE value) {
  // We rely on the oneof clear method to free the earlier contents
  // of this oneof. We can directly use the pointer we're given to
  // set the new value.
  clear_trigger();
  if (value) {
    set_has_uma_trigger();
    _impl_.trigger_.uma_trigger_ = value;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:segmentation_platform.proto.TrainingOutputs.TriggerConfig.ObservationTrigger.uma_trigger)
}
inline ::segmentation_platform::proto::UMAOutput* PROTOBUF_NONNULL TrainingOutputs_TriggerConfig_ObservationTrigger::_internal_mutable_uma_trigger() {
  if (trigger_case() != kUmaTrigger) {
    clear_trigger();
    set_has_uma_trigger();
    _impl_.trigger_.uma_trigger_ = 
        ::google::protobuf::MessageLite::DefaultConstruct<::segmentation_platform::proto::UMAOutput>(GetArena());
  }
  return _impl_.trigger_.uma_trigger_;
}
inline ::segmentation_platform::proto::UMAOutput* PROTOBUF_NONNULL TrainingOutputs_TriggerConfig_ObservationTrigger::mutable_uma_trigger()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  ::segmentation_platform::proto::UMAOutput* _msg = _internal_mutable_uma_trigger();
  // @@protoc_insertion_point(field_mutable:segmentation_platform.proto.TrainingOutputs.TriggerConfig.ObservationTrigger.uma_trigger)
  return _msg;
}

inline bool TrainingOutputs_TriggerConfig_ObservationTrigger::has_trigger() const {
  return trigger_case() != TRIGGER_NOT_SET;
}
inline void TrainingOutputs_TriggerConfig_ObservationTrigger::clear_has_trigger() {
  _impl_._oneof_case_[0] = TRIGGER_NOT_SET;
}
inline TrainingOutputs_TriggerConfig_ObservationTrigger::TriggerCase TrainingOutputs_TriggerConfig_ObservationTrigger::trigger_case() const {
  return TrainingOutputs_TriggerConfig_ObservationTrigger::TriggerCase(_impl_._oneof_case_[0]);
}
// -------------------------------------------------------------------

// TrainingOutputs_TriggerConfig

// optional .segmentation_platform.proto.TrainingOutputs.TriggerConfig.DecisionType decision_type = 1;
inline bool TrainingOutputs_TriggerConfig::has_decision_type() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000002U);
  return value;
}
inline void TrainingOutputs_TriggerConfig::clear_decision_type() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.decision_type_ = 0;
  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
}
inline ::segmentation_platform::proto::TrainingOutputs_TriggerConfig_DecisionType TrainingOutputs_TriggerConfig::decision_type() const {
  // @@protoc_insertion_point(field_get:segmentation_platform.proto.TrainingOutputs.TriggerConfig.decision_type)
  return _internal_decision_type();
}
inline void TrainingOutputs_TriggerConfig::set_decision_type(::segmentation_platform::proto::TrainingOutputs_TriggerConfig_DecisionType value) {
  _internal_set_decision_type(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  // @@protoc_insertion_point(field_set:segmentation_platform.proto.TrainingOutputs.TriggerConfig.decision_type)
}
inline ::segmentation_platform::proto::TrainingOutputs_TriggerConfig_DecisionType TrainingOutputs_TriggerConfig::_internal_decision_type() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return static_cast<::segmentation_platform::proto::TrainingOutputs_TriggerConfig_DecisionType>(_impl_.decision_type_);
}
inline void TrainingOutputs_TriggerConfig::_internal_set_decision_type(::segmentation_platform::proto::TrainingOutputs_TriggerConfig_DecisionType value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);

                                          assert(::google::protobuf::internal::ValidateEnum(
                                              value, ::segmentation_platform::proto::TrainingOutputs_TriggerConfig_DecisionType_internal_data_));
                                          _impl_.decision_type_ = value;
}

// repeated .segmentation_platform.proto.TrainingOutputs.TriggerConfig.ObservationTrigger observation_trigger = 2;
inline int TrainingOutputs_TriggerConfig::_internal_observation_trigger_size() const {
  return _internal_observation_trigger().size();
}
inline int TrainingOutputs_TriggerConfig::observation_trigger_size() const {
  return _internal_observation_trigger_size();
}
inline void TrainingOutputs_TriggerConfig::clear_observation_trigger() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.observation_trigger_.Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
}
inline const ::segmentation_platform::proto::TrainingOutputs_TriggerConfig_ObservationTrigger& TrainingOutputs_TriggerConfig::observation_trigger(int index) const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:segmentation_platform.proto.TrainingOutputs.TriggerConfig.observation_trigger)
  return _internal_observation_trigger().Get(index);
}
inline ::segmentation_platform::proto::TrainingOutputs_TriggerConfig_ObservationTrigger* PROTOBUF_NONNULL TrainingOutputs_TriggerConfig::mutable_observation_trigger(int index)
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_mutable:segmentation_platform.proto.TrainingOutputs.TriggerConfig.observation_trigger)
  return _internal_mutable_observation_trigger()->Mutable(index);
}
inline ::segmentation_platform::proto::TrainingOutputs_TriggerConfig_ObservationTrigger* PROTOBUF_NONNULL TrainingOutputs_TriggerConfig::add_observation_trigger()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  ::segmentation_platform::proto::TrainingOutputs_TriggerConfig_ObservationTrigger* _add =
      _internal_mutable_observation_trigger()->InternalAddWithArena(
          ::google::protobuf::MessageLite::internal_visibility(), GetArena());
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_add:segmentation_platform.proto.TrainingOutputs.TriggerConfig.observation_trigger)
  return _add;
}
inline const ::google::protobuf::RepeatedPtrField<::segmentation_platform::proto::TrainingOutputs_TriggerConfig_ObservationTrigger>& TrainingOutputs_TriggerConfig::observation_trigger() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_list:segmentation_platform.proto.TrainingOutputs.TriggerConfig.observation_trigger)
  return _internal_observation_trigger();
}
inline ::google::protobuf::RepeatedPtrField<::segmentation_platform::proto::TrainingOutputs_TriggerConfig_ObservationTrigger>* PROTOBUF_NONNULL
TrainingOutputs_TriggerConfig::mutable_observation_trigger() ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_mutable_list:segmentation_platform.proto.TrainingOutputs.TriggerConfig.observation_trigger)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _internal_mutable_observation_trigger();
}
inline const ::google::protobuf::RepeatedPtrField<::segmentation_platform::proto::TrainingOutputs_TriggerConfig_ObservationTrigger>&
TrainingOutputs_TriggerConfig::_internal_observation_trigger() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.observation_trigger_;
}
inline ::google::protobuf::RepeatedPtrField<::segmentation_platform::proto::TrainingOutputs_TriggerConfig_ObservationTrigger>* PROTOBUF_NONNULL
TrainingOutputs_TriggerConfig::_internal_mutable_observation_trigger() {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return &_impl_.observation_trigger_;
}

// optional bool use_exact_prediction_time = 3;
inline bool TrainingOutputs_TriggerConfig::has_use_exact_prediction_time() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000004U);
  return value;
}
inline void TrainingOutputs_TriggerConfig::clear_use_exact_prediction_time() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.use_exact_prediction_time_ = false;
  ClearHasBit(_impl_._has_bits_[0], 0x00000004U);
}
inline bool TrainingOutputs_TriggerConfig::use_exact_prediction_time() const {
  // @@protoc_insertion_point(field_get:segmentation_platform.proto.TrainingOutputs.TriggerConfig.use_exact_prediction_time)
  return _internal_use_exact_prediction_time();
}
inline void TrainingOutputs_TriggerConfig::set_use_exact_prediction_time(bool value) {
  _internal_set_use_exact_prediction_time(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000004U);
  // @@protoc_insertion_point(field_set:segmentation_platform.proto.TrainingOutputs.TriggerConfig.use_exact_prediction_time)
}
inline bool TrainingOutputs_TriggerConfig::_internal_use_exact_prediction_time() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.use_exact_prediction_time_;
}
inline void TrainingOutputs_TriggerConfig::_internal_set_use_exact_prediction_time(bool value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.use_exact_prediction_time_ = value;
}

// optional bool use_flexible_observation_time = 4;
inline bool TrainingOutputs_TriggerConfig::has_use_flexible_observation_time() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000008U);
  return value;
}
inline void TrainingOutputs_TriggerConfig::clear_use_flexible_observation_time() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.use_flexible_observation_time_ = false;
  ClearHasBit(_impl_._has_bits_[0], 0x00000008U);
}
inline bool TrainingOutputs_TriggerConfig::use_flexible_observation_time() const {
  // @@protoc_insertion_point(field_get:segmentation_platform.proto.TrainingOutputs.TriggerConfig.use_flexible_observation_time)
  return _internal_use_flexible_observation_time();
}
inline void TrainingOutputs_TriggerConfig::set_use_flexible_observation_time(bool value) {
  _internal_set_use_flexible_observation_time(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000008U);
  // @@protoc_insertion_point(field_set:segmentation_platform.proto.TrainingOutputs.TriggerConfig.use_flexible_observation_time)
}
inline bool TrainingOutputs_TriggerConfig::_internal_use_flexible_observation_time() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.use_flexible_observation_time_;
}
inline void TrainingOutputs_TriggerConfig::_internal_set_use_flexible_observation_time(bool value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.use_flexible_observation_time_ = value;
}

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

// TrainingOutputs

// repeated .segmentation_platform.proto.TrainingOutput outputs = 1;
inline int TrainingOutputs::_internal_outputs_size() const {
  return _internal_outputs().size();
}
inline int TrainingOutputs::outputs_size() const {
  return _internal_outputs_size();
}
inline void TrainingOutputs::clear_outputs() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.outputs_.Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
}
inline const ::segmentation_platform::proto::TrainingOutput& TrainingOutputs::outputs(int index) const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:segmentation_platform.proto.TrainingOutputs.outputs)
  return _internal_outputs().Get(index);
}
inline ::segmentation_platform::proto::TrainingOutput* PROTOBUF_NONNULL TrainingOutputs::mutable_outputs(int index)
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_mutable:segmentation_platform.proto.TrainingOutputs.outputs)
  return _internal_mutable_outputs()->Mutable(index);
}
inline ::segmentation_platform::proto::TrainingOutput* PROTOBUF_NONNULL TrainingOutputs::add_outputs()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  ::segmentation_platform::proto::TrainingOutput* _add =
      _internal_mutable_outputs()->InternalAddWithArena(
          ::google::protobuf::MessageLite::internal_visibility(), GetArena());
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_add:segmentation_platform.proto.TrainingOutputs.outputs)
  return _add;
}
inline const ::google::protobuf::RepeatedPtrField<::segmentation_platform::proto::TrainingOutput>& TrainingOutputs::outputs() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_list:segmentation_platform.proto.TrainingOutputs.outputs)
  return _internal_outputs();
}
inline ::google::protobuf::RepeatedPtrField<::segmentation_platform::proto::TrainingOutput>* PROTOBUF_NONNULL
TrainingOutputs::mutable_outputs() ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_mutable_list:segmentation_platform.proto.TrainingOutputs.outputs)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _internal_mutable_outputs();
}
inline const ::google::protobuf::RepeatedPtrField<::segmentation_platform::proto::TrainingOutput>&
TrainingOutputs::_internal_outputs() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.outputs_;
}
inline ::google::protobuf::RepeatedPtrField<::segmentation_platform::proto::TrainingOutput>* PROTOBUF_NONNULL
TrainingOutputs::_internal_mutable_outputs() {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return &_impl_.outputs_;
}

// optional .segmentation_platform.proto.TrainingOutputs.TriggerConfig trigger_config = 2;
inline bool TrainingOutputs::has_trigger_config() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000002U);
  PROTOBUF_ASSUME(!value || _impl_.trigger_config_ != nullptr);
  return value;
}
inline void TrainingOutputs::clear_trigger_config() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.trigger_config_ != nullptr) _impl_.trigger_config_->Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
}
inline const ::segmentation_platform::proto::TrainingOutputs_TriggerConfig& TrainingOutputs::_internal_trigger_config() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::segmentation_platform::proto::TrainingOutputs_TriggerConfig* p = _impl_.trigger_config_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::segmentation_platform::proto::TrainingOutputs_TriggerConfig>(&::segmentation_platform::proto::TrainingOutputs_TriggerConfig_globals_);
}
inline const ::segmentation_platform::proto::TrainingOutputs_TriggerConfig& TrainingOutputs::trigger_config() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:segmentation_platform.proto.TrainingOutputs.trigger_config)
  return _internal_trigger_config();
}
inline void TrainingOutputs::unsafe_arena_set_allocated_trigger_config(
    ::segmentation_platform::proto::TrainingOutputs_TriggerConfig* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.trigger_config_);
  }
  _impl_.trigger_config_ = reinterpret_cast<::segmentation_platform::proto::TrainingOutputs_TriggerConfig*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:segmentation_platform.proto.TrainingOutputs.trigger_config)
}
inline ::segmentation_platform::proto::TrainingOutputs_TriggerConfig* PROTOBUF_NULLABLE TrainingOutputs::release_trigger_config() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
  ::segmentation_platform::proto::TrainingOutputs_TriggerConfig* released = _impl_.trigger_config_;
  _impl_.trigger_config_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::segmentation_platform::proto::TrainingOutputs_TriggerConfig* PROTOBUF_NULLABLE TrainingOutputs::unsafe_arena_release_trigger_config() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:segmentation_platform.proto.TrainingOutputs.trigger_config)

  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
  ::segmentation_platform::proto::TrainingOutputs_TriggerConfig* temp = _impl_.trigger_config_;
  _impl_.trigger_config_ = nullptr;
  return temp;
}
inline ::segmentation_platform::proto::TrainingOutputs_TriggerConfig* PROTOBUF_NONNULL TrainingOutputs::_internal_mutable_trigger_config() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.trigger_config_ == nullptr) {
    auto* p = ::google::protobuf::MessageLite::DefaultConstruct<::segmentation_platform::proto::TrainingOutputs_TriggerConfig>(GetArena());
    _impl_.trigger_config_ = reinterpret_cast<::segmentation_platform::proto::TrainingOutputs_TriggerConfig*>(p);
  }
  return _impl_.trigger_config_;
}
inline ::segmentation_platform::proto::TrainingOutputs_TriggerConfig* PROTOBUF_NONNULL TrainingOutputs::mutable_trigger_config()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  ::segmentation_platform::proto::TrainingOutputs_TriggerConfig* _msg = _internal_mutable_trigger_config();
  // @@protoc_insertion_point(field_mutable:segmentation_platform.proto.TrainingOutputs.trigger_config)
  return _msg;
}
inline void TrainingOutputs::set_allocated_trigger_config(::segmentation_platform::proto::TrainingOutputs_TriggerConfig* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.trigger_config_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
  }

  _impl_.trigger_config_ = reinterpret_cast<::segmentation_platform::proto::TrainingOutputs_TriggerConfig*>(value);
  // @@protoc_insertion_point(field_set_allocated:segmentation_platform.proto.TrainingOutputs.trigger_config)
}

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

// TrainingOutput

// .segmentation_platform.proto.UMAOutput uma_output = 1;
inline bool TrainingOutput::has_uma_output() const {
  return output_case() == kUmaOutput;
}
inline bool TrainingOutput::_internal_has_uma_output() const {
  return output_case() == kUmaOutput;
}
inline void TrainingOutput::set_has_uma_output() {
  _impl_._oneof_case_[0] = kUmaOutput;
}
inline void TrainingOutput::clear_uma_output() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (output_case() == kUmaOutput) {
    if (GetArena() == nullptr) {
      delete _impl_.output_.uma_output_;
    } else if (::google::protobuf::internal::DebugHardenClearOneofMessageOnArena()) {
      if (_impl_.output_.uma_output_ != nullptr) {
        _impl_.output_.uma_output_->Clear();
      }
    }
    clear_has_output();
  }
}
inline ::segmentation_platform::proto::UMAOutput* PROTOBUF_NULLABLE TrainingOutput::release_uma_output() {
  // @@protoc_insertion_point(field_release:segmentation_platform.proto.TrainingOutput.uma_output)
  if (output_case() == kUmaOutput) {
    clear_has_output();
    auto* temp = _impl_.output_.uma_output_;
    if (GetArena() != nullptr) {
      temp = ::google::protobuf::internal::DuplicateIfNonNull(temp);
    }
    _impl_.output_.uma_output_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::segmentation_platform::proto::UMAOutput& TrainingOutput::_internal_uma_output() const {
  return output_case() == kUmaOutput ? static_cast<const ::segmentation_platform::proto::UMAOutput&>(*_impl_.output_.uma_output_)
                     : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::segmentation_platform::proto::UMAOutput>(&::segmentation_platform::proto::UMAOutput_globals_);
}
inline const ::segmentation_platform::proto::UMAOutput& TrainingOutput::uma_output() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:segmentation_platform.proto.TrainingOutput.uma_output)
  return _internal_uma_output();
}
inline ::segmentation_platform::proto::UMAOutput* PROTOBUF_NULLABLE TrainingOutput::unsafe_arena_release_uma_output() {
  // @@protoc_insertion_point(field_unsafe_arena_release:segmentation_platform.proto.TrainingOutput.uma_output)
  if (output_case() == kUmaOutput) {
    clear_has_output();
    auto* temp = _impl_.output_.uma_output_;
    _impl_.output_.uma_output_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void TrainingOutput::unsafe_arena_set_allocated_uma_output(
    ::segmentation_platform::proto::UMAOutput* PROTOBUF_NULLABLE value) {
  // We rely on the oneof clear method to free the earlier contents
  // of this oneof. We can directly use the pointer we're given to
  // set the new value.
  clear_output();
  if (value) {
    set_has_uma_output();
    _impl_.output_.uma_output_ = value;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:segmentation_platform.proto.TrainingOutput.uma_output)
}
inline ::segmentation_platform::proto::UMAOutput* PROTOBUF_NONNULL TrainingOutput::_internal_mutable_uma_output() {
  if (output_case() != kUmaOutput) {
    clear_output();
    set_has_uma_output();
    _impl_.output_.uma_output_ = 
        ::google::protobuf::MessageLite::DefaultConstruct<::segmentation_platform::proto::UMAOutput>(GetArena());
  }
  return _impl_.output_.uma_output_;
}
inline ::segmentation_platform::proto::UMAOutput* PROTOBUF_NONNULL TrainingOutput::mutable_uma_output()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  ::segmentation_platform::proto::UMAOutput* _msg = _internal_mutable_uma_output();
  // @@protoc_insertion_point(field_mutable:segmentation_platform.proto.TrainingOutput.uma_output)
  return _msg;
}

inline bool TrainingOutput::has_output() const {
  return output_case() != OUTPUT_NOT_SET;
}
inline void TrainingOutput::clear_has_output() {
  _impl_._oneof_case_[0] = OUTPUT_NOT_SET;
}
inline TrainingOutput::OutputCase TrainingOutput::output_case() const {
  return TrainingOutput::OutputCase(_impl_._oneof_case_[0]);
}
// -------------------------------------------------------------------

// UMAOutput

// optional .segmentation_platform.proto.UMAFeature uma_feature = 1;
inline bool UMAOutput::has_uma_feature() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000001U);
  PROTOBUF_ASSUME(!value || _impl_.uma_feature_ != nullptr);
  return value;
}
inline void UMAOutput::clear_uma_feature() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.uma_feature_ != nullptr) _impl_.uma_feature_->Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
}
inline const ::segmentation_platform::proto::UMAFeature& UMAOutput::_internal_uma_feature() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::segmentation_platform::proto::UMAFeature* p = _impl_.uma_feature_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::segmentation_platform::proto::UMAFeature>(&::segmentation_platform::proto::UMAFeature_globals_);
}
inline const ::segmentation_platform::proto::UMAFeature& UMAOutput::uma_feature() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:segmentation_platform.proto.UMAOutput.uma_feature)
  return _internal_uma_feature();
}
inline void UMAOutput::unsafe_arena_set_allocated_uma_feature(
    ::segmentation_platform::proto::UMAFeature* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.uma_feature_);
  }
  _impl_.uma_feature_ = reinterpret_cast<::segmentation_platform::proto::UMAFeature*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:segmentation_platform.proto.UMAOutput.uma_feature)
}
inline ::segmentation_platform::proto::UMAFeature* PROTOBUF_NULLABLE UMAOutput::release_uma_feature() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
  ::segmentation_platform::proto::UMAFeature* released = _impl_.uma_feature_;
  _impl_.uma_feature_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::segmentation_platform::proto::UMAFeature* PROTOBUF_NULLABLE UMAOutput::unsafe_arena_release_uma_feature() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:segmentation_platform.proto.UMAOutput.uma_feature)

  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
  ::segmentation_platform::proto::UMAFeature* temp = _impl_.uma_feature_;
  _impl_.uma_feature_ = nullptr;
  return temp;
}
inline ::segmentation_platform::proto::UMAFeature* PROTOBUF_NONNULL UMAOutput::_internal_mutable_uma_feature() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.uma_feature_ == nullptr) {
    auto* p = ::google::protobuf::MessageLite::DefaultConstruct<::segmentation_platform::proto::UMAFeature>(GetArena());
    _impl_.uma_feature_ = reinterpret_cast<::segmentation_platform::proto::UMAFeature*>(p);
  }
  return _impl_.uma_feature_;
}
inline ::segmentation_platform::proto::UMAFeature* PROTOBUF_NONNULL UMAOutput::mutable_uma_feature()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  ::segmentation_platform::proto::UMAFeature* _msg = _internal_mutable_uma_feature();
  // @@protoc_insertion_point(field_mutable:segmentation_platform.proto.UMAOutput.uma_feature)
  return _msg;
}
inline void UMAOutput::set_allocated_uma_feature(::segmentation_platform::proto::UMAFeature* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.uma_feature_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
  }

  _impl_.uma_feature_ = reinterpret_cast<::segmentation_platform::proto::UMAFeature*>(value);
  // @@protoc_insertion_point(field_set_allocated:segmentation_platform.proto.UMAOutput.uma_feature)
}

// optional uint64 duration = 2;
inline bool UMAOutput::has_duration() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000002U);
  return value;
}
inline void UMAOutput::clear_duration() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.duration_ = ::uint64_t{0u};
  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
}
inline ::uint64_t UMAOutput::duration() const {
  // @@protoc_insertion_point(field_get:segmentation_platform.proto.UMAOutput.duration)
  return _internal_duration();
}
inline void UMAOutput::set_duration(::uint64_t value) {
  _internal_set_duration(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  // @@protoc_insertion_point(field_set:segmentation_platform.proto.UMAOutput.duration)
}
inline ::uint64_t UMAOutput::_internal_duration() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.duration_;
}
inline void UMAOutput::_internal_set_duration(::uint64_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.duration_ = value;
}

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

// SegmentationModelMetadata_DiscreteMapping_Entry

// optional float min_result = 1;
inline bool SegmentationModelMetadata_DiscreteMapping_Entry::has_min_result() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000002U);
  return value;
}
inline void SegmentationModelMetadata_DiscreteMapping_Entry::clear_min_result() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.min_result_ = 0;
  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
}
inline float SegmentationModelMetadata_DiscreteMapping_Entry::min_result() const {
  // @@protoc_insertion_point(field_get:segmentation_platform.proto.SegmentationModelMetadata.DiscreteMapping.Entry.min_result)
  return _internal_min_result();
}
inline void SegmentationModelMetadata_DiscreteMapping_Entry::set_min_result(float value) {
  _internal_set_min_result(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  // @@protoc_insertion_point(field_set:segmentation_platform.proto.SegmentationModelMetadata.DiscreteMapping.Entry.min_result)
}
inline float SegmentationModelMetadata_DiscreteMapping_Entry::_internal_min_result() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.min_result_;
}
inline void SegmentationModelMetadata_DiscreteMapping_Entry::_internal_set_min_result(float value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.min_result_ = value;
}

// optional int64 rank = 2;
inline bool SegmentationModelMetadata_DiscreteMapping_Entry::has_rank() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000001U);
  return value;
}
inline void SegmentationModelMetadata_DiscreteMapping_Entry::clear_rank() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.rank_ = ::int64_t{0};
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
}
inline ::int64_t SegmentationModelMetadata_DiscreteMapping_Entry::rank() const {
  // @@protoc_insertion_point(field_get:segmentation_platform.proto.SegmentationModelMetadata.DiscreteMapping.Entry.rank)
  return _internal_rank();
}
inline void SegmentationModelMetadata_DiscreteMapping_Entry::set_rank(::int64_t value) {
  _internal_set_rank(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_set:segmentation_platform.proto.SegmentationModelMetadata.DiscreteMapping.Entry.rank)
}
inline ::int64_t SegmentationModelMetadata_DiscreteMapping_Entry::_internal_rank() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.rank_;
}
inline void SegmentationModelMetadata_DiscreteMapping_Entry::_internal_set_rank(::int64_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.rank_ = value;
}

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

// SegmentationModelMetadata_DiscreteMapping

// repeated .segmentation_platform.proto.SegmentationModelMetadata.DiscreteMapping.Entry entries = 1;
inline int SegmentationModelMetadata_DiscreteMapping::_internal_entries_size() const {
  return _internal_entries().size();
}
inline int SegmentationModelMetadata_DiscreteMapping::entries_size() const {
  return _internal_entries_size();
}
inline void SegmentationModelMetadata_DiscreteMapping::clear_entries() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.entries_.Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
}
inline const ::segmentation_platform::proto::SegmentationModelMetadata_DiscreteMapping_Entry& SegmentationModelMetadata_DiscreteMapping::entries(int index) const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:segmentation_platform.proto.SegmentationModelMetadata.DiscreteMapping.entries)
  return _internal_entries().Get(index);
}
inline ::segmentation_platform::proto::SegmentationModelMetadata_DiscreteMapping_Entry* PROTOBUF_NONNULL SegmentationModelMetadata_DiscreteMapping::mutable_entries(int index)
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_mutable:segmentation_platform.proto.SegmentationModelMetadata.DiscreteMapping.entries)
  return _internal_mutable_entries()->Mutable(index);
}
inline ::segmentation_platform::proto::SegmentationModelMetadata_DiscreteMapping_Entry* PROTOBUF_NONNULL SegmentationModelMetadata_DiscreteMapping::add_entries()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  ::segmentation_platform::proto::SegmentationModelMetadata_DiscreteMapping_Entry* _add =
      _internal_mutable_entries()->InternalAddWithArena(
          ::google::protobuf::MessageLite::internal_visibility(), GetArena());
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_add:segmentation_platform.proto.SegmentationModelMetadata.DiscreteMapping.entries)
  return _add;
}
inline const ::google::protobuf::RepeatedPtrField<::segmentation_platform::proto::SegmentationModelMetadata_DiscreteMapping_Entry>& SegmentationModelMetadata_DiscreteMapping::entries() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_list:segmentation_platform.proto.SegmentationModelMetadata.DiscreteMapping.entries)
  return _internal_entries();
}
inline ::google::protobuf::RepeatedPtrField<::segmentation_platform::proto::SegmentationModelMetadata_DiscreteMapping_Entry>* PROTOBUF_NONNULL
SegmentationModelMetadata_DiscreteMapping::mutable_entries() ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_mutable_list:segmentation_platform.proto.SegmentationModelMetadata.DiscreteMapping.entries)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _internal_mutable_entries();
}
inline const ::google::protobuf::RepeatedPtrField<::segmentation_platform::proto::SegmentationModelMetadata_DiscreteMapping_Entry>&
SegmentationModelMetadata_DiscreteMapping::_internal_entries() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.entries_;
}
inline ::google::protobuf::RepeatedPtrField<::segmentation_platform::proto::SegmentationModelMetadata_DiscreteMapping_Entry>* PROTOBUF_NONNULL
SegmentationModelMetadata_DiscreteMapping::_internal_mutable_entries() {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return &_impl_.entries_;
}

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

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

// SegmentationModelMetadata

// optional .segmentation_platform.proto.VersionInfo version_info = 9;
inline bool SegmentationModelMetadata::has_version_info() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000008U);
  PROTOBUF_ASSUME(!value || _impl_.version_info_ != nullptr);
  return value;
}
inline void SegmentationModelMetadata::clear_version_info() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.version_info_ != nullptr) _impl_.version_info_->Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000008U);
}
inline const ::segmentation_platform::proto::VersionInfo& SegmentationModelMetadata::_internal_version_info() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::segmentation_platform::proto::VersionInfo* p = _impl_.version_info_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::segmentation_platform::proto::VersionInfo>(&::segmentation_platform::proto::VersionInfo_globals_);
}
inline const ::segmentation_platform::proto::VersionInfo& SegmentationModelMetadata::version_info() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:segmentation_platform.proto.SegmentationModelMetadata.version_info)
  return _internal_version_info();
}
inline void SegmentationModelMetadata::unsafe_arena_set_allocated_version_info(
    ::segmentation_platform::proto::VersionInfo* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.version_info_);
  }
  _impl_.version_info_ = reinterpret_cast<::segmentation_platform::proto::VersionInfo*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000008U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000008U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:segmentation_platform.proto.SegmentationModelMetadata.version_info)
}
inline ::segmentation_platform::proto::VersionInfo* PROTOBUF_NULLABLE SegmentationModelMetadata::release_version_info() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[0], 0x00000008U);
  ::segmentation_platform::proto::VersionInfo* released = _impl_.version_info_;
  _impl_.version_info_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::segmentation_platform::proto::VersionInfo* PROTOBUF_NULLABLE SegmentationModelMetadata::unsafe_arena_release_version_info() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:segmentation_platform.proto.SegmentationModelMetadata.version_info)

  ClearHasBit(_impl_._has_bits_[0], 0x00000008U);
  ::segmentation_platform::proto::VersionInfo* temp = _impl_.version_info_;
  _impl_.version_info_ = nullptr;
  return temp;
}
inline ::segmentation_platform::proto::VersionInfo* PROTOBUF_NONNULL SegmentationModelMetadata::_internal_mutable_version_info() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.version_info_ == nullptr) {
    auto* p = ::google::protobuf::MessageLite::DefaultConstruct<::segmentation_platform::proto::VersionInfo>(GetArena());
    _impl_.version_info_ = reinterpret_cast<::segmentation_platform::proto::VersionInfo*>(p);
  }
  return _impl_.version_info_;
}
inline ::segmentation_platform::proto::VersionInfo* PROTOBUF_NONNULL SegmentationModelMetadata::mutable_version_info()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000008U);
  ::segmentation_platform::proto::VersionInfo* _msg = _internal_mutable_version_info();
  // @@protoc_insertion_point(field_mutable:segmentation_platform.proto.SegmentationModelMetadata.version_info)
  return _msg;
}
inline void SegmentationModelMetadata::set_allocated_version_info(::segmentation_platform::proto::VersionInfo* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.version_info_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[0], 0x00000008U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000008U);
  }

  _impl_.version_info_ = reinterpret_cast<::segmentation_platform::proto::VersionInfo*>(value);
  // @@protoc_insertion_point(field_set_allocated:segmentation_platform.proto.SegmentationModelMetadata.version_info)
}

// repeated .segmentation_platform.proto.UMAFeature features = 1;
inline int SegmentationModelMetadata::_internal_features_size() const {
  return _internal_features().size();
}
inline int SegmentationModelMetadata::features_size() const {
  return _internal_features_size();
}
inline void SegmentationModelMetadata::clear_features() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.features_.Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
}
inline const ::segmentation_platform::proto::UMAFeature& SegmentationModelMetadata::features(int index) const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:segmentation_platform.proto.SegmentationModelMetadata.features)
  return _internal_features().Get(index);
}
inline ::segmentation_platform::proto::UMAFeature* PROTOBUF_NONNULL SegmentationModelMetadata::mutable_features(int index)
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_mutable:segmentation_platform.proto.SegmentationModelMetadata.features)
  return _internal_mutable_features()->Mutable(index);
}
inline ::segmentation_platform::proto::UMAFeature* PROTOBUF_NONNULL SegmentationModelMetadata::add_features()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  ::segmentation_platform::proto::UMAFeature* _add =
      _internal_mutable_features()->InternalAddWithArena(
          ::google::protobuf::MessageLite::internal_visibility(), GetArena());
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_add:segmentation_platform.proto.SegmentationModelMetadata.features)
  return _add;
}
inline const ::google::protobuf::RepeatedPtrField<::segmentation_platform::proto::UMAFeature>& SegmentationModelMetadata::features() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_list:segmentation_platform.proto.SegmentationModelMetadata.features)
  return _internal_features();
}
inline ::google::protobuf::RepeatedPtrField<::segmentation_platform::proto::UMAFeature>* PROTOBUF_NONNULL
SegmentationModelMetadata::mutable_features() ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_mutable_list:segmentation_platform.proto.SegmentationModelMetadata.features)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _internal_mutable_features();
}
inline const ::google::protobuf::RepeatedPtrField<::segmentation_platform::proto::UMAFeature>&
SegmentationModelMetadata::_internal_features() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.features_;
}
inline ::google::protobuf::RepeatedPtrField<::segmentation_platform::proto::UMAFeature>* PROTOBUF_NONNULL
SegmentationModelMetadata::_internal_mutable_features() {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return &_impl_.features_;
}

// repeated .segmentation_platform.proto.InputFeature input_features = 10;
inline int SegmentationModelMetadata::_internal_input_features_size() const {
  return _internal_input_features().size();
}
inline int SegmentationModelMetadata::input_features_size() const {
  return _internal_input_features_size();
}
inline void SegmentationModelMetadata::clear_input_features() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.input_features_.Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
}
inline const ::segmentation_platform::proto::InputFeature& SegmentationModelMetadata::input_features(int index) const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:segmentation_platform.proto.SegmentationModelMetadata.input_features)
  return _internal_input_features().Get(index);
}
inline ::segmentation_platform::proto::InputFeature* PROTOBUF_NONNULL SegmentationModelMetadata::mutable_input_features(int index)
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_mutable:segmentation_platform.proto.SegmentationModelMetadata.input_features)
  return _internal_mutable_input_features()->Mutable(index);
}
inline ::segmentation_platform::proto::InputFeature* PROTOBUF_NONNULL SegmentationModelMetadata::add_input_features()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  ::segmentation_platform::proto::InputFeature* _add =
      _internal_mutable_input_features()->InternalAddWithArena(
          ::google::protobuf::MessageLite::internal_visibility(), GetArena());
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  // @@protoc_insertion_point(field_add:segmentation_platform.proto.SegmentationModelMetadata.input_features)
  return _add;
}
inline const ::google::protobuf::RepeatedPtrField<::segmentation_platform::proto::InputFeature>& SegmentationModelMetadata::input_features() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_list:segmentation_platform.proto.SegmentationModelMetadata.input_features)
  return _internal_input_features();
}
inline ::google::protobuf::RepeatedPtrField<::segmentation_platform::proto::InputFeature>* PROTOBUF_NONNULL
SegmentationModelMetadata::mutable_input_features() ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  // @@protoc_insertion_point(field_mutable_list:segmentation_platform.proto.SegmentationModelMetadata.input_features)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _internal_mutable_input_features();
}
inline const ::google::protobuf::RepeatedPtrField<::segmentation_platform::proto::InputFeature>&
SegmentationModelMetadata::_internal_input_features() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.input_features_;
}
inline ::google::protobuf::RepeatedPtrField<::segmentation_platform::proto::InputFeature>* PROTOBUF_NONNULL
SegmentationModelMetadata::_internal_mutable_input_features() {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return &_impl_.input_features_;
}

// optional .segmentation_platform.proto.TrainingOutputs training_outputs = 11;
inline bool SegmentationModelMetadata::has_training_outputs() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000010U);
  PROTOBUF_ASSUME(!value || _impl_.training_outputs_ != nullptr);
  return value;
}
inline void SegmentationModelMetadata::clear_training_outputs() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.training_outputs_ != nullptr) _impl_.training_outputs_->Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000010U);
}
inline const ::segmentation_platform::proto::TrainingOutputs& SegmentationModelMetadata::_internal_training_outputs() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::segmentation_platform::proto::TrainingOutputs* p = _impl_.training_outputs_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::segmentation_platform::proto::TrainingOutputs>(&::segmentation_platform::proto::TrainingOutputs_globals_);
}
inline const ::segmentation_platform::proto::TrainingOutputs& SegmentationModelMetadata::training_outputs() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:segmentation_platform.proto.SegmentationModelMetadata.training_outputs)
  return _internal_training_outputs();
}
inline void SegmentationModelMetadata::unsafe_arena_set_allocated_training_outputs(
    ::segmentation_platform::proto::TrainingOutputs* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.training_outputs_);
  }
  _impl_.training_outputs_ = reinterpret_cast<::segmentation_platform::proto::TrainingOutputs*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000010U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000010U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:segmentation_platform.proto.SegmentationModelMetadata.training_outputs)
}
inline ::segmentation_platform::proto::TrainingOutputs* PROTOBUF_NULLABLE SegmentationModelMetadata::release_training_outputs() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[0], 0x00000010U);
  ::segmentation_platform::proto::TrainingOutputs* released = _impl_.training_outputs_;
  _impl_.training_outputs_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::segmentation_platform::proto::TrainingOutputs* PROTOBUF_NULLABLE SegmentationModelMetadata::unsafe_arena_release_training_outputs() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:segmentation_platform.proto.SegmentationModelMetadata.training_outputs)

  ClearHasBit(_impl_._has_bits_[0], 0x00000010U);
  ::segmentation_platform::proto::TrainingOutputs* temp = _impl_.training_outputs_;
  _impl_.training_outputs_ = nullptr;
  return temp;
}
inline ::segmentation_platform::proto::TrainingOutputs* PROTOBUF_NONNULL SegmentationModelMetadata::_internal_mutable_training_outputs() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.training_outputs_ == nullptr) {
    auto* p = ::google::protobuf::MessageLite::DefaultConstruct<::segmentation_platform::proto::TrainingOutputs>(GetArena());
    _impl_.training_outputs_ = reinterpret_cast<::segmentation_platform::proto::TrainingOutputs*>(p);
  }
  return _impl_.training_outputs_;
}
inline ::segmentation_platform::proto::TrainingOutputs* PROTOBUF_NONNULL SegmentationModelMetadata::mutable_training_outputs()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000010U);
  ::segmentation_platform::proto::TrainingOutputs* _msg = _internal_mutable_training_outputs();
  // @@protoc_insertion_point(field_mutable:segmentation_platform.proto.SegmentationModelMetadata.training_outputs)
  return _msg;
}
inline void SegmentationModelMetadata::set_allocated_training_outputs(::segmentation_platform::proto::TrainingOutputs* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.training_outputs_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[0], 0x00000010U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000010U);
  }

  _impl_.training_outputs_ = reinterpret_cast<::segmentation_platform::proto::TrainingOutputs*>(value);
  // @@protoc_insertion_point(field_set_allocated:segmentation_platform.proto.SegmentationModelMetadata.training_outputs)
}

// optional .segmentation_platform.proto.TimeUnit time_unit = 2;
inline bool SegmentationModelMetadata::has_time_unit() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000400U);
  return value;
}
inline void SegmentationModelMetadata::clear_time_unit() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.time_unit_ = 0;
  ClearHasBit(_impl_._has_bits_[0], 0x00000400U);
}
inline ::segmentation_platform::proto::TimeUnit SegmentationModelMetadata::time_unit() const {
  // @@protoc_insertion_point(field_get:segmentation_platform.proto.SegmentationModelMetadata.time_unit)
  return _internal_time_unit();
}
inline void SegmentationModelMetadata::set_time_unit(::segmentation_platform::proto::TimeUnit value) {
  _internal_set_time_unit(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000400U);
  // @@protoc_insertion_point(field_set:segmentation_platform.proto.SegmentationModelMetadata.time_unit)
}
inline ::segmentation_platform::proto::TimeUnit SegmentationModelMetadata::_internal_time_unit() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return static_cast<::segmentation_platform::proto::TimeUnit>(_impl_.time_unit_);
}
inline void SegmentationModelMetadata::_internal_set_time_unit(::segmentation_platform::proto::TimeUnit value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);

                                          assert(::google::protobuf::internal::ValidateEnum(
                                              value, ::segmentation_platform::proto::TimeUnit_internal_data_));
                                          _impl_.time_unit_ = value;
}

// optional uint64 bucket_duration = 3;
inline bool SegmentationModelMetadata::has_bucket_duration() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000040U);
  return value;
}
inline void SegmentationModelMetadata::clear_bucket_duration() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.bucket_duration_ = ::uint64_t{0u};
  ClearHasBit(_impl_._has_bits_[0], 0x00000040U);
}
inline ::uint64_t SegmentationModelMetadata::bucket_duration() const {
  // @@protoc_insertion_point(field_get:segmentation_platform.proto.SegmentationModelMetadata.bucket_duration)
  return _internal_bucket_duration();
}
inline void SegmentationModelMetadata::set_bucket_duration(::uint64_t value) {
  _internal_set_bucket_duration(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000040U);
  // @@protoc_insertion_point(field_set:segmentation_platform.proto.SegmentationModelMetadata.bucket_duration)
}
inline ::uint64_t SegmentationModelMetadata::_internal_bucket_duration() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.bucket_duration_;
}
inline void SegmentationModelMetadata::_internal_set_bucket_duration(::uint64_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.bucket_duration_ = value;
}

// optional int64 signal_storage_length = 4;
inline bool SegmentationModelMetadata::has_signal_storage_length() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000080U);
  return value;
}
inline void SegmentationModelMetadata::clear_signal_storage_length() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.signal_storage_length_ = ::int64_t{0};
  ClearHasBit(_impl_._has_bits_[0], 0x00000080U);
}
inline ::int64_t SegmentationModelMetadata::signal_storage_length() const {
  // @@protoc_insertion_point(field_get:segmentation_platform.proto.SegmentationModelMetadata.signal_storage_length)
  return _internal_signal_storage_length();
}
inline void SegmentationModelMetadata::set_signal_storage_length(::int64_t value) {
  _internal_set_signal_storage_length(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000080U);
  // @@protoc_insertion_point(field_set:segmentation_platform.proto.SegmentationModelMetadata.signal_storage_length)
}
inline ::int64_t SegmentationModelMetadata::_internal_signal_storage_length() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.signal_storage_length_;
}
inline void SegmentationModelMetadata::_internal_set_signal_storage_length(::int64_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.signal_storage_length_ = value;
}

// optional int64 min_signal_collection_length = 5;
inline bool SegmentationModelMetadata::has_min_signal_collection_length() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000100U);
  return value;
}
inline void SegmentationModelMetadata::clear_min_signal_collection_length() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.min_signal_collection_length_ = ::int64_t{0};
  ClearHasBit(_impl_._has_bits_[0], 0x00000100U);
}
inline ::int64_t SegmentationModelMetadata::min_signal_collection_length() const {
  // @@protoc_insertion_point(field_get:segmentation_platform.proto.SegmentationModelMetadata.min_signal_collection_length)
  return _internal_min_signal_collection_length();
}
inline void SegmentationModelMetadata::set_min_signal_collection_length(::int64_t value) {
  _internal_set_min_signal_collection_length(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000100U);
  // @@protoc_insertion_point(field_set:segmentation_platform.proto.SegmentationModelMetadata.min_signal_collection_length)
}
inline ::int64_t SegmentationModelMetadata::_internal_min_signal_collection_length() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.min_signal_collection_length_;
}
inline void SegmentationModelMetadata::_internal_set_min_signal_collection_length(::int64_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.min_signal_collection_length_ = value;
}

// optional int64 result_time_to_live = 6;
inline bool SegmentationModelMetadata::has_result_time_to_live() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000200U);
  return value;
}
inline void SegmentationModelMetadata::clear_result_time_to_live() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.result_time_to_live_ = ::int64_t{0};
  ClearHasBit(_impl_._has_bits_[0], 0x00000200U);
}
inline ::int64_t SegmentationModelMetadata::result_time_to_live() const {
  // @@protoc_insertion_point(field_get:segmentation_platform.proto.SegmentationModelMetadata.result_time_to_live)
  return _internal_result_time_to_live();
}
inline void SegmentationModelMetadata::set_result_time_to_live(::int64_t value) {
  _internal_set_result_time_to_live(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000200U);
  // @@protoc_insertion_point(field_set:segmentation_platform.proto.SegmentationModelMetadata.result_time_to_live)
}
inline ::int64_t SegmentationModelMetadata::_internal_result_time_to_live() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.result_time_to_live_;
}
inline void SegmentationModelMetadata::_internal_set_result_time_to_live(::int64_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.result_time_to_live_ = value;
}

// optional int64 fixed_prediction_timestamp = 17;
inline bool SegmentationModelMetadata::has_fixed_prediction_timestamp() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00001000U);
  return value;
}
inline void SegmentationModelMetadata::clear_fixed_prediction_timestamp() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.fixed_prediction_timestamp_ = ::int64_t{0};
  ClearHasBit(_impl_._has_bits_[0], 0x00001000U);
}
inline ::int64_t SegmentationModelMetadata::fixed_prediction_timestamp() const {
  // @@protoc_insertion_point(field_get:segmentation_platform.proto.SegmentationModelMetadata.fixed_prediction_timestamp)
  return _internal_fixed_prediction_timestamp();
}
inline void SegmentationModelMetadata::set_fixed_prediction_timestamp(::int64_t value) {
  _internal_set_fixed_prediction_timestamp(value);
  SetHasBit(_impl_._has_bits_[0], 0x00001000U);
  // @@protoc_insertion_point(field_set:segmentation_platform.proto.SegmentationModelMetadata.fixed_prediction_timestamp)
}
inline ::int64_t SegmentationModelMetadata::_internal_fixed_prediction_timestamp() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.fixed_prediction_timestamp_;
}
inline void SegmentationModelMetadata::_internal_set_fixed_prediction_timestamp(::int64_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.fixed_prediction_timestamp_ = value;
}

// map<string, .segmentation_platform.proto.SegmentationModelMetadata.DiscreteMapping> discrete_mappings = 7;
inline int SegmentationModelMetadata::_internal_discrete_mappings_size() const {
  return _internal_discrete_mappings().size();
}
inline int SegmentationModelMetadata::discrete_mappings_size() const {
  return _internal_discrete_mappings_size();
}
inline void SegmentationModelMetadata::clear_discrete_mappings() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.discrete_mappings_.Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00004000U);
}
inline const ::google::protobuf::Map<::std::string, ::segmentation_platform::proto::SegmentationModelMetadata_DiscreteMapping>& SegmentationModelMetadata::_internal_discrete_mappings() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.discrete_mappings_.GetMap();
}
inline const ::google::protobuf::Map<::std::string, ::segmentation_platform::proto::SegmentationModelMetadata_DiscreteMapping>& SegmentationModelMetadata::discrete_mappings() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_map:segmentation_platform.proto.SegmentationModelMetadata.discrete_mappings)
  return _internal_discrete_mappings();
}
inline ::google::protobuf::Map<::std::string, ::segmentation_platform::proto::SegmentationModelMetadata_DiscreteMapping>* PROTOBUF_NONNULL SegmentationModelMetadata::_internal_mutable_discrete_mappings() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _impl_.discrete_mappings_.MutableMap();
}
inline ::google::protobuf::Map<::std::string, ::segmentation_platform::proto::SegmentationModelMetadata_DiscreteMapping>* PROTOBUF_NONNULL SegmentationModelMetadata::mutable_discrete_mappings()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00004000U);
  // @@protoc_insertion_point(field_mutable_map:segmentation_platform.proto.SegmentationModelMetadata.discrete_mappings)
  return _internal_mutable_discrete_mappings();
}

// optional string default_discrete_mapping = 8;
inline bool SegmentationModelMetadata::has_default_discrete_mapping() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000004U);
  return value;
}
inline void SegmentationModelMetadata::clear_default_discrete_mapping() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.default_discrete_mapping_.ClearToEmpty();
  ClearHasBit(_impl_._has_bits_[0], 0x00000004U);
}
inline const ::std::string& SegmentationModelMetadata::default_discrete_mapping() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:segmentation_platform.proto.SegmentationModelMetadata.default_discrete_mapping)
  return _internal_default_discrete_mapping();
}
template <typename Arg_, typename... Args_>
PROTOBUF_ALWAYS_INLINE void SegmentationModelMetadata::set_default_discrete_mapping(Arg_&& arg, Args_... args) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  SetHasBit(_impl_._has_bits_[0], 0x00000004U);
  _impl_.default_discrete_mapping_.Set(static_cast<Arg_&&>(arg), args..., GetArena());
  // @@protoc_insertion_point(field_set:segmentation_platform.proto.SegmentationModelMetadata.default_discrete_mapping)
}
inline ::std::string* PROTOBUF_NONNULL SegmentationModelMetadata::mutable_default_discrete_mapping()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000004U);
  ::std::string* _s = _internal_mutable_default_discrete_mapping();
  // @@protoc_insertion_point(field_mutable:segmentation_platform.proto.SegmentationModelMetadata.default_discrete_mapping)
  return _s;
}
inline const ::std::string& SegmentationModelMetadata::_internal_default_discrete_mapping() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.default_discrete_mapping_.Get();
}
inline void SegmentationModelMetadata::_internal_set_default_discrete_mapping(const ::std::string& value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.default_discrete_mapping_.Set(value, GetArena());
}
inline ::std::string* PROTOBUF_NONNULL SegmentationModelMetadata::_internal_mutable_default_discrete_mapping() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _impl_.default_discrete_mapping_.Mutable( GetArena());
}
inline ::std::string* PROTOBUF_NULLABLE SegmentationModelMetadata::release_default_discrete_mapping() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:segmentation_platform.proto.SegmentationModelMetadata.default_discrete_mapping)
  if (!CheckHasBit(_impl_._has_bits_[0], 0x00000004U)) {
    return nullptr;
  }
  ClearHasBit(_impl_._has_bits_[0], 0x00000004U);
  auto* released = _impl_.default_discrete_mapping_.Release();
  if (::google::protobuf::internal::DebugHardenForceCopyDefaultString()) {
    _impl_.default_discrete_mapping_.Set("", GetArena());
  }
  return released;
}
inline void SegmentationModelMetadata::set_allocated_default_discrete_mapping(::std::string* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000004U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000004U);
  }
  _impl_.default_discrete_mapping_.SetAllocated(value, GetArena());
  if (::google::protobuf::internal::DebugHardenForceCopyDefaultString() && _impl_.default_discrete_mapping_.IsDefault()) {
    _impl_.default_discrete_mapping_.Set("", GetArena());
  }
  // @@protoc_insertion_point(field_set_allocated:segmentation_platform.proto.SegmentationModelMetadata.default_discrete_mapping)
}

// optional bool upload_tensors = 13;
inline bool SegmentationModelMetadata::has_upload_tensors() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000800U);
  return value;
}
inline void SegmentationModelMetadata::clear_upload_tensors() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.upload_tensors_ = false;
  ClearHasBit(_impl_._has_bits_[0], 0x00000800U);
}
inline bool SegmentationModelMetadata::upload_tensors() const {
  // @@protoc_insertion_point(field_get:segmentation_platform.proto.SegmentationModelMetadata.upload_tensors)
  return _internal_upload_tensors();
}
inline void SegmentationModelMetadata::set_upload_tensors(bool value) {
  _internal_set_upload_tensors(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000800U);
  // @@protoc_insertion_point(field_set:segmentation_platform.proto.SegmentationModelMetadata.upload_tensors)
}
inline bool SegmentationModelMetadata::_internal_upload_tensors() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.upload_tensors_;
}
inline void SegmentationModelMetadata::_internal_set_upload_tensors(bool value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.upload_tensors_ = value;
}

// optional .segmentation_platform.proto.SegmentationModelMetadata.OutputDescription return_type = 14;
inline bool SegmentationModelMetadata::has_return_type() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00002000U);
  return value;
}
inline void SegmentationModelMetadata::clear_return_type() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.return_type_ = 0;
  ClearHasBit(_impl_._has_bits_[0], 0x00002000U);
}
inline ::segmentation_platform::proto::SegmentationModelMetadata_OutputDescription SegmentationModelMetadata::return_type() const {
  // @@protoc_insertion_point(field_get:segmentation_platform.proto.SegmentationModelMetadata.return_type)
  return _internal_return_type();
}
inline void SegmentationModelMetadata::set_return_type(::segmentation_platform::proto::SegmentationModelMetadata_OutputDescription value) {
  _internal_set_return_type(value);
  SetHasBit(_impl_._has_bits_[0], 0x00002000U);
  // @@protoc_insertion_point(field_set:segmentation_platform.proto.SegmentationModelMetadata.return_type)
}
inline ::segmentation_platform::proto::SegmentationModelMetadata_OutputDescription SegmentationModelMetadata::_internal_return_type() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return static_cast<::segmentation_platform::proto::SegmentationModelMetadata_OutputDescription>(_impl_.return_type_);
}
inline void SegmentationModelMetadata::_internal_set_return_type(::segmentation_platform::proto::SegmentationModelMetadata_OutputDescription value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);

                                          assert(::google::protobuf::internal::ValidateEnum(
                                              value, ::segmentation_platform::proto::SegmentationModelMetadata_OutputDescription_internal_data_));
                                          _impl_.return_type_ = value;
}

// optional .segmentation_platform.proto.OutputConfig output_config = 16;
inline bool SegmentationModelMetadata::has_output_config() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000020U);
  PROTOBUF_ASSUME(!value || _impl_.output_config_ != nullptr);
  return value;
}
inline const ::segmentation_platform::proto::OutputConfig& SegmentationModelMetadata::_internal_output_config() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::segmentation_platform::proto::OutputConfig* p = _impl_.output_config_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::segmentation_platform::proto::OutputConfig>(&::segmentation_platform::proto::OutputConfig_globals_);
}
inline const ::segmentation_platform::proto::OutputConfig& SegmentationModelMetadata::output_config() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:segmentation_platform.proto.SegmentationModelMetadata.output_config)
  return _internal_output_config();
}
inline void SegmentationModelMetadata::unsafe_arena_set_allocated_output_config(
    ::segmentation_platform::proto::OutputConfig* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.output_config_);
  }
  _impl_.output_config_ = reinterpret_cast<::segmentation_platform::proto::OutputConfig*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000020U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000020U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:segmentation_platform.proto.SegmentationModelMetadata.output_config)
}
inline ::segmentation_platform::proto::OutputConfig* PROTOBUF_NULLABLE SegmentationModelMetadata::release_output_config() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[0], 0x00000020U);
  ::segmentation_platform::proto::OutputConfig* released = _impl_.output_config_;
  _impl_.output_config_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::segmentation_platform::proto::OutputConfig* PROTOBUF_NULLABLE SegmentationModelMetadata::unsafe_arena_release_output_config() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:segmentation_platform.proto.SegmentationModelMetadata.output_config)

  ClearHasBit(_impl_._has_bits_[0], 0x00000020U);
  ::segmentation_platform::proto::OutputConfig* temp = _impl_.output_config_;
  _impl_.output_config_ = nullptr;
  return temp;
}
inline ::segmentation_platform::proto::OutputConfig* PROTOBUF_NONNULL SegmentationModelMetadata::_internal_mutable_output_config() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.output_config_ == nullptr) {
    auto* p = ::google::protobuf::MessageLite::DefaultConstruct<::segmentation_platform::proto::OutputConfig>(GetArena());
    _impl_.output_config_ = reinterpret_cast<::segmentation_platform::proto::OutputConfig*>(p);
  }
  return _impl_.output_config_;
}
inline ::segmentation_platform::proto::OutputConfig* PROTOBUF_NONNULL SegmentationModelMetadata::mutable_output_config()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000020U);
  ::segmentation_platform::proto::OutputConfig* _msg = _internal_mutable_output_config();
  // @@protoc_insertion_point(field_mutable:segmentation_platform.proto.SegmentationModelMetadata.output_config)
  return _msg;
}
inline void SegmentationModelMetadata::set_allocated_output_config(::segmentation_platform::proto::OutputConfig* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.output_config_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = reinterpret_cast<::google::protobuf::MessageLite*>(value)->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[0], 0x00000020U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000020U);
  }

  _impl_.output_config_ = reinterpret_cast<::segmentation_platform::proto::OutputConfig*>(value);
  // @@protoc_insertion_point(field_set_allocated:segmentation_platform.proto.SegmentationModelMetadata.output_config)
}

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

// @@protoc_insertion_point(namespace_scope)
}  // namespace proto
}  // namespace segmentation_platform


namespace google {
namespace protobuf {

template <>
struct is_proto_enum<::segmentation_platform::proto::CustomInput_FillPolicy> : std::true_type {};
template <>
struct internal::LiteEnumFuncs<::segmentation_platform::proto::CustomInput_FillPolicy> {
  static constexpr bool kIsDefined = true;
  static constexpr auto kParseFunc = ::segmentation_platform::proto::CustomInput_FillPolicy_Parse;
  static constexpr auto kNameFunc = ::segmentation_platform::proto::CustomInput_FillPolicy_Name<int>;
};
template <>
struct is_proto_enum<::segmentation_platform::proto::SqlFeature_BindValue_ParamType> : std::true_type {};
template <>
struct internal::LiteEnumFuncs<::segmentation_platform::proto::SqlFeature_BindValue_ParamType> {
  static constexpr bool kIsDefined = true;
  static constexpr auto kParseFunc = ::segmentation_platform::proto::SqlFeature_BindValue_ParamType_Parse;
  static constexpr auto kNameFunc = ::segmentation_platform::proto::SqlFeature_BindValue_ParamType_Name<int>;
};
template <>
struct is_proto_enum<::segmentation_platform::proto::TrainingOutputs_TriggerConfig_DecisionType> : std::true_type {};
template <>
struct internal::LiteEnumFuncs<::segmentation_platform::proto::TrainingOutputs_TriggerConfig_DecisionType> {
  static constexpr bool kIsDefined = true;
  static constexpr auto kParseFunc = ::segmentation_platform::proto::TrainingOutputs_TriggerConfig_DecisionType_Parse;
  static constexpr auto kNameFunc = ::segmentation_platform::proto::TrainingOutputs_TriggerConfig_DecisionType_Name<int>;
};
template <>
struct is_proto_enum<::segmentation_platform::proto::SegmentationModelMetadata_OutputDescription> : std::true_type {};
template <>
struct internal::LiteEnumFuncs<::segmentation_platform::proto::SegmentationModelMetadata_OutputDescription> {
  static constexpr bool kIsDefined = true;
  static constexpr auto kParseFunc = ::segmentation_platform::proto::SegmentationModelMetadata_OutputDescription_Parse;
  static constexpr auto kNameFunc = ::segmentation_platform::proto::SegmentationModelMetadata_OutputDescription_Name<int>;
};
template <>
struct is_proto_enum<::segmentation_platform::proto::CurrentVersion> : std::true_type {};
template <>
struct internal::LiteEnumFuncs<::segmentation_platform::proto::CurrentVersion> {
  static constexpr bool kIsDefined = true;
  static constexpr auto kParseFunc = ::segmentation_platform::proto::CurrentVersion_Parse;
  static constexpr auto kNameFunc = ::segmentation_platform::proto::CurrentVersion_Name<int>;
};
template <>
struct is_proto_enum<::segmentation_platform::proto::ModelSource> : std::true_type {};
template <>
struct internal::LiteEnumFuncs<::segmentation_platform::proto::ModelSource> {
  static constexpr bool kIsDefined = true;
  static constexpr auto kParseFunc = ::segmentation_platform::proto::ModelSource_Parse;
  static constexpr auto kNameFunc = ::segmentation_platform::proto::ModelSource_Name<int>;
};

}  // namespace protobuf
}  // namespace google

// @@protoc_insertion_point(global_scope)

#include "google/protobuf/port_undef.inc"
// clang-format on

#endif  // components_2fsegmentation_5fplatform_2fpublic_2fproto_2fmodel_5fmetadata_2eproto_2epb_2eh
