// Generated by the protocol buffer compiler.  DO NOT EDIT!
// source: ortools/sat/cp_model.proto

#ifndef GOOGLE_PROTOBUF_INCLUDED_ortools_2fsat_2fcp_5fmodel_2eproto
#define GOOGLE_PROTOBUF_INCLUDED_ortools_2fsat_2fcp_5fmodel_2eproto

#include <limits>
#include <string>

#include <google/protobuf/port_def.inc>
#if PROTOBUF_VERSION < 3012000
#error This file was generated by a newer version of protoc which is
#error incompatible with your Protocol Buffer headers. Please update
#error your headers.
#endif
#if 3012002 < PROTOBUF_MIN_PROTOC_VERSION
#error This file was generated by an older version of protoc which is
#error incompatible with your Protocol Buffer headers. Please
#error regenerate this file with a newer version of protoc.
#endif

#include <google/protobuf/port_undef.inc>
#include <google/protobuf/io/coded_stream.h>
#include <google/protobuf/arena.h>
#include <google/protobuf/arenastring.h>
#include <google/protobuf/generated_message_table_driven.h>
#include <google/protobuf/generated_message_util.h>
#include <google/protobuf/inlined_string_field.h>
#include <google/protobuf/metadata_lite.h>
#include <google/protobuf/generated_message_reflection.h>
#include <google/protobuf/message.h>
#include <google/protobuf/repeated_field.h>  // IWYU pragma: export
#include <google/protobuf/extension_set.h>  // IWYU pragma: export
#include <google/protobuf/generated_enum_reflection.h>
#include <google/protobuf/unknown_field_set.h>
// @@protoc_insertion_point(includes)
#include <google/protobuf/port_def.inc>
#define PROTOBUF_INTERNAL_EXPORT_ortools_2fsat_2fcp_5fmodel_2eproto
PROTOBUF_NAMESPACE_OPEN
namespace internal {
class AnyMetadata;
}  // namespace internal
PROTOBUF_NAMESPACE_CLOSE

// Internal implementation detail -- do not use these members.
struct TableStruct_ortools_2fsat_2fcp_5fmodel_2eproto {
  static const ::PROTOBUF_NAMESPACE_ID::internal::ParseTableField entries[]
    PROTOBUF_SECTION_VARIABLE(protodesc_cold);
  static const ::PROTOBUF_NAMESPACE_ID::internal::AuxillaryParseTableField aux[]
    PROTOBUF_SECTION_VARIABLE(protodesc_cold);
  static const ::PROTOBUF_NAMESPACE_ID::internal::ParseTable schema[26]
    PROTOBUF_SECTION_VARIABLE(protodesc_cold);
  static const ::PROTOBUF_NAMESPACE_ID::internal::FieldMetadata field_metadata[];
  static const ::PROTOBUF_NAMESPACE_ID::internal::SerializationTable serialization_table[];
  static const ::PROTOBUF_NAMESPACE_ID::uint32 offsets[];
};
extern const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_ortools_2fsat_2fcp_5fmodel_2eproto;
namespace operations_research {
namespace sat {
class AllDifferentConstraintProto;
class AllDifferentConstraintProtoDefaultTypeInternal;
extern AllDifferentConstraintProtoDefaultTypeInternal _AllDifferentConstraintProto_default_instance_;
class AutomatonConstraintProto;
class AutomatonConstraintProtoDefaultTypeInternal;
extern AutomatonConstraintProtoDefaultTypeInternal _AutomatonConstraintProto_default_instance_;
class BoolArgumentProto;
class BoolArgumentProtoDefaultTypeInternal;
extern BoolArgumentProtoDefaultTypeInternal _BoolArgumentProto_default_instance_;
class CircuitConstraintProto;
class CircuitConstraintProtoDefaultTypeInternal;
extern CircuitConstraintProtoDefaultTypeInternal _CircuitConstraintProto_default_instance_;
class CircuitCoveringConstraintProto;
class CircuitCoveringConstraintProtoDefaultTypeInternal;
extern CircuitCoveringConstraintProtoDefaultTypeInternal _CircuitCoveringConstraintProto_default_instance_;
class ConstraintProto;
class ConstraintProtoDefaultTypeInternal;
extern ConstraintProtoDefaultTypeInternal _ConstraintProto_default_instance_;
class CpModelProto;
class CpModelProtoDefaultTypeInternal;
extern CpModelProtoDefaultTypeInternal _CpModelProto_default_instance_;
class CpObjectiveProto;
class CpObjectiveProtoDefaultTypeInternal;
extern CpObjectiveProtoDefaultTypeInternal _CpObjectiveProto_default_instance_;
class CpSolverResponse;
class CpSolverResponseDefaultTypeInternal;
extern CpSolverResponseDefaultTypeInternal _CpSolverResponse_default_instance_;
class CumulativeConstraintProto;
class CumulativeConstraintProtoDefaultTypeInternal;
extern CumulativeConstraintProtoDefaultTypeInternal _CumulativeConstraintProto_default_instance_;
class DecisionStrategyProto;
class DecisionStrategyProtoDefaultTypeInternal;
extern DecisionStrategyProtoDefaultTypeInternal _DecisionStrategyProto_default_instance_;
class DecisionStrategyProto_AffineTransformation;
class DecisionStrategyProto_AffineTransformationDefaultTypeInternal;
extern DecisionStrategyProto_AffineTransformationDefaultTypeInternal _DecisionStrategyProto_AffineTransformation_default_instance_;
class ElementConstraintProto;
class ElementConstraintProtoDefaultTypeInternal;
extern ElementConstraintProtoDefaultTypeInternal _ElementConstraintProto_default_instance_;
class IntegerArgumentProto;
class IntegerArgumentProtoDefaultTypeInternal;
extern IntegerArgumentProtoDefaultTypeInternal _IntegerArgumentProto_default_instance_;
class IntegerVariableProto;
class IntegerVariableProtoDefaultTypeInternal;
extern IntegerVariableProtoDefaultTypeInternal _IntegerVariableProto_default_instance_;
class IntervalConstraintProto;
class IntervalConstraintProtoDefaultTypeInternal;
extern IntervalConstraintProtoDefaultTypeInternal _IntervalConstraintProto_default_instance_;
class InverseConstraintProto;
class InverseConstraintProtoDefaultTypeInternal;
extern InverseConstraintProtoDefaultTypeInternal _InverseConstraintProto_default_instance_;
class LinearArgumentProto;
class LinearArgumentProtoDefaultTypeInternal;
extern LinearArgumentProtoDefaultTypeInternal _LinearArgumentProto_default_instance_;
class LinearConstraintProto;
class LinearConstraintProtoDefaultTypeInternal;
extern LinearConstraintProtoDefaultTypeInternal _LinearConstraintProto_default_instance_;
class LinearExpressionProto;
class LinearExpressionProtoDefaultTypeInternal;
extern LinearExpressionProtoDefaultTypeInternal _LinearExpressionProto_default_instance_;
class NoOverlap2DConstraintProto;
class NoOverlap2DConstraintProtoDefaultTypeInternal;
extern NoOverlap2DConstraintProtoDefaultTypeInternal _NoOverlap2DConstraintProto_default_instance_;
class NoOverlapConstraintProto;
class NoOverlapConstraintProtoDefaultTypeInternal;
extern NoOverlapConstraintProtoDefaultTypeInternal _NoOverlapConstraintProto_default_instance_;
class PartialVariableAssignment;
class PartialVariableAssignmentDefaultTypeInternal;
extern PartialVariableAssignmentDefaultTypeInternal _PartialVariableAssignment_default_instance_;
class ReservoirConstraintProto;
class ReservoirConstraintProtoDefaultTypeInternal;
extern ReservoirConstraintProtoDefaultTypeInternal _ReservoirConstraintProto_default_instance_;
class RoutesConstraintProto;
class RoutesConstraintProtoDefaultTypeInternal;
extern RoutesConstraintProtoDefaultTypeInternal _RoutesConstraintProto_default_instance_;
class TableConstraintProto;
class TableConstraintProtoDefaultTypeInternal;
extern TableConstraintProtoDefaultTypeInternal _TableConstraintProto_default_instance_;
}  // namespace sat
}  // namespace operations_research
PROTOBUF_NAMESPACE_OPEN
template<> ::operations_research::sat::AllDifferentConstraintProto* Arena::CreateMaybeMessage<::operations_research::sat::AllDifferentConstraintProto>(Arena*);
template<> ::operations_research::sat::AutomatonConstraintProto* Arena::CreateMaybeMessage<::operations_research::sat::AutomatonConstraintProto>(Arena*);
template<> ::operations_research::sat::BoolArgumentProto* Arena::CreateMaybeMessage<::operations_research::sat::BoolArgumentProto>(Arena*);
template<> ::operations_research::sat::CircuitConstraintProto* Arena::CreateMaybeMessage<::operations_research::sat::CircuitConstraintProto>(Arena*);
template<> ::operations_research::sat::CircuitCoveringConstraintProto* Arena::CreateMaybeMessage<::operations_research::sat::CircuitCoveringConstraintProto>(Arena*);
template<> ::operations_research::sat::ConstraintProto* Arena::CreateMaybeMessage<::operations_research::sat::ConstraintProto>(Arena*);
template<> ::operations_research::sat::CpModelProto* Arena::CreateMaybeMessage<::operations_research::sat::CpModelProto>(Arena*);
template<> ::operations_research::sat::CpObjectiveProto* Arena::CreateMaybeMessage<::operations_research::sat::CpObjectiveProto>(Arena*);
template<> ::operations_research::sat::CpSolverResponse* Arena::CreateMaybeMessage<::operations_research::sat::CpSolverResponse>(Arena*);
template<> ::operations_research::sat::CumulativeConstraintProto* Arena::CreateMaybeMessage<::operations_research::sat::CumulativeConstraintProto>(Arena*);
template<> ::operations_research::sat::DecisionStrategyProto* Arena::CreateMaybeMessage<::operations_research::sat::DecisionStrategyProto>(Arena*);
template<> ::operations_research::sat::DecisionStrategyProto_AffineTransformation* Arena::CreateMaybeMessage<::operations_research::sat::DecisionStrategyProto_AffineTransformation>(Arena*);
template<> ::operations_research::sat::ElementConstraintProto* Arena::CreateMaybeMessage<::operations_research::sat::ElementConstraintProto>(Arena*);
template<> ::operations_research::sat::IntegerArgumentProto* Arena::CreateMaybeMessage<::operations_research::sat::IntegerArgumentProto>(Arena*);
template<> ::operations_research::sat::IntegerVariableProto* Arena::CreateMaybeMessage<::operations_research::sat::IntegerVariableProto>(Arena*);
template<> ::operations_research::sat::IntervalConstraintProto* Arena::CreateMaybeMessage<::operations_research::sat::IntervalConstraintProto>(Arena*);
template<> ::operations_research::sat::InverseConstraintProto* Arena::CreateMaybeMessage<::operations_research::sat::InverseConstraintProto>(Arena*);
template<> ::operations_research::sat::LinearArgumentProto* Arena::CreateMaybeMessage<::operations_research::sat::LinearArgumentProto>(Arena*);
template<> ::operations_research::sat::LinearConstraintProto* Arena::CreateMaybeMessage<::operations_research::sat::LinearConstraintProto>(Arena*);
template<> ::operations_research::sat::LinearExpressionProto* Arena::CreateMaybeMessage<::operations_research::sat::LinearExpressionProto>(Arena*);
template<> ::operations_research::sat::NoOverlap2DConstraintProto* Arena::CreateMaybeMessage<::operations_research::sat::NoOverlap2DConstraintProto>(Arena*);
template<> ::operations_research::sat::NoOverlapConstraintProto* Arena::CreateMaybeMessage<::operations_research::sat::NoOverlapConstraintProto>(Arena*);
template<> ::operations_research::sat::PartialVariableAssignment* Arena::CreateMaybeMessage<::operations_research::sat::PartialVariableAssignment>(Arena*);
template<> ::operations_research::sat::ReservoirConstraintProto* Arena::CreateMaybeMessage<::operations_research::sat::ReservoirConstraintProto>(Arena*);
template<> ::operations_research::sat::RoutesConstraintProto* Arena::CreateMaybeMessage<::operations_research::sat::RoutesConstraintProto>(Arena*);
template<> ::operations_research::sat::TableConstraintProto* Arena::CreateMaybeMessage<::operations_research::sat::TableConstraintProto>(Arena*);
PROTOBUF_NAMESPACE_CLOSE
namespace operations_research {
namespace sat {

enum DecisionStrategyProto_VariableSelectionStrategy : int {
  DecisionStrategyProto_VariableSelectionStrategy_CHOOSE_FIRST = 0,
  DecisionStrategyProto_VariableSelectionStrategy_CHOOSE_LOWEST_MIN = 1,
  DecisionStrategyProto_VariableSelectionStrategy_CHOOSE_HIGHEST_MAX = 2,
  DecisionStrategyProto_VariableSelectionStrategy_CHOOSE_MIN_DOMAIN_SIZE = 3,
  DecisionStrategyProto_VariableSelectionStrategy_CHOOSE_MAX_DOMAIN_SIZE = 4,
  DecisionStrategyProto_VariableSelectionStrategy_DecisionStrategyProto_VariableSelectionStrategy_INT_MIN_SENTINEL_DO_NOT_USE_ = std::numeric_limits<::PROTOBUF_NAMESPACE_ID::int32>::min(),
  DecisionStrategyProto_VariableSelectionStrategy_DecisionStrategyProto_VariableSelectionStrategy_INT_MAX_SENTINEL_DO_NOT_USE_ = std::numeric_limits<::PROTOBUF_NAMESPACE_ID::int32>::max()
};
bool DecisionStrategyProto_VariableSelectionStrategy_IsValid(int value);
constexpr DecisionStrategyProto_VariableSelectionStrategy DecisionStrategyProto_VariableSelectionStrategy_VariableSelectionStrategy_MIN = DecisionStrategyProto_VariableSelectionStrategy_CHOOSE_FIRST;
constexpr DecisionStrategyProto_VariableSelectionStrategy DecisionStrategyProto_VariableSelectionStrategy_VariableSelectionStrategy_MAX = DecisionStrategyProto_VariableSelectionStrategy_CHOOSE_MAX_DOMAIN_SIZE;
constexpr int DecisionStrategyProto_VariableSelectionStrategy_VariableSelectionStrategy_ARRAYSIZE = DecisionStrategyProto_VariableSelectionStrategy_VariableSelectionStrategy_MAX + 1;

const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* DecisionStrategyProto_VariableSelectionStrategy_descriptor();
template<typename T>
inline const std::string& DecisionStrategyProto_VariableSelectionStrategy_Name(T enum_t_value) {
  static_assert(::std::is_same<T, DecisionStrategyProto_VariableSelectionStrategy>::value ||
    ::std::is_integral<T>::value,
    "Incorrect type passed to function DecisionStrategyProto_VariableSelectionStrategy_Name.");
  return ::PROTOBUF_NAMESPACE_ID::internal::NameOfEnum(
    DecisionStrategyProto_VariableSelectionStrategy_descriptor(), enum_t_value);
}
inline bool DecisionStrategyProto_VariableSelectionStrategy_Parse(
    const std::string& name, DecisionStrategyProto_VariableSelectionStrategy* value) {
  return ::PROTOBUF_NAMESPACE_ID::internal::ParseNamedEnum<DecisionStrategyProto_VariableSelectionStrategy>(
    DecisionStrategyProto_VariableSelectionStrategy_descriptor(), name, value);
}
enum DecisionStrategyProto_DomainReductionStrategy : int {
  DecisionStrategyProto_DomainReductionStrategy_SELECT_MIN_VALUE = 0,
  DecisionStrategyProto_DomainReductionStrategy_SELECT_MAX_VALUE = 1,
  DecisionStrategyProto_DomainReductionStrategy_SELECT_LOWER_HALF = 2,
  DecisionStrategyProto_DomainReductionStrategy_SELECT_UPPER_HALF = 3,
  DecisionStrategyProto_DomainReductionStrategy_SELECT_MEDIAN_VALUE = 4,
  DecisionStrategyProto_DomainReductionStrategy_DecisionStrategyProto_DomainReductionStrategy_INT_MIN_SENTINEL_DO_NOT_USE_ = std::numeric_limits<::PROTOBUF_NAMESPACE_ID::int32>::min(),
  DecisionStrategyProto_DomainReductionStrategy_DecisionStrategyProto_DomainReductionStrategy_INT_MAX_SENTINEL_DO_NOT_USE_ = std::numeric_limits<::PROTOBUF_NAMESPACE_ID::int32>::max()
};
bool DecisionStrategyProto_DomainReductionStrategy_IsValid(int value);
constexpr DecisionStrategyProto_DomainReductionStrategy DecisionStrategyProto_DomainReductionStrategy_DomainReductionStrategy_MIN = DecisionStrategyProto_DomainReductionStrategy_SELECT_MIN_VALUE;
constexpr DecisionStrategyProto_DomainReductionStrategy DecisionStrategyProto_DomainReductionStrategy_DomainReductionStrategy_MAX = DecisionStrategyProto_DomainReductionStrategy_SELECT_MEDIAN_VALUE;
constexpr int DecisionStrategyProto_DomainReductionStrategy_DomainReductionStrategy_ARRAYSIZE = DecisionStrategyProto_DomainReductionStrategy_DomainReductionStrategy_MAX + 1;

const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* DecisionStrategyProto_DomainReductionStrategy_descriptor();
template<typename T>
inline const std::string& DecisionStrategyProto_DomainReductionStrategy_Name(T enum_t_value) {
  static_assert(::std::is_same<T, DecisionStrategyProto_DomainReductionStrategy>::value ||
    ::std::is_integral<T>::value,
    "Incorrect type passed to function DecisionStrategyProto_DomainReductionStrategy_Name.");
  return ::PROTOBUF_NAMESPACE_ID::internal::NameOfEnum(
    DecisionStrategyProto_DomainReductionStrategy_descriptor(), enum_t_value);
}
inline bool DecisionStrategyProto_DomainReductionStrategy_Parse(
    const std::string& name, DecisionStrategyProto_DomainReductionStrategy* value) {
  return ::PROTOBUF_NAMESPACE_ID::internal::ParseNamedEnum<DecisionStrategyProto_DomainReductionStrategy>(
    DecisionStrategyProto_DomainReductionStrategy_descriptor(), name, value);
}
enum CpSolverStatus : int {
  UNKNOWN = 0,
  MODEL_INVALID = 1,
  FEASIBLE = 2,
  INFEASIBLE = 3,
  OPTIMAL = 4,
  CpSolverStatus_INT_MIN_SENTINEL_DO_NOT_USE_ = std::numeric_limits<::PROTOBUF_NAMESPACE_ID::int32>::min(),
  CpSolverStatus_INT_MAX_SENTINEL_DO_NOT_USE_ = std::numeric_limits<::PROTOBUF_NAMESPACE_ID::int32>::max()
};
bool CpSolverStatus_IsValid(int value);
constexpr CpSolverStatus CpSolverStatus_MIN = UNKNOWN;
constexpr CpSolverStatus CpSolverStatus_MAX = OPTIMAL;
constexpr int CpSolverStatus_ARRAYSIZE = CpSolverStatus_MAX + 1;

const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* CpSolverStatus_descriptor();
template<typename T>
inline const std::string& CpSolverStatus_Name(T enum_t_value) {
  static_assert(::std::is_same<T, CpSolverStatus>::value ||
    ::std::is_integral<T>::value,
    "Incorrect type passed to function CpSolverStatus_Name.");
  return ::PROTOBUF_NAMESPACE_ID::internal::NameOfEnum(
    CpSolverStatus_descriptor(), enum_t_value);
}
inline bool CpSolverStatus_Parse(
    const std::string& name, CpSolverStatus* value) {
  return ::PROTOBUF_NAMESPACE_ID::internal::ParseNamedEnum<CpSolverStatus>(
    CpSolverStatus_descriptor(), name, value);
}
// ===================================================================

class IntegerVariableProto PROTOBUF_FINAL :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:operations_research.sat.IntegerVariableProto) */ {
 public:
  inline IntegerVariableProto() : IntegerVariableProto(nullptr) {};
  virtual ~IntegerVariableProto();

  IntegerVariableProto(const IntegerVariableProto& from);
  IntegerVariableProto(IntegerVariableProto&& from) noexcept
    : IntegerVariableProto() {
    *this = ::std::move(from);
  }

  inline IntegerVariableProto& operator=(const IntegerVariableProto& from) {
    CopyFrom(from);
    return *this;
  }
  inline IntegerVariableProto& operator=(IntegerVariableProto&& from) noexcept {
    if (GetArena() == from.GetArena()) {
      if (this != &from) InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return GetMetadataStatic().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return GetMetadataStatic().reflection;
  }
  static const IntegerVariableProto& default_instance();

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

  friend void swap(IntegerVariableProto& a, IntegerVariableProto& b) {
    a.Swap(&b);
  }
  inline void Swap(IntegerVariableProto* other) {
    if (other == this) return;
    if (GetArena() == other->GetArena()) {
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(IntegerVariableProto* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  inline IntegerVariableProto* New() const final {
    return CreateMaybeMessage<IntegerVariableProto>(nullptr);
  }

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

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  ::PROTOBUF_NAMESPACE_ID::uint8* _InternalSerialize(
      ::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  inline void SharedCtor();
  inline void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(IntegerVariableProto* other);
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "operations_research.sat.IntegerVariableProto";
  }
  protected:
  explicit IntegerVariableProto(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
  private:
  static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
    ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&::descriptor_table_ortools_2fsat_2fcp_5fmodel_2eproto);
    return ::descriptor_table_ortools_2fsat_2fcp_5fmodel_2eproto.file_level_metadata[kIndexInFileMessages];
  }

  public:

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

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

  enum : int {
    kDomainFieldNumber = 2,
    kNameFieldNumber = 1,
  };
  // repeated int64 domain = 2;
  int domain_size() const;
  private:
  int _internal_domain_size() const;
  public:
  void clear_domain();
  private:
  ::PROTOBUF_NAMESPACE_ID::int64 _internal_domain(int index) const;
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >&
      _internal_domain() const;
  void _internal_add_domain(::PROTOBUF_NAMESPACE_ID::int64 value);
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >*
      _internal_mutable_domain();
  public:
  ::PROTOBUF_NAMESPACE_ID::int64 domain(int index) const;
  void set_domain(int index, ::PROTOBUF_NAMESPACE_ID::int64 value);
  void add_domain(::PROTOBUF_NAMESPACE_ID::int64 value);
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >&
      domain() const;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >*
      mutable_domain();

  // string name = 1;
  void clear_name();
  const std::string& name() const;
  void set_name(const std::string& value);
  void set_name(std::string&& value);
  void set_name(const char* value);
  void set_name(const char* value, size_t size);
  std::string* mutable_name();
  std::string* release_name();
  void set_allocated_name(std::string* name);
  GOOGLE_PROTOBUF_RUNTIME_DEPRECATED("The unsafe_arena_ accessors for"
  "    string fields are deprecated and will be removed in a"
  "    future release.")
  std::string* unsafe_arena_release_name();
  GOOGLE_PROTOBUF_RUNTIME_DEPRECATED("The unsafe_arena_ accessors for"
  "    string fields are deprecated and will be removed in a"
  "    future release.")
  void unsafe_arena_set_allocated_name(
      std::string* name);
  private:
  const std::string& _internal_name() const;
  void _internal_set_name(const std::string& value);
  std::string* _internal_mutable_name();
  public:

  // @@protoc_insertion_point(class_scope:operations_research.sat.IntegerVariableProto)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 > domain_;
  mutable std::atomic<int> _domain_cached_byte_size_;
  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr name_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_ortools_2fsat_2fcp_5fmodel_2eproto;
};
// -------------------------------------------------------------------

class BoolArgumentProto PROTOBUF_FINAL :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:operations_research.sat.BoolArgumentProto) */ {
 public:
  inline BoolArgumentProto() : BoolArgumentProto(nullptr) {};
  virtual ~BoolArgumentProto();

  BoolArgumentProto(const BoolArgumentProto& from);
  BoolArgumentProto(BoolArgumentProto&& from) noexcept
    : BoolArgumentProto() {
    *this = ::std::move(from);
  }

  inline BoolArgumentProto& operator=(const BoolArgumentProto& from) {
    CopyFrom(from);
    return *this;
  }
  inline BoolArgumentProto& operator=(BoolArgumentProto&& from) noexcept {
    if (GetArena() == from.GetArena()) {
      if (this != &from) InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return GetMetadataStatic().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return GetMetadataStatic().reflection;
  }
  static const BoolArgumentProto& default_instance();

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

  friend void swap(BoolArgumentProto& a, BoolArgumentProto& b) {
    a.Swap(&b);
  }
  inline void Swap(BoolArgumentProto* other) {
    if (other == this) return;
    if (GetArena() == other->GetArena()) {
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(BoolArgumentProto* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  inline BoolArgumentProto* New() const final {
    return CreateMaybeMessage<BoolArgumentProto>(nullptr);
  }

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

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  ::PROTOBUF_NAMESPACE_ID::uint8* _InternalSerialize(
      ::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  inline void SharedCtor();
  inline void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(BoolArgumentProto* other);
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "operations_research.sat.BoolArgumentProto";
  }
  protected:
  explicit BoolArgumentProto(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
  private:
  static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
    ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&::descriptor_table_ortools_2fsat_2fcp_5fmodel_2eproto);
    return ::descriptor_table_ortools_2fsat_2fcp_5fmodel_2eproto.file_level_metadata[kIndexInFileMessages];
  }

  public:

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

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

  enum : int {
    kLiteralsFieldNumber = 1,
  };
  // repeated int32 literals = 1;
  int literals_size() const;
  private:
  int _internal_literals_size() const;
  public:
  void clear_literals();
  private:
  ::PROTOBUF_NAMESPACE_ID::int32 _internal_literals(int index) const;
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
      _internal_literals() const;
  void _internal_add_literals(::PROTOBUF_NAMESPACE_ID::int32 value);
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
      _internal_mutable_literals();
  public:
  ::PROTOBUF_NAMESPACE_ID::int32 literals(int index) const;
  void set_literals(int index, ::PROTOBUF_NAMESPACE_ID::int32 value);
  void add_literals(::PROTOBUF_NAMESPACE_ID::int32 value);
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
      literals() const;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
      mutable_literals();

  // @@protoc_insertion_point(class_scope:operations_research.sat.BoolArgumentProto)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 > literals_;
  mutable std::atomic<int> _literals_cached_byte_size_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_ortools_2fsat_2fcp_5fmodel_2eproto;
};
// -------------------------------------------------------------------

class IntegerArgumentProto PROTOBUF_FINAL :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:operations_research.sat.IntegerArgumentProto) */ {
 public:
  inline IntegerArgumentProto() : IntegerArgumentProto(nullptr) {};
  virtual ~IntegerArgumentProto();

  IntegerArgumentProto(const IntegerArgumentProto& from);
  IntegerArgumentProto(IntegerArgumentProto&& from) noexcept
    : IntegerArgumentProto() {
    *this = ::std::move(from);
  }

  inline IntegerArgumentProto& operator=(const IntegerArgumentProto& from) {
    CopyFrom(from);
    return *this;
  }
  inline IntegerArgumentProto& operator=(IntegerArgumentProto&& from) noexcept {
    if (GetArena() == from.GetArena()) {
      if (this != &from) InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return GetMetadataStatic().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return GetMetadataStatic().reflection;
  }
  static const IntegerArgumentProto& default_instance();

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

  friend void swap(IntegerArgumentProto& a, IntegerArgumentProto& b) {
    a.Swap(&b);
  }
  inline void Swap(IntegerArgumentProto* other) {
    if (other == this) return;
    if (GetArena() == other->GetArena()) {
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(IntegerArgumentProto* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  inline IntegerArgumentProto* New() const final {
    return CreateMaybeMessage<IntegerArgumentProto>(nullptr);
  }

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

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  ::PROTOBUF_NAMESPACE_ID::uint8* _InternalSerialize(
      ::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  inline void SharedCtor();
  inline void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(IntegerArgumentProto* other);
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "operations_research.sat.IntegerArgumentProto";
  }
  protected:
  explicit IntegerArgumentProto(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
  private:
  static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
    ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&::descriptor_table_ortools_2fsat_2fcp_5fmodel_2eproto);
    return ::descriptor_table_ortools_2fsat_2fcp_5fmodel_2eproto.file_level_metadata[kIndexInFileMessages];
  }

  public:

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

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

  enum : int {
    kVarsFieldNumber = 2,
    kTargetFieldNumber = 1,
  };
  // repeated int32 vars = 2;
  int vars_size() const;
  private:
  int _internal_vars_size() const;
  public:
  void clear_vars();
  private:
  ::PROTOBUF_NAMESPACE_ID::int32 _internal_vars(int index) const;
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
      _internal_vars() const;
  void _internal_add_vars(::PROTOBUF_NAMESPACE_ID::int32 value);
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
      _internal_mutable_vars();
  public:
  ::PROTOBUF_NAMESPACE_ID::int32 vars(int index) const;
  void set_vars(int index, ::PROTOBUF_NAMESPACE_ID::int32 value);
  void add_vars(::PROTOBUF_NAMESPACE_ID::int32 value);
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
      vars() const;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
      mutable_vars();

  // int32 target = 1;
  void clear_target();
  ::PROTOBUF_NAMESPACE_ID::int32 target() const;
  void set_target(::PROTOBUF_NAMESPACE_ID::int32 value);
  private:
  ::PROTOBUF_NAMESPACE_ID::int32 _internal_target() const;
  void _internal_set_target(::PROTOBUF_NAMESPACE_ID::int32 value);
  public:

  // @@protoc_insertion_point(class_scope:operations_research.sat.IntegerArgumentProto)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 > vars_;
  mutable std::atomic<int> _vars_cached_byte_size_;
  ::PROTOBUF_NAMESPACE_ID::int32 target_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_ortools_2fsat_2fcp_5fmodel_2eproto;
};
// -------------------------------------------------------------------

class LinearExpressionProto PROTOBUF_FINAL :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:operations_research.sat.LinearExpressionProto) */ {
 public:
  inline LinearExpressionProto() : LinearExpressionProto(nullptr) {};
  virtual ~LinearExpressionProto();

  LinearExpressionProto(const LinearExpressionProto& from);
  LinearExpressionProto(LinearExpressionProto&& from) noexcept
    : LinearExpressionProto() {
    *this = ::std::move(from);
  }

  inline LinearExpressionProto& operator=(const LinearExpressionProto& from) {
    CopyFrom(from);
    return *this;
  }
  inline LinearExpressionProto& operator=(LinearExpressionProto&& from) noexcept {
    if (GetArena() == from.GetArena()) {
      if (this != &from) InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return GetMetadataStatic().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return GetMetadataStatic().reflection;
  }
  static const LinearExpressionProto& default_instance();

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

  friend void swap(LinearExpressionProto& a, LinearExpressionProto& b) {
    a.Swap(&b);
  }
  inline void Swap(LinearExpressionProto* other) {
    if (other == this) return;
    if (GetArena() == other->GetArena()) {
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(LinearExpressionProto* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  inline LinearExpressionProto* New() const final {
    return CreateMaybeMessage<LinearExpressionProto>(nullptr);
  }

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

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  ::PROTOBUF_NAMESPACE_ID::uint8* _InternalSerialize(
      ::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  inline void SharedCtor();
  inline void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(LinearExpressionProto* other);
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "operations_research.sat.LinearExpressionProto";
  }
  protected:
  explicit LinearExpressionProto(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
  private:
  static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
    ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&::descriptor_table_ortools_2fsat_2fcp_5fmodel_2eproto);
    return ::descriptor_table_ortools_2fsat_2fcp_5fmodel_2eproto.file_level_metadata[kIndexInFileMessages];
  }

  public:

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

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

  enum : int {
    kVarsFieldNumber = 1,
    kCoeffsFieldNumber = 2,
    kOffsetFieldNumber = 3,
  };
  // repeated int32 vars = 1;
  int vars_size() const;
  private:
  int _internal_vars_size() const;
  public:
  void clear_vars();
  private:
  ::PROTOBUF_NAMESPACE_ID::int32 _internal_vars(int index) const;
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
      _internal_vars() const;
  void _internal_add_vars(::PROTOBUF_NAMESPACE_ID::int32 value);
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
      _internal_mutable_vars();
  public:
  ::PROTOBUF_NAMESPACE_ID::int32 vars(int index) const;
  void set_vars(int index, ::PROTOBUF_NAMESPACE_ID::int32 value);
  void add_vars(::PROTOBUF_NAMESPACE_ID::int32 value);
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
      vars() const;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
      mutable_vars();

  // repeated int64 coeffs = 2;
  int coeffs_size() const;
  private:
  int _internal_coeffs_size() const;
  public:
  void clear_coeffs();
  private:
  ::PROTOBUF_NAMESPACE_ID::int64 _internal_coeffs(int index) const;
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >&
      _internal_coeffs() const;
  void _internal_add_coeffs(::PROTOBUF_NAMESPACE_ID::int64 value);
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >*
      _internal_mutable_coeffs();
  public:
  ::PROTOBUF_NAMESPACE_ID::int64 coeffs(int index) const;
  void set_coeffs(int index, ::PROTOBUF_NAMESPACE_ID::int64 value);
  void add_coeffs(::PROTOBUF_NAMESPACE_ID::int64 value);
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >&
      coeffs() const;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >*
      mutable_coeffs();

  // int64 offset = 3;
  void clear_offset();
  ::PROTOBUF_NAMESPACE_ID::int64 offset() const;
  void set_offset(::PROTOBUF_NAMESPACE_ID::int64 value);
  private:
  ::PROTOBUF_NAMESPACE_ID::int64 _internal_offset() const;
  void _internal_set_offset(::PROTOBUF_NAMESPACE_ID::int64 value);
  public:

  // @@protoc_insertion_point(class_scope:operations_research.sat.LinearExpressionProto)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 > vars_;
  mutable std::atomic<int> _vars_cached_byte_size_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 > coeffs_;
  mutable std::atomic<int> _coeffs_cached_byte_size_;
  ::PROTOBUF_NAMESPACE_ID::int64 offset_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_ortools_2fsat_2fcp_5fmodel_2eproto;
};
// -------------------------------------------------------------------

class LinearArgumentProto PROTOBUF_FINAL :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:operations_research.sat.LinearArgumentProto) */ {
 public:
  inline LinearArgumentProto() : LinearArgumentProto(nullptr) {};
  virtual ~LinearArgumentProto();

  LinearArgumentProto(const LinearArgumentProto& from);
  LinearArgumentProto(LinearArgumentProto&& from) noexcept
    : LinearArgumentProto() {
    *this = ::std::move(from);
  }

  inline LinearArgumentProto& operator=(const LinearArgumentProto& from) {
    CopyFrom(from);
    return *this;
  }
  inline LinearArgumentProto& operator=(LinearArgumentProto&& from) noexcept {
    if (GetArena() == from.GetArena()) {
      if (this != &from) InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return GetMetadataStatic().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return GetMetadataStatic().reflection;
  }
  static const LinearArgumentProto& default_instance();

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

  friend void swap(LinearArgumentProto& a, LinearArgumentProto& b) {
    a.Swap(&b);
  }
  inline void Swap(LinearArgumentProto* other) {
    if (other == this) return;
    if (GetArena() == other->GetArena()) {
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(LinearArgumentProto* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  inline LinearArgumentProto* New() const final {
    return CreateMaybeMessage<LinearArgumentProto>(nullptr);
  }

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

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  ::PROTOBUF_NAMESPACE_ID::uint8* _InternalSerialize(
      ::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  inline void SharedCtor();
  inline void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(LinearArgumentProto* other);
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "operations_research.sat.LinearArgumentProto";
  }
  protected:
  explicit LinearArgumentProto(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
  private:
  static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
    ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&::descriptor_table_ortools_2fsat_2fcp_5fmodel_2eproto);
    return ::descriptor_table_ortools_2fsat_2fcp_5fmodel_2eproto.file_level_metadata[kIndexInFileMessages];
  }

  public:

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

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

  enum : int {
    kExprsFieldNumber = 2,
    kTargetFieldNumber = 1,
  };
  // repeated .operations_research.sat.LinearExpressionProto exprs = 2;
  int exprs_size() const;
  private:
  int _internal_exprs_size() const;
  public:
  void clear_exprs();
  ::operations_research::sat::LinearExpressionProto* mutable_exprs(int index);
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::operations_research::sat::LinearExpressionProto >*
      mutable_exprs();
  private:
  const ::operations_research::sat::LinearExpressionProto& _internal_exprs(int index) const;
  ::operations_research::sat::LinearExpressionProto* _internal_add_exprs();
  public:
  const ::operations_research::sat::LinearExpressionProto& exprs(int index) const;
  ::operations_research::sat::LinearExpressionProto* add_exprs();
  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::operations_research::sat::LinearExpressionProto >&
      exprs() const;

  // .operations_research.sat.LinearExpressionProto target = 1;
  bool has_target() const;
  private:
  bool _internal_has_target() const;
  public:
  void clear_target();
  const ::operations_research::sat::LinearExpressionProto& target() const;
  ::operations_research::sat::LinearExpressionProto* release_target();
  ::operations_research::sat::LinearExpressionProto* mutable_target();
  void set_allocated_target(::operations_research::sat::LinearExpressionProto* target);
  private:
  const ::operations_research::sat::LinearExpressionProto& _internal_target() const;
  ::operations_research::sat::LinearExpressionProto* _internal_mutable_target();
  public:
  void unsafe_arena_set_allocated_target(
      ::operations_research::sat::LinearExpressionProto* target);
  ::operations_research::sat::LinearExpressionProto* unsafe_arena_release_target();

  // @@protoc_insertion_point(class_scope:operations_research.sat.LinearArgumentProto)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::operations_research::sat::LinearExpressionProto > exprs_;
  ::operations_research::sat::LinearExpressionProto* target_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_ortools_2fsat_2fcp_5fmodel_2eproto;
};
// -------------------------------------------------------------------

class AllDifferentConstraintProto PROTOBUF_FINAL :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:operations_research.sat.AllDifferentConstraintProto) */ {
 public:
  inline AllDifferentConstraintProto() : AllDifferentConstraintProto(nullptr) {};
  virtual ~AllDifferentConstraintProto();

  AllDifferentConstraintProto(const AllDifferentConstraintProto& from);
  AllDifferentConstraintProto(AllDifferentConstraintProto&& from) noexcept
    : AllDifferentConstraintProto() {
    *this = ::std::move(from);
  }

  inline AllDifferentConstraintProto& operator=(const AllDifferentConstraintProto& from) {
    CopyFrom(from);
    return *this;
  }
  inline AllDifferentConstraintProto& operator=(AllDifferentConstraintProto&& from) noexcept {
    if (GetArena() == from.GetArena()) {
      if (this != &from) InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return GetMetadataStatic().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return GetMetadataStatic().reflection;
  }
  static const AllDifferentConstraintProto& default_instance();

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

  friend void swap(AllDifferentConstraintProto& a, AllDifferentConstraintProto& b) {
    a.Swap(&b);
  }
  inline void Swap(AllDifferentConstraintProto* other) {
    if (other == this) return;
    if (GetArena() == other->GetArena()) {
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(AllDifferentConstraintProto* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  inline AllDifferentConstraintProto* New() const final {
    return CreateMaybeMessage<AllDifferentConstraintProto>(nullptr);
  }

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

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  ::PROTOBUF_NAMESPACE_ID::uint8* _InternalSerialize(
      ::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  inline void SharedCtor();
  inline void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(AllDifferentConstraintProto* other);
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "operations_research.sat.AllDifferentConstraintProto";
  }
  protected:
  explicit AllDifferentConstraintProto(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
  private:
  static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
    ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&::descriptor_table_ortools_2fsat_2fcp_5fmodel_2eproto);
    return ::descriptor_table_ortools_2fsat_2fcp_5fmodel_2eproto.file_level_metadata[kIndexInFileMessages];
  }

  public:

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

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

  enum : int {
    kVarsFieldNumber = 1,
  };
  // repeated int32 vars = 1;
  int vars_size() const;
  private:
  int _internal_vars_size() const;
  public:
  void clear_vars();
  private:
  ::PROTOBUF_NAMESPACE_ID::int32 _internal_vars(int index) const;
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
      _internal_vars() const;
  void _internal_add_vars(::PROTOBUF_NAMESPACE_ID::int32 value);
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
      _internal_mutable_vars();
  public:
  ::PROTOBUF_NAMESPACE_ID::int32 vars(int index) const;
  void set_vars(int index, ::PROTOBUF_NAMESPACE_ID::int32 value);
  void add_vars(::PROTOBUF_NAMESPACE_ID::int32 value);
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
      vars() const;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
      mutable_vars();

  // @@protoc_insertion_point(class_scope:operations_research.sat.AllDifferentConstraintProto)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 > vars_;
  mutable std::atomic<int> _vars_cached_byte_size_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_ortools_2fsat_2fcp_5fmodel_2eproto;
};
// -------------------------------------------------------------------

class LinearConstraintProto PROTOBUF_FINAL :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:operations_research.sat.LinearConstraintProto) */ {
 public:
  inline LinearConstraintProto() : LinearConstraintProto(nullptr) {};
  virtual ~LinearConstraintProto();

  LinearConstraintProto(const LinearConstraintProto& from);
  LinearConstraintProto(LinearConstraintProto&& from) noexcept
    : LinearConstraintProto() {
    *this = ::std::move(from);
  }

  inline LinearConstraintProto& operator=(const LinearConstraintProto& from) {
    CopyFrom(from);
    return *this;
  }
  inline LinearConstraintProto& operator=(LinearConstraintProto&& from) noexcept {
    if (GetArena() == from.GetArena()) {
      if (this != &from) InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return GetMetadataStatic().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return GetMetadataStatic().reflection;
  }
  static const LinearConstraintProto& default_instance();

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

  friend void swap(LinearConstraintProto& a, LinearConstraintProto& b) {
    a.Swap(&b);
  }
  inline void Swap(LinearConstraintProto* other) {
    if (other == this) return;
    if (GetArena() == other->GetArena()) {
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(LinearConstraintProto* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  inline LinearConstraintProto* New() const final {
    return CreateMaybeMessage<LinearConstraintProto>(nullptr);
  }

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

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  ::PROTOBUF_NAMESPACE_ID::uint8* _InternalSerialize(
      ::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  inline void SharedCtor();
  inline void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(LinearConstraintProto* other);
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "operations_research.sat.LinearConstraintProto";
  }
  protected:
  explicit LinearConstraintProto(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
  private:
  static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
    ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&::descriptor_table_ortools_2fsat_2fcp_5fmodel_2eproto);
    return ::descriptor_table_ortools_2fsat_2fcp_5fmodel_2eproto.file_level_metadata[kIndexInFileMessages];
  }

  public:

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

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

  enum : int {
    kVarsFieldNumber = 1,
    kCoeffsFieldNumber = 2,
    kDomainFieldNumber = 3,
  };
  // repeated int32 vars = 1;
  int vars_size() const;
  private:
  int _internal_vars_size() const;
  public:
  void clear_vars();
  private:
  ::PROTOBUF_NAMESPACE_ID::int32 _internal_vars(int index) const;
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
      _internal_vars() const;
  void _internal_add_vars(::PROTOBUF_NAMESPACE_ID::int32 value);
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
      _internal_mutable_vars();
  public:
  ::PROTOBUF_NAMESPACE_ID::int32 vars(int index) const;
  void set_vars(int index, ::PROTOBUF_NAMESPACE_ID::int32 value);
  void add_vars(::PROTOBUF_NAMESPACE_ID::int32 value);
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
      vars() const;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
      mutable_vars();

  // repeated int64 coeffs = 2;
  int coeffs_size() const;
  private:
  int _internal_coeffs_size() const;
  public:
  void clear_coeffs();
  private:
  ::PROTOBUF_NAMESPACE_ID::int64 _internal_coeffs(int index) const;
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >&
      _internal_coeffs() const;
  void _internal_add_coeffs(::PROTOBUF_NAMESPACE_ID::int64 value);
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >*
      _internal_mutable_coeffs();
  public:
  ::PROTOBUF_NAMESPACE_ID::int64 coeffs(int index) const;
  void set_coeffs(int index, ::PROTOBUF_NAMESPACE_ID::int64 value);
  void add_coeffs(::PROTOBUF_NAMESPACE_ID::int64 value);
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >&
      coeffs() const;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >*
      mutable_coeffs();

  // repeated int64 domain = 3;
  int domain_size() const;
  private:
  int _internal_domain_size() const;
  public:
  void clear_domain();
  private:
  ::PROTOBUF_NAMESPACE_ID::int64 _internal_domain(int index) const;
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >&
      _internal_domain() const;
  void _internal_add_domain(::PROTOBUF_NAMESPACE_ID::int64 value);
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >*
      _internal_mutable_domain();
  public:
  ::PROTOBUF_NAMESPACE_ID::int64 domain(int index) const;
  void set_domain(int index, ::PROTOBUF_NAMESPACE_ID::int64 value);
  void add_domain(::PROTOBUF_NAMESPACE_ID::int64 value);
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >&
      domain() const;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >*
      mutable_domain();

  // @@protoc_insertion_point(class_scope:operations_research.sat.LinearConstraintProto)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 > vars_;
  mutable std::atomic<int> _vars_cached_byte_size_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 > coeffs_;
  mutable std::atomic<int> _coeffs_cached_byte_size_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 > domain_;
  mutable std::atomic<int> _domain_cached_byte_size_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_ortools_2fsat_2fcp_5fmodel_2eproto;
};
// -------------------------------------------------------------------

class ElementConstraintProto PROTOBUF_FINAL :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:operations_research.sat.ElementConstraintProto) */ {
 public:
  inline ElementConstraintProto() : ElementConstraintProto(nullptr) {};
  virtual ~ElementConstraintProto();

  ElementConstraintProto(const ElementConstraintProto& from);
  ElementConstraintProto(ElementConstraintProto&& from) noexcept
    : ElementConstraintProto() {
    *this = ::std::move(from);
  }

  inline ElementConstraintProto& operator=(const ElementConstraintProto& from) {
    CopyFrom(from);
    return *this;
  }
  inline ElementConstraintProto& operator=(ElementConstraintProto&& from) noexcept {
    if (GetArena() == from.GetArena()) {
      if (this != &from) InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return GetMetadataStatic().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return GetMetadataStatic().reflection;
  }
  static const ElementConstraintProto& default_instance();

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

  friend void swap(ElementConstraintProto& a, ElementConstraintProto& b) {
    a.Swap(&b);
  }
  inline void Swap(ElementConstraintProto* other) {
    if (other == this) return;
    if (GetArena() == other->GetArena()) {
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(ElementConstraintProto* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  inline ElementConstraintProto* New() const final {
    return CreateMaybeMessage<ElementConstraintProto>(nullptr);
  }

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

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  ::PROTOBUF_NAMESPACE_ID::uint8* _InternalSerialize(
      ::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  inline void SharedCtor();
  inline void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(ElementConstraintProto* other);
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "operations_research.sat.ElementConstraintProto";
  }
  protected:
  explicit ElementConstraintProto(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
  private:
  static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
    ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&::descriptor_table_ortools_2fsat_2fcp_5fmodel_2eproto);
    return ::descriptor_table_ortools_2fsat_2fcp_5fmodel_2eproto.file_level_metadata[kIndexInFileMessages];
  }

  public:

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

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

  enum : int {
    kVarsFieldNumber = 3,
    kIndexFieldNumber = 1,
    kTargetFieldNumber = 2,
  };
  // repeated int32 vars = 3;
  int vars_size() const;
  private:
  int _internal_vars_size() const;
  public:
  void clear_vars();
  private:
  ::PROTOBUF_NAMESPACE_ID::int32 _internal_vars(int index) const;
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
      _internal_vars() const;
  void _internal_add_vars(::PROTOBUF_NAMESPACE_ID::int32 value);
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
      _internal_mutable_vars();
  public:
  ::PROTOBUF_NAMESPACE_ID::int32 vars(int index) const;
  void set_vars(int index, ::PROTOBUF_NAMESPACE_ID::int32 value);
  void add_vars(::PROTOBUF_NAMESPACE_ID::int32 value);
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
      vars() const;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
      mutable_vars();

  // int32 index = 1;
  void clear_index();
  ::PROTOBUF_NAMESPACE_ID::int32 index() const;
  void set_index(::PROTOBUF_NAMESPACE_ID::int32 value);
  private:
  ::PROTOBUF_NAMESPACE_ID::int32 _internal_index() const;
  void _internal_set_index(::PROTOBUF_NAMESPACE_ID::int32 value);
  public:

  // int32 target = 2;
  void clear_target();
  ::PROTOBUF_NAMESPACE_ID::int32 target() const;
  void set_target(::PROTOBUF_NAMESPACE_ID::int32 value);
  private:
  ::PROTOBUF_NAMESPACE_ID::int32 _internal_target() const;
  void _internal_set_target(::PROTOBUF_NAMESPACE_ID::int32 value);
  public:

  // @@protoc_insertion_point(class_scope:operations_research.sat.ElementConstraintProto)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 > vars_;
  mutable std::atomic<int> _vars_cached_byte_size_;
  ::PROTOBUF_NAMESPACE_ID::int32 index_;
  ::PROTOBUF_NAMESPACE_ID::int32 target_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_ortools_2fsat_2fcp_5fmodel_2eproto;
};
// -------------------------------------------------------------------

class IntervalConstraintProto PROTOBUF_FINAL :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:operations_research.sat.IntervalConstraintProto) */ {
 public:
  inline IntervalConstraintProto() : IntervalConstraintProto(nullptr) {};
  virtual ~IntervalConstraintProto();

  IntervalConstraintProto(const IntervalConstraintProto& from);
  IntervalConstraintProto(IntervalConstraintProto&& from) noexcept
    : IntervalConstraintProto() {
    *this = ::std::move(from);
  }

  inline IntervalConstraintProto& operator=(const IntervalConstraintProto& from) {
    CopyFrom(from);
    return *this;
  }
  inline IntervalConstraintProto& operator=(IntervalConstraintProto&& from) noexcept {
    if (GetArena() == from.GetArena()) {
      if (this != &from) InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return GetMetadataStatic().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return GetMetadataStatic().reflection;
  }
  static const IntervalConstraintProto& default_instance();

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

  friend void swap(IntervalConstraintProto& a, IntervalConstraintProto& b) {
    a.Swap(&b);
  }
  inline void Swap(IntervalConstraintProto* other) {
    if (other == this) return;
    if (GetArena() == other->GetArena()) {
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(IntervalConstraintProto* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  inline IntervalConstraintProto* New() const final {
    return CreateMaybeMessage<IntervalConstraintProto>(nullptr);
  }

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

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  ::PROTOBUF_NAMESPACE_ID::uint8* _InternalSerialize(
      ::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  inline void SharedCtor();
  inline void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(IntervalConstraintProto* other);
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "operations_research.sat.IntervalConstraintProto";
  }
  protected:
  explicit IntervalConstraintProto(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
  private:
  static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
    ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&::descriptor_table_ortools_2fsat_2fcp_5fmodel_2eproto);
    return ::descriptor_table_ortools_2fsat_2fcp_5fmodel_2eproto.file_level_metadata[kIndexInFileMessages];
  }

  public:

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

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

  enum : int {
    kStartFieldNumber = 1,
    kEndFieldNumber = 2,
    kSizeFieldNumber = 3,
  };
  // int32 start = 1;
  void clear_start();
  ::PROTOBUF_NAMESPACE_ID::int32 start() const;
  void set_start(::PROTOBUF_NAMESPACE_ID::int32 value);
  private:
  ::PROTOBUF_NAMESPACE_ID::int32 _internal_start() const;
  void _internal_set_start(::PROTOBUF_NAMESPACE_ID::int32 value);
  public:

  // int32 end = 2;
  void clear_end();
  ::PROTOBUF_NAMESPACE_ID::int32 end() const;
  void set_end(::PROTOBUF_NAMESPACE_ID::int32 value);
  private:
  ::PROTOBUF_NAMESPACE_ID::int32 _internal_end() const;
  void _internal_set_end(::PROTOBUF_NAMESPACE_ID::int32 value);
  public:

  // int32 size = 3;
  void clear_size();
  ::PROTOBUF_NAMESPACE_ID::int32 size() const;
  void set_size(::PROTOBUF_NAMESPACE_ID::int32 value);
  private:
  ::PROTOBUF_NAMESPACE_ID::int32 _internal_size() const;
  void _internal_set_size(::PROTOBUF_NAMESPACE_ID::int32 value);
  public:

  // @@protoc_insertion_point(class_scope:operations_research.sat.IntervalConstraintProto)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::PROTOBUF_NAMESPACE_ID::int32 start_;
  ::PROTOBUF_NAMESPACE_ID::int32 end_;
  ::PROTOBUF_NAMESPACE_ID::int32 size_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_ortools_2fsat_2fcp_5fmodel_2eproto;
};
// -------------------------------------------------------------------

class NoOverlapConstraintProto PROTOBUF_FINAL :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:operations_research.sat.NoOverlapConstraintProto) */ {
 public:
  inline NoOverlapConstraintProto() : NoOverlapConstraintProto(nullptr) {};
  virtual ~NoOverlapConstraintProto();

  NoOverlapConstraintProto(const NoOverlapConstraintProto& from);
  NoOverlapConstraintProto(NoOverlapConstraintProto&& from) noexcept
    : NoOverlapConstraintProto() {
    *this = ::std::move(from);
  }

  inline NoOverlapConstraintProto& operator=(const NoOverlapConstraintProto& from) {
    CopyFrom(from);
    return *this;
  }
  inline NoOverlapConstraintProto& operator=(NoOverlapConstraintProto&& from) noexcept {
    if (GetArena() == from.GetArena()) {
      if (this != &from) InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return GetMetadataStatic().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return GetMetadataStatic().reflection;
  }
  static const NoOverlapConstraintProto& default_instance();

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

  friend void swap(NoOverlapConstraintProto& a, NoOverlapConstraintProto& b) {
    a.Swap(&b);
  }
  inline void Swap(NoOverlapConstraintProto* other) {
    if (other == this) return;
    if (GetArena() == other->GetArena()) {
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(NoOverlapConstraintProto* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  inline NoOverlapConstraintProto* New() const final {
    return CreateMaybeMessage<NoOverlapConstraintProto>(nullptr);
  }

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

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  ::PROTOBUF_NAMESPACE_ID::uint8* _InternalSerialize(
      ::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  inline void SharedCtor();
  inline void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(NoOverlapConstraintProto* other);
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "operations_research.sat.NoOverlapConstraintProto";
  }
  protected:
  explicit NoOverlapConstraintProto(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
  private:
  static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
    ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&::descriptor_table_ortools_2fsat_2fcp_5fmodel_2eproto);
    return ::descriptor_table_ortools_2fsat_2fcp_5fmodel_2eproto.file_level_metadata[kIndexInFileMessages];
  }

  public:

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

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

  enum : int {
    kIntervalsFieldNumber = 1,
  };
  // repeated int32 intervals = 1;
  int intervals_size() const;
  private:
  int _internal_intervals_size() const;
  public:
  void clear_intervals();
  private:
  ::PROTOBUF_NAMESPACE_ID::int32 _internal_intervals(int index) const;
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
      _internal_intervals() const;
  void _internal_add_intervals(::PROTOBUF_NAMESPACE_ID::int32 value);
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
      _internal_mutable_intervals();
  public:
  ::PROTOBUF_NAMESPACE_ID::int32 intervals(int index) const;
  void set_intervals(int index, ::PROTOBUF_NAMESPACE_ID::int32 value);
  void add_intervals(::PROTOBUF_NAMESPACE_ID::int32 value);
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
      intervals() const;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
      mutable_intervals();

  // @@protoc_insertion_point(class_scope:operations_research.sat.NoOverlapConstraintProto)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 > intervals_;
  mutable std::atomic<int> _intervals_cached_byte_size_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_ortools_2fsat_2fcp_5fmodel_2eproto;
};
// -------------------------------------------------------------------

class NoOverlap2DConstraintProto PROTOBUF_FINAL :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:operations_research.sat.NoOverlap2DConstraintProto) */ {
 public:
  inline NoOverlap2DConstraintProto() : NoOverlap2DConstraintProto(nullptr) {};
  virtual ~NoOverlap2DConstraintProto();

  NoOverlap2DConstraintProto(const NoOverlap2DConstraintProto& from);
  NoOverlap2DConstraintProto(NoOverlap2DConstraintProto&& from) noexcept
    : NoOverlap2DConstraintProto() {
    *this = ::std::move(from);
  }

  inline NoOverlap2DConstraintProto& operator=(const NoOverlap2DConstraintProto& from) {
    CopyFrom(from);
    return *this;
  }
  inline NoOverlap2DConstraintProto& operator=(NoOverlap2DConstraintProto&& from) noexcept {
    if (GetArena() == from.GetArena()) {
      if (this != &from) InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return GetMetadataStatic().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return GetMetadataStatic().reflection;
  }
  static const NoOverlap2DConstraintProto& default_instance();

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

  friend void swap(NoOverlap2DConstraintProto& a, NoOverlap2DConstraintProto& b) {
    a.Swap(&b);
  }
  inline void Swap(NoOverlap2DConstraintProto* other) {
    if (other == this) return;
    if (GetArena() == other->GetArena()) {
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(NoOverlap2DConstraintProto* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  inline NoOverlap2DConstraintProto* New() const final {
    return CreateMaybeMessage<NoOverlap2DConstraintProto>(nullptr);
  }

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

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  ::PROTOBUF_NAMESPACE_ID::uint8* _InternalSerialize(
      ::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  inline void SharedCtor();
  inline void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(NoOverlap2DConstraintProto* other);
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "operations_research.sat.NoOverlap2DConstraintProto";
  }
  protected:
  explicit NoOverlap2DConstraintProto(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
  private:
  static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
    ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&::descriptor_table_ortools_2fsat_2fcp_5fmodel_2eproto);
    return ::descriptor_table_ortools_2fsat_2fcp_5fmodel_2eproto.file_level_metadata[kIndexInFileMessages];
  }

  public:

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

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

  enum : int {
    kXIntervalsFieldNumber = 1,
    kYIntervalsFieldNumber = 2,
    kBoxesWithNullAreaCanOverlapFieldNumber = 3,
  };
  // repeated int32 x_intervals = 1;
  int x_intervals_size() const;
  private:
  int _internal_x_intervals_size() const;
  public:
  void clear_x_intervals();
  private:
  ::PROTOBUF_NAMESPACE_ID::int32 _internal_x_intervals(int index) const;
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
      _internal_x_intervals() const;
  void _internal_add_x_intervals(::PROTOBUF_NAMESPACE_ID::int32 value);
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
      _internal_mutable_x_intervals();
  public:
  ::PROTOBUF_NAMESPACE_ID::int32 x_intervals(int index) const;
  void set_x_intervals(int index, ::PROTOBUF_NAMESPACE_ID::int32 value);
  void add_x_intervals(::PROTOBUF_NAMESPACE_ID::int32 value);
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
      x_intervals() const;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
      mutable_x_intervals();

  // repeated int32 y_intervals = 2;
  int y_intervals_size() const;
  private:
  int _internal_y_intervals_size() const;
  public:
  void clear_y_intervals();
  private:
  ::PROTOBUF_NAMESPACE_ID::int32 _internal_y_intervals(int index) const;
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
      _internal_y_intervals() const;
  void _internal_add_y_intervals(::PROTOBUF_NAMESPACE_ID::int32 value);
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
      _internal_mutable_y_intervals();
  public:
  ::PROTOBUF_NAMESPACE_ID::int32 y_intervals(int index) const;
  void set_y_intervals(int index, ::PROTOBUF_NAMESPACE_ID::int32 value);
  void add_y_intervals(::PROTOBUF_NAMESPACE_ID::int32 value);
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
      y_intervals() const;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
      mutable_y_intervals();

  // bool boxes_with_null_area_can_overlap = 3;
  void clear_boxes_with_null_area_can_overlap();
  bool boxes_with_null_area_can_overlap() const;
  void set_boxes_with_null_area_can_overlap(bool value);
  private:
  bool _internal_boxes_with_null_area_can_overlap() const;
  void _internal_set_boxes_with_null_area_can_overlap(bool value);
  public:

  // @@protoc_insertion_point(class_scope:operations_research.sat.NoOverlap2DConstraintProto)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 > x_intervals_;
  mutable std::atomic<int> _x_intervals_cached_byte_size_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 > y_intervals_;
  mutable std::atomic<int> _y_intervals_cached_byte_size_;
  bool boxes_with_null_area_can_overlap_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_ortools_2fsat_2fcp_5fmodel_2eproto;
};
// -------------------------------------------------------------------

class CumulativeConstraintProto PROTOBUF_FINAL :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:operations_research.sat.CumulativeConstraintProto) */ {
 public:
  inline CumulativeConstraintProto() : CumulativeConstraintProto(nullptr) {};
  virtual ~CumulativeConstraintProto();

  CumulativeConstraintProto(const CumulativeConstraintProto& from);
  CumulativeConstraintProto(CumulativeConstraintProto&& from) noexcept
    : CumulativeConstraintProto() {
    *this = ::std::move(from);
  }

  inline CumulativeConstraintProto& operator=(const CumulativeConstraintProto& from) {
    CopyFrom(from);
    return *this;
  }
  inline CumulativeConstraintProto& operator=(CumulativeConstraintProto&& from) noexcept {
    if (GetArena() == from.GetArena()) {
      if (this != &from) InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return GetMetadataStatic().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return GetMetadataStatic().reflection;
  }
  static const CumulativeConstraintProto& default_instance();

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

  friend void swap(CumulativeConstraintProto& a, CumulativeConstraintProto& b) {
    a.Swap(&b);
  }
  inline void Swap(CumulativeConstraintProto* other) {
    if (other == this) return;
    if (GetArena() == other->GetArena()) {
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(CumulativeConstraintProto* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  inline CumulativeConstraintProto* New() const final {
    return CreateMaybeMessage<CumulativeConstraintProto>(nullptr);
  }

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

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  ::PROTOBUF_NAMESPACE_ID::uint8* _InternalSerialize(
      ::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  inline void SharedCtor();
  inline void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(CumulativeConstraintProto* other);
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "operations_research.sat.CumulativeConstraintProto";
  }
  protected:
  explicit CumulativeConstraintProto(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
  private:
  static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
    ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&::descriptor_table_ortools_2fsat_2fcp_5fmodel_2eproto);
    return ::descriptor_table_ortools_2fsat_2fcp_5fmodel_2eproto.file_level_metadata[kIndexInFileMessages];
  }

  public:

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

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

  enum : int {
    kIntervalsFieldNumber = 2,
    kDemandsFieldNumber = 3,
    kCapacityFieldNumber = 1,
  };
  // repeated int32 intervals = 2;
  int intervals_size() const;
  private:
  int _internal_intervals_size() const;
  public:
  void clear_intervals();
  private:
  ::PROTOBUF_NAMESPACE_ID::int32 _internal_intervals(int index) const;
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
      _internal_intervals() const;
  void _internal_add_intervals(::PROTOBUF_NAMESPACE_ID::int32 value);
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
      _internal_mutable_intervals();
  public:
  ::PROTOBUF_NAMESPACE_ID::int32 intervals(int index) const;
  void set_intervals(int index, ::PROTOBUF_NAMESPACE_ID::int32 value);
  void add_intervals(::PROTOBUF_NAMESPACE_ID::int32 value);
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
      intervals() const;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
      mutable_intervals();

  // repeated int32 demands = 3;
  int demands_size() const;
  private:
  int _internal_demands_size() const;
  public:
  void clear_demands();
  private:
  ::PROTOBUF_NAMESPACE_ID::int32 _internal_demands(int index) const;
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
      _internal_demands() const;
  void _internal_add_demands(::PROTOBUF_NAMESPACE_ID::int32 value);
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
      _internal_mutable_demands();
  public:
  ::PROTOBUF_NAMESPACE_ID::int32 demands(int index) const;
  void set_demands(int index, ::PROTOBUF_NAMESPACE_ID::int32 value);
  void add_demands(::PROTOBUF_NAMESPACE_ID::int32 value);
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
      demands() const;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
      mutable_demands();

  // int32 capacity = 1;
  void clear_capacity();
  ::PROTOBUF_NAMESPACE_ID::int32 capacity() const;
  void set_capacity(::PROTOBUF_NAMESPACE_ID::int32 value);
  private:
  ::PROTOBUF_NAMESPACE_ID::int32 _internal_capacity() const;
  void _internal_set_capacity(::PROTOBUF_NAMESPACE_ID::int32 value);
  public:

  // @@protoc_insertion_point(class_scope:operations_research.sat.CumulativeConstraintProto)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 > intervals_;
  mutable std::atomic<int> _intervals_cached_byte_size_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 > demands_;
  mutable std::atomic<int> _demands_cached_byte_size_;
  ::PROTOBUF_NAMESPACE_ID::int32 capacity_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_ortools_2fsat_2fcp_5fmodel_2eproto;
};
// -------------------------------------------------------------------

class ReservoirConstraintProto PROTOBUF_FINAL :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:operations_research.sat.ReservoirConstraintProto) */ {
 public:
  inline ReservoirConstraintProto() : ReservoirConstraintProto(nullptr) {};
  virtual ~ReservoirConstraintProto();

  ReservoirConstraintProto(const ReservoirConstraintProto& from);
  ReservoirConstraintProto(ReservoirConstraintProto&& from) noexcept
    : ReservoirConstraintProto() {
    *this = ::std::move(from);
  }

  inline ReservoirConstraintProto& operator=(const ReservoirConstraintProto& from) {
    CopyFrom(from);
    return *this;
  }
  inline ReservoirConstraintProto& operator=(ReservoirConstraintProto&& from) noexcept {
    if (GetArena() == from.GetArena()) {
      if (this != &from) InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return GetMetadataStatic().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return GetMetadataStatic().reflection;
  }
  static const ReservoirConstraintProto& default_instance();

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

  friend void swap(ReservoirConstraintProto& a, ReservoirConstraintProto& b) {
    a.Swap(&b);
  }
  inline void Swap(ReservoirConstraintProto* other) {
    if (other == this) return;
    if (GetArena() == other->GetArena()) {
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(ReservoirConstraintProto* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  inline ReservoirConstraintProto* New() const final {
    return CreateMaybeMessage<ReservoirConstraintProto>(nullptr);
  }

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

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  ::PROTOBUF_NAMESPACE_ID::uint8* _InternalSerialize(
      ::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  inline void SharedCtor();
  inline void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(ReservoirConstraintProto* other);
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "operations_research.sat.ReservoirConstraintProto";
  }
  protected:
  explicit ReservoirConstraintProto(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
  private:
  static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
    ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&::descriptor_table_ortools_2fsat_2fcp_5fmodel_2eproto);
    return ::descriptor_table_ortools_2fsat_2fcp_5fmodel_2eproto.file_level_metadata[kIndexInFileMessages];
  }

  public:

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

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

  enum : int {
    kTimesFieldNumber = 3,
    kDemandsFieldNumber = 4,
    kActivesFieldNumber = 5,
    kMinLevelFieldNumber = 1,
    kMaxLevelFieldNumber = 2,
  };
  // repeated int32 times = 3;
  int times_size() const;
  private:
  int _internal_times_size() const;
  public:
  void clear_times();
  private:
  ::PROTOBUF_NAMESPACE_ID::int32 _internal_times(int index) const;
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
      _internal_times() const;
  void _internal_add_times(::PROTOBUF_NAMESPACE_ID::int32 value);
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
      _internal_mutable_times();
  public:
  ::PROTOBUF_NAMESPACE_ID::int32 times(int index) const;
  void set_times(int index, ::PROTOBUF_NAMESPACE_ID::int32 value);
  void add_times(::PROTOBUF_NAMESPACE_ID::int32 value);
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
      times() const;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
      mutable_times();

  // repeated int64 demands = 4;
  int demands_size() const;
  private:
  int _internal_demands_size() const;
  public:
  void clear_demands();
  private:
  ::PROTOBUF_NAMESPACE_ID::int64 _internal_demands(int index) const;
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >&
      _internal_demands() const;
  void _internal_add_demands(::PROTOBUF_NAMESPACE_ID::int64 value);
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >*
      _internal_mutable_demands();
  public:
  ::PROTOBUF_NAMESPACE_ID::int64 demands(int index) const;
  void set_demands(int index, ::PROTOBUF_NAMESPACE_ID::int64 value);
  void add_demands(::PROTOBUF_NAMESPACE_ID::int64 value);
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >&
      demands() const;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >*
      mutable_demands();

  // repeated int32 actives = 5;
  int actives_size() const;
  private:
  int _internal_actives_size() const;
  public:
  void clear_actives();
  private:
  ::PROTOBUF_NAMESPACE_ID::int32 _internal_actives(int index) const;
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
      _internal_actives() const;
  void _internal_add_actives(::PROTOBUF_NAMESPACE_ID::int32 value);
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
      _internal_mutable_actives();
  public:
  ::PROTOBUF_NAMESPACE_ID::int32 actives(int index) const;
  void set_actives(int index, ::PROTOBUF_NAMESPACE_ID::int32 value);
  void add_actives(::PROTOBUF_NAMESPACE_ID::int32 value);
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
      actives() const;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
      mutable_actives();

  // int64 min_level = 1;
  void clear_min_level();
  ::PROTOBUF_NAMESPACE_ID::int64 min_level() const;
  void set_min_level(::PROTOBUF_NAMESPACE_ID::int64 value);
  private:
  ::PROTOBUF_NAMESPACE_ID::int64 _internal_min_level() const;
  void _internal_set_min_level(::PROTOBUF_NAMESPACE_ID::int64 value);
  public:

  // int64 max_level = 2;
  void clear_max_level();
  ::PROTOBUF_NAMESPACE_ID::int64 max_level() const;
  void set_max_level(::PROTOBUF_NAMESPACE_ID::int64 value);
  private:
  ::PROTOBUF_NAMESPACE_ID::int64 _internal_max_level() const;
  void _internal_set_max_level(::PROTOBUF_NAMESPACE_ID::int64 value);
  public:

  // @@protoc_insertion_point(class_scope:operations_research.sat.ReservoirConstraintProto)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 > times_;
  mutable std::atomic<int> _times_cached_byte_size_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 > demands_;
  mutable std::atomic<int> _demands_cached_byte_size_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 > actives_;
  mutable std::atomic<int> _actives_cached_byte_size_;
  ::PROTOBUF_NAMESPACE_ID::int64 min_level_;
  ::PROTOBUF_NAMESPACE_ID::int64 max_level_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_ortools_2fsat_2fcp_5fmodel_2eproto;
};
// -------------------------------------------------------------------

class CircuitConstraintProto PROTOBUF_FINAL :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:operations_research.sat.CircuitConstraintProto) */ {
 public:
  inline CircuitConstraintProto() : CircuitConstraintProto(nullptr) {};
  virtual ~CircuitConstraintProto();

  CircuitConstraintProto(const CircuitConstraintProto& from);
  CircuitConstraintProto(CircuitConstraintProto&& from) noexcept
    : CircuitConstraintProto() {
    *this = ::std::move(from);
  }

  inline CircuitConstraintProto& operator=(const CircuitConstraintProto& from) {
    CopyFrom(from);
    return *this;
  }
  inline CircuitConstraintProto& operator=(CircuitConstraintProto&& from) noexcept {
    if (GetArena() == from.GetArena()) {
      if (this != &from) InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return GetMetadataStatic().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return GetMetadataStatic().reflection;
  }
  static const CircuitConstraintProto& default_instance();

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

  friend void swap(CircuitConstraintProto& a, CircuitConstraintProto& b) {
    a.Swap(&b);
  }
  inline void Swap(CircuitConstraintProto* other) {
    if (other == this) return;
    if (GetArena() == other->GetArena()) {
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(CircuitConstraintProto* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  inline CircuitConstraintProto* New() const final {
    return CreateMaybeMessage<CircuitConstraintProto>(nullptr);
  }

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

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  ::PROTOBUF_NAMESPACE_ID::uint8* _InternalSerialize(
      ::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  inline void SharedCtor();
  inline void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(CircuitConstraintProto* other);
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "operations_research.sat.CircuitConstraintProto";
  }
  protected:
  explicit CircuitConstraintProto(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
  private:
  static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
    ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&::descriptor_table_ortools_2fsat_2fcp_5fmodel_2eproto);
    return ::descriptor_table_ortools_2fsat_2fcp_5fmodel_2eproto.file_level_metadata[kIndexInFileMessages];
  }

  public:

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

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

  enum : int {
    kTailsFieldNumber = 3,
    kHeadsFieldNumber = 4,
    kLiteralsFieldNumber = 5,
  };
  // repeated int32 tails = 3;
  int tails_size() const;
  private:
  int _internal_tails_size() const;
  public:
  void clear_tails();
  private:
  ::PROTOBUF_NAMESPACE_ID::int32 _internal_tails(int index) const;
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
      _internal_tails() const;
  void _internal_add_tails(::PROTOBUF_NAMESPACE_ID::int32 value);
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
      _internal_mutable_tails();
  public:
  ::PROTOBUF_NAMESPACE_ID::int32 tails(int index) const;
  void set_tails(int index, ::PROTOBUF_NAMESPACE_ID::int32 value);
  void add_tails(::PROTOBUF_NAMESPACE_ID::int32 value);
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
      tails() const;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
      mutable_tails();

  // repeated int32 heads = 4;
  int heads_size() const;
  private:
  int _internal_heads_size() const;
  public:
  void clear_heads();
  private:
  ::PROTOBUF_NAMESPACE_ID::int32 _internal_heads(int index) const;
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
      _internal_heads() const;
  void _internal_add_heads(::PROTOBUF_NAMESPACE_ID::int32 value);
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
      _internal_mutable_heads();
  public:
  ::PROTOBUF_NAMESPACE_ID::int32 heads(int index) const;
  void set_heads(int index, ::PROTOBUF_NAMESPACE_ID::int32 value);
  void add_heads(::PROTOBUF_NAMESPACE_ID::int32 value);
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
      heads() const;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
      mutable_heads();

  // repeated int32 literals = 5;
  int literals_size() const;
  private:
  int _internal_literals_size() const;
  public:
  void clear_literals();
  private:
  ::PROTOBUF_NAMESPACE_ID::int32 _internal_literals(int index) const;
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
      _internal_literals() const;
  void _internal_add_literals(::PROTOBUF_NAMESPACE_ID::int32 value);
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
      _internal_mutable_literals();
  public:
  ::PROTOBUF_NAMESPACE_ID::int32 literals(int index) const;
  void set_literals(int index, ::PROTOBUF_NAMESPACE_ID::int32 value);
  void add_literals(::PROTOBUF_NAMESPACE_ID::int32 value);
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
      literals() const;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
      mutable_literals();

  // @@protoc_insertion_point(class_scope:operations_research.sat.CircuitConstraintProto)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 > tails_;
  mutable std::atomic<int> _tails_cached_byte_size_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 > heads_;
  mutable std::atomic<int> _heads_cached_byte_size_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 > literals_;
  mutable std::atomic<int> _literals_cached_byte_size_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_ortools_2fsat_2fcp_5fmodel_2eproto;
};
// -------------------------------------------------------------------

class RoutesConstraintProto PROTOBUF_FINAL :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:operations_research.sat.RoutesConstraintProto) */ {
 public:
  inline RoutesConstraintProto() : RoutesConstraintProto(nullptr) {};
  virtual ~RoutesConstraintProto();

  RoutesConstraintProto(const RoutesConstraintProto& from);
  RoutesConstraintProto(RoutesConstraintProto&& from) noexcept
    : RoutesConstraintProto() {
    *this = ::std::move(from);
  }

  inline RoutesConstraintProto& operator=(const RoutesConstraintProto& from) {
    CopyFrom(from);
    return *this;
  }
  inline RoutesConstraintProto& operator=(RoutesConstraintProto&& from) noexcept {
    if (GetArena() == from.GetArena()) {
      if (this != &from) InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return GetMetadataStatic().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return GetMetadataStatic().reflection;
  }
  static const RoutesConstraintProto& default_instance();

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

  friend void swap(RoutesConstraintProto& a, RoutesConstraintProto& b) {
    a.Swap(&b);
  }
  inline void Swap(RoutesConstraintProto* other) {
    if (other == this) return;
    if (GetArena() == other->GetArena()) {
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(RoutesConstraintProto* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  inline RoutesConstraintProto* New() const final {
    return CreateMaybeMessage<RoutesConstraintProto>(nullptr);
  }

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

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  ::PROTOBUF_NAMESPACE_ID::uint8* _InternalSerialize(
      ::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  inline void SharedCtor();
  inline void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(RoutesConstraintProto* other);
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "operations_research.sat.RoutesConstraintProto";
  }
  protected:
  explicit RoutesConstraintProto(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
  private:
  static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
    ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&::descriptor_table_ortools_2fsat_2fcp_5fmodel_2eproto);
    return ::descriptor_table_ortools_2fsat_2fcp_5fmodel_2eproto.file_level_metadata[kIndexInFileMessages];
  }

  public:

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

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

  enum : int {
    kTailsFieldNumber = 1,
    kHeadsFieldNumber = 2,
    kLiteralsFieldNumber = 3,
    kDemandsFieldNumber = 4,
    kCapacityFieldNumber = 5,
  };
  // repeated int32 tails = 1;
  int tails_size() const;
  private:
  int _internal_tails_size() const;
  public:
  void clear_tails();
  private:
  ::PROTOBUF_NAMESPACE_ID::int32 _internal_tails(int index) const;
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
      _internal_tails() const;
  void _internal_add_tails(::PROTOBUF_NAMESPACE_ID::int32 value);
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
      _internal_mutable_tails();
  public:
  ::PROTOBUF_NAMESPACE_ID::int32 tails(int index) const;
  void set_tails(int index, ::PROTOBUF_NAMESPACE_ID::int32 value);
  void add_tails(::PROTOBUF_NAMESPACE_ID::int32 value);
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
      tails() const;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
      mutable_tails();

  // repeated int32 heads = 2;
  int heads_size() const;
  private:
  int _internal_heads_size() const;
  public:
  void clear_heads();
  private:
  ::PROTOBUF_NAMESPACE_ID::int32 _internal_heads(int index) const;
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
      _internal_heads() const;
  void _internal_add_heads(::PROTOBUF_NAMESPACE_ID::int32 value);
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
      _internal_mutable_heads();
  public:
  ::PROTOBUF_NAMESPACE_ID::int32 heads(int index) const;
  void set_heads(int index, ::PROTOBUF_NAMESPACE_ID::int32 value);
  void add_heads(::PROTOBUF_NAMESPACE_ID::int32 value);
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
      heads() const;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
      mutable_heads();

  // repeated int32 literals = 3;
  int literals_size() const;
  private:
  int _internal_literals_size() const;
  public:
  void clear_literals();
  private:
  ::PROTOBUF_NAMESPACE_ID::int32 _internal_literals(int index) const;
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
      _internal_literals() const;
  void _internal_add_literals(::PROTOBUF_NAMESPACE_ID::int32 value);
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
      _internal_mutable_literals();
  public:
  ::PROTOBUF_NAMESPACE_ID::int32 literals(int index) const;
  void set_literals(int index, ::PROTOBUF_NAMESPACE_ID::int32 value);
  void add_literals(::PROTOBUF_NAMESPACE_ID::int32 value);
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
      literals() const;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
      mutable_literals();

  // repeated int32 demands = 4;
  int demands_size() const;
  private:
  int _internal_demands_size() const;
  public:
  void clear_demands();
  private:
  ::PROTOBUF_NAMESPACE_ID::int32 _internal_demands(int index) const;
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
      _internal_demands() const;
  void _internal_add_demands(::PROTOBUF_NAMESPACE_ID::int32 value);
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
      _internal_mutable_demands();
  public:
  ::PROTOBUF_NAMESPACE_ID::int32 demands(int index) const;
  void set_demands(int index, ::PROTOBUF_NAMESPACE_ID::int32 value);
  void add_demands(::PROTOBUF_NAMESPACE_ID::int32 value);
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
      demands() const;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
      mutable_demands();

  // int64 capacity = 5;
  void clear_capacity();
  ::PROTOBUF_NAMESPACE_ID::int64 capacity() const;
  void set_capacity(::PROTOBUF_NAMESPACE_ID::int64 value);
  private:
  ::PROTOBUF_NAMESPACE_ID::int64 _internal_capacity() const;
  void _internal_set_capacity(::PROTOBUF_NAMESPACE_ID::int64 value);
  public:

  // @@protoc_insertion_point(class_scope:operations_research.sat.RoutesConstraintProto)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 > tails_;
  mutable std::atomic<int> _tails_cached_byte_size_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 > heads_;
  mutable std::atomic<int> _heads_cached_byte_size_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 > literals_;
  mutable std::atomic<int> _literals_cached_byte_size_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 > demands_;
  mutable std::atomic<int> _demands_cached_byte_size_;
  ::PROTOBUF_NAMESPACE_ID::int64 capacity_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_ortools_2fsat_2fcp_5fmodel_2eproto;
};
// -------------------------------------------------------------------

class CircuitCoveringConstraintProto PROTOBUF_FINAL :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:operations_research.sat.CircuitCoveringConstraintProto) */ {
 public:
  inline CircuitCoveringConstraintProto() : CircuitCoveringConstraintProto(nullptr) {};
  virtual ~CircuitCoveringConstraintProto();

  CircuitCoveringConstraintProto(const CircuitCoveringConstraintProto& from);
  CircuitCoveringConstraintProto(CircuitCoveringConstraintProto&& from) noexcept
    : CircuitCoveringConstraintProto() {
    *this = ::std::move(from);
  }

  inline CircuitCoveringConstraintProto& operator=(const CircuitCoveringConstraintProto& from) {
    CopyFrom(from);
    return *this;
  }
  inline CircuitCoveringConstraintProto& operator=(CircuitCoveringConstraintProto&& from) noexcept {
    if (GetArena() == from.GetArena()) {
      if (this != &from) InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return GetMetadataStatic().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return GetMetadataStatic().reflection;
  }
  static const CircuitCoveringConstraintProto& default_instance();

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

  friend void swap(CircuitCoveringConstraintProto& a, CircuitCoveringConstraintProto& b) {
    a.Swap(&b);
  }
  inline void Swap(CircuitCoveringConstraintProto* other) {
    if (other == this) return;
    if (GetArena() == other->GetArena()) {
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(CircuitCoveringConstraintProto* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  inline CircuitCoveringConstraintProto* New() const final {
    return CreateMaybeMessage<CircuitCoveringConstraintProto>(nullptr);
  }

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

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  ::PROTOBUF_NAMESPACE_ID::uint8* _InternalSerialize(
      ::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  inline void SharedCtor();
  inline void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(CircuitCoveringConstraintProto* other);
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "operations_research.sat.CircuitCoveringConstraintProto";
  }
  protected:
  explicit CircuitCoveringConstraintProto(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
  private:
  static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
    ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&::descriptor_table_ortools_2fsat_2fcp_5fmodel_2eproto);
    return ::descriptor_table_ortools_2fsat_2fcp_5fmodel_2eproto.file_level_metadata[kIndexInFileMessages];
  }

  public:

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

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

  enum : int {
    kNextsFieldNumber = 1,
    kDistinguishedNodesFieldNumber = 2,
  };
  // repeated int32 nexts = 1;
  int nexts_size() const;
  private:
  int _internal_nexts_size() const;
  public:
  void clear_nexts();
  private:
  ::PROTOBUF_NAMESPACE_ID::int32 _internal_nexts(int index) const;
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
      _internal_nexts() const;
  void _internal_add_nexts(::PROTOBUF_NAMESPACE_ID::int32 value);
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
      _internal_mutable_nexts();
  public:
  ::PROTOBUF_NAMESPACE_ID::int32 nexts(int index) const;
  void set_nexts(int index, ::PROTOBUF_NAMESPACE_ID::int32 value);
  void add_nexts(::PROTOBUF_NAMESPACE_ID::int32 value);
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
      nexts() const;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
      mutable_nexts();

  // repeated int64 distinguished_nodes = 2;
  int distinguished_nodes_size() const;
  private:
  int _internal_distinguished_nodes_size() const;
  public:
  void clear_distinguished_nodes();
  private:
  ::PROTOBUF_NAMESPACE_ID::int64 _internal_distinguished_nodes(int index) const;
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >&
      _internal_distinguished_nodes() const;
  void _internal_add_distinguished_nodes(::PROTOBUF_NAMESPACE_ID::int64 value);
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >*
      _internal_mutable_distinguished_nodes();
  public:
  ::PROTOBUF_NAMESPACE_ID::int64 distinguished_nodes(int index) const;
  void set_distinguished_nodes(int index, ::PROTOBUF_NAMESPACE_ID::int64 value);
  void add_distinguished_nodes(::PROTOBUF_NAMESPACE_ID::int64 value);
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >&
      distinguished_nodes() const;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >*
      mutable_distinguished_nodes();

  // @@protoc_insertion_point(class_scope:operations_research.sat.CircuitCoveringConstraintProto)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 > nexts_;
  mutable std::atomic<int> _nexts_cached_byte_size_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 > distinguished_nodes_;
  mutable std::atomic<int> _distinguished_nodes_cached_byte_size_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_ortools_2fsat_2fcp_5fmodel_2eproto;
};
// -------------------------------------------------------------------

class TableConstraintProto PROTOBUF_FINAL :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:operations_research.sat.TableConstraintProto) */ {
 public:
  inline TableConstraintProto() : TableConstraintProto(nullptr) {};
  virtual ~TableConstraintProto();

  TableConstraintProto(const TableConstraintProto& from);
  TableConstraintProto(TableConstraintProto&& from) noexcept
    : TableConstraintProto() {
    *this = ::std::move(from);
  }

  inline TableConstraintProto& operator=(const TableConstraintProto& from) {
    CopyFrom(from);
    return *this;
  }
  inline TableConstraintProto& operator=(TableConstraintProto&& from) noexcept {
    if (GetArena() == from.GetArena()) {
      if (this != &from) InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return GetMetadataStatic().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return GetMetadataStatic().reflection;
  }
  static const TableConstraintProto& default_instance();

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

  friend void swap(TableConstraintProto& a, TableConstraintProto& b) {
    a.Swap(&b);
  }
  inline void Swap(TableConstraintProto* other) {
    if (other == this) return;
    if (GetArena() == other->GetArena()) {
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(TableConstraintProto* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  inline TableConstraintProto* New() const final {
    return CreateMaybeMessage<TableConstraintProto>(nullptr);
  }

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

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  ::PROTOBUF_NAMESPACE_ID::uint8* _InternalSerialize(
      ::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  inline void SharedCtor();
  inline void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(TableConstraintProto* other);
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "operations_research.sat.TableConstraintProto";
  }
  protected:
  explicit TableConstraintProto(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
  private:
  static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
    ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&::descriptor_table_ortools_2fsat_2fcp_5fmodel_2eproto);
    return ::descriptor_table_ortools_2fsat_2fcp_5fmodel_2eproto.file_level_metadata[kIndexInFileMessages];
  }

  public:

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

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

  enum : int {
    kVarsFieldNumber = 1,
    kValuesFieldNumber = 2,
    kNegatedFieldNumber = 3,
  };
  // repeated int32 vars = 1;
  int vars_size() const;
  private:
  int _internal_vars_size() const;
  public:
  void clear_vars();
  private:
  ::PROTOBUF_NAMESPACE_ID::int32 _internal_vars(int index) const;
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
      _internal_vars() const;
  void _internal_add_vars(::PROTOBUF_NAMESPACE_ID::int32 value);
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
      _internal_mutable_vars();
  public:
  ::PROTOBUF_NAMESPACE_ID::int32 vars(int index) const;
  void set_vars(int index, ::PROTOBUF_NAMESPACE_ID::int32 value);
  void add_vars(::PROTOBUF_NAMESPACE_ID::int32 value);
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
      vars() const;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
      mutable_vars();

  // repeated int64 values = 2;
  int values_size() const;
  private:
  int _internal_values_size() const;
  public:
  void clear_values();
  private:
  ::PROTOBUF_NAMESPACE_ID::int64 _internal_values(int index) const;
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >&
      _internal_values() const;
  void _internal_add_values(::PROTOBUF_NAMESPACE_ID::int64 value);
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >*
      _internal_mutable_values();
  public:
  ::PROTOBUF_NAMESPACE_ID::int64 values(int index) const;
  void set_values(int index, ::PROTOBUF_NAMESPACE_ID::int64 value);
  void add_values(::PROTOBUF_NAMESPACE_ID::int64 value);
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >&
      values() const;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >*
      mutable_values();

  // bool negated = 3;
  void clear_negated();
  bool negated() const;
  void set_negated(bool value);
  private:
  bool _internal_negated() const;
  void _internal_set_negated(bool value);
  public:

  // @@protoc_insertion_point(class_scope:operations_research.sat.TableConstraintProto)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 > vars_;
  mutable std::atomic<int> _vars_cached_byte_size_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 > values_;
  mutable std::atomic<int> _values_cached_byte_size_;
  bool negated_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_ortools_2fsat_2fcp_5fmodel_2eproto;
};
// -------------------------------------------------------------------

class InverseConstraintProto PROTOBUF_FINAL :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:operations_research.sat.InverseConstraintProto) */ {
 public:
  inline InverseConstraintProto() : InverseConstraintProto(nullptr) {};
  virtual ~InverseConstraintProto();

  InverseConstraintProto(const InverseConstraintProto& from);
  InverseConstraintProto(InverseConstraintProto&& from) noexcept
    : InverseConstraintProto() {
    *this = ::std::move(from);
  }

  inline InverseConstraintProto& operator=(const InverseConstraintProto& from) {
    CopyFrom(from);
    return *this;
  }
  inline InverseConstraintProto& operator=(InverseConstraintProto&& from) noexcept {
    if (GetArena() == from.GetArena()) {
      if (this != &from) InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return GetMetadataStatic().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return GetMetadataStatic().reflection;
  }
  static const InverseConstraintProto& default_instance();

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

  friend void swap(InverseConstraintProto& a, InverseConstraintProto& b) {
    a.Swap(&b);
  }
  inline void Swap(InverseConstraintProto* other) {
    if (other == this) return;
    if (GetArena() == other->GetArena()) {
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(InverseConstraintProto* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  inline InverseConstraintProto* New() const final {
    return CreateMaybeMessage<InverseConstraintProto>(nullptr);
  }

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

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  ::PROTOBUF_NAMESPACE_ID::uint8* _InternalSerialize(
      ::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  inline void SharedCtor();
  inline void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(InverseConstraintProto* other);
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "operations_research.sat.InverseConstraintProto";
  }
  protected:
  explicit InverseConstraintProto(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
  private:
  static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
    ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&::descriptor_table_ortools_2fsat_2fcp_5fmodel_2eproto);
    return ::descriptor_table_ortools_2fsat_2fcp_5fmodel_2eproto.file_level_metadata[kIndexInFileMessages];
  }

  public:

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

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

  enum : int {
    kFDirectFieldNumber = 1,
    kFInverseFieldNumber = 2,
  };
  // repeated int32 f_direct = 1;
  int f_direct_size() const;
  private:
  int _internal_f_direct_size() const;
  public:
  void clear_f_direct();
  private:
  ::PROTOBUF_NAMESPACE_ID::int32 _internal_f_direct(int index) const;
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
      _internal_f_direct() const;
  void _internal_add_f_direct(::PROTOBUF_NAMESPACE_ID::int32 value);
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
      _internal_mutable_f_direct();
  public:
  ::PROTOBUF_NAMESPACE_ID::int32 f_direct(int index) const;
  void set_f_direct(int index, ::PROTOBUF_NAMESPACE_ID::int32 value);
  void add_f_direct(::PROTOBUF_NAMESPACE_ID::int32 value);
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
      f_direct() const;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
      mutable_f_direct();

  // repeated int32 f_inverse = 2;
  int f_inverse_size() const;
  private:
  int _internal_f_inverse_size() const;
  public:
  void clear_f_inverse();
  private:
  ::PROTOBUF_NAMESPACE_ID::int32 _internal_f_inverse(int index) const;
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
      _internal_f_inverse() const;
  void _internal_add_f_inverse(::PROTOBUF_NAMESPACE_ID::int32 value);
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
      _internal_mutable_f_inverse();
  public:
  ::PROTOBUF_NAMESPACE_ID::int32 f_inverse(int index) const;
  void set_f_inverse(int index, ::PROTOBUF_NAMESPACE_ID::int32 value);
  void add_f_inverse(::PROTOBUF_NAMESPACE_ID::int32 value);
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
      f_inverse() const;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
      mutable_f_inverse();

  // @@protoc_insertion_point(class_scope:operations_research.sat.InverseConstraintProto)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 > f_direct_;
  mutable std::atomic<int> _f_direct_cached_byte_size_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 > f_inverse_;
  mutable std::atomic<int> _f_inverse_cached_byte_size_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_ortools_2fsat_2fcp_5fmodel_2eproto;
};
// -------------------------------------------------------------------

class AutomatonConstraintProto PROTOBUF_FINAL :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:operations_research.sat.AutomatonConstraintProto) */ {
 public:
  inline AutomatonConstraintProto() : AutomatonConstraintProto(nullptr) {};
  virtual ~AutomatonConstraintProto();

  AutomatonConstraintProto(const AutomatonConstraintProto& from);
  AutomatonConstraintProto(AutomatonConstraintProto&& from) noexcept
    : AutomatonConstraintProto() {
    *this = ::std::move(from);
  }

  inline AutomatonConstraintProto& operator=(const AutomatonConstraintProto& from) {
    CopyFrom(from);
    return *this;
  }
  inline AutomatonConstraintProto& operator=(AutomatonConstraintProto&& from) noexcept {
    if (GetArena() == from.GetArena()) {
      if (this != &from) InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return GetMetadataStatic().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return GetMetadataStatic().reflection;
  }
  static const AutomatonConstraintProto& default_instance();

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

  friend void swap(AutomatonConstraintProto& a, AutomatonConstraintProto& b) {
    a.Swap(&b);
  }
  inline void Swap(AutomatonConstraintProto* other) {
    if (other == this) return;
    if (GetArena() == other->GetArena()) {
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(AutomatonConstraintProto* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  inline AutomatonConstraintProto* New() const final {
    return CreateMaybeMessage<AutomatonConstraintProto>(nullptr);
  }

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

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  ::PROTOBUF_NAMESPACE_ID::uint8* _InternalSerialize(
      ::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  inline void SharedCtor();
  inline void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(AutomatonConstraintProto* other);
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "operations_research.sat.AutomatonConstraintProto";
  }
  protected:
  explicit AutomatonConstraintProto(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
  private:
  static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
    ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&::descriptor_table_ortools_2fsat_2fcp_5fmodel_2eproto);
    return ::descriptor_table_ortools_2fsat_2fcp_5fmodel_2eproto.file_level_metadata[kIndexInFileMessages];
  }

  public:

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

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

  enum : int {
    kFinalStatesFieldNumber = 3,
    kTransitionTailFieldNumber = 4,
    kTransitionHeadFieldNumber = 5,
    kTransitionLabelFieldNumber = 6,
    kVarsFieldNumber = 7,
    kStartingStateFieldNumber = 2,
  };
  // repeated int64 final_states = 3;
  int final_states_size() const;
  private:
  int _internal_final_states_size() const;
  public:
  void clear_final_states();
  private:
  ::PROTOBUF_NAMESPACE_ID::int64 _internal_final_states(int index) const;
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >&
      _internal_final_states() const;
  void _internal_add_final_states(::PROTOBUF_NAMESPACE_ID::int64 value);
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >*
      _internal_mutable_final_states();
  public:
  ::PROTOBUF_NAMESPACE_ID::int64 final_states(int index) const;
  void set_final_states(int index, ::PROTOBUF_NAMESPACE_ID::int64 value);
  void add_final_states(::PROTOBUF_NAMESPACE_ID::int64 value);
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >&
      final_states() const;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >*
      mutable_final_states();

  // repeated int64 transition_tail = 4;
  int transition_tail_size() const;
  private:
  int _internal_transition_tail_size() const;
  public:
  void clear_transition_tail();
  private:
  ::PROTOBUF_NAMESPACE_ID::int64 _internal_transition_tail(int index) const;
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >&
      _internal_transition_tail() const;
  void _internal_add_transition_tail(::PROTOBUF_NAMESPACE_ID::int64 value);
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >*
      _internal_mutable_transition_tail();
  public:
  ::PROTOBUF_NAMESPACE_ID::int64 transition_tail(int index) const;
  void set_transition_tail(int index, ::PROTOBUF_NAMESPACE_ID::int64 value);
  void add_transition_tail(::PROTOBUF_NAMESPACE_ID::int64 value);
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >&
      transition_tail() const;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >*
      mutable_transition_tail();

  // repeated int64 transition_head = 5;
  int transition_head_size() const;
  private:
  int _internal_transition_head_size() const;
  public:
  void clear_transition_head();
  private:
  ::PROTOBUF_NAMESPACE_ID::int64 _internal_transition_head(int index) const;
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >&
      _internal_transition_head() const;
  void _internal_add_transition_head(::PROTOBUF_NAMESPACE_ID::int64 value);
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >*
      _internal_mutable_transition_head();
  public:
  ::PROTOBUF_NAMESPACE_ID::int64 transition_head(int index) const;
  void set_transition_head(int index, ::PROTOBUF_NAMESPACE_ID::int64 value);
  void add_transition_head(::PROTOBUF_NAMESPACE_ID::int64 value);
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >&
      transition_head() const;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >*
      mutable_transition_head();

  // repeated int64 transition_label = 6;
  int transition_label_size() const;
  private:
  int _internal_transition_label_size() const;
  public:
  void clear_transition_label();
  private:
  ::PROTOBUF_NAMESPACE_ID::int64 _internal_transition_label(int index) const;
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >&
      _internal_transition_label() const;
  void _internal_add_transition_label(::PROTOBUF_NAMESPACE_ID::int64 value);
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >*
      _internal_mutable_transition_label();
  public:
  ::PROTOBUF_NAMESPACE_ID::int64 transition_label(int index) const;
  void set_transition_label(int index, ::PROTOBUF_NAMESPACE_ID::int64 value);
  void add_transition_label(::PROTOBUF_NAMESPACE_ID::int64 value);
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >&
      transition_label() const;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >*
      mutable_transition_label();

  // repeated int32 vars = 7;
  int vars_size() const;
  private:
  int _internal_vars_size() const;
  public:
  void clear_vars();
  private:
  ::PROTOBUF_NAMESPACE_ID::int32 _internal_vars(int index) const;
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
      _internal_vars() const;
  void _internal_add_vars(::PROTOBUF_NAMESPACE_ID::int32 value);
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
      _internal_mutable_vars();
  public:
  ::PROTOBUF_NAMESPACE_ID::int32 vars(int index) const;
  void set_vars(int index, ::PROTOBUF_NAMESPACE_ID::int32 value);
  void add_vars(::PROTOBUF_NAMESPACE_ID::int32 value);
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
      vars() const;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
      mutable_vars();

  // int64 starting_state = 2;
  void clear_starting_state();
  ::PROTOBUF_NAMESPACE_ID::int64 starting_state() const;
  void set_starting_state(::PROTOBUF_NAMESPACE_ID::int64 value);
  private:
  ::PROTOBUF_NAMESPACE_ID::int64 _internal_starting_state() const;
  void _internal_set_starting_state(::PROTOBUF_NAMESPACE_ID::int64 value);
  public:

  // @@protoc_insertion_point(class_scope:operations_research.sat.AutomatonConstraintProto)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 > final_states_;
  mutable std::atomic<int> _final_states_cached_byte_size_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 > transition_tail_;
  mutable std::atomic<int> _transition_tail_cached_byte_size_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 > transition_head_;
  mutable std::atomic<int> _transition_head_cached_byte_size_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 > transition_label_;
  mutable std::atomic<int> _transition_label_cached_byte_size_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 > vars_;
  mutable std::atomic<int> _vars_cached_byte_size_;
  ::PROTOBUF_NAMESPACE_ID::int64 starting_state_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_ortools_2fsat_2fcp_5fmodel_2eproto;
};
// -------------------------------------------------------------------

class ConstraintProto PROTOBUF_FINAL :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:operations_research.sat.ConstraintProto) */ {
 public:
  inline ConstraintProto() : ConstraintProto(nullptr) {};
  virtual ~ConstraintProto();

  ConstraintProto(const ConstraintProto& from);
  ConstraintProto(ConstraintProto&& from) noexcept
    : ConstraintProto() {
    *this = ::std::move(from);
  }

  inline ConstraintProto& operator=(const ConstraintProto& from) {
    CopyFrom(from);
    return *this;
  }
  inline ConstraintProto& operator=(ConstraintProto&& from) noexcept {
    if (GetArena() == from.GetArena()) {
      if (this != &from) InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return GetMetadataStatic().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return GetMetadataStatic().reflection;
  }
  static const ConstraintProto& default_instance();

  enum ConstraintCase {
    kBoolOr = 3,
    kBoolAnd = 4,
    kAtMostOne = 26,
    kBoolXor = 5,
    kIntDiv = 7,
    kIntMod = 8,
    kIntMax = 9,
    kLinMax = 27,
    kIntMin = 10,
    kLinMin = 28,
    kIntProd = 11,
    kLinear = 12,
    kAllDiff = 13,
    kElement = 14,
    kCircuit = 15,
    kRoutes = 23,
    kCircuitCovering = 25,
    kTable = 16,
    kAutomaton = 17,
    kInverse = 18,
    kReservoir = 24,
    kInterval = 19,
    kNoOverlap = 20,
    kNoOverlap2D = 21,
    kCumulative = 22,
    CONSTRAINT_NOT_SET = 0,
  };

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

  friend void swap(ConstraintProto& a, ConstraintProto& b) {
    a.Swap(&b);
  }
  inline void Swap(ConstraintProto* other) {
    if (other == this) return;
    if (GetArena() == other->GetArena()) {
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(ConstraintProto* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  inline ConstraintProto* New() const final {
    return CreateMaybeMessage<ConstraintProto>(nullptr);
  }

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

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  ::PROTOBUF_NAMESPACE_ID::uint8* _InternalSerialize(
      ::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  inline void SharedCtor();
  inline void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(ConstraintProto* other);
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "operations_research.sat.ConstraintProto";
  }
  protected:
  explicit ConstraintProto(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
  private:
  static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
    ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&::descriptor_table_ortools_2fsat_2fcp_5fmodel_2eproto);
    return ::descriptor_table_ortools_2fsat_2fcp_5fmodel_2eproto.file_level_metadata[kIndexInFileMessages];
  }

  public:

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

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

  enum : int {
    kEnforcementLiteralFieldNumber = 2,
    kNameFieldNumber = 1,
    kBoolOrFieldNumber = 3,
    kBoolAndFieldNumber = 4,
    kAtMostOneFieldNumber = 26,
    kBoolXorFieldNumber = 5,
    kIntDivFieldNumber = 7,
    kIntModFieldNumber = 8,
    kIntMaxFieldNumber = 9,
    kLinMaxFieldNumber = 27,
    kIntMinFieldNumber = 10,
    kLinMinFieldNumber = 28,
    kIntProdFieldNumber = 11,
    kLinearFieldNumber = 12,
    kAllDiffFieldNumber = 13,
    kElementFieldNumber = 14,
    kCircuitFieldNumber = 15,
    kRoutesFieldNumber = 23,
    kCircuitCoveringFieldNumber = 25,
    kTableFieldNumber = 16,
    kAutomatonFieldNumber = 17,
    kInverseFieldNumber = 18,
    kReservoirFieldNumber = 24,
    kIntervalFieldNumber = 19,
    kNoOverlapFieldNumber = 20,
    kNoOverlap2DFieldNumber = 21,
    kCumulativeFieldNumber = 22,
  };
  // repeated int32 enforcement_literal = 2;
  int enforcement_literal_size() const;
  private:
  int _internal_enforcement_literal_size() const;
  public:
  void clear_enforcement_literal();
  private:
  ::PROTOBUF_NAMESPACE_ID::int32 _internal_enforcement_literal(int index) const;
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
      _internal_enforcement_literal() const;
  void _internal_add_enforcement_literal(::PROTOBUF_NAMESPACE_ID::int32 value);
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
      _internal_mutable_enforcement_literal();
  public:
  ::PROTOBUF_NAMESPACE_ID::int32 enforcement_literal(int index) const;
  void set_enforcement_literal(int index, ::PROTOBUF_NAMESPACE_ID::int32 value);
  void add_enforcement_literal(::PROTOBUF_NAMESPACE_ID::int32 value);
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
      enforcement_literal() const;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
      mutable_enforcement_literal();

  // string name = 1;
  void clear_name();
  const std::string& name() const;
  void set_name(const std::string& value);
  void set_name(std::string&& value);
  void set_name(const char* value);
  void set_name(const char* value, size_t size);
  std::string* mutable_name();
  std::string* release_name();
  void set_allocated_name(std::string* name);
  GOOGLE_PROTOBUF_RUNTIME_DEPRECATED("The unsafe_arena_ accessors for"
  "    string fields are deprecated and will be removed in a"
  "    future release.")
  std::string* unsafe_arena_release_name();
  GOOGLE_PROTOBUF_RUNTIME_DEPRECATED("The unsafe_arena_ accessors for"
  "    string fields are deprecated and will be removed in a"
  "    future release.")
  void unsafe_arena_set_allocated_name(
      std::string* name);
  private:
  const std::string& _internal_name() const;
  void _internal_set_name(const std::string& value);
  std::string* _internal_mutable_name();
  public:

  // .operations_research.sat.BoolArgumentProto bool_or = 3;
  bool has_bool_or() const;
  private:
  bool _internal_has_bool_or() const;
  public:
  void clear_bool_or();
  const ::operations_research::sat::BoolArgumentProto& bool_or() const;
  ::operations_research::sat::BoolArgumentProto* release_bool_or();
  ::operations_research::sat::BoolArgumentProto* mutable_bool_or();
  void set_allocated_bool_or(::operations_research::sat::BoolArgumentProto* bool_or);
  private:
  const ::operations_research::sat::BoolArgumentProto& _internal_bool_or() const;
  ::operations_research::sat::BoolArgumentProto* _internal_mutable_bool_or();
  public:
  void unsafe_arena_set_allocated_bool_or(
      ::operations_research::sat::BoolArgumentProto* bool_or);
  ::operations_research::sat::BoolArgumentProto* unsafe_arena_release_bool_or();

  // .operations_research.sat.BoolArgumentProto bool_and = 4;
  bool has_bool_and() const;
  private:
  bool _internal_has_bool_and() const;
  public:
  void clear_bool_and();
  const ::operations_research::sat::BoolArgumentProto& bool_and() const;
  ::operations_research::sat::BoolArgumentProto* release_bool_and();
  ::operations_research::sat::BoolArgumentProto* mutable_bool_and();
  void set_allocated_bool_and(::operations_research::sat::BoolArgumentProto* bool_and);
  private:
  const ::operations_research::sat::BoolArgumentProto& _internal_bool_and() const;
  ::operations_research::sat::BoolArgumentProto* _internal_mutable_bool_and();
  public:
  void unsafe_arena_set_allocated_bool_and(
      ::operations_research::sat::BoolArgumentProto* bool_and);
  ::operations_research::sat::BoolArgumentProto* unsafe_arena_release_bool_and();

  // .operations_research.sat.BoolArgumentProto at_most_one = 26;
  bool has_at_most_one() const;
  private:
  bool _internal_has_at_most_one() const;
  public:
  void clear_at_most_one();
  const ::operations_research::sat::BoolArgumentProto& at_most_one() const;
  ::operations_research::sat::BoolArgumentProto* release_at_most_one();
  ::operations_research::sat::BoolArgumentProto* mutable_at_most_one();
  void set_allocated_at_most_one(::operations_research::sat::BoolArgumentProto* at_most_one);
  private:
  const ::operations_research::sat::BoolArgumentProto& _internal_at_most_one() const;
  ::operations_research::sat::BoolArgumentProto* _internal_mutable_at_most_one();
  public:
  void unsafe_arena_set_allocated_at_most_one(
      ::operations_research::sat::BoolArgumentProto* at_most_one);
  ::operations_research::sat::BoolArgumentProto* unsafe_arena_release_at_most_one();

  // .operations_research.sat.BoolArgumentProto bool_xor = 5;
  bool has_bool_xor() const;
  private:
  bool _internal_has_bool_xor() const;
  public:
  void clear_bool_xor();
  const ::operations_research::sat::BoolArgumentProto& bool_xor() const;
  ::operations_research::sat::BoolArgumentProto* release_bool_xor();
  ::operations_research::sat::BoolArgumentProto* mutable_bool_xor();
  void set_allocated_bool_xor(::operations_research::sat::BoolArgumentProto* bool_xor);
  private:
  const ::operations_research::sat::BoolArgumentProto& _internal_bool_xor() const;
  ::operations_research::sat::BoolArgumentProto* _internal_mutable_bool_xor();
  public:
  void unsafe_arena_set_allocated_bool_xor(
      ::operations_research::sat::BoolArgumentProto* bool_xor);
  ::operations_research::sat::BoolArgumentProto* unsafe_arena_release_bool_xor();

  // .operations_research.sat.IntegerArgumentProto int_div = 7;
  bool has_int_div() const;
  private:
  bool _internal_has_int_div() const;
  public:
  void clear_int_div();
  const ::operations_research::sat::IntegerArgumentProto& int_div() const;
  ::operations_research::sat::IntegerArgumentProto* release_int_div();
  ::operations_research::sat::IntegerArgumentProto* mutable_int_div();
  void set_allocated_int_div(::operations_research::sat::IntegerArgumentProto* int_div);
  private:
  const ::operations_research::sat::IntegerArgumentProto& _internal_int_div() const;
  ::operations_research::sat::IntegerArgumentProto* _internal_mutable_int_div();
  public:
  void unsafe_arena_set_allocated_int_div(
      ::operations_research::sat::IntegerArgumentProto* int_div);
  ::operations_research::sat::IntegerArgumentProto* unsafe_arena_release_int_div();

  // .operations_research.sat.IntegerArgumentProto int_mod = 8;
  bool has_int_mod() const;
  private:
  bool _internal_has_int_mod() const;
  public:
  void clear_int_mod();
  const ::operations_research::sat::IntegerArgumentProto& int_mod() const;
  ::operations_research::sat::IntegerArgumentProto* release_int_mod();
  ::operations_research::sat::IntegerArgumentProto* mutable_int_mod();
  void set_allocated_int_mod(::operations_research::sat::IntegerArgumentProto* int_mod);
  private:
  const ::operations_research::sat::IntegerArgumentProto& _internal_int_mod() const;
  ::operations_research::sat::IntegerArgumentProto* _internal_mutable_int_mod();
  public:
  void unsafe_arena_set_allocated_int_mod(
      ::operations_research::sat::IntegerArgumentProto* int_mod);
  ::operations_research::sat::IntegerArgumentProto* unsafe_arena_release_int_mod();

  // .operations_research.sat.IntegerArgumentProto int_max = 9;
  bool has_int_max() const;
  private:
  bool _internal_has_int_max() const;
  public:
  void clear_int_max();
  const ::operations_research::sat::IntegerArgumentProto& int_max() const;
  ::operations_research::sat::IntegerArgumentProto* release_int_max();
  ::operations_research::sat::IntegerArgumentProto* mutable_int_max();
  void set_allocated_int_max(::operations_research::sat::IntegerArgumentProto* int_max);
  private:
  const ::operations_research::sat::IntegerArgumentProto& _internal_int_max() const;
  ::operations_research::sat::IntegerArgumentProto* _internal_mutable_int_max();
  public:
  void unsafe_arena_set_allocated_int_max(
      ::operations_research::sat::IntegerArgumentProto* int_max);
  ::operations_research::sat::IntegerArgumentProto* unsafe_arena_release_int_max();

  // .operations_research.sat.LinearArgumentProto lin_max = 27;
  bool has_lin_max() const;
  private:
  bool _internal_has_lin_max() const;
  public:
  void clear_lin_max();
  const ::operations_research::sat::LinearArgumentProto& lin_max() const;
  ::operations_research::sat::LinearArgumentProto* release_lin_max();
  ::operations_research::sat::LinearArgumentProto* mutable_lin_max();
  void set_allocated_lin_max(::operations_research::sat::LinearArgumentProto* lin_max);
  private:
  const ::operations_research::sat::LinearArgumentProto& _internal_lin_max() const;
  ::operations_research::sat::LinearArgumentProto* _internal_mutable_lin_max();
  public:
  void unsafe_arena_set_allocated_lin_max(
      ::operations_research::sat::LinearArgumentProto* lin_max);
  ::operations_research::sat::LinearArgumentProto* unsafe_arena_release_lin_max();

  // .operations_research.sat.IntegerArgumentProto int_min = 10;
  bool has_int_min() const;
  private:
  bool _internal_has_int_min() const;
  public:
  void clear_int_min();
  const ::operations_research::sat::IntegerArgumentProto& int_min() const;
  ::operations_research::sat::IntegerArgumentProto* release_int_min();
  ::operations_research::sat::IntegerArgumentProto* mutable_int_min();
  void set_allocated_int_min(::operations_research::sat::IntegerArgumentProto* int_min);
  private:
  const ::operations_research::sat::IntegerArgumentProto& _internal_int_min() const;
  ::operations_research::sat::IntegerArgumentProto* _internal_mutable_int_min();
  public:
  void unsafe_arena_set_allocated_int_min(
      ::operations_research::sat::IntegerArgumentProto* int_min);
  ::operations_research::sat::IntegerArgumentProto* unsafe_arena_release_int_min();

  // .operations_research.sat.LinearArgumentProto lin_min = 28;
  bool has_lin_min() const;
  private:
  bool _internal_has_lin_min() const;
  public:
  void clear_lin_min();
  const ::operations_research::sat::LinearArgumentProto& lin_min() const;
  ::operations_research::sat::LinearArgumentProto* release_lin_min();
  ::operations_research::sat::LinearArgumentProto* mutable_lin_min();
  void set_allocated_lin_min(::operations_research::sat::LinearArgumentProto* lin_min);
  private:
  const ::operations_research::sat::LinearArgumentProto& _internal_lin_min() const;
  ::operations_research::sat::LinearArgumentProto* _internal_mutable_lin_min();
  public:
  void unsafe_arena_set_allocated_lin_min(
      ::operations_research::sat::LinearArgumentProto* lin_min);
  ::operations_research::sat::LinearArgumentProto* unsafe_arena_release_lin_min();

  // .operations_research.sat.IntegerArgumentProto int_prod = 11;
  bool has_int_prod() const;
  private:
  bool _internal_has_int_prod() const;
  public:
  void clear_int_prod();
  const ::operations_research::sat::IntegerArgumentProto& int_prod() const;
  ::operations_research::sat::IntegerArgumentProto* release_int_prod();
  ::operations_research::sat::IntegerArgumentProto* mutable_int_prod();
  void set_allocated_int_prod(::operations_research::sat::IntegerArgumentProto* int_prod);
  private:
  const ::operations_research::sat::IntegerArgumentProto& _internal_int_prod() const;
  ::operations_research::sat::IntegerArgumentProto* _internal_mutable_int_prod();
  public:
  void unsafe_arena_set_allocated_int_prod(
      ::operations_research::sat::IntegerArgumentProto* int_prod);
  ::operations_research::sat::IntegerArgumentProto* unsafe_arena_release_int_prod();

  // .operations_research.sat.LinearConstraintProto linear = 12;
  bool has_linear() const;
  private:
  bool _internal_has_linear() const;
  public:
  void clear_linear();
  const ::operations_research::sat::LinearConstraintProto& linear() const;
  ::operations_research::sat::LinearConstraintProto* release_linear();
  ::operations_research::sat::LinearConstraintProto* mutable_linear();
  void set_allocated_linear(::operations_research::sat::LinearConstraintProto* linear);
  private:
  const ::operations_research::sat::LinearConstraintProto& _internal_linear() const;
  ::operations_research::sat::LinearConstraintProto* _internal_mutable_linear();
  public:
  void unsafe_arena_set_allocated_linear(
      ::operations_research::sat::LinearConstraintProto* linear);
  ::operations_research::sat::LinearConstraintProto* unsafe_arena_release_linear();

  // .operations_research.sat.AllDifferentConstraintProto all_diff = 13;
  bool has_all_diff() const;
  private:
  bool _internal_has_all_diff() const;
  public:
  void clear_all_diff();
  const ::operations_research::sat::AllDifferentConstraintProto& all_diff() const;
  ::operations_research::sat::AllDifferentConstraintProto* release_all_diff();
  ::operations_research::sat::AllDifferentConstraintProto* mutable_all_diff();
  void set_allocated_all_diff(::operations_research::sat::AllDifferentConstraintProto* all_diff);
  private:
  const ::operations_research::sat::AllDifferentConstraintProto& _internal_all_diff() const;
  ::operations_research::sat::AllDifferentConstraintProto* _internal_mutable_all_diff();
  public:
  void unsafe_arena_set_allocated_all_diff(
      ::operations_research::sat::AllDifferentConstraintProto* all_diff);
  ::operations_research::sat::AllDifferentConstraintProto* unsafe_arena_release_all_diff();

  // .operations_research.sat.ElementConstraintProto element = 14;
  bool has_element() const;
  private:
  bool _internal_has_element() const;
  public:
  void clear_element();
  const ::operations_research::sat::ElementConstraintProto& element() const;
  ::operations_research::sat::ElementConstraintProto* release_element();
  ::operations_research::sat::ElementConstraintProto* mutable_element();
  void set_allocated_element(::operations_research::sat::ElementConstraintProto* element);
  private:
  const ::operations_research::sat::ElementConstraintProto& _internal_element() const;
  ::operations_research::sat::ElementConstraintProto* _internal_mutable_element();
  public:
  void unsafe_arena_set_allocated_element(
      ::operations_research::sat::ElementConstraintProto* element);
  ::operations_research::sat::ElementConstraintProto* unsafe_arena_release_element();

  // .operations_research.sat.CircuitConstraintProto circuit = 15;
  bool has_circuit() const;
  private:
  bool _internal_has_circuit() const;
  public:
  void clear_circuit();
  const ::operations_research::sat::CircuitConstraintProto& circuit() const;
  ::operations_research::sat::CircuitConstraintProto* release_circuit();
  ::operations_research::sat::CircuitConstraintProto* mutable_circuit();
  void set_allocated_circuit(::operations_research::sat::CircuitConstraintProto* circuit);
  private:
  const ::operations_research::sat::CircuitConstraintProto& _internal_circuit() const;
  ::operations_research::sat::CircuitConstraintProto* _internal_mutable_circuit();
  public:
  void unsafe_arena_set_allocated_circuit(
      ::operations_research::sat::CircuitConstraintProto* circuit);
  ::operations_research::sat::CircuitConstraintProto* unsafe_arena_release_circuit();

  // .operations_research.sat.RoutesConstraintProto routes = 23;
  bool has_routes() const;
  private:
  bool _internal_has_routes() const;
  public:
  void clear_routes();
  const ::operations_research::sat::RoutesConstraintProto& routes() const;
  ::operations_research::sat::RoutesConstraintProto* release_routes();
  ::operations_research::sat::RoutesConstraintProto* mutable_routes();
  void set_allocated_routes(::operations_research::sat::RoutesConstraintProto* routes);
  private:
  const ::operations_research::sat::RoutesConstraintProto& _internal_routes() const;
  ::operations_research::sat::RoutesConstraintProto* _internal_mutable_routes();
  public:
  void unsafe_arena_set_allocated_routes(
      ::operations_research::sat::RoutesConstraintProto* routes);
  ::operations_research::sat::RoutesConstraintProto* unsafe_arena_release_routes();

  // .operations_research.sat.CircuitCoveringConstraintProto circuit_covering = 25;
  bool has_circuit_covering() const;
  private:
  bool _internal_has_circuit_covering() const;
  public:
  void clear_circuit_covering();
  const ::operations_research::sat::CircuitCoveringConstraintProto& circuit_covering() const;
  ::operations_research::sat::CircuitCoveringConstraintProto* release_circuit_covering();
  ::operations_research::sat::CircuitCoveringConstraintProto* mutable_circuit_covering();
  void set_allocated_circuit_covering(::operations_research::sat::CircuitCoveringConstraintProto* circuit_covering);
  private:
  const ::operations_research::sat::CircuitCoveringConstraintProto& _internal_circuit_covering() const;
  ::operations_research::sat::CircuitCoveringConstraintProto* _internal_mutable_circuit_covering();
  public:
  void unsafe_arena_set_allocated_circuit_covering(
      ::operations_research::sat::CircuitCoveringConstraintProto* circuit_covering);
  ::operations_research::sat::CircuitCoveringConstraintProto* unsafe_arena_release_circuit_covering();

  // .operations_research.sat.TableConstraintProto table = 16;
  bool has_table() const;
  private:
  bool _internal_has_table() const;
  public:
  void clear_table();
  const ::operations_research::sat::TableConstraintProto& table() const;
  ::operations_research::sat::TableConstraintProto* release_table();
  ::operations_research::sat::TableConstraintProto* mutable_table();
  void set_allocated_table(::operations_research::sat::TableConstraintProto* table);
  private:
  const ::operations_research::sat::TableConstraintProto& _internal_table() const;
  ::operations_research::sat::TableConstraintProto* _internal_mutable_table();
  public:
  void unsafe_arena_set_allocated_table(
      ::operations_research::sat::TableConstraintProto* table);
  ::operations_research::sat::TableConstraintProto* unsafe_arena_release_table();

  // .operations_research.sat.AutomatonConstraintProto automaton = 17;
  bool has_automaton() const;
  private:
  bool _internal_has_automaton() const;
  public:
  void clear_automaton();
  const ::operations_research::sat::AutomatonConstraintProto& automaton() const;
  ::operations_research::sat::AutomatonConstraintProto* release_automaton();
  ::operations_research::sat::AutomatonConstraintProto* mutable_automaton();
  void set_allocated_automaton(::operations_research::sat::AutomatonConstraintProto* automaton);
  private:
  const ::operations_research::sat::AutomatonConstraintProto& _internal_automaton() const;
  ::operations_research::sat::AutomatonConstraintProto* _internal_mutable_automaton();
  public:
  void unsafe_arena_set_allocated_automaton(
      ::operations_research::sat::AutomatonConstraintProto* automaton);
  ::operations_research::sat::AutomatonConstraintProto* unsafe_arena_release_automaton();

  // .operations_research.sat.InverseConstraintProto inverse = 18;
  bool has_inverse() const;
  private:
  bool _internal_has_inverse() const;
  public:
  void clear_inverse();
  const ::operations_research::sat::InverseConstraintProto& inverse() const;
  ::operations_research::sat::InverseConstraintProto* release_inverse();
  ::operations_research::sat::InverseConstraintProto* mutable_inverse();
  void set_allocated_inverse(::operations_research::sat::InverseConstraintProto* inverse);
  private:
  const ::operations_research::sat::InverseConstraintProto& _internal_inverse() const;
  ::operations_research::sat::InverseConstraintProto* _internal_mutable_inverse();
  public:
  void unsafe_arena_set_allocated_inverse(
      ::operations_research::sat::InverseConstraintProto* inverse);
  ::operations_research::sat::InverseConstraintProto* unsafe_arena_release_inverse();

  // .operations_research.sat.ReservoirConstraintProto reservoir = 24;
  bool has_reservoir() const;
  private:
  bool _internal_has_reservoir() const;
  public:
  void clear_reservoir();
  const ::operations_research::sat::ReservoirConstraintProto& reservoir() const;
  ::operations_research::sat::ReservoirConstraintProto* release_reservoir();
  ::operations_research::sat::ReservoirConstraintProto* mutable_reservoir();
  void set_allocated_reservoir(::operations_research::sat::ReservoirConstraintProto* reservoir);
  private:
  const ::operations_research::sat::ReservoirConstraintProto& _internal_reservoir() const;
  ::operations_research::sat::ReservoirConstraintProto* _internal_mutable_reservoir();
  public:
  void unsafe_arena_set_allocated_reservoir(
      ::operations_research::sat::ReservoirConstraintProto* reservoir);
  ::operations_research::sat::ReservoirConstraintProto* unsafe_arena_release_reservoir();

  // .operations_research.sat.IntervalConstraintProto interval = 19;
  bool has_interval() const;
  private:
  bool _internal_has_interval() const;
  public:
  void clear_interval();
  const ::operations_research::sat::IntervalConstraintProto& interval() const;
  ::operations_research::sat::IntervalConstraintProto* release_interval();
  ::operations_research::sat::IntervalConstraintProto* mutable_interval();
  void set_allocated_interval(::operations_research::sat::IntervalConstraintProto* interval);
  private:
  const ::operations_research::sat::IntervalConstraintProto& _internal_interval() const;
  ::operations_research::sat::IntervalConstraintProto* _internal_mutable_interval();
  public:
  void unsafe_arena_set_allocated_interval(
      ::operations_research::sat::IntervalConstraintProto* interval);
  ::operations_research::sat::IntervalConstraintProto* unsafe_arena_release_interval();

  // .operations_research.sat.NoOverlapConstraintProto no_overlap = 20;
  bool has_no_overlap() const;
  private:
  bool _internal_has_no_overlap() const;
  public:
  void clear_no_overlap();
  const ::operations_research::sat::NoOverlapConstraintProto& no_overlap() const;
  ::operations_research::sat::NoOverlapConstraintProto* release_no_overlap();
  ::operations_research::sat::NoOverlapConstraintProto* mutable_no_overlap();
  void set_allocated_no_overlap(::operations_research::sat::NoOverlapConstraintProto* no_overlap);
  private:
  const ::operations_research::sat::NoOverlapConstraintProto& _internal_no_overlap() const;
  ::operations_research::sat::NoOverlapConstraintProto* _internal_mutable_no_overlap();
  public:
  void unsafe_arena_set_allocated_no_overlap(
      ::operations_research::sat::NoOverlapConstraintProto* no_overlap);
  ::operations_research::sat::NoOverlapConstraintProto* unsafe_arena_release_no_overlap();

  // .operations_research.sat.NoOverlap2DConstraintProto no_overlap_2d = 21;
  bool has_no_overlap_2d() const;
  private:
  bool _internal_has_no_overlap_2d() const;
  public:
  void clear_no_overlap_2d();
  const ::operations_research::sat::NoOverlap2DConstraintProto& no_overlap_2d() const;
  ::operations_research::sat::NoOverlap2DConstraintProto* release_no_overlap_2d();
  ::operations_research::sat::NoOverlap2DConstraintProto* mutable_no_overlap_2d();
  void set_allocated_no_overlap_2d(::operations_research::sat::NoOverlap2DConstraintProto* no_overlap_2d);
  private:
  const ::operations_research::sat::NoOverlap2DConstraintProto& _internal_no_overlap_2d() const;
  ::operations_research::sat::NoOverlap2DConstraintProto* _internal_mutable_no_overlap_2d();
  public:
  void unsafe_arena_set_allocated_no_overlap_2d(
      ::operations_research::sat::NoOverlap2DConstraintProto* no_overlap_2d);
  ::operations_research::sat::NoOverlap2DConstraintProto* unsafe_arena_release_no_overlap_2d();

  // .operations_research.sat.CumulativeConstraintProto cumulative = 22;
  bool has_cumulative() const;
  private:
  bool _internal_has_cumulative() const;
  public:
  void clear_cumulative();
  const ::operations_research::sat::CumulativeConstraintProto& cumulative() const;
  ::operations_research::sat::CumulativeConstraintProto* release_cumulative();
  ::operations_research::sat::CumulativeConstraintProto* mutable_cumulative();
  void set_allocated_cumulative(::operations_research::sat::CumulativeConstraintProto* cumulative);
  private:
  const ::operations_research::sat::CumulativeConstraintProto& _internal_cumulative() const;
  ::operations_research::sat::CumulativeConstraintProto* _internal_mutable_cumulative();
  public:
  void unsafe_arena_set_allocated_cumulative(
      ::operations_research::sat::CumulativeConstraintProto* cumulative);
  ::operations_research::sat::CumulativeConstraintProto* unsafe_arena_release_cumulative();

  void clear_constraint();
  ConstraintCase constraint_case() const;
  // @@protoc_insertion_point(class_scope:operations_research.sat.ConstraintProto)
 private:
  class _Internal;
  void set_has_bool_or();
  void set_has_bool_and();
  void set_has_at_most_one();
  void set_has_bool_xor();
  void set_has_int_div();
  void set_has_int_mod();
  void set_has_int_max();
  void set_has_lin_max();
  void set_has_int_min();
  void set_has_lin_min();
  void set_has_int_prod();
  void set_has_linear();
  void set_has_all_diff();
  void set_has_element();
  void set_has_circuit();
  void set_has_routes();
  void set_has_circuit_covering();
  void set_has_table();
  void set_has_automaton();
  void set_has_inverse();
  void set_has_reservoir();
  void set_has_interval();
  void set_has_no_overlap();
  void set_has_no_overlap_2d();
  void set_has_cumulative();

  inline bool has_constraint() const;
  inline void clear_has_constraint();

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 > enforcement_literal_;
  mutable std::atomic<int> _enforcement_literal_cached_byte_size_;
  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr name_;
  union ConstraintUnion {
    ConstraintUnion() {}
    ::operations_research::sat::BoolArgumentProto* bool_or_;
    ::operations_research::sat::BoolArgumentProto* bool_and_;
    ::operations_research::sat::BoolArgumentProto* at_most_one_;
    ::operations_research::sat::BoolArgumentProto* bool_xor_;
    ::operations_research::sat::IntegerArgumentProto* int_div_;
    ::operations_research::sat::IntegerArgumentProto* int_mod_;
    ::operations_research::sat::IntegerArgumentProto* int_max_;
    ::operations_research::sat::LinearArgumentProto* lin_max_;
    ::operations_research::sat::IntegerArgumentProto* int_min_;
    ::operations_research::sat::LinearArgumentProto* lin_min_;
    ::operations_research::sat::IntegerArgumentProto* int_prod_;
    ::operations_research::sat::LinearConstraintProto* linear_;
    ::operations_research::sat::AllDifferentConstraintProto* all_diff_;
    ::operations_research::sat::ElementConstraintProto* element_;
    ::operations_research::sat::CircuitConstraintProto* circuit_;
    ::operations_research::sat::RoutesConstraintProto* routes_;
    ::operations_research::sat::CircuitCoveringConstraintProto* circuit_covering_;
    ::operations_research::sat::TableConstraintProto* table_;
    ::operations_research::sat::AutomatonConstraintProto* automaton_;
    ::operations_research::sat::InverseConstraintProto* inverse_;
    ::operations_research::sat::ReservoirConstraintProto* reservoir_;
    ::operations_research::sat::IntervalConstraintProto* interval_;
    ::operations_research::sat::NoOverlapConstraintProto* no_overlap_;
    ::operations_research::sat::NoOverlap2DConstraintProto* no_overlap_2d_;
    ::operations_research::sat::CumulativeConstraintProto* cumulative_;
  } constraint_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  ::PROTOBUF_NAMESPACE_ID::uint32 _oneof_case_[1];

  friend struct ::TableStruct_ortools_2fsat_2fcp_5fmodel_2eproto;
};
// -------------------------------------------------------------------

class CpObjectiveProto PROTOBUF_FINAL :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:operations_research.sat.CpObjectiveProto) */ {
 public:
  inline CpObjectiveProto() : CpObjectiveProto(nullptr) {};
  virtual ~CpObjectiveProto();

  CpObjectiveProto(const CpObjectiveProto& from);
  CpObjectiveProto(CpObjectiveProto&& from) noexcept
    : CpObjectiveProto() {
    *this = ::std::move(from);
  }

  inline CpObjectiveProto& operator=(const CpObjectiveProto& from) {
    CopyFrom(from);
    return *this;
  }
  inline CpObjectiveProto& operator=(CpObjectiveProto&& from) noexcept {
    if (GetArena() == from.GetArena()) {
      if (this != &from) InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return GetMetadataStatic().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return GetMetadataStatic().reflection;
  }
  static const CpObjectiveProto& default_instance();

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

  friend void swap(CpObjectiveProto& a, CpObjectiveProto& b) {
    a.Swap(&b);
  }
  inline void Swap(CpObjectiveProto* other) {
    if (other == this) return;
    if (GetArena() == other->GetArena()) {
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(CpObjectiveProto* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  inline CpObjectiveProto* New() const final {
    return CreateMaybeMessage<CpObjectiveProto>(nullptr);
  }

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

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  ::PROTOBUF_NAMESPACE_ID::uint8* _InternalSerialize(
      ::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  inline void SharedCtor();
  inline void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(CpObjectiveProto* other);
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "operations_research.sat.CpObjectiveProto";
  }
  protected:
  explicit CpObjectiveProto(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
  private:
  static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
    ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&::descriptor_table_ortools_2fsat_2fcp_5fmodel_2eproto);
    return ::descriptor_table_ortools_2fsat_2fcp_5fmodel_2eproto.file_level_metadata[kIndexInFileMessages];
  }

  public:

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

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

  enum : int {
    kVarsFieldNumber = 1,
    kCoeffsFieldNumber = 4,
    kDomainFieldNumber = 5,
    kOffsetFieldNumber = 2,
    kScalingFactorFieldNumber = 3,
  };
  // repeated int32 vars = 1;
  int vars_size() const;
  private:
  int _internal_vars_size() const;
  public:
  void clear_vars();
  private:
  ::PROTOBUF_NAMESPACE_ID::int32 _internal_vars(int index) const;
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
      _internal_vars() const;
  void _internal_add_vars(::PROTOBUF_NAMESPACE_ID::int32 value);
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
      _internal_mutable_vars();
  public:
  ::PROTOBUF_NAMESPACE_ID::int32 vars(int index) const;
  void set_vars(int index, ::PROTOBUF_NAMESPACE_ID::int32 value);
  void add_vars(::PROTOBUF_NAMESPACE_ID::int32 value);
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
      vars() const;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
      mutable_vars();

  // repeated int64 coeffs = 4;
  int coeffs_size() const;
  private:
  int _internal_coeffs_size() const;
  public:
  void clear_coeffs();
  private:
  ::PROTOBUF_NAMESPACE_ID::int64 _internal_coeffs(int index) const;
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >&
      _internal_coeffs() const;
  void _internal_add_coeffs(::PROTOBUF_NAMESPACE_ID::int64 value);
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >*
      _internal_mutable_coeffs();
  public:
  ::PROTOBUF_NAMESPACE_ID::int64 coeffs(int index) const;
  void set_coeffs(int index, ::PROTOBUF_NAMESPACE_ID::int64 value);
  void add_coeffs(::PROTOBUF_NAMESPACE_ID::int64 value);
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >&
      coeffs() const;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >*
      mutable_coeffs();

  // repeated int64 domain = 5;
  int domain_size() const;
  private:
  int _internal_domain_size() const;
  public:
  void clear_domain();
  private:
  ::PROTOBUF_NAMESPACE_ID::int64 _internal_domain(int index) const;
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >&
      _internal_domain() const;
  void _internal_add_domain(::PROTOBUF_NAMESPACE_ID::int64 value);
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >*
      _internal_mutable_domain();
  public:
  ::PROTOBUF_NAMESPACE_ID::int64 domain(int index) const;
  void set_domain(int index, ::PROTOBUF_NAMESPACE_ID::int64 value);
  void add_domain(::PROTOBUF_NAMESPACE_ID::int64 value);
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >&
      domain() const;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >*
      mutable_domain();

  // double offset = 2;
  void clear_offset();
  double offset() const;
  void set_offset(double value);
  private:
  double _internal_offset() const;
  void _internal_set_offset(double value);
  public:

  // double scaling_factor = 3;
  void clear_scaling_factor();
  double scaling_factor() const;
  void set_scaling_factor(double value);
  private:
  double _internal_scaling_factor() const;
  void _internal_set_scaling_factor(double value);
  public:

  // @@protoc_insertion_point(class_scope:operations_research.sat.CpObjectiveProto)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 > vars_;
  mutable std::atomic<int> _vars_cached_byte_size_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 > coeffs_;
  mutable std::atomic<int> _coeffs_cached_byte_size_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 > domain_;
  mutable std::atomic<int> _domain_cached_byte_size_;
  double offset_;
  double scaling_factor_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_ortools_2fsat_2fcp_5fmodel_2eproto;
};
// -------------------------------------------------------------------

class DecisionStrategyProto_AffineTransformation PROTOBUF_FINAL :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:operations_research.sat.DecisionStrategyProto.AffineTransformation) */ {
 public:
  inline DecisionStrategyProto_AffineTransformation() : DecisionStrategyProto_AffineTransformation(nullptr) {};
  virtual ~DecisionStrategyProto_AffineTransformation();

  DecisionStrategyProto_AffineTransformation(const DecisionStrategyProto_AffineTransformation& from);
  DecisionStrategyProto_AffineTransformation(DecisionStrategyProto_AffineTransformation&& from) noexcept
    : DecisionStrategyProto_AffineTransformation() {
    *this = ::std::move(from);
  }

  inline DecisionStrategyProto_AffineTransformation& operator=(const DecisionStrategyProto_AffineTransformation& from) {
    CopyFrom(from);
    return *this;
  }
  inline DecisionStrategyProto_AffineTransformation& operator=(DecisionStrategyProto_AffineTransformation&& from) noexcept {
    if (GetArena() == from.GetArena()) {
      if (this != &from) InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return GetMetadataStatic().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return GetMetadataStatic().reflection;
  }
  static const DecisionStrategyProto_AffineTransformation& default_instance();

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

  friend void swap(DecisionStrategyProto_AffineTransformation& a, DecisionStrategyProto_AffineTransformation& b) {
    a.Swap(&b);
  }
  inline void Swap(DecisionStrategyProto_AffineTransformation* other) {
    if (other == this) return;
    if (GetArena() == other->GetArena()) {
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(DecisionStrategyProto_AffineTransformation* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  inline DecisionStrategyProto_AffineTransformation* New() const final {
    return CreateMaybeMessage<DecisionStrategyProto_AffineTransformation>(nullptr);
  }

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

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  ::PROTOBUF_NAMESPACE_ID::uint8* _InternalSerialize(
      ::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  inline void SharedCtor();
  inline void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(DecisionStrategyProto_AffineTransformation* other);
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "operations_research.sat.DecisionStrategyProto.AffineTransformation";
  }
  protected:
  explicit DecisionStrategyProto_AffineTransformation(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
  private:
  static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
    ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&::descriptor_table_ortools_2fsat_2fcp_5fmodel_2eproto);
    return ::descriptor_table_ortools_2fsat_2fcp_5fmodel_2eproto.file_level_metadata[kIndexInFileMessages];
  }

  public:

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

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

  enum : int {
    kOffsetFieldNumber = 2,
    kPositiveCoeffFieldNumber = 3,
    kVarFieldNumber = 1,
  };
  // int64 offset = 2;
  void clear_offset();
  ::PROTOBUF_NAMESPACE_ID::int64 offset() const;
  void set_offset(::PROTOBUF_NAMESPACE_ID::int64 value);
  private:
  ::PROTOBUF_NAMESPACE_ID::int64 _internal_offset() const;
  void _internal_set_offset(::PROTOBUF_NAMESPACE_ID::int64 value);
  public:

  // int64 positive_coeff = 3;
  void clear_positive_coeff();
  ::PROTOBUF_NAMESPACE_ID::int64 positive_coeff() const;
  void set_positive_coeff(::PROTOBUF_NAMESPACE_ID::int64 value);
  private:
  ::PROTOBUF_NAMESPACE_ID::int64 _internal_positive_coeff() const;
  void _internal_set_positive_coeff(::PROTOBUF_NAMESPACE_ID::int64 value);
  public:

  // int32 var = 1;
  void clear_var();
  ::PROTOBUF_NAMESPACE_ID::int32 var() const;
  void set_var(::PROTOBUF_NAMESPACE_ID::int32 value);
  private:
  ::PROTOBUF_NAMESPACE_ID::int32 _internal_var() const;
  void _internal_set_var(::PROTOBUF_NAMESPACE_ID::int32 value);
  public:

  // @@protoc_insertion_point(class_scope:operations_research.sat.DecisionStrategyProto.AffineTransformation)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::PROTOBUF_NAMESPACE_ID::int64 offset_;
  ::PROTOBUF_NAMESPACE_ID::int64 positive_coeff_;
  ::PROTOBUF_NAMESPACE_ID::int32 var_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_ortools_2fsat_2fcp_5fmodel_2eproto;
};
// -------------------------------------------------------------------

class DecisionStrategyProto PROTOBUF_FINAL :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:operations_research.sat.DecisionStrategyProto) */ {
 public:
  inline DecisionStrategyProto() : DecisionStrategyProto(nullptr) {};
  virtual ~DecisionStrategyProto();

  DecisionStrategyProto(const DecisionStrategyProto& from);
  DecisionStrategyProto(DecisionStrategyProto&& from) noexcept
    : DecisionStrategyProto() {
    *this = ::std::move(from);
  }

  inline DecisionStrategyProto& operator=(const DecisionStrategyProto& from) {
    CopyFrom(from);
    return *this;
  }
  inline DecisionStrategyProto& operator=(DecisionStrategyProto&& from) noexcept {
    if (GetArena() == from.GetArena()) {
      if (this != &from) InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return GetMetadataStatic().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return GetMetadataStatic().reflection;
  }
  static const DecisionStrategyProto& default_instance();

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

  friend void swap(DecisionStrategyProto& a, DecisionStrategyProto& b) {
    a.Swap(&b);
  }
  inline void Swap(DecisionStrategyProto* other) {
    if (other == this) return;
    if (GetArena() == other->GetArena()) {
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(DecisionStrategyProto* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  inline DecisionStrategyProto* New() const final {
    return CreateMaybeMessage<DecisionStrategyProto>(nullptr);
  }

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

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  ::PROTOBUF_NAMESPACE_ID::uint8* _InternalSerialize(
      ::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  inline void SharedCtor();
  inline void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(DecisionStrategyProto* other);
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "operations_research.sat.DecisionStrategyProto";
  }
  protected:
  explicit DecisionStrategyProto(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
  private:
  static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
    ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&::descriptor_table_ortools_2fsat_2fcp_5fmodel_2eproto);
    return ::descriptor_table_ortools_2fsat_2fcp_5fmodel_2eproto.file_level_metadata[kIndexInFileMessages];
  }

  public:

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

  typedef DecisionStrategyProto_AffineTransformation AffineTransformation;

  typedef DecisionStrategyProto_VariableSelectionStrategy VariableSelectionStrategy;
  static constexpr VariableSelectionStrategy CHOOSE_FIRST =
    DecisionStrategyProto_VariableSelectionStrategy_CHOOSE_FIRST;
  static constexpr VariableSelectionStrategy CHOOSE_LOWEST_MIN =
    DecisionStrategyProto_VariableSelectionStrategy_CHOOSE_LOWEST_MIN;
  static constexpr VariableSelectionStrategy CHOOSE_HIGHEST_MAX =
    DecisionStrategyProto_VariableSelectionStrategy_CHOOSE_HIGHEST_MAX;
  static constexpr VariableSelectionStrategy CHOOSE_MIN_DOMAIN_SIZE =
    DecisionStrategyProto_VariableSelectionStrategy_CHOOSE_MIN_DOMAIN_SIZE;
  static constexpr VariableSelectionStrategy CHOOSE_MAX_DOMAIN_SIZE =
    DecisionStrategyProto_VariableSelectionStrategy_CHOOSE_MAX_DOMAIN_SIZE;
  static inline bool VariableSelectionStrategy_IsValid(int value) {
    return DecisionStrategyProto_VariableSelectionStrategy_IsValid(value);
  }
  static constexpr VariableSelectionStrategy VariableSelectionStrategy_MIN =
    DecisionStrategyProto_VariableSelectionStrategy_VariableSelectionStrategy_MIN;
  static constexpr VariableSelectionStrategy VariableSelectionStrategy_MAX =
    DecisionStrategyProto_VariableSelectionStrategy_VariableSelectionStrategy_MAX;
  static constexpr int VariableSelectionStrategy_ARRAYSIZE =
    DecisionStrategyProto_VariableSelectionStrategy_VariableSelectionStrategy_ARRAYSIZE;
  static inline const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor*
  VariableSelectionStrategy_descriptor() {
    return DecisionStrategyProto_VariableSelectionStrategy_descriptor();
  }
  template<typename T>
  static inline const std::string& VariableSelectionStrategy_Name(T enum_t_value) {
    static_assert(::std::is_same<T, VariableSelectionStrategy>::value ||
      ::std::is_integral<T>::value,
      "Incorrect type passed to function VariableSelectionStrategy_Name.");
    return DecisionStrategyProto_VariableSelectionStrategy_Name(enum_t_value);
  }
  static inline bool VariableSelectionStrategy_Parse(const std::string& name,
      VariableSelectionStrategy* value) {
    return DecisionStrategyProto_VariableSelectionStrategy_Parse(name, value);
  }

  typedef DecisionStrategyProto_DomainReductionStrategy DomainReductionStrategy;
  static constexpr DomainReductionStrategy SELECT_MIN_VALUE =
    DecisionStrategyProto_DomainReductionStrategy_SELECT_MIN_VALUE;
  static constexpr DomainReductionStrategy SELECT_MAX_VALUE =
    DecisionStrategyProto_DomainReductionStrategy_SELECT_MAX_VALUE;
  static constexpr DomainReductionStrategy SELECT_LOWER_HALF =
    DecisionStrategyProto_DomainReductionStrategy_SELECT_LOWER_HALF;
  static constexpr DomainReductionStrategy SELECT_UPPER_HALF =
    DecisionStrategyProto_DomainReductionStrategy_SELECT_UPPER_HALF;
  static constexpr DomainReductionStrategy SELECT_MEDIAN_VALUE =
    DecisionStrategyProto_DomainReductionStrategy_SELECT_MEDIAN_VALUE;
  static inline bool DomainReductionStrategy_IsValid(int value) {
    return DecisionStrategyProto_DomainReductionStrategy_IsValid(value);
  }
  static constexpr DomainReductionStrategy DomainReductionStrategy_MIN =
    DecisionStrategyProto_DomainReductionStrategy_DomainReductionStrategy_MIN;
  static constexpr DomainReductionStrategy DomainReductionStrategy_MAX =
    DecisionStrategyProto_DomainReductionStrategy_DomainReductionStrategy_MAX;
  static constexpr int DomainReductionStrategy_ARRAYSIZE =
    DecisionStrategyProto_DomainReductionStrategy_DomainReductionStrategy_ARRAYSIZE;
  static inline const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor*
  DomainReductionStrategy_descriptor() {
    return DecisionStrategyProto_DomainReductionStrategy_descriptor();
  }
  template<typename T>
  static inline const std::string& DomainReductionStrategy_Name(T enum_t_value) {
    static_assert(::std::is_same<T, DomainReductionStrategy>::value ||
      ::std::is_integral<T>::value,
      "Incorrect type passed to function DomainReductionStrategy_Name.");
    return DecisionStrategyProto_DomainReductionStrategy_Name(enum_t_value);
  }
  static inline bool DomainReductionStrategy_Parse(const std::string& name,
      DomainReductionStrategy* value) {
    return DecisionStrategyProto_DomainReductionStrategy_Parse(name, value);
  }

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

  enum : int {
    kVariablesFieldNumber = 1,
    kTransformationsFieldNumber = 4,
    kVariableSelectionStrategyFieldNumber = 2,
    kDomainReductionStrategyFieldNumber = 3,
  };
  // repeated int32 variables = 1;
  int variables_size() const;
  private:
  int _internal_variables_size() const;
  public:
  void clear_variables();
  private:
  ::PROTOBUF_NAMESPACE_ID::int32 _internal_variables(int index) const;
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
      _internal_variables() const;
  void _internal_add_variables(::PROTOBUF_NAMESPACE_ID::int32 value);
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
      _internal_mutable_variables();
  public:
  ::PROTOBUF_NAMESPACE_ID::int32 variables(int index) const;
  void set_variables(int index, ::PROTOBUF_NAMESPACE_ID::int32 value);
  void add_variables(::PROTOBUF_NAMESPACE_ID::int32 value);
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
      variables() const;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
      mutable_variables();

  // repeated .operations_research.sat.DecisionStrategyProto.AffineTransformation transformations = 4;
  int transformations_size() const;
  private:
  int _internal_transformations_size() const;
  public:
  void clear_transformations();
  ::operations_research::sat::DecisionStrategyProto_AffineTransformation* mutable_transformations(int index);
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::operations_research::sat::DecisionStrategyProto_AffineTransformation >*
      mutable_transformations();
  private:
  const ::operations_research::sat::DecisionStrategyProto_AffineTransformation& _internal_transformations(int index) const;
  ::operations_research::sat::DecisionStrategyProto_AffineTransformation* _internal_add_transformations();
  public:
  const ::operations_research::sat::DecisionStrategyProto_AffineTransformation& transformations(int index) const;
  ::operations_research::sat::DecisionStrategyProto_AffineTransformation* add_transformations();
  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::operations_research::sat::DecisionStrategyProto_AffineTransformation >&
      transformations() const;

  // .operations_research.sat.DecisionStrategyProto.VariableSelectionStrategy variable_selection_strategy = 2;
  void clear_variable_selection_strategy();
  ::operations_research::sat::DecisionStrategyProto_VariableSelectionStrategy variable_selection_strategy() const;
  void set_variable_selection_strategy(::operations_research::sat::DecisionStrategyProto_VariableSelectionStrategy value);
  private:
  ::operations_research::sat::DecisionStrategyProto_VariableSelectionStrategy _internal_variable_selection_strategy() const;
  void _internal_set_variable_selection_strategy(::operations_research::sat::DecisionStrategyProto_VariableSelectionStrategy value);
  public:

  // .operations_research.sat.DecisionStrategyProto.DomainReductionStrategy domain_reduction_strategy = 3;
  void clear_domain_reduction_strategy();
  ::operations_research::sat::DecisionStrategyProto_DomainReductionStrategy domain_reduction_strategy() const;
  void set_domain_reduction_strategy(::operations_research::sat::DecisionStrategyProto_DomainReductionStrategy value);
  private:
  ::operations_research::sat::DecisionStrategyProto_DomainReductionStrategy _internal_domain_reduction_strategy() const;
  void _internal_set_domain_reduction_strategy(::operations_research::sat::DecisionStrategyProto_DomainReductionStrategy value);
  public:

  // @@protoc_insertion_point(class_scope:operations_research.sat.DecisionStrategyProto)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 > variables_;
  mutable std::atomic<int> _variables_cached_byte_size_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::operations_research::sat::DecisionStrategyProto_AffineTransformation > transformations_;
  int variable_selection_strategy_;
  int domain_reduction_strategy_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_ortools_2fsat_2fcp_5fmodel_2eproto;
};
// -------------------------------------------------------------------

class PartialVariableAssignment PROTOBUF_FINAL :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:operations_research.sat.PartialVariableAssignment) */ {
 public:
  inline PartialVariableAssignment() : PartialVariableAssignment(nullptr) {};
  virtual ~PartialVariableAssignment();

  PartialVariableAssignment(const PartialVariableAssignment& from);
  PartialVariableAssignment(PartialVariableAssignment&& from) noexcept
    : PartialVariableAssignment() {
    *this = ::std::move(from);
  }

  inline PartialVariableAssignment& operator=(const PartialVariableAssignment& from) {
    CopyFrom(from);
    return *this;
  }
  inline PartialVariableAssignment& operator=(PartialVariableAssignment&& from) noexcept {
    if (GetArena() == from.GetArena()) {
      if (this != &from) InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return GetMetadataStatic().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return GetMetadataStatic().reflection;
  }
  static const PartialVariableAssignment& default_instance();

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

  friend void swap(PartialVariableAssignment& a, PartialVariableAssignment& b) {
    a.Swap(&b);
  }
  inline void Swap(PartialVariableAssignment* other) {
    if (other == this) return;
    if (GetArena() == other->GetArena()) {
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(PartialVariableAssignment* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  inline PartialVariableAssignment* New() const final {
    return CreateMaybeMessage<PartialVariableAssignment>(nullptr);
  }

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

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  ::PROTOBUF_NAMESPACE_ID::uint8* _InternalSerialize(
      ::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  inline void SharedCtor();
  inline void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(PartialVariableAssignment* other);
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "operations_research.sat.PartialVariableAssignment";
  }
  protected:
  explicit PartialVariableAssignment(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
  private:
  static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
    ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&::descriptor_table_ortools_2fsat_2fcp_5fmodel_2eproto);
    return ::descriptor_table_ortools_2fsat_2fcp_5fmodel_2eproto.file_level_metadata[kIndexInFileMessages];
  }

  public:

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

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

  enum : int {
    kVarsFieldNumber = 1,
    kValuesFieldNumber = 2,
  };
  // repeated int32 vars = 1;
  int vars_size() const;
  private:
  int _internal_vars_size() const;
  public:
  void clear_vars();
  private:
  ::PROTOBUF_NAMESPACE_ID::int32 _internal_vars(int index) const;
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
      _internal_vars() const;
  void _internal_add_vars(::PROTOBUF_NAMESPACE_ID::int32 value);
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
      _internal_mutable_vars();
  public:
  ::PROTOBUF_NAMESPACE_ID::int32 vars(int index) const;
  void set_vars(int index, ::PROTOBUF_NAMESPACE_ID::int32 value);
  void add_vars(::PROTOBUF_NAMESPACE_ID::int32 value);
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
      vars() const;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
      mutable_vars();

  // repeated int64 values = 2;
  int values_size() const;
  private:
  int _internal_values_size() const;
  public:
  void clear_values();
  private:
  ::PROTOBUF_NAMESPACE_ID::int64 _internal_values(int index) const;
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >&
      _internal_values() const;
  void _internal_add_values(::PROTOBUF_NAMESPACE_ID::int64 value);
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >*
      _internal_mutable_values();
  public:
  ::PROTOBUF_NAMESPACE_ID::int64 values(int index) const;
  void set_values(int index, ::PROTOBUF_NAMESPACE_ID::int64 value);
  void add_values(::PROTOBUF_NAMESPACE_ID::int64 value);
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >&
      values() const;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >*
      mutable_values();

  // @@protoc_insertion_point(class_scope:operations_research.sat.PartialVariableAssignment)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 > vars_;
  mutable std::atomic<int> _vars_cached_byte_size_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 > values_;
  mutable std::atomic<int> _values_cached_byte_size_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_ortools_2fsat_2fcp_5fmodel_2eproto;
};
// -------------------------------------------------------------------

class CpModelProto PROTOBUF_FINAL :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:operations_research.sat.CpModelProto) */ {
 public:
  inline CpModelProto() : CpModelProto(nullptr) {};
  virtual ~CpModelProto();

  CpModelProto(const CpModelProto& from);
  CpModelProto(CpModelProto&& from) noexcept
    : CpModelProto() {
    *this = ::std::move(from);
  }

  inline CpModelProto& operator=(const CpModelProto& from) {
    CopyFrom(from);
    return *this;
  }
  inline CpModelProto& operator=(CpModelProto&& from) noexcept {
    if (GetArena() == from.GetArena()) {
      if (this != &from) InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return GetMetadataStatic().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return GetMetadataStatic().reflection;
  }
  static const CpModelProto& default_instance();

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

  friend void swap(CpModelProto& a, CpModelProto& b) {
    a.Swap(&b);
  }
  inline void Swap(CpModelProto* other) {
    if (other == this) return;
    if (GetArena() == other->GetArena()) {
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(CpModelProto* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  inline CpModelProto* New() const final {
    return CreateMaybeMessage<CpModelProto>(nullptr);
  }

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

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  ::PROTOBUF_NAMESPACE_ID::uint8* _InternalSerialize(
      ::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  inline void SharedCtor();
  inline void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(CpModelProto* other);
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "operations_research.sat.CpModelProto";
  }
  protected:
  explicit CpModelProto(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
  private:
  static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
    ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&::descriptor_table_ortools_2fsat_2fcp_5fmodel_2eproto);
    return ::descriptor_table_ortools_2fsat_2fcp_5fmodel_2eproto.file_level_metadata[kIndexInFileMessages];
  }

  public:

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

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

  enum : int {
    kVariablesFieldNumber = 2,
    kConstraintsFieldNumber = 3,
    kSearchStrategyFieldNumber = 5,
    kAssumptionsFieldNumber = 7,
    kNameFieldNumber = 1,
    kObjectiveFieldNumber = 4,
    kSolutionHintFieldNumber = 6,
  };
  // repeated .operations_research.sat.IntegerVariableProto variables = 2;
  int variables_size() const;
  private:
  int _internal_variables_size() const;
  public:
  void clear_variables();
  ::operations_research::sat::IntegerVariableProto* mutable_variables(int index);
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::operations_research::sat::IntegerVariableProto >*
      mutable_variables();
  private:
  const ::operations_research::sat::IntegerVariableProto& _internal_variables(int index) const;
  ::operations_research::sat::IntegerVariableProto* _internal_add_variables();
  public:
  const ::operations_research::sat::IntegerVariableProto& variables(int index) const;
  ::operations_research::sat::IntegerVariableProto* add_variables();
  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::operations_research::sat::IntegerVariableProto >&
      variables() const;

  // repeated .operations_research.sat.ConstraintProto constraints = 3;
  int constraints_size() const;
  private:
  int _internal_constraints_size() const;
  public:
  void clear_constraints();
  ::operations_research::sat::ConstraintProto* mutable_constraints(int index);
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::operations_research::sat::ConstraintProto >*
      mutable_constraints();
  private:
  const ::operations_research::sat::ConstraintProto& _internal_constraints(int index) const;
  ::operations_research::sat::ConstraintProto* _internal_add_constraints();
  public:
  const ::operations_research::sat::ConstraintProto& constraints(int index) const;
  ::operations_research::sat::ConstraintProto* add_constraints();
  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::operations_research::sat::ConstraintProto >&
      constraints() const;

  // repeated .operations_research.sat.DecisionStrategyProto search_strategy = 5;
  int search_strategy_size() const;
  private:
  int _internal_search_strategy_size() const;
  public:
  void clear_search_strategy();
  ::operations_research::sat::DecisionStrategyProto* mutable_search_strategy(int index);
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::operations_research::sat::DecisionStrategyProto >*
      mutable_search_strategy();
  private:
  const ::operations_research::sat::DecisionStrategyProto& _internal_search_strategy(int index) const;
  ::operations_research::sat::DecisionStrategyProto* _internal_add_search_strategy();
  public:
  const ::operations_research::sat::DecisionStrategyProto& search_strategy(int index) const;
  ::operations_research::sat::DecisionStrategyProto* add_search_strategy();
  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::operations_research::sat::DecisionStrategyProto >&
      search_strategy() const;

  // repeated int32 assumptions = 7;
  int assumptions_size() const;
  private:
  int _internal_assumptions_size() const;
  public:
  void clear_assumptions();
  private:
  ::PROTOBUF_NAMESPACE_ID::int32 _internal_assumptions(int index) const;
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
      _internal_assumptions() const;
  void _internal_add_assumptions(::PROTOBUF_NAMESPACE_ID::int32 value);
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
      _internal_mutable_assumptions();
  public:
  ::PROTOBUF_NAMESPACE_ID::int32 assumptions(int index) const;
  void set_assumptions(int index, ::PROTOBUF_NAMESPACE_ID::int32 value);
  void add_assumptions(::PROTOBUF_NAMESPACE_ID::int32 value);
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
      assumptions() const;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
      mutable_assumptions();

  // string name = 1;
  void clear_name();
  const std::string& name() const;
  void set_name(const std::string& value);
  void set_name(std::string&& value);
  void set_name(const char* value);
  void set_name(const char* value, size_t size);
  std::string* mutable_name();
  std::string* release_name();
  void set_allocated_name(std::string* name);
  GOOGLE_PROTOBUF_RUNTIME_DEPRECATED("The unsafe_arena_ accessors for"
  "    string fields are deprecated and will be removed in a"
  "    future release.")
  std::string* unsafe_arena_release_name();
  GOOGLE_PROTOBUF_RUNTIME_DEPRECATED("The unsafe_arena_ accessors for"
  "    string fields are deprecated and will be removed in a"
  "    future release.")
  void unsafe_arena_set_allocated_name(
      std::string* name);
  private:
  const std::string& _internal_name() const;
  void _internal_set_name(const std::string& value);
  std::string* _internal_mutable_name();
  public:

  // .operations_research.sat.CpObjectiveProto objective = 4;
  bool has_objective() const;
  private:
  bool _internal_has_objective() const;
  public:
  void clear_objective();
  const ::operations_research::sat::CpObjectiveProto& objective() const;
  ::operations_research::sat::CpObjectiveProto* release_objective();
  ::operations_research::sat::CpObjectiveProto* mutable_objective();
  void set_allocated_objective(::operations_research::sat::CpObjectiveProto* objective);
  private:
  const ::operations_research::sat::CpObjectiveProto& _internal_objective() const;
  ::operations_research::sat::CpObjectiveProto* _internal_mutable_objective();
  public:
  void unsafe_arena_set_allocated_objective(
      ::operations_research::sat::CpObjectiveProto* objective);
  ::operations_research::sat::CpObjectiveProto* unsafe_arena_release_objective();

  // .operations_research.sat.PartialVariableAssignment solution_hint = 6;
  bool has_solution_hint() const;
  private:
  bool _internal_has_solution_hint() const;
  public:
  void clear_solution_hint();
  const ::operations_research::sat::PartialVariableAssignment& solution_hint() const;
  ::operations_research::sat::PartialVariableAssignment* release_solution_hint();
  ::operations_research::sat::PartialVariableAssignment* mutable_solution_hint();
  void set_allocated_solution_hint(::operations_research::sat::PartialVariableAssignment* solution_hint);
  private:
  const ::operations_research::sat::PartialVariableAssignment& _internal_solution_hint() const;
  ::operations_research::sat::PartialVariableAssignment* _internal_mutable_solution_hint();
  public:
  void unsafe_arena_set_allocated_solution_hint(
      ::operations_research::sat::PartialVariableAssignment* solution_hint);
  ::operations_research::sat::PartialVariableAssignment* unsafe_arena_release_solution_hint();

  // @@protoc_insertion_point(class_scope:operations_research.sat.CpModelProto)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::operations_research::sat::IntegerVariableProto > variables_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::operations_research::sat::ConstraintProto > constraints_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::operations_research::sat::DecisionStrategyProto > search_strategy_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 > assumptions_;
  mutable std::atomic<int> _assumptions_cached_byte_size_;
  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr name_;
  ::operations_research::sat::CpObjectiveProto* objective_;
  ::operations_research::sat::PartialVariableAssignment* solution_hint_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_ortools_2fsat_2fcp_5fmodel_2eproto;
};
// -------------------------------------------------------------------

class CpSolverResponse PROTOBUF_FINAL :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:operations_research.sat.CpSolverResponse) */ {
 public:
  inline CpSolverResponse() : CpSolverResponse(nullptr) {};
  virtual ~CpSolverResponse();

  CpSolverResponse(const CpSolverResponse& from);
  CpSolverResponse(CpSolverResponse&& from) noexcept
    : CpSolverResponse() {
    *this = ::std::move(from);
  }

  inline CpSolverResponse& operator=(const CpSolverResponse& from) {
    CopyFrom(from);
    return *this;
  }
  inline CpSolverResponse& operator=(CpSolverResponse&& from) noexcept {
    if (GetArena() == from.GetArena()) {
      if (this != &from) InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return GetMetadataStatic().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return GetMetadataStatic().reflection;
  }
  static const CpSolverResponse& default_instance();

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

  friend void swap(CpSolverResponse& a, CpSolverResponse& b) {
    a.Swap(&b);
  }
  inline void Swap(CpSolverResponse* other) {
    if (other == this) return;
    if (GetArena() == other->GetArena()) {
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(CpSolverResponse* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  inline CpSolverResponse* New() const final {
    return CreateMaybeMessage<CpSolverResponse>(nullptr);
  }

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

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  ::PROTOBUF_NAMESPACE_ID::uint8* _InternalSerialize(
      ::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  inline void SharedCtor();
  inline void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(CpSolverResponse* other);
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "operations_research.sat.CpSolverResponse";
  }
  protected:
  explicit CpSolverResponse(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
  private:
  static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
    ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&::descriptor_table_ortools_2fsat_2fcp_5fmodel_2eproto);
    return ::descriptor_table_ortools_2fsat_2fcp_5fmodel_2eproto.file_level_metadata[kIndexInFileMessages];
  }

  public:

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

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

  enum : int {
    kSolutionFieldNumber = 2,
    kSolutionLowerBoundsFieldNumber = 18,
    kSolutionUpperBoundsFieldNumber = 19,
    kTightenedVariablesFieldNumber = 21,
    kSufficientAssumptionsForInfeasibilityFieldNumber = 23,
    kSolutionInfoFieldNumber = 20,
    kObjectiveValueFieldNumber = 3,
    kStatusFieldNumber = 1,
    kAllSolutionsWereFoundFieldNumber = 5,
    kBestObjectiveBoundFieldNumber = 4,
    kNumBooleansFieldNumber = 10,
    kNumConflictsFieldNumber = 11,
    kNumBranchesFieldNumber = 12,
    kNumBinaryPropagationsFieldNumber = 13,
    kNumIntegerPropagationsFieldNumber = 14,
    kWallTimeFieldNumber = 15,
    kUserTimeFieldNumber = 16,
    kDeterministicTimeFieldNumber = 17,
    kPrimalIntegralFieldNumber = 22,
  };
  // repeated int64 solution = 2;
  int solution_size() const;
  private:
  int _internal_solution_size() const;
  public:
  void clear_solution();
  private:
  ::PROTOBUF_NAMESPACE_ID::int64 _internal_solution(int index) const;
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >&
      _internal_solution() const;
  void _internal_add_solution(::PROTOBUF_NAMESPACE_ID::int64 value);
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >*
      _internal_mutable_solution();
  public:
  ::PROTOBUF_NAMESPACE_ID::int64 solution(int index) const;
  void set_solution(int index, ::PROTOBUF_NAMESPACE_ID::int64 value);
  void add_solution(::PROTOBUF_NAMESPACE_ID::int64 value);
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >&
      solution() const;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >*
      mutable_solution();

  // repeated int64 solution_lower_bounds = 18;
  int solution_lower_bounds_size() const;
  private:
  int _internal_solution_lower_bounds_size() const;
  public:
  void clear_solution_lower_bounds();
  private:
  ::PROTOBUF_NAMESPACE_ID::int64 _internal_solution_lower_bounds(int index) const;
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >&
      _internal_solution_lower_bounds() const;
  void _internal_add_solution_lower_bounds(::PROTOBUF_NAMESPACE_ID::int64 value);
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >*
      _internal_mutable_solution_lower_bounds();
  public:
  ::PROTOBUF_NAMESPACE_ID::int64 solution_lower_bounds(int index) const;
  void set_solution_lower_bounds(int index, ::PROTOBUF_NAMESPACE_ID::int64 value);
  void add_solution_lower_bounds(::PROTOBUF_NAMESPACE_ID::int64 value);
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >&
      solution_lower_bounds() const;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >*
      mutable_solution_lower_bounds();

  // repeated int64 solution_upper_bounds = 19;
  int solution_upper_bounds_size() const;
  private:
  int _internal_solution_upper_bounds_size() const;
  public:
  void clear_solution_upper_bounds();
  private:
  ::PROTOBUF_NAMESPACE_ID::int64 _internal_solution_upper_bounds(int index) const;
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >&
      _internal_solution_upper_bounds() const;
  void _internal_add_solution_upper_bounds(::PROTOBUF_NAMESPACE_ID::int64 value);
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >*
      _internal_mutable_solution_upper_bounds();
  public:
  ::PROTOBUF_NAMESPACE_ID::int64 solution_upper_bounds(int index) const;
  void set_solution_upper_bounds(int index, ::PROTOBUF_NAMESPACE_ID::int64 value);
  void add_solution_upper_bounds(::PROTOBUF_NAMESPACE_ID::int64 value);
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >&
      solution_upper_bounds() const;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >*
      mutable_solution_upper_bounds();

  // repeated .operations_research.sat.IntegerVariableProto tightened_variables = 21;
  int tightened_variables_size() const;
  private:
  int _internal_tightened_variables_size() const;
  public:
  void clear_tightened_variables();
  ::operations_research::sat::IntegerVariableProto* mutable_tightened_variables(int index);
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::operations_research::sat::IntegerVariableProto >*
      mutable_tightened_variables();
  private:
  const ::operations_research::sat::IntegerVariableProto& _internal_tightened_variables(int index) const;
  ::operations_research::sat::IntegerVariableProto* _internal_add_tightened_variables();
  public:
  const ::operations_research::sat::IntegerVariableProto& tightened_variables(int index) const;
  ::operations_research::sat::IntegerVariableProto* add_tightened_variables();
  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::operations_research::sat::IntegerVariableProto >&
      tightened_variables() const;

  // repeated int32 sufficient_assumptions_for_infeasibility = 23;
  int sufficient_assumptions_for_infeasibility_size() const;
  private:
  int _internal_sufficient_assumptions_for_infeasibility_size() const;
  public:
  void clear_sufficient_assumptions_for_infeasibility();
  private:
  ::PROTOBUF_NAMESPACE_ID::int32 _internal_sufficient_assumptions_for_infeasibility(int index) const;
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
      _internal_sufficient_assumptions_for_infeasibility() const;
  void _internal_add_sufficient_assumptions_for_infeasibility(::PROTOBUF_NAMESPACE_ID::int32 value);
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
      _internal_mutable_sufficient_assumptions_for_infeasibility();
  public:
  ::PROTOBUF_NAMESPACE_ID::int32 sufficient_assumptions_for_infeasibility(int index) const;
  void set_sufficient_assumptions_for_infeasibility(int index, ::PROTOBUF_NAMESPACE_ID::int32 value);
  void add_sufficient_assumptions_for_infeasibility(::PROTOBUF_NAMESPACE_ID::int32 value);
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
      sufficient_assumptions_for_infeasibility() const;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
      mutable_sufficient_assumptions_for_infeasibility();

  // string solution_info = 20;
  void clear_solution_info();
  const std::string& solution_info() const;
  void set_solution_info(const std::string& value);
  void set_solution_info(std::string&& value);
  void set_solution_info(const char* value);
  void set_solution_info(const char* value, size_t size);
  std::string* mutable_solution_info();
  std::string* release_solution_info();
  void set_allocated_solution_info(std::string* solution_info);
  GOOGLE_PROTOBUF_RUNTIME_DEPRECATED("The unsafe_arena_ accessors for"
  "    string fields are deprecated and will be removed in a"
  "    future release.")
  std::string* unsafe_arena_release_solution_info();
  GOOGLE_PROTOBUF_RUNTIME_DEPRECATED("The unsafe_arena_ accessors for"
  "    string fields are deprecated and will be removed in a"
  "    future release.")
  void unsafe_arena_set_allocated_solution_info(
      std::string* solution_info);
  private:
  const std::string& _internal_solution_info() const;
  void _internal_set_solution_info(const std::string& value);
  std::string* _internal_mutable_solution_info();
  public:

  // double objective_value = 3;
  void clear_objective_value();
  double objective_value() const;
  void set_objective_value(double value);
  private:
  double _internal_objective_value() const;
  void _internal_set_objective_value(double value);
  public:

  // .operations_research.sat.CpSolverStatus status = 1;
  void clear_status();
  ::operations_research::sat::CpSolverStatus status() const;
  void set_status(::operations_research::sat::CpSolverStatus value);
  private:
  ::operations_research::sat::CpSolverStatus _internal_status() const;
  void _internal_set_status(::operations_research::sat::CpSolverStatus value);
  public:

  // bool all_solutions_were_found = 5;
  void clear_all_solutions_were_found();
  bool all_solutions_were_found() const;
  void set_all_solutions_were_found(bool value);
  private:
  bool _internal_all_solutions_were_found() const;
  void _internal_set_all_solutions_were_found(bool value);
  public:

  // double best_objective_bound = 4;
  void clear_best_objective_bound();
  double best_objective_bound() const;
  void set_best_objective_bound(double value);
  private:
  double _internal_best_objective_bound() const;
  void _internal_set_best_objective_bound(double value);
  public:

  // int64 num_booleans = 10;
  void clear_num_booleans();
  ::PROTOBUF_NAMESPACE_ID::int64 num_booleans() const;
  void set_num_booleans(::PROTOBUF_NAMESPACE_ID::int64 value);
  private:
  ::PROTOBUF_NAMESPACE_ID::int64 _internal_num_booleans() const;
  void _internal_set_num_booleans(::PROTOBUF_NAMESPACE_ID::int64 value);
  public:

  // int64 num_conflicts = 11;
  void clear_num_conflicts();
  ::PROTOBUF_NAMESPACE_ID::int64 num_conflicts() const;
  void set_num_conflicts(::PROTOBUF_NAMESPACE_ID::int64 value);
  private:
  ::PROTOBUF_NAMESPACE_ID::int64 _internal_num_conflicts() const;
  void _internal_set_num_conflicts(::PROTOBUF_NAMESPACE_ID::int64 value);
  public:

  // int64 num_branches = 12;
  void clear_num_branches();
  ::PROTOBUF_NAMESPACE_ID::int64 num_branches() const;
  void set_num_branches(::PROTOBUF_NAMESPACE_ID::int64 value);
  private:
  ::PROTOBUF_NAMESPACE_ID::int64 _internal_num_branches() const;
  void _internal_set_num_branches(::PROTOBUF_NAMESPACE_ID::int64 value);
  public:

  // int64 num_binary_propagations = 13;
  void clear_num_binary_propagations();
  ::PROTOBUF_NAMESPACE_ID::int64 num_binary_propagations() const;
  void set_num_binary_propagations(::PROTOBUF_NAMESPACE_ID::int64 value);
  private:
  ::PROTOBUF_NAMESPACE_ID::int64 _internal_num_binary_propagations() const;
  void _internal_set_num_binary_propagations(::PROTOBUF_NAMESPACE_ID::int64 value);
  public:

  // int64 num_integer_propagations = 14;
  void clear_num_integer_propagations();
  ::PROTOBUF_NAMESPACE_ID::int64 num_integer_propagations() const;
  void set_num_integer_propagations(::PROTOBUF_NAMESPACE_ID::int64 value);
  private:
  ::PROTOBUF_NAMESPACE_ID::int64 _internal_num_integer_propagations() const;
  void _internal_set_num_integer_propagations(::PROTOBUF_NAMESPACE_ID::int64 value);
  public:

  // double wall_time = 15;
  void clear_wall_time();
  double wall_time() const;
  void set_wall_time(double value);
  private:
  double _internal_wall_time() const;
  void _internal_set_wall_time(double value);
  public:

  // double user_time = 16;
  void clear_user_time();
  double user_time() const;
  void set_user_time(double value);
  private:
  double _internal_user_time() const;
  void _internal_set_user_time(double value);
  public:

  // double deterministic_time = 17;
  void clear_deterministic_time();
  double deterministic_time() const;
  void set_deterministic_time(double value);
  private:
  double _internal_deterministic_time() const;
  void _internal_set_deterministic_time(double value);
  public:

  // double primal_integral = 22;
  void clear_primal_integral();
  double primal_integral() const;
  void set_primal_integral(double value);
  private:
  double _internal_primal_integral() const;
  void _internal_set_primal_integral(double value);
  public:

  // @@protoc_insertion_point(class_scope:operations_research.sat.CpSolverResponse)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 > solution_;
  mutable std::atomic<int> _solution_cached_byte_size_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 > solution_lower_bounds_;
  mutable std::atomic<int> _solution_lower_bounds_cached_byte_size_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 > solution_upper_bounds_;
  mutable std::atomic<int> _solution_upper_bounds_cached_byte_size_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::operations_research::sat::IntegerVariableProto > tightened_variables_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 > sufficient_assumptions_for_infeasibility_;
  mutable std::atomic<int> _sufficient_assumptions_for_infeasibility_cached_byte_size_;
  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr solution_info_;
  double objective_value_;
  int status_;
  bool all_solutions_were_found_;
  double best_objective_bound_;
  ::PROTOBUF_NAMESPACE_ID::int64 num_booleans_;
  ::PROTOBUF_NAMESPACE_ID::int64 num_conflicts_;
  ::PROTOBUF_NAMESPACE_ID::int64 num_branches_;
  ::PROTOBUF_NAMESPACE_ID::int64 num_binary_propagations_;
  ::PROTOBUF_NAMESPACE_ID::int64 num_integer_propagations_;
  double wall_time_;
  double user_time_;
  double deterministic_time_;
  double primal_integral_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_ortools_2fsat_2fcp_5fmodel_2eproto;
};
// ===================================================================


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

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

// string name = 1;
inline void IntegerVariableProto::clear_name() {
  name_.ClearToEmpty(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena());
}
inline const std::string& IntegerVariableProto::name() const {
  // @@protoc_insertion_point(field_get:operations_research.sat.IntegerVariableProto.name)
  return _internal_name();
}
inline void IntegerVariableProto::set_name(const std::string& value) {
  _internal_set_name(value);
  // @@protoc_insertion_point(field_set:operations_research.sat.IntegerVariableProto.name)
}
inline std::string* IntegerVariableProto::mutable_name() {
  // @@protoc_insertion_point(field_mutable:operations_research.sat.IntegerVariableProto.name)
  return _internal_mutable_name();
}
inline const std::string& IntegerVariableProto::_internal_name() const {
  return name_.Get();
}
inline void IntegerVariableProto::_internal_set_name(const std::string& value) {
  
  name_.Set(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), value, GetArena());
}
inline void IntegerVariableProto::set_name(std::string&& value) {
  
  name_.Set(
    &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::move(value), GetArena());
  // @@protoc_insertion_point(field_set_rvalue:operations_research.sat.IntegerVariableProto.name)
}
inline void IntegerVariableProto::set_name(const char* value) {
  GOOGLE_DCHECK(value != nullptr);
  
  name_.Set(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::string(value),
              GetArena());
  // @@protoc_insertion_point(field_set_char:operations_research.sat.IntegerVariableProto.name)
}
inline void IntegerVariableProto::set_name(const char* value,
    size_t size) {
  
  name_.Set(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::string(
      reinterpret_cast<const char*>(value), size), GetArena());
  // @@protoc_insertion_point(field_set_pointer:operations_research.sat.IntegerVariableProto.name)
}
inline std::string* IntegerVariableProto::_internal_mutable_name() {
  
  return name_.Mutable(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena());
}
inline std::string* IntegerVariableProto::release_name() {
  // @@protoc_insertion_point(field_release:operations_research.sat.IntegerVariableProto.name)
  return name_.Release(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena());
}
inline void IntegerVariableProto::set_allocated_name(std::string* name) {
  if (name != nullptr) {
    
  } else {
    
  }
  name_.SetAllocated(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), name,
      GetArena());
  // @@protoc_insertion_point(field_set_allocated:operations_research.sat.IntegerVariableProto.name)
}
inline std::string* IntegerVariableProto::unsafe_arena_release_name() {
  // @@protoc_insertion_point(field_unsafe_arena_release:operations_research.sat.IntegerVariableProto.name)
  GOOGLE_DCHECK(GetArena() != nullptr);
  
  return name_.UnsafeArenaRelease(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(),
      GetArena());
}
inline void IntegerVariableProto::unsafe_arena_set_allocated_name(
    std::string* name) {
  GOOGLE_DCHECK(GetArena() != nullptr);
  if (name != nullptr) {
    
  } else {
    
  }
  name_.UnsafeArenaSetAllocated(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(),
      name, GetArena());
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:operations_research.sat.IntegerVariableProto.name)
}

// repeated int64 domain = 2;
inline int IntegerVariableProto::_internal_domain_size() const {
  return domain_.size();
}
inline int IntegerVariableProto::domain_size() const {
  return _internal_domain_size();
}
inline void IntegerVariableProto::clear_domain() {
  domain_.Clear();
}
inline ::PROTOBUF_NAMESPACE_ID::int64 IntegerVariableProto::_internal_domain(int index) const {
  return domain_.Get(index);
}
inline ::PROTOBUF_NAMESPACE_ID::int64 IntegerVariableProto::domain(int index) const {
  // @@protoc_insertion_point(field_get:operations_research.sat.IntegerVariableProto.domain)
  return _internal_domain(index);
}
inline void IntegerVariableProto::set_domain(int index, ::PROTOBUF_NAMESPACE_ID::int64 value) {
  domain_.Set(index, value);
  // @@protoc_insertion_point(field_set:operations_research.sat.IntegerVariableProto.domain)
}
inline void IntegerVariableProto::_internal_add_domain(::PROTOBUF_NAMESPACE_ID::int64 value) {
  domain_.Add(value);
}
inline void IntegerVariableProto::add_domain(::PROTOBUF_NAMESPACE_ID::int64 value) {
  _internal_add_domain(value);
  // @@protoc_insertion_point(field_add:operations_research.sat.IntegerVariableProto.domain)
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >&
IntegerVariableProto::_internal_domain() const {
  return domain_;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >&
IntegerVariableProto::domain() const {
  // @@protoc_insertion_point(field_list:operations_research.sat.IntegerVariableProto.domain)
  return _internal_domain();
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >*
IntegerVariableProto::_internal_mutable_domain() {
  return &domain_;
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >*
IntegerVariableProto::mutable_domain() {
  // @@protoc_insertion_point(field_mutable_list:operations_research.sat.IntegerVariableProto.domain)
  return _internal_mutable_domain();
}

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

// BoolArgumentProto

// repeated int32 literals = 1;
inline int BoolArgumentProto::_internal_literals_size() const {
  return literals_.size();
}
inline int BoolArgumentProto::literals_size() const {
  return _internal_literals_size();
}
inline void BoolArgumentProto::clear_literals() {
  literals_.Clear();
}
inline ::PROTOBUF_NAMESPACE_ID::int32 BoolArgumentProto::_internal_literals(int index) const {
  return literals_.Get(index);
}
inline ::PROTOBUF_NAMESPACE_ID::int32 BoolArgumentProto::literals(int index) const {
  // @@protoc_insertion_point(field_get:operations_research.sat.BoolArgumentProto.literals)
  return _internal_literals(index);
}
inline void BoolArgumentProto::set_literals(int index, ::PROTOBUF_NAMESPACE_ID::int32 value) {
  literals_.Set(index, value);
  // @@protoc_insertion_point(field_set:operations_research.sat.BoolArgumentProto.literals)
}
inline void BoolArgumentProto::_internal_add_literals(::PROTOBUF_NAMESPACE_ID::int32 value) {
  literals_.Add(value);
}
inline void BoolArgumentProto::add_literals(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _internal_add_literals(value);
  // @@protoc_insertion_point(field_add:operations_research.sat.BoolArgumentProto.literals)
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
BoolArgumentProto::_internal_literals() const {
  return literals_;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
BoolArgumentProto::literals() const {
  // @@protoc_insertion_point(field_list:operations_research.sat.BoolArgumentProto.literals)
  return _internal_literals();
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
BoolArgumentProto::_internal_mutable_literals() {
  return &literals_;
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
BoolArgumentProto::mutable_literals() {
  // @@protoc_insertion_point(field_mutable_list:operations_research.sat.BoolArgumentProto.literals)
  return _internal_mutable_literals();
}

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

// IntegerArgumentProto

// int32 target = 1;
inline void IntegerArgumentProto::clear_target() {
  target_ = 0;
}
inline ::PROTOBUF_NAMESPACE_ID::int32 IntegerArgumentProto::_internal_target() const {
  return target_;
}
inline ::PROTOBUF_NAMESPACE_ID::int32 IntegerArgumentProto::target() const {
  // @@protoc_insertion_point(field_get:operations_research.sat.IntegerArgumentProto.target)
  return _internal_target();
}
inline void IntegerArgumentProto::_internal_set_target(::PROTOBUF_NAMESPACE_ID::int32 value) {
  
  target_ = value;
}
inline void IntegerArgumentProto::set_target(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _internal_set_target(value);
  // @@protoc_insertion_point(field_set:operations_research.sat.IntegerArgumentProto.target)
}

// repeated int32 vars = 2;
inline int IntegerArgumentProto::_internal_vars_size() const {
  return vars_.size();
}
inline int IntegerArgumentProto::vars_size() const {
  return _internal_vars_size();
}
inline void IntegerArgumentProto::clear_vars() {
  vars_.Clear();
}
inline ::PROTOBUF_NAMESPACE_ID::int32 IntegerArgumentProto::_internal_vars(int index) const {
  return vars_.Get(index);
}
inline ::PROTOBUF_NAMESPACE_ID::int32 IntegerArgumentProto::vars(int index) const {
  // @@protoc_insertion_point(field_get:operations_research.sat.IntegerArgumentProto.vars)
  return _internal_vars(index);
}
inline void IntegerArgumentProto::set_vars(int index, ::PROTOBUF_NAMESPACE_ID::int32 value) {
  vars_.Set(index, value);
  // @@protoc_insertion_point(field_set:operations_research.sat.IntegerArgumentProto.vars)
}
inline void IntegerArgumentProto::_internal_add_vars(::PROTOBUF_NAMESPACE_ID::int32 value) {
  vars_.Add(value);
}
inline void IntegerArgumentProto::add_vars(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _internal_add_vars(value);
  // @@protoc_insertion_point(field_add:operations_research.sat.IntegerArgumentProto.vars)
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
IntegerArgumentProto::_internal_vars() const {
  return vars_;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
IntegerArgumentProto::vars() const {
  // @@protoc_insertion_point(field_list:operations_research.sat.IntegerArgumentProto.vars)
  return _internal_vars();
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
IntegerArgumentProto::_internal_mutable_vars() {
  return &vars_;
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
IntegerArgumentProto::mutable_vars() {
  // @@protoc_insertion_point(field_mutable_list:operations_research.sat.IntegerArgumentProto.vars)
  return _internal_mutable_vars();
}

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

// LinearExpressionProto

// repeated int32 vars = 1;
inline int LinearExpressionProto::_internal_vars_size() const {
  return vars_.size();
}
inline int LinearExpressionProto::vars_size() const {
  return _internal_vars_size();
}
inline void LinearExpressionProto::clear_vars() {
  vars_.Clear();
}
inline ::PROTOBUF_NAMESPACE_ID::int32 LinearExpressionProto::_internal_vars(int index) const {
  return vars_.Get(index);
}
inline ::PROTOBUF_NAMESPACE_ID::int32 LinearExpressionProto::vars(int index) const {
  // @@protoc_insertion_point(field_get:operations_research.sat.LinearExpressionProto.vars)
  return _internal_vars(index);
}
inline void LinearExpressionProto::set_vars(int index, ::PROTOBUF_NAMESPACE_ID::int32 value) {
  vars_.Set(index, value);
  // @@protoc_insertion_point(field_set:operations_research.sat.LinearExpressionProto.vars)
}
inline void LinearExpressionProto::_internal_add_vars(::PROTOBUF_NAMESPACE_ID::int32 value) {
  vars_.Add(value);
}
inline void LinearExpressionProto::add_vars(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _internal_add_vars(value);
  // @@protoc_insertion_point(field_add:operations_research.sat.LinearExpressionProto.vars)
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
LinearExpressionProto::_internal_vars() const {
  return vars_;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
LinearExpressionProto::vars() const {
  // @@protoc_insertion_point(field_list:operations_research.sat.LinearExpressionProto.vars)
  return _internal_vars();
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
LinearExpressionProto::_internal_mutable_vars() {
  return &vars_;
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
LinearExpressionProto::mutable_vars() {
  // @@protoc_insertion_point(field_mutable_list:operations_research.sat.LinearExpressionProto.vars)
  return _internal_mutable_vars();
}

// repeated int64 coeffs = 2;
inline int LinearExpressionProto::_internal_coeffs_size() const {
  return coeffs_.size();
}
inline int LinearExpressionProto::coeffs_size() const {
  return _internal_coeffs_size();
}
inline void LinearExpressionProto::clear_coeffs() {
  coeffs_.Clear();
}
inline ::PROTOBUF_NAMESPACE_ID::int64 LinearExpressionProto::_internal_coeffs(int index) const {
  return coeffs_.Get(index);
}
inline ::PROTOBUF_NAMESPACE_ID::int64 LinearExpressionProto::coeffs(int index) const {
  // @@protoc_insertion_point(field_get:operations_research.sat.LinearExpressionProto.coeffs)
  return _internal_coeffs(index);
}
inline void LinearExpressionProto::set_coeffs(int index, ::PROTOBUF_NAMESPACE_ID::int64 value) {
  coeffs_.Set(index, value);
  // @@protoc_insertion_point(field_set:operations_research.sat.LinearExpressionProto.coeffs)
}
inline void LinearExpressionProto::_internal_add_coeffs(::PROTOBUF_NAMESPACE_ID::int64 value) {
  coeffs_.Add(value);
}
inline void LinearExpressionProto::add_coeffs(::PROTOBUF_NAMESPACE_ID::int64 value) {
  _internal_add_coeffs(value);
  // @@protoc_insertion_point(field_add:operations_research.sat.LinearExpressionProto.coeffs)
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >&
LinearExpressionProto::_internal_coeffs() const {
  return coeffs_;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >&
LinearExpressionProto::coeffs() const {
  // @@protoc_insertion_point(field_list:operations_research.sat.LinearExpressionProto.coeffs)
  return _internal_coeffs();
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >*
LinearExpressionProto::_internal_mutable_coeffs() {
  return &coeffs_;
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >*
LinearExpressionProto::mutable_coeffs() {
  // @@protoc_insertion_point(field_mutable_list:operations_research.sat.LinearExpressionProto.coeffs)
  return _internal_mutable_coeffs();
}

// int64 offset = 3;
inline void LinearExpressionProto::clear_offset() {
  offset_ = PROTOBUF_LONGLONG(0);
}
inline ::PROTOBUF_NAMESPACE_ID::int64 LinearExpressionProto::_internal_offset() const {
  return offset_;
}
inline ::PROTOBUF_NAMESPACE_ID::int64 LinearExpressionProto::offset() const {
  // @@protoc_insertion_point(field_get:operations_research.sat.LinearExpressionProto.offset)
  return _internal_offset();
}
inline void LinearExpressionProto::_internal_set_offset(::PROTOBUF_NAMESPACE_ID::int64 value) {
  
  offset_ = value;
}
inline void LinearExpressionProto::set_offset(::PROTOBUF_NAMESPACE_ID::int64 value) {
  _internal_set_offset(value);
  // @@protoc_insertion_point(field_set:operations_research.sat.LinearExpressionProto.offset)
}

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

// LinearArgumentProto

// .operations_research.sat.LinearExpressionProto target = 1;
inline bool LinearArgumentProto::_internal_has_target() const {
  return this != internal_default_instance() && target_ != nullptr;
}
inline bool LinearArgumentProto::has_target() const {
  return _internal_has_target();
}
inline void LinearArgumentProto::clear_target() {
  if (GetArena() == nullptr && target_ != nullptr) {
    delete target_;
  }
  target_ = nullptr;
}
inline const ::operations_research::sat::LinearExpressionProto& LinearArgumentProto::_internal_target() const {
  const ::operations_research::sat::LinearExpressionProto* p = target_;
  return p != nullptr ? *p : *reinterpret_cast<const ::operations_research::sat::LinearExpressionProto*>(
      &::operations_research::sat::_LinearExpressionProto_default_instance_);
}
inline const ::operations_research::sat::LinearExpressionProto& LinearArgumentProto::target() const {
  // @@protoc_insertion_point(field_get:operations_research.sat.LinearArgumentProto.target)
  return _internal_target();
}
inline void LinearArgumentProto::unsafe_arena_set_allocated_target(
    ::operations_research::sat::LinearExpressionProto* target) {
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(target_);
  }
  target_ = target;
  if (target) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:operations_research.sat.LinearArgumentProto.target)
}
inline ::operations_research::sat::LinearExpressionProto* LinearArgumentProto::release_target() {
  auto temp = unsafe_arena_release_target();
  if (GetArena() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
  return temp;
}
inline ::operations_research::sat::LinearExpressionProto* LinearArgumentProto::unsafe_arena_release_target() {
  // @@protoc_insertion_point(field_release:operations_research.sat.LinearArgumentProto.target)
  
  ::operations_research::sat::LinearExpressionProto* temp = target_;
  target_ = nullptr;
  return temp;
}
inline ::operations_research::sat::LinearExpressionProto* LinearArgumentProto::_internal_mutable_target() {
  
  if (target_ == nullptr) {
    auto* p = CreateMaybeMessage<::operations_research::sat::LinearExpressionProto>(GetArena());
    target_ = p;
  }
  return target_;
}
inline ::operations_research::sat::LinearExpressionProto* LinearArgumentProto::mutable_target() {
  // @@protoc_insertion_point(field_mutable:operations_research.sat.LinearArgumentProto.target)
  return _internal_mutable_target();
}
inline void LinearArgumentProto::set_allocated_target(::operations_research::sat::LinearExpressionProto* target) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArena();
  if (message_arena == nullptr) {
    delete target_;
  }
  if (target) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
      ::PROTOBUF_NAMESPACE_ID::Arena::GetArena(target);
    if (message_arena != submessage_arena) {
      target = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, target, submessage_arena);
    }
    
  } else {
    
  }
  target_ = target;
  // @@protoc_insertion_point(field_set_allocated:operations_research.sat.LinearArgumentProto.target)
}

// repeated .operations_research.sat.LinearExpressionProto exprs = 2;
inline int LinearArgumentProto::_internal_exprs_size() const {
  return exprs_.size();
}
inline int LinearArgumentProto::exprs_size() const {
  return _internal_exprs_size();
}
inline void LinearArgumentProto::clear_exprs() {
  exprs_.Clear();
}
inline ::operations_research::sat::LinearExpressionProto* LinearArgumentProto::mutable_exprs(int index) {
  // @@protoc_insertion_point(field_mutable:operations_research.sat.LinearArgumentProto.exprs)
  return exprs_.Mutable(index);
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::operations_research::sat::LinearExpressionProto >*
LinearArgumentProto::mutable_exprs() {
  // @@protoc_insertion_point(field_mutable_list:operations_research.sat.LinearArgumentProto.exprs)
  return &exprs_;
}
inline const ::operations_research::sat::LinearExpressionProto& LinearArgumentProto::_internal_exprs(int index) const {
  return exprs_.Get(index);
}
inline const ::operations_research::sat::LinearExpressionProto& LinearArgumentProto::exprs(int index) const {
  // @@protoc_insertion_point(field_get:operations_research.sat.LinearArgumentProto.exprs)
  return _internal_exprs(index);
}
inline ::operations_research::sat::LinearExpressionProto* LinearArgumentProto::_internal_add_exprs() {
  return exprs_.Add();
}
inline ::operations_research::sat::LinearExpressionProto* LinearArgumentProto::add_exprs() {
  // @@protoc_insertion_point(field_add:operations_research.sat.LinearArgumentProto.exprs)
  return _internal_add_exprs();
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::operations_research::sat::LinearExpressionProto >&
LinearArgumentProto::exprs() const {
  // @@protoc_insertion_point(field_list:operations_research.sat.LinearArgumentProto.exprs)
  return exprs_;
}

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

// AllDifferentConstraintProto

// repeated int32 vars = 1;
inline int AllDifferentConstraintProto::_internal_vars_size() const {
  return vars_.size();
}
inline int AllDifferentConstraintProto::vars_size() const {
  return _internal_vars_size();
}
inline void AllDifferentConstraintProto::clear_vars() {
  vars_.Clear();
}
inline ::PROTOBUF_NAMESPACE_ID::int32 AllDifferentConstraintProto::_internal_vars(int index) const {
  return vars_.Get(index);
}
inline ::PROTOBUF_NAMESPACE_ID::int32 AllDifferentConstraintProto::vars(int index) const {
  // @@protoc_insertion_point(field_get:operations_research.sat.AllDifferentConstraintProto.vars)
  return _internal_vars(index);
}
inline void AllDifferentConstraintProto::set_vars(int index, ::PROTOBUF_NAMESPACE_ID::int32 value) {
  vars_.Set(index, value);
  // @@protoc_insertion_point(field_set:operations_research.sat.AllDifferentConstraintProto.vars)
}
inline void AllDifferentConstraintProto::_internal_add_vars(::PROTOBUF_NAMESPACE_ID::int32 value) {
  vars_.Add(value);
}
inline void AllDifferentConstraintProto::add_vars(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _internal_add_vars(value);
  // @@protoc_insertion_point(field_add:operations_research.sat.AllDifferentConstraintProto.vars)
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
AllDifferentConstraintProto::_internal_vars() const {
  return vars_;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
AllDifferentConstraintProto::vars() const {
  // @@protoc_insertion_point(field_list:operations_research.sat.AllDifferentConstraintProto.vars)
  return _internal_vars();
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
AllDifferentConstraintProto::_internal_mutable_vars() {
  return &vars_;
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
AllDifferentConstraintProto::mutable_vars() {
  // @@protoc_insertion_point(field_mutable_list:operations_research.sat.AllDifferentConstraintProto.vars)
  return _internal_mutable_vars();
}

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

// LinearConstraintProto

// repeated int32 vars = 1;
inline int LinearConstraintProto::_internal_vars_size() const {
  return vars_.size();
}
inline int LinearConstraintProto::vars_size() const {
  return _internal_vars_size();
}
inline void LinearConstraintProto::clear_vars() {
  vars_.Clear();
}
inline ::PROTOBUF_NAMESPACE_ID::int32 LinearConstraintProto::_internal_vars(int index) const {
  return vars_.Get(index);
}
inline ::PROTOBUF_NAMESPACE_ID::int32 LinearConstraintProto::vars(int index) const {
  // @@protoc_insertion_point(field_get:operations_research.sat.LinearConstraintProto.vars)
  return _internal_vars(index);
}
inline void LinearConstraintProto::set_vars(int index, ::PROTOBUF_NAMESPACE_ID::int32 value) {
  vars_.Set(index, value);
  // @@protoc_insertion_point(field_set:operations_research.sat.LinearConstraintProto.vars)
}
inline void LinearConstraintProto::_internal_add_vars(::PROTOBUF_NAMESPACE_ID::int32 value) {
  vars_.Add(value);
}
inline void LinearConstraintProto::add_vars(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _internal_add_vars(value);
  // @@protoc_insertion_point(field_add:operations_research.sat.LinearConstraintProto.vars)
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
LinearConstraintProto::_internal_vars() const {
  return vars_;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
LinearConstraintProto::vars() const {
  // @@protoc_insertion_point(field_list:operations_research.sat.LinearConstraintProto.vars)
  return _internal_vars();
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
LinearConstraintProto::_internal_mutable_vars() {
  return &vars_;
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
LinearConstraintProto::mutable_vars() {
  // @@protoc_insertion_point(field_mutable_list:operations_research.sat.LinearConstraintProto.vars)
  return _internal_mutable_vars();
}

// repeated int64 coeffs = 2;
inline int LinearConstraintProto::_internal_coeffs_size() const {
  return coeffs_.size();
}
inline int LinearConstraintProto::coeffs_size() const {
  return _internal_coeffs_size();
}
inline void LinearConstraintProto::clear_coeffs() {
  coeffs_.Clear();
}
inline ::PROTOBUF_NAMESPACE_ID::int64 LinearConstraintProto::_internal_coeffs(int index) const {
  return coeffs_.Get(index);
}
inline ::PROTOBUF_NAMESPACE_ID::int64 LinearConstraintProto::coeffs(int index) const {
  // @@protoc_insertion_point(field_get:operations_research.sat.LinearConstraintProto.coeffs)
  return _internal_coeffs(index);
}
inline void LinearConstraintProto::set_coeffs(int index, ::PROTOBUF_NAMESPACE_ID::int64 value) {
  coeffs_.Set(index, value);
  // @@protoc_insertion_point(field_set:operations_research.sat.LinearConstraintProto.coeffs)
}
inline void LinearConstraintProto::_internal_add_coeffs(::PROTOBUF_NAMESPACE_ID::int64 value) {
  coeffs_.Add(value);
}
inline void LinearConstraintProto::add_coeffs(::PROTOBUF_NAMESPACE_ID::int64 value) {
  _internal_add_coeffs(value);
  // @@protoc_insertion_point(field_add:operations_research.sat.LinearConstraintProto.coeffs)
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >&
LinearConstraintProto::_internal_coeffs() const {
  return coeffs_;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >&
LinearConstraintProto::coeffs() const {
  // @@protoc_insertion_point(field_list:operations_research.sat.LinearConstraintProto.coeffs)
  return _internal_coeffs();
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >*
LinearConstraintProto::_internal_mutable_coeffs() {
  return &coeffs_;
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >*
LinearConstraintProto::mutable_coeffs() {
  // @@protoc_insertion_point(field_mutable_list:operations_research.sat.LinearConstraintProto.coeffs)
  return _internal_mutable_coeffs();
}

// repeated int64 domain = 3;
inline int LinearConstraintProto::_internal_domain_size() const {
  return domain_.size();
}
inline int LinearConstraintProto::domain_size() const {
  return _internal_domain_size();
}
inline void LinearConstraintProto::clear_domain() {
  domain_.Clear();
}
inline ::PROTOBUF_NAMESPACE_ID::int64 LinearConstraintProto::_internal_domain(int index) const {
  return domain_.Get(index);
}
inline ::PROTOBUF_NAMESPACE_ID::int64 LinearConstraintProto::domain(int index) const {
  // @@protoc_insertion_point(field_get:operations_research.sat.LinearConstraintProto.domain)
  return _internal_domain(index);
}
inline void LinearConstraintProto::set_domain(int index, ::PROTOBUF_NAMESPACE_ID::int64 value) {
  domain_.Set(index, value);
  // @@protoc_insertion_point(field_set:operations_research.sat.LinearConstraintProto.domain)
}
inline void LinearConstraintProto::_internal_add_domain(::PROTOBUF_NAMESPACE_ID::int64 value) {
  domain_.Add(value);
}
inline void LinearConstraintProto::add_domain(::PROTOBUF_NAMESPACE_ID::int64 value) {
  _internal_add_domain(value);
  // @@protoc_insertion_point(field_add:operations_research.sat.LinearConstraintProto.domain)
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >&
LinearConstraintProto::_internal_domain() const {
  return domain_;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >&
LinearConstraintProto::domain() const {
  // @@protoc_insertion_point(field_list:operations_research.sat.LinearConstraintProto.domain)
  return _internal_domain();
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >*
LinearConstraintProto::_internal_mutable_domain() {
  return &domain_;
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >*
LinearConstraintProto::mutable_domain() {
  // @@protoc_insertion_point(field_mutable_list:operations_research.sat.LinearConstraintProto.domain)
  return _internal_mutable_domain();
}

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

// ElementConstraintProto

// int32 index = 1;
inline void ElementConstraintProto::clear_index() {
  index_ = 0;
}
inline ::PROTOBUF_NAMESPACE_ID::int32 ElementConstraintProto::_internal_index() const {
  return index_;
}
inline ::PROTOBUF_NAMESPACE_ID::int32 ElementConstraintProto::index() const {
  // @@protoc_insertion_point(field_get:operations_research.sat.ElementConstraintProto.index)
  return _internal_index();
}
inline void ElementConstraintProto::_internal_set_index(::PROTOBUF_NAMESPACE_ID::int32 value) {
  
  index_ = value;
}
inline void ElementConstraintProto::set_index(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _internal_set_index(value);
  // @@protoc_insertion_point(field_set:operations_research.sat.ElementConstraintProto.index)
}

// int32 target = 2;
inline void ElementConstraintProto::clear_target() {
  target_ = 0;
}
inline ::PROTOBUF_NAMESPACE_ID::int32 ElementConstraintProto::_internal_target() const {
  return target_;
}
inline ::PROTOBUF_NAMESPACE_ID::int32 ElementConstraintProto::target() const {
  // @@protoc_insertion_point(field_get:operations_research.sat.ElementConstraintProto.target)
  return _internal_target();
}
inline void ElementConstraintProto::_internal_set_target(::PROTOBUF_NAMESPACE_ID::int32 value) {
  
  target_ = value;
}
inline void ElementConstraintProto::set_target(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _internal_set_target(value);
  // @@protoc_insertion_point(field_set:operations_research.sat.ElementConstraintProto.target)
}

// repeated int32 vars = 3;
inline int ElementConstraintProto::_internal_vars_size() const {
  return vars_.size();
}
inline int ElementConstraintProto::vars_size() const {
  return _internal_vars_size();
}
inline void ElementConstraintProto::clear_vars() {
  vars_.Clear();
}
inline ::PROTOBUF_NAMESPACE_ID::int32 ElementConstraintProto::_internal_vars(int index) const {
  return vars_.Get(index);
}
inline ::PROTOBUF_NAMESPACE_ID::int32 ElementConstraintProto::vars(int index) const {
  // @@protoc_insertion_point(field_get:operations_research.sat.ElementConstraintProto.vars)
  return _internal_vars(index);
}
inline void ElementConstraintProto::set_vars(int index, ::PROTOBUF_NAMESPACE_ID::int32 value) {
  vars_.Set(index, value);
  // @@protoc_insertion_point(field_set:operations_research.sat.ElementConstraintProto.vars)
}
inline void ElementConstraintProto::_internal_add_vars(::PROTOBUF_NAMESPACE_ID::int32 value) {
  vars_.Add(value);
}
inline void ElementConstraintProto::add_vars(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _internal_add_vars(value);
  // @@protoc_insertion_point(field_add:operations_research.sat.ElementConstraintProto.vars)
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
ElementConstraintProto::_internal_vars() const {
  return vars_;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
ElementConstraintProto::vars() const {
  // @@protoc_insertion_point(field_list:operations_research.sat.ElementConstraintProto.vars)
  return _internal_vars();
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
ElementConstraintProto::_internal_mutable_vars() {
  return &vars_;
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
ElementConstraintProto::mutable_vars() {
  // @@protoc_insertion_point(field_mutable_list:operations_research.sat.ElementConstraintProto.vars)
  return _internal_mutable_vars();
}

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

// IntervalConstraintProto

// int32 start = 1;
inline void IntervalConstraintProto::clear_start() {
  start_ = 0;
}
inline ::PROTOBUF_NAMESPACE_ID::int32 IntervalConstraintProto::_internal_start() const {
  return start_;
}
inline ::PROTOBUF_NAMESPACE_ID::int32 IntervalConstraintProto::start() const {
  // @@protoc_insertion_point(field_get:operations_research.sat.IntervalConstraintProto.start)
  return _internal_start();
}
inline void IntervalConstraintProto::_internal_set_start(::PROTOBUF_NAMESPACE_ID::int32 value) {
  
  start_ = value;
}
inline void IntervalConstraintProto::set_start(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _internal_set_start(value);
  // @@protoc_insertion_point(field_set:operations_research.sat.IntervalConstraintProto.start)
}

// int32 end = 2;
inline void IntervalConstraintProto::clear_end() {
  end_ = 0;
}
inline ::PROTOBUF_NAMESPACE_ID::int32 IntervalConstraintProto::_internal_end() const {
  return end_;
}
inline ::PROTOBUF_NAMESPACE_ID::int32 IntervalConstraintProto::end() const {
  // @@protoc_insertion_point(field_get:operations_research.sat.IntervalConstraintProto.end)
  return _internal_end();
}
inline void IntervalConstraintProto::_internal_set_end(::PROTOBUF_NAMESPACE_ID::int32 value) {
  
  end_ = value;
}
inline void IntervalConstraintProto::set_end(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _internal_set_end(value);
  // @@protoc_insertion_point(field_set:operations_research.sat.IntervalConstraintProto.end)
}

// int32 size = 3;
inline void IntervalConstraintProto::clear_size() {
  size_ = 0;
}
inline ::PROTOBUF_NAMESPACE_ID::int32 IntervalConstraintProto::_internal_size() const {
  return size_;
}
inline ::PROTOBUF_NAMESPACE_ID::int32 IntervalConstraintProto::size() const {
  // @@protoc_insertion_point(field_get:operations_research.sat.IntervalConstraintProto.size)
  return _internal_size();
}
inline void IntervalConstraintProto::_internal_set_size(::PROTOBUF_NAMESPACE_ID::int32 value) {
  
  size_ = value;
}
inline void IntervalConstraintProto::set_size(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _internal_set_size(value);
  // @@protoc_insertion_point(field_set:operations_research.sat.IntervalConstraintProto.size)
}

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

// NoOverlapConstraintProto

// repeated int32 intervals = 1;
inline int NoOverlapConstraintProto::_internal_intervals_size() const {
  return intervals_.size();
}
inline int NoOverlapConstraintProto::intervals_size() const {
  return _internal_intervals_size();
}
inline void NoOverlapConstraintProto::clear_intervals() {
  intervals_.Clear();
}
inline ::PROTOBUF_NAMESPACE_ID::int32 NoOverlapConstraintProto::_internal_intervals(int index) const {
  return intervals_.Get(index);
}
inline ::PROTOBUF_NAMESPACE_ID::int32 NoOverlapConstraintProto::intervals(int index) const {
  // @@protoc_insertion_point(field_get:operations_research.sat.NoOverlapConstraintProto.intervals)
  return _internal_intervals(index);
}
inline void NoOverlapConstraintProto::set_intervals(int index, ::PROTOBUF_NAMESPACE_ID::int32 value) {
  intervals_.Set(index, value);
  // @@protoc_insertion_point(field_set:operations_research.sat.NoOverlapConstraintProto.intervals)
}
inline void NoOverlapConstraintProto::_internal_add_intervals(::PROTOBUF_NAMESPACE_ID::int32 value) {
  intervals_.Add(value);
}
inline void NoOverlapConstraintProto::add_intervals(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _internal_add_intervals(value);
  // @@protoc_insertion_point(field_add:operations_research.sat.NoOverlapConstraintProto.intervals)
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
NoOverlapConstraintProto::_internal_intervals() const {
  return intervals_;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
NoOverlapConstraintProto::intervals() const {
  // @@protoc_insertion_point(field_list:operations_research.sat.NoOverlapConstraintProto.intervals)
  return _internal_intervals();
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
NoOverlapConstraintProto::_internal_mutable_intervals() {
  return &intervals_;
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
NoOverlapConstraintProto::mutable_intervals() {
  // @@protoc_insertion_point(field_mutable_list:operations_research.sat.NoOverlapConstraintProto.intervals)
  return _internal_mutable_intervals();
}

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

// NoOverlap2DConstraintProto

// repeated int32 x_intervals = 1;
inline int NoOverlap2DConstraintProto::_internal_x_intervals_size() const {
  return x_intervals_.size();
}
inline int NoOverlap2DConstraintProto::x_intervals_size() const {
  return _internal_x_intervals_size();
}
inline void NoOverlap2DConstraintProto::clear_x_intervals() {
  x_intervals_.Clear();
}
inline ::PROTOBUF_NAMESPACE_ID::int32 NoOverlap2DConstraintProto::_internal_x_intervals(int index) const {
  return x_intervals_.Get(index);
}
inline ::PROTOBUF_NAMESPACE_ID::int32 NoOverlap2DConstraintProto::x_intervals(int index) const {
  // @@protoc_insertion_point(field_get:operations_research.sat.NoOverlap2DConstraintProto.x_intervals)
  return _internal_x_intervals(index);
}
inline void NoOverlap2DConstraintProto::set_x_intervals(int index, ::PROTOBUF_NAMESPACE_ID::int32 value) {
  x_intervals_.Set(index, value);
  // @@protoc_insertion_point(field_set:operations_research.sat.NoOverlap2DConstraintProto.x_intervals)
}
inline void NoOverlap2DConstraintProto::_internal_add_x_intervals(::PROTOBUF_NAMESPACE_ID::int32 value) {
  x_intervals_.Add(value);
}
inline void NoOverlap2DConstraintProto::add_x_intervals(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _internal_add_x_intervals(value);
  // @@protoc_insertion_point(field_add:operations_research.sat.NoOverlap2DConstraintProto.x_intervals)
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
NoOverlap2DConstraintProto::_internal_x_intervals() const {
  return x_intervals_;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
NoOverlap2DConstraintProto::x_intervals() const {
  // @@protoc_insertion_point(field_list:operations_research.sat.NoOverlap2DConstraintProto.x_intervals)
  return _internal_x_intervals();
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
NoOverlap2DConstraintProto::_internal_mutable_x_intervals() {
  return &x_intervals_;
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
NoOverlap2DConstraintProto::mutable_x_intervals() {
  // @@protoc_insertion_point(field_mutable_list:operations_research.sat.NoOverlap2DConstraintProto.x_intervals)
  return _internal_mutable_x_intervals();
}

// repeated int32 y_intervals = 2;
inline int NoOverlap2DConstraintProto::_internal_y_intervals_size() const {
  return y_intervals_.size();
}
inline int NoOverlap2DConstraintProto::y_intervals_size() const {
  return _internal_y_intervals_size();
}
inline void NoOverlap2DConstraintProto::clear_y_intervals() {
  y_intervals_.Clear();
}
inline ::PROTOBUF_NAMESPACE_ID::int32 NoOverlap2DConstraintProto::_internal_y_intervals(int index) const {
  return y_intervals_.Get(index);
}
inline ::PROTOBUF_NAMESPACE_ID::int32 NoOverlap2DConstraintProto::y_intervals(int index) const {
  // @@protoc_insertion_point(field_get:operations_research.sat.NoOverlap2DConstraintProto.y_intervals)
  return _internal_y_intervals(index);
}
inline void NoOverlap2DConstraintProto::set_y_intervals(int index, ::PROTOBUF_NAMESPACE_ID::int32 value) {
  y_intervals_.Set(index, value);
  // @@protoc_insertion_point(field_set:operations_research.sat.NoOverlap2DConstraintProto.y_intervals)
}
inline void NoOverlap2DConstraintProto::_internal_add_y_intervals(::PROTOBUF_NAMESPACE_ID::int32 value) {
  y_intervals_.Add(value);
}
inline void NoOverlap2DConstraintProto::add_y_intervals(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _internal_add_y_intervals(value);
  // @@protoc_insertion_point(field_add:operations_research.sat.NoOverlap2DConstraintProto.y_intervals)
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
NoOverlap2DConstraintProto::_internal_y_intervals() const {
  return y_intervals_;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
NoOverlap2DConstraintProto::y_intervals() const {
  // @@protoc_insertion_point(field_list:operations_research.sat.NoOverlap2DConstraintProto.y_intervals)
  return _internal_y_intervals();
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
NoOverlap2DConstraintProto::_internal_mutable_y_intervals() {
  return &y_intervals_;
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
NoOverlap2DConstraintProto::mutable_y_intervals() {
  // @@protoc_insertion_point(field_mutable_list:operations_research.sat.NoOverlap2DConstraintProto.y_intervals)
  return _internal_mutable_y_intervals();
}

// bool boxes_with_null_area_can_overlap = 3;
inline void NoOverlap2DConstraintProto::clear_boxes_with_null_area_can_overlap() {
  boxes_with_null_area_can_overlap_ = false;
}
inline bool NoOverlap2DConstraintProto::_internal_boxes_with_null_area_can_overlap() const {
  return boxes_with_null_area_can_overlap_;
}
inline bool NoOverlap2DConstraintProto::boxes_with_null_area_can_overlap() const {
  // @@protoc_insertion_point(field_get:operations_research.sat.NoOverlap2DConstraintProto.boxes_with_null_area_can_overlap)
  return _internal_boxes_with_null_area_can_overlap();
}
inline void NoOverlap2DConstraintProto::_internal_set_boxes_with_null_area_can_overlap(bool value) {
  
  boxes_with_null_area_can_overlap_ = value;
}
inline void NoOverlap2DConstraintProto::set_boxes_with_null_area_can_overlap(bool value) {
  _internal_set_boxes_with_null_area_can_overlap(value);
  // @@protoc_insertion_point(field_set:operations_research.sat.NoOverlap2DConstraintProto.boxes_with_null_area_can_overlap)
}

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

// CumulativeConstraintProto

// int32 capacity = 1;
inline void CumulativeConstraintProto::clear_capacity() {
  capacity_ = 0;
}
inline ::PROTOBUF_NAMESPACE_ID::int32 CumulativeConstraintProto::_internal_capacity() const {
  return capacity_;
}
inline ::PROTOBUF_NAMESPACE_ID::int32 CumulativeConstraintProto::capacity() const {
  // @@protoc_insertion_point(field_get:operations_research.sat.CumulativeConstraintProto.capacity)
  return _internal_capacity();
}
inline void CumulativeConstraintProto::_internal_set_capacity(::PROTOBUF_NAMESPACE_ID::int32 value) {
  
  capacity_ = value;
}
inline void CumulativeConstraintProto::set_capacity(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _internal_set_capacity(value);
  // @@protoc_insertion_point(field_set:operations_research.sat.CumulativeConstraintProto.capacity)
}

// repeated int32 intervals = 2;
inline int CumulativeConstraintProto::_internal_intervals_size() const {
  return intervals_.size();
}
inline int CumulativeConstraintProto::intervals_size() const {
  return _internal_intervals_size();
}
inline void CumulativeConstraintProto::clear_intervals() {
  intervals_.Clear();
}
inline ::PROTOBUF_NAMESPACE_ID::int32 CumulativeConstraintProto::_internal_intervals(int index) const {
  return intervals_.Get(index);
}
inline ::PROTOBUF_NAMESPACE_ID::int32 CumulativeConstraintProto::intervals(int index) const {
  // @@protoc_insertion_point(field_get:operations_research.sat.CumulativeConstraintProto.intervals)
  return _internal_intervals(index);
}
inline void CumulativeConstraintProto::set_intervals(int index, ::PROTOBUF_NAMESPACE_ID::int32 value) {
  intervals_.Set(index, value);
  // @@protoc_insertion_point(field_set:operations_research.sat.CumulativeConstraintProto.intervals)
}
inline void CumulativeConstraintProto::_internal_add_intervals(::PROTOBUF_NAMESPACE_ID::int32 value) {
  intervals_.Add(value);
}
inline void CumulativeConstraintProto::add_intervals(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _internal_add_intervals(value);
  // @@protoc_insertion_point(field_add:operations_research.sat.CumulativeConstraintProto.intervals)
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
CumulativeConstraintProto::_internal_intervals() const {
  return intervals_;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
CumulativeConstraintProto::intervals() const {
  // @@protoc_insertion_point(field_list:operations_research.sat.CumulativeConstraintProto.intervals)
  return _internal_intervals();
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
CumulativeConstraintProto::_internal_mutable_intervals() {
  return &intervals_;
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
CumulativeConstraintProto::mutable_intervals() {
  // @@protoc_insertion_point(field_mutable_list:operations_research.sat.CumulativeConstraintProto.intervals)
  return _internal_mutable_intervals();
}

// repeated int32 demands = 3;
inline int CumulativeConstraintProto::_internal_demands_size() const {
  return demands_.size();
}
inline int CumulativeConstraintProto::demands_size() const {
  return _internal_demands_size();
}
inline void CumulativeConstraintProto::clear_demands() {
  demands_.Clear();
}
inline ::PROTOBUF_NAMESPACE_ID::int32 CumulativeConstraintProto::_internal_demands(int index) const {
  return demands_.Get(index);
}
inline ::PROTOBUF_NAMESPACE_ID::int32 CumulativeConstraintProto::demands(int index) const {
  // @@protoc_insertion_point(field_get:operations_research.sat.CumulativeConstraintProto.demands)
  return _internal_demands(index);
}
inline void CumulativeConstraintProto::set_demands(int index, ::PROTOBUF_NAMESPACE_ID::int32 value) {
  demands_.Set(index, value);
  // @@protoc_insertion_point(field_set:operations_research.sat.CumulativeConstraintProto.demands)
}
inline void CumulativeConstraintProto::_internal_add_demands(::PROTOBUF_NAMESPACE_ID::int32 value) {
  demands_.Add(value);
}
inline void CumulativeConstraintProto::add_demands(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _internal_add_demands(value);
  // @@protoc_insertion_point(field_add:operations_research.sat.CumulativeConstraintProto.demands)
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
CumulativeConstraintProto::_internal_demands() const {
  return demands_;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
CumulativeConstraintProto::demands() const {
  // @@protoc_insertion_point(field_list:operations_research.sat.CumulativeConstraintProto.demands)
  return _internal_demands();
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
CumulativeConstraintProto::_internal_mutable_demands() {
  return &demands_;
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
CumulativeConstraintProto::mutable_demands() {
  // @@protoc_insertion_point(field_mutable_list:operations_research.sat.CumulativeConstraintProto.demands)
  return _internal_mutable_demands();
}

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

// ReservoirConstraintProto

// int64 min_level = 1;
inline void ReservoirConstraintProto::clear_min_level() {
  min_level_ = PROTOBUF_LONGLONG(0);
}
inline ::PROTOBUF_NAMESPACE_ID::int64 ReservoirConstraintProto::_internal_min_level() const {
  return min_level_;
}
inline ::PROTOBUF_NAMESPACE_ID::int64 ReservoirConstraintProto::min_level() const {
  // @@protoc_insertion_point(field_get:operations_research.sat.ReservoirConstraintProto.min_level)
  return _internal_min_level();
}
inline void ReservoirConstraintProto::_internal_set_min_level(::PROTOBUF_NAMESPACE_ID::int64 value) {
  
  min_level_ = value;
}
inline void ReservoirConstraintProto::set_min_level(::PROTOBUF_NAMESPACE_ID::int64 value) {
  _internal_set_min_level(value);
  // @@protoc_insertion_point(field_set:operations_research.sat.ReservoirConstraintProto.min_level)
}

// int64 max_level = 2;
inline void ReservoirConstraintProto::clear_max_level() {
  max_level_ = PROTOBUF_LONGLONG(0);
}
inline ::PROTOBUF_NAMESPACE_ID::int64 ReservoirConstraintProto::_internal_max_level() const {
  return max_level_;
}
inline ::PROTOBUF_NAMESPACE_ID::int64 ReservoirConstraintProto::max_level() const {
  // @@protoc_insertion_point(field_get:operations_research.sat.ReservoirConstraintProto.max_level)
  return _internal_max_level();
}
inline void ReservoirConstraintProto::_internal_set_max_level(::PROTOBUF_NAMESPACE_ID::int64 value) {
  
  max_level_ = value;
}
inline void ReservoirConstraintProto::set_max_level(::PROTOBUF_NAMESPACE_ID::int64 value) {
  _internal_set_max_level(value);
  // @@protoc_insertion_point(field_set:operations_research.sat.ReservoirConstraintProto.max_level)
}

// repeated int32 times = 3;
inline int ReservoirConstraintProto::_internal_times_size() const {
  return times_.size();
}
inline int ReservoirConstraintProto::times_size() const {
  return _internal_times_size();
}
inline void ReservoirConstraintProto::clear_times() {
  times_.Clear();
}
inline ::PROTOBUF_NAMESPACE_ID::int32 ReservoirConstraintProto::_internal_times(int index) const {
  return times_.Get(index);
}
inline ::PROTOBUF_NAMESPACE_ID::int32 ReservoirConstraintProto::times(int index) const {
  // @@protoc_insertion_point(field_get:operations_research.sat.ReservoirConstraintProto.times)
  return _internal_times(index);
}
inline void ReservoirConstraintProto::set_times(int index, ::PROTOBUF_NAMESPACE_ID::int32 value) {
  times_.Set(index, value);
  // @@protoc_insertion_point(field_set:operations_research.sat.ReservoirConstraintProto.times)
}
inline void ReservoirConstraintProto::_internal_add_times(::PROTOBUF_NAMESPACE_ID::int32 value) {
  times_.Add(value);
}
inline void ReservoirConstraintProto::add_times(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _internal_add_times(value);
  // @@protoc_insertion_point(field_add:operations_research.sat.ReservoirConstraintProto.times)
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
ReservoirConstraintProto::_internal_times() const {
  return times_;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
ReservoirConstraintProto::times() const {
  // @@protoc_insertion_point(field_list:operations_research.sat.ReservoirConstraintProto.times)
  return _internal_times();
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
ReservoirConstraintProto::_internal_mutable_times() {
  return &times_;
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
ReservoirConstraintProto::mutable_times() {
  // @@protoc_insertion_point(field_mutable_list:operations_research.sat.ReservoirConstraintProto.times)
  return _internal_mutable_times();
}

// repeated int64 demands = 4;
inline int ReservoirConstraintProto::_internal_demands_size() const {
  return demands_.size();
}
inline int ReservoirConstraintProto::demands_size() const {
  return _internal_demands_size();
}
inline void ReservoirConstraintProto::clear_demands() {
  demands_.Clear();
}
inline ::PROTOBUF_NAMESPACE_ID::int64 ReservoirConstraintProto::_internal_demands(int index) const {
  return demands_.Get(index);
}
inline ::PROTOBUF_NAMESPACE_ID::int64 ReservoirConstraintProto::demands(int index) const {
  // @@protoc_insertion_point(field_get:operations_research.sat.ReservoirConstraintProto.demands)
  return _internal_demands(index);
}
inline void ReservoirConstraintProto::set_demands(int index, ::PROTOBUF_NAMESPACE_ID::int64 value) {
  demands_.Set(index, value);
  // @@protoc_insertion_point(field_set:operations_research.sat.ReservoirConstraintProto.demands)
}
inline void ReservoirConstraintProto::_internal_add_demands(::PROTOBUF_NAMESPACE_ID::int64 value) {
  demands_.Add(value);
}
inline void ReservoirConstraintProto::add_demands(::PROTOBUF_NAMESPACE_ID::int64 value) {
  _internal_add_demands(value);
  // @@protoc_insertion_point(field_add:operations_research.sat.ReservoirConstraintProto.demands)
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >&
ReservoirConstraintProto::_internal_demands() const {
  return demands_;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >&
ReservoirConstraintProto::demands() const {
  // @@protoc_insertion_point(field_list:operations_research.sat.ReservoirConstraintProto.demands)
  return _internal_demands();
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >*
ReservoirConstraintProto::_internal_mutable_demands() {
  return &demands_;
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >*
ReservoirConstraintProto::mutable_demands() {
  // @@protoc_insertion_point(field_mutable_list:operations_research.sat.ReservoirConstraintProto.demands)
  return _internal_mutable_demands();
}

// repeated int32 actives = 5;
inline int ReservoirConstraintProto::_internal_actives_size() const {
  return actives_.size();
}
inline int ReservoirConstraintProto::actives_size() const {
  return _internal_actives_size();
}
inline void ReservoirConstraintProto::clear_actives() {
  actives_.Clear();
}
inline ::PROTOBUF_NAMESPACE_ID::int32 ReservoirConstraintProto::_internal_actives(int index) const {
  return actives_.Get(index);
}
inline ::PROTOBUF_NAMESPACE_ID::int32 ReservoirConstraintProto::actives(int index) const {
  // @@protoc_insertion_point(field_get:operations_research.sat.ReservoirConstraintProto.actives)
  return _internal_actives(index);
}
inline void ReservoirConstraintProto::set_actives(int index, ::PROTOBUF_NAMESPACE_ID::int32 value) {
  actives_.Set(index, value);
  // @@protoc_insertion_point(field_set:operations_research.sat.ReservoirConstraintProto.actives)
}
inline void ReservoirConstraintProto::_internal_add_actives(::PROTOBUF_NAMESPACE_ID::int32 value) {
  actives_.Add(value);
}
inline void ReservoirConstraintProto::add_actives(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _internal_add_actives(value);
  // @@protoc_insertion_point(field_add:operations_research.sat.ReservoirConstraintProto.actives)
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
ReservoirConstraintProto::_internal_actives() const {
  return actives_;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
ReservoirConstraintProto::actives() const {
  // @@protoc_insertion_point(field_list:operations_research.sat.ReservoirConstraintProto.actives)
  return _internal_actives();
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
ReservoirConstraintProto::_internal_mutable_actives() {
  return &actives_;
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
ReservoirConstraintProto::mutable_actives() {
  // @@protoc_insertion_point(field_mutable_list:operations_research.sat.ReservoirConstraintProto.actives)
  return _internal_mutable_actives();
}

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

// CircuitConstraintProto

// repeated int32 tails = 3;
inline int CircuitConstraintProto::_internal_tails_size() const {
  return tails_.size();
}
inline int CircuitConstraintProto::tails_size() const {
  return _internal_tails_size();
}
inline void CircuitConstraintProto::clear_tails() {
  tails_.Clear();
}
inline ::PROTOBUF_NAMESPACE_ID::int32 CircuitConstraintProto::_internal_tails(int index) const {
  return tails_.Get(index);
}
inline ::PROTOBUF_NAMESPACE_ID::int32 CircuitConstraintProto::tails(int index) const {
  // @@protoc_insertion_point(field_get:operations_research.sat.CircuitConstraintProto.tails)
  return _internal_tails(index);
}
inline void CircuitConstraintProto::set_tails(int index, ::PROTOBUF_NAMESPACE_ID::int32 value) {
  tails_.Set(index, value);
  // @@protoc_insertion_point(field_set:operations_research.sat.CircuitConstraintProto.tails)
}
inline void CircuitConstraintProto::_internal_add_tails(::PROTOBUF_NAMESPACE_ID::int32 value) {
  tails_.Add(value);
}
inline void CircuitConstraintProto::add_tails(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _internal_add_tails(value);
  // @@protoc_insertion_point(field_add:operations_research.sat.CircuitConstraintProto.tails)
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
CircuitConstraintProto::_internal_tails() const {
  return tails_;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
CircuitConstraintProto::tails() const {
  // @@protoc_insertion_point(field_list:operations_research.sat.CircuitConstraintProto.tails)
  return _internal_tails();
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
CircuitConstraintProto::_internal_mutable_tails() {
  return &tails_;
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
CircuitConstraintProto::mutable_tails() {
  // @@protoc_insertion_point(field_mutable_list:operations_research.sat.CircuitConstraintProto.tails)
  return _internal_mutable_tails();
}

// repeated int32 heads = 4;
inline int CircuitConstraintProto::_internal_heads_size() const {
  return heads_.size();
}
inline int CircuitConstraintProto::heads_size() const {
  return _internal_heads_size();
}
inline void CircuitConstraintProto::clear_heads() {
  heads_.Clear();
}
inline ::PROTOBUF_NAMESPACE_ID::int32 CircuitConstraintProto::_internal_heads(int index) const {
  return heads_.Get(index);
}
inline ::PROTOBUF_NAMESPACE_ID::int32 CircuitConstraintProto::heads(int index) const {
  // @@protoc_insertion_point(field_get:operations_research.sat.CircuitConstraintProto.heads)
  return _internal_heads(index);
}
inline void CircuitConstraintProto::set_heads(int index, ::PROTOBUF_NAMESPACE_ID::int32 value) {
  heads_.Set(index, value);
  // @@protoc_insertion_point(field_set:operations_research.sat.CircuitConstraintProto.heads)
}
inline void CircuitConstraintProto::_internal_add_heads(::PROTOBUF_NAMESPACE_ID::int32 value) {
  heads_.Add(value);
}
inline void CircuitConstraintProto::add_heads(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _internal_add_heads(value);
  // @@protoc_insertion_point(field_add:operations_research.sat.CircuitConstraintProto.heads)
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
CircuitConstraintProto::_internal_heads() const {
  return heads_;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
CircuitConstraintProto::heads() const {
  // @@protoc_insertion_point(field_list:operations_research.sat.CircuitConstraintProto.heads)
  return _internal_heads();
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
CircuitConstraintProto::_internal_mutable_heads() {
  return &heads_;
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
CircuitConstraintProto::mutable_heads() {
  // @@protoc_insertion_point(field_mutable_list:operations_research.sat.CircuitConstraintProto.heads)
  return _internal_mutable_heads();
}

// repeated int32 literals = 5;
inline int CircuitConstraintProto::_internal_literals_size() const {
  return literals_.size();
}
inline int CircuitConstraintProto::literals_size() const {
  return _internal_literals_size();
}
inline void CircuitConstraintProto::clear_literals() {
  literals_.Clear();
}
inline ::PROTOBUF_NAMESPACE_ID::int32 CircuitConstraintProto::_internal_literals(int index) const {
  return literals_.Get(index);
}
inline ::PROTOBUF_NAMESPACE_ID::int32 CircuitConstraintProto::literals(int index) const {
  // @@protoc_insertion_point(field_get:operations_research.sat.CircuitConstraintProto.literals)
  return _internal_literals(index);
}
inline void CircuitConstraintProto::set_literals(int index, ::PROTOBUF_NAMESPACE_ID::int32 value) {
  literals_.Set(index, value);
  // @@protoc_insertion_point(field_set:operations_research.sat.CircuitConstraintProto.literals)
}
inline void CircuitConstraintProto::_internal_add_literals(::PROTOBUF_NAMESPACE_ID::int32 value) {
  literals_.Add(value);
}
inline void CircuitConstraintProto::add_literals(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _internal_add_literals(value);
  // @@protoc_insertion_point(field_add:operations_research.sat.CircuitConstraintProto.literals)
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
CircuitConstraintProto::_internal_literals() const {
  return literals_;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
CircuitConstraintProto::literals() const {
  // @@protoc_insertion_point(field_list:operations_research.sat.CircuitConstraintProto.literals)
  return _internal_literals();
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
CircuitConstraintProto::_internal_mutable_literals() {
  return &literals_;
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
CircuitConstraintProto::mutable_literals() {
  // @@protoc_insertion_point(field_mutable_list:operations_research.sat.CircuitConstraintProto.literals)
  return _internal_mutable_literals();
}

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

// RoutesConstraintProto

// repeated int32 tails = 1;
inline int RoutesConstraintProto::_internal_tails_size() const {
  return tails_.size();
}
inline int RoutesConstraintProto::tails_size() const {
  return _internal_tails_size();
}
inline void RoutesConstraintProto::clear_tails() {
  tails_.Clear();
}
inline ::PROTOBUF_NAMESPACE_ID::int32 RoutesConstraintProto::_internal_tails(int index) const {
  return tails_.Get(index);
}
inline ::PROTOBUF_NAMESPACE_ID::int32 RoutesConstraintProto::tails(int index) const {
  // @@protoc_insertion_point(field_get:operations_research.sat.RoutesConstraintProto.tails)
  return _internal_tails(index);
}
inline void RoutesConstraintProto::set_tails(int index, ::PROTOBUF_NAMESPACE_ID::int32 value) {
  tails_.Set(index, value);
  // @@protoc_insertion_point(field_set:operations_research.sat.RoutesConstraintProto.tails)
}
inline void RoutesConstraintProto::_internal_add_tails(::PROTOBUF_NAMESPACE_ID::int32 value) {
  tails_.Add(value);
}
inline void RoutesConstraintProto::add_tails(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _internal_add_tails(value);
  // @@protoc_insertion_point(field_add:operations_research.sat.RoutesConstraintProto.tails)
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
RoutesConstraintProto::_internal_tails() const {
  return tails_;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
RoutesConstraintProto::tails() const {
  // @@protoc_insertion_point(field_list:operations_research.sat.RoutesConstraintProto.tails)
  return _internal_tails();
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
RoutesConstraintProto::_internal_mutable_tails() {
  return &tails_;
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
RoutesConstraintProto::mutable_tails() {
  // @@protoc_insertion_point(field_mutable_list:operations_research.sat.RoutesConstraintProto.tails)
  return _internal_mutable_tails();
}

// repeated int32 heads = 2;
inline int RoutesConstraintProto::_internal_heads_size() const {
  return heads_.size();
}
inline int RoutesConstraintProto::heads_size() const {
  return _internal_heads_size();
}
inline void RoutesConstraintProto::clear_heads() {
  heads_.Clear();
}
inline ::PROTOBUF_NAMESPACE_ID::int32 RoutesConstraintProto::_internal_heads(int index) const {
  return heads_.Get(index);
}
inline ::PROTOBUF_NAMESPACE_ID::int32 RoutesConstraintProto::heads(int index) const {
  // @@protoc_insertion_point(field_get:operations_research.sat.RoutesConstraintProto.heads)
  return _internal_heads(index);
}
inline void RoutesConstraintProto::set_heads(int index, ::PROTOBUF_NAMESPACE_ID::int32 value) {
  heads_.Set(index, value);
  // @@protoc_insertion_point(field_set:operations_research.sat.RoutesConstraintProto.heads)
}
inline void RoutesConstraintProto::_internal_add_heads(::PROTOBUF_NAMESPACE_ID::int32 value) {
  heads_.Add(value);
}
inline void RoutesConstraintProto::add_heads(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _internal_add_heads(value);
  // @@protoc_insertion_point(field_add:operations_research.sat.RoutesConstraintProto.heads)
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
RoutesConstraintProto::_internal_heads() const {
  return heads_;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
RoutesConstraintProto::heads() const {
  // @@protoc_insertion_point(field_list:operations_research.sat.RoutesConstraintProto.heads)
  return _internal_heads();
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
RoutesConstraintProto::_internal_mutable_heads() {
  return &heads_;
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
RoutesConstraintProto::mutable_heads() {
  // @@protoc_insertion_point(field_mutable_list:operations_research.sat.RoutesConstraintProto.heads)
  return _internal_mutable_heads();
}

// repeated int32 literals = 3;
inline int RoutesConstraintProto::_internal_literals_size() const {
  return literals_.size();
}
inline int RoutesConstraintProto::literals_size() const {
  return _internal_literals_size();
}
inline void RoutesConstraintProto::clear_literals() {
  literals_.Clear();
}
inline ::PROTOBUF_NAMESPACE_ID::int32 RoutesConstraintProto::_internal_literals(int index) const {
  return literals_.Get(index);
}
inline ::PROTOBUF_NAMESPACE_ID::int32 RoutesConstraintProto::literals(int index) const {
  // @@protoc_insertion_point(field_get:operations_research.sat.RoutesConstraintProto.literals)
  return _internal_literals(index);
}
inline void RoutesConstraintProto::set_literals(int index, ::PROTOBUF_NAMESPACE_ID::int32 value) {
  literals_.Set(index, value);
  // @@protoc_insertion_point(field_set:operations_research.sat.RoutesConstraintProto.literals)
}
inline void RoutesConstraintProto::_internal_add_literals(::PROTOBUF_NAMESPACE_ID::int32 value) {
  literals_.Add(value);
}
inline void RoutesConstraintProto::add_literals(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _internal_add_literals(value);
  // @@protoc_insertion_point(field_add:operations_research.sat.RoutesConstraintProto.literals)
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
RoutesConstraintProto::_internal_literals() const {
  return literals_;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
RoutesConstraintProto::literals() const {
  // @@protoc_insertion_point(field_list:operations_research.sat.RoutesConstraintProto.literals)
  return _internal_literals();
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
RoutesConstraintProto::_internal_mutable_literals() {
  return &literals_;
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
RoutesConstraintProto::mutable_literals() {
  // @@protoc_insertion_point(field_mutable_list:operations_research.sat.RoutesConstraintProto.literals)
  return _internal_mutable_literals();
}

// repeated int32 demands = 4;
inline int RoutesConstraintProto::_internal_demands_size() const {
  return demands_.size();
}
inline int RoutesConstraintProto::demands_size() const {
  return _internal_demands_size();
}
inline void RoutesConstraintProto::clear_demands() {
  demands_.Clear();
}
inline ::PROTOBUF_NAMESPACE_ID::int32 RoutesConstraintProto::_internal_demands(int index) const {
  return demands_.Get(index);
}
inline ::PROTOBUF_NAMESPACE_ID::int32 RoutesConstraintProto::demands(int index) const {
  // @@protoc_insertion_point(field_get:operations_research.sat.RoutesConstraintProto.demands)
  return _internal_demands(index);
}
inline void RoutesConstraintProto::set_demands(int index, ::PROTOBUF_NAMESPACE_ID::int32 value) {
  demands_.Set(index, value);
  // @@protoc_insertion_point(field_set:operations_research.sat.RoutesConstraintProto.demands)
}
inline void RoutesConstraintProto::_internal_add_demands(::PROTOBUF_NAMESPACE_ID::int32 value) {
  demands_.Add(value);
}
inline void RoutesConstraintProto::add_demands(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _internal_add_demands(value);
  // @@protoc_insertion_point(field_add:operations_research.sat.RoutesConstraintProto.demands)
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
RoutesConstraintProto::_internal_demands() const {
  return demands_;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
RoutesConstraintProto::demands() const {
  // @@protoc_insertion_point(field_list:operations_research.sat.RoutesConstraintProto.demands)
  return _internal_demands();
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
RoutesConstraintProto::_internal_mutable_demands() {
  return &demands_;
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
RoutesConstraintProto::mutable_demands() {
  // @@protoc_insertion_point(field_mutable_list:operations_research.sat.RoutesConstraintProto.demands)
  return _internal_mutable_demands();
}

// int64 capacity = 5;
inline void RoutesConstraintProto::clear_capacity() {
  capacity_ = PROTOBUF_LONGLONG(0);
}
inline ::PROTOBUF_NAMESPACE_ID::int64 RoutesConstraintProto::_internal_capacity() const {
  return capacity_;
}
inline ::PROTOBUF_NAMESPACE_ID::int64 RoutesConstraintProto::capacity() const {
  // @@protoc_insertion_point(field_get:operations_research.sat.RoutesConstraintProto.capacity)
  return _internal_capacity();
}
inline void RoutesConstraintProto::_internal_set_capacity(::PROTOBUF_NAMESPACE_ID::int64 value) {
  
  capacity_ = value;
}
inline void RoutesConstraintProto::set_capacity(::PROTOBUF_NAMESPACE_ID::int64 value) {
  _internal_set_capacity(value);
  // @@protoc_insertion_point(field_set:operations_research.sat.RoutesConstraintProto.capacity)
}

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

// CircuitCoveringConstraintProto

// repeated int32 nexts = 1;
inline int CircuitCoveringConstraintProto::_internal_nexts_size() const {
  return nexts_.size();
}
inline int CircuitCoveringConstraintProto::nexts_size() const {
  return _internal_nexts_size();
}
inline void CircuitCoveringConstraintProto::clear_nexts() {
  nexts_.Clear();
}
inline ::PROTOBUF_NAMESPACE_ID::int32 CircuitCoveringConstraintProto::_internal_nexts(int index) const {
  return nexts_.Get(index);
}
inline ::PROTOBUF_NAMESPACE_ID::int32 CircuitCoveringConstraintProto::nexts(int index) const {
  // @@protoc_insertion_point(field_get:operations_research.sat.CircuitCoveringConstraintProto.nexts)
  return _internal_nexts(index);
}
inline void CircuitCoveringConstraintProto::set_nexts(int index, ::PROTOBUF_NAMESPACE_ID::int32 value) {
  nexts_.Set(index, value);
  // @@protoc_insertion_point(field_set:operations_research.sat.CircuitCoveringConstraintProto.nexts)
}
inline void CircuitCoveringConstraintProto::_internal_add_nexts(::PROTOBUF_NAMESPACE_ID::int32 value) {
  nexts_.Add(value);
}
inline void CircuitCoveringConstraintProto::add_nexts(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _internal_add_nexts(value);
  // @@protoc_insertion_point(field_add:operations_research.sat.CircuitCoveringConstraintProto.nexts)
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
CircuitCoveringConstraintProto::_internal_nexts() const {
  return nexts_;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
CircuitCoveringConstraintProto::nexts() const {
  // @@protoc_insertion_point(field_list:operations_research.sat.CircuitCoveringConstraintProto.nexts)
  return _internal_nexts();
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
CircuitCoveringConstraintProto::_internal_mutable_nexts() {
  return &nexts_;
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
CircuitCoveringConstraintProto::mutable_nexts() {
  // @@protoc_insertion_point(field_mutable_list:operations_research.sat.CircuitCoveringConstraintProto.nexts)
  return _internal_mutable_nexts();
}

// repeated int64 distinguished_nodes = 2;
inline int CircuitCoveringConstraintProto::_internal_distinguished_nodes_size() const {
  return distinguished_nodes_.size();
}
inline int CircuitCoveringConstraintProto::distinguished_nodes_size() const {
  return _internal_distinguished_nodes_size();
}
inline void CircuitCoveringConstraintProto::clear_distinguished_nodes() {
  distinguished_nodes_.Clear();
}
inline ::PROTOBUF_NAMESPACE_ID::int64 CircuitCoveringConstraintProto::_internal_distinguished_nodes(int index) const {
  return distinguished_nodes_.Get(index);
}
inline ::PROTOBUF_NAMESPACE_ID::int64 CircuitCoveringConstraintProto::distinguished_nodes(int index) const {
  // @@protoc_insertion_point(field_get:operations_research.sat.CircuitCoveringConstraintProto.distinguished_nodes)
  return _internal_distinguished_nodes(index);
}
inline void CircuitCoveringConstraintProto::set_distinguished_nodes(int index, ::PROTOBUF_NAMESPACE_ID::int64 value) {
  distinguished_nodes_.Set(index, value);
  // @@protoc_insertion_point(field_set:operations_research.sat.CircuitCoveringConstraintProto.distinguished_nodes)
}
inline void CircuitCoveringConstraintProto::_internal_add_distinguished_nodes(::PROTOBUF_NAMESPACE_ID::int64 value) {
  distinguished_nodes_.Add(value);
}
inline void CircuitCoveringConstraintProto::add_distinguished_nodes(::PROTOBUF_NAMESPACE_ID::int64 value) {
  _internal_add_distinguished_nodes(value);
  // @@protoc_insertion_point(field_add:operations_research.sat.CircuitCoveringConstraintProto.distinguished_nodes)
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >&
CircuitCoveringConstraintProto::_internal_distinguished_nodes() const {
  return distinguished_nodes_;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >&
CircuitCoveringConstraintProto::distinguished_nodes() const {
  // @@protoc_insertion_point(field_list:operations_research.sat.CircuitCoveringConstraintProto.distinguished_nodes)
  return _internal_distinguished_nodes();
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >*
CircuitCoveringConstraintProto::_internal_mutable_distinguished_nodes() {
  return &distinguished_nodes_;
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >*
CircuitCoveringConstraintProto::mutable_distinguished_nodes() {
  // @@protoc_insertion_point(field_mutable_list:operations_research.sat.CircuitCoveringConstraintProto.distinguished_nodes)
  return _internal_mutable_distinguished_nodes();
}

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

// TableConstraintProto

// repeated int32 vars = 1;
inline int TableConstraintProto::_internal_vars_size() const {
  return vars_.size();
}
inline int TableConstraintProto::vars_size() const {
  return _internal_vars_size();
}
inline void TableConstraintProto::clear_vars() {
  vars_.Clear();
}
inline ::PROTOBUF_NAMESPACE_ID::int32 TableConstraintProto::_internal_vars(int index) const {
  return vars_.Get(index);
}
inline ::PROTOBUF_NAMESPACE_ID::int32 TableConstraintProto::vars(int index) const {
  // @@protoc_insertion_point(field_get:operations_research.sat.TableConstraintProto.vars)
  return _internal_vars(index);
}
inline void TableConstraintProto::set_vars(int index, ::PROTOBUF_NAMESPACE_ID::int32 value) {
  vars_.Set(index, value);
  // @@protoc_insertion_point(field_set:operations_research.sat.TableConstraintProto.vars)
}
inline void TableConstraintProto::_internal_add_vars(::PROTOBUF_NAMESPACE_ID::int32 value) {
  vars_.Add(value);
}
inline void TableConstraintProto::add_vars(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _internal_add_vars(value);
  // @@protoc_insertion_point(field_add:operations_research.sat.TableConstraintProto.vars)
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
TableConstraintProto::_internal_vars() const {
  return vars_;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
TableConstraintProto::vars() const {
  // @@protoc_insertion_point(field_list:operations_research.sat.TableConstraintProto.vars)
  return _internal_vars();
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
TableConstraintProto::_internal_mutable_vars() {
  return &vars_;
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
TableConstraintProto::mutable_vars() {
  // @@protoc_insertion_point(field_mutable_list:operations_research.sat.TableConstraintProto.vars)
  return _internal_mutable_vars();
}

// repeated int64 values = 2;
inline int TableConstraintProto::_internal_values_size() const {
  return values_.size();
}
inline int TableConstraintProto::values_size() const {
  return _internal_values_size();
}
inline void TableConstraintProto::clear_values() {
  values_.Clear();
}
inline ::PROTOBUF_NAMESPACE_ID::int64 TableConstraintProto::_internal_values(int index) const {
  return values_.Get(index);
}
inline ::PROTOBUF_NAMESPACE_ID::int64 TableConstraintProto::values(int index) const {
  // @@protoc_insertion_point(field_get:operations_research.sat.TableConstraintProto.values)
  return _internal_values(index);
}
inline void TableConstraintProto::set_values(int index, ::PROTOBUF_NAMESPACE_ID::int64 value) {
  values_.Set(index, value);
  // @@protoc_insertion_point(field_set:operations_research.sat.TableConstraintProto.values)
}
inline void TableConstraintProto::_internal_add_values(::PROTOBUF_NAMESPACE_ID::int64 value) {
  values_.Add(value);
}
inline void TableConstraintProto::add_values(::PROTOBUF_NAMESPACE_ID::int64 value) {
  _internal_add_values(value);
  // @@protoc_insertion_point(field_add:operations_research.sat.TableConstraintProto.values)
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >&
TableConstraintProto::_internal_values() const {
  return values_;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >&
TableConstraintProto::values() const {
  // @@protoc_insertion_point(field_list:operations_research.sat.TableConstraintProto.values)
  return _internal_values();
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >*
TableConstraintProto::_internal_mutable_values() {
  return &values_;
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >*
TableConstraintProto::mutable_values() {
  // @@protoc_insertion_point(field_mutable_list:operations_research.sat.TableConstraintProto.values)
  return _internal_mutable_values();
}

// bool negated = 3;
inline void TableConstraintProto::clear_negated() {
  negated_ = false;
}
inline bool TableConstraintProto::_internal_negated() const {
  return negated_;
}
inline bool TableConstraintProto::negated() const {
  // @@protoc_insertion_point(field_get:operations_research.sat.TableConstraintProto.negated)
  return _internal_negated();
}
inline void TableConstraintProto::_internal_set_negated(bool value) {
  
  negated_ = value;
}
inline void TableConstraintProto::set_negated(bool value) {
  _internal_set_negated(value);
  // @@protoc_insertion_point(field_set:operations_research.sat.TableConstraintProto.negated)
}

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

// InverseConstraintProto

// repeated int32 f_direct = 1;
inline int InverseConstraintProto::_internal_f_direct_size() const {
  return f_direct_.size();
}
inline int InverseConstraintProto::f_direct_size() const {
  return _internal_f_direct_size();
}
inline void InverseConstraintProto::clear_f_direct() {
  f_direct_.Clear();
}
inline ::PROTOBUF_NAMESPACE_ID::int32 InverseConstraintProto::_internal_f_direct(int index) const {
  return f_direct_.Get(index);
}
inline ::PROTOBUF_NAMESPACE_ID::int32 InverseConstraintProto::f_direct(int index) const {
  // @@protoc_insertion_point(field_get:operations_research.sat.InverseConstraintProto.f_direct)
  return _internal_f_direct(index);
}
inline void InverseConstraintProto::set_f_direct(int index, ::PROTOBUF_NAMESPACE_ID::int32 value) {
  f_direct_.Set(index, value);
  // @@protoc_insertion_point(field_set:operations_research.sat.InverseConstraintProto.f_direct)
}
inline void InverseConstraintProto::_internal_add_f_direct(::PROTOBUF_NAMESPACE_ID::int32 value) {
  f_direct_.Add(value);
}
inline void InverseConstraintProto::add_f_direct(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _internal_add_f_direct(value);
  // @@protoc_insertion_point(field_add:operations_research.sat.InverseConstraintProto.f_direct)
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
InverseConstraintProto::_internal_f_direct() const {
  return f_direct_;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
InverseConstraintProto::f_direct() const {
  // @@protoc_insertion_point(field_list:operations_research.sat.InverseConstraintProto.f_direct)
  return _internal_f_direct();
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
InverseConstraintProto::_internal_mutable_f_direct() {
  return &f_direct_;
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
InverseConstraintProto::mutable_f_direct() {
  // @@protoc_insertion_point(field_mutable_list:operations_research.sat.InverseConstraintProto.f_direct)
  return _internal_mutable_f_direct();
}

// repeated int32 f_inverse = 2;
inline int InverseConstraintProto::_internal_f_inverse_size() const {
  return f_inverse_.size();
}
inline int InverseConstraintProto::f_inverse_size() const {
  return _internal_f_inverse_size();
}
inline void InverseConstraintProto::clear_f_inverse() {
  f_inverse_.Clear();
}
inline ::PROTOBUF_NAMESPACE_ID::int32 InverseConstraintProto::_internal_f_inverse(int index) const {
  return f_inverse_.Get(index);
}
inline ::PROTOBUF_NAMESPACE_ID::int32 InverseConstraintProto::f_inverse(int index) const {
  // @@protoc_insertion_point(field_get:operations_research.sat.InverseConstraintProto.f_inverse)
  return _internal_f_inverse(index);
}
inline void InverseConstraintProto::set_f_inverse(int index, ::PROTOBUF_NAMESPACE_ID::int32 value) {
  f_inverse_.Set(index, value);
  // @@protoc_insertion_point(field_set:operations_research.sat.InverseConstraintProto.f_inverse)
}
inline void InverseConstraintProto::_internal_add_f_inverse(::PROTOBUF_NAMESPACE_ID::int32 value) {
  f_inverse_.Add(value);
}
inline void InverseConstraintProto::add_f_inverse(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _internal_add_f_inverse(value);
  // @@protoc_insertion_point(field_add:operations_research.sat.InverseConstraintProto.f_inverse)
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
InverseConstraintProto::_internal_f_inverse() const {
  return f_inverse_;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
InverseConstraintProto::f_inverse() const {
  // @@protoc_insertion_point(field_list:operations_research.sat.InverseConstraintProto.f_inverse)
  return _internal_f_inverse();
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
InverseConstraintProto::_internal_mutable_f_inverse() {
  return &f_inverse_;
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
InverseConstraintProto::mutable_f_inverse() {
  // @@protoc_insertion_point(field_mutable_list:operations_research.sat.InverseConstraintProto.f_inverse)
  return _internal_mutable_f_inverse();
}

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

// AutomatonConstraintProto

// int64 starting_state = 2;
inline void AutomatonConstraintProto::clear_starting_state() {
  starting_state_ = PROTOBUF_LONGLONG(0);
}
inline ::PROTOBUF_NAMESPACE_ID::int64 AutomatonConstraintProto::_internal_starting_state() const {
  return starting_state_;
}
inline ::PROTOBUF_NAMESPACE_ID::int64 AutomatonConstraintProto::starting_state() const {
  // @@protoc_insertion_point(field_get:operations_research.sat.AutomatonConstraintProto.starting_state)
  return _internal_starting_state();
}
inline void AutomatonConstraintProto::_internal_set_starting_state(::PROTOBUF_NAMESPACE_ID::int64 value) {
  
  starting_state_ = value;
}
inline void AutomatonConstraintProto::set_starting_state(::PROTOBUF_NAMESPACE_ID::int64 value) {
  _internal_set_starting_state(value);
  // @@protoc_insertion_point(field_set:operations_research.sat.AutomatonConstraintProto.starting_state)
}

// repeated int64 final_states = 3;
inline int AutomatonConstraintProto::_internal_final_states_size() const {
  return final_states_.size();
}
inline int AutomatonConstraintProto::final_states_size() const {
  return _internal_final_states_size();
}
inline void AutomatonConstraintProto::clear_final_states() {
  final_states_.Clear();
}
inline ::PROTOBUF_NAMESPACE_ID::int64 AutomatonConstraintProto::_internal_final_states(int index) const {
  return final_states_.Get(index);
}
inline ::PROTOBUF_NAMESPACE_ID::int64 AutomatonConstraintProto::final_states(int index) const {
  // @@protoc_insertion_point(field_get:operations_research.sat.AutomatonConstraintProto.final_states)
  return _internal_final_states(index);
}
inline void AutomatonConstraintProto::set_final_states(int index, ::PROTOBUF_NAMESPACE_ID::int64 value) {
  final_states_.Set(index, value);
  // @@protoc_insertion_point(field_set:operations_research.sat.AutomatonConstraintProto.final_states)
}
inline void AutomatonConstraintProto::_internal_add_final_states(::PROTOBUF_NAMESPACE_ID::int64 value) {
  final_states_.Add(value);
}
inline void AutomatonConstraintProto::add_final_states(::PROTOBUF_NAMESPACE_ID::int64 value) {
  _internal_add_final_states(value);
  // @@protoc_insertion_point(field_add:operations_research.sat.AutomatonConstraintProto.final_states)
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >&
AutomatonConstraintProto::_internal_final_states() const {
  return final_states_;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >&
AutomatonConstraintProto::final_states() const {
  // @@protoc_insertion_point(field_list:operations_research.sat.AutomatonConstraintProto.final_states)
  return _internal_final_states();
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >*
AutomatonConstraintProto::_internal_mutable_final_states() {
  return &final_states_;
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >*
AutomatonConstraintProto::mutable_final_states() {
  // @@protoc_insertion_point(field_mutable_list:operations_research.sat.AutomatonConstraintProto.final_states)
  return _internal_mutable_final_states();
}

// repeated int64 transition_tail = 4;
inline int AutomatonConstraintProto::_internal_transition_tail_size() const {
  return transition_tail_.size();
}
inline int AutomatonConstraintProto::transition_tail_size() const {
  return _internal_transition_tail_size();
}
inline void AutomatonConstraintProto::clear_transition_tail() {
  transition_tail_.Clear();
}
inline ::PROTOBUF_NAMESPACE_ID::int64 AutomatonConstraintProto::_internal_transition_tail(int index) const {
  return transition_tail_.Get(index);
}
inline ::PROTOBUF_NAMESPACE_ID::int64 AutomatonConstraintProto::transition_tail(int index) const {
  // @@protoc_insertion_point(field_get:operations_research.sat.AutomatonConstraintProto.transition_tail)
  return _internal_transition_tail(index);
}
inline void AutomatonConstraintProto::set_transition_tail(int index, ::PROTOBUF_NAMESPACE_ID::int64 value) {
  transition_tail_.Set(index, value);
  // @@protoc_insertion_point(field_set:operations_research.sat.AutomatonConstraintProto.transition_tail)
}
inline void AutomatonConstraintProto::_internal_add_transition_tail(::PROTOBUF_NAMESPACE_ID::int64 value) {
  transition_tail_.Add(value);
}
inline void AutomatonConstraintProto::add_transition_tail(::PROTOBUF_NAMESPACE_ID::int64 value) {
  _internal_add_transition_tail(value);
  // @@protoc_insertion_point(field_add:operations_research.sat.AutomatonConstraintProto.transition_tail)
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >&
AutomatonConstraintProto::_internal_transition_tail() const {
  return transition_tail_;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >&
AutomatonConstraintProto::transition_tail() const {
  // @@protoc_insertion_point(field_list:operations_research.sat.AutomatonConstraintProto.transition_tail)
  return _internal_transition_tail();
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >*
AutomatonConstraintProto::_internal_mutable_transition_tail() {
  return &transition_tail_;
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >*
AutomatonConstraintProto::mutable_transition_tail() {
  // @@protoc_insertion_point(field_mutable_list:operations_research.sat.AutomatonConstraintProto.transition_tail)
  return _internal_mutable_transition_tail();
}

// repeated int64 transition_head = 5;
inline int AutomatonConstraintProto::_internal_transition_head_size() const {
  return transition_head_.size();
}
inline int AutomatonConstraintProto::transition_head_size() const {
  return _internal_transition_head_size();
}
inline void AutomatonConstraintProto::clear_transition_head() {
  transition_head_.Clear();
}
inline ::PROTOBUF_NAMESPACE_ID::int64 AutomatonConstraintProto::_internal_transition_head(int index) const {
  return transition_head_.Get(index);
}
inline ::PROTOBUF_NAMESPACE_ID::int64 AutomatonConstraintProto::transition_head(int index) const {
  // @@protoc_insertion_point(field_get:operations_research.sat.AutomatonConstraintProto.transition_head)
  return _internal_transition_head(index);
}
inline void AutomatonConstraintProto::set_transition_head(int index, ::PROTOBUF_NAMESPACE_ID::int64 value) {
  transition_head_.Set(index, value);
  // @@protoc_insertion_point(field_set:operations_research.sat.AutomatonConstraintProto.transition_head)
}
inline void AutomatonConstraintProto::_internal_add_transition_head(::PROTOBUF_NAMESPACE_ID::int64 value) {
  transition_head_.Add(value);
}
inline void AutomatonConstraintProto::add_transition_head(::PROTOBUF_NAMESPACE_ID::int64 value) {
  _internal_add_transition_head(value);
  // @@protoc_insertion_point(field_add:operations_research.sat.AutomatonConstraintProto.transition_head)
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >&
AutomatonConstraintProto::_internal_transition_head() const {
  return transition_head_;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >&
AutomatonConstraintProto::transition_head() const {
  // @@protoc_insertion_point(field_list:operations_research.sat.AutomatonConstraintProto.transition_head)
  return _internal_transition_head();
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >*
AutomatonConstraintProto::_internal_mutable_transition_head() {
  return &transition_head_;
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >*
AutomatonConstraintProto::mutable_transition_head() {
  // @@protoc_insertion_point(field_mutable_list:operations_research.sat.AutomatonConstraintProto.transition_head)
  return _internal_mutable_transition_head();
}

// repeated int64 transition_label = 6;
inline int AutomatonConstraintProto::_internal_transition_label_size() const {
  return transition_label_.size();
}
inline int AutomatonConstraintProto::transition_label_size() const {
  return _internal_transition_label_size();
}
inline void AutomatonConstraintProto::clear_transition_label() {
  transition_label_.Clear();
}
inline ::PROTOBUF_NAMESPACE_ID::int64 AutomatonConstraintProto::_internal_transition_label(int index) const {
  return transition_label_.Get(index);
}
inline ::PROTOBUF_NAMESPACE_ID::int64 AutomatonConstraintProto::transition_label(int index) const {
  // @@protoc_insertion_point(field_get:operations_research.sat.AutomatonConstraintProto.transition_label)
  return _internal_transition_label(index);
}
inline void AutomatonConstraintProto::set_transition_label(int index, ::PROTOBUF_NAMESPACE_ID::int64 value) {
  transition_label_.Set(index, value);
  // @@protoc_insertion_point(field_set:operations_research.sat.AutomatonConstraintProto.transition_label)
}
inline void AutomatonConstraintProto::_internal_add_transition_label(::PROTOBUF_NAMESPACE_ID::int64 value) {
  transition_label_.Add(value);
}
inline void AutomatonConstraintProto::add_transition_label(::PROTOBUF_NAMESPACE_ID::int64 value) {
  _internal_add_transition_label(value);
  // @@protoc_insertion_point(field_add:operations_research.sat.AutomatonConstraintProto.transition_label)
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >&
AutomatonConstraintProto::_internal_transition_label() const {
  return transition_label_;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >&
AutomatonConstraintProto::transition_label() const {
  // @@protoc_insertion_point(field_list:operations_research.sat.AutomatonConstraintProto.transition_label)
  return _internal_transition_label();
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >*
AutomatonConstraintProto::_internal_mutable_transition_label() {
  return &transition_label_;
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >*
AutomatonConstraintProto::mutable_transition_label() {
  // @@protoc_insertion_point(field_mutable_list:operations_research.sat.AutomatonConstraintProto.transition_label)
  return _internal_mutable_transition_label();
}

// repeated int32 vars = 7;
inline int AutomatonConstraintProto::_internal_vars_size() const {
  return vars_.size();
}
inline int AutomatonConstraintProto::vars_size() const {
  return _internal_vars_size();
}
inline void AutomatonConstraintProto::clear_vars() {
  vars_.Clear();
}
inline ::PROTOBUF_NAMESPACE_ID::int32 AutomatonConstraintProto::_internal_vars(int index) const {
  return vars_.Get(index);
}
inline ::PROTOBUF_NAMESPACE_ID::int32 AutomatonConstraintProto::vars(int index) const {
  // @@protoc_insertion_point(field_get:operations_research.sat.AutomatonConstraintProto.vars)
  return _internal_vars(index);
}
inline void AutomatonConstraintProto::set_vars(int index, ::PROTOBUF_NAMESPACE_ID::int32 value) {
  vars_.Set(index, value);
  // @@protoc_insertion_point(field_set:operations_research.sat.AutomatonConstraintProto.vars)
}
inline void AutomatonConstraintProto::_internal_add_vars(::PROTOBUF_NAMESPACE_ID::int32 value) {
  vars_.Add(value);
}
inline void AutomatonConstraintProto::add_vars(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _internal_add_vars(value);
  // @@protoc_insertion_point(field_add:operations_research.sat.AutomatonConstraintProto.vars)
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
AutomatonConstraintProto::_internal_vars() const {
  return vars_;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
AutomatonConstraintProto::vars() const {
  // @@protoc_insertion_point(field_list:operations_research.sat.AutomatonConstraintProto.vars)
  return _internal_vars();
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
AutomatonConstraintProto::_internal_mutable_vars() {
  return &vars_;
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
AutomatonConstraintProto::mutable_vars() {
  // @@protoc_insertion_point(field_mutable_list:operations_research.sat.AutomatonConstraintProto.vars)
  return _internal_mutable_vars();
}

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

// ConstraintProto

// string name = 1;
inline void ConstraintProto::clear_name() {
  name_.ClearToEmpty(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena());
}
inline const std::string& ConstraintProto::name() const {
  // @@protoc_insertion_point(field_get:operations_research.sat.ConstraintProto.name)
  return _internal_name();
}
inline void ConstraintProto::set_name(const std::string& value) {
  _internal_set_name(value);
  // @@protoc_insertion_point(field_set:operations_research.sat.ConstraintProto.name)
}
inline std::string* ConstraintProto::mutable_name() {
  // @@protoc_insertion_point(field_mutable:operations_research.sat.ConstraintProto.name)
  return _internal_mutable_name();
}
inline const std::string& ConstraintProto::_internal_name() const {
  return name_.Get();
}
inline void ConstraintProto::_internal_set_name(const std::string& value) {
  
  name_.Set(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), value, GetArena());
}
inline void ConstraintProto::set_name(std::string&& value) {
  
  name_.Set(
    &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::move(value), GetArena());
  // @@protoc_insertion_point(field_set_rvalue:operations_research.sat.ConstraintProto.name)
}
inline void ConstraintProto::set_name(const char* value) {
  GOOGLE_DCHECK(value != nullptr);
  
  name_.Set(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::string(value),
              GetArena());
  // @@protoc_insertion_point(field_set_char:operations_research.sat.ConstraintProto.name)
}
inline void ConstraintProto::set_name(const char* value,
    size_t size) {
  
  name_.Set(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::string(
      reinterpret_cast<const char*>(value), size), GetArena());
  // @@protoc_insertion_point(field_set_pointer:operations_research.sat.ConstraintProto.name)
}
inline std::string* ConstraintProto::_internal_mutable_name() {
  
  return name_.Mutable(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena());
}
inline std::string* ConstraintProto::release_name() {
  // @@protoc_insertion_point(field_release:operations_research.sat.ConstraintProto.name)
  return name_.Release(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena());
}
inline void ConstraintProto::set_allocated_name(std::string* name) {
  if (name != nullptr) {
    
  } else {
    
  }
  name_.SetAllocated(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), name,
      GetArena());
  // @@protoc_insertion_point(field_set_allocated:operations_research.sat.ConstraintProto.name)
}
inline std::string* ConstraintProto::unsafe_arena_release_name() {
  // @@protoc_insertion_point(field_unsafe_arena_release:operations_research.sat.ConstraintProto.name)
  GOOGLE_DCHECK(GetArena() != nullptr);
  
  return name_.UnsafeArenaRelease(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(),
      GetArena());
}
inline void ConstraintProto::unsafe_arena_set_allocated_name(
    std::string* name) {
  GOOGLE_DCHECK(GetArena() != nullptr);
  if (name != nullptr) {
    
  } else {
    
  }
  name_.UnsafeArenaSetAllocated(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(),
      name, GetArena());
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:operations_research.sat.ConstraintProto.name)
}

// repeated int32 enforcement_literal = 2;
inline int ConstraintProto::_internal_enforcement_literal_size() const {
  return enforcement_literal_.size();
}
inline int ConstraintProto::enforcement_literal_size() const {
  return _internal_enforcement_literal_size();
}
inline void ConstraintProto::clear_enforcement_literal() {
  enforcement_literal_.Clear();
}
inline ::PROTOBUF_NAMESPACE_ID::int32 ConstraintProto::_internal_enforcement_literal(int index) const {
  return enforcement_literal_.Get(index);
}
inline ::PROTOBUF_NAMESPACE_ID::int32 ConstraintProto::enforcement_literal(int index) const {
  // @@protoc_insertion_point(field_get:operations_research.sat.ConstraintProto.enforcement_literal)
  return _internal_enforcement_literal(index);
}
inline void ConstraintProto::set_enforcement_literal(int index, ::PROTOBUF_NAMESPACE_ID::int32 value) {
  enforcement_literal_.Set(index, value);
  // @@protoc_insertion_point(field_set:operations_research.sat.ConstraintProto.enforcement_literal)
}
inline void ConstraintProto::_internal_add_enforcement_literal(::PROTOBUF_NAMESPACE_ID::int32 value) {
  enforcement_literal_.Add(value);
}
inline void ConstraintProto::add_enforcement_literal(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _internal_add_enforcement_literal(value);
  // @@protoc_insertion_point(field_add:operations_research.sat.ConstraintProto.enforcement_literal)
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
ConstraintProto::_internal_enforcement_literal() const {
  return enforcement_literal_;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
ConstraintProto::enforcement_literal() const {
  // @@protoc_insertion_point(field_list:operations_research.sat.ConstraintProto.enforcement_literal)
  return _internal_enforcement_literal();
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
ConstraintProto::_internal_mutable_enforcement_literal() {
  return &enforcement_literal_;
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
ConstraintProto::mutable_enforcement_literal() {
  // @@protoc_insertion_point(field_mutable_list:operations_research.sat.ConstraintProto.enforcement_literal)
  return _internal_mutable_enforcement_literal();
}

// .operations_research.sat.BoolArgumentProto bool_or = 3;
inline bool ConstraintProto::_internal_has_bool_or() const {
  return constraint_case() == kBoolOr;
}
inline bool ConstraintProto::has_bool_or() const {
  return _internal_has_bool_or();
}
inline void ConstraintProto::set_has_bool_or() {
  _oneof_case_[0] = kBoolOr;
}
inline void ConstraintProto::clear_bool_or() {
  if (_internal_has_bool_or()) {
    if (GetArena() == nullptr) {
      delete constraint_.bool_or_;
    }
    clear_has_constraint();
  }
}
inline ::operations_research::sat::BoolArgumentProto* ConstraintProto::release_bool_or() {
  // @@protoc_insertion_point(field_release:operations_research.sat.ConstraintProto.bool_or)
  if (_internal_has_bool_or()) {
    clear_has_constraint();
      ::operations_research::sat::BoolArgumentProto* temp = constraint_.bool_or_;
    if (GetArena() != nullptr) {
      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
    }
    constraint_.bool_or_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::operations_research::sat::BoolArgumentProto& ConstraintProto::_internal_bool_or() const {
  return _internal_has_bool_or()
      ? *constraint_.bool_or_
      : *reinterpret_cast< ::operations_research::sat::BoolArgumentProto*>(&::operations_research::sat::_BoolArgumentProto_default_instance_);
}
inline const ::operations_research::sat::BoolArgumentProto& ConstraintProto::bool_or() const {
  // @@protoc_insertion_point(field_get:operations_research.sat.ConstraintProto.bool_or)
  return _internal_bool_or();
}
inline ::operations_research::sat::BoolArgumentProto* ConstraintProto::unsafe_arena_release_bool_or() {
  // @@protoc_insertion_point(field_unsafe_arena_release:operations_research.sat.ConstraintProto.bool_or)
  if (_internal_has_bool_or()) {
    clear_has_constraint();
    ::operations_research::sat::BoolArgumentProto* temp = constraint_.bool_or_;
    constraint_.bool_or_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void ConstraintProto::unsafe_arena_set_allocated_bool_or(::operations_research::sat::BoolArgumentProto* bool_or) {
  clear_constraint();
  if (bool_or) {
    set_has_bool_or();
    constraint_.bool_or_ = bool_or;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:operations_research.sat.ConstraintProto.bool_or)
}
inline ::operations_research::sat::BoolArgumentProto* ConstraintProto::_internal_mutable_bool_or() {
  if (!_internal_has_bool_or()) {
    clear_constraint();
    set_has_bool_or();
    constraint_.bool_or_ = CreateMaybeMessage< ::operations_research::sat::BoolArgumentProto >(GetArena());
  }
  return constraint_.bool_or_;
}
inline ::operations_research::sat::BoolArgumentProto* ConstraintProto::mutable_bool_or() {
  // @@protoc_insertion_point(field_mutable:operations_research.sat.ConstraintProto.bool_or)
  return _internal_mutable_bool_or();
}

// .operations_research.sat.BoolArgumentProto bool_and = 4;
inline bool ConstraintProto::_internal_has_bool_and() const {
  return constraint_case() == kBoolAnd;
}
inline bool ConstraintProto::has_bool_and() const {
  return _internal_has_bool_and();
}
inline void ConstraintProto::set_has_bool_and() {
  _oneof_case_[0] = kBoolAnd;
}
inline void ConstraintProto::clear_bool_and() {
  if (_internal_has_bool_and()) {
    if (GetArena() == nullptr) {
      delete constraint_.bool_and_;
    }
    clear_has_constraint();
  }
}
inline ::operations_research::sat::BoolArgumentProto* ConstraintProto::release_bool_and() {
  // @@protoc_insertion_point(field_release:operations_research.sat.ConstraintProto.bool_and)
  if (_internal_has_bool_and()) {
    clear_has_constraint();
      ::operations_research::sat::BoolArgumentProto* temp = constraint_.bool_and_;
    if (GetArena() != nullptr) {
      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
    }
    constraint_.bool_and_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::operations_research::sat::BoolArgumentProto& ConstraintProto::_internal_bool_and() const {
  return _internal_has_bool_and()
      ? *constraint_.bool_and_
      : *reinterpret_cast< ::operations_research::sat::BoolArgumentProto*>(&::operations_research::sat::_BoolArgumentProto_default_instance_);
}
inline const ::operations_research::sat::BoolArgumentProto& ConstraintProto::bool_and() const {
  // @@protoc_insertion_point(field_get:operations_research.sat.ConstraintProto.bool_and)
  return _internal_bool_and();
}
inline ::operations_research::sat::BoolArgumentProto* ConstraintProto::unsafe_arena_release_bool_and() {
  // @@protoc_insertion_point(field_unsafe_arena_release:operations_research.sat.ConstraintProto.bool_and)
  if (_internal_has_bool_and()) {
    clear_has_constraint();
    ::operations_research::sat::BoolArgumentProto* temp = constraint_.bool_and_;
    constraint_.bool_and_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void ConstraintProto::unsafe_arena_set_allocated_bool_and(::operations_research::sat::BoolArgumentProto* bool_and) {
  clear_constraint();
  if (bool_and) {
    set_has_bool_and();
    constraint_.bool_and_ = bool_and;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:operations_research.sat.ConstraintProto.bool_and)
}
inline ::operations_research::sat::BoolArgumentProto* ConstraintProto::_internal_mutable_bool_and() {
  if (!_internal_has_bool_and()) {
    clear_constraint();
    set_has_bool_and();
    constraint_.bool_and_ = CreateMaybeMessage< ::operations_research::sat::BoolArgumentProto >(GetArena());
  }
  return constraint_.bool_and_;
}
inline ::operations_research::sat::BoolArgumentProto* ConstraintProto::mutable_bool_and() {
  // @@protoc_insertion_point(field_mutable:operations_research.sat.ConstraintProto.bool_and)
  return _internal_mutable_bool_and();
}

// .operations_research.sat.BoolArgumentProto at_most_one = 26;
inline bool ConstraintProto::_internal_has_at_most_one() const {
  return constraint_case() == kAtMostOne;
}
inline bool ConstraintProto::has_at_most_one() const {
  return _internal_has_at_most_one();
}
inline void ConstraintProto::set_has_at_most_one() {
  _oneof_case_[0] = kAtMostOne;
}
inline void ConstraintProto::clear_at_most_one() {
  if (_internal_has_at_most_one()) {
    if (GetArena() == nullptr) {
      delete constraint_.at_most_one_;
    }
    clear_has_constraint();
  }
}
inline ::operations_research::sat::BoolArgumentProto* ConstraintProto::release_at_most_one() {
  // @@protoc_insertion_point(field_release:operations_research.sat.ConstraintProto.at_most_one)
  if (_internal_has_at_most_one()) {
    clear_has_constraint();
      ::operations_research::sat::BoolArgumentProto* temp = constraint_.at_most_one_;
    if (GetArena() != nullptr) {
      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
    }
    constraint_.at_most_one_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::operations_research::sat::BoolArgumentProto& ConstraintProto::_internal_at_most_one() const {
  return _internal_has_at_most_one()
      ? *constraint_.at_most_one_
      : *reinterpret_cast< ::operations_research::sat::BoolArgumentProto*>(&::operations_research::sat::_BoolArgumentProto_default_instance_);
}
inline const ::operations_research::sat::BoolArgumentProto& ConstraintProto::at_most_one() const {
  // @@protoc_insertion_point(field_get:operations_research.sat.ConstraintProto.at_most_one)
  return _internal_at_most_one();
}
inline ::operations_research::sat::BoolArgumentProto* ConstraintProto::unsafe_arena_release_at_most_one() {
  // @@protoc_insertion_point(field_unsafe_arena_release:operations_research.sat.ConstraintProto.at_most_one)
  if (_internal_has_at_most_one()) {
    clear_has_constraint();
    ::operations_research::sat::BoolArgumentProto* temp = constraint_.at_most_one_;
    constraint_.at_most_one_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void ConstraintProto::unsafe_arena_set_allocated_at_most_one(::operations_research::sat::BoolArgumentProto* at_most_one) {
  clear_constraint();
  if (at_most_one) {
    set_has_at_most_one();
    constraint_.at_most_one_ = at_most_one;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:operations_research.sat.ConstraintProto.at_most_one)
}
inline ::operations_research::sat::BoolArgumentProto* ConstraintProto::_internal_mutable_at_most_one() {
  if (!_internal_has_at_most_one()) {
    clear_constraint();
    set_has_at_most_one();
    constraint_.at_most_one_ = CreateMaybeMessage< ::operations_research::sat::BoolArgumentProto >(GetArena());
  }
  return constraint_.at_most_one_;
}
inline ::operations_research::sat::BoolArgumentProto* ConstraintProto::mutable_at_most_one() {
  // @@protoc_insertion_point(field_mutable:operations_research.sat.ConstraintProto.at_most_one)
  return _internal_mutable_at_most_one();
}

// .operations_research.sat.BoolArgumentProto bool_xor = 5;
inline bool ConstraintProto::_internal_has_bool_xor() const {
  return constraint_case() == kBoolXor;
}
inline bool ConstraintProto::has_bool_xor() const {
  return _internal_has_bool_xor();
}
inline void ConstraintProto::set_has_bool_xor() {
  _oneof_case_[0] = kBoolXor;
}
inline void ConstraintProto::clear_bool_xor() {
  if (_internal_has_bool_xor()) {
    if (GetArena() == nullptr) {
      delete constraint_.bool_xor_;
    }
    clear_has_constraint();
  }
}
inline ::operations_research::sat::BoolArgumentProto* ConstraintProto::release_bool_xor() {
  // @@protoc_insertion_point(field_release:operations_research.sat.ConstraintProto.bool_xor)
  if (_internal_has_bool_xor()) {
    clear_has_constraint();
      ::operations_research::sat::BoolArgumentProto* temp = constraint_.bool_xor_;
    if (GetArena() != nullptr) {
      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
    }
    constraint_.bool_xor_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::operations_research::sat::BoolArgumentProto& ConstraintProto::_internal_bool_xor() const {
  return _internal_has_bool_xor()
      ? *constraint_.bool_xor_
      : *reinterpret_cast< ::operations_research::sat::BoolArgumentProto*>(&::operations_research::sat::_BoolArgumentProto_default_instance_);
}
inline const ::operations_research::sat::BoolArgumentProto& ConstraintProto::bool_xor() const {
  // @@protoc_insertion_point(field_get:operations_research.sat.ConstraintProto.bool_xor)
  return _internal_bool_xor();
}
inline ::operations_research::sat::BoolArgumentProto* ConstraintProto::unsafe_arena_release_bool_xor() {
  // @@protoc_insertion_point(field_unsafe_arena_release:operations_research.sat.ConstraintProto.bool_xor)
  if (_internal_has_bool_xor()) {
    clear_has_constraint();
    ::operations_research::sat::BoolArgumentProto* temp = constraint_.bool_xor_;
    constraint_.bool_xor_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void ConstraintProto::unsafe_arena_set_allocated_bool_xor(::operations_research::sat::BoolArgumentProto* bool_xor) {
  clear_constraint();
  if (bool_xor) {
    set_has_bool_xor();
    constraint_.bool_xor_ = bool_xor;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:operations_research.sat.ConstraintProto.bool_xor)
}
inline ::operations_research::sat::BoolArgumentProto* ConstraintProto::_internal_mutable_bool_xor() {
  if (!_internal_has_bool_xor()) {
    clear_constraint();
    set_has_bool_xor();
    constraint_.bool_xor_ = CreateMaybeMessage< ::operations_research::sat::BoolArgumentProto >(GetArena());
  }
  return constraint_.bool_xor_;
}
inline ::operations_research::sat::BoolArgumentProto* ConstraintProto::mutable_bool_xor() {
  // @@protoc_insertion_point(field_mutable:operations_research.sat.ConstraintProto.bool_xor)
  return _internal_mutable_bool_xor();
}

// .operations_research.sat.IntegerArgumentProto int_div = 7;
inline bool ConstraintProto::_internal_has_int_div() const {
  return constraint_case() == kIntDiv;
}
inline bool ConstraintProto::has_int_div() const {
  return _internal_has_int_div();
}
inline void ConstraintProto::set_has_int_div() {
  _oneof_case_[0] = kIntDiv;
}
inline void ConstraintProto::clear_int_div() {
  if (_internal_has_int_div()) {
    if (GetArena() == nullptr) {
      delete constraint_.int_div_;
    }
    clear_has_constraint();
  }
}
inline ::operations_research::sat::IntegerArgumentProto* ConstraintProto::release_int_div() {
  // @@protoc_insertion_point(field_release:operations_research.sat.ConstraintProto.int_div)
  if (_internal_has_int_div()) {
    clear_has_constraint();
      ::operations_research::sat::IntegerArgumentProto* temp = constraint_.int_div_;
    if (GetArena() != nullptr) {
      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
    }
    constraint_.int_div_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::operations_research::sat::IntegerArgumentProto& ConstraintProto::_internal_int_div() const {
  return _internal_has_int_div()
      ? *constraint_.int_div_
      : *reinterpret_cast< ::operations_research::sat::IntegerArgumentProto*>(&::operations_research::sat::_IntegerArgumentProto_default_instance_);
}
inline const ::operations_research::sat::IntegerArgumentProto& ConstraintProto::int_div() const {
  // @@protoc_insertion_point(field_get:operations_research.sat.ConstraintProto.int_div)
  return _internal_int_div();
}
inline ::operations_research::sat::IntegerArgumentProto* ConstraintProto::unsafe_arena_release_int_div() {
  // @@protoc_insertion_point(field_unsafe_arena_release:operations_research.sat.ConstraintProto.int_div)
  if (_internal_has_int_div()) {
    clear_has_constraint();
    ::operations_research::sat::IntegerArgumentProto* temp = constraint_.int_div_;
    constraint_.int_div_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void ConstraintProto::unsafe_arena_set_allocated_int_div(::operations_research::sat::IntegerArgumentProto* int_div) {
  clear_constraint();
  if (int_div) {
    set_has_int_div();
    constraint_.int_div_ = int_div;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:operations_research.sat.ConstraintProto.int_div)
}
inline ::operations_research::sat::IntegerArgumentProto* ConstraintProto::_internal_mutable_int_div() {
  if (!_internal_has_int_div()) {
    clear_constraint();
    set_has_int_div();
    constraint_.int_div_ = CreateMaybeMessage< ::operations_research::sat::IntegerArgumentProto >(GetArena());
  }
  return constraint_.int_div_;
}
inline ::operations_research::sat::IntegerArgumentProto* ConstraintProto::mutable_int_div() {
  // @@protoc_insertion_point(field_mutable:operations_research.sat.ConstraintProto.int_div)
  return _internal_mutable_int_div();
}

// .operations_research.sat.IntegerArgumentProto int_mod = 8;
inline bool ConstraintProto::_internal_has_int_mod() const {
  return constraint_case() == kIntMod;
}
inline bool ConstraintProto::has_int_mod() const {
  return _internal_has_int_mod();
}
inline void ConstraintProto::set_has_int_mod() {
  _oneof_case_[0] = kIntMod;
}
inline void ConstraintProto::clear_int_mod() {
  if (_internal_has_int_mod()) {
    if (GetArena() == nullptr) {
      delete constraint_.int_mod_;
    }
    clear_has_constraint();
  }
}
inline ::operations_research::sat::IntegerArgumentProto* ConstraintProto::release_int_mod() {
  // @@protoc_insertion_point(field_release:operations_research.sat.ConstraintProto.int_mod)
  if (_internal_has_int_mod()) {
    clear_has_constraint();
      ::operations_research::sat::IntegerArgumentProto* temp = constraint_.int_mod_;
    if (GetArena() != nullptr) {
      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
    }
    constraint_.int_mod_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::operations_research::sat::IntegerArgumentProto& ConstraintProto::_internal_int_mod() const {
  return _internal_has_int_mod()
      ? *constraint_.int_mod_
      : *reinterpret_cast< ::operations_research::sat::IntegerArgumentProto*>(&::operations_research::sat::_IntegerArgumentProto_default_instance_);
}
inline const ::operations_research::sat::IntegerArgumentProto& ConstraintProto::int_mod() const {
  // @@protoc_insertion_point(field_get:operations_research.sat.ConstraintProto.int_mod)
  return _internal_int_mod();
}
inline ::operations_research::sat::IntegerArgumentProto* ConstraintProto::unsafe_arena_release_int_mod() {
  // @@protoc_insertion_point(field_unsafe_arena_release:operations_research.sat.ConstraintProto.int_mod)
  if (_internal_has_int_mod()) {
    clear_has_constraint();
    ::operations_research::sat::IntegerArgumentProto* temp = constraint_.int_mod_;
    constraint_.int_mod_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void ConstraintProto::unsafe_arena_set_allocated_int_mod(::operations_research::sat::IntegerArgumentProto* int_mod) {
  clear_constraint();
  if (int_mod) {
    set_has_int_mod();
    constraint_.int_mod_ = int_mod;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:operations_research.sat.ConstraintProto.int_mod)
}
inline ::operations_research::sat::IntegerArgumentProto* ConstraintProto::_internal_mutable_int_mod() {
  if (!_internal_has_int_mod()) {
    clear_constraint();
    set_has_int_mod();
    constraint_.int_mod_ = CreateMaybeMessage< ::operations_research::sat::IntegerArgumentProto >(GetArena());
  }
  return constraint_.int_mod_;
}
inline ::operations_research::sat::IntegerArgumentProto* ConstraintProto::mutable_int_mod() {
  // @@protoc_insertion_point(field_mutable:operations_research.sat.ConstraintProto.int_mod)
  return _internal_mutable_int_mod();
}

// .operations_research.sat.IntegerArgumentProto int_max = 9;
inline bool ConstraintProto::_internal_has_int_max() const {
  return constraint_case() == kIntMax;
}
inline bool ConstraintProto::has_int_max() const {
  return _internal_has_int_max();
}
inline void ConstraintProto::set_has_int_max() {
  _oneof_case_[0] = kIntMax;
}
inline void ConstraintProto::clear_int_max() {
  if (_internal_has_int_max()) {
    if (GetArena() == nullptr) {
      delete constraint_.int_max_;
    }
    clear_has_constraint();
  }
}
inline ::operations_research::sat::IntegerArgumentProto* ConstraintProto::release_int_max() {
  // @@protoc_insertion_point(field_release:operations_research.sat.ConstraintProto.int_max)
  if (_internal_has_int_max()) {
    clear_has_constraint();
      ::operations_research::sat::IntegerArgumentProto* temp = constraint_.int_max_;
    if (GetArena() != nullptr) {
      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
    }
    constraint_.int_max_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::operations_research::sat::IntegerArgumentProto& ConstraintProto::_internal_int_max() const {
  return _internal_has_int_max()
      ? *constraint_.int_max_
      : *reinterpret_cast< ::operations_research::sat::IntegerArgumentProto*>(&::operations_research::sat::_IntegerArgumentProto_default_instance_);
}
inline const ::operations_research::sat::IntegerArgumentProto& ConstraintProto::int_max() const {
  // @@protoc_insertion_point(field_get:operations_research.sat.ConstraintProto.int_max)
  return _internal_int_max();
}
inline ::operations_research::sat::IntegerArgumentProto* ConstraintProto::unsafe_arena_release_int_max() {
  // @@protoc_insertion_point(field_unsafe_arena_release:operations_research.sat.ConstraintProto.int_max)
  if (_internal_has_int_max()) {
    clear_has_constraint();
    ::operations_research::sat::IntegerArgumentProto* temp = constraint_.int_max_;
    constraint_.int_max_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void ConstraintProto::unsafe_arena_set_allocated_int_max(::operations_research::sat::IntegerArgumentProto* int_max) {
  clear_constraint();
  if (int_max) {
    set_has_int_max();
    constraint_.int_max_ = int_max;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:operations_research.sat.ConstraintProto.int_max)
}
inline ::operations_research::sat::IntegerArgumentProto* ConstraintProto::_internal_mutable_int_max() {
  if (!_internal_has_int_max()) {
    clear_constraint();
    set_has_int_max();
    constraint_.int_max_ = CreateMaybeMessage< ::operations_research::sat::IntegerArgumentProto >(GetArena());
  }
  return constraint_.int_max_;
}
inline ::operations_research::sat::IntegerArgumentProto* ConstraintProto::mutable_int_max() {
  // @@protoc_insertion_point(field_mutable:operations_research.sat.ConstraintProto.int_max)
  return _internal_mutable_int_max();
}

// .operations_research.sat.LinearArgumentProto lin_max = 27;
inline bool ConstraintProto::_internal_has_lin_max() const {
  return constraint_case() == kLinMax;
}
inline bool ConstraintProto::has_lin_max() const {
  return _internal_has_lin_max();
}
inline void ConstraintProto::set_has_lin_max() {
  _oneof_case_[0] = kLinMax;
}
inline void ConstraintProto::clear_lin_max() {
  if (_internal_has_lin_max()) {
    if (GetArena() == nullptr) {
      delete constraint_.lin_max_;
    }
    clear_has_constraint();
  }
}
inline ::operations_research::sat::LinearArgumentProto* ConstraintProto::release_lin_max() {
  // @@protoc_insertion_point(field_release:operations_research.sat.ConstraintProto.lin_max)
  if (_internal_has_lin_max()) {
    clear_has_constraint();
      ::operations_research::sat::LinearArgumentProto* temp = constraint_.lin_max_;
    if (GetArena() != nullptr) {
      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
    }
    constraint_.lin_max_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::operations_research::sat::LinearArgumentProto& ConstraintProto::_internal_lin_max() const {
  return _internal_has_lin_max()
      ? *constraint_.lin_max_
      : *reinterpret_cast< ::operations_research::sat::LinearArgumentProto*>(&::operations_research::sat::_LinearArgumentProto_default_instance_);
}
inline const ::operations_research::sat::LinearArgumentProto& ConstraintProto::lin_max() const {
  // @@protoc_insertion_point(field_get:operations_research.sat.ConstraintProto.lin_max)
  return _internal_lin_max();
}
inline ::operations_research::sat::LinearArgumentProto* ConstraintProto::unsafe_arena_release_lin_max() {
  // @@protoc_insertion_point(field_unsafe_arena_release:operations_research.sat.ConstraintProto.lin_max)
  if (_internal_has_lin_max()) {
    clear_has_constraint();
    ::operations_research::sat::LinearArgumentProto* temp = constraint_.lin_max_;
    constraint_.lin_max_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void ConstraintProto::unsafe_arena_set_allocated_lin_max(::operations_research::sat::LinearArgumentProto* lin_max) {
  clear_constraint();
  if (lin_max) {
    set_has_lin_max();
    constraint_.lin_max_ = lin_max;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:operations_research.sat.ConstraintProto.lin_max)
}
inline ::operations_research::sat::LinearArgumentProto* ConstraintProto::_internal_mutable_lin_max() {
  if (!_internal_has_lin_max()) {
    clear_constraint();
    set_has_lin_max();
    constraint_.lin_max_ = CreateMaybeMessage< ::operations_research::sat::LinearArgumentProto >(GetArena());
  }
  return constraint_.lin_max_;
}
inline ::operations_research::sat::LinearArgumentProto* ConstraintProto::mutable_lin_max() {
  // @@protoc_insertion_point(field_mutable:operations_research.sat.ConstraintProto.lin_max)
  return _internal_mutable_lin_max();
}

// .operations_research.sat.IntegerArgumentProto int_min = 10;
inline bool ConstraintProto::_internal_has_int_min() const {
  return constraint_case() == kIntMin;
}
inline bool ConstraintProto::has_int_min() const {
  return _internal_has_int_min();
}
inline void ConstraintProto::set_has_int_min() {
  _oneof_case_[0] = kIntMin;
}
inline void ConstraintProto::clear_int_min() {
  if (_internal_has_int_min()) {
    if (GetArena() == nullptr) {
      delete constraint_.int_min_;
    }
    clear_has_constraint();
  }
}
inline ::operations_research::sat::IntegerArgumentProto* ConstraintProto::release_int_min() {
  // @@protoc_insertion_point(field_release:operations_research.sat.ConstraintProto.int_min)
  if (_internal_has_int_min()) {
    clear_has_constraint();
      ::operations_research::sat::IntegerArgumentProto* temp = constraint_.int_min_;
    if (GetArena() != nullptr) {
      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
    }
    constraint_.int_min_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::operations_research::sat::IntegerArgumentProto& ConstraintProto::_internal_int_min() const {
  return _internal_has_int_min()
      ? *constraint_.int_min_
      : *reinterpret_cast< ::operations_research::sat::IntegerArgumentProto*>(&::operations_research::sat::_IntegerArgumentProto_default_instance_);
}
inline const ::operations_research::sat::IntegerArgumentProto& ConstraintProto::int_min() const {
  // @@protoc_insertion_point(field_get:operations_research.sat.ConstraintProto.int_min)
  return _internal_int_min();
}
inline ::operations_research::sat::IntegerArgumentProto* ConstraintProto::unsafe_arena_release_int_min() {
  // @@protoc_insertion_point(field_unsafe_arena_release:operations_research.sat.ConstraintProto.int_min)
  if (_internal_has_int_min()) {
    clear_has_constraint();
    ::operations_research::sat::IntegerArgumentProto* temp = constraint_.int_min_;
    constraint_.int_min_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void ConstraintProto::unsafe_arena_set_allocated_int_min(::operations_research::sat::IntegerArgumentProto* int_min) {
  clear_constraint();
  if (int_min) {
    set_has_int_min();
    constraint_.int_min_ = int_min;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:operations_research.sat.ConstraintProto.int_min)
}
inline ::operations_research::sat::IntegerArgumentProto* ConstraintProto::_internal_mutable_int_min() {
  if (!_internal_has_int_min()) {
    clear_constraint();
    set_has_int_min();
    constraint_.int_min_ = CreateMaybeMessage< ::operations_research::sat::IntegerArgumentProto >(GetArena());
  }
  return constraint_.int_min_;
}
inline ::operations_research::sat::IntegerArgumentProto* ConstraintProto::mutable_int_min() {
  // @@protoc_insertion_point(field_mutable:operations_research.sat.ConstraintProto.int_min)
  return _internal_mutable_int_min();
}

// .operations_research.sat.LinearArgumentProto lin_min = 28;
inline bool ConstraintProto::_internal_has_lin_min() const {
  return constraint_case() == kLinMin;
}
inline bool ConstraintProto::has_lin_min() const {
  return _internal_has_lin_min();
}
inline void ConstraintProto::set_has_lin_min() {
  _oneof_case_[0] = kLinMin;
}
inline void ConstraintProto::clear_lin_min() {
  if (_internal_has_lin_min()) {
    if (GetArena() == nullptr) {
      delete constraint_.lin_min_;
    }
    clear_has_constraint();
  }
}
inline ::operations_research::sat::LinearArgumentProto* ConstraintProto::release_lin_min() {
  // @@protoc_insertion_point(field_release:operations_research.sat.ConstraintProto.lin_min)
  if (_internal_has_lin_min()) {
    clear_has_constraint();
      ::operations_research::sat::LinearArgumentProto* temp = constraint_.lin_min_;
    if (GetArena() != nullptr) {
      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
    }
    constraint_.lin_min_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::operations_research::sat::LinearArgumentProto& ConstraintProto::_internal_lin_min() const {
  return _internal_has_lin_min()
      ? *constraint_.lin_min_
      : *reinterpret_cast< ::operations_research::sat::LinearArgumentProto*>(&::operations_research::sat::_LinearArgumentProto_default_instance_);
}
inline const ::operations_research::sat::LinearArgumentProto& ConstraintProto::lin_min() const {
  // @@protoc_insertion_point(field_get:operations_research.sat.ConstraintProto.lin_min)
  return _internal_lin_min();
}
inline ::operations_research::sat::LinearArgumentProto* ConstraintProto::unsafe_arena_release_lin_min() {
  // @@protoc_insertion_point(field_unsafe_arena_release:operations_research.sat.ConstraintProto.lin_min)
  if (_internal_has_lin_min()) {
    clear_has_constraint();
    ::operations_research::sat::LinearArgumentProto* temp = constraint_.lin_min_;
    constraint_.lin_min_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void ConstraintProto::unsafe_arena_set_allocated_lin_min(::operations_research::sat::LinearArgumentProto* lin_min) {
  clear_constraint();
  if (lin_min) {
    set_has_lin_min();
    constraint_.lin_min_ = lin_min;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:operations_research.sat.ConstraintProto.lin_min)
}
inline ::operations_research::sat::LinearArgumentProto* ConstraintProto::_internal_mutable_lin_min() {
  if (!_internal_has_lin_min()) {
    clear_constraint();
    set_has_lin_min();
    constraint_.lin_min_ = CreateMaybeMessage< ::operations_research::sat::LinearArgumentProto >(GetArena());
  }
  return constraint_.lin_min_;
}
inline ::operations_research::sat::LinearArgumentProto* ConstraintProto::mutable_lin_min() {
  // @@protoc_insertion_point(field_mutable:operations_research.sat.ConstraintProto.lin_min)
  return _internal_mutable_lin_min();
}

// .operations_research.sat.IntegerArgumentProto int_prod = 11;
inline bool ConstraintProto::_internal_has_int_prod() const {
  return constraint_case() == kIntProd;
}
inline bool ConstraintProto::has_int_prod() const {
  return _internal_has_int_prod();
}
inline void ConstraintProto::set_has_int_prod() {
  _oneof_case_[0] = kIntProd;
}
inline void ConstraintProto::clear_int_prod() {
  if (_internal_has_int_prod()) {
    if (GetArena() == nullptr) {
      delete constraint_.int_prod_;
    }
    clear_has_constraint();
  }
}
inline ::operations_research::sat::IntegerArgumentProto* ConstraintProto::release_int_prod() {
  // @@protoc_insertion_point(field_release:operations_research.sat.ConstraintProto.int_prod)
  if (_internal_has_int_prod()) {
    clear_has_constraint();
      ::operations_research::sat::IntegerArgumentProto* temp = constraint_.int_prod_;
    if (GetArena() != nullptr) {
      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
    }
    constraint_.int_prod_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::operations_research::sat::IntegerArgumentProto& ConstraintProto::_internal_int_prod() const {
  return _internal_has_int_prod()
      ? *constraint_.int_prod_
      : *reinterpret_cast< ::operations_research::sat::IntegerArgumentProto*>(&::operations_research::sat::_IntegerArgumentProto_default_instance_);
}
inline const ::operations_research::sat::IntegerArgumentProto& ConstraintProto::int_prod() const {
  // @@protoc_insertion_point(field_get:operations_research.sat.ConstraintProto.int_prod)
  return _internal_int_prod();
}
inline ::operations_research::sat::IntegerArgumentProto* ConstraintProto::unsafe_arena_release_int_prod() {
  // @@protoc_insertion_point(field_unsafe_arena_release:operations_research.sat.ConstraintProto.int_prod)
  if (_internal_has_int_prod()) {
    clear_has_constraint();
    ::operations_research::sat::IntegerArgumentProto* temp = constraint_.int_prod_;
    constraint_.int_prod_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void ConstraintProto::unsafe_arena_set_allocated_int_prod(::operations_research::sat::IntegerArgumentProto* int_prod) {
  clear_constraint();
  if (int_prod) {
    set_has_int_prod();
    constraint_.int_prod_ = int_prod;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:operations_research.sat.ConstraintProto.int_prod)
}
inline ::operations_research::sat::IntegerArgumentProto* ConstraintProto::_internal_mutable_int_prod() {
  if (!_internal_has_int_prod()) {
    clear_constraint();
    set_has_int_prod();
    constraint_.int_prod_ = CreateMaybeMessage< ::operations_research::sat::IntegerArgumentProto >(GetArena());
  }
  return constraint_.int_prod_;
}
inline ::operations_research::sat::IntegerArgumentProto* ConstraintProto::mutable_int_prod() {
  // @@protoc_insertion_point(field_mutable:operations_research.sat.ConstraintProto.int_prod)
  return _internal_mutable_int_prod();
}

// .operations_research.sat.LinearConstraintProto linear = 12;
inline bool ConstraintProto::_internal_has_linear() const {
  return constraint_case() == kLinear;
}
inline bool ConstraintProto::has_linear() const {
  return _internal_has_linear();
}
inline void ConstraintProto::set_has_linear() {
  _oneof_case_[0] = kLinear;
}
inline void ConstraintProto::clear_linear() {
  if (_internal_has_linear()) {
    if (GetArena() == nullptr) {
      delete constraint_.linear_;
    }
    clear_has_constraint();
  }
}
inline ::operations_research::sat::LinearConstraintProto* ConstraintProto::release_linear() {
  // @@protoc_insertion_point(field_release:operations_research.sat.ConstraintProto.linear)
  if (_internal_has_linear()) {
    clear_has_constraint();
      ::operations_research::sat::LinearConstraintProto* temp = constraint_.linear_;
    if (GetArena() != nullptr) {
      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
    }
    constraint_.linear_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::operations_research::sat::LinearConstraintProto& ConstraintProto::_internal_linear() const {
  return _internal_has_linear()
      ? *constraint_.linear_
      : *reinterpret_cast< ::operations_research::sat::LinearConstraintProto*>(&::operations_research::sat::_LinearConstraintProto_default_instance_);
}
inline const ::operations_research::sat::LinearConstraintProto& ConstraintProto::linear() const {
  // @@protoc_insertion_point(field_get:operations_research.sat.ConstraintProto.linear)
  return _internal_linear();
}
inline ::operations_research::sat::LinearConstraintProto* ConstraintProto::unsafe_arena_release_linear() {
  // @@protoc_insertion_point(field_unsafe_arena_release:operations_research.sat.ConstraintProto.linear)
  if (_internal_has_linear()) {
    clear_has_constraint();
    ::operations_research::sat::LinearConstraintProto* temp = constraint_.linear_;
    constraint_.linear_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void ConstraintProto::unsafe_arena_set_allocated_linear(::operations_research::sat::LinearConstraintProto* linear) {
  clear_constraint();
  if (linear) {
    set_has_linear();
    constraint_.linear_ = linear;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:operations_research.sat.ConstraintProto.linear)
}
inline ::operations_research::sat::LinearConstraintProto* ConstraintProto::_internal_mutable_linear() {
  if (!_internal_has_linear()) {
    clear_constraint();
    set_has_linear();
    constraint_.linear_ = CreateMaybeMessage< ::operations_research::sat::LinearConstraintProto >(GetArena());
  }
  return constraint_.linear_;
}
inline ::operations_research::sat::LinearConstraintProto* ConstraintProto::mutable_linear() {
  // @@protoc_insertion_point(field_mutable:operations_research.sat.ConstraintProto.linear)
  return _internal_mutable_linear();
}

// .operations_research.sat.AllDifferentConstraintProto all_diff = 13;
inline bool ConstraintProto::_internal_has_all_diff() const {
  return constraint_case() == kAllDiff;
}
inline bool ConstraintProto::has_all_diff() const {
  return _internal_has_all_diff();
}
inline void ConstraintProto::set_has_all_diff() {
  _oneof_case_[0] = kAllDiff;
}
inline void ConstraintProto::clear_all_diff() {
  if (_internal_has_all_diff()) {
    if (GetArena() == nullptr) {
      delete constraint_.all_diff_;
    }
    clear_has_constraint();
  }
}
inline ::operations_research::sat::AllDifferentConstraintProto* ConstraintProto::release_all_diff() {
  // @@protoc_insertion_point(field_release:operations_research.sat.ConstraintProto.all_diff)
  if (_internal_has_all_diff()) {
    clear_has_constraint();
      ::operations_research::sat::AllDifferentConstraintProto* temp = constraint_.all_diff_;
    if (GetArena() != nullptr) {
      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
    }
    constraint_.all_diff_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::operations_research::sat::AllDifferentConstraintProto& ConstraintProto::_internal_all_diff() const {
  return _internal_has_all_diff()
      ? *constraint_.all_diff_
      : *reinterpret_cast< ::operations_research::sat::AllDifferentConstraintProto*>(&::operations_research::sat::_AllDifferentConstraintProto_default_instance_);
}
inline const ::operations_research::sat::AllDifferentConstraintProto& ConstraintProto::all_diff() const {
  // @@protoc_insertion_point(field_get:operations_research.sat.ConstraintProto.all_diff)
  return _internal_all_diff();
}
inline ::operations_research::sat::AllDifferentConstraintProto* ConstraintProto::unsafe_arena_release_all_diff() {
  // @@protoc_insertion_point(field_unsafe_arena_release:operations_research.sat.ConstraintProto.all_diff)
  if (_internal_has_all_diff()) {
    clear_has_constraint();
    ::operations_research::sat::AllDifferentConstraintProto* temp = constraint_.all_diff_;
    constraint_.all_diff_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void ConstraintProto::unsafe_arena_set_allocated_all_diff(::operations_research::sat::AllDifferentConstraintProto* all_diff) {
  clear_constraint();
  if (all_diff) {
    set_has_all_diff();
    constraint_.all_diff_ = all_diff;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:operations_research.sat.ConstraintProto.all_diff)
}
inline ::operations_research::sat::AllDifferentConstraintProto* ConstraintProto::_internal_mutable_all_diff() {
  if (!_internal_has_all_diff()) {
    clear_constraint();
    set_has_all_diff();
    constraint_.all_diff_ = CreateMaybeMessage< ::operations_research::sat::AllDifferentConstraintProto >(GetArena());
  }
  return constraint_.all_diff_;
}
inline ::operations_research::sat::AllDifferentConstraintProto* ConstraintProto::mutable_all_diff() {
  // @@protoc_insertion_point(field_mutable:operations_research.sat.ConstraintProto.all_diff)
  return _internal_mutable_all_diff();
}

// .operations_research.sat.ElementConstraintProto element = 14;
inline bool ConstraintProto::_internal_has_element() const {
  return constraint_case() == kElement;
}
inline bool ConstraintProto::has_element() const {
  return _internal_has_element();
}
inline void ConstraintProto::set_has_element() {
  _oneof_case_[0] = kElement;
}
inline void ConstraintProto::clear_element() {
  if (_internal_has_element()) {
    if (GetArena() == nullptr) {
      delete constraint_.element_;
    }
    clear_has_constraint();
  }
}
inline ::operations_research::sat::ElementConstraintProto* ConstraintProto::release_element() {
  // @@protoc_insertion_point(field_release:operations_research.sat.ConstraintProto.element)
  if (_internal_has_element()) {
    clear_has_constraint();
      ::operations_research::sat::ElementConstraintProto* temp = constraint_.element_;
    if (GetArena() != nullptr) {
      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
    }
    constraint_.element_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::operations_research::sat::ElementConstraintProto& ConstraintProto::_internal_element() const {
  return _internal_has_element()
      ? *constraint_.element_
      : *reinterpret_cast< ::operations_research::sat::ElementConstraintProto*>(&::operations_research::sat::_ElementConstraintProto_default_instance_);
}
inline const ::operations_research::sat::ElementConstraintProto& ConstraintProto::element() const {
  // @@protoc_insertion_point(field_get:operations_research.sat.ConstraintProto.element)
  return _internal_element();
}
inline ::operations_research::sat::ElementConstraintProto* ConstraintProto::unsafe_arena_release_element() {
  // @@protoc_insertion_point(field_unsafe_arena_release:operations_research.sat.ConstraintProto.element)
  if (_internal_has_element()) {
    clear_has_constraint();
    ::operations_research::sat::ElementConstraintProto* temp = constraint_.element_;
    constraint_.element_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void ConstraintProto::unsafe_arena_set_allocated_element(::operations_research::sat::ElementConstraintProto* element) {
  clear_constraint();
  if (element) {
    set_has_element();
    constraint_.element_ = element;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:operations_research.sat.ConstraintProto.element)
}
inline ::operations_research::sat::ElementConstraintProto* ConstraintProto::_internal_mutable_element() {
  if (!_internal_has_element()) {
    clear_constraint();
    set_has_element();
    constraint_.element_ = CreateMaybeMessage< ::operations_research::sat::ElementConstraintProto >(GetArena());
  }
  return constraint_.element_;
}
inline ::operations_research::sat::ElementConstraintProto* ConstraintProto::mutable_element() {
  // @@protoc_insertion_point(field_mutable:operations_research.sat.ConstraintProto.element)
  return _internal_mutable_element();
}

// .operations_research.sat.CircuitConstraintProto circuit = 15;
inline bool ConstraintProto::_internal_has_circuit() const {
  return constraint_case() == kCircuit;
}
inline bool ConstraintProto::has_circuit() const {
  return _internal_has_circuit();
}
inline void ConstraintProto::set_has_circuit() {
  _oneof_case_[0] = kCircuit;
}
inline void ConstraintProto::clear_circuit() {
  if (_internal_has_circuit()) {
    if (GetArena() == nullptr) {
      delete constraint_.circuit_;
    }
    clear_has_constraint();
  }
}
inline ::operations_research::sat::CircuitConstraintProto* ConstraintProto::release_circuit() {
  // @@protoc_insertion_point(field_release:operations_research.sat.ConstraintProto.circuit)
  if (_internal_has_circuit()) {
    clear_has_constraint();
      ::operations_research::sat::CircuitConstraintProto* temp = constraint_.circuit_;
    if (GetArena() != nullptr) {
      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
    }
    constraint_.circuit_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::operations_research::sat::CircuitConstraintProto& ConstraintProto::_internal_circuit() const {
  return _internal_has_circuit()
      ? *constraint_.circuit_
      : *reinterpret_cast< ::operations_research::sat::CircuitConstraintProto*>(&::operations_research::sat::_CircuitConstraintProto_default_instance_);
}
inline const ::operations_research::sat::CircuitConstraintProto& ConstraintProto::circuit() const {
  // @@protoc_insertion_point(field_get:operations_research.sat.ConstraintProto.circuit)
  return _internal_circuit();
}
inline ::operations_research::sat::CircuitConstraintProto* ConstraintProto::unsafe_arena_release_circuit() {
  // @@protoc_insertion_point(field_unsafe_arena_release:operations_research.sat.ConstraintProto.circuit)
  if (_internal_has_circuit()) {
    clear_has_constraint();
    ::operations_research::sat::CircuitConstraintProto* temp = constraint_.circuit_;
    constraint_.circuit_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void ConstraintProto::unsafe_arena_set_allocated_circuit(::operations_research::sat::CircuitConstraintProto* circuit) {
  clear_constraint();
  if (circuit) {
    set_has_circuit();
    constraint_.circuit_ = circuit;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:operations_research.sat.ConstraintProto.circuit)
}
inline ::operations_research::sat::CircuitConstraintProto* ConstraintProto::_internal_mutable_circuit() {
  if (!_internal_has_circuit()) {
    clear_constraint();
    set_has_circuit();
    constraint_.circuit_ = CreateMaybeMessage< ::operations_research::sat::CircuitConstraintProto >(GetArena());
  }
  return constraint_.circuit_;
}
inline ::operations_research::sat::CircuitConstraintProto* ConstraintProto::mutable_circuit() {
  // @@protoc_insertion_point(field_mutable:operations_research.sat.ConstraintProto.circuit)
  return _internal_mutable_circuit();
}

// .operations_research.sat.RoutesConstraintProto routes = 23;
inline bool ConstraintProto::_internal_has_routes() const {
  return constraint_case() == kRoutes;
}
inline bool ConstraintProto::has_routes() const {
  return _internal_has_routes();
}
inline void ConstraintProto::set_has_routes() {
  _oneof_case_[0] = kRoutes;
}
inline void ConstraintProto::clear_routes() {
  if (_internal_has_routes()) {
    if (GetArena() == nullptr) {
      delete constraint_.routes_;
    }
    clear_has_constraint();
  }
}
inline ::operations_research::sat::RoutesConstraintProto* ConstraintProto::release_routes() {
  // @@protoc_insertion_point(field_release:operations_research.sat.ConstraintProto.routes)
  if (_internal_has_routes()) {
    clear_has_constraint();
      ::operations_research::sat::RoutesConstraintProto* temp = constraint_.routes_;
    if (GetArena() != nullptr) {
      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
    }
    constraint_.routes_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::operations_research::sat::RoutesConstraintProto& ConstraintProto::_internal_routes() const {
  return _internal_has_routes()
      ? *constraint_.routes_
      : *reinterpret_cast< ::operations_research::sat::RoutesConstraintProto*>(&::operations_research::sat::_RoutesConstraintProto_default_instance_);
}
inline const ::operations_research::sat::RoutesConstraintProto& ConstraintProto::routes() const {
  // @@protoc_insertion_point(field_get:operations_research.sat.ConstraintProto.routes)
  return _internal_routes();
}
inline ::operations_research::sat::RoutesConstraintProto* ConstraintProto::unsafe_arena_release_routes() {
  // @@protoc_insertion_point(field_unsafe_arena_release:operations_research.sat.ConstraintProto.routes)
  if (_internal_has_routes()) {
    clear_has_constraint();
    ::operations_research::sat::RoutesConstraintProto* temp = constraint_.routes_;
    constraint_.routes_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void ConstraintProto::unsafe_arena_set_allocated_routes(::operations_research::sat::RoutesConstraintProto* routes) {
  clear_constraint();
  if (routes) {
    set_has_routes();
    constraint_.routes_ = routes;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:operations_research.sat.ConstraintProto.routes)
}
inline ::operations_research::sat::RoutesConstraintProto* ConstraintProto::_internal_mutable_routes() {
  if (!_internal_has_routes()) {
    clear_constraint();
    set_has_routes();
    constraint_.routes_ = CreateMaybeMessage< ::operations_research::sat::RoutesConstraintProto >(GetArena());
  }
  return constraint_.routes_;
}
inline ::operations_research::sat::RoutesConstraintProto* ConstraintProto::mutable_routes() {
  // @@protoc_insertion_point(field_mutable:operations_research.sat.ConstraintProto.routes)
  return _internal_mutable_routes();
}

// .operations_research.sat.CircuitCoveringConstraintProto circuit_covering = 25;
inline bool ConstraintProto::_internal_has_circuit_covering() const {
  return constraint_case() == kCircuitCovering;
}
inline bool ConstraintProto::has_circuit_covering() const {
  return _internal_has_circuit_covering();
}
inline void ConstraintProto::set_has_circuit_covering() {
  _oneof_case_[0] = kCircuitCovering;
}
inline void ConstraintProto::clear_circuit_covering() {
  if (_internal_has_circuit_covering()) {
    if (GetArena() == nullptr) {
      delete constraint_.circuit_covering_;
    }
    clear_has_constraint();
  }
}
inline ::operations_research::sat::CircuitCoveringConstraintProto* ConstraintProto::release_circuit_covering() {
  // @@protoc_insertion_point(field_release:operations_research.sat.ConstraintProto.circuit_covering)
  if (_internal_has_circuit_covering()) {
    clear_has_constraint();
      ::operations_research::sat::CircuitCoveringConstraintProto* temp = constraint_.circuit_covering_;
    if (GetArena() != nullptr) {
      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
    }
    constraint_.circuit_covering_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::operations_research::sat::CircuitCoveringConstraintProto& ConstraintProto::_internal_circuit_covering() const {
  return _internal_has_circuit_covering()
      ? *constraint_.circuit_covering_
      : *reinterpret_cast< ::operations_research::sat::CircuitCoveringConstraintProto*>(&::operations_research::sat::_CircuitCoveringConstraintProto_default_instance_);
}
inline const ::operations_research::sat::CircuitCoveringConstraintProto& ConstraintProto::circuit_covering() const {
  // @@protoc_insertion_point(field_get:operations_research.sat.ConstraintProto.circuit_covering)
  return _internal_circuit_covering();
}
inline ::operations_research::sat::CircuitCoveringConstraintProto* ConstraintProto::unsafe_arena_release_circuit_covering() {
  // @@protoc_insertion_point(field_unsafe_arena_release:operations_research.sat.ConstraintProto.circuit_covering)
  if (_internal_has_circuit_covering()) {
    clear_has_constraint();
    ::operations_research::sat::CircuitCoveringConstraintProto* temp = constraint_.circuit_covering_;
    constraint_.circuit_covering_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void ConstraintProto::unsafe_arena_set_allocated_circuit_covering(::operations_research::sat::CircuitCoveringConstraintProto* circuit_covering) {
  clear_constraint();
  if (circuit_covering) {
    set_has_circuit_covering();
    constraint_.circuit_covering_ = circuit_covering;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:operations_research.sat.ConstraintProto.circuit_covering)
}
inline ::operations_research::sat::CircuitCoveringConstraintProto* ConstraintProto::_internal_mutable_circuit_covering() {
  if (!_internal_has_circuit_covering()) {
    clear_constraint();
    set_has_circuit_covering();
    constraint_.circuit_covering_ = CreateMaybeMessage< ::operations_research::sat::CircuitCoveringConstraintProto >(GetArena());
  }
  return constraint_.circuit_covering_;
}
inline ::operations_research::sat::CircuitCoveringConstraintProto* ConstraintProto::mutable_circuit_covering() {
  // @@protoc_insertion_point(field_mutable:operations_research.sat.ConstraintProto.circuit_covering)
  return _internal_mutable_circuit_covering();
}

// .operations_research.sat.TableConstraintProto table = 16;
inline bool ConstraintProto::_internal_has_table() const {
  return constraint_case() == kTable;
}
inline bool ConstraintProto::has_table() const {
  return _internal_has_table();
}
inline void ConstraintProto::set_has_table() {
  _oneof_case_[0] = kTable;
}
inline void ConstraintProto::clear_table() {
  if (_internal_has_table()) {
    if (GetArena() == nullptr) {
      delete constraint_.table_;
    }
    clear_has_constraint();
  }
}
inline ::operations_research::sat::TableConstraintProto* ConstraintProto::release_table() {
  // @@protoc_insertion_point(field_release:operations_research.sat.ConstraintProto.table)
  if (_internal_has_table()) {
    clear_has_constraint();
      ::operations_research::sat::TableConstraintProto* temp = constraint_.table_;
    if (GetArena() != nullptr) {
      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
    }
    constraint_.table_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::operations_research::sat::TableConstraintProto& ConstraintProto::_internal_table() const {
  return _internal_has_table()
      ? *constraint_.table_
      : *reinterpret_cast< ::operations_research::sat::TableConstraintProto*>(&::operations_research::sat::_TableConstraintProto_default_instance_);
}
inline const ::operations_research::sat::TableConstraintProto& ConstraintProto::table() const {
  // @@protoc_insertion_point(field_get:operations_research.sat.ConstraintProto.table)
  return _internal_table();
}
inline ::operations_research::sat::TableConstraintProto* ConstraintProto::unsafe_arena_release_table() {
  // @@protoc_insertion_point(field_unsafe_arena_release:operations_research.sat.ConstraintProto.table)
  if (_internal_has_table()) {
    clear_has_constraint();
    ::operations_research::sat::TableConstraintProto* temp = constraint_.table_;
    constraint_.table_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void ConstraintProto::unsafe_arena_set_allocated_table(::operations_research::sat::TableConstraintProto* table) {
  clear_constraint();
  if (table) {
    set_has_table();
    constraint_.table_ = table;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:operations_research.sat.ConstraintProto.table)
}
inline ::operations_research::sat::TableConstraintProto* ConstraintProto::_internal_mutable_table() {
  if (!_internal_has_table()) {
    clear_constraint();
    set_has_table();
    constraint_.table_ = CreateMaybeMessage< ::operations_research::sat::TableConstraintProto >(GetArena());
  }
  return constraint_.table_;
}
inline ::operations_research::sat::TableConstraintProto* ConstraintProto::mutable_table() {
  // @@protoc_insertion_point(field_mutable:operations_research.sat.ConstraintProto.table)
  return _internal_mutable_table();
}

// .operations_research.sat.AutomatonConstraintProto automaton = 17;
inline bool ConstraintProto::_internal_has_automaton() const {
  return constraint_case() == kAutomaton;
}
inline bool ConstraintProto::has_automaton() const {
  return _internal_has_automaton();
}
inline void ConstraintProto::set_has_automaton() {
  _oneof_case_[0] = kAutomaton;
}
inline void ConstraintProto::clear_automaton() {
  if (_internal_has_automaton()) {
    if (GetArena() == nullptr) {
      delete constraint_.automaton_;
    }
    clear_has_constraint();
  }
}
inline ::operations_research::sat::AutomatonConstraintProto* ConstraintProto::release_automaton() {
  // @@protoc_insertion_point(field_release:operations_research.sat.ConstraintProto.automaton)
  if (_internal_has_automaton()) {
    clear_has_constraint();
      ::operations_research::sat::AutomatonConstraintProto* temp = constraint_.automaton_;
    if (GetArena() != nullptr) {
      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
    }
    constraint_.automaton_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::operations_research::sat::AutomatonConstraintProto& ConstraintProto::_internal_automaton() const {
  return _internal_has_automaton()
      ? *constraint_.automaton_
      : *reinterpret_cast< ::operations_research::sat::AutomatonConstraintProto*>(&::operations_research::sat::_AutomatonConstraintProto_default_instance_);
}
inline const ::operations_research::sat::AutomatonConstraintProto& ConstraintProto::automaton() const {
  // @@protoc_insertion_point(field_get:operations_research.sat.ConstraintProto.automaton)
  return _internal_automaton();
}
inline ::operations_research::sat::AutomatonConstraintProto* ConstraintProto::unsafe_arena_release_automaton() {
  // @@protoc_insertion_point(field_unsafe_arena_release:operations_research.sat.ConstraintProto.automaton)
  if (_internal_has_automaton()) {
    clear_has_constraint();
    ::operations_research::sat::AutomatonConstraintProto* temp = constraint_.automaton_;
    constraint_.automaton_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void ConstraintProto::unsafe_arena_set_allocated_automaton(::operations_research::sat::AutomatonConstraintProto* automaton) {
  clear_constraint();
  if (automaton) {
    set_has_automaton();
    constraint_.automaton_ = automaton;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:operations_research.sat.ConstraintProto.automaton)
}
inline ::operations_research::sat::AutomatonConstraintProto* ConstraintProto::_internal_mutable_automaton() {
  if (!_internal_has_automaton()) {
    clear_constraint();
    set_has_automaton();
    constraint_.automaton_ = CreateMaybeMessage< ::operations_research::sat::AutomatonConstraintProto >(GetArena());
  }
  return constraint_.automaton_;
}
inline ::operations_research::sat::AutomatonConstraintProto* ConstraintProto::mutable_automaton() {
  // @@protoc_insertion_point(field_mutable:operations_research.sat.ConstraintProto.automaton)
  return _internal_mutable_automaton();
}

// .operations_research.sat.InverseConstraintProto inverse = 18;
inline bool ConstraintProto::_internal_has_inverse() const {
  return constraint_case() == kInverse;
}
inline bool ConstraintProto::has_inverse() const {
  return _internal_has_inverse();
}
inline void ConstraintProto::set_has_inverse() {
  _oneof_case_[0] = kInverse;
}
inline void ConstraintProto::clear_inverse() {
  if (_internal_has_inverse()) {
    if (GetArena() == nullptr) {
      delete constraint_.inverse_;
    }
    clear_has_constraint();
  }
}
inline ::operations_research::sat::InverseConstraintProto* ConstraintProto::release_inverse() {
  // @@protoc_insertion_point(field_release:operations_research.sat.ConstraintProto.inverse)
  if (_internal_has_inverse()) {
    clear_has_constraint();
      ::operations_research::sat::InverseConstraintProto* temp = constraint_.inverse_;
    if (GetArena() != nullptr) {
      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
    }
    constraint_.inverse_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::operations_research::sat::InverseConstraintProto& ConstraintProto::_internal_inverse() const {
  return _internal_has_inverse()
      ? *constraint_.inverse_
      : *reinterpret_cast< ::operations_research::sat::InverseConstraintProto*>(&::operations_research::sat::_InverseConstraintProto_default_instance_);
}
inline const ::operations_research::sat::InverseConstraintProto& ConstraintProto::inverse() const {
  // @@protoc_insertion_point(field_get:operations_research.sat.ConstraintProto.inverse)
  return _internal_inverse();
}
inline ::operations_research::sat::InverseConstraintProto* ConstraintProto::unsafe_arena_release_inverse() {
  // @@protoc_insertion_point(field_unsafe_arena_release:operations_research.sat.ConstraintProto.inverse)
  if (_internal_has_inverse()) {
    clear_has_constraint();
    ::operations_research::sat::InverseConstraintProto* temp = constraint_.inverse_;
    constraint_.inverse_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void ConstraintProto::unsafe_arena_set_allocated_inverse(::operations_research::sat::InverseConstraintProto* inverse) {
  clear_constraint();
  if (inverse) {
    set_has_inverse();
    constraint_.inverse_ = inverse;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:operations_research.sat.ConstraintProto.inverse)
}
inline ::operations_research::sat::InverseConstraintProto* ConstraintProto::_internal_mutable_inverse() {
  if (!_internal_has_inverse()) {
    clear_constraint();
    set_has_inverse();
    constraint_.inverse_ = CreateMaybeMessage< ::operations_research::sat::InverseConstraintProto >(GetArena());
  }
  return constraint_.inverse_;
}
inline ::operations_research::sat::InverseConstraintProto* ConstraintProto::mutable_inverse() {
  // @@protoc_insertion_point(field_mutable:operations_research.sat.ConstraintProto.inverse)
  return _internal_mutable_inverse();
}

// .operations_research.sat.ReservoirConstraintProto reservoir = 24;
inline bool ConstraintProto::_internal_has_reservoir() const {
  return constraint_case() == kReservoir;
}
inline bool ConstraintProto::has_reservoir() const {
  return _internal_has_reservoir();
}
inline void ConstraintProto::set_has_reservoir() {
  _oneof_case_[0] = kReservoir;
}
inline void ConstraintProto::clear_reservoir() {
  if (_internal_has_reservoir()) {
    if (GetArena() == nullptr) {
      delete constraint_.reservoir_;
    }
    clear_has_constraint();
  }
}
inline ::operations_research::sat::ReservoirConstraintProto* ConstraintProto::release_reservoir() {
  // @@protoc_insertion_point(field_release:operations_research.sat.ConstraintProto.reservoir)
  if (_internal_has_reservoir()) {
    clear_has_constraint();
      ::operations_research::sat::ReservoirConstraintProto* temp = constraint_.reservoir_;
    if (GetArena() != nullptr) {
      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
    }
    constraint_.reservoir_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::operations_research::sat::ReservoirConstraintProto& ConstraintProto::_internal_reservoir() const {
  return _internal_has_reservoir()
      ? *constraint_.reservoir_
      : *reinterpret_cast< ::operations_research::sat::ReservoirConstraintProto*>(&::operations_research::sat::_ReservoirConstraintProto_default_instance_);
}
inline const ::operations_research::sat::ReservoirConstraintProto& ConstraintProto::reservoir() const {
  // @@protoc_insertion_point(field_get:operations_research.sat.ConstraintProto.reservoir)
  return _internal_reservoir();
}
inline ::operations_research::sat::ReservoirConstraintProto* ConstraintProto::unsafe_arena_release_reservoir() {
  // @@protoc_insertion_point(field_unsafe_arena_release:operations_research.sat.ConstraintProto.reservoir)
  if (_internal_has_reservoir()) {
    clear_has_constraint();
    ::operations_research::sat::ReservoirConstraintProto* temp = constraint_.reservoir_;
    constraint_.reservoir_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void ConstraintProto::unsafe_arena_set_allocated_reservoir(::operations_research::sat::ReservoirConstraintProto* reservoir) {
  clear_constraint();
  if (reservoir) {
    set_has_reservoir();
    constraint_.reservoir_ = reservoir;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:operations_research.sat.ConstraintProto.reservoir)
}
inline ::operations_research::sat::ReservoirConstraintProto* ConstraintProto::_internal_mutable_reservoir() {
  if (!_internal_has_reservoir()) {
    clear_constraint();
    set_has_reservoir();
    constraint_.reservoir_ = CreateMaybeMessage< ::operations_research::sat::ReservoirConstraintProto >(GetArena());
  }
  return constraint_.reservoir_;
}
inline ::operations_research::sat::ReservoirConstraintProto* ConstraintProto::mutable_reservoir() {
  // @@protoc_insertion_point(field_mutable:operations_research.sat.ConstraintProto.reservoir)
  return _internal_mutable_reservoir();
}

// .operations_research.sat.IntervalConstraintProto interval = 19;
inline bool ConstraintProto::_internal_has_interval() const {
  return constraint_case() == kInterval;
}
inline bool ConstraintProto::has_interval() const {
  return _internal_has_interval();
}
inline void ConstraintProto::set_has_interval() {
  _oneof_case_[0] = kInterval;
}
inline void ConstraintProto::clear_interval() {
  if (_internal_has_interval()) {
    if (GetArena() == nullptr) {
      delete constraint_.interval_;
    }
    clear_has_constraint();
  }
}
inline ::operations_research::sat::IntervalConstraintProto* ConstraintProto::release_interval() {
  // @@protoc_insertion_point(field_release:operations_research.sat.ConstraintProto.interval)
  if (_internal_has_interval()) {
    clear_has_constraint();
      ::operations_research::sat::IntervalConstraintProto* temp = constraint_.interval_;
    if (GetArena() != nullptr) {
      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
    }
    constraint_.interval_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::operations_research::sat::IntervalConstraintProto& ConstraintProto::_internal_interval() const {
  return _internal_has_interval()
      ? *constraint_.interval_
      : *reinterpret_cast< ::operations_research::sat::IntervalConstraintProto*>(&::operations_research::sat::_IntervalConstraintProto_default_instance_);
}
inline const ::operations_research::sat::IntervalConstraintProto& ConstraintProto::interval() const {
  // @@protoc_insertion_point(field_get:operations_research.sat.ConstraintProto.interval)
  return _internal_interval();
}
inline ::operations_research::sat::IntervalConstraintProto* ConstraintProto::unsafe_arena_release_interval() {
  // @@protoc_insertion_point(field_unsafe_arena_release:operations_research.sat.ConstraintProto.interval)
  if (_internal_has_interval()) {
    clear_has_constraint();
    ::operations_research::sat::IntervalConstraintProto* temp = constraint_.interval_;
    constraint_.interval_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void ConstraintProto::unsafe_arena_set_allocated_interval(::operations_research::sat::IntervalConstraintProto* interval) {
  clear_constraint();
  if (interval) {
    set_has_interval();
    constraint_.interval_ = interval;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:operations_research.sat.ConstraintProto.interval)
}
inline ::operations_research::sat::IntervalConstraintProto* ConstraintProto::_internal_mutable_interval() {
  if (!_internal_has_interval()) {
    clear_constraint();
    set_has_interval();
    constraint_.interval_ = CreateMaybeMessage< ::operations_research::sat::IntervalConstraintProto >(GetArena());
  }
  return constraint_.interval_;
}
inline ::operations_research::sat::IntervalConstraintProto* ConstraintProto::mutable_interval() {
  // @@protoc_insertion_point(field_mutable:operations_research.sat.ConstraintProto.interval)
  return _internal_mutable_interval();
}

// .operations_research.sat.NoOverlapConstraintProto no_overlap = 20;
inline bool ConstraintProto::_internal_has_no_overlap() const {
  return constraint_case() == kNoOverlap;
}
inline bool ConstraintProto::has_no_overlap() const {
  return _internal_has_no_overlap();
}
inline void ConstraintProto::set_has_no_overlap() {
  _oneof_case_[0] = kNoOverlap;
}
inline void ConstraintProto::clear_no_overlap() {
  if (_internal_has_no_overlap()) {
    if (GetArena() == nullptr) {
      delete constraint_.no_overlap_;
    }
    clear_has_constraint();
  }
}
inline ::operations_research::sat::NoOverlapConstraintProto* ConstraintProto::release_no_overlap() {
  // @@protoc_insertion_point(field_release:operations_research.sat.ConstraintProto.no_overlap)
  if (_internal_has_no_overlap()) {
    clear_has_constraint();
      ::operations_research::sat::NoOverlapConstraintProto* temp = constraint_.no_overlap_;
    if (GetArena() != nullptr) {
      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
    }
    constraint_.no_overlap_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::operations_research::sat::NoOverlapConstraintProto& ConstraintProto::_internal_no_overlap() const {
  return _internal_has_no_overlap()
      ? *constraint_.no_overlap_
      : *reinterpret_cast< ::operations_research::sat::NoOverlapConstraintProto*>(&::operations_research::sat::_NoOverlapConstraintProto_default_instance_);
}
inline const ::operations_research::sat::NoOverlapConstraintProto& ConstraintProto::no_overlap() const {
  // @@protoc_insertion_point(field_get:operations_research.sat.ConstraintProto.no_overlap)
  return _internal_no_overlap();
}
inline ::operations_research::sat::NoOverlapConstraintProto* ConstraintProto::unsafe_arena_release_no_overlap() {
  // @@protoc_insertion_point(field_unsafe_arena_release:operations_research.sat.ConstraintProto.no_overlap)
  if (_internal_has_no_overlap()) {
    clear_has_constraint();
    ::operations_research::sat::NoOverlapConstraintProto* temp = constraint_.no_overlap_;
    constraint_.no_overlap_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void ConstraintProto::unsafe_arena_set_allocated_no_overlap(::operations_research::sat::NoOverlapConstraintProto* no_overlap) {
  clear_constraint();
  if (no_overlap) {
    set_has_no_overlap();
    constraint_.no_overlap_ = no_overlap;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:operations_research.sat.ConstraintProto.no_overlap)
}
inline ::operations_research::sat::NoOverlapConstraintProto* ConstraintProto::_internal_mutable_no_overlap() {
  if (!_internal_has_no_overlap()) {
    clear_constraint();
    set_has_no_overlap();
    constraint_.no_overlap_ = CreateMaybeMessage< ::operations_research::sat::NoOverlapConstraintProto >(GetArena());
  }
  return constraint_.no_overlap_;
}
inline ::operations_research::sat::NoOverlapConstraintProto* ConstraintProto::mutable_no_overlap() {
  // @@protoc_insertion_point(field_mutable:operations_research.sat.ConstraintProto.no_overlap)
  return _internal_mutable_no_overlap();
}

// .operations_research.sat.NoOverlap2DConstraintProto no_overlap_2d = 21;
inline bool ConstraintProto::_internal_has_no_overlap_2d() const {
  return constraint_case() == kNoOverlap2D;
}
inline bool ConstraintProto::has_no_overlap_2d() const {
  return _internal_has_no_overlap_2d();
}
inline void ConstraintProto::set_has_no_overlap_2d() {
  _oneof_case_[0] = kNoOverlap2D;
}
inline void ConstraintProto::clear_no_overlap_2d() {
  if (_internal_has_no_overlap_2d()) {
    if (GetArena() == nullptr) {
      delete constraint_.no_overlap_2d_;
    }
    clear_has_constraint();
  }
}
inline ::operations_research::sat::NoOverlap2DConstraintProto* ConstraintProto::release_no_overlap_2d() {
  // @@protoc_insertion_point(field_release:operations_research.sat.ConstraintProto.no_overlap_2d)
  if (_internal_has_no_overlap_2d()) {
    clear_has_constraint();
      ::operations_research::sat::NoOverlap2DConstraintProto* temp = constraint_.no_overlap_2d_;
    if (GetArena() != nullptr) {
      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
    }
    constraint_.no_overlap_2d_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::operations_research::sat::NoOverlap2DConstraintProto& ConstraintProto::_internal_no_overlap_2d() const {
  return _internal_has_no_overlap_2d()
      ? *constraint_.no_overlap_2d_
      : *reinterpret_cast< ::operations_research::sat::NoOverlap2DConstraintProto*>(&::operations_research::sat::_NoOverlap2DConstraintProto_default_instance_);
}
inline const ::operations_research::sat::NoOverlap2DConstraintProto& ConstraintProto::no_overlap_2d() const {
  // @@protoc_insertion_point(field_get:operations_research.sat.ConstraintProto.no_overlap_2d)
  return _internal_no_overlap_2d();
}
inline ::operations_research::sat::NoOverlap2DConstraintProto* ConstraintProto::unsafe_arena_release_no_overlap_2d() {
  // @@protoc_insertion_point(field_unsafe_arena_release:operations_research.sat.ConstraintProto.no_overlap_2d)
  if (_internal_has_no_overlap_2d()) {
    clear_has_constraint();
    ::operations_research::sat::NoOverlap2DConstraintProto* temp = constraint_.no_overlap_2d_;
    constraint_.no_overlap_2d_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void ConstraintProto::unsafe_arena_set_allocated_no_overlap_2d(::operations_research::sat::NoOverlap2DConstraintProto* no_overlap_2d) {
  clear_constraint();
  if (no_overlap_2d) {
    set_has_no_overlap_2d();
    constraint_.no_overlap_2d_ = no_overlap_2d;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:operations_research.sat.ConstraintProto.no_overlap_2d)
}
inline ::operations_research::sat::NoOverlap2DConstraintProto* ConstraintProto::_internal_mutable_no_overlap_2d() {
  if (!_internal_has_no_overlap_2d()) {
    clear_constraint();
    set_has_no_overlap_2d();
    constraint_.no_overlap_2d_ = CreateMaybeMessage< ::operations_research::sat::NoOverlap2DConstraintProto >(GetArena());
  }
  return constraint_.no_overlap_2d_;
}
inline ::operations_research::sat::NoOverlap2DConstraintProto* ConstraintProto::mutable_no_overlap_2d() {
  // @@protoc_insertion_point(field_mutable:operations_research.sat.ConstraintProto.no_overlap_2d)
  return _internal_mutable_no_overlap_2d();
}

// .operations_research.sat.CumulativeConstraintProto cumulative = 22;
inline bool ConstraintProto::_internal_has_cumulative() const {
  return constraint_case() == kCumulative;
}
inline bool ConstraintProto::has_cumulative() const {
  return _internal_has_cumulative();
}
inline void ConstraintProto::set_has_cumulative() {
  _oneof_case_[0] = kCumulative;
}
inline void ConstraintProto::clear_cumulative() {
  if (_internal_has_cumulative()) {
    if (GetArena() == nullptr) {
      delete constraint_.cumulative_;
    }
    clear_has_constraint();
  }
}
inline ::operations_research::sat::CumulativeConstraintProto* ConstraintProto::release_cumulative() {
  // @@protoc_insertion_point(field_release:operations_research.sat.ConstraintProto.cumulative)
  if (_internal_has_cumulative()) {
    clear_has_constraint();
      ::operations_research::sat::CumulativeConstraintProto* temp = constraint_.cumulative_;
    if (GetArena() != nullptr) {
      temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
    }
    constraint_.cumulative_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::operations_research::sat::CumulativeConstraintProto& ConstraintProto::_internal_cumulative() const {
  return _internal_has_cumulative()
      ? *constraint_.cumulative_
      : *reinterpret_cast< ::operations_research::sat::CumulativeConstraintProto*>(&::operations_research::sat::_CumulativeConstraintProto_default_instance_);
}
inline const ::operations_research::sat::CumulativeConstraintProto& ConstraintProto::cumulative() const {
  // @@protoc_insertion_point(field_get:operations_research.sat.ConstraintProto.cumulative)
  return _internal_cumulative();
}
inline ::operations_research::sat::CumulativeConstraintProto* ConstraintProto::unsafe_arena_release_cumulative() {
  // @@protoc_insertion_point(field_unsafe_arena_release:operations_research.sat.ConstraintProto.cumulative)
  if (_internal_has_cumulative()) {
    clear_has_constraint();
    ::operations_research::sat::CumulativeConstraintProto* temp = constraint_.cumulative_;
    constraint_.cumulative_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void ConstraintProto::unsafe_arena_set_allocated_cumulative(::operations_research::sat::CumulativeConstraintProto* cumulative) {
  clear_constraint();
  if (cumulative) {
    set_has_cumulative();
    constraint_.cumulative_ = cumulative;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:operations_research.sat.ConstraintProto.cumulative)
}
inline ::operations_research::sat::CumulativeConstraintProto* ConstraintProto::_internal_mutable_cumulative() {
  if (!_internal_has_cumulative()) {
    clear_constraint();
    set_has_cumulative();
    constraint_.cumulative_ = CreateMaybeMessage< ::operations_research::sat::CumulativeConstraintProto >(GetArena());
  }
  return constraint_.cumulative_;
}
inline ::operations_research::sat::CumulativeConstraintProto* ConstraintProto::mutable_cumulative() {
  // @@protoc_insertion_point(field_mutable:operations_research.sat.ConstraintProto.cumulative)
  return _internal_mutable_cumulative();
}

inline bool ConstraintProto::has_constraint() const {
  return constraint_case() != CONSTRAINT_NOT_SET;
}
inline void ConstraintProto::clear_has_constraint() {
  _oneof_case_[0] = CONSTRAINT_NOT_SET;
}
inline ConstraintProto::ConstraintCase ConstraintProto::constraint_case() const {
  return ConstraintProto::ConstraintCase(_oneof_case_[0]);
}
// -------------------------------------------------------------------

// CpObjectiveProto

// repeated int32 vars = 1;
inline int CpObjectiveProto::_internal_vars_size() const {
  return vars_.size();
}
inline int CpObjectiveProto::vars_size() const {
  return _internal_vars_size();
}
inline void CpObjectiveProto::clear_vars() {
  vars_.Clear();
}
inline ::PROTOBUF_NAMESPACE_ID::int32 CpObjectiveProto::_internal_vars(int index) const {
  return vars_.Get(index);
}
inline ::PROTOBUF_NAMESPACE_ID::int32 CpObjectiveProto::vars(int index) const {
  // @@protoc_insertion_point(field_get:operations_research.sat.CpObjectiveProto.vars)
  return _internal_vars(index);
}
inline void CpObjectiveProto::set_vars(int index, ::PROTOBUF_NAMESPACE_ID::int32 value) {
  vars_.Set(index, value);
  // @@protoc_insertion_point(field_set:operations_research.sat.CpObjectiveProto.vars)
}
inline void CpObjectiveProto::_internal_add_vars(::PROTOBUF_NAMESPACE_ID::int32 value) {
  vars_.Add(value);
}
inline void CpObjectiveProto::add_vars(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _internal_add_vars(value);
  // @@protoc_insertion_point(field_add:operations_research.sat.CpObjectiveProto.vars)
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
CpObjectiveProto::_internal_vars() const {
  return vars_;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
CpObjectiveProto::vars() const {
  // @@protoc_insertion_point(field_list:operations_research.sat.CpObjectiveProto.vars)
  return _internal_vars();
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
CpObjectiveProto::_internal_mutable_vars() {
  return &vars_;
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
CpObjectiveProto::mutable_vars() {
  // @@protoc_insertion_point(field_mutable_list:operations_research.sat.CpObjectiveProto.vars)
  return _internal_mutable_vars();
}

// repeated int64 coeffs = 4;
inline int CpObjectiveProto::_internal_coeffs_size() const {
  return coeffs_.size();
}
inline int CpObjectiveProto::coeffs_size() const {
  return _internal_coeffs_size();
}
inline void CpObjectiveProto::clear_coeffs() {
  coeffs_.Clear();
}
inline ::PROTOBUF_NAMESPACE_ID::int64 CpObjectiveProto::_internal_coeffs(int index) const {
  return coeffs_.Get(index);
}
inline ::PROTOBUF_NAMESPACE_ID::int64 CpObjectiveProto::coeffs(int index) const {
  // @@protoc_insertion_point(field_get:operations_research.sat.CpObjectiveProto.coeffs)
  return _internal_coeffs(index);
}
inline void CpObjectiveProto::set_coeffs(int index, ::PROTOBUF_NAMESPACE_ID::int64 value) {
  coeffs_.Set(index, value);
  // @@protoc_insertion_point(field_set:operations_research.sat.CpObjectiveProto.coeffs)
}
inline void CpObjectiveProto::_internal_add_coeffs(::PROTOBUF_NAMESPACE_ID::int64 value) {
  coeffs_.Add(value);
}
inline void CpObjectiveProto::add_coeffs(::PROTOBUF_NAMESPACE_ID::int64 value) {
  _internal_add_coeffs(value);
  // @@protoc_insertion_point(field_add:operations_research.sat.CpObjectiveProto.coeffs)
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >&
CpObjectiveProto::_internal_coeffs() const {
  return coeffs_;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >&
CpObjectiveProto::coeffs() const {
  // @@protoc_insertion_point(field_list:operations_research.sat.CpObjectiveProto.coeffs)
  return _internal_coeffs();
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >*
CpObjectiveProto::_internal_mutable_coeffs() {
  return &coeffs_;
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >*
CpObjectiveProto::mutable_coeffs() {
  // @@protoc_insertion_point(field_mutable_list:operations_research.sat.CpObjectiveProto.coeffs)
  return _internal_mutable_coeffs();
}

// double offset = 2;
inline void CpObjectiveProto::clear_offset() {
  offset_ = 0;
}
inline double CpObjectiveProto::_internal_offset() const {
  return offset_;
}
inline double CpObjectiveProto::offset() const {
  // @@protoc_insertion_point(field_get:operations_research.sat.CpObjectiveProto.offset)
  return _internal_offset();
}
inline void CpObjectiveProto::_internal_set_offset(double value) {
  
  offset_ = value;
}
inline void CpObjectiveProto::set_offset(double value) {
  _internal_set_offset(value);
  // @@protoc_insertion_point(field_set:operations_research.sat.CpObjectiveProto.offset)
}

// double scaling_factor = 3;
inline void CpObjectiveProto::clear_scaling_factor() {
  scaling_factor_ = 0;
}
inline double CpObjectiveProto::_internal_scaling_factor() const {
  return scaling_factor_;
}
inline double CpObjectiveProto::scaling_factor() const {
  // @@protoc_insertion_point(field_get:operations_research.sat.CpObjectiveProto.scaling_factor)
  return _internal_scaling_factor();
}
inline void CpObjectiveProto::_internal_set_scaling_factor(double value) {
  
  scaling_factor_ = value;
}
inline void CpObjectiveProto::set_scaling_factor(double value) {
  _internal_set_scaling_factor(value);
  // @@protoc_insertion_point(field_set:operations_research.sat.CpObjectiveProto.scaling_factor)
}

// repeated int64 domain = 5;
inline int CpObjectiveProto::_internal_domain_size() const {
  return domain_.size();
}
inline int CpObjectiveProto::domain_size() const {
  return _internal_domain_size();
}
inline void CpObjectiveProto::clear_domain() {
  domain_.Clear();
}
inline ::PROTOBUF_NAMESPACE_ID::int64 CpObjectiveProto::_internal_domain(int index) const {
  return domain_.Get(index);
}
inline ::PROTOBUF_NAMESPACE_ID::int64 CpObjectiveProto::domain(int index) const {
  // @@protoc_insertion_point(field_get:operations_research.sat.CpObjectiveProto.domain)
  return _internal_domain(index);
}
inline void CpObjectiveProto::set_domain(int index, ::PROTOBUF_NAMESPACE_ID::int64 value) {
  domain_.Set(index, value);
  // @@protoc_insertion_point(field_set:operations_research.sat.CpObjectiveProto.domain)
}
inline void CpObjectiveProto::_internal_add_domain(::PROTOBUF_NAMESPACE_ID::int64 value) {
  domain_.Add(value);
}
inline void CpObjectiveProto::add_domain(::PROTOBUF_NAMESPACE_ID::int64 value) {
  _internal_add_domain(value);
  // @@protoc_insertion_point(field_add:operations_research.sat.CpObjectiveProto.domain)
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >&
CpObjectiveProto::_internal_domain() const {
  return domain_;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >&
CpObjectiveProto::domain() const {
  // @@protoc_insertion_point(field_list:operations_research.sat.CpObjectiveProto.domain)
  return _internal_domain();
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >*
CpObjectiveProto::_internal_mutable_domain() {
  return &domain_;
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >*
CpObjectiveProto::mutable_domain() {
  // @@protoc_insertion_point(field_mutable_list:operations_research.sat.CpObjectiveProto.domain)
  return _internal_mutable_domain();
}

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

// DecisionStrategyProto_AffineTransformation

// int32 var = 1;
inline void DecisionStrategyProto_AffineTransformation::clear_var() {
  var_ = 0;
}
inline ::PROTOBUF_NAMESPACE_ID::int32 DecisionStrategyProto_AffineTransformation::_internal_var() const {
  return var_;
}
inline ::PROTOBUF_NAMESPACE_ID::int32 DecisionStrategyProto_AffineTransformation::var() const {
  // @@protoc_insertion_point(field_get:operations_research.sat.DecisionStrategyProto.AffineTransformation.var)
  return _internal_var();
}
inline void DecisionStrategyProto_AffineTransformation::_internal_set_var(::PROTOBUF_NAMESPACE_ID::int32 value) {
  
  var_ = value;
}
inline void DecisionStrategyProto_AffineTransformation::set_var(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _internal_set_var(value);
  // @@protoc_insertion_point(field_set:operations_research.sat.DecisionStrategyProto.AffineTransformation.var)
}

// int64 offset = 2;
inline void DecisionStrategyProto_AffineTransformation::clear_offset() {
  offset_ = PROTOBUF_LONGLONG(0);
}
inline ::PROTOBUF_NAMESPACE_ID::int64 DecisionStrategyProto_AffineTransformation::_internal_offset() const {
  return offset_;
}
inline ::PROTOBUF_NAMESPACE_ID::int64 DecisionStrategyProto_AffineTransformation::offset() const {
  // @@protoc_insertion_point(field_get:operations_research.sat.DecisionStrategyProto.AffineTransformation.offset)
  return _internal_offset();
}
inline void DecisionStrategyProto_AffineTransformation::_internal_set_offset(::PROTOBUF_NAMESPACE_ID::int64 value) {
  
  offset_ = value;
}
inline void DecisionStrategyProto_AffineTransformation::set_offset(::PROTOBUF_NAMESPACE_ID::int64 value) {
  _internal_set_offset(value);
  // @@protoc_insertion_point(field_set:operations_research.sat.DecisionStrategyProto.AffineTransformation.offset)
}

// int64 positive_coeff = 3;
inline void DecisionStrategyProto_AffineTransformation::clear_positive_coeff() {
  positive_coeff_ = PROTOBUF_LONGLONG(0);
}
inline ::PROTOBUF_NAMESPACE_ID::int64 DecisionStrategyProto_AffineTransformation::_internal_positive_coeff() const {
  return positive_coeff_;
}
inline ::PROTOBUF_NAMESPACE_ID::int64 DecisionStrategyProto_AffineTransformation::positive_coeff() const {
  // @@protoc_insertion_point(field_get:operations_research.sat.DecisionStrategyProto.AffineTransformation.positive_coeff)
  return _internal_positive_coeff();
}
inline void DecisionStrategyProto_AffineTransformation::_internal_set_positive_coeff(::PROTOBUF_NAMESPACE_ID::int64 value) {
  
  positive_coeff_ = value;
}
inline void DecisionStrategyProto_AffineTransformation::set_positive_coeff(::PROTOBUF_NAMESPACE_ID::int64 value) {
  _internal_set_positive_coeff(value);
  // @@protoc_insertion_point(field_set:operations_research.sat.DecisionStrategyProto.AffineTransformation.positive_coeff)
}

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

// DecisionStrategyProto

// repeated int32 variables = 1;
inline int DecisionStrategyProto::_internal_variables_size() const {
  return variables_.size();
}
inline int DecisionStrategyProto::variables_size() const {
  return _internal_variables_size();
}
inline void DecisionStrategyProto::clear_variables() {
  variables_.Clear();
}
inline ::PROTOBUF_NAMESPACE_ID::int32 DecisionStrategyProto::_internal_variables(int index) const {
  return variables_.Get(index);
}
inline ::PROTOBUF_NAMESPACE_ID::int32 DecisionStrategyProto::variables(int index) const {
  // @@protoc_insertion_point(field_get:operations_research.sat.DecisionStrategyProto.variables)
  return _internal_variables(index);
}
inline void DecisionStrategyProto::set_variables(int index, ::PROTOBUF_NAMESPACE_ID::int32 value) {
  variables_.Set(index, value);
  // @@protoc_insertion_point(field_set:operations_research.sat.DecisionStrategyProto.variables)
}
inline void DecisionStrategyProto::_internal_add_variables(::PROTOBUF_NAMESPACE_ID::int32 value) {
  variables_.Add(value);
}
inline void DecisionStrategyProto::add_variables(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _internal_add_variables(value);
  // @@protoc_insertion_point(field_add:operations_research.sat.DecisionStrategyProto.variables)
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
DecisionStrategyProto::_internal_variables() const {
  return variables_;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
DecisionStrategyProto::variables() const {
  // @@protoc_insertion_point(field_list:operations_research.sat.DecisionStrategyProto.variables)
  return _internal_variables();
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
DecisionStrategyProto::_internal_mutable_variables() {
  return &variables_;
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
DecisionStrategyProto::mutable_variables() {
  // @@protoc_insertion_point(field_mutable_list:operations_research.sat.DecisionStrategyProto.variables)
  return _internal_mutable_variables();
}

// .operations_research.sat.DecisionStrategyProto.VariableSelectionStrategy variable_selection_strategy = 2;
inline void DecisionStrategyProto::clear_variable_selection_strategy() {
  variable_selection_strategy_ = 0;
}
inline ::operations_research::sat::DecisionStrategyProto_VariableSelectionStrategy DecisionStrategyProto::_internal_variable_selection_strategy() const {
  return static_cast< ::operations_research::sat::DecisionStrategyProto_VariableSelectionStrategy >(variable_selection_strategy_);
}
inline ::operations_research::sat::DecisionStrategyProto_VariableSelectionStrategy DecisionStrategyProto::variable_selection_strategy() const {
  // @@protoc_insertion_point(field_get:operations_research.sat.DecisionStrategyProto.variable_selection_strategy)
  return _internal_variable_selection_strategy();
}
inline void DecisionStrategyProto::_internal_set_variable_selection_strategy(::operations_research::sat::DecisionStrategyProto_VariableSelectionStrategy value) {
  
  variable_selection_strategy_ = value;
}
inline void DecisionStrategyProto::set_variable_selection_strategy(::operations_research::sat::DecisionStrategyProto_VariableSelectionStrategy value) {
  _internal_set_variable_selection_strategy(value);
  // @@protoc_insertion_point(field_set:operations_research.sat.DecisionStrategyProto.variable_selection_strategy)
}

// .operations_research.sat.DecisionStrategyProto.DomainReductionStrategy domain_reduction_strategy = 3;
inline void DecisionStrategyProto::clear_domain_reduction_strategy() {
  domain_reduction_strategy_ = 0;
}
inline ::operations_research::sat::DecisionStrategyProto_DomainReductionStrategy DecisionStrategyProto::_internal_domain_reduction_strategy() const {
  return static_cast< ::operations_research::sat::DecisionStrategyProto_DomainReductionStrategy >(domain_reduction_strategy_);
}
inline ::operations_research::sat::DecisionStrategyProto_DomainReductionStrategy DecisionStrategyProto::domain_reduction_strategy() const {
  // @@protoc_insertion_point(field_get:operations_research.sat.DecisionStrategyProto.domain_reduction_strategy)
  return _internal_domain_reduction_strategy();
}
inline void DecisionStrategyProto::_internal_set_domain_reduction_strategy(::operations_research::sat::DecisionStrategyProto_DomainReductionStrategy value) {
  
  domain_reduction_strategy_ = value;
}
inline void DecisionStrategyProto::set_domain_reduction_strategy(::operations_research::sat::DecisionStrategyProto_DomainReductionStrategy value) {
  _internal_set_domain_reduction_strategy(value);
  // @@protoc_insertion_point(field_set:operations_research.sat.DecisionStrategyProto.domain_reduction_strategy)
}

// repeated .operations_research.sat.DecisionStrategyProto.AffineTransformation transformations = 4;
inline int DecisionStrategyProto::_internal_transformations_size() const {
  return transformations_.size();
}
inline int DecisionStrategyProto::transformations_size() const {
  return _internal_transformations_size();
}
inline void DecisionStrategyProto::clear_transformations() {
  transformations_.Clear();
}
inline ::operations_research::sat::DecisionStrategyProto_AffineTransformation* DecisionStrategyProto::mutable_transformations(int index) {
  // @@protoc_insertion_point(field_mutable:operations_research.sat.DecisionStrategyProto.transformations)
  return transformations_.Mutable(index);
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::operations_research::sat::DecisionStrategyProto_AffineTransformation >*
DecisionStrategyProto::mutable_transformations() {
  // @@protoc_insertion_point(field_mutable_list:operations_research.sat.DecisionStrategyProto.transformations)
  return &transformations_;
}
inline const ::operations_research::sat::DecisionStrategyProto_AffineTransformation& DecisionStrategyProto::_internal_transformations(int index) const {
  return transformations_.Get(index);
}
inline const ::operations_research::sat::DecisionStrategyProto_AffineTransformation& DecisionStrategyProto::transformations(int index) const {
  // @@protoc_insertion_point(field_get:operations_research.sat.DecisionStrategyProto.transformations)
  return _internal_transformations(index);
}
inline ::operations_research::sat::DecisionStrategyProto_AffineTransformation* DecisionStrategyProto::_internal_add_transformations() {
  return transformations_.Add();
}
inline ::operations_research::sat::DecisionStrategyProto_AffineTransformation* DecisionStrategyProto::add_transformations() {
  // @@protoc_insertion_point(field_add:operations_research.sat.DecisionStrategyProto.transformations)
  return _internal_add_transformations();
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::operations_research::sat::DecisionStrategyProto_AffineTransformation >&
DecisionStrategyProto::transformations() const {
  // @@protoc_insertion_point(field_list:operations_research.sat.DecisionStrategyProto.transformations)
  return transformations_;
}

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

// PartialVariableAssignment

// repeated int32 vars = 1;
inline int PartialVariableAssignment::_internal_vars_size() const {
  return vars_.size();
}
inline int PartialVariableAssignment::vars_size() const {
  return _internal_vars_size();
}
inline void PartialVariableAssignment::clear_vars() {
  vars_.Clear();
}
inline ::PROTOBUF_NAMESPACE_ID::int32 PartialVariableAssignment::_internal_vars(int index) const {
  return vars_.Get(index);
}
inline ::PROTOBUF_NAMESPACE_ID::int32 PartialVariableAssignment::vars(int index) const {
  // @@protoc_insertion_point(field_get:operations_research.sat.PartialVariableAssignment.vars)
  return _internal_vars(index);
}
inline void PartialVariableAssignment::set_vars(int index, ::PROTOBUF_NAMESPACE_ID::int32 value) {
  vars_.Set(index, value);
  // @@protoc_insertion_point(field_set:operations_research.sat.PartialVariableAssignment.vars)
}
inline void PartialVariableAssignment::_internal_add_vars(::PROTOBUF_NAMESPACE_ID::int32 value) {
  vars_.Add(value);
}
inline void PartialVariableAssignment::add_vars(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _internal_add_vars(value);
  // @@protoc_insertion_point(field_add:operations_research.sat.PartialVariableAssignment.vars)
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
PartialVariableAssignment::_internal_vars() const {
  return vars_;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
PartialVariableAssignment::vars() const {
  // @@protoc_insertion_point(field_list:operations_research.sat.PartialVariableAssignment.vars)
  return _internal_vars();
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
PartialVariableAssignment::_internal_mutable_vars() {
  return &vars_;
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
PartialVariableAssignment::mutable_vars() {
  // @@protoc_insertion_point(field_mutable_list:operations_research.sat.PartialVariableAssignment.vars)
  return _internal_mutable_vars();
}

// repeated int64 values = 2;
inline int PartialVariableAssignment::_internal_values_size() const {
  return values_.size();
}
inline int PartialVariableAssignment::values_size() const {
  return _internal_values_size();
}
inline void PartialVariableAssignment::clear_values() {
  values_.Clear();
}
inline ::PROTOBUF_NAMESPACE_ID::int64 PartialVariableAssignment::_internal_values(int index) const {
  return values_.Get(index);
}
inline ::PROTOBUF_NAMESPACE_ID::int64 PartialVariableAssignment::values(int index) const {
  // @@protoc_insertion_point(field_get:operations_research.sat.PartialVariableAssignment.values)
  return _internal_values(index);
}
inline void PartialVariableAssignment::set_values(int index, ::PROTOBUF_NAMESPACE_ID::int64 value) {
  values_.Set(index, value);
  // @@protoc_insertion_point(field_set:operations_research.sat.PartialVariableAssignment.values)
}
inline void PartialVariableAssignment::_internal_add_values(::PROTOBUF_NAMESPACE_ID::int64 value) {
  values_.Add(value);
}
inline void PartialVariableAssignment::add_values(::PROTOBUF_NAMESPACE_ID::int64 value) {
  _internal_add_values(value);
  // @@protoc_insertion_point(field_add:operations_research.sat.PartialVariableAssignment.values)
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >&
PartialVariableAssignment::_internal_values() const {
  return values_;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >&
PartialVariableAssignment::values() const {
  // @@protoc_insertion_point(field_list:operations_research.sat.PartialVariableAssignment.values)
  return _internal_values();
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >*
PartialVariableAssignment::_internal_mutable_values() {
  return &values_;
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >*
PartialVariableAssignment::mutable_values() {
  // @@protoc_insertion_point(field_mutable_list:operations_research.sat.PartialVariableAssignment.values)
  return _internal_mutable_values();
}

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

// CpModelProto

// string name = 1;
inline void CpModelProto::clear_name() {
  name_.ClearToEmpty(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena());
}
inline const std::string& CpModelProto::name() const {
  // @@protoc_insertion_point(field_get:operations_research.sat.CpModelProto.name)
  return _internal_name();
}
inline void CpModelProto::set_name(const std::string& value) {
  _internal_set_name(value);
  // @@protoc_insertion_point(field_set:operations_research.sat.CpModelProto.name)
}
inline std::string* CpModelProto::mutable_name() {
  // @@protoc_insertion_point(field_mutable:operations_research.sat.CpModelProto.name)
  return _internal_mutable_name();
}
inline const std::string& CpModelProto::_internal_name() const {
  return name_.Get();
}
inline void CpModelProto::_internal_set_name(const std::string& value) {
  
  name_.Set(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), value, GetArena());
}
inline void CpModelProto::set_name(std::string&& value) {
  
  name_.Set(
    &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::move(value), GetArena());
  // @@protoc_insertion_point(field_set_rvalue:operations_research.sat.CpModelProto.name)
}
inline void CpModelProto::set_name(const char* value) {
  GOOGLE_DCHECK(value != nullptr);
  
  name_.Set(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::string(value),
              GetArena());
  // @@protoc_insertion_point(field_set_char:operations_research.sat.CpModelProto.name)
}
inline void CpModelProto::set_name(const char* value,
    size_t size) {
  
  name_.Set(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::string(
      reinterpret_cast<const char*>(value), size), GetArena());
  // @@protoc_insertion_point(field_set_pointer:operations_research.sat.CpModelProto.name)
}
inline std::string* CpModelProto::_internal_mutable_name() {
  
  return name_.Mutable(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena());
}
inline std::string* CpModelProto::release_name() {
  // @@protoc_insertion_point(field_release:operations_research.sat.CpModelProto.name)
  return name_.Release(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena());
}
inline void CpModelProto::set_allocated_name(std::string* name) {
  if (name != nullptr) {
    
  } else {
    
  }
  name_.SetAllocated(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), name,
      GetArena());
  // @@protoc_insertion_point(field_set_allocated:operations_research.sat.CpModelProto.name)
}
inline std::string* CpModelProto::unsafe_arena_release_name() {
  // @@protoc_insertion_point(field_unsafe_arena_release:operations_research.sat.CpModelProto.name)
  GOOGLE_DCHECK(GetArena() != nullptr);
  
  return name_.UnsafeArenaRelease(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(),
      GetArena());
}
inline void CpModelProto::unsafe_arena_set_allocated_name(
    std::string* name) {
  GOOGLE_DCHECK(GetArena() != nullptr);
  if (name != nullptr) {
    
  } else {
    
  }
  name_.UnsafeArenaSetAllocated(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(),
      name, GetArena());
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:operations_research.sat.CpModelProto.name)
}

// repeated .operations_research.sat.IntegerVariableProto variables = 2;
inline int CpModelProto::_internal_variables_size() const {
  return variables_.size();
}
inline int CpModelProto::variables_size() const {
  return _internal_variables_size();
}
inline void CpModelProto::clear_variables() {
  variables_.Clear();
}
inline ::operations_research::sat::IntegerVariableProto* CpModelProto::mutable_variables(int index) {
  // @@protoc_insertion_point(field_mutable:operations_research.sat.CpModelProto.variables)
  return variables_.Mutable(index);
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::operations_research::sat::IntegerVariableProto >*
CpModelProto::mutable_variables() {
  // @@protoc_insertion_point(field_mutable_list:operations_research.sat.CpModelProto.variables)
  return &variables_;
}
inline const ::operations_research::sat::IntegerVariableProto& CpModelProto::_internal_variables(int index) const {
  return variables_.Get(index);
}
inline const ::operations_research::sat::IntegerVariableProto& CpModelProto::variables(int index) const {
  // @@protoc_insertion_point(field_get:operations_research.sat.CpModelProto.variables)
  return _internal_variables(index);
}
inline ::operations_research::sat::IntegerVariableProto* CpModelProto::_internal_add_variables() {
  return variables_.Add();
}
inline ::operations_research::sat::IntegerVariableProto* CpModelProto::add_variables() {
  // @@protoc_insertion_point(field_add:operations_research.sat.CpModelProto.variables)
  return _internal_add_variables();
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::operations_research::sat::IntegerVariableProto >&
CpModelProto::variables() const {
  // @@protoc_insertion_point(field_list:operations_research.sat.CpModelProto.variables)
  return variables_;
}

// repeated .operations_research.sat.ConstraintProto constraints = 3;
inline int CpModelProto::_internal_constraints_size() const {
  return constraints_.size();
}
inline int CpModelProto::constraints_size() const {
  return _internal_constraints_size();
}
inline void CpModelProto::clear_constraints() {
  constraints_.Clear();
}
inline ::operations_research::sat::ConstraintProto* CpModelProto::mutable_constraints(int index) {
  // @@protoc_insertion_point(field_mutable:operations_research.sat.CpModelProto.constraints)
  return constraints_.Mutable(index);
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::operations_research::sat::ConstraintProto >*
CpModelProto::mutable_constraints() {
  // @@protoc_insertion_point(field_mutable_list:operations_research.sat.CpModelProto.constraints)
  return &constraints_;
}
inline const ::operations_research::sat::ConstraintProto& CpModelProto::_internal_constraints(int index) const {
  return constraints_.Get(index);
}
inline const ::operations_research::sat::ConstraintProto& CpModelProto::constraints(int index) const {
  // @@protoc_insertion_point(field_get:operations_research.sat.CpModelProto.constraints)
  return _internal_constraints(index);
}
inline ::operations_research::sat::ConstraintProto* CpModelProto::_internal_add_constraints() {
  return constraints_.Add();
}
inline ::operations_research::sat::ConstraintProto* CpModelProto::add_constraints() {
  // @@protoc_insertion_point(field_add:operations_research.sat.CpModelProto.constraints)
  return _internal_add_constraints();
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::operations_research::sat::ConstraintProto >&
CpModelProto::constraints() const {
  // @@protoc_insertion_point(field_list:operations_research.sat.CpModelProto.constraints)
  return constraints_;
}

// .operations_research.sat.CpObjectiveProto objective = 4;
inline bool CpModelProto::_internal_has_objective() const {
  return this != internal_default_instance() && objective_ != nullptr;
}
inline bool CpModelProto::has_objective() const {
  return _internal_has_objective();
}
inline void CpModelProto::clear_objective() {
  if (GetArena() == nullptr && objective_ != nullptr) {
    delete objective_;
  }
  objective_ = nullptr;
}
inline const ::operations_research::sat::CpObjectiveProto& CpModelProto::_internal_objective() const {
  const ::operations_research::sat::CpObjectiveProto* p = objective_;
  return p != nullptr ? *p : *reinterpret_cast<const ::operations_research::sat::CpObjectiveProto*>(
      &::operations_research::sat::_CpObjectiveProto_default_instance_);
}
inline const ::operations_research::sat::CpObjectiveProto& CpModelProto::objective() const {
  // @@protoc_insertion_point(field_get:operations_research.sat.CpModelProto.objective)
  return _internal_objective();
}
inline void CpModelProto::unsafe_arena_set_allocated_objective(
    ::operations_research::sat::CpObjectiveProto* objective) {
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(objective_);
  }
  objective_ = objective;
  if (objective) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:operations_research.sat.CpModelProto.objective)
}
inline ::operations_research::sat::CpObjectiveProto* CpModelProto::release_objective() {
  auto temp = unsafe_arena_release_objective();
  if (GetArena() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
  return temp;
}
inline ::operations_research::sat::CpObjectiveProto* CpModelProto::unsafe_arena_release_objective() {
  // @@protoc_insertion_point(field_release:operations_research.sat.CpModelProto.objective)
  
  ::operations_research::sat::CpObjectiveProto* temp = objective_;
  objective_ = nullptr;
  return temp;
}
inline ::operations_research::sat::CpObjectiveProto* CpModelProto::_internal_mutable_objective() {
  
  if (objective_ == nullptr) {
    auto* p = CreateMaybeMessage<::operations_research::sat::CpObjectiveProto>(GetArena());
    objective_ = p;
  }
  return objective_;
}
inline ::operations_research::sat::CpObjectiveProto* CpModelProto::mutable_objective() {
  // @@protoc_insertion_point(field_mutable:operations_research.sat.CpModelProto.objective)
  return _internal_mutable_objective();
}
inline void CpModelProto::set_allocated_objective(::operations_research::sat::CpObjectiveProto* objective) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArena();
  if (message_arena == nullptr) {
    delete objective_;
  }
  if (objective) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
      ::PROTOBUF_NAMESPACE_ID::Arena::GetArena(objective);
    if (message_arena != submessage_arena) {
      objective = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, objective, submessage_arena);
    }
    
  } else {
    
  }
  objective_ = objective;
  // @@protoc_insertion_point(field_set_allocated:operations_research.sat.CpModelProto.objective)
}

// repeated .operations_research.sat.DecisionStrategyProto search_strategy = 5;
inline int CpModelProto::_internal_search_strategy_size() const {
  return search_strategy_.size();
}
inline int CpModelProto::search_strategy_size() const {
  return _internal_search_strategy_size();
}
inline void CpModelProto::clear_search_strategy() {
  search_strategy_.Clear();
}
inline ::operations_research::sat::DecisionStrategyProto* CpModelProto::mutable_search_strategy(int index) {
  // @@protoc_insertion_point(field_mutable:operations_research.sat.CpModelProto.search_strategy)
  return search_strategy_.Mutable(index);
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::operations_research::sat::DecisionStrategyProto >*
CpModelProto::mutable_search_strategy() {
  // @@protoc_insertion_point(field_mutable_list:operations_research.sat.CpModelProto.search_strategy)
  return &search_strategy_;
}
inline const ::operations_research::sat::DecisionStrategyProto& CpModelProto::_internal_search_strategy(int index) const {
  return search_strategy_.Get(index);
}
inline const ::operations_research::sat::DecisionStrategyProto& CpModelProto::search_strategy(int index) const {
  // @@protoc_insertion_point(field_get:operations_research.sat.CpModelProto.search_strategy)
  return _internal_search_strategy(index);
}
inline ::operations_research::sat::DecisionStrategyProto* CpModelProto::_internal_add_search_strategy() {
  return search_strategy_.Add();
}
inline ::operations_research::sat::DecisionStrategyProto* CpModelProto::add_search_strategy() {
  // @@protoc_insertion_point(field_add:operations_research.sat.CpModelProto.search_strategy)
  return _internal_add_search_strategy();
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::operations_research::sat::DecisionStrategyProto >&
CpModelProto::search_strategy() const {
  // @@protoc_insertion_point(field_list:operations_research.sat.CpModelProto.search_strategy)
  return search_strategy_;
}

// .operations_research.sat.PartialVariableAssignment solution_hint = 6;
inline bool CpModelProto::_internal_has_solution_hint() const {
  return this != internal_default_instance() && solution_hint_ != nullptr;
}
inline bool CpModelProto::has_solution_hint() const {
  return _internal_has_solution_hint();
}
inline void CpModelProto::clear_solution_hint() {
  if (GetArena() == nullptr && solution_hint_ != nullptr) {
    delete solution_hint_;
  }
  solution_hint_ = nullptr;
}
inline const ::operations_research::sat::PartialVariableAssignment& CpModelProto::_internal_solution_hint() const {
  const ::operations_research::sat::PartialVariableAssignment* p = solution_hint_;
  return p != nullptr ? *p : *reinterpret_cast<const ::operations_research::sat::PartialVariableAssignment*>(
      &::operations_research::sat::_PartialVariableAssignment_default_instance_);
}
inline const ::operations_research::sat::PartialVariableAssignment& CpModelProto::solution_hint() const {
  // @@protoc_insertion_point(field_get:operations_research.sat.CpModelProto.solution_hint)
  return _internal_solution_hint();
}
inline void CpModelProto::unsafe_arena_set_allocated_solution_hint(
    ::operations_research::sat::PartialVariableAssignment* solution_hint) {
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(solution_hint_);
  }
  solution_hint_ = solution_hint;
  if (solution_hint) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:operations_research.sat.CpModelProto.solution_hint)
}
inline ::operations_research::sat::PartialVariableAssignment* CpModelProto::release_solution_hint() {
  auto temp = unsafe_arena_release_solution_hint();
  if (GetArena() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
  return temp;
}
inline ::operations_research::sat::PartialVariableAssignment* CpModelProto::unsafe_arena_release_solution_hint() {
  // @@protoc_insertion_point(field_release:operations_research.sat.CpModelProto.solution_hint)
  
  ::operations_research::sat::PartialVariableAssignment* temp = solution_hint_;
  solution_hint_ = nullptr;
  return temp;
}
inline ::operations_research::sat::PartialVariableAssignment* CpModelProto::_internal_mutable_solution_hint() {
  
  if (solution_hint_ == nullptr) {
    auto* p = CreateMaybeMessage<::operations_research::sat::PartialVariableAssignment>(GetArena());
    solution_hint_ = p;
  }
  return solution_hint_;
}
inline ::operations_research::sat::PartialVariableAssignment* CpModelProto::mutable_solution_hint() {
  // @@protoc_insertion_point(field_mutable:operations_research.sat.CpModelProto.solution_hint)
  return _internal_mutable_solution_hint();
}
inline void CpModelProto::set_allocated_solution_hint(::operations_research::sat::PartialVariableAssignment* solution_hint) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArena();
  if (message_arena == nullptr) {
    delete solution_hint_;
  }
  if (solution_hint) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
      ::PROTOBUF_NAMESPACE_ID::Arena::GetArena(solution_hint);
    if (message_arena != submessage_arena) {
      solution_hint = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, solution_hint, submessage_arena);
    }
    
  } else {
    
  }
  solution_hint_ = solution_hint;
  // @@protoc_insertion_point(field_set_allocated:operations_research.sat.CpModelProto.solution_hint)
}

// repeated int32 assumptions = 7;
inline int CpModelProto::_internal_assumptions_size() const {
  return assumptions_.size();
}
inline int CpModelProto::assumptions_size() const {
  return _internal_assumptions_size();
}
inline void CpModelProto::clear_assumptions() {
  assumptions_.Clear();
}
inline ::PROTOBUF_NAMESPACE_ID::int32 CpModelProto::_internal_assumptions(int index) const {
  return assumptions_.Get(index);
}
inline ::PROTOBUF_NAMESPACE_ID::int32 CpModelProto::assumptions(int index) const {
  // @@protoc_insertion_point(field_get:operations_research.sat.CpModelProto.assumptions)
  return _internal_assumptions(index);
}
inline void CpModelProto::set_assumptions(int index, ::PROTOBUF_NAMESPACE_ID::int32 value) {
  assumptions_.Set(index, value);
  // @@protoc_insertion_point(field_set:operations_research.sat.CpModelProto.assumptions)
}
inline void CpModelProto::_internal_add_assumptions(::PROTOBUF_NAMESPACE_ID::int32 value) {
  assumptions_.Add(value);
}
inline void CpModelProto::add_assumptions(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _internal_add_assumptions(value);
  // @@protoc_insertion_point(field_add:operations_research.sat.CpModelProto.assumptions)
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
CpModelProto::_internal_assumptions() const {
  return assumptions_;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
CpModelProto::assumptions() const {
  // @@protoc_insertion_point(field_list:operations_research.sat.CpModelProto.assumptions)
  return _internal_assumptions();
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
CpModelProto::_internal_mutable_assumptions() {
  return &assumptions_;
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
CpModelProto::mutable_assumptions() {
  // @@protoc_insertion_point(field_mutable_list:operations_research.sat.CpModelProto.assumptions)
  return _internal_mutable_assumptions();
}

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

// CpSolverResponse

// .operations_research.sat.CpSolverStatus status = 1;
inline void CpSolverResponse::clear_status() {
  status_ = 0;
}
inline ::operations_research::sat::CpSolverStatus CpSolverResponse::_internal_status() const {
  return static_cast< ::operations_research::sat::CpSolverStatus >(status_);
}
inline ::operations_research::sat::CpSolverStatus CpSolverResponse::status() const {
  // @@protoc_insertion_point(field_get:operations_research.sat.CpSolverResponse.status)
  return _internal_status();
}
inline void CpSolverResponse::_internal_set_status(::operations_research::sat::CpSolverStatus value) {
  
  status_ = value;
}
inline void CpSolverResponse::set_status(::operations_research::sat::CpSolverStatus value) {
  _internal_set_status(value);
  // @@protoc_insertion_point(field_set:operations_research.sat.CpSolverResponse.status)
}

// repeated int64 solution = 2;
inline int CpSolverResponse::_internal_solution_size() const {
  return solution_.size();
}
inline int CpSolverResponse::solution_size() const {
  return _internal_solution_size();
}
inline void CpSolverResponse::clear_solution() {
  solution_.Clear();
}
inline ::PROTOBUF_NAMESPACE_ID::int64 CpSolverResponse::_internal_solution(int index) const {
  return solution_.Get(index);
}
inline ::PROTOBUF_NAMESPACE_ID::int64 CpSolverResponse::solution(int index) const {
  // @@protoc_insertion_point(field_get:operations_research.sat.CpSolverResponse.solution)
  return _internal_solution(index);
}
inline void CpSolverResponse::set_solution(int index, ::PROTOBUF_NAMESPACE_ID::int64 value) {
  solution_.Set(index, value);
  // @@protoc_insertion_point(field_set:operations_research.sat.CpSolverResponse.solution)
}
inline void CpSolverResponse::_internal_add_solution(::PROTOBUF_NAMESPACE_ID::int64 value) {
  solution_.Add(value);
}
inline void CpSolverResponse::add_solution(::PROTOBUF_NAMESPACE_ID::int64 value) {
  _internal_add_solution(value);
  // @@protoc_insertion_point(field_add:operations_research.sat.CpSolverResponse.solution)
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >&
CpSolverResponse::_internal_solution() const {
  return solution_;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >&
CpSolverResponse::solution() const {
  // @@protoc_insertion_point(field_list:operations_research.sat.CpSolverResponse.solution)
  return _internal_solution();
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >*
CpSolverResponse::_internal_mutable_solution() {
  return &solution_;
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >*
CpSolverResponse::mutable_solution() {
  // @@protoc_insertion_point(field_mutable_list:operations_research.sat.CpSolverResponse.solution)
  return _internal_mutable_solution();
}

// double objective_value = 3;
inline void CpSolverResponse::clear_objective_value() {
  objective_value_ = 0;
}
inline double CpSolverResponse::_internal_objective_value() const {
  return objective_value_;
}
inline double CpSolverResponse::objective_value() const {
  // @@protoc_insertion_point(field_get:operations_research.sat.CpSolverResponse.objective_value)
  return _internal_objective_value();
}
inline void CpSolverResponse::_internal_set_objective_value(double value) {
  
  objective_value_ = value;
}
inline void CpSolverResponse::set_objective_value(double value) {
  _internal_set_objective_value(value);
  // @@protoc_insertion_point(field_set:operations_research.sat.CpSolverResponse.objective_value)
}

// double best_objective_bound = 4;
inline void CpSolverResponse::clear_best_objective_bound() {
  best_objective_bound_ = 0;
}
inline double CpSolverResponse::_internal_best_objective_bound() const {
  return best_objective_bound_;
}
inline double CpSolverResponse::best_objective_bound() const {
  // @@protoc_insertion_point(field_get:operations_research.sat.CpSolverResponse.best_objective_bound)
  return _internal_best_objective_bound();
}
inline void CpSolverResponse::_internal_set_best_objective_bound(double value) {
  
  best_objective_bound_ = value;
}
inline void CpSolverResponse::set_best_objective_bound(double value) {
  _internal_set_best_objective_bound(value);
  // @@protoc_insertion_point(field_set:operations_research.sat.CpSolverResponse.best_objective_bound)
}

// repeated int64 solution_lower_bounds = 18;
inline int CpSolverResponse::_internal_solution_lower_bounds_size() const {
  return solution_lower_bounds_.size();
}
inline int CpSolverResponse::solution_lower_bounds_size() const {
  return _internal_solution_lower_bounds_size();
}
inline void CpSolverResponse::clear_solution_lower_bounds() {
  solution_lower_bounds_.Clear();
}
inline ::PROTOBUF_NAMESPACE_ID::int64 CpSolverResponse::_internal_solution_lower_bounds(int index) const {
  return solution_lower_bounds_.Get(index);
}
inline ::PROTOBUF_NAMESPACE_ID::int64 CpSolverResponse::solution_lower_bounds(int index) const {
  // @@protoc_insertion_point(field_get:operations_research.sat.CpSolverResponse.solution_lower_bounds)
  return _internal_solution_lower_bounds(index);
}
inline void CpSolverResponse::set_solution_lower_bounds(int index, ::PROTOBUF_NAMESPACE_ID::int64 value) {
  solution_lower_bounds_.Set(index, value);
  // @@protoc_insertion_point(field_set:operations_research.sat.CpSolverResponse.solution_lower_bounds)
}
inline void CpSolverResponse::_internal_add_solution_lower_bounds(::PROTOBUF_NAMESPACE_ID::int64 value) {
  solution_lower_bounds_.Add(value);
}
inline void CpSolverResponse::add_solution_lower_bounds(::PROTOBUF_NAMESPACE_ID::int64 value) {
  _internal_add_solution_lower_bounds(value);
  // @@protoc_insertion_point(field_add:operations_research.sat.CpSolverResponse.solution_lower_bounds)
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >&
CpSolverResponse::_internal_solution_lower_bounds() const {
  return solution_lower_bounds_;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >&
CpSolverResponse::solution_lower_bounds() const {
  // @@protoc_insertion_point(field_list:operations_research.sat.CpSolverResponse.solution_lower_bounds)
  return _internal_solution_lower_bounds();
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >*
CpSolverResponse::_internal_mutable_solution_lower_bounds() {
  return &solution_lower_bounds_;
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >*
CpSolverResponse::mutable_solution_lower_bounds() {
  // @@protoc_insertion_point(field_mutable_list:operations_research.sat.CpSolverResponse.solution_lower_bounds)
  return _internal_mutable_solution_lower_bounds();
}

// repeated int64 solution_upper_bounds = 19;
inline int CpSolverResponse::_internal_solution_upper_bounds_size() const {
  return solution_upper_bounds_.size();
}
inline int CpSolverResponse::solution_upper_bounds_size() const {
  return _internal_solution_upper_bounds_size();
}
inline void CpSolverResponse::clear_solution_upper_bounds() {
  solution_upper_bounds_.Clear();
}
inline ::PROTOBUF_NAMESPACE_ID::int64 CpSolverResponse::_internal_solution_upper_bounds(int index) const {
  return solution_upper_bounds_.Get(index);
}
inline ::PROTOBUF_NAMESPACE_ID::int64 CpSolverResponse::solution_upper_bounds(int index) const {
  // @@protoc_insertion_point(field_get:operations_research.sat.CpSolverResponse.solution_upper_bounds)
  return _internal_solution_upper_bounds(index);
}
inline void CpSolverResponse::set_solution_upper_bounds(int index, ::PROTOBUF_NAMESPACE_ID::int64 value) {
  solution_upper_bounds_.Set(index, value);
  // @@protoc_insertion_point(field_set:operations_research.sat.CpSolverResponse.solution_upper_bounds)
}
inline void CpSolverResponse::_internal_add_solution_upper_bounds(::PROTOBUF_NAMESPACE_ID::int64 value) {
  solution_upper_bounds_.Add(value);
}
inline void CpSolverResponse::add_solution_upper_bounds(::PROTOBUF_NAMESPACE_ID::int64 value) {
  _internal_add_solution_upper_bounds(value);
  // @@protoc_insertion_point(field_add:operations_research.sat.CpSolverResponse.solution_upper_bounds)
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >&
CpSolverResponse::_internal_solution_upper_bounds() const {
  return solution_upper_bounds_;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >&
CpSolverResponse::solution_upper_bounds() const {
  // @@protoc_insertion_point(field_list:operations_research.sat.CpSolverResponse.solution_upper_bounds)
  return _internal_solution_upper_bounds();
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >*
CpSolverResponse::_internal_mutable_solution_upper_bounds() {
  return &solution_upper_bounds_;
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >*
CpSolverResponse::mutable_solution_upper_bounds() {
  // @@protoc_insertion_point(field_mutable_list:operations_research.sat.CpSolverResponse.solution_upper_bounds)
  return _internal_mutable_solution_upper_bounds();
}

// repeated .operations_research.sat.IntegerVariableProto tightened_variables = 21;
inline int CpSolverResponse::_internal_tightened_variables_size() const {
  return tightened_variables_.size();
}
inline int CpSolverResponse::tightened_variables_size() const {
  return _internal_tightened_variables_size();
}
inline void CpSolverResponse::clear_tightened_variables() {
  tightened_variables_.Clear();
}
inline ::operations_research::sat::IntegerVariableProto* CpSolverResponse::mutable_tightened_variables(int index) {
  // @@protoc_insertion_point(field_mutable:operations_research.sat.CpSolverResponse.tightened_variables)
  return tightened_variables_.Mutable(index);
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::operations_research::sat::IntegerVariableProto >*
CpSolverResponse::mutable_tightened_variables() {
  // @@protoc_insertion_point(field_mutable_list:operations_research.sat.CpSolverResponse.tightened_variables)
  return &tightened_variables_;
}
inline const ::operations_research::sat::IntegerVariableProto& CpSolverResponse::_internal_tightened_variables(int index) const {
  return tightened_variables_.Get(index);
}
inline const ::operations_research::sat::IntegerVariableProto& CpSolverResponse::tightened_variables(int index) const {
  // @@protoc_insertion_point(field_get:operations_research.sat.CpSolverResponse.tightened_variables)
  return _internal_tightened_variables(index);
}
inline ::operations_research::sat::IntegerVariableProto* CpSolverResponse::_internal_add_tightened_variables() {
  return tightened_variables_.Add();
}
inline ::operations_research::sat::IntegerVariableProto* CpSolverResponse::add_tightened_variables() {
  // @@protoc_insertion_point(field_add:operations_research.sat.CpSolverResponse.tightened_variables)
  return _internal_add_tightened_variables();
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::operations_research::sat::IntegerVariableProto >&
CpSolverResponse::tightened_variables() const {
  // @@protoc_insertion_point(field_list:operations_research.sat.CpSolverResponse.tightened_variables)
  return tightened_variables_;
}

// repeated int32 sufficient_assumptions_for_infeasibility = 23;
inline int CpSolverResponse::_internal_sufficient_assumptions_for_infeasibility_size() const {
  return sufficient_assumptions_for_infeasibility_.size();
}
inline int CpSolverResponse::sufficient_assumptions_for_infeasibility_size() const {
  return _internal_sufficient_assumptions_for_infeasibility_size();
}
inline void CpSolverResponse::clear_sufficient_assumptions_for_infeasibility() {
  sufficient_assumptions_for_infeasibility_.Clear();
}
inline ::PROTOBUF_NAMESPACE_ID::int32 CpSolverResponse::_internal_sufficient_assumptions_for_infeasibility(int index) const {
  return sufficient_assumptions_for_infeasibility_.Get(index);
}
inline ::PROTOBUF_NAMESPACE_ID::int32 CpSolverResponse::sufficient_assumptions_for_infeasibility(int index) const {
  // @@protoc_insertion_point(field_get:operations_research.sat.CpSolverResponse.sufficient_assumptions_for_infeasibility)
  return _internal_sufficient_assumptions_for_infeasibility(index);
}
inline void CpSolverResponse::set_sufficient_assumptions_for_infeasibility(int index, ::PROTOBUF_NAMESPACE_ID::int32 value) {
  sufficient_assumptions_for_infeasibility_.Set(index, value);
  // @@protoc_insertion_point(field_set:operations_research.sat.CpSolverResponse.sufficient_assumptions_for_infeasibility)
}
inline void CpSolverResponse::_internal_add_sufficient_assumptions_for_infeasibility(::PROTOBUF_NAMESPACE_ID::int32 value) {
  sufficient_assumptions_for_infeasibility_.Add(value);
}
inline void CpSolverResponse::add_sufficient_assumptions_for_infeasibility(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _internal_add_sufficient_assumptions_for_infeasibility(value);
  // @@protoc_insertion_point(field_add:operations_research.sat.CpSolverResponse.sufficient_assumptions_for_infeasibility)
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
CpSolverResponse::_internal_sufficient_assumptions_for_infeasibility() const {
  return sufficient_assumptions_for_infeasibility_;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
CpSolverResponse::sufficient_assumptions_for_infeasibility() const {
  // @@protoc_insertion_point(field_list:operations_research.sat.CpSolverResponse.sufficient_assumptions_for_infeasibility)
  return _internal_sufficient_assumptions_for_infeasibility();
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
CpSolverResponse::_internal_mutable_sufficient_assumptions_for_infeasibility() {
  return &sufficient_assumptions_for_infeasibility_;
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
CpSolverResponse::mutable_sufficient_assumptions_for_infeasibility() {
  // @@protoc_insertion_point(field_mutable_list:operations_research.sat.CpSolverResponse.sufficient_assumptions_for_infeasibility)
  return _internal_mutable_sufficient_assumptions_for_infeasibility();
}

// bool all_solutions_were_found = 5;
inline void CpSolverResponse::clear_all_solutions_were_found() {
  all_solutions_were_found_ = false;
}
inline bool CpSolverResponse::_internal_all_solutions_were_found() const {
  return all_solutions_were_found_;
}
inline bool CpSolverResponse::all_solutions_were_found() const {
  // @@protoc_insertion_point(field_get:operations_research.sat.CpSolverResponse.all_solutions_were_found)
  return _internal_all_solutions_were_found();
}
inline void CpSolverResponse::_internal_set_all_solutions_were_found(bool value) {
  
  all_solutions_were_found_ = value;
}
inline void CpSolverResponse::set_all_solutions_were_found(bool value) {
  _internal_set_all_solutions_were_found(value);
  // @@protoc_insertion_point(field_set:operations_research.sat.CpSolverResponse.all_solutions_were_found)
}

// int64 num_booleans = 10;
inline void CpSolverResponse::clear_num_booleans() {
  num_booleans_ = PROTOBUF_LONGLONG(0);
}
inline ::PROTOBUF_NAMESPACE_ID::int64 CpSolverResponse::_internal_num_booleans() const {
  return num_booleans_;
}
inline ::PROTOBUF_NAMESPACE_ID::int64 CpSolverResponse::num_booleans() const {
  // @@protoc_insertion_point(field_get:operations_research.sat.CpSolverResponse.num_booleans)
  return _internal_num_booleans();
}
inline void CpSolverResponse::_internal_set_num_booleans(::PROTOBUF_NAMESPACE_ID::int64 value) {
  
  num_booleans_ = value;
}
inline void CpSolverResponse::set_num_booleans(::PROTOBUF_NAMESPACE_ID::int64 value) {
  _internal_set_num_booleans(value);
  // @@protoc_insertion_point(field_set:operations_research.sat.CpSolverResponse.num_booleans)
}

// int64 num_conflicts = 11;
inline void CpSolverResponse::clear_num_conflicts() {
  num_conflicts_ = PROTOBUF_LONGLONG(0);
}
inline ::PROTOBUF_NAMESPACE_ID::int64 CpSolverResponse::_internal_num_conflicts() const {
  return num_conflicts_;
}
inline ::PROTOBUF_NAMESPACE_ID::int64 CpSolverResponse::num_conflicts() const {
  // @@protoc_insertion_point(field_get:operations_research.sat.CpSolverResponse.num_conflicts)
  return _internal_num_conflicts();
}
inline void CpSolverResponse::_internal_set_num_conflicts(::PROTOBUF_NAMESPACE_ID::int64 value) {
  
  num_conflicts_ = value;
}
inline void CpSolverResponse::set_num_conflicts(::PROTOBUF_NAMESPACE_ID::int64 value) {
  _internal_set_num_conflicts(value);
  // @@protoc_insertion_point(field_set:operations_research.sat.CpSolverResponse.num_conflicts)
}

// int64 num_branches = 12;
inline void CpSolverResponse::clear_num_branches() {
  num_branches_ = PROTOBUF_LONGLONG(0);
}
inline ::PROTOBUF_NAMESPACE_ID::int64 CpSolverResponse::_internal_num_branches() const {
  return num_branches_;
}
inline ::PROTOBUF_NAMESPACE_ID::int64 CpSolverResponse::num_branches() const {
  // @@protoc_insertion_point(field_get:operations_research.sat.CpSolverResponse.num_branches)
  return _internal_num_branches();
}
inline void CpSolverResponse::_internal_set_num_branches(::PROTOBUF_NAMESPACE_ID::int64 value) {
  
  num_branches_ = value;
}
inline void CpSolverResponse::set_num_branches(::PROTOBUF_NAMESPACE_ID::int64 value) {
  _internal_set_num_branches(value);
  // @@protoc_insertion_point(field_set:operations_research.sat.CpSolverResponse.num_branches)
}

// int64 num_binary_propagations = 13;
inline void CpSolverResponse::clear_num_binary_propagations() {
  num_binary_propagations_ = PROTOBUF_LONGLONG(0);
}
inline ::PROTOBUF_NAMESPACE_ID::int64 CpSolverResponse::_internal_num_binary_propagations() const {
  return num_binary_propagations_;
}
inline ::PROTOBUF_NAMESPACE_ID::int64 CpSolverResponse::num_binary_propagations() const {
  // @@protoc_insertion_point(field_get:operations_research.sat.CpSolverResponse.num_binary_propagations)
  return _internal_num_binary_propagations();
}
inline void CpSolverResponse::_internal_set_num_binary_propagations(::PROTOBUF_NAMESPACE_ID::int64 value) {
  
  num_binary_propagations_ = value;
}
inline void CpSolverResponse::set_num_binary_propagations(::PROTOBUF_NAMESPACE_ID::int64 value) {
  _internal_set_num_binary_propagations(value);
  // @@protoc_insertion_point(field_set:operations_research.sat.CpSolverResponse.num_binary_propagations)
}

// int64 num_integer_propagations = 14;
inline void CpSolverResponse::clear_num_integer_propagations() {
  num_integer_propagations_ = PROTOBUF_LONGLONG(0);
}
inline ::PROTOBUF_NAMESPACE_ID::int64 CpSolverResponse::_internal_num_integer_propagations() const {
  return num_integer_propagations_;
}
inline ::PROTOBUF_NAMESPACE_ID::int64 CpSolverResponse::num_integer_propagations() const {
  // @@protoc_insertion_point(field_get:operations_research.sat.CpSolverResponse.num_integer_propagations)
  return _internal_num_integer_propagations();
}
inline void CpSolverResponse::_internal_set_num_integer_propagations(::PROTOBUF_NAMESPACE_ID::int64 value) {
  
  num_integer_propagations_ = value;
}
inline void CpSolverResponse::set_num_integer_propagations(::PROTOBUF_NAMESPACE_ID::int64 value) {
  _internal_set_num_integer_propagations(value);
  // @@protoc_insertion_point(field_set:operations_research.sat.CpSolverResponse.num_integer_propagations)
}

// double wall_time = 15;
inline void CpSolverResponse::clear_wall_time() {
  wall_time_ = 0;
}
inline double CpSolverResponse::_internal_wall_time() const {
  return wall_time_;
}
inline double CpSolverResponse::wall_time() const {
  // @@protoc_insertion_point(field_get:operations_research.sat.CpSolverResponse.wall_time)
  return _internal_wall_time();
}
inline void CpSolverResponse::_internal_set_wall_time(double value) {
  
  wall_time_ = value;
}
inline void CpSolverResponse::set_wall_time(double value) {
  _internal_set_wall_time(value);
  // @@protoc_insertion_point(field_set:operations_research.sat.CpSolverResponse.wall_time)
}

// double user_time = 16;
inline void CpSolverResponse::clear_user_time() {
  user_time_ = 0;
}
inline double CpSolverResponse::_internal_user_time() const {
  return user_time_;
}
inline double CpSolverResponse::user_time() const {
  // @@protoc_insertion_point(field_get:operations_research.sat.CpSolverResponse.user_time)
  return _internal_user_time();
}
inline void CpSolverResponse::_internal_set_user_time(double value) {
  
  user_time_ = value;
}
inline void CpSolverResponse::set_user_time(double value) {
  _internal_set_user_time(value);
  // @@protoc_insertion_point(field_set:operations_research.sat.CpSolverResponse.user_time)
}

// double deterministic_time = 17;
inline void CpSolverResponse::clear_deterministic_time() {
  deterministic_time_ = 0;
}
inline double CpSolverResponse::_internal_deterministic_time() const {
  return deterministic_time_;
}
inline double CpSolverResponse::deterministic_time() const {
  // @@protoc_insertion_point(field_get:operations_research.sat.CpSolverResponse.deterministic_time)
  return _internal_deterministic_time();
}
inline void CpSolverResponse::_internal_set_deterministic_time(double value) {
  
  deterministic_time_ = value;
}
inline void CpSolverResponse::set_deterministic_time(double value) {
  _internal_set_deterministic_time(value);
  // @@protoc_insertion_point(field_set:operations_research.sat.CpSolverResponse.deterministic_time)
}

// double primal_integral = 22;
inline void CpSolverResponse::clear_primal_integral() {
  primal_integral_ = 0;
}
inline double CpSolverResponse::_internal_primal_integral() const {
  return primal_integral_;
}
inline double CpSolverResponse::primal_integral() const {
  // @@protoc_insertion_point(field_get:operations_research.sat.CpSolverResponse.primal_integral)
  return _internal_primal_integral();
}
inline void CpSolverResponse::_internal_set_primal_integral(double value) {
  
  primal_integral_ = value;
}
inline void CpSolverResponse::set_primal_integral(double value) {
  _internal_set_primal_integral(value);
  // @@protoc_insertion_point(field_set:operations_research.sat.CpSolverResponse.primal_integral)
}

// string solution_info = 20;
inline void CpSolverResponse::clear_solution_info() {
  solution_info_.ClearToEmpty(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena());
}
inline const std::string& CpSolverResponse::solution_info() const {
  // @@protoc_insertion_point(field_get:operations_research.sat.CpSolverResponse.solution_info)
  return _internal_solution_info();
}
inline void CpSolverResponse::set_solution_info(const std::string& value) {
  _internal_set_solution_info(value);
  // @@protoc_insertion_point(field_set:operations_research.sat.CpSolverResponse.solution_info)
}
inline std::string* CpSolverResponse::mutable_solution_info() {
  // @@protoc_insertion_point(field_mutable:operations_research.sat.CpSolverResponse.solution_info)
  return _internal_mutable_solution_info();
}
inline const std::string& CpSolverResponse::_internal_solution_info() const {
  return solution_info_.Get();
}
inline void CpSolverResponse::_internal_set_solution_info(const std::string& value) {
  
  solution_info_.Set(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), value, GetArena());
}
inline void CpSolverResponse::set_solution_info(std::string&& value) {
  
  solution_info_.Set(
    &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::move(value), GetArena());
  // @@protoc_insertion_point(field_set_rvalue:operations_research.sat.CpSolverResponse.solution_info)
}
inline void CpSolverResponse::set_solution_info(const char* value) {
  GOOGLE_DCHECK(value != nullptr);
  
  solution_info_.Set(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::string(value),
              GetArena());
  // @@protoc_insertion_point(field_set_char:operations_research.sat.CpSolverResponse.solution_info)
}
inline void CpSolverResponse::set_solution_info(const char* value,
    size_t size) {
  
  solution_info_.Set(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::string(
      reinterpret_cast<const char*>(value), size), GetArena());
  // @@protoc_insertion_point(field_set_pointer:operations_research.sat.CpSolverResponse.solution_info)
}
inline std::string* CpSolverResponse::_internal_mutable_solution_info() {
  
  return solution_info_.Mutable(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena());
}
inline std::string* CpSolverResponse::release_solution_info() {
  // @@protoc_insertion_point(field_release:operations_research.sat.CpSolverResponse.solution_info)
  return solution_info_.Release(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena());
}
inline void CpSolverResponse::set_allocated_solution_info(std::string* solution_info) {
  if (solution_info != nullptr) {
    
  } else {
    
  }
  solution_info_.SetAllocated(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), solution_info,
      GetArena());
  // @@protoc_insertion_point(field_set_allocated:operations_research.sat.CpSolverResponse.solution_info)
}
inline std::string* CpSolverResponse::unsafe_arena_release_solution_info() {
  // @@protoc_insertion_point(field_unsafe_arena_release:operations_research.sat.CpSolverResponse.solution_info)
  GOOGLE_DCHECK(GetArena() != nullptr);
  
  return solution_info_.UnsafeArenaRelease(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(),
      GetArena());
}
inline void CpSolverResponse::unsafe_arena_set_allocated_solution_info(
    std::string* solution_info) {
  GOOGLE_DCHECK(GetArena() != nullptr);
  if (solution_info != nullptr) {
    
  } else {
    
  }
  solution_info_.UnsafeArenaSetAllocated(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(),
      solution_info, GetArena());
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:operations_research.sat.CpSolverResponse.solution_info)
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


// @@protoc_insertion_point(namespace_scope)

}  // namespace sat
}  // namespace operations_research

PROTOBUF_NAMESPACE_OPEN

template <> struct is_proto_enum< ::operations_research::sat::DecisionStrategyProto_VariableSelectionStrategy> : ::std::true_type {};
template <>
inline const EnumDescriptor* GetEnumDescriptor< ::operations_research::sat::DecisionStrategyProto_VariableSelectionStrategy>() {
  return ::operations_research::sat::DecisionStrategyProto_VariableSelectionStrategy_descriptor();
}
template <> struct is_proto_enum< ::operations_research::sat::DecisionStrategyProto_DomainReductionStrategy> : ::std::true_type {};
template <>
inline const EnumDescriptor* GetEnumDescriptor< ::operations_research::sat::DecisionStrategyProto_DomainReductionStrategy>() {
  return ::operations_research::sat::DecisionStrategyProto_DomainReductionStrategy_descriptor();
}
template <> struct is_proto_enum< ::operations_research::sat::CpSolverStatus> : ::std::true_type {};
template <>
inline const EnumDescriptor* GetEnumDescriptor< ::operations_research::sat::CpSolverStatus>() {
  return ::operations_research::sat::CpSolverStatus_descriptor();
}

PROTOBUF_NAMESPACE_CLOSE

// @@protoc_insertion_point(global_scope)

#include <google/protobuf/port_undef.inc>
#endif  // GOOGLE_PROTOBUF_INCLUDED_GOOGLE_PROTOBUF_INCLUDED_ortools_2fsat_2fcp_5fmodel_2eproto
