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

#ifndef caffe_2eproto_2epb_2eh
#define caffe_2eproto_2epb_2eh

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

// clang-format off
#include "google/protobuf/runtime_version.h"
#if PROTOBUF_VERSION != 7035001
#error "Protobuf C++ gencode is built with an incompatible version of"
#error "Protobuf C++ headers/runtime. See"
#error "https://protobuf.dev/support/cross-version-runtime-guarantee/#cpp"
#endif
#include "google/protobuf/io/coded_stream.h"
#include "google/protobuf/arena.h"
#include "google/protobuf/arenastring.h"
#include "google/protobuf/generated_message_tctable_decl.h"
#include "google/protobuf/generated_message_util.h"
#include "google/protobuf/metadata_lite.h"
#include "google/protobuf/generated_message_reflection.h"
#include "google/protobuf/message.h"
#include "google/protobuf/message_lite.h"
#include "google/protobuf/repeated_field.h"  // IWYU pragma: export
#include "google/protobuf/extension_set.h"  // IWYU pragma: export
#include "google/protobuf/generated_enum_reflection.h"
#include "google/protobuf/unknown_field_set.h"
// @@protoc_insertion_point(includes)

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

#define PROTOBUF_INTERNAL_EXPORT_caffe_2eproto

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

// Internal implementation detail -- do not use these members.
struct TableStruct_caffe_2eproto {
  static const ::uint32_t offsets[];
};
extern "C" {
extern const ::google::protobuf::internal::DescriptorTable descriptor_table_caffe_2eproto;
}  // extern "C"
namespace caffe {
enum BNParameter_BNMode : int;
extern const uint32_t BNParameter_BNMode_internal_data_[];
enum ConvolutionParameter_Engine : int;
extern const uint32_t ConvolutionParameter_Engine_internal_data_[];
enum DataParameter_DB : int;
extern const uint32_t DataParameter_DB_internal_data_[];
enum EltwiseParameter_EltwiseOp : int;
extern const uint32_t EltwiseParameter_EltwiseOp_internal_data_[];
enum FillerParameter_VarianceNorm : int;
extern const uint32_t FillerParameter_VarianceNorm_internal_data_[];
enum HingeLossParameter_Norm : int;
extern const uint32_t HingeLossParameter_Norm_internal_data_[];
enum LRNParameter_Engine : int;
extern const uint32_t LRNParameter_Engine_internal_data_[];
enum LRNParameter_NormRegion : int;
extern const uint32_t LRNParameter_NormRegion_internal_data_[];
enum LossParameter_NormalizationMode : int;
extern const uint32_t LossParameter_NormalizationMode_internal_data_[];
enum ParamSpec_DimCheckMode : int;
extern const uint32_t ParamSpec_DimCheckMode_internal_data_[];
enum Phase : int;
extern const uint32_t Phase_internal_data_[];
enum PoolingParameter_Engine : int;
extern const uint32_t PoolingParameter_Engine_internal_data_[];
enum PoolingParameter_PoolMethod : int;
extern const uint32_t PoolingParameter_PoolMethod_internal_data_[];
enum PriorBoxParameter_CodeType : int;
extern const uint32_t PriorBoxParameter_CodeType_internal_data_[];
enum ReLUParameter_Engine : int;
extern const uint32_t ReLUParameter_Engine_internal_data_[];
enum ReductionParameter_ReductionOp : int;
extern const uint32_t ReductionParameter_ReductionOp_internal_data_[];
enum ResizeParameter_Interp_mode : int;
extern const uint32_t ResizeParameter_Interp_mode_internal_data_[];
enum ResizeParameter_Pad_mode : int;
extern const uint32_t ResizeParameter_Pad_mode_internal_data_[];
enum ResizeParameter_Resize_mode : int;
extern const uint32_t ResizeParameter_Resize_mode_internal_data_[];
enum SPPParameter_Engine : int;
extern const uint32_t SPPParameter_Engine_internal_data_[];
enum SPPParameter_PoolMethod : int;
extern const uint32_t SPPParameter_PoolMethod_internal_data_[];
enum SigmoidParameter_Engine : int;
extern const uint32_t SigmoidParameter_Engine_internal_data_[];
enum SoftmaxParameter_Engine : int;
extern const uint32_t SoftmaxParameter_Engine_internal_data_[];
enum SolverParameter_SnapshotFormat : int;
extern const uint32_t SolverParameter_SnapshotFormat_internal_data_[];
enum SolverParameter_SolverMode : int;
extern const uint32_t SolverParameter_SolverMode_internal_data_[];
enum SolverParameter_SolverType : int;
extern const uint32_t SolverParameter_SolverType_internal_data_[];
enum TanHParameter_Engine : int;
extern const uint32_t TanHParameter_Engine_internal_data_[];
enum V0LayerParameter_PoolMethod : int;
extern const uint32_t V0LayerParameter_PoolMethod_internal_data_[];
enum V1LayerParameter_DimCheckMode : int;
extern const uint32_t V1LayerParameter_DimCheckMode_internal_data_[];
enum V1LayerParameter_LayerType : int;
extern const uint32_t V1LayerParameter_LayerType_internal_data_[];
class AccuracyParameter;
struct AccuracyParameterGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern AccuracyParameterGlobalsTypeInternal AccuracyParameter_globals_;
extern const ::google::protobuf::internal::ClassDataFull AccuracyParameter_class_data_;
#else
extern const AccuracyParameterGlobalsTypeInternal AccuracyParameter_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
class ArgMaxParameter;
struct ArgMaxParameterGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern ArgMaxParameterGlobalsTypeInternal ArgMaxParameter_globals_;
extern const ::google::protobuf::internal::ClassDataFull ArgMaxParameter_class_data_;
#else
extern const ArgMaxParameterGlobalsTypeInternal ArgMaxParameter_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
class BNParameter;
struct BNParameterGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern BNParameterGlobalsTypeInternal BNParameter_globals_;
extern const ::google::protobuf::internal::ClassDataFull BNParameter_class_data_;
#else
extern const BNParameterGlobalsTypeInternal BNParameter_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
class BatchNormParameter;
struct BatchNormParameterGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern BatchNormParameterGlobalsTypeInternal BatchNormParameter_globals_;
extern const ::google::protobuf::internal::ClassDataFull BatchNormParameter_class_data_;
#else
extern const BatchNormParameterGlobalsTypeInternal BatchNormParameter_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
class BiasParameter;
struct BiasParameterGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern BiasParameterGlobalsTypeInternal BiasParameter_globals_;
extern const ::google::protobuf::internal::ClassDataFull BiasParameter_class_data_;
#else
extern const BiasParameterGlobalsTypeInternal BiasParameter_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
class BlobProto;
struct BlobProtoGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern BlobProtoGlobalsTypeInternal BlobProto_globals_;
extern const ::google::protobuf::internal::ClassDataFull BlobProto_class_data_;
#else
extern const BlobProtoGlobalsTypeInternal BlobProto_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
class BlobProtoVector;
struct BlobProtoVectorGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern BlobProtoVectorGlobalsTypeInternal BlobProtoVector_globals_;
extern const ::google::protobuf::internal::ClassDataFull BlobProtoVector_class_data_;
#else
extern const BlobProtoVectorGlobalsTypeInternal BlobProtoVector_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
class BlobShape;
struct BlobShapeGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern BlobShapeGlobalsTypeInternal BlobShape_globals_;
extern const ::google::protobuf::internal::ClassDataFull BlobShape_class_data_;
#else
extern const BlobShapeGlobalsTypeInternal BlobShape_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
class ConcatParameter;
struct ConcatParameterGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern ConcatParameterGlobalsTypeInternal ConcatParameter_globals_;
extern const ::google::protobuf::internal::ClassDataFull ConcatParameter_class_data_;
#else
extern const ConcatParameterGlobalsTypeInternal ConcatParameter_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
class ContrastiveLossParameter;
struct ContrastiveLossParameterGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern ContrastiveLossParameterGlobalsTypeInternal ContrastiveLossParameter_globals_;
extern const ::google::protobuf::internal::ClassDataFull ContrastiveLossParameter_class_data_;
#else
extern const ContrastiveLossParameterGlobalsTypeInternal ContrastiveLossParameter_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
class ConvolutionParameter;
struct ConvolutionParameterGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern ConvolutionParameterGlobalsTypeInternal ConvolutionParameter_globals_;
extern const ::google::protobuf::internal::ClassDataFull ConvolutionParameter_class_data_;
#else
extern const ConvolutionParameterGlobalsTypeInternal ConvolutionParameter_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
class CropParameter;
struct CropParameterGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern CropParameterGlobalsTypeInternal CropParameter_globals_;
extern const ::google::protobuf::internal::ClassDataFull CropParameter_class_data_;
#else
extern const CropParameterGlobalsTypeInternal CropParameter_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
class DataParameter;
struct DataParameterGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern DataParameterGlobalsTypeInternal DataParameter_globals_;
extern const ::google::protobuf::internal::ClassDataFull DataParameter_class_data_;
#else
extern const DataParameterGlobalsTypeInternal DataParameter_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
class Datum;
struct DatumGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern DatumGlobalsTypeInternal Datum_globals_;
extern const ::google::protobuf::internal::ClassDataFull Datum_class_data_;
#else
extern const DatumGlobalsTypeInternal Datum_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
class DetectionOutputParameter;
struct DetectionOutputParameterGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern DetectionOutputParameterGlobalsTypeInternal DetectionOutputParameter_globals_;
extern const ::google::protobuf::internal::ClassDataFull DetectionOutputParameter_class_data_;
#else
extern const DetectionOutputParameterGlobalsTypeInternal DetectionOutputParameter_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
class DropoutParameter;
struct DropoutParameterGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern DropoutParameterGlobalsTypeInternal DropoutParameter_globals_;
extern const ::google::protobuf::internal::ClassDataFull DropoutParameter_class_data_;
#else
extern const DropoutParameterGlobalsTypeInternal DropoutParameter_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
class DummyDataParameter;
struct DummyDataParameterGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern DummyDataParameterGlobalsTypeInternal DummyDataParameter_globals_;
extern const ::google::protobuf::internal::ClassDataFull DummyDataParameter_class_data_;
#else
extern const DummyDataParameterGlobalsTypeInternal DummyDataParameter_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
class ELUParameter;
struct ELUParameterGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern ELUParameterGlobalsTypeInternal ELUParameter_globals_;
extern const ::google::protobuf::internal::ClassDataFull ELUParameter_class_data_;
#else
extern const ELUParameterGlobalsTypeInternal ELUParameter_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
class EltwiseParameter;
struct EltwiseParameterGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern EltwiseParameterGlobalsTypeInternal EltwiseParameter_globals_;
extern const ::google::protobuf::internal::ClassDataFull EltwiseParameter_class_data_;
#else
extern const EltwiseParameterGlobalsTypeInternal EltwiseParameter_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
class EmbedParameter;
struct EmbedParameterGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern EmbedParameterGlobalsTypeInternal EmbedParameter_globals_;
extern const ::google::protobuf::internal::ClassDataFull EmbedParameter_class_data_;
#else
extern const EmbedParameterGlobalsTypeInternal EmbedParameter_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
class ExpParameter;
struct ExpParameterGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern ExpParameterGlobalsTypeInternal ExpParameter_globals_;
extern const ::google::protobuf::internal::ClassDataFull ExpParameter_class_data_;
#else
extern const ExpParameterGlobalsTypeInternal ExpParameter_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
class FillerParameter;
struct FillerParameterGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern FillerParameterGlobalsTypeInternal FillerParameter_globals_;
extern const ::google::protobuf::internal::ClassDataFull FillerParameter_class_data_;
#else
extern const FillerParameterGlobalsTypeInternal FillerParameter_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
class FlattenParameter;
struct FlattenParameterGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern FlattenParameterGlobalsTypeInternal FlattenParameter_globals_;
extern const ::google::protobuf::internal::ClassDataFull FlattenParameter_class_data_;
#else
extern const FlattenParameterGlobalsTypeInternal FlattenParameter_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
class HDF5DataParameter;
struct HDF5DataParameterGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern HDF5DataParameterGlobalsTypeInternal HDF5DataParameter_globals_;
extern const ::google::protobuf::internal::ClassDataFull HDF5DataParameter_class_data_;
#else
extern const HDF5DataParameterGlobalsTypeInternal HDF5DataParameter_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
class HDF5OutputParameter;
struct HDF5OutputParameterGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern HDF5OutputParameterGlobalsTypeInternal HDF5OutputParameter_globals_;
extern const ::google::protobuf::internal::ClassDataFull HDF5OutputParameter_class_data_;
#else
extern const HDF5OutputParameterGlobalsTypeInternal HDF5OutputParameter_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
class HingeLossParameter;
struct HingeLossParameterGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern HingeLossParameterGlobalsTypeInternal HingeLossParameter_globals_;
extern const ::google::protobuf::internal::ClassDataFull HingeLossParameter_class_data_;
#else
extern const HingeLossParameterGlobalsTypeInternal HingeLossParameter_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
class ImageDataParameter;
struct ImageDataParameterGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern ImageDataParameterGlobalsTypeInternal ImageDataParameter_globals_;
extern const ::google::protobuf::internal::ClassDataFull ImageDataParameter_class_data_;
#else
extern const ImageDataParameterGlobalsTypeInternal ImageDataParameter_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
class InfogainLossParameter;
struct InfogainLossParameterGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern InfogainLossParameterGlobalsTypeInternal InfogainLossParameter_globals_;
extern const ::google::protobuf::internal::ClassDataFull InfogainLossParameter_class_data_;
#else
extern const InfogainLossParameterGlobalsTypeInternal InfogainLossParameter_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
class InnerProductParameter;
struct InnerProductParameterGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern InnerProductParameterGlobalsTypeInternal InnerProductParameter_globals_;
extern const ::google::protobuf::internal::ClassDataFull InnerProductParameter_class_data_;
#else
extern const InnerProductParameterGlobalsTypeInternal InnerProductParameter_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
class InputParameter;
struct InputParameterGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern InputParameterGlobalsTypeInternal InputParameter_globals_;
extern const ::google::protobuf::internal::ClassDataFull InputParameter_class_data_;
#else
extern const InputParameterGlobalsTypeInternal InputParameter_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
class InterpParameter;
struct InterpParameterGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern InterpParameterGlobalsTypeInternal InterpParameter_globals_;
extern const ::google::protobuf::internal::ClassDataFull InterpParameter_class_data_;
#else
extern const InterpParameterGlobalsTypeInternal InterpParameter_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
class LRNParameter;
struct LRNParameterGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern LRNParameterGlobalsTypeInternal LRNParameter_globals_;
extern const ::google::protobuf::internal::ClassDataFull LRNParameter_class_data_;
#else
extern const LRNParameterGlobalsTypeInternal LRNParameter_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
class LayerParameter;
struct LayerParameterGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern LayerParameterGlobalsTypeInternal LayerParameter_globals_;
extern const ::google::protobuf::internal::ClassDataFull LayerParameter_class_data_;
#else
extern const LayerParameterGlobalsTypeInternal LayerParameter_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
class LogParameter;
struct LogParameterGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern LogParameterGlobalsTypeInternal LogParameter_globals_;
extern const ::google::protobuf::internal::ClassDataFull LogParameter_class_data_;
#else
extern const LogParameterGlobalsTypeInternal LogParameter_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
class LossParameter;
struct LossParameterGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern LossParameterGlobalsTypeInternal LossParameter_globals_;
extern const ::google::protobuf::internal::ClassDataFull LossParameter_class_data_;
#else
extern const LossParameterGlobalsTypeInternal LossParameter_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
class MVNParameter;
struct MVNParameterGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern MVNParameterGlobalsTypeInternal MVNParameter_globals_;
extern const ::google::protobuf::internal::ClassDataFull MVNParameter_class_data_;
#else
extern const MVNParameterGlobalsTypeInternal MVNParameter_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
class MemoryDataParameter;
struct MemoryDataParameterGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern MemoryDataParameterGlobalsTypeInternal MemoryDataParameter_globals_;
extern const ::google::protobuf::internal::ClassDataFull MemoryDataParameter_class_data_;
#else
extern const MemoryDataParameterGlobalsTypeInternal MemoryDataParameter_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
class NetParameter;
struct NetParameterGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern NetParameterGlobalsTypeInternal NetParameter_globals_;
extern const ::google::protobuf::internal::ClassDataFull NetParameter_class_data_;
#else
extern const NetParameterGlobalsTypeInternal NetParameter_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
class NetState;
struct NetStateGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern NetStateGlobalsTypeInternal NetState_globals_;
extern const ::google::protobuf::internal::ClassDataFull NetState_class_data_;
#else
extern const NetStateGlobalsTypeInternal NetState_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
class NetStateRule;
struct NetStateRuleGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern NetStateRuleGlobalsTypeInternal NetStateRule_globals_;
extern const ::google::protobuf::internal::ClassDataFull NetStateRule_class_data_;
#else
extern const NetStateRuleGlobalsTypeInternal NetStateRule_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
class NonMaximumSuppressionParameter;
struct NonMaximumSuppressionParameterGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern NonMaximumSuppressionParameterGlobalsTypeInternal NonMaximumSuppressionParameter_globals_;
extern const ::google::protobuf::internal::ClassDataFull NonMaximumSuppressionParameter_class_data_;
#else
extern const NonMaximumSuppressionParameterGlobalsTypeInternal NonMaximumSuppressionParameter_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
class NormalizeParameter;
struct NormalizeParameterGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern NormalizeParameterGlobalsTypeInternal NormalizeParameter_globals_;
extern const ::google::protobuf::internal::ClassDataFull NormalizeParameter_class_data_;
#else
extern const NormalizeParameterGlobalsTypeInternal NormalizeParameter_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
class PReLUParameter;
struct PReLUParameterGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern PReLUParameterGlobalsTypeInternal PReLUParameter_globals_;
extern const ::google::protobuf::internal::ClassDataFull PReLUParameter_class_data_;
#else
extern const PReLUParameterGlobalsTypeInternal PReLUParameter_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
class PSROIPoolingParameter;
struct PSROIPoolingParameterGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern PSROIPoolingParameterGlobalsTypeInternal PSROIPoolingParameter_globals_;
extern const ::google::protobuf::internal::ClassDataFull PSROIPoolingParameter_class_data_;
#else
extern const PSROIPoolingParameterGlobalsTypeInternal PSROIPoolingParameter_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
class ParamSpec;
struct ParamSpecGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern ParamSpecGlobalsTypeInternal ParamSpec_globals_;
extern const ::google::protobuf::internal::ClassDataFull ParamSpec_class_data_;
#else
extern const ParamSpecGlobalsTypeInternal ParamSpec_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
class PermuteParameter;
struct PermuteParameterGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern PermuteParameterGlobalsTypeInternal PermuteParameter_globals_;
extern const ::google::protobuf::internal::ClassDataFull PermuteParameter_class_data_;
#else
extern const PermuteParameterGlobalsTypeInternal PermuteParameter_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
class PoolingParameter;
struct PoolingParameterGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern PoolingParameterGlobalsTypeInternal PoolingParameter_globals_;
extern const ::google::protobuf::internal::ClassDataFull PoolingParameter_class_data_;
#else
extern const PoolingParameterGlobalsTypeInternal PoolingParameter_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
class PowerParameter;
struct PowerParameterGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern PowerParameterGlobalsTypeInternal PowerParameter_globals_;
extern const ::google::protobuf::internal::ClassDataFull PowerParameter_class_data_;
#else
extern const PowerParameterGlobalsTypeInternal PowerParameter_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
class PriorBoxParameter;
struct PriorBoxParameterGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern PriorBoxParameterGlobalsTypeInternal PriorBoxParameter_globals_;
extern const ::google::protobuf::internal::ClassDataFull PriorBoxParameter_class_data_;
#else
extern const PriorBoxParameterGlobalsTypeInternal PriorBoxParameter_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
class PythonParameter;
struct PythonParameterGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern PythonParameterGlobalsTypeInternal PythonParameter_globals_;
extern const ::google::protobuf::internal::ClassDataFull PythonParameter_class_data_;
#else
extern const PythonParameterGlobalsTypeInternal PythonParameter_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
class ROIAlignParameter;
struct ROIAlignParameterGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern ROIAlignParameterGlobalsTypeInternal ROIAlignParameter_globals_;
extern const ::google::protobuf::internal::ClassDataFull ROIAlignParameter_class_data_;
#else
extern const ROIAlignParameterGlobalsTypeInternal ROIAlignParameter_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
class ROIPoolingParameter;
struct ROIPoolingParameterGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern ROIPoolingParameterGlobalsTypeInternal ROIPoolingParameter_globals_;
extern const ::google::protobuf::internal::ClassDataFull ROIPoolingParameter_class_data_;
#else
extern const ROIPoolingParameterGlobalsTypeInternal ROIPoolingParameter_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
class ReLUParameter;
struct ReLUParameterGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern ReLUParameterGlobalsTypeInternal ReLUParameter_globals_;
extern const ::google::protobuf::internal::ClassDataFull ReLUParameter_class_data_;
#else
extern const ReLUParameterGlobalsTypeInternal ReLUParameter_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
class RecurrentParameter;
struct RecurrentParameterGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern RecurrentParameterGlobalsTypeInternal RecurrentParameter_globals_;
extern const ::google::protobuf::internal::ClassDataFull RecurrentParameter_class_data_;
#else
extern const RecurrentParameterGlobalsTypeInternal RecurrentParameter_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
class ReductionParameter;
struct ReductionParameterGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern ReductionParameterGlobalsTypeInternal ReductionParameter_globals_;
extern const ::google::protobuf::internal::ClassDataFull ReductionParameter_class_data_;
#else
extern const ReductionParameterGlobalsTypeInternal ReductionParameter_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
class ReorgParameter;
struct ReorgParameterGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern ReorgParameterGlobalsTypeInternal ReorgParameter_globals_;
extern const ::google::protobuf::internal::ClassDataFull ReorgParameter_class_data_;
#else
extern const ReorgParameterGlobalsTypeInternal ReorgParameter_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
class ReshapeParameter;
struct ReshapeParameterGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern ReshapeParameterGlobalsTypeInternal ReshapeParameter_globals_;
extern const ::google::protobuf::internal::ClassDataFull ReshapeParameter_class_data_;
#else
extern const ReshapeParameterGlobalsTypeInternal ReshapeParameter_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
class ResizeParameter;
struct ResizeParameterGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern ResizeParameterGlobalsTypeInternal ResizeParameter_globals_;
extern const ::google::protobuf::internal::ClassDataFull ResizeParameter_class_data_;
#else
extern const ResizeParameterGlobalsTypeInternal ResizeParameter_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
class SPPParameter;
struct SPPParameterGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern SPPParameterGlobalsTypeInternal SPPParameter_globals_;
extern const ::google::protobuf::internal::ClassDataFull SPPParameter_class_data_;
#else
extern const SPPParameterGlobalsTypeInternal SPPParameter_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
class SaveOutputParameter;
struct SaveOutputParameterGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern SaveOutputParameterGlobalsTypeInternal SaveOutputParameter_globals_;
extern const ::google::protobuf::internal::ClassDataFull SaveOutputParameter_class_data_;
#else
extern const SaveOutputParameterGlobalsTypeInternal SaveOutputParameter_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
class ScaleParameter;
struct ScaleParameterGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern ScaleParameterGlobalsTypeInternal ScaleParameter_globals_;
extern const ::google::protobuf::internal::ClassDataFull ScaleParameter_class_data_;
#else
extern const ScaleParameterGlobalsTypeInternal ScaleParameter_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
class ShuffleChannelParameter;
struct ShuffleChannelParameterGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern ShuffleChannelParameterGlobalsTypeInternal ShuffleChannelParameter_globals_;
extern const ::google::protobuf::internal::ClassDataFull ShuffleChannelParameter_class_data_;
#else
extern const ShuffleChannelParameterGlobalsTypeInternal ShuffleChannelParameter_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
class SigmoidParameter;
struct SigmoidParameterGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern SigmoidParameterGlobalsTypeInternal SigmoidParameter_globals_;
extern const ::google::protobuf::internal::ClassDataFull SigmoidParameter_class_data_;
#else
extern const SigmoidParameterGlobalsTypeInternal SigmoidParameter_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
class SliceParameter;
struct SliceParameterGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern SliceParameterGlobalsTypeInternal SliceParameter_globals_;
extern const ::google::protobuf::internal::ClassDataFull SliceParameter_class_data_;
#else
extern const SliceParameterGlobalsTypeInternal SliceParameter_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
class SmoothL1LossParameter;
struct SmoothL1LossParameterGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern SmoothL1LossParameterGlobalsTypeInternal SmoothL1LossParameter_globals_;
extern const ::google::protobuf::internal::ClassDataFull SmoothL1LossParameter_class_data_;
#else
extern const SmoothL1LossParameterGlobalsTypeInternal SmoothL1LossParameter_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
class SoftmaxParameter;
struct SoftmaxParameterGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern SoftmaxParameterGlobalsTypeInternal SoftmaxParameter_globals_;
extern const ::google::protobuf::internal::ClassDataFull SoftmaxParameter_class_data_;
#else
extern const SoftmaxParameterGlobalsTypeInternal SoftmaxParameter_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
class SolverParameter;
struct SolverParameterGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern SolverParameterGlobalsTypeInternal SolverParameter_globals_;
extern const ::google::protobuf::internal::ClassDataFull SolverParameter_class_data_;
#else
extern const SolverParameterGlobalsTypeInternal SolverParameter_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
class SolverState;
struct SolverStateGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern SolverStateGlobalsTypeInternal SolverState_globals_;
extern const ::google::protobuf::internal::ClassDataFull SolverState_class_data_;
#else
extern const SolverStateGlobalsTypeInternal SolverState_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
class TanHParameter;
struct TanHParameterGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern TanHParameterGlobalsTypeInternal TanHParameter_globals_;
extern const ::google::protobuf::internal::ClassDataFull TanHParameter_class_data_;
#else
extern const TanHParameterGlobalsTypeInternal TanHParameter_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
class ThresholdParameter;
struct ThresholdParameterGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern ThresholdParameterGlobalsTypeInternal ThresholdParameter_globals_;
extern const ::google::protobuf::internal::ClassDataFull ThresholdParameter_class_data_;
#else
extern const ThresholdParameterGlobalsTypeInternal ThresholdParameter_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
class TileParameter;
struct TileParameterGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern TileParameterGlobalsTypeInternal TileParameter_globals_;
extern const ::google::protobuf::internal::ClassDataFull TileParameter_class_data_;
#else
extern const TileParameterGlobalsTypeInternal TileParameter_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
class TransformationParameter;
struct TransformationParameterGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern TransformationParameterGlobalsTypeInternal TransformationParameter_globals_;
extern const ::google::protobuf::internal::ClassDataFull TransformationParameter_class_data_;
#else
extern const TransformationParameterGlobalsTypeInternal TransformationParameter_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
class V0LayerParameter;
struct V0LayerParameterGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern V0LayerParameterGlobalsTypeInternal V0LayerParameter_globals_;
extern const ::google::protobuf::internal::ClassDataFull V0LayerParameter_class_data_;
#else
extern const V0LayerParameterGlobalsTypeInternal V0LayerParameter_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
class V1LayerParameter;
struct V1LayerParameterGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern V1LayerParameterGlobalsTypeInternal V1LayerParameter_globals_;
extern const ::google::protobuf::internal::ClassDataFull V1LayerParameter_class_data_;
#else
extern const V1LayerParameterGlobalsTypeInternal V1LayerParameter_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
class WindowDataParameter;
struct WindowDataParameterGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern WindowDataParameterGlobalsTypeInternal WindowDataParameter_globals_;
extern const ::google::protobuf::internal::ClassDataFull WindowDataParameter_class_data_;
#else
extern const WindowDataParameterGlobalsTypeInternal WindowDataParameter_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
class YoloDetectionOutputParameter;
struct YoloDetectionOutputParameterGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern YoloDetectionOutputParameterGlobalsTypeInternal YoloDetectionOutputParameter_globals_;
extern const ::google::protobuf::internal::ClassDataFull YoloDetectionOutputParameter_class_data_;
#else
extern const YoloDetectionOutputParameterGlobalsTypeInternal YoloDetectionOutputParameter_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
class Yolov3DetectionOutputParameter;
struct Yolov3DetectionOutputParameterGlobalsTypeInternal;
#ifndef PROTOBUF_MESSAGE_GLOBALS
extern Yolov3DetectionOutputParameterGlobalsTypeInternal Yolov3DetectionOutputParameter_globals_;
extern const ::google::protobuf::internal::ClassDataFull Yolov3DetectionOutputParameter_class_data_;
#else
extern const Yolov3DetectionOutputParameterGlobalsTypeInternal Yolov3DetectionOutputParameter_globals_;
#endif  // PROTOBUF_MESSAGE_GLOBALS
}  // namespace caffe
namespace google {
namespace protobuf {
template <>
internal::EnumTraitsT<::caffe::BNParameter_BNMode_internal_data_>
    internal::EnumTraitsImpl::value<::caffe::BNParameter_BNMode>;
template <>
internal::EnumTraitsT<::caffe::ConvolutionParameter_Engine_internal_data_>
    internal::EnumTraitsImpl::value<::caffe::ConvolutionParameter_Engine>;
template <>
internal::EnumTraitsT<::caffe::DataParameter_DB_internal_data_>
    internal::EnumTraitsImpl::value<::caffe::DataParameter_DB>;
template <>
internal::EnumTraitsT<::caffe::EltwiseParameter_EltwiseOp_internal_data_>
    internal::EnumTraitsImpl::value<::caffe::EltwiseParameter_EltwiseOp>;
template <>
internal::EnumTraitsT<::caffe::FillerParameter_VarianceNorm_internal_data_>
    internal::EnumTraitsImpl::value<::caffe::FillerParameter_VarianceNorm>;
template <>
internal::EnumTraitsT<::caffe::HingeLossParameter_Norm_internal_data_>
    internal::EnumTraitsImpl::value<::caffe::HingeLossParameter_Norm>;
template <>
internal::EnumTraitsT<::caffe::LRNParameter_Engine_internal_data_>
    internal::EnumTraitsImpl::value<::caffe::LRNParameter_Engine>;
template <>
internal::EnumTraitsT<::caffe::LRNParameter_NormRegion_internal_data_>
    internal::EnumTraitsImpl::value<::caffe::LRNParameter_NormRegion>;
template <>
internal::EnumTraitsT<::caffe::LossParameter_NormalizationMode_internal_data_>
    internal::EnumTraitsImpl::value<::caffe::LossParameter_NormalizationMode>;
template <>
internal::EnumTraitsT<::caffe::ParamSpec_DimCheckMode_internal_data_>
    internal::EnumTraitsImpl::value<::caffe::ParamSpec_DimCheckMode>;
template <>
internal::EnumTraitsT<::caffe::Phase_internal_data_>
    internal::EnumTraitsImpl::value<::caffe::Phase>;
template <>
internal::EnumTraitsT<::caffe::PoolingParameter_Engine_internal_data_>
    internal::EnumTraitsImpl::value<::caffe::PoolingParameter_Engine>;
template <>
internal::EnumTraitsT<::caffe::PoolingParameter_PoolMethod_internal_data_>
    internal::EnumTraitsImpl::value<::caffe::PoolingParameter_PoolMethod>;
template <>
internal::EnumTraitsT<::caffe::PriorBoxParameter_CodeType_internal_data_>
    internal::EnumTraitsImpl::value<::caffe::PriorBoxParameter_CodeType>;
template <>
internal::EnumTraitsT<::caffe::ReLUParameter_Engine_internal_data_>
    internal::EnumTraitsImpl::value<::caffe::ReLUParameter_Engine>;
template <>
internal::EnumTraitsT<::caffe::ReductionParameter_ReductionOp_internal_data_>
    internal::EnumTraitsImpl::value<::caffe::ReductionParameter_ReductionOp>;
template <>
internal::EnumTraitsT<::caffe::ResizeParameter_Interp_mode_internal_data_>
    internal::EnumTraitsImpl::value<::caffe::ResizeParameter_Interp_mode>;
template <>
internal::EnumTraitsT<::caffe::ResizeParameter_Pad_mode_internal_data_>
    internal::EnumTraitsImpl::value<::caffe::ResizeParameter_Pad_mode>;
template <>
internal::EnumTraitsT<::caffe::ResizeParameter_Resize_mode_internal_data_>
    internal::EnumTraitsImpl::value<::caffe::ResizeParameter_Resize_mode>;
template <>
internal::EnumTraitsT<::caffe::SPPParameter_Engine_internal_data_>
    internal::EnumTraitsImpl::value<::caffe::SPPParameter_Engine>;
template <>
internal::EnumTraitsT<::caffe::SPPParameter_PoolMethod_internal_data_>
    internal::EnumTraitsImpl::value<::caffe::SPPParameter_PoolMethod>;
template <>
internal::EnumTraitsT<::caffe::SigmoidParameter_Engine_internal_data_>
    internal::EnumTraitsImpl::value<::caffe::SigmoidParameter_Engine>;
template <>
internal::EnumTraitsT<::caffe::SoftmaxParameter_Engine_internal_data_>
    internal::EnumTraitsImpl::value<::caffe::SoftmaxParameter_Engine>;
template <>
internal::EnumTraitsT<::caffe::SolverParameter_SnapshotFormat_internal_data_>
    internal::EnumTraitsImpl::value<::caffe::SolverParameter_SnapshotFormat>;
template <>
internal::EnumTraitsT<::caffe::SolverParameter_SolverMode_internal_data_>
    internal::EnumTraitsImpl::value<::caffe::SolverParameter_SolverMode>;
template <>
internal::EnumTraitsT<::caffe::SolverParameter_SolverType_internal_data_>
    internal::EnumTraitsImpl::value<::caffe::SolverParameter_SolverType>;
template <>
internal::EnumTraitsT<::caffe::TanHParameter_Engine_internal_data_>
    internal::EnumTraitsImpl::value<::caffe::TanHParameter_Engine>;
template <>
internal::EnumTraitsT<::caffe::V0LayerParameter_PoolMethod_internal_data_>
    internal::EnumTraitsImpl::value<::caffe::V0LayerParameter_PoolMethod>;
template <>
internal::EnumTraitsT<::caffe::V1LayerParameter_DimCheckMode_internal_data_>
    internal::EnumTraitsImpl::value<::caffe::V1LayerParameter_DimCheckMode>;
template <>
internal::EnumTraitsT<::caffe::V1LayerParameter_LayerType_internal_data_>
    internal::EnumTraitsImpl::value<::caffe::V1LayerParameter_LayerType>;
}  // namespace protobuf
}  // namespace google

namespace caffe {
enum FillerParameter_VarianceNorm : int {
  FillerParameter_VarianceNorm_FAN_IN = 0,
  FillerParameter_VarianceNorm_FAN_OUT = 1,
  FillerParameter_VarianceNorm_AVERAGE = 2,
};

extern const uint32_t FillerParameter_VarianceNorm_internal_data_[];
inline constexpr FillerParameter_VarianceNorm FillerParameter_VarianceNorm_VarianceNorm_MIN =
    static_cast<FillerParameter_VarianceNorm>(0);
inline constexpr FillerParameter_VarianceNorm FillerParameter_VarianceNorm_VarianceNorm_MAX =
    static_cast<FillerParameter_VarianceNorm>(2);
[[nodiscard]] inline bool FillerParameter_VarianceNorm_IsValid(int value) {
  return 0 <= value && value <= 2;
}
inline constexpr int FillerParameter_VarianceNorm_VarianceNorm_ARRAYSIZE = 2 + 1;
[[nodiscard]] const ::google::protobuf::EnumDescriptor* PROTOBUF_NONNULL
FillerParameter_VarianceNorm_descriptor();
[[nodiscard]] inline auto ProtobufInternalGetEnumDescriptor(FillerParameter_VarianceNorm) {
  return FillerParameter_VarianceNorm_descriptor();
}
template <typename T>
[[nodiscard]] const ::std::string& FillerParameter_VarianceNorm_Name(T value) {
  static_assert(::std::is_same<T, FillerParameter_VarianceNorm>::value ||
                    ::std::is_integral<T>::value,
                "Incorrect type passed to VarianceNorm_Name().");
  return FillerParameter_VarianceNorm_Name(static_cast<FillerParameter_VarianceNorm>(value));
}
template <>
[[nodiscard]] inline const ::std::string& FillerParameter_VarianceNorm_Name(FillerParameter_VarianceNorm value) {
  return ::google::protobuf::internal::NameOfDenseEnum<FillerParameter_VarianceNorm_descriptor, 0, 2>(
      static_cast<int>(value));
}
[[nodiscard]] inline bool FillerParameter_VarianceNorm_Parse(
    ::absl::string_view name, FillerParameter_VarianceNorm* PROTOBUF_NONNULL value) {
  return ::google::protobuf::internal::ParseNamedEnum<FillerParameter_VarianceNorm>(FillerParameter_VarianceNorm_descriptor(), name,
                                           value);
}
enum SolverParameter_SnapshotFormat : int {
  SolverParameter_SnapshotFormat_HDF5 = 0,
  SolverParameter_SnapshotFormat_BINARYPROTO = 1,
};

extern const uint32_t SolverParameter_SnapshotFormat_internal_data_[];
inline constexpr SolverParameter_SnapshotFormat SolverParameter_SnapshotFormat_SnapshotFormat_MIN =
    static_cast<SolverParameter_SnapshotFormat>(0);
inline constexpr SolverParameter_SnapshotFormat SolverParameter_SnapshotFormat_SnapshotFormat_MAX =
    static_cast<SolverParameter_SnapshotFormat>(1);
[[nodiscard]] inline bool SolverParameter_SnapshotFormat_IsValid(int value) {
  return 0 <= value && value <= 1;
}
inline constexpr int SolverParameter_SnapshotFormat_SnapshotFormat_ARRAYSIZE = 1 + 1;
[[nodiscard]] const ::google::protobuf::EnumDescriptor* PROTOBUF_NONNULL
SolverParameter_SnapshotFormat_descriptor();
[[nodiscard]] inline auto ProtobufInternalGetEnumDescriptor(SolverParameter_SnapshotFormat) {
  return SolverParameter_SnapshotFormat_descriptor();
}
template <typename T>
[[nodiscard]] const ::std::string& SolverParameter_SnapshotFormat_Name(T value) {
  static_assert(::std::is_same<T, SolverParameter_SnapshotFormat>::value ||
                    ::std::is_integral<T>::value,
                "Incorrect type passed to SnapshotFormat_Name().");
  return SolverParameter_SnapshotFormat_Name(static_cast<SolverParameter_SnapshotFormat>(value));
}
template <>
[[nodiscard]] inline const ::std::string& SolverParameter_SnapshotFormat_Name(SolverParameter_SnapshotFormat value) {
  return ::google::protobuf::internal::NameOfDenseEnum<SolverParameter_SnapshotFormat_descriptor, 0, 1>(
      static_cast<int>(value));
}
[[nodiscard]] inline bool SolverParameter_SnapshotFormat_Parse(
    ::absl::string_view name, SolverParameter_SnapshotFormat* PROTOBUF_NONNULL value) {
  return ::google::protobuf::internal::ParseNamedEnum<SolverParameter_SnapshotFormat>(SolverParameter_SnapshotFormat_descriptor(), name,
                                           value);
}
enum SolverParameter_SolverMode : int {
  SolverParameter_SolverMode_CPU = 0,
  SolverParameter_SolverMode_GPU = 1,
};

extern const uint32_t SolverParameter_SolverMode_internal_data_[];
inline constexpr SolverParameter_SolverMode SolverParameter_SolverMode_SolverMode_MIN =
    static_cast<SolverParameter_SolverMode>(0);
inline constexpr SolverParameter_SolverMode SolverParameter_SolverMode_SolverMode_MAX =
    static_cast<SolverParameter_SolverMode>(1);
[[nodiscard]] inline bool SolverParameter_SolverMode_IsValid(int value) {
  return 0 <= value && value <= 1;
}
inline constexpr int SolverParameter_SolverMode_SolverMode_ARRAYSIZE = 1 + 1;
[[nodiscard]] const ::google::protobuf::EnumDescriptor* PROTOBUF_NONNULL
SolverParameter_SolverMode_descriptor();
[[nodiscard]] inline auto ProtobufInternalGetEnumDescriptor(SolverParameter_SolverMode) {
  return SolverParameter_SolverMode_descriptor();
}
template <typename T>
[[nodiscard]] const ::std::string& SolverParameter_SolverMode_Name(T value) {
  static_assert(::std::is_same<T, SolverParameter_SolverMode>::value ||
                    ::std::is_integral<T>::value,
                "Incorrect type passed to SolverMode_Name().");
  return SolverParameter_SolverMode_Name(static_cast<SolverParameter_SolverMode>(value));
}
template <>
[[nodiscard]] inline const ::std::string& SolverParameter_SolverMode_Name(SolverParameter_SolverMode value) {
  return ::google::protobuf::internal::NameOfDenseEnum<SolverParameter_SolverMode_descriptor, 0, 1>(
      static_cast<int>(value));
}
[[nodiscard]] inline bool SolverParameter_SolverMode_Parse(
    ::absl::string_view name, SolverParameter_SolverMode* PROTOBUF_NONNULL value) {
  return ::google::protobuf::internal::ParseNamedEnum<SolverParameter_SolverMode>(SolverParameter_SolverMode_descriptor(), name,
                                           value);
}
enum SolverParameter_SolverType : int {
  SolverParameter_SolverType_SGD = 0,
  SolverParameter_SolverType_NESTEROV = 1,
  SolverParameter_SolverType_ADAGRAD = 2,
  SolverParameter_SolverType_RMSPROP = 3,
  SolverParameter_SolverType_ADADELTA = 4,
  SolverParameter_SolverType_ADAM = 5,
};

extern const uint32_t SolverParameter_SolverType_internal_data_[];
inline constexpr SolverParameter_SolverType SolverParameter_SolverType_SolverType_MIN =
    static_cast<SolverParameter_SolverType>(0);
inline constexpr SolverParameter_SolverType SolverParameter_SolverType_SolverType_MAX =
    static_cast<SolverParameter_SolverType>(5);
[[nodiscard]] inline bool SolverParameter_SolverType_IsValid(int value) {
  return 0 <= value && value <= 5;
}
inline constexpr int SolverParameter_SolverType_SolverType_ARRAYSIZE = 5 + 1;
[[nodiscard]] const ::google::protobuf::EnumDescriptor* PROTOBUF_NONNULL
SolverParameter_SolverType_descriptor();
[[nodiscard]] inline auto ProtobufInternalGetEnumDescriptor(SolverParameter_SolverType) {
  return SolverParameter_SolverType_descriptor();
}
template <typename T>
[[nodiscard]] const ::std::string& SolverParameter_SolverType_Name(T value) {
  static_assert(::std::is_same<T, SolverParameter_SolverType>::value ||
                    ::std::is_integral<T>::value,
                "Incorrect type passed to SolverType_Name().");
  return SolverParameter_SolverType_Name(static_cast<SolverParameter_SolverType>(value));
}
template <>
[[nodiscard]] inline const ::std::string& SolverParameter_SolverType_Name(SolverParameter_SolverType value) {
  return ::google::protobuf::internal::NameOfDenseEnum<SolverParameter_SolverType_descriptor, 0, 5>(
      static_cast<int>(value));
}
[[nodiscard]] inline bool SolverParameter_SolverType_Parse(
    ::absl::string_view name, SolverParameter_SolverType* PROTOBUF_NONNULL value) {
  return ::google::protobuf::internal::ParseNamedEnum<SolverParameter_SolverType>(SolverParameter_SolverType_descriptor(), name,
                                           value);
}
enum ParamSpec_DimCheckMode : int {
  ParamSpec_DimCheckMode_STRICT = 0,
  ParamSpec_DimCheckMode_PERMISSIVE = 1,
};

extern const uint32_t ParamSpec_DimCheckMode_internal_data_[];
inline constexpr ParamSpec_DimCheckMode ParamSpec_DimCheckMode_DimCheckMode_MIN =
    static_cast<ParamSpec_DimCheckMode>(0);
inline constexpr ParamSpec_DimCheckMode ParamSpec_DimCheckMode_DimCheckMode_MAX =
    static_cast<ParamSpec_DimCheckMode>(1);
[[nodiscard]] inline bool ParamSpec_DimCheckMode_IsValid(int value) {
  return 0 <= value && value <= 1;
}
inline constexpr int ParamSpec_DimCheckMode_DimCheckMode_ARRAYSIZE = 1 + 1;
[[nodiscard]] const ::google::protobuf::EnumDescriptor* PROTOBUF_NONNULL
ParamSpec_DimCheckMode_descriptor();
[[nodiscard]] inline auto ProtobufInternalGetEnumDescriptor(ParamSpec_DimCheckMode) {
  return ParamSpec_DimCheckMode_descriptor();
}
template <typename T>
[[nodiscard]] const ::std::string& ParamSpec_DimCheckMode_Name(T value) {
  static_assert(::std::is_same<T, ParamSpec_DimCheckMode>::value ||
                    ::std::is_integral<T>::value,
                "Incorrect type passed to DimCheckMode_Name().");
  return ParamSpec_DimCheckMode_Name(static_cast<ParamSpec_DimCheckMode>(value));
}
template <>
[[nodiscard]] inline const ::std::string& ParamSpec_DimCheckMode_Name(ParamSpec_DimCheckMode value) {
  return ::google::protobuf::internal::NameOfDenseEnum<ParamSpec_DimCheckMode_descriptor, 0, 1>(
      static_cast<int>(value));
}
[[nodiscard]] inline bool ParamSpec_DimCheckMode_Parse(
    ::absl::string_view name, ParamSpec_DimCheckMode* PROTOBUF_NONNULL value) {
  return ::google::protobuf::internal::ParseNamedEnum<ParamSpec_DimCheckMode>(ParamSpec_DimCheckMode_descriptor(), name,
                                           value);
}
enum ResizeParameter_Resize_mode : int {
  ResizeParameter_Resize_mode_WARP = 1,
  ResizeParameter_Resize_mode_FIT_SMALL_SIZE = 2,
  ResizeParameter_Resize_mode_FIT_LARGE_SIZE_AND_PAD = 3,
};

extern const uint32_t ResizeParameter_Resize_mode_internal_data_[];
inline constexpr ResizeParameter_Resize_mode ResizeParameter_Resize_mode_Resize_mode_MIN =
    static_cast<ResizeParameter_Resize_mode>(1);
inline constexpr ResizeParameter_Resize_mode ResizeParameter_Resize_mode_Resize_mode_MAX =
    static_cast<ResizeParameter_Resize_mode>(3);
[[nodiscard]] inline bool ResizeParameter_Resize_mode_IsValid(int value) {
  return 1 <= value && value <= 3;
}
inline constexpr int ResizeParameter_Resize_mode_Resize_mode_ARRAYSIZE = 3 + 1;
[[nodiscard]] const ::google::protobuf::EnumDescriptor* PROTOBUF_NONNULL
ResizeParameter_Resize_mode_descriptor();
[[nodiscard]] inline auto ProtobufInternalGetEnumDescriptor(ResizeParameter_Resize_mode) {
  return ResizeParameter_Resize_mode_descriptor();
}
template <typename T>
[[nodiscard]] const ::std::string& ResizeParameter_Resize_mode_Name(T value) {
  static_assert(::std::is_same<T, ResizeParameter_Resize_mode>::value ||
                    ::std::is_integral<T>::value,
                "Incorrect type passed to Resize_mode_Name().");
  return ResizeParameter_Resize_mode_Name(static_cast<ResizeParameter_Resize_mode>(value));
}
template <>
[[nodiscard]] inline const ::std::string& ResizeParameter_Resize_mode_Name(ResizeParameter_Resize_mode value) {
  return ::google::protobuf::internal::NameOfDenseEnum<ResizeParameter_Resize_mode_descriptor, 1, 3>(
      static_cast<int>(value));
}
[[nodiscard]] inline bool ResizeParameter_Resize_mode_Parse(
    ::absl::string_view name, ResizeParameter_Resize_mode* PROTOBUF_NONNULL value) {
  return ::google::protobuf::internal::ParseNamedEnum<ResizeParameter_Resize_mode>(ResizeParameter_Resize_mode_descriptor(), name,
                                           value);
}
enum ResizeParameter_Pad_mode : int {
  ResizeParameter_Pad_mode_CONSTANT = 1,
  ResizeParameter_Pad_mode_MIRRORED = 2,
  ResizeParameter_Pad_mode_REPEAT_NEAREST = 3,
};

extern const uint32_t ResizeParameter_Pad_mode_internal_data_[];
inline constexpr ResizeParameter_Pad_mode ResizeParameter_Pad_mode_Pad_mode_MIN =
    static_cast<ResizeParameter_Pad_mode>(1);
inline constexpr ResizeParameter_Pad_mode ResizeParameter_Pad_mode_Pad_mode_MAX =
    static_cast<ResizeParameter_Pad_mode>(3);
[[nodiscard]] inline bool ResizeParameter_Pad_mode_IsValid(int value) {
  return 1 <= value && value <= 3;
}
inline constexpr int ResizeParameter_Pad_mode_Pad_mode_ARRAYSIZE = 3 + 1;
[[nodiscard]] const ::google::protobuf::EnumDescriptor* PROTOBUF_NONNULL
ResizeParameter_Pad_mode_descriptor();
[[nodiscard]] inline auto ProtobufInternalGetEnumDescriptor(ResizeParameter_Pad_mode) {
  return ResizeParameter_Pad_mode_descriptor();
}
template <typename T>
[[nodiscard]] const ::std::string& ResizeParameter_Pad_mode_Name(T value) {
  static_assert(::std::is_same<T, ResizeParameter_Pad_mode>::value ||
                    ::std::is_integral<T>::value,
                "Incorrect type passed to Pad_mode_Name().");
  return ResizeParameter_Pad_mode_Name(static_cast<ResizeParameter_Pad_mode>(value));
}
template <>
[[nodiscard]] inline const ::std::string& ResizeParameter_Pad_mode_Name(ResizeParameter_Pad_mode value) {
  return ::google::protobuf::internal::NameOfDenseEnum<ResizeParameter_Pad_mode_descriptor, 1, 3>(
      static_cast<int>(value));
}
[[nodiscard]] inline bool ResizeParameter_Pad_mode_Parse(
    ::absl::string_view name, ResizeParameter_Pad_mode* PROTOBUF_NONNULL value) {
  return ::google::protobuf::internal::ParseNamedEnum<ResizeParameter_Pad_mode>(ResizeParameter_Pad_mode_descriptor(), name,
                                           value);
}
enum ResizeParameter_Interp_mode : int {
  ResizeParameter_Interp_mode_LINEAR = 1,
  ResizeParameter_Interp_mode_AREA = 2,
  ResizeParameter_Interp_mode_NEAREST = 3,
  ResizeParameter_Interp_mode_CUBIC = 4,
  ResizeParameter_Interp_mode_LANCZOS4 = 5,
};

extern const uint32_t ResizeParameter_Interp_mode_internal_data_[];
inline constexpr ResizeParameter_Interp_mode ResizeParameter_Interp_mode_Interp_mode_MIN =
    static_cast<ResizeParameter_Interp_mode>(1);
inline constexpr ResizeParameter_Interp_mode ResizeParameter_Interp_mode_Interp_mode_MAX =
    static_cast<ResizeParameter_Interp_mode>(5);
[[nodiscard]] inline bool ResizeParameter_Interp_mode_IsValid(int value) {
  return 1 <= value && value <= 5;
}
inline constexpr int ResizeParameter_Interp_mode_Interp_mode_ARRAYSIZE = 5 + 1;
[[nodiscard]] const ::google::protobuf::EnumDescriptor* PROTOBUF_NONNULL
ResizeParameter_Interp_mode_descriptor();
[[nodiscard]] inline auto ProtobufInternalGetEnumDescriptor(ResizeParameter_Interp_mode) {
  return ResizeParameter_Interp_mode_descriptor();
}
template <typename T>
[[nodiscard]] const ::std::string& ResizeParameter_Interp_mode_Name(T value) {
  static_assert(::std::is_same<T, ResizeParameter_Interp_mode>::value ||
                    ::std::is_integral<T>::value,
                "Incorrect type passed to Interp_mode_Name().");
  return ResizeParameter_Interp_mode_Name(static_cast<ResizeParameter_Interp_mode>(value));
}
template <>
[[nodiscard]] inline const ::std::string& ResizeParameter_Interp_mode_Name(ResizeParameter_Interp_mode value) {
  return ::google::protobuf::internal::NameOfDenseEnum<ResizeParameter_Interp_mode_descriptor, 1, 5>(
      static_cast<int>(value));
}
[[nodiscard]] inline bool ResizeParameter_Interp_mode_Parse(
    ::absl::string_view name, ResizeParameter_Interp_mode* PROTOBUF_NONNULL value) {
  return ::google::protobuf::internal::ParseNamedEnum<ResizeParameter_Interp_mode>(ResizeParameter_Interp_mode_descriptor(), name,
                                           value);
}
enum LossParameter_NormalizationMode : int {
  LossParameter_NormalizationMode_FULL = 0,
  LossParameter_NormalizationMode_VALID = 1,
  LossParameter_NormalizationMode_BATCH_SIZE = 2,
  LossParameter_NormalizationMode_NONE = 3,
};

extern const uint32_t LossParameter_NormalizationMode_internal_data_[];
inline constexpr LossParameter_NormalizationMode LossParameter_NormalizationMode_NormalizationMode_MIN =
    static_cast<LossParameter_NormalizationMode>(0);
inline constexpr LossParameter_NormalizationMode LossParameter_NormalizationMode_NormalizationMode_MAX =
    static_cast<LossParameter_NormalizationMode>(3);
[[nodiscard]] inline bool LossParameter_NormalizationMode_IsValid(int value) {
  return 0 <= value && value <= 3;
}
inline constexpr int LossParameter_NormalizationMode_NormalizationMode_ARRAYSIZE = 3 + 1;
[[nodiscard]] const ::google::protobuf::EnumDescriptor* PROTOBUF_NONNULL
LossParameter_NormalizationMode_descriptor();
[[nodiscard]] inline auto ProtobufInternalGetEnumDescriptor(LossParameter_NormalizationMode) {
  return LossParameter_NormalizationMode_descriptor();
}
template <typename T>
[[nodiscard]] const ::std::string& LossParameter_NormalizationMode_Name(T value) {
  static_assert(::std::is_same<T, LossParameter_NormalizationMode>::value ||
                    ::std::is_integral<T>::value,
                "Incorrect type passed to NormalizationMode_Name().");
  return LossParameter_NormalizationMode_Name(static_cast<LossParameter_NormalizationMode>(value));
}
template <>
[[nodiscard]] inline const ::std::string& LossParameter_NormalizationMode_Name(LossParameter_NormalizationMode value) {
  return ::google::protobuf::internal::NameOfDenseEnum<LossParameter_NormalizationMode_descriptor, 0, 3>(
      static_cast<int>(value));
}
[[nodiscard]] inline bool LossParameter_NormalizationMode_Parse(
    ::absl::string_view name, LossParameter_NormalizationMode* PROTOBUF_NONNULL value) {
  return ::google::protobuf::internal::ParseNamedEnum<LossParameter_NormalizationMode>(LossParameter_NormalizationMode_descriptor(), name,
                                           value);
}
enum BNParameter_BNMode : int {
  BNParameter_BNMode_LEARN = 0,
  BNParameter_BNMode_INFERENCE = 1,
};

extern const uint32_t BNParameter_BNMode_internal_data_[];
inline constexpr BNParameter_BNMode BNParameter_BNMode_BNMode_MIN =
    static_cast<BNParameter_BNMode>(0);
inline constexpr BNParameter_BNMode BNParameter_BNMode_BNMode_MAX =
    static_cast<BNParameter_BNMode>(1);
[[nodiscard]] inline bool BNParameter_BNMode_IsValid(int value) {
  return 0 <= value && value <= 1;
}
inline constexpr int BNParameter_BNMode_BNMode_ARRAYSIZE = 1 + 1;
[[nodiscard]] const ::google::protobuf::EnumDescriptor* PROTOBUF_NONNULL
BNParameter_BNMode_descriptor();
[[nodiscard]] inline auto ProtobufInternalGetEnumDescriptor(BNParameter_BNMode) {
  return BNParameter_BNMode_descriptor();
}
template <typename T>
[[nodiscard]] const ::std::string& BNParameter_BNMode_Name(T value) {
  static_assert(::std::is_same<T, BNParameter_BNMode>::value ||
                    ::std::is_integral<T>::value,
                "Incorrect type passed to BNMode_Name().");
  return BNParameter_BNMode_Name(static_cast<BNParameter_BNMode>(value));
}
template <>
[[nodiscard]] inline const ::std::string& BNParameter_BNMode_Name(BNParameter_BNMode value) {
  return ::google::protobuf::internal::NameOfDenseEnum<BNParameter_BNMode_descriptor, 0, 1>(
      static_cast<int>(value));
}
[[nodiscard]] inline bool BNParameter_BNMode_Parse(
    ::absl::string_view name, BNParameter_BNMode* PROTOBUF_NONNULL value) {
  return ::google::protobuf::internal::ParseNamedEnum<BNParameter_BNMode>(BNParameter_BNMode_descriptor(), name,
                                           value);
}
enum ConvolutionParameter_Engine : int {
  ConvolutionParameter_Engine_DEFAULT = 0,
  ConvolutionParameter_Engine_CAFFE = 1,
  ConvolutionParameter_Engine_CUDNN = 2,
};

extern const uint32_t ConvolutionParameter_Engine_internal_data_[];
inline constexpr ConvolutionParameter_Engine ConvolutionParameter_Engine_Engine_MIN =
    static_cast<ConvolutionParameter_Engine>(0);
inline constexpr ConvolutionParameter_Engine ConvolutionParameter_Engine_Engine_MAX =
    static_cast<ConvolutionParameter_Engine>(2);
[[nodiscard]] inline bool ConvolutionParameter_Engine_IsValid(int value) {
  return 0 <= value && value <= 2;
}
inline constexpr int ConvolutionParameter_Engine_Engine_ARRAYSIZE = 2 + 1;
[[nodiscard]] const ::google::protobuf::EnumDescriptor* PROTOBUF_NONNULL
ConvolutionParameter_Engine_descriptor();
[[nodiscard]] inline auto ProtobufInternalGetEnumDescriptor(ConvolutionParameter_Engine) {
  return ConvolutionParameter_Engine_descriptor();
}
template <typename T>
[[nodiscard]] const ::std::string& ConvolutionParameter_Engine_Name(T value) {
  static_assert(::std::is_same<T, ConvolutionParameter_Engine>::value ||
                    ::std::is_integral<T>::value,
                "Incorrect type passed to Engine_Name().");
  return ConvolutionParameter_Engine_Name(static_cast<ConvolutionParameter_Engine>(value));
}
template <>
[[nodiscard]] inline const ::std::string& ConvolutionParameter_Engine_Name(ConvolutionParameter_Engine value) {
  return ::google::protobuf::internal::NameOfDenseEnum<ConvolutionParameter_Engine_descriptor, 0, 2>(
      static_cast<int>(value));
}
[[nodiscard]] inline bool ConvolutionParameter_Engine_Parse(
    ::absl::string_view name, ConvolutionParameter_Engine* PROTOBUF_NONNULL value) {
  return ::google::protobuf::internal::ParseNamedEnum<ConvolutionParameter_Engine>(ConvolutionParameter_Engine_descriptor(), name,
                                           value);
}
enum DataParameter_DB : int {
  DataParameter_DB_LEVELDB = 0,
  DataParameter_DB_LMDB = 1,
};

extern const uint32_t DataParameter_DB_internal_data_[];
inline constexpr DataParameter_DB DataParameter_DB_DB_MIN =
    static_cast<DataParameter_DB>(0);
inline constexpr DataParameter_DB DataParameter_DB_DB_MAX =
    static_cast<DataParameter_DB>(1);
[[nodiscard]] inline bool DataParameter_DB_IsValid(int value) {
  return 0 <= value && value <= 1;
}
inline constexpr int DataParameter_DB_DB_ARRAYSIZE = 1 + 1;
[[nodiscard]] const ::google::protobuf::EnumDescriptor* PROTOBUF_NONNULL
DataParameter_DB_descriptor();
[[nodiscard]] inline auto ProtobufInternalGetEnumDescriptor(DataParameter_DB) {
  return DataParameter_DB_descriptor();
}
template <typename T>
[[nodiscard]] const ::std::string& DataParameter_DB_Name(T value) {
  static_assert(::std::is_same<T, DataParameter_DB>::value ||
                    ::std::is_integral<T>::value,
                "Incorrect type passed to DB_Name().");
  return DataParameter_DB_Name(static_cast<DataParameter_DB>(value));
}
template <>
[[nodiscard]] inline const ::std::string& DataParameter_DB_Name(DataParameter_DB value) {
  return ::google::protobuf::internal::NameOfDenseEnum<DataParameter_DB_descriptor, 0, 1>(
      static_cast<int>(value));
}
[[nodiscard]] inline bool DataParameter_DB_Parse(
    ::absl::string_view name, DataParameter_DB* PROTOBUF_NONNULL value) {
  return ::google::protobuf::internal::ParseNamedEnum<DataParameter_DB>(DataParameter_DB_descriptor(), name,
                                           value);
}
enum EltwiseParameter_EltwiseOp : int {
  EltwiseParameter_EltwiseOp_PROD = 0,
  EltwiseParameter_EltwiseOp_SUM = 1,
  EltwiseParameter_EltwiseOp_MAX = 2,
};

extern const uint32_t EltwiseParameter_EltwiseOp_internal_data_[];
inline constexpr EltwiseParameter_EltwiseOp EltwiseParameter_EltwiseOp_EltwiseOp_MIN =
    static_cast<EltwiseParameter_EltwiseOp>(0);
inline constexpr EltwiseParameter_EltwiseOp EltwiseParameter_EltwiseOp_EltwiseOp_MAX =
    static_cast<EltwiseParameter_EltwiseOp>(2);
[[nodiscard]] inline bool EltwiseParameter_EltwiseOp_IsValid(int value) {
  return 0 <= value && value <= 2;
}
inline constexpr int EltwiseParameter_EltwiseOp_EltwiseOp_ARRAYSIZE = 2 + 1;
[[nodiscard]] const ::google::protobuf::EnumDescriptor* PROTOBUF_NONNULL
EltwiseParameter_EltwiseOp_descriptor();
[[nodiscard]] inline auto ProtobufInternalGetEnumDescriptor(EltwiseParameter_EltwiseOp) {
  return EltwiseParameter_EltwiseOp_descriptor();
}
template <typename T>
[[nodiscard]] const ::std::string& EltwiseParameter_EltwiseOp_Name(T value) {
  static_assert(::std::is_same<T, EltwiseParameter_EltwiseOp>::value ||
                    ::std::is_integral<T>::value,
                "Incorrect type passed to EltwiseOp_Name().");
  return EltwiseParameter_EltwiseOp_Name(static_cast<EltwiseParameter_EltwiseOp>(value));
}
template <>
[[nodiscard]] inline const ::std::string& EltwiseParameter_EltwiseOp_Name(EltwiseParameter_EltwiseOp value) {
  return ::google::protobuf::internal::NameOfDenseEnum<EltwiseParameter_EltwiseOp_descriptor, 0, 2>(
      static_cast<int>(value));
}
[[nodiscard]] inline bool EltwiseParameter_EltwiseOp_Parse(
    ::absl::string_view name, EltwiseParameter_EltwiseOp* PROTOBUF_NONNULL value) {
  return ::google::protobuf::internal::ParseNamedEnum<EltwiseParameter_EltwiseOp>(EltwiseParameter_EltwiseOp_descriptor(), name,
                                           value);
}
enum HingeLossParameter_Norm : int {
  HingeLossParameter_Norm_L1 = 1,
  HingeLossParameter_Norm_L2 = 2,
};

extern const uint32_t HingeLossParameter_Norm_internal_data_[];
inline constexpr HingeLossParameter_Norm HingeLossParameter_Norm_Norm_MIN =
    static_cast<HingeLossParameter_Norm>(1);
inline constexpr HingeLossParameter_Norm HingeLossParameter_Norm_Norm_MAX =
    static_cast<HingeLossParameter_Norm>(2);
[[nodiscard]] inline bool HingeLossParameter_Norm_IsValid(int value) {
  return 1 <= value && value <= 2;
}
inline constexpr int HingeLossParameter_Norm_Norm_ARRAYSIZE = 2 + 1;
[[nodiscard]] const ::google::protobuf::EnumDescriptor* PROTOBUF_NONNULL
HingeLossParameter_Norm_descriptor();
[[nodiscard]] inline auto ProtobufInternalGetEnumDescriptor(HingeLossParameter_Norm) {
  return HingeLossParameter_Norm_descriptor();
}
template <typename T>
[[nodiscard]] const ::std::string& HingeLossParameter_Norm_Name(T value) {
  static_assert(::std::is_same<T, HingeLossParameter_Norm>::value ||
                    ::std::is_integral<T>::value,
                "Incorrect type passed to Norm_Name().");
  return HingeLossParameter_Norm_Name(static_cast<HingeLossParameter_Norm>(value));
}
template <>
[[nodiscard]] inline const ::std::string& HingeLossParameter_Norm_Name(HingeLossParameter_Norm value) {
  return ::google::protobuf::internal::NameOfDenseEnum<HingeLossParameter_Norm_descriptor, 1, 2>(
      static_cast<int>(value));
}
[[nodiscard]] inline bool HingeLossParameter_Norm_Parse(
    ::absl::string_view name, HingeLossParameter_Norm* PROTOBUF_NONNULL value) {
  return ::google::protobuf::internal::ParseNamedEnum<HingeLossParameter_Norm>(HingeLossParameter_Norm_descriptor(), name,
                                           value);
}
enum LRNParameter_NormRegion : int {
  LRNParameter_NormRegion_ACROSS_CHANNELS = 0,
  LRNParameter_NormRegion_WITHIN_CHANNEL = 1,
};

extern const uint32_t LRNParameter_NormRegion_internal_data_[];
inline constexpr LRNParameter_NormRegion LRNParameter_NormRegion_NormRegion_MIN =
    static_cast<LRNParameter_NormRegion>(0);
inline constexpr LRNParameter_NormRegion LRNParameter_NormRegion_NormRegion_MAX =
    static_cast<LRNParameter_NormRegion>(1);
[[nodiscard]] inline bool LRNParameter_NormRegion_IsValid(int value) {
  return 0 <= value && value <= 1;
}
inline constexpr int LRNParameter_NormRegion_NormRegion_ARRAYSIZE = 1 + 1;
[[nodiscard]] const ::google::protobuf::EnumDescriptor* PROTOBUF_NONNULL
LRNParameter_NormRegion_descriptor();
[[nodiscard]] inline auto ProtobufInternalGetEnumDescriptor(LRNParameter_NormRegion) {
  return LRNParameter_NormRegion_descriptor();
}
template <typename T>
[[nodiscard]] const ::std::string& LRNParameter_NormRegion_Name(T value) {
  static_assert(::std::is_same<T, LRNParameter_NormRegion>::value ||
                    ::std::is_integral<T>::value,
                "Incorrect type passed to NormRegion_Name().");
  return LRNParameter_NormRegion_Name(static_cast<LRNParameter_NormRegion>(value));
}
template <>
[[nodiscard]] inline const ::std::string& LRNParameter_NormRegion_Name(LRNParameter_NormRegion value) {
  return ::google::protobuf::internal::NameOfDenseEnum<LRNParameter_NormRegion_descriptor, 0, 1>(
      static_cast<int>(value));
}
[[nodiscard]] inline bool LRNParameter_NormRegion_Parse(
    ::absl::string_view name, LRNParameter_NormRegion* PROTOBUF_NONNULL value) {
  return ::google::protobuf::internal::ParseNamedEnum<LRNParameter_NormRegion>(LRNParameter_NormRegion_descriptor(), name,
                                           value);
}
enum LRNParameter_Engine : int {
  LRNParameter_Engine_DEFAULT = 0,
  LRNParameter_Engine_CAFFE = 1,
  LRNParameter_Engine_CUDNN = 2,
};

extern const uint32_t LRNParameter_Engine_internal_data_[];
inline constexpr LRNParameter_Engine LRNParameter_Engine_Engine_MIN =
    static_cast<LRNParameter_Engine>(0);
inline constexpr LRNParameter_Engine LRNParameter_Engine_Engine_MAX =
    static_cast<LRNParameter_Engine>(2);
[[nodiscard]] inline bool LRNParameter_Engine_IsValid(int value) {
  return 0 <= value && value <= 2;
}
inline constexpr int LRNParameter_Engine_Engine_ARRAYSIZE = 2 + 1;
[[nodiscard]] const ::google::protobuf::EnumDescriptor* PROTOBUF_NONNULL
LRNParameter_Engine_descriptor();
[[nodiscard]] inline auto ProtobufInternalGetEnumDescriptor(LRNParameter_Engine) {
  return LRNParameter_Engine_descriptor();
}
template <typename T>
[[nodiscard]] const ::std::string& LRNParameter_Engine_Name(T value) {
  static_assert(::std::is_same<T, LRNParameter_Engine>::value ||
                    ::std::is_integral<T>::value,
                "Incorrect type passed to Engine_Name().");
  return LRNParameter_Engine_Name(static_cast<LRNParameter_Engine>(value));
}
template <>
[[nodiscard]] inline const ::std::string& LRNParameter_Engine_Name(LRNParameter_Engine value) {
  return ::google::protobuf::internal::NameOfDenseEnum<LRNParameter_Engine_descriptor, 0, 2>(
      static_cast<int>(value));
}
[[nodiscard]] inline bool LRNParameter_Engine_Parse(
    ::absl::string_view name, LRNParameter_Engine* PROTOBUF_NONNULL value) {
  return ::google::protobuf::internal::ParseNamedEnum<LRNParameter_Engine>(LRNParameter_Engine_descriptor(), name,
                                           value);
}
enum PoolingParameter_PoolMethod : int {
  PoolingParameter_PoolMethod_MAX = 0,
  PoolingParameter_PoolMethod_AVE = 1,
  PoolingParameter_PoolMethod_STOCHASTIC = 2,
};

extern const uint32_t PoolingParameter_PoolMethod_internal_data_[];
inline constexpr PoolingParameter_PoolMethod PoolingParameter_PoolMethod_PoolMethod_MIN =
    static_cast<PoolingParameter_PoolMethod>(0);
inline constexpr PoolingParameter_PoolMethod PoolingParameter_PoolMethod_PoolMethod_MAX =
    static_cast<PoolingParameter_PoolMethod>(2);
[[nodiscard]] inline bool PoolingParameter_PoolMethod_IsValid(int value) {
  return 0 <= value && value <= 2;
}
inline constexpr int PoolingParameter_PoolMethod_PoolMethod_ARRAYSIZE = 2 + 1;
[[nodiscard]] const ::google::protobuf::EnumDescriptor* PROTOBUF_NONNULL
PoolingParameter_PoolMethod_descriptor();
[[nodiscard]] inline auto ProtobufInternalGetEnumDescriptor(PoolingParameter_PoolMethod) {
  return PoolingParameter_PoolMethod_descriptor();
}
template <typename T>
[[nodiscard]] const ::std::string& PoolingParameter_PoolMethod_Name(T value) {
  static_assert(::std::is_same<T, PoolingParameter_PoolMethod>::value ||
                    ::std::is_integral<T>::value,
                "Incorrect type passed to PoolMethod_Name().");
  return PoolingParameter_PoolMethod_Name(static_cast<PoolingParameter_PoolMethod>(value));
}
template <>
[[nodiscard]] inline const ::std::string& PoolingParameter_PoolMethod_Name(PoolingParameter_PoolMethod value) {
  return ::google::protobuf::internal::NameOfDenseEnum<PoolingParameter_PoolMethod_descriptor, 0, 2>(
      static_cast<int>(value));
}
[[nodiscard]] inline bool PoolingParameter_PoolMethod_Parse(
    ::absl::string_view name, PoolingParameter_PoolMethod* PROTOBUF_NONNULL value) {
  return ::google::protobuf::internal::ParseNamedEnum<PoolingParameter_PoolMethod>(PoolingParameter_PoolMethod_descriptor(), name,
                                           value);
}
enum PoolingParameter_Engine : int {
  PoolingParameter_Engine_DEFAULT = 0,
  PoolingParameter_Engine_CAFFE = 1,
  PoolingParameter_Engine_CUDNN = 2,
};

extern const uint32_t PoolingParameter_Engine_internal_data_[];
inline constexpr PoolingParameter_Engine PoolingParameter_Engine_Engine_MIN =
    static_cast<PoolingParameter_Engine>(0);
inline constexpr PoolingParameter_Engine PoolingParameter_Engine_Engine_MAX =
    static_cast<PoolingParameter_Engine>(2);
[[nodiscard]] inline bool PoolingParameter_Engine_IsValid(int value) {
  return 0 <= value && value <= 2;
}
inline constexpr int PoolingParameter_Engine_Engine_ARRAYSIZE = 2 + 1;
[[nodiscard]] const ::google::protobuf::EnumDescriptor* PROTOBUF_NONNULL
PoolingParameter_Engine_descriptor();
[[nodiscard]] inline auto ProtobufInternalGetEnumDescriptor(PoolingParameter_Engine) {
  return PoolingParameter_Engine_descriptor();
}
template <typename T>
[[nodiscard]] const ::std::string& PoolingParameter_Engine_Name(T value) {
  static_assert(::std::is_same<T, PoolingParameter_Engine>::value ||
                    ::std::is_integral<T>::value,
                "Incorrect type passed to Engine_Name().");
  return PoolingParameter_Engine_Name(static_cast<PoolingParameter_Engine>(value));
}
template <>
[[nodiscard]] inline const ::std::string& PoolingParameter_Engine_Name(PoolingParameter_Engine value) {
  return ::google::protobuf::internal::NameOfDenseEnum<PoolingParameter_Engine_descriptor, 0, 2>(
      static_cast<int>(value));
}
[[nodiscard]] inline bool PoolingParameter_Engine_Parse(
    ::absl::string_view name, PoolingParameter_Engine* PROTOBUF_NONNULL value) {
  return ::google::protobuf::internal::ParseNamedEnum<PoolingParameter_Engine>(PoolingParameter_Engine_descriptor(), name,
                                           value);
}
enum PriorBoxParameter_CodeType : int {
  PriorBoxParameter_CodeType_CORNER = 1,
  PriorBoxParameter_CodeType_CENTER_SIZE = 2,
  PriorBoxParameter_CodeType_CORNER_SIZE = 3,
};

extern const uint32_t PriorBoxParameter_CodeType_internal_data_[];
inline constexpr PriorBoxParameter_CodeType PriorBoxParameter_CodeType_CodeType_MIN =
    static_cast<PriorBoxParameter_CodeType>(1);
inline constexpr PriorBoxParameter_CodeType PriorBoxParameter_CodeType_CodeType_MAX =
    static_cast<PriorBoxParameter_CodeType>(3);
[[nodiscard]] inline bool PriorBoxParameter_CodeType_IsValid(int value) {
  return 1 <= value && value <= 3;
}
inline constexpr int PriorBoxParameter_CodeType_CodeType_ARRAYSIZE = 3 + 1;
[[nodiscard]] const ::google::protobuf::EnumDescriptor* PROTOBUF_NONNULL
PriorBoxParameter_CodeType_descriptor();
[[nodiscard]] inline auto ProtobufInternalGetEnumDescriptor(PriorBoxParameter_CodeType) {
  return PriorBoxParameter_CodeType_descriptor();
}
template <typename T>
[[nodiscard]] const ::std::string& PriorBoxParameter_CodeType_Name(T value) {
  static_assert(::std::is_same<T, PriorBoxParameter_CodeType>::value ||
                    ::std::is_integral<T>::value,
                "Incorrect type passed to CodeType_Name().");
  return PriorBoxParameter_CodeType_Name(static_cast<PriorBoxParameter_CodeType>(value));
}
template <>
[[nodiscard]] inline const ::std::string& PriorBoxParameter_CodeType_Name(PriorBoxParameter_CodeType value) {
  return ::google::protobuf::internal::NameOfDenseEnum<PriorBoxParameter_CodeType_descriptor, 1, 3>(
      static_cast<int>(value));
}
[[nodiscard]] inline bool PriorBoxParameter_CodeType_Parse(
    ::absl::string_view name, PriorBoxParameter_CodeType* PROTOBUF_NONNULL value) {
  return ::google::protobuf::internal::ParseNamedEnum<PriorBoxParameter_CodeType>(PriorBoxParameter_CodeType_descriptor(), name,
                                           value);
}
enum ReductionParameter_ReductionOp : int {
  ReductionParameter_ReductionOp_SUM = 1,
  ReductionParameter_ReductionOp_ASUM = 2,
  ReductionParameter_ReductionOp_SUMSQ = 3,
  ReductionParameter_ReductionOp_MEAN = 4,
};

extern const uint32_t ReductionParameter_ReductionOp_internal_data_[];
inline constexpr ReductionParameter_ReductionOp ReductionParameter_ReductionOp_ReductionOp_MIN =
    static_cast<ReductionParameter_ReductionOp>(1);
inline constexpr ReductionParameter_ReductionOp ReductionParameter_ReductionOp_ReductionOp_MAX =
    static_cast<ReductionParameter_ReductionOp>(4);
[[nodiscard]] inline bool ReductionParameter_ReductionOp_IsValid(int value) {
  return 1 <= value && value <= 4;
}
inline constexpr int ReductionParameter_ReductionOp_ReductionOp_ARRAYSIZE = 4 + 1;
[[nodiscard]] const ::google::protobuf::EnumDescriptor* PROTOBUF_NONNULL
ReductionParameter_ReductionOp_descriptor();
[[nodiscard]] inline auto ProtobufInternalGetEnumDescriptor(ReductionParameter_ReductionOp) {
  return ReductionParameter_ReductionOp_descriptor();
}
template <typename T>
[[nodiscard]] const ::std::string& ReductionParameter_ReductionOp_Name(T value) {
  static_assert(::std::is_same<T, ReductionParameter_ReductionOp>::value ||
                    ::std::is_integral<T>::value,
                "Incorrect type passed to ReductionOp_Name().");
  return ReductionParameter_ReductionOp_Name(static_cast<ReductionParameter_ReductionOp>(value));
}
template <>
[[nodiscard]] inline const ::std::string& ReductionParameter_ReductionOp_Name(ReductionParameter_ReductionOp value) {
  return ::google::protobuf::internal::NameOfDenseEnum<ReductionParameter_ReductionOp_descriptor, 1, 4>(
      static_cast<int>(value));
}
[[nodiscard]] inline bool ReductionParameter_ReductionOp_Parse(
    ::absl::string_view name, ReductionParameter_ReductionOp* PROTOBUF_NONNULL value) {
  return ::google::protobuf::internal::ParseNamedEnum<ReductionParameter_ReductionOp>(ReductionParameter_ReductionOp_descriptor(), name,
                                           value);
}
enum ReLUParameter_Engine : int {
  ReLUParameter_Engine_DEFAULT = 0,
  ReLUParameter_Engine_CAFFE = 1,
  ReLUParameter_Engine_CUDNN = 2,
};

extern const uint32_t ReLUParameter_Engine_internal_data_[];
inline constexpr ReLUParameter_Engine ReLUParameter_Engine_Engine_MIN =
    static_cast<ReLUParameter_Engine>(0);
inline constexpr ReLUParameter_Engine ReLUParameter_Engine_Engine_MAX =
    static_cast<ReLUParameter_Engine>(2);
[[nodiscard]] inline bool ReLUParameter_Engine_IsValid(int value) {
  return 0 <= value && value <= 2;
}
inline constexpr int ReLUParameter_Engine_Engine_ARRAYSIZE = 2 + 1;
[[nodiscard]] const ::google::protobuf::EnumDescriptor* PROTOBUF_NONNULL
ReLUParameter_Engine_descriptor();
[[nodiscard]] inline auto ProtobufInternalGetEnumDescriptor(ReLUParameter_Engine) {
  return ReLUParameter_Engine_descriptor();
}
template <typename T>
[[nodiscard]] const ::std::string& ReLUParameter_Engine_Name(T value) {
  static_assert(::std::is_same<T, ReLUParameter_Engine>::value ||
                    ::std::is_integral<T>::value,
                "Incorrect type passed to Engine_Name().");
  return ReLUParameter_Engine_Name(static_cast<ReLUParameter_Engine>(value));
}
template <>
[[nodiscard]] inline const ::std::string& ReLUParameter_Engine_Name(ReLUParameter_Engine value) {
  return ::google::protobuf::internal::NameOfDenseEnum<ReLUParameter_Engine_descriptor, 0, 2>(
      static_cast<int>(value));
}
[[nodiscard]] inline bool ReLUParameter_Engine_Parse(
    ::absl::string_view name, ReLUParameter_Engine* PROTOBUF_NONNULL value) {
  return ::google::protobuf::internal::ParseNamedEnum<ReLUParameter_Engine>(ReLUParameter_Engine_descriptor(), name,
                                           value);
}
enum SigmoidParameter_Engine : int {
  SigmoidParameter_Engine_DEFAULT = 0,
  SigmoidParameter_Engine_CAFFE = 1,
  SigmoidParameter_Engine_CUDNN = 2,
};

extern const uint32_t SigmoidParameter_Engine_internal_data_[];
inline constexpr SigmoidParameter_Engine SigmoidParameter_Engine_Engine_MIN =
    static_cast<SigmoidParameter_Engine>(0);
inline constexpr SigmoidParameter_Engine SigmoidParameter_Engine_Engine_MAX =
    static_cast<SigmoidParameter_Engine>(2);
[[nodiscard]] inline bool SigmoidParameter_Engine_IsValid(int value) {
  return 0 <= value && value <= 2;
}
inline constexpr int SigmoidParameter_Engine_Engine_ARRAYSIZE = 2 + 1;
[[nodiscard]] const ::google::protobuf::EnumDescriptor* PROTOBUF_NONNULL
SigmoidParameter_Engine_descriptor();
[[nodiscard]] inline auto ProtobufInternalGetEnumDescriptor(SigmoidParameter_Engine) {
  return SigmoidParameter_Engine_descriptor();
}
template <typename T>
[[nodiscard]] const ::std::string& SigmoidParameter_Engine_Name(T value) {
  static_assert(::std::is_same<T, SigmoidParameter_Engine>::value ||
                    ::std::is_integral<T>::value,
                "Incorrect type passed to Engine_Name().");
  return SigmoidParameter_Engine_Name(static_cast<SigmoidParameter_Engine>(value));
}
template <>
[[nodiscard]] inline const ::std::string& SigmoidParameter_Engine_Name(SigmoidParameter_Engine value) {
  return ::google::protobuf::internal::NameOfDenseEnum<SigmoidParameter_Engine_descriptor, 0, 2>(
      static_cast<int>(value));
}
[[nodiscard]] inline bool SigmoidParameter_Engine_Parse(
    ::absl::string_view name, SigmoidParameter_Engine* PROTOBUF_NONNULL value) {
  return ::google::protobuf::internal::ParseNamedEnum<SigmoidParameter_Engine>(SigmoidParameter_Engine_descriptor(), name,
                                           value);
}
enum SoftmaxParameter_Engine : int {
  SoftmaxParameter_Engine_DEFAULT = 0,
  SoftmaxParameter_Engine_CAFFE = 1,
  SoftmaxParameter_Engine_CUDNN = 2,
};

extern const uint32_t SoftmaxParameter_Engine_internal_data_[];
inline constexpr SoftmaxParameter_Engine SoftmaxParameter_Engine_Engine_MIN =
    static_cast<SoftmaxParameter_Engine>(0);
inline constexpr SoftmaxParameter_Engine SoftmaxParameter_Engine_Engine_MAX =
    static_cast<SoftmaxParameter_Engine>(2);
[[nodiscard]] inline bool SoftmaxParameter_Engine_IsValid(int value) {
  return 0 <= value && value <= 2;
}
inline constexpr int SoftmaxParameter_Engine_Engine_ARRAYSIZE = 2 + 1;
[[nodiscard]] const ::google::protobuf::EnumDescriptor* PROTOBUF_NONNULL
SoftmaxParameter_Engine_descriptor();
[[nodiscard]] inline auto ProtobufInternalGetEnumDescriptor(SoftmaxParameter_Engine) {
  return SoftmaxParameter_Engine_descriptor();
}
template <typename T>
[[nodiscard]] const ::std::string& SoftmaxParameter_Engine_Name(T value) {
  static_assert(::std::is_same<T, SoftmaxParameter_Engine>::value ||
                    ::std::is_integral<T>::value,
                "Incorrect type passed to Engine_Name().");
  return SoftmaxParameter_Engine_Name(static_cast<SoftmaxParameter_Engine>(value));
}
template <>
[[nodiscard]] inline const ::std::string& SoftmaxParameter_Engine_Name(SoftmaxParameter_Engine value) {
  return ::google::protobuf::internal::NameOfDenseEnum<SoftmaxParameter_Engine_descriptor, 0, 2>(
      static_cast<int>(value));
}
[[nodiscard]] inline bool SoftmaxParameter_Engine_Parse(
    ::absl::string_view name, SoftmaxParameter_Engine* PROTOBUF_NONNULL value) {
  return ::google::protobuf::internal::ParseNamedEnum<SoftmaxParameter_Engine>(SoftmaxParameter_Engine_descriptor(), name,
                                           value);
}
enum TanHParameter_Engine : int {
  TanHParameter_Engine_DEFAULT = 0,
  TanHParameter_Engine_CAFFE = 1,
  TanHParameter_Engine_CUDNN = 2,
};

extern const uint32_t TanHParameter_Engine_internal_data_[];
inline constexpr TanHParameter_Engine TanHParameter_Engine_Engine_MIN =
    static_cast<TanHParameter_Engine>(0);
inline constexpr TanHParameter_Engine TanHParameter_Engine_Engine_MAX =
    static_cast<TanHParameter_Engine>(2);
[[nodiscard]] inline bool TanHParameter_Engine_IsValid(int value) {
  return 0 <= value && value <= 2;
}
inline constexpr int TanHParameter_Engine_Engine_ARRAYSIZE = 2 + 1;
[[nodiscard]] const ::google::protobuf::EnumDescriptor* PROTOBUF_NONNULL
TanHParameter_Engine_descriptor();
[[nodiscard]] inline auto ProtobufInternalGetEnumDescriptor(TanHParameter_Engine) {
  return TanHParameter_Engine_descriptor();
}
template <typename T>
[[nodiscard]] const ::std::string& TanHParameter_Engine_Name(T value) {
  static_assert(::std::is_same<T, TanHParameter_Engine>::value ||
                    ::std::is_integral<T>::value,
                "Incorrect type passed to Engine_Name().");
  return TanHParameter_Engine_Name(static_cast<TanHParameter_Engine>(value));
}
template <>
[[nodiscard]] inline const ::std::string& TanHParameter_Engine_Name(TanHParameter_Engine value) {
  return ::google::protobuf::internal::NameOfDenseEnum<TanHParameter_Engine_descriptor, 0, 2>(
      static_cast<int>(value));
}
[[nodiscard]] inline bool TanHParameter_Engine_Parse(
    ::absl::string_view name, TanHParameter_Engine* PROTOBUF_NONNULL value) {
  return ::google::protobuf::internal::ParseNamedEnum<TanHParameter_Engine>(TanHParameter_Engine_descriptor(), name,
                                           value);
}
enum SPPParameter_PoolMethod : int {
  SPPParameter_PoolMethod_MAX = 0,
  SPPParameter_PoolMethod_AVE = 1,
  SPPParameter_PoolMethod_STOCHASTIC = 2,
};

extern const uint32_t SPPParameter_PoolMethod_internal_data_[];
inline constexpr SPPParameter_PoolMethod SPPParameter_PoolMethod_PoolMethod_MIN =
    static_cast<SPPParameter_PoolMethod>(0);
inline constexpr SPPParameter_PoolMethod SPPParameter_PoolMethod_PoolMethod_MAX =
    static_cast<SPPParameter_PoolMethod>(2);
[[nodiscard]] inline bool SPPParameter_PoolMethod_IsValid(int value) {
  return 0 <= value && value <= 2;
}
inline constexpr int SPPParameter_PoolMethod_PoolMethod_ARRAYSIZE = 2 + 1;
[[nodiscard]] const ::google::protobuf::EnumDescriptor* PROTOBUF_NONNULL
SPPParameter_PoolMethod_descriptor();
[[nodiscard]] inline auto ProtobufInternalGetEnumDescriptor(SPPParameter_PoolMethod) {
  return SPPParameter_PoolMethod_descriptor();
}
template <typename T>
[[nodiscard]] const ::std::string& SPPParameter_PoolMethod_Name(T value) {
  static_assert(::std::is_same<T, SPPParameter_PoolMethod>::value ||
                    ::std::is_integral<T>::value,
                "Incorrect type passed to PoolMethod_Name().");
  return SPPParameter_PoolMethod_Name(static_cast<SPPParameter_PoolMethod>(value));
}
template <>
[[nodiscard]] inline const ::std::string& SPPParameter_PoolMethod_Name(SPPParameter_PoolMethod value) {
  return ::google::protobuf::internal::NameOfDenseEnum<SPPParameter_PoolMethod_descriptor, 0, 2>(
      static_cast<int>(value));
}
[[nodiscard]] inline bool SPPParameter_PoolMethod_Parse(
    ::absl::string_view name, SPPParameter_PoolMethod* PROTOBUF_NONNULL value) {
  return ::google::protobuf::internal::ParseNamedEnum<SPPParameter_PoolMethod>(SPPParameter_PoolMethod_descriptor(), name,
                                           value);
}
enum SPPParameter_Engine : int {
  SPPParameter_Engine_DEFAULT = 0,
  SPPParameter_Engine_CAFFE = 1,
  SPPParameter_Engine_CUDNN = 2,
};

extern const uint32_t SPPParameter_Engine_internal_data_[];
inline constexpr SPPParameter_Engine SPPParameter_Engine_Engine_MIN =
    static_cast<SPPParameter_Engine>(0);
inline constexpr SPPParameter_Engine SPPParameter_Engine_Engine_MAX =
    static_cast<SPPParameter_Engine>(2);
[[nodiscard]] inline bool SPPParameter_Engine_IsValid(int value) {
  return 0 <= value && value <= 2;
}
inline constexpr int SPPParameter_Engine_Engine_ARRAYSIZE = 2 + 1;
[[nodiscard]] const ::google::protobuf::EnumDescriptor* PROTOBUF_NONNULL
SPPParameter_Engine_descriptor();
[[nodiscard]] inline auto ProtobufInternalGetEnumDescriptor(SPPParameter_Engine) {
  return SPPParameter_Engine_descriptor();
}
template <typename T>
[[nodiscard]] const ::std::string& SPPParameter_Engine_Name(T value) {
  static_assert(::std::is_same<T, SPPParameter_Engine>::value ||
                    ::std::is_integral<T>::value,
                "Incorrect type passed to Engine_Name().");
  return SPPParameter_Engine_Name(static_cast<SPPParameter_Engine>(value));
}
template <>
[[nodiscard]] inline const ::std::string& SPPParameter_Engine_Name(SPPParameter_Engine value) {
  return ::google::protobuf::internal::NameOfDenseEnum<SPPParameter_Engine_descriptor, 0, 2>(
      static_cast<int>(value));
}
[[nodiscard]] inline bool SPPParameter_Engine_Parse(
    ::absl::string_view name, SPPParameter_Engine* PROTOBUF_NONNULL value) {
  return ::google::protobuf::internal::ParseNamedEnum<SPPParameter_Engine>(SPPParameter_Engine_descriptor(), name,
                                           value);
}
enum V1LayerParameter_LayerType : int {
  V1LayerParameter_LayerType_NONE = 0,
  V1LayerParameter_LayerType_ABSVAL = 35,
  V1LayerParameter_LayerType_ACCURACY = 1,
  V1LayerParameter_LayerType_ARGMAX = 30,
  V1LayerParameter_LayerType_BNLL = 2,
  V1LayerParameter_LayerType_CONCAT = 3,
  V1LayerParameter_LayerType_CONTRASTIVE_LOSS = 37,
  V1LayerParameter_LayerType_CONVOLUTION = 4,
  V1LayerParameter_LayerType_DATA = 5,
  V1LayerParameter_LayerType_DECONVOLUTION = 39,
  V1LayerParameter_LayerType_DROPOUT = 6,
  V1LayerParameter_LayerType_DUMMY_DATA = 32,
  V1LayerParameter_LayerType_EUCLIDEAN_LOSS = 7,
  V1LayerParameter_LayerType_ELTWISE = 25,
  V1LayerParameter_LayerType_EXP = 38,
  V1LayerParameter_LayerType_FLATTEN = 8,
  V1LayerParameter_LayerType_HDF5_DATA = 9,
  V1LayerParameter_LayerType_HDF5_OUTPUT = 10,
  V1LayerParameter_LayerType_HINGE_LOSS = 28,
  V1LayerParameter_LayerType_IM2COL = 11,
  V1LayerParameter_LayerType_IMAGE_DATA = 12,
  V1LayerParameter_LayerType_INFOGAIN_LOSS = 13,
  V1LayerParameter_LayerType_INNER_PRODUCT = 14,
  V1LayerParameter_LayerType_LRN = 15,
  V1LayerParameter_LayerType_MEMORY_DATA = 29,
  V1LayerParameter_LayerType_MULTINOMIAL_LOGISTIC_LOSS = 16,
  V1LayerParameter_LayerType_MVN = 34,
  V1LayerParameter_LayerType_POOLING = 17,
  V1LayerParameter_LayerType_POWER = 26,
  V1LayerParameter_LayerType_RELU = 18,
  V1LayerParameter_LayerType_SIGMOID = 19,
  V1LayerParameter_LayerType_SIGMOID_CROSS_ENTROPY_LOSS = 27,
  V1LayerParameter_LayerType_SILENCE = 36,
  V1LayerParameter_LayerType_SOFTMAX = 20,
  V1LayerParameter_LayerType_SOFTMAX_LOSS = 21,
  V1LayerParameter_LayerType_SPLIT = 22,
  V1LayerParameter_LayerType_SLICE = 33,
  V1LayerParameter_LayerType_TANH = 23,
  V1LayerParameter_LayerType_WINDOW_DATA = 24,
  V1LayerParameter_LayerType_THRESHOLD = 31,
};

extern const uint32_t V1LayerParameter_LayerType_internal_data_[];
inline constexpr V1LayerParameter_LayerType V1LayerParameter_LayerType_LayerType_MIN =
    static_cast<V1LayerParameter_LayerType>(0);
inline constexpr V1LayerParameter_LayerType V1LayerParameter_LayerType_LayerType_MAX =
    static_cast<V1LayerParameter_LayerType>(39);
[[nodiscard]] inline bool V1LayerParameter_LayerType_IsValid(int value) {
  return 0 <= value && value <= 39;
}
inline constexpr int V1LayerParameter_LayerType_LayerType_ARRAYSIZE = 39 + 1;
[[nodiscard]] const ::google::protobuf::EnumDescriptor* PROTOBUF_NONNULL
V1LayerParameter_LayerType_descriptor();
[[nodiscard]] inline auto ProtobufInternalGetEnumDescriptor(V1LayerParameter_LayerType) {
  return V1LayerParameter_LayerType_descriptor();
}
template <typename T>
[[nodiscard]] const ::std::string& V1LayerParameter_LayerType_Name(T value) {
  static_assert(::std::is_same<T, V1LayerParameter_LayerType>::value ||
                    ::std::is_integral<T>::value,
                "Incorrect type passed to LayerType_Name().");
  return V1LayerParameter_LayerType_Name(static_cast<V1LayerParameter_LayerType>(value));
}
template <>
[[nodiscard]] inline const ::std::string& V1LayerParameter_LayerType_Name(V1LayerParameter_LayerType value) {
  return ::google::protobuf::internal::NameOfDenseEnum<V1LayerParameter_LayerType_descriptor, 0, 39>(
      static_cast<int>(value));
}
[[nodiscard]] inline bool V1LayerParameter_LayerType_Parse(
    ::absl::string_view name, V1LayerParameter_LayerType* PROTOBUF_NONNULL value) {
  return ::google::protobuf::internal::ParseNamedEnum<V1LayerParameter_LayerType>(V1LayerParameter_LayerType_descriptor(), name,
                                           value);
}
enum V1LayerParameter_DimCheckMode : int {
  V1LayerParameter_DimCheckMode_STRICT = 0,
  V1LayerParameter_DimCheckMode_PERMISSIVE = 1,
};

extern const uint32_t V1LayerParameter_DimCheckMode_internal_data_[];
inline constexpr V1LayerParameter_DimCheckMode V1LayerParameter_DimCheckMode_DimCheckMode_MIN =
    static_cast<V1LayerParameter_DimCheckMode>(0);
inline constexpr V1LayerParameter_DimCheckMode V1LayerParameter_DimCheckMode_DimCheckMode_MAX =
    static_cast<V1LayerParameter_DimCheckMode>(1);
[[nodiscard]] inline bool V1LayerParameter_DimCheckMode_IsValid(int value) {
  return 0 <= value && value <= 1;
}
inline constexpr int V1LayerParameter_DimCheckMode_DimCheckMode_ARRAYSIZE = 1 + 1;
[[nodiscard]] const ::google::protobuf::EnumDescriptor* PROTOBUF_NONNULL
V1LayerParameter_DimCheckMode_descriptor();
[[nodiscard]] inline auto ProtobufInternalGetEnumDescriptor(V1LayerParameter_DimCheckMode) {
  return V1LayerParameter_DimCheckMode_descriptor();
}
template <typename T>
[[nodiscard]] const ::std::string& V1LayerParameter_DimCheckMode_Name(T value) {
  static_assert(::std::is_same<T, V1LayerParameter_DimCheckMode>::value ||
                    ::std::is_integral<T>::value,
                "Incorrect type passed to DimCheckMode_Name().");
  return V1LayerParameter_DimCheckMode_Name(static_cast<V1LayerParameter_DimCheckMode>(value));
}
template <>
[[nodiscard]] inline const ::std::string& V1LayerParameter_DimCheckMode_Name(V1LayerParameter_DimCheckMode value) {
  return ::google::protobuf::internal::NameOfDenseEnum<V1LayerParameter_DimCheckMode_descriptor, 0, 1>(
      static_cast<int>(value));
}
[[nodiscard]] inline bool V1LayerParameter_DimCheckMode_Parse(
    ::absl::string_view name, V1LayerParameter_DimCheckMode* PROTOBUF_NONNULL value) {
  return ::google::protobuf::internal::ParseNamedEnum<V1LayerParameter_DimCheckMode>(V1LayerParameter_DimCheckMode_descriptor(), name,
                                           value);
}
enum V0LayerParameter_PoolMethod : int {
  V0LayerParameter_PoolMethod_MAX = 0,
  V0LayerParameter_PoolMethod_AVE = 1,
  V0LayerParameter_PoolMethod_STOCHASTIC = 2,
};

extern const uint32_t V0LayerParameter_PoolMethod_internal_data_[];
inline constexpr V0LayerParameter_PoolMethod V0LayerParameter_PoolMethod_PoolMethod_MIN =
    static_cast<V0LayerParameter_PoolMethod>(0);
inline constexpr V0LayerParameter_PoolMethod V0LayerParameter_PoolMethod_PoolMethod_MAX =
    static_cast<V0LayerParameter_PoolMethod>(2);
[[nodiscard]] inline bool V0LayerParameter_PoolMethod_IsValid(int value) {
  return 0 <= value && value <= 2;
}
inline constexpr int V0LayerParameter_PoolMethod_PoolMethod_ARRAYSIZE = 2 + 1;
[[nodiscard]] const ::google::protobuf::EnumDescriptor* PROTOBUF_NONNULL
V0LayerParameter_PoolMethod_descriptor();
[[nodiscard]] inline auto ProtobufInternalGetEnumDescriptor(V0LayerParameter_PoolMethod) {
  return V0LayerParameter_PoolMethod_descriptor();
}
template <typename T>
[[nodiscard]] const ::std::string& V0LayerParameter_PoolMethod_Name(T value) {
  static_assert(::std::is_same<T, V0LayerParameter_PoolMethod>::value ||
                    ::std::is_integral<T>::value,
                "Incorrect type passed to PoolMethod_Name().");
  return V0LayerParameter_PoolMethod_Name(static_cast<V0LayerParameter_PoolMethod>(value));
}
template <>
[[nodiscard]] inline const ::std::string& V0LayerParameter_PoolMethod_Name(V0LayerParameter_PoolMethod value) {
  return ::google::protobuf::internal::NameOfDenseEnum<V0LayerParameter_PoolMethod_descriptor, 0, 2>(
      static_cast<int>(value));
}
[[nodiscard]] inline bool V0LayerParameter_PoolMethod_Parse(
    ::absl::string_view name, V0LayerParameter_PoolMethod* PROTOBUF_NONNULL value) {
  return ::google::protobuf::internal::ParseNamedEnum<V0LayerParameter_PoolMethod>(V0LayerParameter_PoolMethod_descriptor(), name,
                                           value);
}
enum Phase : int {
  TRAIN = 0,
  TEST = 1,
};

extern const uint32_t Phase_internal_data_[];
inline constexpr Phase Phase_MIN =
    static_cast<Phase>(0);
inline constexpr Phase Phase_MAX =
    static_cast<Phase>(1);
[[nodiscard]] inline bool Phase_IsValid(int value) {
  return 0 <= value && value <= 1;
}
inline constexpr int Phase_ARRAYSIZE = 1 + 1;
[[nodiscard]] const ::google::protobuf::EnumDescriptor* PROTOBUF_NONNULL
Phase_descriptor();
[[nodiscard]] inline auto ProtobufInternalGetEnumDescriptor(Phase) {
  return Phase_descriptor();
}
template <typename T>
[[nodiscard]] const ::std::string& Phase_Name(T value) {
  static_assert(::std::is_same<T, Phase>::value ||
                    ::std::is_integral<T>::value,
                "Incorrect type passed to Phase_Name().");
  return Phase_Name(static_cast<Phase>(value));
}
template <>
[[nodiscard]] inline const ::std::string& Phase_Name(Phase value) {
  return ::google::protobuf::internal::NameOfDenseEnum<Phase_descriptor, 0, 1>(
      static_cast<int>(value));
}
[[nodiscard]] inline bool Phase_Parse(
    ::absl::string_view name, Phase* PROTOBUF_NONNULL value) {
  return ::google::protobuf::internal::ParseNamedEnum<Phase>(Phase_descriptor(), name,
                                           value);
}
using ::google::protobuf::internal::generated_enum::AbslParseFlag;
using ::google::protobuf::internal::generated_enum::AbslUnparseFlag;

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


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

class  PROTOBUF_FUTURE_ADD_EARLY_WARN_UNUSED Yolov3DetectionOutputParameter final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:caffe.Yolov3DetectionOutputParameter) */ {
 public:
  inline Yolov3DetectionOutputParameter() : Yolov3DetectionOutputParameter(nullptr) {}
  ~Yolov3DetectionOutputParameter() PROTOBUF_FINAL;

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

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

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

  [[nodiscard]] inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  [[nodiscard]] inline ::google::protobuf::UnknownFieldSet* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL descriptor() {
    return GetDescriptor();
  }
  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL
  GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  [[nodiscard]] static const ::google::protobuf::Reflection* PROTOBUF_NONNULL GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  [[nodiscard]] static const Yolov3DetectionOutputParameter& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<Yolov3DetectionOutputParameter>(&Yolov3DetectionOutputParameter_globals_);
  }
  static constexpr int kIndexInFileMessages = 29;
  friend void swap(Yolov3DetectionOutputParameter& a, Yolov3DetectionOutputParameter& b) { a.Swap(&b); }
  inline void Swap(Yolov3DetectionOutputParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(Yolov3DetectionOutputParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  [[nodiscard]] Yolov3DetectionOutputParameter* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::Message::DefaultConstruct<Yolov3DetectionOutputParameter>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const Yolov3DetectionOutputParameter& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const Yolov3DetectionOutputParameter& from) { Yolov3DetectionOutputParameter::MergeImpl(*this, from); }

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

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

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

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

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

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

  [[nodiscard]] ::google::protobuf::Metadata GetMetadata() const;
  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------
  enum : int {
    kBiasesFieldNumber = 5,
    kAnchorsScaleFieldNumber = 6,
    kMaskFieldNumber = 8,
    kNumClassesFieldNumber = 1,
    kNumBoxFieldNumber = 2,
    kConfidenceThresholdFieldNumber = 3,
    kNmsThresholdFieldNumber = 4,
    kMaskGroupNumFieldNumber = 7,
  };
  // repeated float biases = 5;
  [[nodiscard]] int biases_size()
      const;
  private:
  int _internal_biases_size() const;

  public:
  void clear_biases() ;
  [[nodiscard]] float biases(int index) const;
  void set_biases(int index, float value);
  void add_biases(float value);
  [[nodiscard]] const ::google::protobuf::RepeatedField<float>& biases()
      const;
  ::google::protobuf::RepeatedField<float>* PROTOBUF_NONNULL mutable_biases();

  private:
  const ::google::protobuf::RepeatedField<float>& _internal_biases() const;
  ::google::protobuf::RepeatedField<float>* PROTOBUF_NONNULL _internal_mutable_biases();

  public:
  // repeated uint32 anchors_scale = 6;
  [[nodiscard]] int anchors_scale_size()
      const;
  private:
  int _internal_anchors_scale_size() const;

  public:
  void clear_anchors_scale() ;
  [[nodiscard]] ::uint32_t anchors_scale(int index) const;
  void set_anchors_scale(int index, ::uint32_t value);
  void add_anchors_scale(::uint32_t value);
  [[nodiscard]] const ::google::protobuf::RepeatedField<::uint32_t>& anchors_scale()
      const;
  ::google::protobuf::RepeatedField<::uint32_t>* PROTOBUF_NONNULL mutable_anchors_scale();

  private:
  const ::google::protobuf::RepeatedField<::uint32_t>& _internal_anchors_scale() const;
  ::google::protobuf::RepeatedField<::uint32_t>* PROTOBUF_NONNULL _internal_mutable_anchors_scale();

  public:
  // repeated uint32 mask = 8;
  [[nodiscard]] int mask_size()
      const;
  private:
  int _internal_mask_size() const;

  public:
  void clear_mask() ;
  [[nodiscard]] ::uint32_t mask(int index) const;
  void set_mask(int index, ::uint32_t value);
  void add_mask(::uint32_t value);
  [[nodiscard]] const ::google::protobuf::RepeatedField<::uint32_t>& mask()
      const;
  ::google::protobuf::RepeatedField<::uint32_t>* PROTOBUF_NONNULL mutable_mask();

  private:
  const ::google::protobuf::RepeatedField<::uint32_t>& _internal_mask() const;
  ::google::protobuf::RepeatedField<::uint32_t>* PROTOBUF_NONNULL _internal_mutable_mask();

  public:
  // optional uint32 num_classes = 1 [default = 20];
  [[nodiscard]] bool has_num_classes()
      const;
  void clear_num_classes() ;
  [[nodiscard]] ::uint32_t num_classes() const;
  void set_num_classes(::uint32_t value);

  private:
  ::uint32_t _internal_num_classes() const;
  void _internal_set_num_classes(::uint32_t value);

  public:
  // optional uint32 num_box = 2 [default = 3];
  [[nodiscard]] bool has_num_box()
      const;
  void clear_num_box() ;
  [[nodiscard]] ::uint32_t num_box() const;
  void set_num_box(::uint32_t value);

  private:
  ::uint32_t _internal_num_box() const;
  void _internal_set_num_box(::uint32_t value);

  public:
  // optional float confidence_threshold = 3 [default = 0.01];
  [[nodiscard]] bool has_confidence_threshold()
      const;
  void clear_confidence_threshold() ;
  [[nodiscard]] float confidence_threshold() const;
  void set_confidence_threshold(float value);

  private:
  float _internal_confidence_threshold() const;
  void _internal_set_confidence_threshold(float value);

  public:
  // optional float nms_threshold = 4 [default = 0.45];
  [[nodiscard]] bool has_nms_threshold()
      const;
  void clear_nms_threshold() ;
  [[nodiscard]] float nms_threshold() const;
  void set_nms_threshold(float value);

  private:
  float _internal_nms_threshold() const;
  void _internal_set_nms_threshold(float value);

  public:
  // optional uint32 mask_group_num = 7 [default = 2];
  [[nodiscard]] bool has_mask_group_num()
      const;
  void clear_mask_group_num() ;
  [[nodiscard]] ::uint32_t mask_group_num() const;
  void set_mask_group_num(::uint32_t value);

  private:
  ::uint32_t _internal_mask_group_num() const;
  void _internal_set_mask_group_num(::uint32_t value);

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

  friend class ::google::protobuf::MessageLite;
  friend class ::google::protobuf::Arena;
  friend ::google::protobuf::internal::PrivateAccess;
  template <typename T>
  friend class ::google::protobuf::Arena::InternalHelper;
  using InternalArenaConstructable_ = void;
  using DestructorSkippable_ = void;
  struct Impl_ {
    inline explicit constexpr Impl_(::google::protobuf::internal::InternalVisibility visibility,
                                    ::google::protobuf::internal::ConstantInitialized) noexcept;
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const Impl_& from,
        const Yolov3DetectionOutputParameter& from_msg);
    ::google::protobuf::internal::HasBits<1> _has_bits_;
    ::google::protobuf::internal::CachedSize _cached_size_;
    ::google::protobuf::RepeatedField<float> biases_;
    ::google::protobuf::RepeatedField<::uint32_t> anchors_scale_;
    ::google::protobuf::RepeatedField<::uint32_t> mask_;
    ::uint32_t num_classes_;
    ::uint32_t num_box_;
    float confidence_threshold_;
    float nms_threshold_;
    ::uint32_t mask_group_num_;
    PROTOBUF_TSAN_DECLARE_MEMBER
  };
  union { Impl_ _impl_; };
  friend struct ::TableStruct_caffe_2eproto;
};
// -------------------------------------------------------------------

class  PROTOBUF_FUTURE_ADD_EARLY_WARN_UNUSED YoloDetectionOutputParameter final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:caffe.YoloDetectionOutputParameter) */ {
 public:
  inline YoloDetectionOutputParameter() : YoloDetectionOutputParameter(nullptr) {}
  ~YoloDetectionOutputParameter() PROTOBUF_FINAL;

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

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

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

  [[nodiscard]] inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  [[nodiscard]] inline ::google::protobuf::UnknownFieldSet* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL descriptor() {
    return GetDescriptor();
  }
  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL
  GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  [[nodiscard]] static const ::google::protobuf::Reflection* PROTOBUF_NONNULL GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  [[nodiscard]] static const YoloDetectionOutputParameter& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<YoloDetectionOutputParameter>(&YoloDetectionOutputParameter_globals_);
  }
  static constexpr int kIndexInFileMessages = 28;
  friend void swap(YoloDetectionOutputParameter& a, YoloDetectionOutputParameter& b) { a.Swap(&b); }
  inline void Swap(YoloDetectionOutputParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(YoloDetectionOutputParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  [[nodiscard]] YoloDetectionOutputParameter* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::Message::DefaultConstruct<YoloDetectionOutputParameter>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const YoloDetectionOutputParameter& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const YoloDetectionOutputParameter& from) { YoloDetectionOutputParameter::MergeImpl(*this, from); }

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

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

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

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

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

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

  [[nodiscard]] ::google::protobuf::Metadata GetMetadata() const;
  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------
  enum : int {
    kBiasesFieldNumber = 7,
    kLabelMapFileFieldNumber = 8,
    kSideFieldNumber = 1,
    kNumClassesFieldNumber = 2,
    kNumBoxFieldNumber = 3,
    kCoordsFieldNumber = 4,
    kConfidenceThresholdFieldNumber = 5,
    kNmsThresholdFieldNumber = 6,
  };
  // repeated float biases = 7;
  [[nodiscard]] int biases_size()
      const;
  private:
  int _internal_biases_size() const;

  public:
  void clear_biases() ;
  [[nodiscard]] float biases(int index) const;
  void set_biases(int index, float value);
  void add_biases(float value);
  [[nodiscard]] const ::google::protobuf::RepeatedField<float>& biases()
      const;
  ::google::protobuf::RepeatedField<float>* PROTOBUF_NONNULL mutable_biases();

  private:
  const ::google::protobuf::RepeatedField<float>& _internal_biases() const;
  ::google::protobuf::RepeatedField<float>* PROTOBUF_NONNULL _internal_mutable_biases();

  public:
  // optional string label_map_file = 8;
  [[nodiscard]] bool has_label_map_file()
      const;
  void clear_label_map_file() ;
  [[nodiscard]] const ::std::string& label_map_file() const;
  template <typename Arg_ = const ::std::string&, typename... Args_>
  void set_label_map_file(Arg_&& arg, Args_... args);
  ::std::string* PROTOBUF_NONNULL mutable_label_map_file();
  [[nodiscard]] ::std::string* PROTOBUF_NULLABLE release_label_map_file();
  void set_allocated_label_map_file(::std::string* PROTOBUF_NULLABLE value);

  private:
  const ::std::string& _internal_label_map_file() const;
  PROTOBUF_ALWAYS_INLINE void _internal_set_label_map_file(const ::std::string& value);
  ::std::string* PROTOBUF_NONNULL _internal_mutable_label_map_file();

  public:
  // optional uint32 side = 1 [default = 13];
  [[nodiscard]] bool has_side()
      const;
  void clear_side() ;
  [[nodiscard]] ::uint32_t side() const;
  void set_side(::uint32_t value);

  private:
  ::uint32_t _internal_side() const;
  void _internal_set_side(::uint32_t value);

  public:
  // optional uint32 num_classes = 2 [default = 20];
  [[nodiscard]] bool has_num_classes()
      const;
  void clear_num_classes() ;
  [[nodiscard]] ::uint32_t num_classes() const;
  void set_num_classes(::uint32_t value);

  private:
  ::uint32_t _internal_num_classes() const;
  void _internal_set_num_classes(::uint32_t value);

  public:
  // optional uint32 num_box = 3 [default = 5];
  [[nodiscard]] bool has_num_box()
      const;
  void clear_num_box() ;
  [[nodiscard]] ::uint32_t num_box() const;
  void set_num_box(::uint32_t value);

  private:
  ::uint32_t _internal_num_box() const;
  void _internal_set_num_box(::uint32_t value);

  public:
  // optional uint32 coords = 4 [default = 4];
  [[nodiscard]] bool has_coords()
      const;
  void clear_coords() ;
  [[nodiscard]] ::uint32_t coords() const;
  void set_coords(::uint32_t value);

  private:
  ::uint32_t _internal_coords() const;
  void _internal_set_coords(::uint32_t value);

  public:
  // optional float confidence_threshold = 5 [default = 0.01];
  [[nodiscard]] bool has_confidence_threshold()
      const;
  void clear_confidence_threshold() ;
  [[nodiscard]] float confidence_threshold() const;
  void set_confidence_threshold(float value);

  private:
  float _internal_confidence_threshold() const;
  void _internal_set_confidence_threshold(float value);

  public:
  // optional float nms_threshold = 6 [default = 0.45];
  [[nodiscard]] bool has_nms_threshold()
      const;
  void clear_nms_threshold() ;
  [[nodiscard]] float nms_threshold() const;
  void set_nms_threshold(float value);

  private:
  float _internal_nms_threshold() const;
  void _internal_set_nms_threshold(float value);

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

  friend class ::google::protobuf::MessageLite;
  friend class ::google::protobuf::Arena;
  friend ::google::protobuf::internal::PrivateAccess;
  template <typename T>
  friend class ::google::protobuf::Arena::InternalHelper;
  using InternalArenaConstructable_ = void;
  using DestructorSkippable_ = void;
  struct Impl_ {
    inline explicit constexpr Impl_(::google::protobuf::internal::InternalVisibility visibility,
                                    ::google::protobuf::internal::ConstantInitialized) noexcept;
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const Impl_& from,
        const YoloDetectionOutputParameter& from_msg);
    ::google::protobuf::internal::HasBits<1> _has_bits_;
    ::google::protobuf::internal::CachedSize _cached_size_;
    ::google::protobuf::RepeatedField<float> biases_;
    ::google::protobuf::internal::ArenaStringPtr label_map_file_;
    ::uint32_t side_;
    ::uint32_t num_classes_;
    ::uint32_t num_box_;
    ::uint32_t coords_;
    float confidence_threshold_;
    float nms_threshold_;
    PROTOBUF_TSAN_DECLARE_MEMBER
  };
  union { Impl_ _impl_; };
  friend struct ::TableStruct_caffe_2eproto;
};
// -------------------------------------------------------------------

class  PROTOBUF_FUTURE_ADD_EARLY_WARN_UNUSED WindowDataParameter final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:caffe.WindowDataParameter) */ {
 public:
  inline WindowDataParameter() : WindowDataParameter(nullptr) {}
  ~WindowDataParameter() PROTOBUF_FINAL;

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

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

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

  [[nodiscard]] inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  [[nodiscard]] inline ::google::protobuf::UnknownFieldSet* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL descriptor() {
    return GetDescriptor();
  }
  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL
  GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  [[nodiscard]] static const ::google::protobuf::Reflection* PROTOBUF_NONNULL GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  [[nodiscard]] static const WindowDataParameter& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<WindowDataParameter>(&WindowDataParameter_globals_);
  }
  static constexpr int kIndexInFileMessages = 72;
  friend void swap(WindowDataParameter& a, WindowDataParameter& b) { a.Swap(&b); }
  inline void Swap(WindowDataParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(WindowDataParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  [[nodiscard]] WindowDataParameter* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::Message::DefaultConstruct<WindowDataParameter>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const WindowDataParameter& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const WindowDataParameter& from) { WindowDataParameter::MergeImpl(*this, from); }

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

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

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

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

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

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

  [[nodiscard]] ::google::protobuf::Metadata GetMetadata() const;
  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------
  enum : int {
    kSourceFieldNumber = 1,
    kMeanFileFieldNumber = 3,
    kCropModeFieldNumber = 11,
    kRootFolderFieldNumber = 13,
    kBatchSizeFieldNumber = 4,
    kCropSizeFieldNumber = 5,
    kMirrorFieldNumber = 6,
    kCacheImagesFieldNumber = 12,
    kContextPadFieldNumber = 10,
    kScaleFieldNumber = 2,
    kFgThresholdFieldNumber = 7,
    kBgThresholdFieldNumber = 8,
    kFgFractionFieldNumber = 9,
  };
  // optional string source = 1;
  [[nodiscard]] bool has_source()
      const;
  void clear_source() ;
  [[nodiscard]] const ::std::string& source() const;
  template <typename Arg_ = const ::std::string&, typename... Args_>
  void set_source(Arg_&& arg, Args_... args);
  ::std::string* PROTOBUF_NONNULL mutable_source();
  [[nodiscard]] ::std::string* PROTOBUF_NULLABLE release_source();
  void set_allocated_source(::std::string* PROTOBUF_NULLABLE value);

  private:
  const ::std::string& _internal_source() const;
  PROTOBUF_ALWAYS_INLINE void _internal_set_source(const ::std::string& value);
  ::std::string* PROTOBUF_NONNULL _internal_mutable_source();

  public:
  // optional string mean_file = 3;
  [[nodiscard]] bool has_mean_file()
      const;
  void clear_mean_file() ;
  [[nodiscard]] const ::std::string& mean_file() const;
  template <typename Arg_ = const ::std::string&, typename... Args_>
  void set_mean_file(Arg_&& arg, Args_... args);
  ::std::string* PROTOBUF_NONNULL mutable_mean_file();
  [[nodiscard]] ::std::string* PROTOBUF_NULLABLE release_mean_file();
  void set_allocated_mean_file(::std::string* PROTOBUF_NULLABLE value);

  private:
  const ::std::string& _internal_mean_file() const;
  PROTOBUF_ALWAYS_INLINE void _internal_set_mean_file(const ::std::string& value);
  ::std::string* PROTOBUF_NONNULL _internal_mutable_mean_file();

  public:
  // optional string crop_mode = 11 [default = "warp"];
  [[nodiscard]] bool has_crop_mode()
      const;
  void clear_crop_mode() ;
  [[nodiscard]] const ::std::string& crop_mode() const;
  template <typename Arg_ = const ::std::string&, typename... Args_>
  void set_crop_mode(Arg_&& arg, Args_... args);
  ::std::string* PROTOBUF_NONNULL mutable_crop_mode();
  [[nodiscard]] ::std::string* PROTOBUF_NULLABLE release_crop_mode();
  void set_allocated_crop_mode(::std::string* PROTOBUF_NULLABLE value);

  private:
  const ::std::string& _internal_crop_mode() const;
  PROTOBUF_ALWAYS_INLINE void _internal_set_crop_mode(const ::std::string& value);
  ::std::string* PROTOBUF_NONNULL _internal_mutable_crop_mode();

  public:
  // optional string root_folder = 13 [default = ""];
  [[nodiscard]] bool has_root_folder()
      const;
  void clear_root_folder() ;
  [[nodiscard]] const ::std::string& root_folder() const;
  template <typename Arg_ = const ::std::string&, typename... Args_>
  void set_root_folder(Arg_&& arg, Args_... args);
  ::std::string* PROTOBUF_NONNULL mutable_root_folder();
  [[nodiscard]] ::std::string* PROTOBUF_NULLABLE release_root_folder();
  void set_allocated_root_folder(::std::string* PROTOBUF_NULLABLE value);

  private:
  const ::std::string& _internal_root_folder() const;
  PROTOBUF_ALWAYS_INLINE void _internal_set_root_folder(const ::std::string& value);
  ::std::string* PROTOBUF_NONNULL _internal_mutable_root_folder();

  public:
  // optional uint32 batch_size = 4;
  [[nodiscard]] bool has_batch_size()
      const;
  void clear_batch_size() ;
  [[nodiscard]] ::uint32_t batch_size() const;
  void set_batch_size(::uint32_t value);

  private:
  ::uint32_t _internal_batch_size() const;
  void _internal_set_batch_size(::uint32_t value);

  public:
  // optional uint32 crop_size = 5 [default = 0];
  [[nodiscard]] bool has_crop_size()
      const;
  void clear_crop_size() ;
  [[nodiscard]] ::uint32_t crop_size() const;
  void set_crop_size(::uint32_t value);

  private:
  ::uint32_t _internal_crop_size() const;
  void _internal_set_crop_size(::uint32_t value);

  public:
  // optional bool mirror = 6 [default = false];
  [[nodiscard]] bool has_mirror()
      const;
  void clear_mirror() ;
  [[nodiscard]] bool mirror() const;
  void set_mirror(bool value);

  private:
  bool _internal_mirror() const;
  void _internal_set_mirror(bool value);

  public:
  // optional bool cache_images = 12 [default = false];
  [[nodiscard]] bool has_cache_images()
      const;
  void clear_cache_images() ;
  [[nodiscard]] bool cache_images() const;
  void set_cache_images(bool value);

  private:
  bool _internal_cache_images() const;
  void _internal_set_cache_images(bool value);

  public:
  // optional uint32 context_pad = 10 [default = 0];
  [[nodiscard]] bool has_context_pad()
      const;
  void clear_context_pad() ;
  [[nodiscard]] ::uint32_t context_pad() const;
  void set_context_pad(::uint32_t value);

  private:
  ::uint32_t _internal_context_pad() const;
  void _internal_set_context_pad(::uint32_t value);

  public:
  // optional float scale = 2 [default = 1];
  [[nodiscard]] bool has_scale()
      const;
  void clear_scale() ;
  [[nodiscard]] float scale() const;
  void set_scale(float value);

  private:
  float _internal_scale() const;
  void _internal_set_scale(float value);

  public:
  // optional float fg_threshold = 7 [default = 0.5];
  [[nodiscard]] bool has_fg_threshold()
      const;
  void clear_fg_threshold() ;
  [[nodiscard]] float fg_threshold() const;
  void set_fg_threshold(float value);

  private:
  float _internal_fg_threshold() const;
  void _internal_set_fg_threshold(float value);

  public:
  // optional float bg_threshold = 8 [default = 0.5];
  [[nodiscard]] bool has_bg_threshold()
      const;
  void clear_bg_threshold() ;
  [[nodiscard]] float bg_threshold() const;
  void set_bg_threshold(float value);

  private:
  float _internal_bg_threshold() const;
  void _internal_set_bg_threshold(float value);

  public:
  // optional float fg_fraction = 9 [default = 0.25];
  [[nodiscard]] bool has_fg_fraction()
      const;
  void clear_fg_fraction() ;
  [[nodiscard]] float fg_fraction() const;
  void set_fg_fraction(float value);

  private:
  float _internal_fg_fraction() const;
  void _internal_set_fg_fraction(float value);

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

  friend class ::google::protobuf::MessageLite;
  friend class ::google::protobuf::Arena;
  friend ::google::protobuf::internal::PrivateAccess;
  template <typename T>
  friend class ::google::protobuf::Arena::InternalHelper;
  using InternalArenaConstructable_ = void;
  using DestructorSkippable_ = void;
  struct Impl_ {
    inline explicit constexpr Impl_(::google::protobuf::internal::InternalVisibility visibility,
                                    ::google::protobuf::internal::ConstantInitialized) noexcept;
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const Impl_& from,
        const WindowDataParameter& from_msg);
    ::google::protobuf::internal::HasBits<1> _has_bits_;
    ::google::protobuf::internal::CachedSize _cached_size_;
    ::google::protobuf::internal::ArenaStringPtr source_;
    ::google::protobuf::internal::ArenaStringPtr mean_file_;
    static const ::google::protobuf::internal::LazyString _i_give_permission_to_break_this_code_default_crop_mode_;
    ::google::protobuf::internal::ArenaStringPtr crop_mode_;
    ::google::protobuf::internal::ArenaStringPtr root_folder_;
    ::uint32_t batch_size_;
    ::uint32_t crop_size_;
    bool mirror_;
    bool cache_images_;
    ::uint32_t context_pad_;
    float scale_;
    float fg_threshold_;
    float bg_threshold_;
    float fg_fraction_;
    PROTOBUF_TSAN_DECLARE_MEMBER
  };
  union { Impl_ _impl_; };
  friend struct ::TableStruct_caffe_2eproto;
};
// -------------------------------------------------------------------

class  PROTOBUF_FUTURE_ADD_EARLY_WARN_UNUSED TransformationParameter final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:caffe.TransformationParameter) */ {
 public:
  inline TransformationParameter() : TransformationParameter(nullptr) {}
  ~TransformationParameter() PROTOBUF_FINAL;

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

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

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

  [[nodiscard]] inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  [[nodiscard]] inline ::google::protobuf::UnknownFieldSet* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL descriptor() {
    return GetDescriptor();
  }
  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL
  GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  [[nodiscard]] static const ::google::protobuf::Reflection* PROTOBUF_NONNULL GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  [[nodiscard]] static const TransformationParameter& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<TransformationParameter>(&TransformationParameter_globals_);
  }
  static constexpr int kIndexInFileMessages = 12;
  friend void swap(TransformationParameter& a, TransformationParameter& b) { a.Swap(&b); }
  inline void Swap(TransformationParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(TransformationParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  [[nodiscard]] TransformationParameter* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::Message::DefaultConstruct<TransformationParameter>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const TransformationParameter& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const TransformationParameter& from) { TransformationParameter::MergeImpl(*this, from); }

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

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

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

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

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

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

  [[nodiscard]] ::google::protobuf::Metadata GetMetadata() const;
  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------
  enum : int {
    kMeanValueFieldNumber = 5,
    kMeanFileFieldNumber = 4,
    kCropSizeFieldNumber = 3,
    kMirrorFieldNumber = 2,
    kForceColorFieldNumber = 6,
    kForceGrayFieldNumber = 7,
    kScaleFieldNumber = 1,
  };
  // repeated float mean_value = 5;
  [[nodiscard]] int mean_value_size()
      const;
  private:
  int _internal_mean_value_size() const;

  public:
  void clear_mean_value() ;
  [[nodiscard]] float mean_value(int index) const;
  void set_mean_value(int index, float value);
  void add_mean_value(float value);
  [[nodiscard]] const ::google::protobuf::RepeatedField<float>& mean_value()
      const;
  ::google::protobuf::RepeatedField<float>* PROTOBUF_NONNULL mutable_mean_value();

  private:
  const ::google::protobuf::RepeatedField<float>& _internal_mean_value() const;
  ::google::protobuf::RepeatedField<float>* PROTOBUF_NONNULL _internal_mutable_mean_value();

  public:
  // optional string mean_file = 4;
  [[nodiscard]] bool has_mean_file()
      const;
  void clear_mean_file() ;
  [[nodiscard]] const ::std::string& mean_file() const;
  template <typename Arg_ = const ::std::string&, typename... Args_>
  void set_mean_file(Arg_&& arg, Args_... args);
  ::std::string* PROTOBUF_NONNULL mutable_mean_file();
  [[nodiscard]] ::std::string* PROTOBUF_NULLABLE release_mean_file();
  void set_allocated_mean_file(::std::string* PROTOBUF_NULLABLE value);

  private:
  const ::std::string& _internal_mean_file() const;
  PROTOBUF_ALWAYS_INLINE void _internal_set_mean_file(const ::std::string& value);
  ::std::string* PROTOBUF_NONNULL _internal_mutable_mean_file();

  public:
  // optional uint32 crop_size = 3 [default = 0];
  [[nodiscard]] bool has_crop_size()
      const;
  void clear_crop_size() ;
  [[nodiscard]] ::uint32_t crop_size() const;
  void set_crop_size(::uint32_t value);

  private:
  ::uint32_t _internal_crop_size() const;
  void _internal_set_crop_size(::uint32_t value);

  public:
  // optional bool mirror = 2 [default = false];
  [[nodiscard]] bool has_mirror()
      const;
  void clear_mirror() ;
  [[nodiscard]] bool mirror() const;
  void set_mirror(bool value);

  private:
  bool _internal_mirror() const;
  void _internal_set_mirror(bool value);

  public:
  // optional bool force_color = 6 [default = false];
  [[nodiscard]] bool has_force_color()
      const;
  void clear_force_color() ;
  [[nodiscard]] bool force_color() const;
  void set_force_color(bool value);

  private:
  bool _internal_force_color() const;
  void _internal_set_force_color(bool value);

  public:
  // optional bool force_gray = 7 [default = false];
  [[nodiscard]] bool has_force_gray()
      const;
  void clear_force_gray() ;
  [[nodiscard]] bool force_gray() const;
  void set_force_gray(bool value);

  private:
  bool _internal_force_gray() const;
  void _internal_set_force_gray(bool value);

  public:
  // optional float scale = 1 [default = 1];
  [[nodiscard]] bool has_scale()
      const;
  void clear_scale() ;
  [[nodiscard]] float scale() const;
  void set_scale(float value);

  private:
  float _internal_scale() const;
  void _internal_set_scale(float value);

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

  friend class ::google::protobuf::MessageLite;
  friend class ::google::protobuf::Arena;
  friend ::google::protobuf::internal::PrivateAccess;
  template <typename T>
  friend class ::google::protobuf::Arena::InternalHelper;
  using InternalArenaConstructable_ = void;
  using DestructorSkippable_ = void;
  struct Impl_ {
    inline explicit constexpr Impl_(::google::protobuf::internal::InternalVisibility visibility,
                                    ::google::protobuf::internal::ConstantInitialized) noexcept;
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const Impl_& from,
        const TransformationParameter& from_msg);
    ::google::protobuf::internal::HasBits<1> _has_bits_;
    ::google::protobuf::internal::CachedSize _cached_size_;
    ::google::protobuf::RepeatedField<float> mean_value_;
    ::google::protobuf::internal::ArenaStringPtr mean_file_;
    ::uint32_t crop_size_;
    bool mirror_;
    bool force_color_;
    bool force_gray_;
    float scale_;
    PROTOBUF_TSAN_DECLARE_MEMBER
  };
  union { Impl_ _impl_; };
  friend struct ::TableStruct_caffe_2eproto;
};
// -------------------------------------------------------------------

class  PROTOBUF_FUTURE_ADD_EARLY_WARN_UNUSED TileParameter final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:caffe.TileParameter) */ {
 public:
  inline TileParameter() : TileParameter(nullptr) {}
  ~TileParameter() PROTOBUF_FINAL;

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

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

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

  [[nodiscard]] inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  [[nodiscard]] inline ::google::protobuf::UnknownFieldSet* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL descriptor() {
    return GetDescriptor();
  }
  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL
  GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  [[nodiscard]] static const ::google::protobuf::Reflection* PROTOBUF_NONNULL GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  [[nodiscard]] static const TileParameter& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<TileParameter>(&TileParameter_globals_);
  }
  static constexpr int kIndexInFileMessages = 70;
  friend void swap(TileParameter& a, TileParameter& b) { a.Swap(&b); }
  inline void Swap(TileParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(TileParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  [[nodiscard]] TileParameter* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::Message::DefaultConstruct<TileParameter>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const TileParameter& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const TileParameter& from) { TileParameter::MergeImpl(*this, from); }

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

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

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

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

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

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

  [[nodiscard]] ::google::protobuf::Metadata GetMetadata() const;
  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------
  enum : int {
    kTilesFieldNumber = 2,
    kAxisFieldNumber = 1,
  };
  // optional int32 tiles = 2;
  [[nodiscard]] bool has_tiles()
      const;
  void clear_tiles() ;
  [[nodiscard]] ::int32_t tiles() const;
  void set_tiles(::int32_t value);

  private:
  ::int32_t _internal_tiles() const;
  void _internal_set_tiles(::int32_t value);

  public:
  // optional int32 axis = 1 [default = 1];
  [[nodiscard]] bool has_axis()
      const;
  void clear_axis() ;
  [[nodiscard]] ::int32_t axis() const;
  void set_axis(::int32_t value);

  private:
  ::int32_t _internal_axis() const;
  void _internal_set_axis(::int32_t value);

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

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

class  PROTOBUF_FUTURE_ADD_EARLY_WARN_UNUSED ThresholdParameter final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:caffe.ThresholdParameter) */ {
 public:
  inline ThresholdParameter() : ThresholdParameter(nullptr) {}
  ~ThresholdParameter() PROTOBUF_FINAL;

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

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

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

  [[nodiscard]] inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  [[nodiscard]] inline ::google::protobuf::UnknownFieldSet* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL descriptor() {
    return GetDescriptor();
  }
  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL
  GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  [[nodiscard]] static const ::google::protobuf::Reflection* PROTOBUF_NONNULL GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  [[nodiscard]] static const ThresholdParameter& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<ThresholdParameter>(&ThresholdParameter_globals_);
  }
  static constexpr int kIndexInFileMessages = 71;
  friend void swap(ThresholdParameter& a, ThresholdParameter& b) { a.Swap(&b); }
  inline void Swap(ThresholdParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(ThresholdParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  [[nodiscard]] ThresholdParameter* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::Message::DefaultConstruct<ThresholdParameter>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const ThresholdParameter& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const ThresholdParameter& from) { ThresholdParameter::MergeImpl(*this, from); }

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

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

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

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

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

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

  [[nodiscard]] ::google::protobuf::Metadata GetMetadata() const;
  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------
  enum : int {
    kThresholdFieldNumber = 1,
  };
  // optional float threshold = 1 [default = 0];
  [[nodiscard]] bool has_threshold()
      const;
  void clear_threshold() ;
  [[nodiscard]] float threshold() const;
  void set_threshold(float value);

  private:
  float _internal_threshold() const;
  void _internal_set_threshold(float value);

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

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

class  PROTOBUF_FUTURE_ADD_EARLY_WARN_UNUSED TanHParameter final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:caffe.TanHParameter) */ {
 public:
  inline TanHParameter() : TanHParameter(nullptr) {}
  ~TanHParameter() PROTOBUF_FINAL;

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

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

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

  [[nodiscard]] inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  [[nodiscard]] inline ::google::protobuf::UnknownFieldSet* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL descriptor() {
    return GetDescriptor();
  }
  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL
  GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  [[nodiscard]] static const ::google::protobuf::Reflection* PROTOBUF_NONNULL GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  [[nodiscard]] static const TanHParameter& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<TanHParameter>(&TanHParameter_globals_);
  }
  static constexpr int kIndexInFileMessages = 69;
  friend void swap(TanHParameter& a, TanHParameter& b) { a.Swap(&b); }
  inline void Swap(TanHParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(TanHParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  [[nodiscard]] TanHParameter* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::Message::DefaultConstruct<TanHParameter>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const TanHParameter& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const TanHParameter& from) { TanHParameter::MergeImpl(*this, from); }

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

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

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

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

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

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

  [[nodiscard]] ::google::protobuf::Metadata GetMetadata() const;
  // nested types ----------------------------------------------------
  using Engine = TanHParameter_Engine;
  static constexpr Engine DEFAULT = TanHParameter_Engine_DEFAULT;
  static constexpr Engine CAFFE = TanHParameter_Engine_CAFFE;
  static constexpr Engine CUDNN = TanHParameter_Engine_CUDNN;
  [[nodiscard]] static inline bool Engine_IsValid(int value) {
    return TanHParameter_Engine_IsValid(value);
  }
  static constexpr Engine Engine_MIN = TanHParameter_Engine_Engine_MIN;
  static constexpr Engine Engine_MAX = TanHParameter_Engine_Engine_MAX;
  static constexpr int Engine_ARRAYSIZE = TanHParameter_Engine_Engine_ARRAYSIZE;
  static inline const ::google::protobuf::EnumDescriptor* PROTOBUF_NONNULL Engine_descriptor() {
    return TanHParameter_Engine_descriptor();
  }
  template <typename T>
  [[nodiscard]] static inline const ::std::string& Engine_Name(T value) {
    return TanHParameter_Engine_Name(value);
  }
  [[nodiscard]] static inline bool Engine_Parse(
      ::absl::string_view name, Engine* PROTOBUF_NONNULL value) {
    return TanHParameter_Engine_Parse(name, value);
  }

  // accessors -------------------------------------------------------
  enum : int {
    kEngineFieldNumber = 1,
  };
  // optional .caffe.TanHParameter.Engine engine = 1 [default = DEFAULT];
  [[nodiscard]] bool has_engine()
      const;
  void clear_engine() ;
  [[nodiscard]] ::caffe::TanHParameter_Engine engine() const;
  void set_engine(::caffe::TanHParameter_Engine value);

  private:
  ::caffe::TanHParameter_Engine _internal_engine() const;
  void _internal_set_engine(::caffe::TanHParameter_Engine value);

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

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

class  PROTOBUF_FUTURE_ADD_EARLY_WARN_UNUSED SoftmaxParameter final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:caffe.SoftmaxParameter) */ {
 public:
  inline SoftmaxParameter() : SoftmaxParameter(nullptr) {}
  ~SoftmaxParameter() PROTOBUF_FINAL;

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

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

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

  [[nodiscard]] inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  [[nodiscard]] inline ::google::protobuf::UnknownFieldSet* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL descriptor() {
    return GetDescriptor();
  }
  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL
  GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  [[nodiscard]] static const ::google::protobuf::Reflection* PROTOBUF_NONNULL GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  [[nodiscard]] static const SoftmaxParameter& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<SoftmaxParameter>(&SoftmaxParameter_globals_);
  }
  static constexpr int kIndexInFileMessages = 68;
  friend void swap(SoftmaxParameter& a, SoftmaxParameter& b) { a.Swap(&b); }
  inline void Swap(SoftmaxParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(SoftmaxParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  [[nodiscard]] SoftmaxParameter* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::Message::DefaultConstruct<SoftmaxParameter>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const SoftmaxParameter& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const SoftmaxParameter& from) { SoftmaxParameter::MergeImpl(*this, from); }

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

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

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

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

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

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

  [[nodiscard]] ::google::protobuf::Metadata GetMetadata() const;
  // nested types ----------------------------------------------------
  using Engine = SoftmaxParameter_Engine;
  static constexpr Engine DEFAULT = SoftmaxParameter_Engine_DEFAULT;
  static constexpr Engine CAFFE = SoftmaxParameter_Engine_CAFFE;
  static constexpr Engine CUDNN = SoftmaxParameter_Engine_CUDNN;
  [[nodiscard]] static inline bool Engine_IsValid(int value) {
    return SoftmaxParameter_Engine_IsValid(value);
  }
  static constexpr Engine Engine_MIN = SoftmaxParameter_Engine_Engine_MIN;
  static constexpr Engine Engine_MAX = SoftmaxParameter_Engine_Engine_MAX;
  static constexpr int Engine_ARRAYSIZE = SoftmaxParameter_Engine_Engine_ARRAYSIZE;
  static inline const ::google::protobuf::EnumDescriptor* PROTOBUF_NONNULL Engine_descriptor() {
    return SoftmaxParameter_Engine_descriptor();
  }
  template <typename T>
  [[nodiscard]] static inline const ::std::string& Engine_Name(T value) {
    return SoftmaxParameter_Engine_Name(value);
  }
  [[nodiscard]] static inline bool Engine_Parse(
      ::absl::string_view name, Engine* PROTOBUF_NONNULL value) {
    return SoftmaxParameter_Engine_Parse(name, value);
  }

  // accessors -------------------------------------------------------
  enum : int {
    kEngineFieldNumber = 1,
    kAxisFieldNumber = 2,
  };
  // optional .caffe.SoftmaxParameter.Engine engine = 1 [default = DEFAULT];
  [[nodiscard]] bool has_engine()
      const;
  void clear_engine() ;
  [[nodiscard]] ::caffe::SoftmaxParameter_Engine engine() const;
  void set_engine(::caffe::SoftmaxParameter_Engine value);

  private:
  ::caffe::SoftmaxParameter_Engine _internal_engine() const;
  void _internal_set_engine(::caffe::SoftmaxParameter_Engine value);

  public:
  // optional int32 axis = 2 [default = 1];
  [[nodiscard]] bool has_axis()
      const;
  void clear_axis() ;
  [[nodiscard]] ::int32_t axis() const;
  void set_axis(::int32_t value);

  private:
  ::int32_t _internal_axis() const;
  void _internal_set_axis(::int32_t value);

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

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

class  PROTOBUF_FUTURE_ADD_EARLY_WARN_UNUSED SmoothL1LossParameter final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:caffe.SmoothL1LossParameter) */ {
 public:
  inline SmoothL1LossParameter() : SmoothL1LossParameter(nullptr) {}
  ~SmoothL1LossParameter() PROTOBUF_FINAL;

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

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

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

  [[nodiscard]] inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  [[nodiscard]] inline ::google::protobuf::UnknownFieldSet* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL descriptor() {
    return GetDescriptor();
  }
  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL
  GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  [[nodiscard]] static const ::google::protobuf::Reflection* PROTOBUF_NONNULL GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  [[nodiscard]] static const SmoothL1LossParameter& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<SmoothL1LossParameter>(&SmoothL1LossParameter_globals_);
  }
  static constexpr int kIndexInFileMessages = 66;
  friend void swap(SmoothL1LossParameter& a, SmoothL1LossParameter& b) { a.Swap(&b); }
  inline void Swap(SmoothL1LossParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(SmoothL1LossParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  [[nodiscard]] SmoothL1LossParameter* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::Message::DefaultConstruct<SmoothL1LossParameter>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const SmoothL1LossParameter& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const SmoothL1LossParameter& from) { SmoothL1LossParameter::MergeImpl(*this, from); }

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

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

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

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

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

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

  [[nodiscard]] ::google::protobuf::Metadata GetMetadata() const;
  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------
  enum : int {
    kSigmaFieldNumber = 1,
  };
  // optional float sigma = 1 [default = 1];
  [[nodiscard]] bool has_sigma()
      const;
  void clear_sigma() ;
  [[nodiscard]] float sigma() const;
  void set_sigma(float value);

  private:
  float _internal_sigma() const;
  void _internal_set_sigma(float value);

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

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

class  PROTOBUF_FUTURE_ADD_EARLY_WARN_UNUSED SliceParameter final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:caffe.SliceParameter) */ {
 public:
  inline SliceParameter() : SliceParameter(nullptr) {}
  ~SliceParameter() PROTOBUF_FINAL;

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

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

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

  [[nodiscard]] inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  [[nodiscard]] inline ::google::protobuf::UnknownFieldSet* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL descriptor() {
    return GetDescriptor();
  }
  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL
  GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  [[nodiscard]] static const ::google::protobuf::Reflection* PROTOBUF_NONNULL GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  [[nodiscard]] static const SliceParameter& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<SliceParameter>(&SliceParameter_globals_);
  }
  static constexpr int kIndexInFileMessages = 67;
  friend void swap(SliceParameter& a, SliceParameter& b) { a.Swap(&b); }
  inline void Swap(SliceParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(SliceParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  [[nodiscard]] SliceParameter* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::Message::DefaultConstruct<SliceParameter>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const SliceParameter& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const SliceParameter& from) { SliceParameter::MergeImpl(*this, from); }

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

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

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

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

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

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

  [[nodiscard]] ::google::protobuf::Metadata GetMetadata() const;
  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------
  enum : int {
    kSlicePointFieldNumber = 2,
    kSliceDimFieldNumber = 1,
    kAxisFieldNumber = 3,
  };
  // repeated uint32 slice_point = 2;
  [[nodiscard]] int slice_point_size()
      const;
  private:
  int _internal_slice_point_size() const;

  public:
  void clear_slice_point() ;
  [[nodiscard]] ::uint32_t slice_point(int index) const;
  void set_slice_point(int index, ::uint32_t value);
  void add_slice_point(::uint32_t value);
  [[nodiscard]] const ::google::protobuf::RepeatedField<::uint32_t>& slice_point()
      const;
  ::google::protobuf::RepeatedField<::uint32_t>* PROTOBUF_NONNULL mutable_slice_point();

  private:
  const ::google::protobuf::RepeatedField<::uint32_t>& _internal_slice_point() const;
  ::google::protobuf::RepeatedField<::uint32_t>* PROTOBUF_NONNULL _internal_mutable_slice_point();

  public:
  // optional uint32 slice_dim = 1 [default = 1];
  [[nodiscard]] bool has_slice_dim()
      const;
  void clear_slice_dim() ;
  [[nodiscard]] ::uint32_t slice_dim() const;
  void set_slice_dim(::uint32_t value);

  private:
  ::uint32_t _internal_slice_dim() const;
  void _internal_set_slice_dim(::uint32_t value);

  public:
  // optional int32 axis = 3 [default = 1];
  [[nodiscard]] bool has_axis()
      const;
  void clear_axis() ;
  [[nodiscard]] ::int32_t axis() const;
  void set_axis(::int32_t value);

  private:
  ::int32_t _internal_axis() const;
  void _internal_set_axis(::int32_t value);

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

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

class  PROTOBUF_FUTURE_ADD_EARLY_WARN_UNUSED SigmoidParameter final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:caffe.SigmoidParameter) */ {
 public:
  inline SigmoidParameter() : SigmoidParameter(nullptr) {}
  ~SigmoidParameter() PROTOBUF_FINAL;

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

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

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

  [[nodiscard]] inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  [[nodiscard]] inline ::google::protobuf::UnknownFieldSet* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL descriptor() {
    return GetDescriptor();
  }
  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL
  GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  [[nodiscard]] static const ::google::protobuf::Reflection* PROTOBUF_NONNULL GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  [[nodiscard]] static const SigmoidParameter& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<SigmoidParameter>(&SigmoidParameter_globals_);
  }
  static constexpr int kIndexInFileMessages = 65;
  friend void swap(SigmoidParameter& a, SigmoidParameter& b) { a.Swap(&b); }
  inline void Swap(SigmoidParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(SigmoidParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  [[nodiscard]] SigmoidParameter* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::Message::DefaultConstruct<SigmoidParameter>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const SigmoidParameter& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const SigmoidParameter& from) { SigmoidParameter::MergeImpl(*this, from); }

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

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

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

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

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

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

  [[nodiscard]] ::google::protobuf::Metadata GetMetadata() const;
  // nested types ----------------------------------------------------
  using Engine = SigmoidParameter_Engine;
  static constexpr Engine DEFAULT = SigmoidParameter_Engine_DEFAULT;
  static constexpr Engine CAFFE = SigmoidParameter_Engine_CAFFE;
  static constexpr Engine CUDNN = SigmoidParameter_Engine_CUDNN;
  [[nodiscard]] static inline bool Engine_IsValid(int value) {
    return SigmoidParameter_Engine_IsValid(value);
  }
  static constexpr Engine Engine_MIN = SigmoidParameter_Engine_Engine_MIN;
  static constexpr Engine Engine_MAX = SigmoidParameter_Engine_Engine_MAX;
  static constexpr int Engine_ARRAYSIZE = SigmoidParameter_Engine_Engine_ARRAYSIZE;
  static inline const ::google::protobuf::EnumDescriptor* PROTOBUF_NONNULL Engine_descriptor() {
    return SigmoidParameter_Engine_descriptor();
  }
  template <typename T>
  [[nodiscard]] static inline const ::std::string& Engine_Name(T value) {
    return SigmoidParameter_Engine_Name(value);
  }
  [[nodiscard]] static inline bool Engine_Parse(
      ::absl::string_view name, Engine* PROTOBUF_NONNULL value) {
    return SigmoidParameter_Engine_Parse(name, value);
  }

  // accessors -------------------------------------------------------
  enum : int {
    kEngineFieldNumber = 1,
  };
  // optional .caffe.SigmoidParameter.Engine engine = 1 [default = DEFAULT];
  [[nodiscard]] bool has_engine()
      const;
  void clear_engine() ;
  [[nodiscard]] ::caffe::SigmoidParameter_Engine engine() const;
  void set_engine(::caffe::SigmoidParameter_Engine value);

  private:
  ::caffe::SigmoidParameter_Engine _internal_engine() const;
  void _internal_set_engine(::caffe::SigmoidParameter_Engine value);

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

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

class  PROTOBUF_FUTURE_ADD_EARLY_WARN_UNUSED ShuffleChannelParameter final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:caffe.ShuffleChannelParameter) */ {
 public:
  inline ShuffleChannelParameter() : ShuffleChannelParameter(nullptr) {}
  ~ShuffleChannelParameter() PROTOBUF_FINAL;

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

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

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

  [[nodiscard]] inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  [[nodiscard]] inline ::google::protobuf::UnknownFieldSet* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL descriptor() {
    return GetDescriptor();
  }
  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL
  GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  [[nodiscard]] static const ::google::protobuf::Reflection* PROTOBUF_NONNULL GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  [[nodiscard]] static const ShuffleChannelParameter& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<ShuffleChannelParameter>(&ShuffleChannelParameter_globals_);
  }
  static constexpr int kIndexInFileMessages = 64;
  friend void swap(ShuffleChannelParameter& a, ShuffleChannelParameter& b) { a.Swap(&b); }
  inline void Swap(ShuffleChannelParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(ShuffleChannelParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  [[nodiscard]] ShuffleChannelParameter* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::Message::DefaultConstruct<ShuffleChannelParameter>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const ShuffleChannelParameter& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const ShuffleChannelParameter& from) { ShuffleChannelParameter::MergeImpl(*this, from); }

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

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

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

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

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

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

  [[nodiscard]] ::google::protobuf::Metadata GetMetadata() const;
  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------
  enum : int {
    kGroupFieldNumber = 1,
  };
  // optional uint32 group = 1 [default = 1];
  [[nodiscard]] bool has_group()
      const;
  void clear_group() ;
  [[nodiscard]] ::uint32_t group() const;
  void set_group(::uint32_t value);

  private:
  ::uint32_t _internal_group() const;
  void _internal_set_group(::uint32_t value);

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

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

class  PROTOBUF_FUTURE_ADD_EARLY_WARN_UNUSED SPPParameter final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:caffe.SPPParameter) */ {
 public:
  inline SPPParameter() : SPPParameter(nullptr) {}
  ~SPPParameter() PROTOBUF_FINAL;

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

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

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

  [[nodiscard]] inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  [[nodiscard]] inline ::google::protobuf::UnknownFieldSet* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL descriptor() {
    return GetDescriptor();
  }
  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL
  GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  [[nodiscard]] static const ::google::protobuf::Reflection* PROTOBUF_NONNULL GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  [[nodiscard]] static const SPPParameter& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<SPPParameter>(&SPPParameter_globals_);
  }
  static constexpr int kIndexInFileMessages = 73;
  friend void swap(SPPParameter& a, SPPParameter& b) { a.Swap(&b); }
  inline void Swap(SPPParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(SPPParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  [[nodiscard]] SPPParameter* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::Message::DefaultConstruct<SPPParameter>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const SPPParameter& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const SPPParameter& from) { SPPParameter::MergeImpl(*this, from); }

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

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

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

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

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

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

  [[nodiscard]] ::google::protobuf::Metadata GetMetadata() const;
  // nested types ----------------------------------------------------
  using PoolMethod = SPPParameter_PoolMethod;
  static constexpr PoolMethod MAX = SPPParameter_PoolMethod_MAX;
  static constexpr PoolMethod AVE = SPPParameter_PoolMethod_AVE;
  static constexpr PoolMethod STOCHASTIC = SPPParameter_PoolMethod_STOCHASTIC;
  [[nodiscard]] static inline bool PoolMethod_IsValid(int value) {
    return SPPParameter_PoolMethod_IsValid(value);
  }
  static constexpr PoolMethod PoolMethod_MIN = SPPParameter_PoolMethod_PoolMethod_MIN;
  static constexpr PoolMethod PoolMethod_MAX = SPPParameter_PoolMethod_PoolMethod_MAX;
  static constexpr int PoolMethod_ARRAYSIZE = SPPParameter_PoolMethod_PoolMethod_ARRAYSIZE;
  static inline const ::google::protobuf::EnumDescriptor* PROTOBUF_NONNULL PoolMethod_descriptor() {
    return SPPParameter_PoolMethod_descriptor();
  }
  template <typename T>
  [[nodiscard]] static inline const ::std::string& PoolMethod_Name(T value) {
    return SPPParameter_PoolMethod_Name(value);
  }
  [[nodiscard]] static inline bool PoolMethod_Parse(
      ::absl::string_view name, PoolMethod* PROTOBUF_NONNULL value) {
    return SPPParameter_PoolMethod_Parse(name, value);
  }
  using Engine = SPPParameter_Engine;
  static constexpr Engine DEFAULT = SPPParameter_Engine_DEFAULT;
  static constexpr Engine CAFFE = SPPParameter_Engine_CAFFE;
  static constexpr Engine CUDNN = SPPParameter_Engine_CUDNN;
  [[nodiscard]] static inline bool Engine_IsValid(int value) {
    return SPPParameter_Engine_IsValid(value);
  }
  static constexpr Engine Engine_MIN = SPPParameter_Engine_Engine_MIN;
  static constexpr Engine Engine_MAX = SPPParameter_Engine_Engine_MAX;
  static constexpr int Engine_ARRAYSIZE = SPPParameter_Engine_Engine_ARRAYSIZE;
  static inline const ::google::protobuf::EnumDescriptor* PROTOBUF_NONNULL Engine_descriptor() {
    return SPPParameter_Engine_descriptor();
  }
  template <typename T>
  [[nodiscard]] static inline const ::std::string& Engine_Name(T value) {
    return SPPParameter_Engine_Name(value);
  }
  [[nodiscard]] static inline bool Engine_Parse(
      ::absl::string_view name, Engine* PROTOBUF_NONNULL value) {
    return SPPParameter_Engine_Parse(name, value);
  }

  // accessors -------------------------------------------------------
  enum : int {
    kPyramidHeightFieldNumber = 1,
    kPoolFieldNumber = 2,
    kEngineFieldNumber = 6,
  };
  // optional uint32 pyramid_height = 1;
  [[nodiscard]] bool has_pyramid_height()
      const;
  void clear_pyramid_height() ;
  [[nodiscard]] ::uint32_t pyramid_height() const;
  void set_pyramid_height(::uint32_t value);

  private:
  ::uint32_t _internal_pyramid_height() const;
  void _internal_set_pyramid_height(::uint32_t value);

  public:
  // optional .caffe.SPPParameter.PoolMethod pool = 2 [default = MAX];
  [[nodiscard]] bool has_pool()
      const;
  void clear_pool() ;
  [[nodiscard]] ::caffe::SPPParameter_PoolMethod pool() const;
  void set_pool(::caffe::SPPParameter_PoolMethod value);

  private:
  ::caffe::SPPParameter_PoolMethod _internal_pool() const;
  void _internal_set_pool(::caffe::SPPParameter_PoolMethod value);

  public:
  // optional .caffe.SPPParameter.Engine engine = 6 [default = DEFAULT];
  [[nodiscard]] bool has_engine()
      const;
  void clear_engine() ;
  [[nodiscard]] ::caffe::SPPParameter_Engine engine() const;
  void set_engine(::caffe::SPPParameter_Engine value);

  private:
  ::caffe::SPPParameter_Engine _internal_engine() const;
  void _internal_set_engine(::caffe::SPPParameter_Engine value);

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

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

class  PROTOBUF_FUTURE_ADD_EARLY_WARN_UNUSED ResizeParameter final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:caffe.ResizeParameter) */ {
 public:
  inline ResizeParameter() : ResizeParameter(nullptr) {}
  ~ResizeParameter() PROTOBUF_FINAL;

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

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

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

  [[nodiscard]] inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  [[nodiscard]] inline ::google::protobuf::UnknownFieldSet* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL descriptor() {
    return GetDescriptor();
  }
  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL
  GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  [[nodiscard]] static const ::google::protobuf::Reflection* PROTOBUF_NONNULL GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  [[nodiscard]] static const ResizeParameter& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<ResizeParameter>(&ResizeParameter_globals_);
  }
  static constexpr int kIndexInFileMessages = 13;
  friend void swap(ResizeParameter& a, ResizeParameter& b) { a.Swap(&b); }
  inline void Swap(ResizeParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(ResizeParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  [[nodiscard]] ResizeParameter* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::Message::DefaultConstruct<ResizeParameter>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const ResizeParameter& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const ResizeParameter& from) { ResizeParameter::MergeImpl(*this, from); }

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

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

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

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

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

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

  [[nodiscard]] ::google::protobuf::Metadata GetMetadata() const;
  // nested types ----------------------------------------------------
  using Resize_mode = ResizeParameter_Resize_mode;
  static constexpr Resize_mode WARP = ResizeParameter_Resize_mode_WARP;
  static constexpr Resize_mode FIT_SMALL_SIZE = ResizeParameter_Resize_mode_FIT_SMALL_SIZE;
  static constexpr Resize_mode FIT_LARGE_SIZE_AND_PAD = ResizeParameter_Resize_mode_FIT_LARGE_SIZE_AND_PAD;
  [[nodiscard]] static inline bool Resize_mode_IsValid(int value) {
    return ResizeParameter_Resize_mode_IsValid(value);
  }
  static constexpr Resize_mode Resize_mode_MIN = ResizeParameter_Resize_mode_Resize_mode_MIN;
  static constexpr Resize_mode Resize_mode_MAX = ResizeParameter_Resize_mode_Resize_mode_MAX;
  static constexpr int Resize_mode_ARRAYSIZE = ResizeParameter_Resize_mode_Resize_mode_ARRAYSIZE;
  static inline const ::google::protobuf::EnumDescriptor* PROTOBUF_NONNULL Resize_mode_descriptor() {
    return ResizeParameter_Resize_mode_descriptor();
  }
  template <typename T>
  [[nodiscard]] static inline const ::std::string& Resize_mode_Name(T value) {
    return ResizeParameter_Resize_mode_Name(value);
  }
  [[nodiscard]] static inline bool Resize_mode_Parse(
      ::absl::string_view name, Resize_mode* PROTOBUF_NONNULL value) {
    return ResizeParameter_Resize_mode_Parse(name, value);
  }
  using Pad_mode = ResizeParameter_Pad_mode;
  static constexpr Pad_mode CONSTANT = ResizeParameter_Pad_mode_CONSTANT;
  static constexpr Pad_mode MIRRORED = ResizeParameter_Pad_mode_MIRRORED;
  static constexpr Pad_mode REPEAT_NEAREST = ResizeParameter_Pad_mode_REPEAT_NEAREST;
  [[nodiscard]] static inline bool Pad_mode_IsValid(int value) {
    return ResizeParameter_Pad_mode_IsValid(value);
  }
  static constexpr Pad_mode Pad_mode_MIN = ResizeParameter_Pad_mode_Pad_mode_MIN;
  static constexpr Pad_mode Pad_mode_MAX = ResizeParameter_Pad_mode_Pad_mode_MAX;
  static constexpr int Pad_mode_ARRAYSIZE = ResizeParameter_Pad_mode_Pad_mode_ARRAYSIZE;
  static inline const ::google::protobuf::EnumDescriptor* PROTOBUF_NONNULL Pad_mode_descriptor() {
    return ResizeParameter_Pad_mode_descriptor();
  }
  template <typename T>
  [[nodiscard]] static inline const ::std::string& Pad_mode_Name(T value) {
    return ResizeParameter_Pad_mode_Name(value);
  }
  [[nodiscard]] static inline bool Pad_mode_Parse(
      ::absl::string_view name, Pad_mode* PROTOBUF_NONNULL value) {
    return ResizeParameter_Pad_mode_Parse(name, value);
  }
  using Interp_mode = ResizeParameter_Interp_mode;
  static constexpr Interp_mode LINEAR = ResizeParameter_Interp_mode_LINEAR;
  static constexpr Interp_mode AREA = ResizeParameter_Interp_mode_AREA;
  static constexpr Interp_mode NEAREST = ResizeParameter_Interp_mode_NEAREST;
  static constexpr Interp_mode CUBIC = ResizeParameter_Interp_mode_CUBIC;
  static constexpr Interp_mode LANCZOS4 = ResizeParameter_Interp_mode_LANCZOS4;
  [[nodiscard]] static inline bool Interp_mode_IsValid(int value) {
    return ResizeParameter_Interp_mode_IsValid(value);
  }
  static constexpr Interp_mode Interp_mode_MIN = ResizeParameter_Interp_mode_Interp_mode_MIN;
  static constexpr Interp_mode Interp_mode_MAX = ResizeParameter_Interp_mode_Interp_mode_MAX;
  static constexpr int Interp_mode_ARRAYSIZE = ResizeParameter_Interp_mode_Interp_mode_ARRAYSIZE;
  static inline const ::google::protobuf::EnumDescriptor* PROTOBUF_NONNULL Interp_mode_descriptor() {
    return ResizeParameter_Interp_mode_descriptor();
  }
  template <typename T>
  [[nodiscard]] static inline const ::std::string& Interp_mode_Name(T value) {
    return ResizeParameter_Interp_mode_Name(value);
  }
  [[nodiscard]] static inline bool Interp_mode_Parse(
      ::absl::string_view name, Interp_mode* PROTOBUF_NONNULL value) {
    return ResizeParameter_Interp_mode_Parse(name, value);
  }

  // accessors -------------------------------------------------------
  enum : int {
    kPadValueFieldNumber = 6,
    kInterpModeFieldNumber = 7,
    kHeightFieldNumber = 3,
    kWidthFieldNumber = 4,
    kHeightScaleFieldNumber = 8,
    kWidthScaleFieldNumber = 9,
    kProbFieldNumber = 1,
    kResizeModeFieldNumber = 2,
    kPadModeFieldNumber = 5,
  };
  // repeated float pad_value = 6;
  [[nodiscard]] int pad_value_size()
      const;
  private:
  int _internal_pad_value_size() const;

  public:
  void clear_pad_value() ;
  [[nodiscard]] float pad_value(int index) const;
  void set_pad_value(int index, float value);
  void add_pad_value(float value);
  [[nodiscard]] const ::google::protobuf::RepeatedField<float>& pad_value()
      const;
  ::google::protobuf::RepeatedField<float>* PROTOBUF_NONNULL mutable_pad_value();

  private:
  const ::google::protobuf::RepeatedField<float>& _internal_pad_value() const;
  ::google::protobuf::RepeatedField<float>* PROTOBUF_NONNULL _internal_mutable_pad_value();

  public:
  // repeated .caffe.ResizeParameter.Interp_mode interp_mode = 7;
  [[nodiscard]] int interp_mode_size()
      const;
  private:
  int _internal_interp_mode_size() const;

  public:
  void clear_interp_mode() ;
  public:
  [[nodiscard]] ::caffe::ResizeParameter_Interp_mode interp_mode(int index) const;
  void set_interp_mode(int index, ::caffe::ResizeParameter_Interp_mode value);
  void add_interp_mode(::caffe::ResizeParameter_Interp_mode value);
  [[nodiscard]] const ::google::protobuf::RepeatedField<int>& interp_mode()
      const;
  [[nodiscard]] ::google::protobuf::RepeatedField<int>* PROTOBUF_NONNULL mutable_interp_mode();

  private:
  const ::google::protobuf::RepeatedField<int>& _internal_interp_mode() const;
  ::google::protobuf::RepeatedField<int>* PROTOBUF_NONNULL _internal_mutable_interp_mode();

  public:
  // optional uint32 height = 3 [default = 0];
  [[nodiscard]] bool has_height()
      const;
  void clear_height() ;
  [[nodiscard]] ::uint32_t height() const;
  void set_height(::uint32_t value);

  private:
  ::uint32_t _internal_height() const;
  void _internal_set_height(::uint32_t value);

  public:
  // optional uint32 width = 4 [default = 0];
  [[nodiscard]] bool has_width()
      const;
  void clear_width() ;
  [[nodiscard]] ::uint32_t width() const;
  void set_width(::uint32_t value);

  private:
  ::uint32_t _internal_width() const;
  void _internal_set_width(::uint32_t value);

  public:
  // optional uint32 height_scale = 8 [default = 0];
  [[nodiscard]] bool has_height_scale()
      const;
  void clear_height_scale() ;
  [[nodiscard]] ::uint32_t height_scale() const;
  void set_height_scale(::uint32_t value);

  private:
  ::uint32_t _internal_height_scale() const;
  void _internal_set_height_scale(::uint32_t value);

  public:
  // optional uint32 width_scale = 9 [default = 0];
  [[nodiscard]] bool has_width_scale()
      const;
  void clear_width_scale() ;
  [[nodiscard]] ::uint32_t width_scale() const;
  void set_width_scale(::uint32_t value);

  private:
  ::uint32_t _internal_width_scale() const;
  void _internal_set_width_scale(::uint32_t value);

  public:
  // optional float prob = 1 [default = 1];
  [[nodiscard]] bool has_prob()
      const;
  void clear_prob() ;
  [[nodiscard]] float prob() const;
  void set_prob(float value);

  private:
  float _internal_prob() const;
  void _internal_set_prob(float value);

  public:
  // optional .caffe.ResizeParameter.Resize_mode resize_mode = 2 [default = WARP];
  [[nodiscard]] bool has_resize_mode()
      const;
  void clear_resize_mode() ;
  [[nodiscard]] ::caffe::ResizeParameter_Resize_mode resize_mode() const;
  void set_resize_mode(::caffe::ResizeParameter_Resize_mode value);

  private:
  ::caffe::ResizeParameter_Resize_mode _internal_resize_mode() const;
  void _internal_set_resize_mode(::caffe::ResizeParameter_Resize_mode value);

  public:
  // optional .caffe.ResizeParameter.Pad_mode pad_mode = 5 [default = CONSTANT];
  [[nodiscard]] bool has_pad_mode()
      const;
  void clear_pad_mode() ;
  [[nodiscard]] ::caffe::ResizeParameter_Pad_mode pad_mode() const;
  void set_pad_mode(::caffe::ResizeParameter_Pad_mode value);

  private:
  ::caffe::ResizeParameter_Pad_mode _internal_pad_mode() const;
  void _internal_set_pad_mode(::caffe::ResizeParameter_Pad_mode value);

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

  friend class ::google::protobuf::MessageLite;
  friend class ::google::protobuf::Arena;
  friend ::google::protobuf::internal::PrivateAccess;
  template <typename T>
  friend class ::google::protobuf::Arena::InternalHelper;
  using InternalArenaConstructable_ = void;
  using DestructorSkippable_ = void;
  struct Impl_ {
    inline explicit constexpr Impl_(::google::protobuf::internal::InternalVisibility visibility,
                                    ::google::protobuf::internal::ConstantInitialized) noexcept;
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const Impl_& from,
        const ResizeParameter& from_msg);
    ::google::protobuf::internal::HasBits<1> _has_bits_;
    ::google::protobuf::internal::CachedSize _cached_size_;
    ::google::protobuf::RepeatedField<float> pad_value_;
    ::google::protobuf::RepeatedField<int> interp_mode_;
    ::uint32_t height_;
    ::uint32_t width_;
    ::uint32_t height_scale_;
    ::uint32_t width_scale_;
    float prob_;
    int resize_mode_;
    int pad_mode_;
    PROTOBUF_TSAN_DECLARE_MEMBER
  };
  union { Impl_ _impl_; };
  friend struct ::TableStruct_caffe_2eproto;
};
// -------------------------------------------------------------------

class  PROTOBUF_FUTURE_ADD_EARLY_WARN_UNUSED ReorgParameter final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:caffe.ReorgParameter) */ {
 public:
  inline ReorgParameter() : ReorgParameter(nullptr) {}
  ~ReorgParameter() PROTOBUF_FINAL;

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

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

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

  [[nodiscard]] inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  [[nodiscard]] inline ::google::protobuf::UnknownFieldSet* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL descriptor() {
    return GetDescriptor();
  }
  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL
  GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  [[nodiscard]] static const ::google::protobuf::Reflection* PROTOBUF_NONNULL GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  [[nodiscard]] static const ReorgParameter& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<ReorgParameter>(&ReorgParameter_globals_);
  }
  static constexpr int kIndexInFileMessages = 59;
  friend void swap(ReorgParameter& a, ReorgParameter& b) { a.Swap(&b); }
  inline void Swap(ReorgParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(ReorgParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  [[nodiscard]] ReorgParameter* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::Message::DefaultConstruct<ReorgParameter>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const ReorgParameter& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const ReorgParameter& from) { ReorgParameter::MergeImpl(*this, from); }

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

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

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

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

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

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

  [[nodiscard]] ::google::protobuf::Metadata GetMetadata() const;
  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------
  enum : int {
    kStrideFieldNumber = 1,
    kReverseFieldNumber = 2,
  };
  // optional uint32 stride = 1;
  [[nodiscard]] bool has_stride()
      const;
  void clear_stride() ;
  [[nodiscard]] ::uint32_t stride() const;
  void set_stride(::uint32_t value);

  private:
  ::uint32_t _internal_stride() const;
  void _internal_set_stride(::uint32_t value);

  public:
  // optional bool reverse = 2 [default = false];
  [[nodiscard]] bool has_reverse()
      const;
  void clear_reverse() ;
  [[nodiscard]] bool reverse() const;
  void set_reverse(bool value);

  private:
  bool _internal_reverse() const;
  void _internal_set_reverse(bool value);

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

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

class  PROTOBUF_FUTURE_ADD_EARLY_WARN_UNUSED ReductionParameter final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:caffe.ReductionParameter) */ {
 public:
  inline ReductionParameter() : ReductionParameter(nullptr) {}
  ~ReductionParameter() PROTOBUF_FINAL;

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

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

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

  [[nodiscard]] inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  [[nodiscard]] inline ::google::protobuf::UnknownFieldSet* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL descriptor() {
    return GetDescriptor();
  }
  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL
  GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  [[nodiscard]] static const ::google::protobuf::Reflection* PROTOBUF_NONNULL GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  [[nodiscard]] static const ReductionParameter& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<ReductionParameter>(&ReductionParameter_globals_);
  }
  static constexpr int kIndexInFileMessages = 57;
  friend void swap(ReductionParameter& a, ReductionParameter& b) { a.Swap(&b); }
  inline void Swap(ReductionParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(ReductionParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  [[nodiscard]] ReductionParameter* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::Message::DefaultConstruct<ReductionParameter>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const ReductionParameter& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const ReductionParameter& from) { ReductionParameter::MergeImpl(*this, from); }

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

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

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

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

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

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

  [[nodiscard]] ::google::protobuf::Metadata GetMetadata() const;
  // nested types ----------------------------------------------------
  using ReductionOp = ReductionParameter_ReductionOp;
  static constexpr ReductionOp SUM = ReductionParameter_ReductionOp_SUM;
  static constexpr ReductionOp ASUM = ReductionParameter_ReductionOp_ASUM;
  static constexpr ReductionOp SUMSQ = ReductionParameter_ReductionOp_SUMSQ;
  static constexpr ReductionOp MEAN = ReductionParameter_ReductionOp_MEAN;
  [[nodiscard]] static inline bool ReductionOp_IsValid(int value) {
    return ReductionParameter_ReductionOp_IsValid(value);
  }
  static constexpr ReductionOp ReductionOp_MIN = ReductionParameter_ReductionOp_ReductionOp_MIN;
  static constexpr ReductionOp ReductionOp_MAX = ReductionParameter_ReductionOp_ReductionOp_MAX;
  static constexpr int ReductionOp_ARRAYSIZE = ReductionParameter_ReductionOp_ReductionOp_ARRAYSIZE;
  static inline const ::google::protobuf::EnumDescriptor* PROTOBUF_NONNULL ReductionOp_descriptor() {
    return ReductionParameter_ReductionOp_descriptor();
  }
  template <typename T>
  [[nodiscard]] static inline const ::std::string& ReductionOp_Name(T value) {
    return ReductionParameter_ReductionOp_Name(value);
  }
  [[nodiscard]] static inline bool ReductionOp_Parse(
      ::absl::string_view name, ReductionOp* PROTOBUF_NONNULL value) {
    return ReductionParameter_ReductionOp_Parse(name, value);
  }

  // accessors -------------------------------------------------------
  enum : int {
    kAxisFieldNumber = 2,
    kOperationFieldNumber = 1,
    kCoeffFieldNumber = 3,
  };
  // optional int32 axis = 2 [default = 0];
  [[nodiscard]] bool has_axis()
      const;
  void clear_axis() ;
  [[nodiscard]] ::int32_t axis() const;
  void set_axis(::int32_t value);

  private:
  ::int32_t _internal_axis() const;
  void _internal_set_axis(::int32_t value);

  public:
  // optional .caffe.ReductionParameter.ReductionOp operation = 1 [default = SUM];
  [[nodiscard]] bool has_operation()
      const;
  void clear_operation() ;
  [[nodiscard]] ::caffe::ReductionParameter_ReductionOp operation() const;
  void set_operation(::caffe::ReductionParameter_ReductionOp value);

  private:
  ::caffe::ReductionParameter_ReductionOp _internal_operation() const;
  void _internal_set_operation(::caffe::ReductionParameter_ReductionOp value);

  public:
  // optional float coeff = 3 [default = 1];
  [[nodiscard]] bool has_coeff()
      const;
  void clear_coeff() ;
  [[nodiscard]] float coeff() const;
  void set_coeff(float value);

  private:
  float _internal_coeff() const;
  void _internal_set_coeff(float value);

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

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

class  PROTOBUF_FUTURE_ADD_EARLY_WARN_UNUSED ReLUParameter final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:caffe.ReLUParameter) */ {
 public:
  inline ReLUParameter() : ReLUParameter(nullptr) {}
  ~ReLUParameter() PROTOBUF_FINAL;

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

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

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

  [[nodiscard]] inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  [[nodiscard]] inline ::google::protobuf::UnknownFieldSet* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL descriptor() {
    return GetDescriptor();
  }
  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL
  GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  [[nodiscard]] static const ::google::protobuf::Reflection* PROTOBUF_NONNULL GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  [[nodiscard]] static const ReLUParameter& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<ReLUParameter>(&ReLUParameter_globals_);
  }
  static constexpr int kIndexInFileMessages = 58;
  friend void swap(ReLUParameter& a, ReLUParameter& b) { a.Swap(&b); }
  inline void Swap(ReLUParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(ReLUParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  [[nodiscard]] ReLUParameter* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::Message::DefaultConstruct<ReLUParameter>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const ReLUParameter& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const ReLUParameter& from) { ReLUParameter::MergeImpl(*this, from); }

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

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

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

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

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

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

  [[nodiscard]] ::google::protobuf::Metadata GetMetadata() const;
  // nested types ----------------------------------------------------
  using Engine = ReLUParameter_Engine;
  static constexpr Engine DEFAULT = ReLUParameter_Engine_DEFAULT;
  static constexpr Engine CAFFE = ReLUParameter_Engine_CAFFE;
  static constexpr Engine CUDNN = ReLUParameter_Engine_CUDNN;
  [[nodiscard]] static inline bool Engine_IsValid(int value) {
    return ReLUParameter_Engine_IsValid(value);
  }
  static constexpr Engine Engine_MIN = ReLUParameter_Engine_Engine_MIN;
  static constexpr Engine Engine_MAX = ReLUParameter_Engine_Engine_MAX;
  static constexpr int Engine_ARRAYSIZE = ReLUParameter_Engine_Engine_ARRAYSIZE;
  static inline const ::google::protobuf::EnumDescriptor* PROTOBUF_NONNULL Engine_descriptor() {
    return ReLUParameter_Engine_descriptor();
  }
  template <typename T>
  [[nodiscard]] static inline const ::std::string& Engine_Name(T value) {
    return ReLUParameter_Engine_Name(value);
  }
  [[nodiscard]] static inline bool Engine_Parse(
      ::absl::string_view name, Engine* PROTOBUF_NONNULL value) {
    return ReLUParameter_Engine_Parse(name, value);
  }

  // accessors -------------------------------------------------------
  enum : int {
    kNegativeSlopeFieldNumber = 1,
    kEngineFieldNumber = 2,
  };
  // optional float negative_slope = 1 [default = 0];
  [[nodiscard]] bool has_negative_slope()
      const;
  void clear_negative_slope() ;
  [[nodiscard]] float negative_slope() const;
  void set_negative_slope(float value);

  private:
  float _internal_negative_slope() const;
  void _internal_set_negative_slope(float value);

  public:
  // optional .caffe.ReLUParameter.Engine engine = 2 [default = DEFAULT];
  [[nodiscard]] bool has_engine()
      const;
  void clear_engine() ;
  [[nodiscard]] ::caffe::ReLUParameter_Engine engine() const;
  void set_engine(::caffe::ReLUParameter_Engine value);

  private:
  ::caffe::ReLUParameter_Engine _internal_engine() const;
  void _internal_set_engine(::caffe::ReLUParameter_Engine value);

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

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

class  PROTOBUF_FUTURE_ADD_EARLY_WARN_UNUSED ROIPoolingParameter final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:caffe.ROIPoolingParameter) */ {
 public:
  inline ROIPoolingParameter() : ROIPoolingParameter(nullptr) {}
  ~ROIPoolingParameter() PROTOBUF_FINAL;

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

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

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

  [[nodiscard]] inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  [[nodiscard]] inline ::google::protobuf::UnknownFieldSet* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL descriptor() {
    return GetDescriptor();
  }
  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL
  GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  [[nodiscard]] static const ::google::protobuf::Reflection* PROTOBUF_NONNULL GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  [[nodiscard]] static const ROIPoolingParameter& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<ROIPoolingParameter>(&ROIPoolingParameter_globals_);
  }
  static constexpr int kIndexInFileMessages = 62;
  friend void swap(ROIPoolingParameter& a, ROIPoolingParameter& b) { a.Swap(&b); }
  inline void Swap(ROIPoolingParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(ROIPoolingParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  [[nodiscard]] ROIPoolingParameter* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::Message::DefaultConstruct<ROIPoolingParameter>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const ROIPoolingParameter& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const ROIPoolingParameter& from) { ROIPoolingParameter::MergeImpl(*this, from); }

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

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

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

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

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

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

  [[nodiscard]] ::google::protobuf::Metadata GetMetadata() const;
  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------
  enum : int {
    kPooledHFieldNumber = 1,
    kPooledWFieldNumber = 2,
    kSpatialScaleFieldNumber = 3,
  };
  // optional uint32 pooled_h = 1 [default = 0];
  [[nodiscard]] bool has_pooled_h()
      const;
  void clear_pooled_h() ;
  [[nodiscard]] ::uint32_t pooled_h() const;
  void set_pooled_h(::uint32_t value);

  private:
  ::uint32_t _internal_pooled_h() const;
  void _internal_set_pooled_h(::uint32_t value);

  public:
  // optional uint32 pooled_w = 2 [default = 0];
  [[nodiscard]] bool has_pooled_w()
      const;
  void clear_pooled_w() ;
  [[nodiscard]] ::uint32_t pooled_w() const;
  void set_pooled_w(::uint32_t value);

  private:
  ::uint32_t _internal_pooled_w() const;
  void _internal_set_pooled_w(::uint32_t value);

  public:
  // optional float spatial_scale = 3 [default = 1];
  [[nodiscard]] bool has_spatial_scale()
      const;
  void clear_spatial_scale() ;
  [[nodiscard]] float spatial_scale() const;
  void set_spatial_scale(float value);

  private:
  float _internal_spatial_scale() const;
  void _internal_set_spatial_scale(float value);

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

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

class  PROTOBUF_FUTURE_ADD_EARLY_WARN_UNUSED ROIAlignParameter final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:caffe.ROIAlignParameter) */ {
 public:
  inline ROIAlignParameter() : ROIAlignParameter(nullptr) {}
  ~ROIAlignParameter() PROTOBUF_FINAL;

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

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

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

  [[nodiscard]] inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  [[nodiscard]] inline ::google::protobuf::UnknownFieldSet* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL descriptor() {
    return GetDescriptor();
  }
  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL
  GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  [[nodiscard]] static const ::google::protobuf::Reflection* PROTOBUF_NONNULL GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  [[nodiscard]] static const ROIAlignParameter& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<ROIAlignParameter>(&ROIAlignParameter_globals_);
  }
  static constexpr int kIndexInFileMessages = 61;
  friend void swap(ROIAlignParameter& a, ROIAlignParameter& b) { a.Swap(&b); }
  inline void Swap(ROIAlignParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(ROIAlignParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  [[nodiscard]] ROIAlignParameter* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::Message::DefaultConstruct<ROIAlignParameter>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const ROIAlignParameter& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const ROIAlignParameter& from) { ROIAlignParameter::MergeImpl(*this, from); }

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

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

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

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

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

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

  [[nodiscard]] ::google::protobuf::Metadata GetMetadata() const;
  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------
  enum : int {
    kPooledHFieldNumber = 1,
    kPooledWFieldNumber = 2,
    kSpatialScaleFieldNumber = 3,
  };
  // optional uint32 pooled_h = 1 [default = 0];
  [[nodiscard]] bool has_pooled_h()
      const;
  void clear_pooled_h() ;
  [[nodiscard]] ::uint32_t pooled_h() const;
  void set_pooled_h(::uint32_t value);

  private:
  ::uint32_t _internal_pooled_h() const;
  void _internal_set_pooled_h(::uint32_t value);

  public:
  // optional uint32 pooled_w = 2 [default = 0];
  [[nodiscard]] bool has_pooled_w()
      const;
  void clear_pooled_w() ;
  [[nodiscard]] ::uint32_t pooled_w() const;
  void set_pooled_w(::uint32_t value);

  private:
  ::uint32_t _internal_pooled_w() const;
  void _internal_set_pooled_w(::uint32_t value);

  public:
  // optional float spatial_scale = 3 [default = 1];
  [[nodiscard]] bool has_spatial_scale()
      const;
  void clear_spatial_scale() ;
  [[nodiscard]] float spatial_scale() const;
  void set_spatial_scale(float value);

  private:
  float _internal_spatial_scale() const;
  void _internal_set_spatial_scale(float value);

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

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

class  PROTOBUF_FUTURE_ADD_EARLY_WARN_UNUSED PythonParameter final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:caffe.PythonParameter) */ {
 public:
  inline PythonParameter() : PythonParameter(nullptr) {}
  ~PythonParameter() PROTOBUF_FINAL;

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

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

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

  [[nodiscard]] inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  [[nodiscard]] inline ::google::protobuf::UnknownFieldSet* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL descriptor() {
    return GetDescriptor();
  }
  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL
  GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  [[nodiscard]] static const ::google::protobuf::Reflection* PROTOBUF_NONNULL GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  [[nodiscard]] static const PythonParameter& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<PythonParameter>(&PythonParameter_globals_);
  }
  static constexpr int kIndexInFileMessages = 55;
  friend void swap(PythonParameter& a, PythonParameter& b) { a.Swap(&b); }
  inline void Swap(PythonParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(PythonParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  [[nodiscard]] PythonParameter* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::Message::DefaultConstruct<PythonParameter>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const PythonParameter& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const PythonParameter& from) { PythonParameter::MergeImpl(*this, from); }

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

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

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

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

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

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

  [[nodiscard]] ::google::protobuf::Metadata GetMetadata() const;
  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------
  enum : int {
    kModuleFieldNumber = 1,
    kLayerFieldNumber = 2,
    kParamStrFieldNumber = 3,
    kShareInParallelFieldNumber = 4,
  };
  // optional string module = 1;
  [[nodiscard]] bool has_module()
      const;
  void clear_module() ;
  [[nodiscard]] const ::std::string& module() const;
  template <typename Arg_ = const ::std::string&, typename... Args_>
  void set_module(Arg_&& arg, Args_... args);
  ::std::string* PROTOBUF_NONNULL mutable_module();
  [[nodiscard]] ::std::string* PROTOBUF_NULLABLE release_module();
  void set_allocated_module(::std::string* PROTOBUF_NULLABLE value);

  private:
  const ::std::string& _internal_module() const;
  PROTOBUF_ALWAYS_INLINE void _internal_set_module(const ::std::string& value);
  ::std::string* PROTOBUF_NONNULL _internal_mutable_module();

  public:
  // optional string layer = 2;
  [[nodiscard]] bool has_layer()
      const;
  void clear_layer() ;
  [[nodiscard]] const ::std::string& layer() const;
  template <typename Arg_ = const ::std::string&, typename... Args_>
  void set_layer(Arg_&& arg, Args_... args);
  ::std::string* PROTOBUF_NONNULL mutable_layer();
  [[nodiscard]] ::std::string* PROTOBUF_NULLABLE release_layer();
  void set_allocated_layer(::std::string* PROTOBUF_NULLABLE value);

  private:
  const ::std::string& _internal_layer() const;
  PROTOBUF_ALWAYS_INLINE void _internal_set_layer(const ::std::string& value);
  ::std::string* PROTOBUF_NONNULL _internal_mutable_layer();

  public:
  // optional string param_str = 3 [default = ""];
  [[nodiscard]] bool has_param_str()
      const;
  void clear_param_str() ;
  [[nodiscard]] const ::std::string& param_str() const;
  template <typename Arg_ = const ::std::string&, typename... Args_>
  void set_param_str(Arg_&& arg, Args_... args);
  ::std::string* PROTOBUF_NONNULL mutable_param_str();
  [[nodiscard]] ::std::string* PROTOBUF_NULLABLE release_param_str();
  void set_allocated_param_str(::std::string* PROTOBUF_NULLABLE value);

  private:
  const ::std::string& _internal_param_str() const;
  PROTOBUF_ALWAYS_INLINE void _internal_set_param_str(const ::std::string& value);
  ::std::string* PROTOBUF_NONNULL _internal_mutable_param_str();

  public:
  // optional bool share_in_parallel = 4 [default = false];
  [[nodiscard]] bool has_share_in_parallel()
      const;
  void clear_share_in_parallel() ;
  [[nodiscard]] bool share_in_parallel() const;
  void set_share_in_parallel(bool value);

  private:
  bool _internal_share_in_parallel() const;
  void _internal_set_share_in_parallel(bool value);

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

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

class  PROTOBUF_FUTURE_ADD_EARLY_WARN_UNUSED PriorBoxParameter final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:caffe.PriorBoxParameter) */ {
 public:
  inline PriorBoxParameter() : PriorBoxParameter(nullptr) {}
  ~PriorBoxParameter() PROTOBUF_FINAL;

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

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

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

  [[nodiscard]] inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  [[nodiscard]] inline ::google::protobuf::UnknownFieldSet* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL descriptor() {
    return GetDescriptor();
  }
  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL
  GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  [[nodiscard]] static const ::google::protobuf::Reflection* PROTOBUF_NONNULL GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  [[nodiscard]] static const PriorBoxParameter& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<PriorBoxParameter>(&PriorBoxParameter_globals_);
  }
  static constexpr int kIndexInFileMessages = 53;
  friend void swap(PriorBoxParameter& a, PriorBoxParameter& b) { a.Swap(&b); }
  inline void Swap(PriorBoxParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(PriorBoxParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  [[nodiscard]] PriorBoxParameter* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::Message::DefaultConstruct<PriorBoxParameter>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const PriorBoxParameter& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const PriorBoxParameter& from) { PriorBoxParameter::MergeImpl(*this, from); }

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

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

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

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

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

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

  [[nodiscard]] ::google::protobuf::Metadata GetMetadata() const;
  // nested types ----------------------------------------------------
  using CodeType = PriorBoxParameter_CodeType;
  static constexpr CodeType CORNER = PriorBoxParameter_CodeType_CORNER;
  static constexpr CodeType CENTER_SIZE = PriorBoxParameter_CodeType_CENTER_SIZE;
  static constexpr CodeType CORNER_SIZE = PriorBoxParameter_CodeType_CORNER_SIZE;
  [[nodiscard]] static inline bool CodeType_IsValid(int value) {
    return PriorBoxParameter_CodeType_IsValid(value);
  }
  static constexpr CodeType CodeType_MIN = PriorBoxParameter_CodeType_CodeType_MIN;
  static constexpr CodeType CodeType_MAX = PriorBoxParameter_CodeType_CodeType_MAX;
  static constexpr int CodeType_ARRAYSIZE = PriorBoxParameter_CodeType_CodeType_ARRAYSIZE;
  static inline const ::google::protobuf::EnumDescriptor* PROTOBUF_NONNULL CodeType_descriptor() {
    return PriorBoxParameter_CodeType_descriptor();
  }
  template <typename T>
  [[nodiscard]] static inline const ::std::string& CodeType_Name(T value) {
    return PriorBoxParameter_CodeType_Name(value);
  }
  [[nodiscard]] static inline bool CodeType_Parse(
      ::absl::string_view name, CodeType* PROTOBUF_NONNULL value) {
    return PriorBoxParameter_CodeType_Parse(name, value);
  }

  // accessors -------------------------------------------------------
  enum : int {
    kMinSizeFieldNumber = 1,
    kMaxSizeFieldNumber = 2,
    kAspectRatioFieldNumber = 3,
    kVarianceFieldNumber = 6,
    kClipFieldNumber = 5,
    kImgSizeFieldNumber = 7,
    kImgHFieldNumber = 8,
    kImgWFieldNumber = 9,
    kStepFieldNumber = 10,
    kStepHFieldNumber = 11,
    kStepWFieldNumber = 12,
    kFlipFieldNumber = 4,
    kOffsetFieldNumber = 13,
  };
  // repeated float min_size = 1;
  [[nodiscard]] int min_size_size()
      const;
  private:
  int _internal_min_size_size() const;

  public:
  void clear_min_size() ;
  [[nodiscard]] float min_size(int index) const;
  void set_min_size(int index, float value);
  void add_min_size(float value);
  [[nodiscard]] const ::google::protobuf::RepeatedField<float>& min_size()
      const;
  ::google::protobuf::RepeatedField<float>* PROTOBUF_NONNULL mutable_min_size();

  private:
  const ::google::protobuf::RepeatedField<float>& _internal_min_size() const;
  ::google::protobuf::RepeatedField<float>* PROTOBUF_NONNULL _internal_mutable_min_size();

  public:
  // repeated float max_size = 2;
  [[nodiscard]] int max_size_size()
      const;
  private:
  int _internal_max_size_size() const;

  public:
  void clear_max_size() ;
  [[nodiscard]] float max_size(int index) const;
  void set_max_size(int index, float value);
  void add_max_size(float value);
  [[nodiscard]] const ::google::protobuf::RepeatedField<float>& max_size()
      const;
  ::google::protobuf::RepeatedField<float>* PROTOBUF_NONNULL mutable_max_size();

  private:
  const ::google::protobuf::RepeatedField<float>& _internal_max_size() const;
  ::google::protobuf::RepeatedField<float>* PROTOBUF_NONNULL _internal_mutable_max_size();

  public:
  // repeated float aspect_ratio = 3;
  [[nodiscard]] int aspect_ratio_size()
      const;
  private:
  int _internal_aspect_ratio_size() const;

  public:
  void clear_aspect_ratio() ;
  [[nodiscard]] float aspect_ratio(int index) const;
  void set_aspect_ratio(int index, float value);
  void add_aspect_ratio(float value);
  [[nodiscard]] const ::google::protobuf::RepeatedField<float>& aspect_ratio()
      const;
  ::google::protobuf::RepeatedField<float>* PROTOBUF_NONNULL mutable_aspect_ratio();

  private:
  const ::google::protobuf::RepeatedField<float>& _internal_aspect_ratio() const;
  ::google::protobuf::RepeatedField<float>* PROTOBUF_NONNULL _internal_mutable_aspect_ratio();

  public:
  // repeated float variance = 6;
  [[nodiscard]] int variance_size()
      const;
  private:
  int _internal_variance_size() const;

  public:
  void clear_variance() ;
  [[nodiscard]] float variance(int index) const;
  void set_variance(int index, float value);
  void add_variance(float value);
  [[nodiscard]] const ::google::protobuf::RepeatedField<float>& variance()
      const;
  ::google::protobuf::RepeatedField<float>* PROTOBUF_NONNULL mutable_variance();

  private:
  const ::google::protobuf::RepeatedField<float>& _internal_variance() const;
  ::google::protobuf::RepeatedField<float>* PROTOBUF_NONNULL _internal_mutable_variance();

  public:
  // optional bool clip = 5 [default = false];
  [[nodiscard]] bool has_clip()
      const;
  void clear_clip() ;
  [[nodiscard]] bool clip() const;
  void set_clip(bool value);

  private:
  bool _internal_clip() const;
  void _internal_set_clip(bool value);

  public:
  // optional uint32 img_size = 7;
  [[nodiscard]] bool has_img_size()
      const;
  void clear_img_size() ;
  [[nodiscard]] ::uint32_t img_size() const;
  void set_img_size(::uint32_t value);

  private:
  ::uint32_t _internal_img_size() const;
  void _internal_set_img_size(::uint32_t value);

  public:
  // optional uint32 img_h = 8;
  [[nodiscard]] bool has_img_h()
      const;
  void clear_img_h() ;
  [[nodiscard]] ::uint32_t img_h() const;
  void set_img_h(::uint32_t value);

  private:
  ::uint32_t _internal_img_h() const;
  void _internal_set_img_h(::uint32_t value);

  public:
  // optional uint32 img_w = 9;
  [[nodiscard]] bool has_img_w()
      const;
  void clear_img_w() ;
  [[nodiscard]] ::uint32_t img_w() const;
  void set_img_w(::uint32_t value);

  private:
  ::uint32_t _internal_img_w() const;
  void _internal_set_img_w(::uint32_t value);

  public:
  // optional float step = 10;
  [[nodiscard]] bool has_step()
      const;
  void clear_step() ;
  [[nodiscard]] float step() const;
  void set_step(float value);

  private:
  float _internal_step() const;
  void _internal_set_step(float value);

  public:
  // optional float step_h = 11;
  [[nodiscard]] bool has_step_h()
      const;
  void clear_step_h() ;
  [[nodiscard]] float step_h() const;
  void set_step_h(float value);

  private:
  float _internal_step_h() const;
  void _internal_set_step_h(float value);

  public:
  // optional float step_w = 12;
  [[nodiscard]] bool has_step_w()
      const;
  void clear_step_w() ;
  [[nodiscard]] float step_w() const;
  void set_step_w(float value);

  private:
  float _internal_step_w() const;
  void _internal_set_step_w(float value);

  public:
  // optional bool flip = 4 [default = true];
  [[nodiscard]] bool has_flip()
      const;
  void clear_flip() ;
  [[nodiscard]] bool flip() const;
  void set_flip(bool value);

  private:
  bool _internal_flip() const;
  void _internal_set_flip(bool value);

  public:
  // optional float offset = 13 [default = 0.5];
  [[nodiscard]] bool has_offset()
      const;
  void clear_offset() ;
  [[nodiscard]] float offset() const;
  void set_offset(float value);

  private:
  float _internal_offset() const;
  void _internal_set_offset(float value);

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

  friend class ::google::protobuf::MessageLite;
  friend class ::google::protobuf::Arena;
  friend ::google::protobuf::internal::PrivateAccess;
  template <typename T>
  friend class ::google::protobuf::Arena::InternalHelper;
  using InternalArenaConstructable_ = void;
  using DestructorSkippable_ = void;
  struct Impl_ {
    inline explicit constexpr Impl_(::google::protobuf::internal::InternalVisibility visibility,
                                    ::google::protobuf::internal::ConstantInitialized) noexcept;
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const Impl_& from,
        const PriorBoxParameter& from_msg);
    ::google::protobuf::internal::HasBits<1> _has_bits_;
    ::google::protobuf::internal::CachedSize _cached_size_;
    ::google::protobuf::RepeatedField<float> min_size_;
    ::google::protobuf::RepeatedField<float> max_size_;
    ::google::protobuf::RepeatedField<float> aspect_ratio_;
    ::google::protobuf::RepeatedField<float> variance_;
    bool clip_;
    ::uint32_t img_size_;
    ::uint32_t img_h_;
    ::uint32_t img_w_;
    float step_;
    float step_h_;
    float step_w_;
    bool flip_;
    float offset_;
    PROTOBUF_TSAN_DECLARE_MEMBER
  };
  union { Impl_ _impl_; };
  friend struct ::TableStruct_caffe_2eproto;
};
// -------------------------------------------------------------------

class  PROTOBUF_FUTURE_ADD_EARLY_WARN_UNUSED PowerParameter final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:caffe.PowerParameter) */ {
 public:
  inline PowerParameter() : PowerParameter(nullptr) {}
  ~PowerParameter() PROTOBUF_FINAL;

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

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

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

  [[nodiscard]] inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  [[nodiscard]] inline ::google::protobuf::UnknownFieldSet* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL descriptor() {
    return GetDescriptor();
  }
  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL
  GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  [[nodiscard]] static const ::google::protobuf::Reflection* PROTOBUF_NONNULL GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  [[nodiscard]] static const PowerParameter& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<PowerParameter>(&PowerParameter_globals_);
  }
  static constexpr int kIndexInFileMessages = 52;
  friend void swap(PowerParameter& a, PowerParameter& b) { a.Swap(&b); }
  inline void Swap(PowerParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(PowerParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  [[nodiscard]] PowerParameter* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::Message::DefaultConstruct<PowerParameter>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const PowerParameter& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const PowerParameter& from) { PowerParameter::MergeImpl(*this, from); }

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

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

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

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

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

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

  [[nodiscard]] ::google::protobuf::Metadata GetMetadata() const;
  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------
  enum : int {
    kShiftFieldNumber = 3,
    kPowerFieldNumber = 1,
    kScaleFieldNumber = 2,
  };
  // optional float shift = 3 [default = 0];
  [[nodiscard]] bool has_shift()
      const;
  void clear_shift() ;
  [[nodiscard]] float shift() const;
  void set_shift(float value);

  private:
  float _internal_shift() const;
  void _internal_set_shift(float value);

  public:
  // optional float power = 1 [default = 1];
  [[nodiscard]] bool has_power()
      const;
  void clear_power() ;
  [[nodiscard]] float power() const;
  void set_power(float value);

  private:
  float _internal_power() const;
  void _internal_set_power(float value);

  public:
  // optional float scale = 2 [default = 1];
  [[nodiscard]] bool has_scale()
      const;
  void clear_scale() ;
  [[nodiscard]] float scale() const;
  void set_scale(float value);

  private:
  float _internal_scale() const;
  void _internal_set_scale(float value);

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

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

class  PROTOBUF_FUTURE_ADD_EARLY_WARN_UNUSED PoolingParameter final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:caffe.PoolingParameter) */ {
 public:
  inline PoolingParameter() : PoolingParameter(nullptr) {}
  ~PoolingParameter() PROTOBUF_FINAL;

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

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

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

  [[nodiscard]] inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  [[nodiscard]] inline ::google::protobuf::UnknownFieldSet* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL descriptor() {
    return GetDescriptor();
  }
  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL
  GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  [[nodiscard]] static const ::google::protobuf::Reflection* PROTOBUF_NONNULL GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  [[nodiscard]] static const PoolingParameter& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<PoolingParameter>(&PoolingParameter_globals_);
  }
  static constexpr int kIndexInFileMessages = 51;
  friend void swap(PoolingParameter& a, PoolingParameter& b) { a.Swap(&b); }
  inline void Swap(PoolingParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(PoolingParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  [[nodiscard]] PoolingParameter* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::Message::DefaultConstruct<PoolingParameter>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const PoolingParameter& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const PoolingParameter& from) { PoolingParameter::MergeImpl(*this, from); }

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

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

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

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

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

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

  [[nodiscard]] ::google::protobuf::Metadata GetMetadata() const;
  // nested types ----------------------------------------------------
  using PoolMethod = PoolingParameter_PoolMethod;
  static constexpr PoolMethod MAX = PoolingParameter_PoolMethod_MAX;
  static constexpr PoolMethod AVE = PoolingParameter_PoolMethod_AVE;
  static constexpr PoolMethod STOCHASTIC = PoolingParameter_PoolMethod_STOCHASTIC;
  [[nodiscard]] static inline bool PoolMethod_IsValid(int value) {
    return PoolingParameter_PoolMethod_IsValid(value);
  }
  static constexpr PoolMethod PoolMethod_MIN = PoolingParameter_PoolMethod_PoolMethod_MIN;
  static constexpr PoolMethod PoolMethod_MAX = PoolingParameter_PoolMethod_PoolMethod_MAX;
  static constexpr int PoolMethod_ARRAYSIZE = PoolingParameter_PoolMethod_PoolMethod_ARRAYSIZE;
  static inline const ::google::protobuf::EnumDescriptor* PROTOBUF_NONNULL PoolMethod_descriptor() {
    return PoolingParameter_PoolMethod_descriptor();
  }
  template <typename T>
  [[nodiscard]] static inline const ::std::string& PoolMethod_Name(T value) {
    return PoolingParameter_PoolMethod_Name(value);
  }
  [[nodiscard]] static inline bool PoolMethod_Parse(
      ::absl::string_view name, PoolMethod* PROTOBUF_NONNULL value) {
    return PoolingParameter_PoolMethod_Parse(name, value);
  }
  using Engine = PoolingParameter_Engine;
  static constexpr Engine DEFAULT = PoolingParameter_Engine_DEFAULT;
  static constexpr Engine CAFFE = PoolingParameter_Engine_CAFFE;
  static constexpr Engine CUDNN = PoolingParameter_Engine_CUDNN;
  [[nodiscard]] static inline bool Engine_IsValid(int value) {
    return PoolingParameter_Engine_IsValid(value);
  }
  static constexpr Engine Engine_MIN = PoolingParameter_Engine_Engine_MIN;
  static constexpr Engine Engine_MAX = PoolingParameter_Engine_Engine_MAX;
  static constexpr int Engine_ARRAYSIZE = PoolingParameter_Engine_Engine_ARRAYSIZE;
  static inline const ::google::protobuf::EnumDescriptor* PROTOBUF_NONNULL Engine_descriptor() {
    return PoolingParameter_Engine_descriptor();
  }
  template <typename T>
  [[nodiscard]] static inline const ::std::string& Engine_Name(T value) {
    return PoolingParameter_Engine_Name(value);
  }
  [[nodiscard]] static inline bool Engine_Parse(
      ::absl::string_view name, Engine* PROTOBUF_NONNULL value) {
    return PoolingParameter_Engine_Parse(name, value);
  }

  // accessors -------------------------------------------------------
  enum : int {
    kPoolFieldNumber = 1,
    kKernelSizeFieldNumber = 2,
    kPadFieldNumber = 4,
    kKernelHFieldNumber = 5,
    kKernelWFieldNumber = 6,
    kStrideHFieldNumber = 7,
    kStrideWFieldNumber = 8,
    kPadHFieldNumber = 9,
    kPadWFieldNumber = 10,
    kEngineFieldNumber = 11,
    kGlobalPoolingFieldNumber = 12,
    kStrideFieldNumber = 3,
  };
  // optional .caffe.PoolingParameter.PoolMethod pool = 1 [default = MAX];
  [[nodiscard]] bool has_pool()
      const;
  void clear_pool() ;
  [[nodiscard]] ::caffe::PoolingParameter_PoolMethod pool() const;
  void set_pool(::caffe::PoolingParameter_PoolMethod value);

  private:
  ::caffe::PoolingParameter_PoolMethod _internal_pool() const;
  void _internal_set_pool(::caffe::PoolingParameter_PoolMethod value);

  public:
  // optional uint32 kernel_size = 2;
  [[nodiscard]] bool has_kernel_size()
      const;
  void clear_kernel_size() ;
  [[nodiscard]] ::uint32_t kernel_size() const;
  void set_kernel_size(::uint32_t value);

  private:
  ::uint32_t _internal_kernel_size() const;
  void _internal_set_kernel_size(::uint32_t value);

  public:
  // optional uint32 pad = 4 [default = 0];
  [[nodiscard]] bool has_pad()
      const;
  void clear_pad() ;
  [[nodiscard]] ::uint32_t pad() const;
  void set_pad(::uint32_t value);

  private:
  ::uint32_t _internal_pad() const;
  void _internal_set_pad(::uint32_t value);

  public:
  // optional uint32 kernel_h = 5;
  [[nodiscard]] bool has_kernel_h()
      const;
  void clear_kernel_h() ;
  [[nodiscard]] ::uint32_t kernel_h() const;
  void set_kernel_h(::uint32_t value);

  private:
  ::uint32_t _internal_kernel_h() const;
  void _internal_set_kernel_h(::uint32_t value);

  public:
  // optional uint32 kernel_w = 6;
  [[nodiscard]] bool has_kernel_w()
      const;
  void clear_kernel_w() ;
  [[nodiscard]] ::uint32_t kernel_w() const;
  void set_kernel_w(::uint32_t value);

  private:
  ::uint32_t _internal_kernel_w() const;
  void _internal_set_kernel_w(::uint32_t value);

  public:
  // optional uint32 stride_h = 7;
  [[nodiscard]] bool has_stride_h()
      const;
  void clear_stride_h() ;
  [[nodiscard]] ::uint32_t stride_h() const;
  void set_stride_h(::uint32_t value);

  private:
  ::uint32_t _internal_stride_h() const;
  void _internal_set_stride_h(::uint32_t value);

  public:
  // optional uint32 stride_w = 8;
  [[nodiscard]] bool has_stride_w()
      const;
  void clear_stride_w() ;
  [[nodiscard]] ::uint32_t stride_w() const;
  void set_stride_w(::uint32_t value);

  private:
  ::uint32_t _internal_stride_w() const;
  void _internal_set_stride_w(::uint32_t value);

  public:
  // optional uint32 pad_h = 9 [default = 0];
  [[nodiscard]] bool has_pad_h()
      const;
  void clear_pad_h() ;
  [[nodiscard]] ::uint32_t pad_h() const;
  void set_pad_h(::uint32_t value);

  private:
  ::uint32_t _internal_pad_h() const;
  void _internal_set_pad_h(::uint32_t value);

  public:
  // optional uint32 pad_w = 10 [default = 0];
  [[nodiscard]] bool has_pad_w()
      const;
  void clear_pad_w() ;
  [[nodiscard]] ::uint32_t pad_w() const;
  void set_pad_w(::uint32_t value);

  private:
  ::uint32_t _internal_pad_w() const;
  void _internal_set_pad_w(::uint32_t value);

  public:
  // optional .caffe.PoolingParameter.Engine engine = 11 [default = DEFAULT];
  [[nodiscard]] bool has_engine()
      const;
  void clear_engine() ;
  [[nodiscard]] ::caffe::PoolingParameter_Engine engine() const;
  void set_engine(::caffe::PoolingParameter_Engine value);

  private:
  ::caffe::PoolingParameter_Engine _internal_engine() const;
  void _internal_set_engine(::caffe::PoolingParameter_Engine value);

  public:
  // optional bool global_pooling = 12 [default = false];
  [[nodiscard]] bool has_global_pooling()
      const;
  void clear_global_pooling() ;
  [[nodiscard]] bool global_pooling() const;
  void set_global_pooling(bool value);

  private:
  bool _internal_global_pooling() const;
  void _internal_set_global_pooling(bool value);

  public:
  // optional uint32 stride = 3 [default = 1];
  [[nodiscard]] bool has_stride()
      const;
  void clear_stride() ;
  [[nodiscard]] ::uint32_t stride() const;
  void set_stride(::uint32_t value);

  private:
  ::uint32_t _internal_stride() const;
  void _internal_set_stride(::uint32_t value);

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

  friend class ::google::protobuf::MessageLite;
  friend class ::google::protobuf::Arena;
  friend ::google::protobuf::internal::PrivateAccess;
  template <typename T>
  friend class ::google::protobuf::Arena::InternalHelper;
  using InternalArenaConstructable_ = void;
  using DestructorSkippable_ = void;
  struct Impl_ {
    inline explicit constexpr Impl_(::google::protobuf::internal::InternalVisibility visibility,
                                    ::google::protobuf::internal::ConstantInitialized) noexcept;
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const Impl_& from,
        const PoolingParameter& from_msg);
    ::google::protobuf::internal::HasBits<1> _has_bits_;
    ::google::protobuf::internal::CachedSize _cached_size_;
    int pool_;
    ::uint32_t kernel_size_;
    ::uint32_t pad_;
    ::uint32_t kernel_h_;
    ::uint32_t kernel_w_;
    ::uint32_t stride_h_;
    ::uint32_t stride_w_;
    ::uint32_t pad_h_;
    ::uint32_t pad_w_;
    int engine_;
    bool global_pooling_;
    ::uint32_t stride_;
    PROTOBUF_TSAN_DECLARE_MEMBER
  };
  union { Impl_ _impl_; };
  friend struct ::TableStruct_caffe_2eproto;
};
// -------------------------------------------------------------------

class  PROTOBUF_FUTURE_ADD_EARLY_WARN_UNUSED PermuteParameter final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:caffe.PermuteParameter) */ {
 public:
  inline PermuteParameter() : PermuteParameter(nullptr) {}
  ~PermuteParameter() PROTOBUF_FINAL;

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

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

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

  [[nodiscard]] inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  [[nodiscard]] inline ::google::protobuf::UnknownFieldSet* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL descriptor() {
    return GetDescriptor();
  }
  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL
  GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  [[nodiscard]] static const ::google::protobuf::Reflection* PROTOBUF_NONNULL GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  [[nodiscard]] static const PermuteParameter& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<PermuteParameter>(&PermuteParameter_globals_);
  }
  static constexpr int kIndexInFileMessages = 50;
  friend void swap(PermuteParameter& a, PermuteParameter& b) { a.Swap(&b); }
  inline void Swap(PermuteParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(PermuteParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  [[nodiscard]] PermuteParameter* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::Message::DefaultConstruct<PermuteParameter>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const PermuteParameter& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const PermuteParameter& from) { PermuteParameter::MergeImpl(*this, from); }

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

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

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

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

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

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

  [[nodiscard]] ::google::protobuf::Metadata GetMetadata() const;
  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------
  enum : int {
    kOrderFieldNumber = 1,
  };
  // repeated uint32 order = 1;
  [[nodiscard]] int order_size()
      const;
  private:
  int _internal_order_size() const;

  public:
  void clear_order() ;
  [[nodiscard]] ::uint32_t order(int index) const;
  void set_order(int index, ::uint32_t value);
  void add_order(::uint32_t value);
  [[nodiscard]] const ::google::protobuf::RepeatedField<::uint32_t>& order()
      const;
  ::google::protobuf::RepeatedField<::uint32_t>* PROTOBUF_NONNULL mutable_order();

  private:
  const ::google::protobuf::RepeatedField<::uint32_t>& _internal_order() const;
  ::google::protobuf::RepeatedField<::uint32_t>* PROTOBUF_NONNULL _internal_mutable_order();

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

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

class  PROTOBUF_FUTURE_ADD_EARLY_WARN_UNUSED ParamSpec final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:caffe.ParamSpec) */ {
 public:
  inline ParamSpec() : ParamSpec(nullptr) {}
  ~ParamSpec() PROTOBUF_FINAL;

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

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

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

  [[nodiscard]] inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  [[nodiscard]] inline ::google::protobuf::UnknownFieldSet* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL descriptor() {
    return GetDescriptor();
  }
  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL
  GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  [[nodiscard]] static const ::google::protobuf::Reflection* PROTOBUF_NONNULL GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  [[nodiscard]] static const ParamSpec& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<ParamSpec>(&ParamSpec_globals_);
  }
  static constexpr int kIndexInFileMessages = 10;
  friend void swap(ParamSpec& a, ParamSpec& b) { a.Swap(&b); }
  inline void Swap(ParamSpec* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(ParamSpec* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  [[nodiscard]] ParamSpec* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::Message::DefaultConstruct<ParamSpec>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const ParamSpec& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const ParamSpec& from) { ParamSpec::MergeImpl(*this, from); }

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

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

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

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

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

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

  [[nodiscard]] ::google::protobuf::Metadata GetMetadata() const;
  // nested types ----------------------------------------------------
  using DimCheckMode = ParamSpec_DimCheckMode;
  static constexpr DimCheckMode STRICT = ParamSpec_DimCheckMode_STRICT;
  static constexpr DimCheckMode PERMISSIVE = ParamSpec_DimCheckMode_PERMISSIVE;
  [[nodiscard]] static inline bool DimCheckMode_IsValid(int value) {
    return ParamSpec_DimCheckMode_IsValid(value);
  }
  static constexpr DimCheckMode DimCheckMode_MIN = ParamSpec_DimCheckMode_DimCheckMode_MIN;
  static constexpr DimCheckMode DimCheckMode_MAX = ParamSpec_DimCheckMode_DimCheckMode_MAX;
  static constexpr int DimCheckMode_ARRAYSIZE = ParamSpec_DimCheckMode_DimCheckMode_ARRAYSIZE;
  static inline const ::google::protobuf::EnumDescriptor* PROTOBUF_NONNULL DimCheckMode_descriptor() {
    return ParamSpec_DimCheckMode_descriptor();
  }
  template <typename T>
  [[nodiscard]] static inline const ::std::string& DimCheckMode_Name(T value) {
    return ParamSpec_DimCheckMode_Name(value);
  }
  [[nodiscard]] static inline bool DimCheckMode_Parse(
      ::absl::string_view name, DimCheckMode* PROTOBUF_NONNULL value) {
    return ParamSpec_DimCheckMode_Parse(name, value);
  }

  // accessors -------------------------------------------------------
  enum : int {
    kNameFieldNumber = 1,
    kShareModeFieldNumber = 2,
    kLrMultFieldNumber = 3,
    kDecayMultFieldNumber = 4,
  };
  // optional string name = 1;
  [[nodiscard]] bool has_name()
      const;
  void clear_name() ;
  [[nodiscard]] const ::std::string& name() const;
  template <typename Arg_ = const ::std::string&, typename... Args_>
  void set_name(Arg_&& arg, Args_... args);
  ::std::string* PROTOBUF_NONNULL mutable_name();
  [[nodiscard]] ::std::string* PROTOBUF_NULLABLE release_name();
  void set_allocated_name(::std::string* PROTOBUF_NULLABLE value);

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

  public:
  // optional .caffe.ParamSpec.DimCheckMode share_mode = 2;
  [[nodiscard]] bool has_share_mode()
      const;
  void clear_share_mode() ;
  [[nodiscard]] ::caffe::ParamSpec_DimCheckMode share_mode() const;
  void set_share_mode(::caffe::ParamSpec_DimCheckMode value);

  private:
  ::caffe::ParamSpec_DimCheckMode _internal_share_mode() const;
  void _internal_set_share_mode(::caffe::ParamSpec_DimCheckMode value);

  public:
  // optional float lr_mult = 3 [default = 1];
  [[nodiscard]] bool has_lr_mult()
      const;
  void clear_lr_mult() ;
  [[nodiscard]] float lr_mult() const;
  void set_lr_mult(float value);

  private:
  float _internal_lr_mult() const;
  void _internal_set_lr_mult(float value);

  public:
  // optional float decay_mult = 4 [default = 1];
  [[nodiscard]] bool has_decay_mult()
      const;
  void clear_decay_mult() ;
  [[nodiscard]] float decay_mult() const;
  void set_decay_mult(float value);

  private:
  float _internal_decay_mult() const;
  void _internal_set_decay_mult(float value);

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

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

class  PROTOBUF_FUTURE_ADD_EARLY_WARN_UNUSED PSROIPoolingParameter final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:caffe.PSROIPoolingParameter) */ {
 public:
  inline PSROIPoolingParameter() : PSROIPoolingParameter(nullptr) {}
  ~PSROIPoolingParameter() PROTOBUF_FINAL;

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

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

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

  [[nodiscard]] inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  [[nodiscard]] inline ::google::protobuf::UnknownFieldSet* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL descriptor() {
    return GetDescriptor();
  }
  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL
  GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  [[nodiscard]] static const ::google::protobuf::Reflection* PROTOBUF_NONNULL GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  [[nodiscard]] static const PSROIPoolingParameter& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<PSROIPoolingParameter>(&PSROIPoolingParameter_globals_);
  }
  static constexpr int kIndexInFileMessages = 54;
  friend void swap(PSROIPoolingParameter& a, PSROIPoolingParameter& b) { a.Swap(&b); }
  inline void Swap(PSROIPoolingParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(PSROIPoolingParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  [[nodiscard]] PSROIPoolingParameter* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::Message::DefaultConstruct<PSROIPoolingParameter>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const PSROIPoolingParameter& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const PSROIPoolingParameter& from) { PSROIPoolingParameter::MergeImpl(*this, from); }

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

  public:
  [[nodiscard]] bool IsInitialized() const {
    return IsInitializedImpl(*this);
  }

  private:
  static bool IsInitializedImpl(const MessageLite& msg);

  public:
  ABSL_ATTRIBUTE_REINITIALIZES void Clear() PROTOBUF_FINAL;
  #if defined(PROTOBUF_CUSTOM_VTABLE)
  private:
  [[nodiscard]] static ::size_t ByteSizeLong(const ::google::protobuf::MessageLite& msg);
  [[nodiscard]] static ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      const ::google::protobuf::MessageLite& msg, ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream);

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

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

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

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

  [[nodiscard]] ::google::protobuf::Metadata GetMetadata() const;
  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------
  enum : int {
    kSpatialScaleFieldNumber = 1,
    kOutputDimFieldNumber = 2,
    kGroupSizeFieldNumber = 3,
  };
  // required float spatial_scale = 1;
  [[nodiscard]] bool has_spatial_scale()
      const;
  void clear_spatial_scale() ;
  [[nodiscard]] float spatial_scale() const;
  void set_spatial_scale(float value);

  private:
  float _internal_spatial_scale() const;
  void _internal_set_spatial_scale(float value);

  public:
  // required int32 output_dim = 2;
  [[nodiscard]] bool has_output_dim()
      const;
  void clear_output_dim() ;
  [[nodiscard]] ::int32_t output_dim() const;
  void set_output_dim(::int32_t value);

  private:
  ::int32_t _internal_output_dim() const;
  void _internal_set_output_dim(::int32_t value);

  public:
  // required int32 group_size = 3;
  [[nodiscard]] bool has_group_size()
      const;
  void clear_group_size() ;
  [[nodiscard]] ::int32_t group_size() const;
  void set_group_size(::int32_t value);

  private:
  ::int32_t _internal_group_size() const;
  void _internal_set_group_size(::int32_t value);

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

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

class  PROTOBUF_FUTURE_ADD_EARLY_WARN_UNUSED NonMaximumSuppressionParameter final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:caffe.NonMaximumSuppressionParameter) */ {
 public:
  inline NonMaximumSuppressionParameter() : NonMaximumSuppressionParameter(nullptr) {}
  ~NonMaximumSuppressionParameter() PROTOBUF_FINAL;

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

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

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

  [[nodiscard]] inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  [[nodiscard]] inline ::google::protobuf::UnknownFieldSet* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL descriptor() {
    return GetDescriptor();
  }
  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL
  GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  [[nodiscard]] static const ::google::protobuf::Reflection* PROTOBUF_NONNULL GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  [[nodiscard]] static const NonMaximumSuppressionParameter& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<NonMaximumSuppressionParameter>(&NonMaximumSuppressionParameter_globals_);
  }
  static constexpr int kIndexInFileMessages = 25;
  friend void swap(NonMaximumSuppressionParameter& a, NonMaximumSuppressionParameter& b) { a.Swap(&b); }
  inline void Swap(NonMaximumSuppressionParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(NonMaximumSuppressionParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  [[nodiscard]] NonMaximumSuppressionParameter* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::Message::DefaultConstruct<NonMaximumSuppressionParameter>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const NonMaximumSuppressionParameter& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const NonMaximumSuppressionParameter& from) { NonMaximumSuppressionParameter::MergeImpl(*this, from); }

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

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

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

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

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

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

  [[nodiscard]] ::google::protobuf::Metadata GetMetadata() const;
  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------
  enum : int {
    kTopKFieldNumber = 2,
    kNmsThresholdFieldNumber = 1,
    kEtaFieldNumber = 3,
  };
  // optional int32 top_k = 2;
  [[nodiscard]] bool has_top_k()
      const;
  void clear_top_k() ;
  [[nodiscard]] ::int32_t top_k() const;
  void set_top_k(::int32_t value);

  private:
  ::int32_t _internal_top_k() const;
  void _internal_set_top_k(::int32_t value);

  public:
  // optional float nms_threshold = 1 [default = 0.3];
  [[nodiscard]] bool has_nms_threshold()
      const;
  void clear_nms_threshold() ;
  [[nodiscard]] float nms_threshold() const;
  void set_nms_threshold(float value);

  private:
  float _internal_nms_threshold() const;
  void _internal_set_nms_threshold(float value);

  public:
  // optional float eta = 3 [default = 1];
  [[nodiscard]] bool has_eta()
      const;
  void clear_eta() ;
  [[nodiscard]] float eta() const;
  void set_eta(float value);

  private:
  float _internal_eta() const;
  void _internal_set_eta(float value);

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

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

class  PROTOBUF_FUTURE_ADD_EARLY_WARN_UNUSED NetStateRule final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:caffe.NetStateRule) */ {
 public:
  inline NetStateRule() : NetStateRule(nullptr) {}
  ~NetStateRule() PROTOBUF_FINAL;

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

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

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

  [[nodiscard]] inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  [[nodiscard]] inline ::google::protobuf::UnknownFieldSet* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL descriptor() {
    return GetDescriptor();
  }
  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL
  GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  [[nodiscard]] static const ::google::protobuf::Reflection* PROTOBUF_NONNULL GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  [[nodiscard]] static const NetStateRule& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<NetStateRule>(&NetStateRule_globals_);
  }
  static constexpr int kIndexInFileMessages = 9;
  friend void swap(NetStateRule& a, NetStateRule& b) { a.Swap(&b); }
  inline void Swap(NetStateRule* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(NetStateRule* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  [[nodiscard]] NetStateRule* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::Message::DefaultConstruct<NetStateRule>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const NetStateRule& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const NetStateRule& from) { NetStateRule::MergeImpl(*this, from); }

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

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

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

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

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

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

  [[nodiscard]] ::google::protobuf::Metadata GetMetadata() const;
  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------
  enum : int {
    kStageFieldNumber = 4,
    kNotStageFieldNumber = 5,
    kPhaseFieldNumber = 1,
    kMinLevelFieldNumber = 2,
    kMaxLevelFieldNumber = 3,
  };
  // repeated string stage = 4;
  [[nodiscard]] int stage_size()
      const;
  private:
  int _internal_stage_size() const;

  public:
  void clear_stage() ;
  [[nodiscard]] const ::std::string& stage(int index) const;
  ::std::string* PROTOBUF_NONNULL mutable_stage(int index);
  template <typename Arg_ = const ::std::string&, typename... Args_>
  void set_stage(int index, Arg_&& value, Args_... args);
  ::std::string* PROTOBUF_NONNULL add_stage();
  template <typename Arg_ = const ::std::string&, typename... Args_>
  void add_stage(Arg_&& value, Args_... args);
  [[nodiscard]] const
      ::google::protobuf::RepeatedPtrField<::std::string>&
      stage() const;
  [[nodiscard]] ::google::protobuf::RepeatedPtrField<::std::string>*
      PROTOBUF_NONNULL
      mutable_stage();

  private:
  const ::google::protobuf::RepeatedPtrField<::std::string>& _internal_stage() const;
  ::google::protobuf::RepeatedPtrField<::std::string>* PROTOBUF_NONNULL _internal_mutable_stage();

  public:
  // repeated string not_stage = 5;
  [[nodiscard]] int not_stage_size()
      const;
  private:
  int _internal_not_stage_size() const;

  public:
  void clear_not_stage() ;
  [[nodiscard]] const ::std::string& not_stage(int index) const;
  ::std::string* PROTOBUF_NONNULL mutable_not_stage(int index);
  template <typename Arg_ = const ::std::string&, typename... Args_>
  void set_not_stage(int index, Arg_&& value, Args_... args);
  ::std::string* PROTOBUF_NONNULL add_not_stage();
  template <typename Arg_ = const ::std::string&, typename... Args_>
  void add_not_stage(Arg_&& value, Args_... args);
  [[nodiscard]] const
      ::google::protobuf::RepeatedPtrField<::std::string>&
      not_stage() const;
  [[nodiscard]] ::google::protobuf::RepeatedPtrField<::std::string>*
      PROTOBUF_NONNULL
      mutable_not_stage();

  private:
  const ::google::protobuf::RepeatedPtrField<::std::string>& _internal_not_stage() const;
  ::google::protobuf::RepeatedPtrField<::std::string>* PROTOBUF_NONNULL _internal_mutable_not_stage();

  public:
  // optional .caffe.Phase phase = 1;
  [[nodiscard]] bool has_phase()
      const;
  void clear_phase() ;
  [[nodiscard]] ::caffe::Phase phase() const;
  void set_phase(::caffe::Phase value);

  private:
  ::caffe::Phase _internal_phase() const;
  void _internal_set_phase(::caffe::Phase value);

  public:
  // optional int32 min_level = 2;
  [[nodiscard]] bool has_min_level()
      const;
  void clear_min_level() ;
  [[nodiscard]] ::int32_t min_level() const;
  void set_min_level(::int32_t value);

  private:
  ::int32_t _internal_min_level() const;
  void _internal_set_min_level(::int32_t value);

  public:
  // optional int32 max_level = 3;
  [[nodiscard]] bool has_max_level()
      const;
  void clear_max_level() ;
  [[nodiscard]] ::int32_t max_level() const;
  void set_max_level(::int32_t value);

  private:
  ::int32_t _internal_max_level() const;
  void _internal_set_max_level(::int32_t value);

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

  friend class ::google::protobuf::MessageLite;
  friend class ::google::protobuf::Arena;
  friend ::google::protobuf::internal::PrivateAccess;
  template <typename T>
  friend class ::google::protobuf::Arena::InternalHelper;
  using InternalArenaConstructable_ = void;
  using DestructorSkippable_ = void;
  struct Impl_ {
    inline explicit constexpr Impl_(::google::protobuf::internal::InternalVisibility visibility,
                                    ::google::protobuf::internal::ConstantInitialized) noexcept;
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const Impl_& from,
        const NetStateRule& from_msg);
    ::google::protobuf::internal::HasBits<1> _has_bits_;
    ::google::protobuf::internal::CachedSize _cached_size_;
    ::google::protobuf::RepeatedPtrField<::std::string> stage_;
    ::google::protobuf::RepeatedPtrField<::std::string> not_stage_;
    int phase_;
    ::int32_t min_level_;
    ::int32_t max_level_;
    PROTOBUF_TSAN_DECLARE_MEMBER
  };
  union { Impl_ _impl_; };
  friend struct ::TableStruct_caffe_2eproto;
};
// -------------------------------------------------------------------

class  PROTOBUF_FUTURE_ADD_EARLY_WARN_UNUSED NetState final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:caffe.NetState) */ {
 public:
  inline NetState() : NetState(nullptr) {}
  ~NetState() PROTOBUF_FINAL;

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

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

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

  [[nodiscard]] inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  [[nodiscard]] inline ::google::protobuf::UnknownFieldSet* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL descriptor() {
    return GetDescriptor();
  }
  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL
  GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  [[nodiscard]] static const ::google::protobuf::Reflection* PROTOBUF_NONNULL GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  [[nodiscard]] static const NetState& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<NetState>(&NetState_globals_);
  }
  static constexpr int kIndexInFileMessages = 8;
  friend void swap(NetState& a, NetState& b) { a.Swap(&b); }
  inline void Swap(NetState* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(NetState* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  [[nodiscard]] NetState* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::Message::DefaultConstruct<NetState>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const NetState& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const NetState& from) { NetState::MergeImpl(*this, from); }

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

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

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

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

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

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

  [[nodiscard]] ::google::protobuf::Metadata GetMetadata() const;
  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------
  enum : int {
    kStageFieldNumber = 3,
    kLevelFieldNumber = 2,
    kPhaseFieldNumber = 1,
  };
  // repeated string stage = 3;
  [[nodiscard]] int stage_size()
      const;
  private:
  int _internal_stage_size() const;

  public:
  void clear_stage() ;
  [[nodiscard]] const ::std::string& stage(int index) const;
  ::std::string* PROTOBUF_NONNULL mutable_stage(int index);
  template <typename Arg_ = const ::std::string&, typename... Args_>
  void set_stage(int index, Arg_&& value, Args_... args);
  ::std::string* PROTOBUF_NONNULL add_stage();
  template <typename Arg_ = const ::std::string&, typename... Args_>
  void add_stage(Arg_&& value, Args_... args);
  [[nodiscard]] const
      ::google::protobuf::RepeatedPtrField<::std::string>&
      stage() const;
  [[nodiscard]] ::google::protobuf::RepeatedPtrField<::std::string>*
      PROTOBUF_NONNULL
      mutable_stage();

  private:
  const ::google::protobuf::RepeatedPtrField<::std::string>& _internal_stage() const;
  ::google::protobuf::RepeatedPtrField<::std::string>* PROTOBUF_NONNULL _internal_mutable_stage();

  public:
  // optional int32 level = 2 [default = 0];
  [[nodiscard]] bool has_level()
      const;
  void clear_level() ;
  [[nodiscard]] ::int32_t level() const;
  void set_level(::int32_t value);

  private:
  ::int32_t _internal_level() const;
  void _internal_set_level(::int32_t value);

  public:
  // optional .caffe.Phase phase = 1 [default = TEST];
  [[nodiscard]] bool has_phase()
      const;
  void clear_phase() ;
  [[nodiscard]] ::caffe::Phase phase() const;
  void set_phase(::caffe::Phase value);

  private:
  ::caffe::Phase _internal_phase() const;
  void _internal_set_phase(::caffe::Phase value);

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

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

class  PROTOBUF_FUTURE_ADD_EARLY_WARN_UNUSED MemoryDataParameter final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:caffe.MemoryDataParameter) */ {
 public:
  inline MemoryDataParameter() : MemoryDataParameter(nullptr) {}
  ~MemoryDataParameter() PROTOBUF_FINAL;

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

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

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

  [[nodiscard]] inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  [[nodiscard]] inline ::google::protobuf::UnknownFieldSet* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL descriptor() {
    return GetDescriptor();
  }
  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL
  GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  [[nodiscard]] static const ::google::protobuf::Reflection* PROTOBUF_NONNULL GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  [[nodiscard]] static const MemoryDataParameter& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<MemoryDataParameter>(&MemoryDataParameter_globals_);
  }
  static constexpr int kIndexInFileMessages = 47;
  friend void swap(MemoryDataParameter& a, MemoryDataParameter& b) { a.Swap(&b); }
  inline void Swap(MemoryDataParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(MemoryDataParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  [[nodiscard]] MemoryDataParameter* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::Message::DefaultConstruct<MemoryDataParameter>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const MemoryDataParameter& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const MemoryDataParameter& from) { MemoryDataParameter::MergeImpl(*this, from); }

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

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

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

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

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

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

  [[nodiscard]] ::google::protobuf::Metadata GetMetadata() const;
  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------
  enum : int {
    kBatchSizeFieldNumber = 1,
    kChannelsFieldNumber = 2,
    kHeightFieldNumber = 3,
    kWidthFieldNumber = 4,
  };
  // optional uint32 batch_size = 1;
  [[nodiscard]] bool has_batch_size()
      const;
  void clear_batch_size() ;
  [[nodiscard]] ::uint32_t batch_size() const;
  void set_batch_size(::uint32_t value);

  private:
  ::uint32_t _internal_batch_size() const;
  void _internal_set_batch_size(::uint32_t value);

  public:
  // optional uint32 channels = 2;
  [[nodiscard]] bool has_channels()
      const;
  void clear_channels() ;
  [[nodiscard]] ::uint32_t channels() const;
  void set_channels(::uint32_t value);

  private:
  ::uint32_t _internal_channels() const;
  void _internal_set_channels(::uint32_t value);

  public:
  // optional uint32 height = 3;
  [[nodiscard]] bool has_height()
      const;
  void clear_height() ;
  [[nodiscard]] ::uint32_t height() const;
  void set_height(::uint32_t value);

  private:
  ::uint32_t _internal_height() const;
  void _internal_set_height(::uint32_t value);

  public:
  // optional uint32 width = 4;
  [[nodiscard]] bool has_width()
      const;
  void clear_width() ;
  [[nodiscard]] ::uint32_t width() const;
  void set_width(::uint32_t value);

  private:
  ::uint32_t _internal_width() const;
  void _internal_set_width(::uint32_t value);

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

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

class  PROTOBUF_FUTURE_ADD_EARLY_WARN_UNUSED MVNParameter final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:caffe.MVNParameter) */ {
 public:
  inline MVNParameter() : MVNParameter(nullptr) {}
  ~MVNParameter() PROTOBUF_FINAL;

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

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

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

  [[nodiscard]] inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  [[nodiscard]] inline ::google::protobuf::UnknownFieldSet* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL descriptor() {
    return GetDescriptor();
  }
  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL
  GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  [[nodiscard]] static const ::google::protobuf::Reflection* PROTOBUF_NONNULL GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  [[nodiscard]] static const MVNParameter& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<MVNParameter>(&MVNParameter_globals_);
  }
  static constexpr int kIndexInFileMessages = 48;
  friend void swap(MVNParameter& a, MVNParameter& b) { a.Swap(&b); }
  inline void Swap(MVNParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(MVNParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  [[nodiscard]] MVNParameter* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::Message::DefaultConstruct<MVNParameter>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const MVNParameter& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const MVNParameter& from) { MVNParameter::MergeImpl(*this, from); }

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

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

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

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

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

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

  [[nodiscard]] ::google::protobuf::Metadata GetMetadata() const;
  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------
  enum : int {
    kAcrossChannelsFieldNumber = 2,
    kNormalizeVarianceFieldNumber = 1,
    kEpsFieldNumber = 3,
  };
  // optional bool across_channels = 2 [default = false];
  [[nodiscard]] bool has_across_channels()
      const;
  void clear_across_channels() ;
  [[nodiscard]] bool across_channels() const;
  void set_across_channels(bool value);

  private:
  bool _internal_across_channels() const;
  void _internal_set_across_channels(bool value);

  public:
  // optional bool normalize_variance = 1 [default = true];
  [[nodiscard]] bool has_normalize_variance()
      const;
  void clear_normalize_variance() ;
  [[nodiscard]] bool normalize_variance() const;
  void set_normalize_variance(bool value);

  private:
  bool _internal_normalize_variance() const;
  void _internal_set_normalize_variance(bool value);

  public:
  // optional float eps = 3 [default = 1e-09];
  [[nodiscard]] bool has_eps()
      const;
  void clear_eps() ;
  [[nodiscard]] float eps() const;
  void set_eps(float value);

  private:
  float _internal_eps() const;
  void _internal_set_eps(float value);

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

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

class  PROTOBUF_FUTURE_ADD_EARLY_WARN_UNUSED LossParameter final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:caffe.LossParameter) */ {
 public:
  inline LossParameter() : LossParameter(nullptr) {}
  ~LossParameter() PROTOBUF_FINAL;

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

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

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

  [[nodiscard]] inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  [[nodiscard]] inline ::google::protobuf::UnknownFieldSet* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL descriptor() {
    return GetDescriptor();
  }
  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL
  GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  [[nodiscard]] static const ::google::protobuf::Reflection* PROTOBUF_NONNULL GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  [[nodiscard]] static const LossParameter& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<LossParameter>(&LossParameter_globals_);
  }
  static constexpr int kIndexInFileMessages = 14;
  friend void swap(LossParameter& a, LossParameter& b) { a.Swap(&b); }
  inline void Swap(LossParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(LossParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  [[nodiscard]] LossParameter* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::Message::DefaultConstruct<LossParameter>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const LossParameter& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const LossParameter& from) { LossParameter::MergeImpl(*this, from); }

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

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

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

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

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

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

  [[nodiscard]] ::google::protobuf::Metadata GetMetadata() const;
  // nested types ----------------------------------------------------
  using NormalizationMode = LossParameter_NormalizationMode;
  static constexpr NormalizationMode FULL = LossParameter_NormalizationMode_FULL;
  static constexpr NormalizationMode VALID = LossParameter_NormalizationMode_VALID;
  static constexpr NormalizationMode BATCH_SIZE = LossParameter_NormalizationMode_BATCH_SIZE;
  static constexpr NormalizationMode NONE = LossParameter_NormalizationMode_NONE;
  [[nodiscard]] static inline bool NormalizationMode_IsValid(int value) {
    return LossParameter_NormalizationMode_IsValid(value);
  }
  static constexpr NormalizationMode NormalizationMode_MIN = LossParameter_NormalizationMode_NormalizationMode_MIN;
  static constexpr NormalizationMode NormalizationMode_MAX = LossParameter_NormalizationMode_NormalizationMode_MAX;
  static constexpr int NormalizationMode_ARRAYSIZE = LossParameter_NormalizationMode_NormalizationMode_ARRAYSIZE;
  static inline const ::google::protobuf::EnumDescriptor* PROTOBUF_NONNULL NormalizationMode_descriptor() {
    return LossParameter_NormalizationMode_descriptor();
  }
  template <typename T>
  [[nodiscard]] static inline const ::std::string& NormalizationMode_Name(T value) {
    return LossParameter_NormalizationMode_Name(value);
  }
  [[nodiscard]] static inline bool NormalizationMode_Parse(
      ::absl::string_view name, NormalizationMode* PROTOBUF_NONNULL value) {
    return LossParameter_NormalizationMode_Parse(name, value);
  }

  // accessors -------------------------------------------------------
  enum : int {
    kIgnoreLabelFieldNumber = 1,
    kNormalizeFieldNumber = 2,
    kNormalizationFieldNumber = 3,
  };
  // optional int32 ignore_label = 1;
  [[nodiscard]] bool has_ignore_label()
      const;
  void clear_ignore_label() ;
  [[nodiscard]] ::int32_t ignore_label() const;
  void set_ignore_label(::int32_t value);

  private:
  ::int32_t _internal_ignore_label() const;
  void _internal_set_ignore_label(::int32_t value);

  public:
  // optional bool normalize = 2;
  [[nodiscard]] bool has_normalize()
      const;
  void clear_normalize() ;
  [[nodiscard]] bool normalize() const;
  void set_normalize(bool value);

  private:
  bool _internal_normalize() const;
  void _internal_set_normalize(bool value);

  public:
  // optional .caffe.LossParameter.NormalizationMode normalization = 3 [default = VALID];
  [[nodiscard]] bool has_normalization()
      const;
  void clear_normalization() ;
  [[nodiscard]] ::caffe::LossParameter_NormalizationMode normalization() const;
  void set_normalization(::caffe::LossParameter_NormalizationMode value);

  private:
  ::caffe::LossParameter_NormalizationMode _internal_normalization() const;
  void _internal_set_normalization(::caffe::LossParameter_NormalizationMode value);

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

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

class  PROTOBUF_FUTURE_ADD_EARLY_WARN_UNUSED LogParameter final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:caffe.LogParameter) */ {
 public:
  inline LogParameter() : LogParameter(nullptr) {}
  ~LogParameter() PROTOBUF_FINAL;

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

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

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

  [[nodiscard]] inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  [[nodiscard]] inline ::google::protobuf::UnknownFieldSet* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL descriptor() {
    return GetDescriptor();
  }
  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL
  GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  [[nodiscard]] static const ::google::protobuf::Reflection* PROTOBUF_NONNULL GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  [[nodiscard]] static const LogParameter& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<LogParameter>(&LogParameter_globals_);
  }
  static constexpr int kIndexInFileMessages = 45;
  friend void swap(LogParameter& a, LogParameter& b) { a.Swap(&b); }
  inline void Swap(LogParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(LogParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  [[nodiscard]] LogParameter* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::Message::DefaultConstruct<LogParameter>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const LogParameter& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const LogParameter& from) { LogParameter::MergeImpl(*this, from); }

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

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

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

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

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

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

  [[nodiscard]] ::google::protobuf::Metadata GetMetadata() const;
  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------
  enum : int {
    kShiftFieldNumber = 3,
    kBaseFieldNumber = 1,
    kScaleFieldNumber = 2,
  };
  // optional float shift = 3 [default = 0];
  [[nodiscard]] bool has_shift()
      const;
  void clear_shift() ;
  [[nodiscard]] float shift() const;
  void set_shift(float value);

  private:
  float _internal_shift() const;
  void _internal_set_shift(float value);

  public:
  // optional float base = 1 [default = -1];
  [[nodiscard]] bool has_base()
      const;
  void clear_base() ;
  [[nodiscard]] float base() const;
  void set_base(float value);

  private:
  float _internal_base() const;
  void _internal_set_base(float value);

  public:
  // optional float scale = 2 [default = 1];
  [[nodiscard]] bool has_scale()
      const;
  void clear_scale() ;
  [[nodiscard]] float scale() const;
  void set_scale(float value);

  private:
  float _internal_scale() const;
  void _internal_set_scale(float value);

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

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

class  PROTOBUF_FUTURE_ADD_EARLY_WARN_UNUSED LRNParameter final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:caffe.LRNParameter) */ {
 public:
  inline LRNParameter() : LRNParameter(nullptr) {}
  ~LRNParameter() PROTOBUF_FINAL;

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

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

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

  [[nodiscard]] inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  [[nodiscard]] inline ::google::protobuf::UnknownFieldSet* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL descriptor() {
    return GetDescriptor();
  }
  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL
  GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  [[nodiscard]] static const ::google::protobuf::Reflection* PROTOBUF_NONNULL GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  [[nodiscard]] static const LRNParameter& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<LRNParameter>(&LRNParameter_globals_);
  }
  static constexpr int kIndexInFileMessages = 46;
  friend void swap(LRNParameter& a, LRNParameter& b) { a.Swap(&b); }
  inline void Swap(LRNParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(LRNParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  [[nodiscard]] LRNParameter* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::Message::DefaultConstruct<LRNParameter>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const LRNParameter& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const LRNParameter& from) { LRNParameter::MergeImpl(*this, from); }

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

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

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

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

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

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

  [[nodiscard]] ::google::protobuf::Metadata GetMetadata() const;
  // nested types ----------------------------------------------------
  using NormRegion = LRNParameter_NormRegion;
  static constexpr NormRegion ACROSS_CHANNELS = LRNParameter_NormRegion_ACROSS_CHANNELS;
  static constexpr NormRegion WITHIN_CHANNEL = LRNParameter_NormRegion_WITHIN_CHANNEL;
  [[nodiscard]] static inline bool NormRegion_IsValid(int value) {
    return LRNParameter_NormRegion_IsValid(value);
  }
  static constexpr NormRegion NormRegion_MIN = LRNParameter_NormRegion_NormRegion_MIN;
  static constexpr NormRegion NormRegion_MAX = LRNParameter_NormRegion_NormRegion_MAX;
  static constexpr int NormRegion_ARRAYSIZE = LRNParameter_NormRegion_NormRegion_ARRAYSIZE;
  static inline const ::google::protobuf::EnumDescriptor* PROTOBUF_NONNULL NormRegion_descriptor() {
    return LRNParameter_NormRegion_descriptor();
  }
  template <typename T>
  [[nodiscard]] static inline const ::std::string& NormRegion_Name(T value) {
    return LRNParameter_NormRegion_Name(value);
  }
  [[nodiscard]] static inline bool NormRegion_Parse(
      ::absl::string_view name, NormRegion* PROTOBUF_NONNULL value) {
    return LRNParameter_NormRegion_Parse(name, value);
  }
  using Engine = LRNParameter_Engine;
  static constexpr Engine DEFAULT = LRNParameter_Engine_DEFAULT;
  static constexpr Engine CAFFE = LRNParameter_Engine_CAFFE;
  static constexpr Engine CUDNN = LRNParameter_Engine_CUDNN;
  [[nodiscard]] static inline bool Engine_IsValid(int value) {
    return LRNParameter_Engine_IsValid(value);
  }
  static constexpr Engine Engine_MIN = LRNParameter_Engine_Engine_MIN;
  static constexpr Engine Engine_MAX = LRNParameter_Engine_Engine_MAX;
  static constexpr int Engine_ARRAYSIZE = LRNParameter_Engine_Engine_ARRAYSIZE;
  static inline const ::google::protobuf::EnumDescriptor* PROTOBUF_NONNULL Engine_descriptor() {
    return LRNParameter_Engine_descriptor();
  }
  template <typename T>
  [[nodiscard]] static inline const ::std::string& Engine_Name(T value) {
    return LRNParameter_Engine_Name(value);
  }
  [[nodiscard]] static inline bool Engine_Parse(
      ::absl::string_view name, Engine* PROTOBUF_NONNULL value) {
    return LRNParameter_Engine_Parse(name, value);
  }

  // accessors -------------------------------------------------------
  enum : int {
    kNormRegionFieldNumber = 4,
    kEngineFieldNumber = 6,
    kLocalSizeFieldNumber = 1,
    kAlphaFieldNumber = 2,
    kBetaFieldNumber = 3,
    kKFieldNumber = 5,
  };
  // optional .caffe.LRNParameter.NormRegion norm_region = 4 [default = ACROSS_CHANNELS];
  [[nodiscard]] bool has_norm_region()
      const;
  void clear_norm_region() ;
  [[nodiscard]] ::caffe::LRNParameter_NormRegion norm_region() const;
  void set_norm_region(::caffe::LRNParameter_NormRegion value);

  private:
  ::caffe::LRNParameter_NormRegion _internal_norm_region() const;
  void _internal_set_norm_region(::caffe::LRNParameter_NormRegion value);

  public:
  // optional .caffe.LRNParameter.Engine engine = 6 [default = DEFAULT];
  [[nodiscard]] bool has_engine()
      const;
  void clear_engine() ;
  [[nodiscard]] ::caffe::LRNParameter_Engine engine() const;
  void set_engine(::caffe::LRNParameter_Engine value);

  private:
  ::caffe::LRNParameter_Engine _internal_engine() const;
  void _internal_set_engine(::caffe::LRNParameter_Engine value);

  public:
  // optional uint32 local_size = 1 [default = 5];
  [[nodiscard]] bool has_local_size()
      const;
  void clear_local_size() ;
  [[nodiscard]] ::uint32_t local_size() const;
  void set_local_size(::uint32_t value);

  private:
  ::uint32_t _internal_local_size() const;
  void _internal_set_local_size(::uint32_t value);

  public:
  // optional float alpha = 2 [default = 1];
  [[nodiscard]] bool has_alpha()
      const;
  void clear_alpha() ;
  [[nodiscard]] float alpha() const;
  void set_alpha(float value);

  private:
  float _internal_alpha() const;
  void _internal_set_alpha(float value);

  public:
  // optional float beta = 3 [default = 0.75];
  [[nodiscard]] bool has_beta()
      const;
  void clear_beta() ;
  [[nodiscard]] float beta() const;
  void set_beta(float value);

  private:
  float _internal_beta() const;
  void _internal_set_beta(float value);

  public:
  // optional float k = 5 [default = 1];
  [[nodiscard]] bool has_k()
      const;
  void clear_k() ;
  [[nodiscard]] float k() const;
  void set_k(float value);

  private:
  float _internal_k() const;
  void _internal_set_k(float value);

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

  friend class ::google::protobuf::MessageLite;
  friend class ::google::protobuf::Arena;
  friend ::google::protobuf::internal::PrivateAccess;
  template <typename T>
  friend class ::google::protobuf::Arena::InternalHelper;
  using InternalArenaConstructable_ = void;
  using DestructorSkippable_ = void;
  struct Impl_ {
    inline explicit constexpr Impl_(::google::protobuf::internal::InternalVisibility visibility,
                                    ::google::protobuf::internal::ConstantInitialized) noexcept;
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const Impl_& from,
        const LRNParameter& from_msg);
    ::google::protobuf::internal::HasBits<1> _has_bits_;
    ::google::protobuf::internal::CachedSize _cached_size_;
    int norm_region_;
    int engine_;
    ::uint32_t local_size_;
    float alpha_;
    float beta_;
    float k_;
    PROTOBUF_TSAN_DECLARE_MEMBER
  };
  union { Impl_ _impl_; };
  friend struct ::TableStruct_caffe_2eproto;
};
// -------------------------------------------------------------------

class  PROTOBUF_FUTURE_ADD_EARLY_WARN_UNUSED InterpParameter final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:caffe.InterpParameter) */ {
 public:
  inline InterpParameter() : InterpParameter(nullptr) {}
  ~InterpParameter() PROTOBUF_FINAL;

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

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

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

  [[nodiscard]] inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  [[nodiscard]] inline ::google::protobuf::UnknownFieldSet* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL descriptor() {
    return GetDescriptor();
  }
  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL
  GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  [[nodiscard]] static const ::google::protobuf::Reflection* PROTOBUF_NONNULL GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  [[nodiscard]] static const InterpParameter& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<InterpParameter>(&InterpParameter_globals_);
  }
  static constexpr int kIndexInFileMessages = 44;
  friend void swap(InterpParameter& a, InterpParameter& b) { a.Swap(&b); }
  inline void Swap(InterpParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(InterpParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  [[nodiscard]] InterpParameter* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::Message::DefaultConstruct<InterpParameter>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const InterpParameter& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const InterpParameter& from) { InterpParameter::MergeImpl(*this, from); }

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

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

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

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

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

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

  [[nodiscard]] ::google::protobuf::Metadata GetMetadata() const;
  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------
  enum : int {
    kHeightFieldNumber = 1,
    kWidthFieldNumber = 2,
    kPadBegFieldNumber = 5,
    kPadEndFieldNumber = 6,
    kZoomFactorFieldNumber = 3,
    kShrinkFactorFieldNumber = 4,
  };
  // optional int32 height = 1 [default = 0];
  [[nodiscard]] bool has_height()
      const;
  void clear_height() ;
  [[nodiscard]] ::int32_t height() const;
  void set_height(::int32_t value);

  private:
  ::int32_t _internal_height() const;
  void _internal_set_height(::int32_t value);

  public:
  // optional int32 width = 2 [default = 0];
  [[nodiscard]] bool has_width()
      const;
  void clear_width() ;
  [[nodiscard]] ::int32_t width() const;
  void set_width(::int32_t value);

  private:
  ::int32_t _internal_width() const;
  void _internal_set_width(::int32_t value);

  public:
  // optional int32 pad_beg = 5 [default = 0];
  [[nodiscard]] bool has_pad_beg()
      const;
  void clear_pad_beg() ;
  [[nodiscard]] ::int32_t pad_beg() const;
  void set_pad_beg(::int32_t value);

  private:
  ::int32_t _internal_pad_beg() const;
  void _internal_set_pad_beg(::int32_t value);

  public:
  // optional int32 pad_end = 6 [default = 0];
  [[nodiscard]] bool has_pad_end()
      const;
  void clear_pad_end() ;
  [[nodiscard]] ::int32_t pad_end() const;
  void set_pad_end(::int32_t value);

  private:
  ::int32_t _internal_pad_end() const;
  void _internal_set_pad_end(::int32_t value);

  public:
  // optional int32 zoom_factor = 3 [default = 1];
  [[nodiscard]] bool has_zoom_factor()
      const;
  void clear_zoom_factor() ;
  [[nodiscard]] ::int32_t zoom_factor() const;
  void set_zoom_factor(::int32_t value);

  private:
  ::int32_t _internal_zoom_factor() const;
  void _internal_set_zoom_factor(::int32_t value);

  public:
  // optional int32 shrink_factor = 4 [default = 1];
  [[nodiscard]] bool has_shrink_factor()
      const;
  void clear_shrink_factor() ;
  [[nodiscard]] ::int32_t shrink_factor() const;
  void set_shrink_factor(::int32_t value);

  private:
  ::int32_t _internal_shrink_factor() const;
  void _internal_set_shrink_factor(::int32_t value);

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

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

class  PROTOBUF_FUTURE_ADD_EARLY_WARN_UNUSED InfogainLossParameter final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:caffe.InfogainLossParameter) */ {
 public:
  inline InfogainLossParameter() : InfogainLossParameter(nullptr) {}
  ~InfogainLossParameter() PROTOBUF_FINAL;

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

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

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

  [[nodiscard]] inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  [[nodiscard]] inline ::google::protobuf::UnknownFieldSet* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL descriptor() {
    return GetDescriptor();
  }
  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL
  GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  [[nodiscard]] static const ::google::protobuf::Reflection* PROTOBUF_NONNULL GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  [[nodiscard]] static const InfogainLossParameter& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<InfogainLossParameter>(&InfogainLossParameter_globals_);
  }
  static constexpr int kIndexInFileMessages = 41;
  friend void swap(InfogainLossParameter& a, InfogainLossParameter& b) { a.Swap(&b); }
  inline void Swap(InfogainLossParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(InfogainLossParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  [[nodiscard]] InfogainLossParameter* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::Message::DefaultConstruct<InfogainLossParameter>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const InfogainLossParameter& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const InfogainLossParameter& from) { InfogainLossParameter::MergeImpl(*this, from); }

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

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

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

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

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

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

  [[nodiscard]] ::google::protobuf::Metadata GetMetadata() const;
  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------
  enum : int {
    kSourceFieldNumber = 1,
  };
  // optional string source = 1;
  [[nodiscard]] bool has_source()
      const;
  void clear_source() ;
  [[nodiscard]] const ::std::string& source() const;
  template <typename Arg_ = const ::std::string&, typename... Args_>
  void set_source(Arg_&& arg, Args_... args);
  ::std::string* PROTOBUF_NONNULL mutable_source();
  [[nodiscard]] ::std::string* PROTOBUF_NULLABLE release_source();
  void set_allocated_source(::std::string* PROTOBUF_NULLABLE value);

  private:
  const ::std::string& _internal_source() const;
  PROTOBUF_ALWAYS_INLINE void _internal_set_source(const ::std::string& value);
  ::std::string* PROTOBUF_NONNULL _internal_mutable_source();

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

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

class  PROTOBUF_FUTURE_ADD_EARLY_WARN_UNUSED ImageDataParameter final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:caffe.ImageDataParameter) */ {
 public:
  inline ImageDataParameter() : ImageDataParameter(nullptr) {}
  ~ImageDataParameter() PROTOBUF_FINAL;

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

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

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

  [[nodiscard]] inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  [[nodiscard]] inline ::google::protobuf::UnknownFieldSet* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL descriptor() {
    return GetDescriptor();
  }
  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL
  GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  [[nodiscard]] static const ::google::protobuf::Reflection* PROTOBUF_NONNULL GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  [[nodiscard]] static const ImageDataParameter& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<ImageDataParameter>(&ImageDataParameter_globals_);
  }
  static constexpr int kIndexInFileMessages = 40;
  friend void swap(ImageDataParameter& a, ImageDataParameter& b) { a.Swap(&b); }
  inline void Swap(ImageDataParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(ImageDataParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  [[nodiscard]] ImageDataParameter* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::Message::DefaultConstruct<ImageDataParameter>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const ImageDataParameter& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const ImageDataParameter& from) { ImageDataParameter::MergeImpl(*this, from); }

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

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

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

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

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

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

  [[nodiscard]] ::google::protobuf::Metadata GetMetadata() const;
  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------
  enum : int {
    kSourceFieldNumber = 1,
    kMeanFileFieldNumber = 3,
    kRootFolderFieldNumber = 12,
    kCropSizeFieldNumber = 5,
    kRandSkipFieldNumber = 7,
    kMirrorFieldNumber = 6,
    kShuffleFieldNumber = 8,
    kNewHeightFieldNumber = 9,
    kNewWidthFieldNumber = 10,
    kIsColorFieldNumber = 11,
    kScaleFieldNumber = 2,
    kBatchSizeFieldNumber = 4,
  };
  // optional string source = 1;
  [[nodiscard]] bool has_source()
      const;
  void clear_source() ;
  [[nodiscard]] const ::std::string& source() const;
  template <typename Arg_ = const ::std::string&, typename... Args_>
  void set_source(Arg_&& arg, Args_... args);
  ::std::string* PROTOBUF_NONNULL mutable_source();
  [[nodiscard]] ::std::string* PROTOBUF_NULLABLE release_source();
  void set_allocated_source(::std::string* PROTOBUF_NULLABLE value);

  private:
  const ::std::string& _internal_source() const;
  PROTOBUF_ALWAYS_INLINE void _internal_set_source(const ::std::string& value);
  ::std::string* PROTOBUF_NONNULL _internal_mutable_source();

  public:
  // optional string mean_file = 3;
  [[nodiscard]] bool has_mean_file()
      const;
  void clear_mean_file() ;
  [[nodiscard]] const ::std::string& mean_file() const;
  template <typename Arg_ = const ::std::string&, typename... Args_>
  void set_mean_file(Arg_&& arg, Args_... args);
  ::std::string* PROTOBUF_NONNULL mutable_mean_file();
  [[nodiscard]] ::std::string* PROTOBUF_NULLABLE release_mean_file();
  void set_allocated_mean_file(::std::string* PROTOBUF_NULLABLE value);

  private:
  const ::std::string& _internal_mean_file() const;
  PROTOBUF_ALWAYS_INLINE void _internal_set_mean_file(const ::std::string& value);
  ::std::string* PROTOBUF_NONNULL _internal_mutable_mean_file();

  public:
  // optional string root_folder = 12 [default = ""];
  [[nodiscard]] bool has_root_folder()
      const;
  void clear_root_folder() ;
  [[nodiscard]] const ::std::string& root_folder() const;
  template <typename Arg_ = const ::std::string&, typename... Args_>
  void set_root_folder(Arg_&& arg, Args_... args);
  ::std::string* PROTOBUF_NONNULL mutable_root_folder();
  [[nodiscard]] ::std::string* PROTOBUF_NULLABLE release_root_folder();
  void set_allocated_root_folder(::std::string* PROTOBUF_NULLABLE value);

  private:
  const ::std::string& _internal_root_folder() const;
  PROTOBUF_ALWAYS_INLINE void _internal_set_root_folder(const ::std::string& value);
  ::std::string* PROTOBUF_NONNULL _internal_mutable_root_folder();

  public:
  // optional uint32 crop_size = 5 [default = 0];
  [[nodiscard]] bool has_crop_size()
      const;
  void clear_crop_size() ;
  [[nodiscard]] ::uint32_t crop_size() const;
  void set_crop_size(::uint32_t value);

  private:
  ::uint32_t _internal_crop_size() const;
  void _internal_set_crop_size(::uint32_t value);

  public:
  // optional uint32 rand_skip = 7 [default = 0];
  [[nodiscard]] bool has_rand_skip()
      const;
  void clear_rand_skip() ;
  [[nodiscard]] ::uint32_t rand_skip() const;
  void set_rand_skip(::uint32_t value);

  private:
  ::uint32_t _internal_rand_skip() const;
  void _internal_set_rand_skip(::uint32_t value);

  public:
  // optional bool mirror = 6 [default = false];
  [[nodiscard]] bool has_mirror()
      const;
  void clear_mirror() ;
  [[nodiscard]] bool mirror() const;
  void set_mirror(bool value);

  private:
  bool _internal_mirror() const;
  void _internal_set_mirror(bool value);

  public:
  // optional bool shuffle = 8 [default = false];
  [[nodiscard]] bool has_shuffle()
      const;
  void clear_shuffle() ;
  [[nodiscard]] bool shuffle() const;
  void set_shuffle(bool value);

  private:
  bool _internal_shuffle() const;
  void _internal_set_shuffle(bool value);

  public:
  // optional uint32 new_height = 9 [default = 0];
  [[nodiscard]] bool has_new_height()
      const;
  void clear_new_height() ;
  [[nodiscard]] ::uint32_t new_height() const;
  void set_new_height(::uint32_t value);

  private:
  ::uint32_t _internal_new_height() const;
  void _internal_set_new_height(::uint32_t value);

  public:
  // optional uint32 new_width = 10 [default = 0];
  [[nodiscard]] bool has_new_width()
      const;
  void clear_new_width() ;
  [[nodiscard]] ::uint32_t new_width() const;
  void set_new_width(::uint32_t value);

  private:
  ::uint32_t _internal_new_width() const;
  void _internal_set_new_width(::uint32_t value);

  public:
  // optional bool is_color = 11 [default = true];
  [[nodiscard]] bool has_is_color()
      const;
  void clear_is_color() ;
  [[nodiscard]] bool is_color() const;
  void set_is_color(bool value);

  private:
  bool _internal_is_color() const;
  void _internal_set_is_color(bool value);

  public:
  // optional float scale = 2 [default = 1];
  [[nodiscard]] bool has_scale()
      const;
  void clear_scale() ;
  [[nodiscard]] float scale() const;
  void set_scale(float value);

  private:
  float _internal_scale() const;
  void _internal_set_scale(float value);

  public:
  // optional uint32 batch_size = 4 [default = 1];
  [[nodiscard]] bool has_batch_size()
      const;
  void clear_batch_size() ;
  [[nodiscard]] ::uint32_t batch_size() const;
  void set_batch_size(::uint32_t value);

  private:
  ::uint32_t _internal_batch_size() const;
  void _internal_set_batch_size(::uint32_t value);

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

  friend class ::google::protobuf::MessageLite;
  friend class ::google::protobuf::Arena;
  friend ::google::protobuf::internal::PrivateAccess;
  template <typename T>
  friend class ::google::protobuf::Arena::InternalHelper;
  using InternalArenaConstructable_ = void;
  using DestructorSkippable_ = void;
  struct Impl_ {
    inline explicit constexpr Impl_(::google::protobuf::internal::InternalVisibility visibility,
                                    ::google::protobuf::internal::ConstantInitialized) noexcept;
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const Impl_& from,
        const ImageDataParameter& from_msg);
    ::google::protobuf::internal::HasBits<1> _has_bits_;
    ::google::protobuf::internal::CachedSize _cached_size_;
    ::google::protobuf::internal::ArenaStringPtr source_;
    ::google::protobuf::internal::ArenaStringPtr mean_file_;
    ::google::protobuf::internal::ArenaStringPtr root_folder_;
    ::uint32_t crop_size_;
    ::uint32_t rand_skip_;
    bool mirror_;
    bool shuffle_;
    ::uint32_t new_height_;
    ::uint32_t new_width_;
    bool is_color_;
    float scale_;
    ::uint32_t batch_size_;
    PROTOBUF_TSAN_DECLARE_MEMBER
  };
  union { Impl_ _impl_; };
  friend struct ::TableStruct_caffe_2eproto;
};
// -------------------------------------------------------------------

class  PROTOBUF_FUTURE_ADD_EARLY_WARN_UNUSED HingeLossParameter final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:caffe.HingeLossParameter) */ {
 public:
  inline HingeLossParameter() : HingeLossParameter(nullptr) {}
  ~HingeLossParameter() PROTOBUF_FINAL;

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

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

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

  [[nodiscard]] inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  [[nodiscard]] inline ::google::protobuf::UnknownFieldSet* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL descriptor() {
    return GetDescriptor();
  }
  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL
  GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  [[nodiscard]] static const ::google::protobuf::Reflection* PROTOBUF_NONNULL GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  [[nodiscard]] static const HingeLossParameter& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<HingeLossParameter>(&HingeLossParameter_globals_);
  }
  static constexpr int kIndexInFileMessages = 39;
  friend void swap(HingeLossParameter& a, HingeLossParameter& b) { a.Swap(&b); }
  inline void Swap(HingeLossParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(HingeLossParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  [[nodiscard]] HingeLossParameter* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::Message::DefaultConstruct<HingeLossParameter>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const HingeLossParameter& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const HingeLossParameter& from) { HingeLossParameter::MergeImpl(*this, from); }

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

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

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

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

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

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

  [[nodiscard]] ::google::protobuf::Metadata GetMetadata() const;
  // nested types ----------------------------------------------------
  using Norm = HingeLossParameter_Norm;
  static constexpr Norm L1 = HingeLossParameter_Norm_L1;
  static constexpr Norm L2 = HingeLossParameter_Norm_L2;
  [[nodiscard]] static inline bool Norm_IsValid(int value) {
    return HingeLossParameter_Norm_IsValid(value);
  }
  static constexpr Norm Norm_MIN = HingeLossParameter_Norm_Norm_MIN;
  static constexpr Norm Norm_MAX = HingeLossParameter_Norm_Norm_MAX;
  static constexpr int Norm_ARRAYSIZE = HingeLossParameter_Norm_Norm_ARRAYSIZE;
  static inline const ::google::protobuf::EnumDescriptor* PROTOBUF_NONNULL Norm_descriptor() {
    return HingeLossParameter_Norm_descriptor();
  }
  template <typename T>
  [[nodiscard]] static inline const ::std::string& Norm_Name(T value) {
    return HingeLossParameter_Norm_Name(value);
  }
  [[nodiscard]] static inline bool Norm_Parse(
      ::absl::string_view name, Norm* PROTOBUF_NONNULL value) {
    return HingeLossParameter_Norm_Parse(name, value);
  }

  // accessors -------------------------------------------------------
  enum : int {
    kNormFieldNumber = 1,
  };
  // optional .caffe.HingeLossParameter.Norm norm = 1 [default = L1];
  [[nodiscard]] bool has_norm()
      const;
  void clear_norm() ;
  [[nodiscard]] ::caffe::HingeLossParameter_Norm norm() const;
  void set_norm(::caffe::HingeLossParameter_Norm value);

  private:
  ::caffe::HingeLossParameter_Norm _internal_norm() const;
  void _internal_set_norm(::caffe::HingeLossParameter_Norm value);

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

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

class  PROTOBUF_FUTURE_ADD_EARLY_WARN_UNUSED HDF5OutputParameter final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:caffe.HDF5OutputParameter) */ {
 public:
  inline HDF5OutputParameter() : HDF5OutputParameter(nullptr) {}
  ~HDF5OutputParameter() PROTOBUF_FINAL;

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

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

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

  [[nodiscard]] inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  [[nodiscard]] inline ::google::protobuf::UnknownFieldSet* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL descriptor() {
    return GetDescriptor();
  }
  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL
  GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  [[nodiscard]] static const ::google::protobuf::Reflection* PROTOBUF_NONNULL GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  [[nodiscard]] static const HDF5OutputParameter& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<HDF5OutputParameter>(&HDF5OutputParameter_globals_);
  }
  static constexpr int kIndexInFileMessages = 38;
  friend void swap(HDF5OutputParameter& a, HDF5OutputParameter& b) { a.Swap(&b); }
  inline void Swap(HDF5OutputParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(HDF5OutputParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  [[nodiscard]] HDF5OutputParameter* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::Message::DefaultConstruct<HDF5OutputParameter>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const HDF5OutputParameter& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const HDF5OutputParameter& from) { HDF5OutputParameter::MergeImpl(*this, from); }

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

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

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

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

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

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

  [[nodiscard]] ::google::protobuf::Metadata GetMetadata() const;
  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------
  enum : int {
    kFileNameFieldNumber = 1,
  };
  // optional string file_name = 1;
  [[nodiscard]] bool has_file_name()
      const;
  void clear_file_name() ;
  [[nodiscard]] const ::std::string& file_name() const;
  template <typename Arg_ = const ::std::string&, typename... Args_>
  void set_file_name(Arg_&& arg, Args_... args);
  ::std::string* PROTOBUF_NONNULL mutable_file_name();
  [[nodiscard]] ::std::string* PROTOBUF_NULLABLE release_file_name();
  void set_allocated_file_name(::std::string* PROTOBUF_NULLABLE value);

  private:
  const ::std::string& _internal_file_name() const;
  PROTOBUF_ALWAYS_INLINE void _internal_set_file_name(const ::std::string& value);
  ::std::string* PROTOBUF_NONNULL _internal_mutable_file_name();

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

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

class  PROTOBUF_FUTURE_ADD_EARLY_WARN_UNUSED HDF5DataParameter final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:caffe.HDF5DataParameter) */ {
 public:
  inline HDF5DataParameter() : HDF5DataParameter(nullptr) {}
  ~HDF5DataParameter() PROTOBUF_FINAL;

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

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

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

  [[nodiscard]] inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  [[nodiscard]] inline ::google::protobuf::UnknownFieldSet* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL descriptor() {
    return GetDescriptor();
  }
  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL
  GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  [[nodiscard]] static const ::google::protobuf::Reflection* PROTOBUF_NONNULL GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  [[nodiscard]] static const HDF5DataParameter& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<HDF5DataParameter>(&HDF5DataParameter_globals_);
  }
  static constexpr int kIndexInFileMessages = 37;
  friend void swap(HDF5DataParameter& a, HDF5DataParameter& b) { a.Swap(&b); }
  inline void Swap(HDF5DataParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(HDF5DataParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  [[nodiscard]] HDF5DataParameter* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::Message::DefaultConstruct<HDF5DataParameter>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const HDF5DataParameter& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const HDF5DataParameter& from) { HDF5DataParameter::MergeImpl(*this, from); }

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

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

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

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

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

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

  [[nodiscard]] ::google::protobuf::Metadata GetMetadata() const;
  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------
  enum : int {
    kSourceFieldNumber = 1,
    kBatchSizeFieldNumber = 2,
    kShuffleFieldNumber = 3,
  };
  // optional string source = 1;
  [[nodiscard]] bool has_source()
      const;
  void clear_source() ;
  [[nodiscard]] const ::std::string& source() const;
  template <typename Arg_ = const ::std::string&, typename... Args_>
  void set_source(Arg_&& arg, Args_... args);
  ::std::string* PROTOBUF_NONNULL mutable_source();
  [[nodiscard]] ::std::string* PROTOBUF_NULLABLE release_source();
  void set_allocated_source(::std::string* PROTOBUF_NULLABLE value);

  private:
  const ::std::string& _internal_source() const;
  PROTOBUF_ALWAYS_INLINE void _internal_set_source(const ::std::string& value);
  ::std::string* PROTOBUF_NONNULL _internal_mutable_source();

  public:
  // optional uint32 batch_size = 2;
  [[nodiscard]] bool has_batch_size()
      const;
  void clear_batch_size() ;
  [[nodiscard]] ::uint32_t batch_size() const;
  void set_batch_size(::uint32_t value);

  private:
  ::uint32_t _internal_batch_size() const;
  void _internal_set_batch_size(::uint32_t value);

  public:
  // optional bool shuffle = 3 [default = false];
  [[nodiscard]] bool has_shuffle()
      const;
  void clear_shuffle() ;
  [[nodiscard]] bool shuffle() const;
  void set_shuffle(bool value);

  private:
  bool _internal_shuffle() const;
  void _internal_set_shuffle(bool value);

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

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

class  PROTOBUF_FUTURE_ADD_EARLY_WARN_UNUSED FlattenParameter final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:caffe.FlattenParameter) */ {
 public:
  inline FlattenParameter() : FlattenParameter(nullptr) {}
  ~FlattenParameter() PROTOBUF_FINAL;

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

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

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

  [[nodiscard]] inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  [[nodiscard]] inline ::google::protobuf::UnknownFieldSet* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL descriptor() {
    return GetDescriptor();
  }
  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL
  GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  [[nodiscard]] static const ::google::protobuf::Reflection* PROTOBUF_NONNULL GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  [[nodiscard]] static const FlattenParameter& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<FlattenParameter>(&FlattenParameter_globals_);
  }
  static constexpr int kIndexInFileMessages = 36;
  friend void swap(FlattenParameter& a, FlattenParameter& b) { a.Swap(&b); }
  inline void Swap(FlattenParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(FlattenParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  [[nodiscard]] FlattenParameter* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::Message::DefaultConstruct<FlattenParameter>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const FlattenParameter& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const FlattenParameter& from) { FlattenParameter::MergeImpl(*this, from); }

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

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

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

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

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

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

  [[nodiscard]] ::google::protobuf::Metadata GetMetadata() const;
  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------
  enum : int {
    kAxisFieldNumber = 1,
    kEndAxisFieldNumber = 2,
  };
  // optional int32 axis = 1 [default = 1];
  [[nodiscard]] bool has_axis()
      const;
  void clear_axis() ;
  [[nodiscard]] ::int32_t axis() const;
  void set_axis(::int32_t value);

  private:
  ::int32_t _internal_axis() const;
  void _internal_set_axis(::int32_t value);

  public:
  // optional int32 end_axis = 2 [default = -1];
  [[nodiscard]] bool has_end_axis()
      const;
  void clear_end_axis() ;
  [[nodiscard]] ::int32_t end_axis() const;
  void set_end_axis(::int32_t value);

  private:
  ::int32_t _internal_end_axis() const;
  void _internal_set_end_axis(::int32_t value);

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

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

class  PROTOBUF_FUTURE_ADD_EARLY_WARN_UNUSED FillerParameter final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:caffe.FillerParameter) */ {
 public:
  inline FillerParameter() : FillerParameter(nullptr) {}
  ~FillerParameter() PROTOBUF_FINAL;

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

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

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

  [[nodiscard]] inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  [[nodiscard]] inline ::google::protobuf::UnknownFieldSet* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL descriptor() {
    return GetDescriptor();
  }
  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL
  GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  [[nodiscard]] static const ::google::protobuf::Reflection* PROTOBUF_NONNULL GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  [[nodiscard]] static const FillerParameter& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<FillerParameter>(&FillerParameter_globals_);
  }
  static constexpr int kIndexInFileMessages = 4;
  friend void swap(FillerParameter& a, FillerParameter& b) { a.Swap(&b); }
  inline void Swap(FillerParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(FillerParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  [[nodiscard]] FillerParameter* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::Message::DefaultConstruct<FillerParameter>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const FillerParameter& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const FillerParameter& from) { FillerParameter::MergeImpl(*this, from); }

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

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

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

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

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

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

  [[nodiscard]] ::google::protobuf::Metadata GetMetadata() const;
  // nested types ----------------------------------------------------
  using VarianceNorm = FillerParameter_VarianceNorm;
  static constexpr VarianceNorm FAN_IN = FillerParameter_VarianceNorm_FAN_IN;
  static constexpr VarianceNorm FAN_OUT = FillerParameter_VarianceNorm_FAN_OUT;
  static constexpr VarianceNorm AVERAGE = FillerParameter_VarianceNorm_AVERAGE;
  [[nodiscard]] static inline bool VarianceNorm_IsValid(int value) {
    return FillerParameter_VarianceNorm_IsValid(value);
  }
  static constexpr VarianceNorm VarianceNorm_MIN = FillerParameter_VarianceNorm_VarianceNorm_MIN;
  static constexpr VarianceNorm VarianceNorm_MAX = FillerParameter_VarianceNorm_VarianceNorm_MAX;
  static constexpr int VarianceNorm_ARRAYSIZE = FillerParameter_VarianceNorm_VarianceNorm_ARRAYSIZE;
  static inline const ::google::protobuf::EnumDescriptor* PROTOBUF_NONNULL VarianceNorm_descriptor() {
    return FillerParameter_VarianceNorm_descriptor();
  }
  template <typename T>
  [[nodiscard]] static inline const ::std::string& VarianceNorm_Name(T value) {
    return FillerParameter_VarianceNorm_Name(value);
  }
  [[nodiscard]] static inline bool VarianceNorm_Parse(
      ::absl::string_view name, VarianceNorm* PROTOBUF_NONNULL value) {
    return FillerParameter_VarianceNorm_Parse(name, value);
  }

  // accessors -------------------------------------------------------
  enum : int {
    kTypeFieldNumber = 1,
    kValueFieldNumber = 2,
    kMinFieldNumber = 3,
    kMeanFieldNumber = 5,
    kVarianceNormFieldNumber = 8,
    kMaxFieldNumber = 4,
    kStdFieldNumber = 6,
    kSparseFieldNumber = 7,
  };
  // optional string type = 1 [default = "constant"];
  [[nodiscard]] bool has_type()
      const;
  void clear_type() ;
  [[nodiscard]] const ::std::string& type() const;
  template <typename Arg_ = const ::std::string&, typename... Args_>
  void set_type(Arg_&& arg, Args_... args);
  ::std::string* PROTOBUF_NONNULL mutable_type();
  [[nodiscard]] ::std::string* PROTOBUF_NULLABLE release_type();
  void set_allocated_type(::std::string* PROTOBUF_NULLABLE value);

  private:
  const ::std::string& _internal_type() const;
  PROTOBUF_ALWAYS_INLINE void _internal_set_type(const ::std::string& value);
  ::std::string* PROTOBUF_NONNULL _internal_mutable_type();

  public:
  // optional float value = 2 [default = 0];
  [[nodiscard]] bool has_value()
      const;
  void clear_value() ;
  [[nodiscard]] float value() const;
  void set_value(float value);

  private:
  float _internal_value() const;
  void _internal_set_value(float value);

  public:
  // optional float min = 3 [default = 0];
  [[nodiscard]] bool has_min()
      const;
  void clear_min() ;
  [[nodiscard]] float min() const;
  void set_min(float value);

  private:
  float _internal_min() const;
  void _internal_set_min(float value);

  public:
  // optional float mean = 5 [default = 0];
  [[nodiscard]] bool has_mean()
      const;
  void clear_mean() ;
  [[nodiscard]] float mean() const;
  void set_mean(float value);

  private:
  float _internal_mean() const;
  void _internal_set_mean(float value);

  public:
  // optional .caffe.FillerParameter.VarianceNorm variance_norm = 8 [default = FAN_IN];
  [[nodiscard]] bool has_variance_norm()
      const;
  void clear_variance_norm() ;
  [[nodiscard]] ::caffe::FillerParameter_VarianceNorm variance_norm() const;
  void set_variance_norm(::caffe::FillerParameter_VarianceNorm value);

  private:
  ::caffe::FillerParameter_VarianceNorm _internal_variance_norm() const;
  void _internal_set_variance_norm(::caffe::FillerParameter_VarianceNorm value);

  public:
  // optional float max = 4 [default = 1];
  [[nodiscard]] bool has_max()
      const;
  void clear_max() ;
  [[nodiscard]] float max() const;
  void set_max(float value);

  private:
  float _internal_max() const;
  void _internal_set_max(float value);

  public:
  // optional float std = 6 [default = 1];
  [[nodiscard]] bool has_std()
      const;
  void clear_std() ;
  [[nodiscard]] float std() const;
  void set_std(float value);

  private:
  float _internal_std() const;
  void _internal_set_std(float value);

  public:
  // optional int32 sparse = 7 [default = -1];
  [[nodiscard]] bool has_sparse()
      const;
  void clear_sparse() ;
  [[nodiscard]] ::int32_t sparse() const;
  void set_sparse(::int32_t value);

  private:
  ::int32_t _internal_sparse() const;
  void _internal_set_sparse(::int32_t value);

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

  friend class ::google::protobuf::MessageLite;
  friend class ::google::protobuf::Arena;
  friend ::google::protobuf::internal::PrivateAccess;
  template <typename T>
  friend class ::google::protobuf::Arena::InternalHelper;
  using InternalArenaConstructable_ = void;
  using DestructorSkippable_ = void;
  struct Impl_ {
    inline explicit constexpr Impl_(::google::protobuf::internal::InternalVisibility visibility,
                                    ::google::protobuf::internal::ConstantInitialized) noexcept;
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const Impl_& from,
        const FillerParameter& from_msg);
    ::google::protobuf::internal::HasBits<1> _has_bits_;
    ::google::protobuf::internal::CachedSize _cached_size_;
    static const ::google::protobuf::internal::LazyString _i_give_permission_to_break_this_code_default_type_;
    ::google::protobuf::internal::ArenaStringPtr type_;
    float value_;
    float min_;
    float mean_;
    int variance_norm_;
    float max_;
    float std_;
    ::int32_t sparse_;
    PROTOBUF_TSAN_DECLARE_MEMBER
  };
  union { Impl_ _impl_; };
  friend struct ::TableStruct_caffe_2eproto;
};
// -------------------------------------------------------------------

class  PROTOBUF_FUTURE_ADD_EARLY_WARN_UNUSED ExpParameter final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:caffe.ExpParameter) */ {
 public:
  inline ExpParameter() : ExpParameter(nullptr) {}
  ~ExpParameter() PROTOBUF_FINAL;

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

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

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

  [[nodiscard]] inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  [[nodiscard]] inline ::google::protobuf::UnknownFieldSet* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL descriptor() {
    return GetDescriptor();
  }
  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL
  GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  [[nodiscard]] static const ::google::protobuf::Reflection* PROTOBUF_NONNULL GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  [[nodiscard]] static const ExpParameter& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<ExpParameter>(&ExpParameter_globals_);
  }
  static constexpr int kIndexInFileMessages = 35;
  friend void swap(ExpParameter& a, ExpParameter& b) { a.Swap(&b); }
  inline void Swap(ExpParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(ExpParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  [[nodiscard]] ExpParameter* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::Message::DefaultConstruct<ExpParameter>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const ExpParameter& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const ExpParameter& from) { ExpParameter::MergeImpl(*this, from); }

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

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

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

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

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

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

  [[nodiscard]] ::google::protobuf::Metadata GetMetadata() const;
  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------
  enum : int {
    kShiftFieldNumber = 3,
    kBaseFieldNumber = 1,
    kScaleFieldNumber = 2,
  };
  // optional float shift = 3 [default = 0];
  [[nodiscard]] bool has_shift()
      const;
  void clear_shift() ;
  [[nodiscard]] float shift() const;
  void set_shift(float value);

  private:
  float _internal_shift() const;
  void _internal_set_shift(float value);

  public:
  // optional float base = 1 [default = -1];
  [[nodiscard]] bool has_base()
      const;
  void clear_base() ;
  [[nodiscard]] float base() const;
  void set_base(float value);

  private:
  float _internal_base() const;
  void _internal_set_base(float value);

  public:
  // optional float scale = 2 [default = 1];
  [[nodiscard]] bool has_scale()
      const;
  void clear_scale() ;
  [[nodiscard]] float scale() const;
  void set_scale(float value);

  private:
  float _internal_scale() const;
  void _internal_set_scale(float value);

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

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

class  PROTOBUF_FUTURE_ADD_EARLY_WARN_UNUSED EltwiseParameter final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:caffe.EltwiseParameter) */ {
 public:
  inline EltwiseParameter() : EltwiseParameter(nullptr) {}
  ~EltwiseParameter() PROTOBUF_FINAL;

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

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

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

  [[nodiscard]] inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  [[nodiscard]] inline ::google::protobuf::UnknownFieldSet* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL descriptor() {
    return GetDescriptor();
  }
  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL
  GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  [[nodiscard]] static const ::google::protobuf::Reflection* PROTOBUF_NONNULL GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  [[nodiscard]] static const EltwiseParameter& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<EltwiseParameter>(&EltwiseParameter_globals_);
  }
  static constexpr int kIndexInFileMessages = 32;
  friend void swap(EltwiseParameter& a, EltwiseParameter& b) { a.Swap(&b); }
  inline void Swap(EltwiseParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(EltwiseParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  [[nodiscard]] EltwiseParameter* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::Message::DefaultConstruct<EltwiseParameter>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const EltwiseParameter& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const EltwiseParameter& from) { EltwiseParameter::MergeImpl(*this, from); }

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

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

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

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

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

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

  [[nodiscard]] ::google::protobuf::Metadata GetMetadata() const;
  // nested types ----------------------------------------------------
  using EltwiseOp = EltwiseParameter_EltwiseOp;
  static constexpr EltwiseOp PROD = EltwiseParameter_EltwiseOp_PROD;
  static constexpr EltwiseOp SUM = EltwiseParameter_EltwiseOp_SUM;
  static constexpr EltwiseOp MAX = EltwiseParameter_EltwiseOp_MAX;
  [[nodiscard]] static inline bool EltwiseOp_IsValid(int value) {
    return EltwiseParameter_EltwiseOp_IsValid(value);
  }
  static constexpr EltwiseOp EltwiseOp_MIN = EltwiseParameter_EltwiseOp_EltwiseOp_MIN;
  static constexpr EltwiseOp EltwiseOp_MAX = EltwiseParameter_EltwiseOp_EltwiseOp_MAX;
  static constexpr int EltwiseOp_ARRAYSIZE = EltwiseParameter_EltwiseOp_EltwiseOp_ARRAYSIZE;
  static inline const ::google::protobuf::EnumDescriptor* PROTOBUF_NONNULL EltwiseOp_descriptor() {
    return EltwiseParameter_EltwiseOp_descriptor();
  }
  template <typename T>
  [[nodiscard]] static inline const ::std::string& EltwiseOp_Name(T value) {
    return EltwiseParameter_EltwiseOp_Name(value);
  }
  [[nodiscard]] static inline bool EltwiseOp_Parse(
      ::absl::string_view name, EltwiseOp* PROTOBUF_NONNULL value) {
    return EltwiseParameter_EltwiseOp_Parse(name, value);
  }

  // accessors -------------------------------------------------------
  enum : int {
    kCoeffFieldNumber = 2,
    kOperationFieldNumber = 1,
    kStableProdGradFieldNumber = 3,
  };
  // repeated float coeff = 2;
  [[nodiscard]] int coeff_size()
      const;
  private:
  int _internal_coeff_size() const;

  public:
  void clear_coeff() ;
  [[nodiscard]] float coeff(int index) const;
  void set_coeff(int index, float value);
  void add_coeff(float value);
  [[nodiscard]] const ::google::protobuf::RepeatedField<float>& coeff()
      const;
  ::google::protobuf::RepeatedField<float>* PROTOBUF_NONNULL mutable_coeff();

  private:
  const ::google::protobuf::RepeatedField<float>& _internal_coeff() const;
  ::google::protobuf::RepeatedField<float>* PROTOBUF_NONNULL _internal_mutable_coeff();

  public:
  // optional .caffe.EltwiseParameter.EltwiseOp operation = 1 [default = SUM];
  [[nodiscard]] bool has_operation()
      const;
  void clear_operation() ;
  [[nodiscard]] ::caffe::EltwiseParameter_EltwiseOp operation() const;
  void set_operation(::caffe::EltwiseParameter_EltwiseOp value);

  private:
  ::caffe::EltwiseParameter_EltwiseOp _internal_operation() const;
  void _internal_set_operation(::caffe::EltwiseParameter_EltwiseOp value);

  public:
  // optional bool stable_prod_grad = 3 [default = true];
  [[nodiscard]] bool has_stable_prod_grad()
      const;
  void clear_stable_prod_grad() ;
  [[nodiscard]] bool stable_prod_grad() const;
  void set_stable_prod_grad(bool value);

  private:
  bool _internal_stable_prod_grad() const;
  void _internal_set_stable_prod_grad(bool value);

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

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

class  PROTOBUF_FUTURE_ADD_EARLY_WARN_UNUSED ELUParameter final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:caffe.ELUParameter) */ {
 public:
  inline ELUParameter() : ELUParameter(nullptr) {}
  ~ELUParameter() PROTOBUF_FINAL;

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

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

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

  [[nodiscard]] inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  [[nodiscard]] inline ::google::protobuf::UnknownFieldSet* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL descriptor() {
    return GetDescriptor();
  }
  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL
  GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  [[nodiscard]] static const ::google::protobuf::Reflection* PROTOBUF_NONNULL GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  [[nodiscard]] static const ELUParameter& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<ELUParameter>(&ELUParameter_globals_);
  }
  static constexpr int kIndexInFileMessages = 33;
  friend void swap(ELUParameter& a, ELUParameter& b) { a.Swap(&b); }
  inline void Swap(ELUParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(ELUParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  [[nodiscard]] ELUParameter* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::Message::DefaultConstruct<ELUParameter>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const ELUParameter& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const ELUParameter& from) { ELUParameter::MergeImpl(*this, from); }

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

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

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

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

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

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

  [[nodiscard]] ::google::protobuf::Metadata GetMetadata() const;
  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------
  enum : int {
    kAlphaFieldNumber = 1,
  };
  // optional float alpha = 1 [default = 1];
  [[nodiscard]] bool has_alpha()
      const;
  void clear_alpha() ;
  [[nodiscard]] float alpha() const;
  void set_alpha(float value);

  private:
  float _internal_alpha() const;
  void _internal_set_alpha(float value);

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

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

class  PROTOBUF_FUTURE_ADD_EARLY_WARN_UNUSED DropoutParameter final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:caffe.DropoutParameter) */ {
 public:
  inline DropoutParameter() : DropoutParameter(nullptr) {}
  ~DropoutParameter() PROTOBUF_FINAL;

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

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

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

  [[nodiscard]] inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  [[nodiscard]] inline ::google::protobuf::UnknownFieldSet* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL descriptor() {
    return GetDescriptor();
  }
  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL
  GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  [[nodiscard]] static const ::google::protobuf::Reflection* PROTOBUF_NONNULL GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  [[nodiscard]] static const DropoutParameter& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<DropoutParameter>(&DropoutParameter_globals_);
  }
  static constexpr int kIndexInFileMessages = 30;
  friend void swap(DropoutParameter& a, DropoutParameter& b) { a.Swap(&b); }
  inline void Swap(DropoutParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(DropoutParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  [[nodiscard]] DropoutParameter* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::Message::DefaultConstruct<DropoutParameter>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const DropoutParameter& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const DropoutParameter& from) { DropoutParameter::MergeImpl(*this, from); }

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

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

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

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

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

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

  [[nodiscard]] ::google::protobuf::Metadata GetMetadata() const;
  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------
  enum : int {
    kDropoutRatioFieldNumber = 1,
    kScaleTrainFieldNumber = 2,
  };
  // optional float dropout_ratio = 1 [default = 0.5];
  [[nodiscard]] bool has_dropout_ratio()
      const;
  void clear_dropout_ratio() ;
  [[nodiscard]] float dropout_ratio() const;
  void set_dropout_ratio(float value);

  private:
  float _internal_dropout_ratio() const;
  void _internal_set_dropout_ratio(float value);

  public:
  // optional bool scale_train = 2 [default = true];
  [[nodiscard]] bool has_scale_train()
      const;
  void clear_scale_train() ;
  [[nodiscard]] bool scale_train() const;
  void set_scale_train(bool value);

  private:
  bool _internal_scale_train() const;
  void _internal_set_scale_train(bool value);

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

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

class  PROTOBUF_FUTURE_ADD_EARLY_WARN_UNUSED Datum final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:caffe.Datum) */ {
 public:
  inline Datum() : Datum(nullptr) {}
  ~Datum() PROTOBUF_FINAL;

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

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

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

  [[nodiscard]] inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  [[nodiscard]] inline ::google::protobuf::UnknownFieldSet* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL descriptor() {
    return GetDescriptor();
  }
  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL
  GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  [[nodiscard]] static const ::google::protobuf::Reflection* PROTOBUF_NONNULL GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  [[nodiscard]] static const Datum& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<Datum>(&Datum_globals_);
  }
  static constexpr int kIndexInFileMessages = 3;
  friend void swap(Datum& a, Datum& b) { a.Swap(&b); }
  inline void Swap(Datum* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(Datum* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  [[nodiscard]] Datum* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::Message::DefaultConstruct<Datum>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const Datum& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const Datum& from) { Datum::MergeImpl(*this, from); }

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

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

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

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

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

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

  [[nodiscard]] ::google::protobuf::Metadata GetMetadata() const;
  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------
  enum : int {
    kFloatDataFieldNumber = 6,
    kDataFieldNumber = 4,
    kChannelsFieldNumber = 1,
    kHeightFieldNumber = 2,
    kWidthFieldNumber = 3,
    kLabelFieldNumber = 5,
    kEncodedFieldNumber = 7,
  };
  // repeated float float_data = 6;
  [[nodiscard]] int float_data_size()
      const;
  private:
  int _internal_float_data_size() const;

  public:
  void clear_float_data() ;
  [[nodiscard]] float float_data(int index) const;
  void set_float_data(int index, float value);
  void add_float_data(float value);
  [[nodiscard]] const ::google::protobuf::RepeatedField<float>& float_data()
      const;
  ::google::protobuf::RepeatedField<float>* PROTOBUF_NONNULL mutable_float_data();

  private:
  const ::google::protobuf::RepeatedField<float>& _internal_float_data() const;
  ::google::protobuf::RepeatedField<float>* PROTOBUF_NONNULL _internal_mutable_float_data();

  public:
  // optional bytes data = 4;
  [[nodiscard]] bool has_data()
      const;
  void clear_data() ;
  [[nodiscard]] const ::std::string& data() const;
  template <typename Arg_ = const ::std::string&, typename... Args_>
  void set_data(Arg_&& arg, Args_... args);
  ::std::string* PROTOBUF_NONNULL mutable_data();
  [[nodiscard]] ::std::string* PROTOBUF_NULLABLE release_data();
  void set_allocated_data(::std::string* PROTOBUF_NULLABLE value);

  private:
  const ::std::string& _internal_data() const;
  PROTOBUF_ALWAYS_INLINE void _internal_set_data(const ::std::string& value);
  ::std::string* PROTOBUF_NONNULL _internal_mutable_data();

  public:
  // optional int32 channels = 1;
  [[nodiscard]] bool has_channels()
      const;
  void clear_channels() ;
  [[nodiscard]] ::int32_t channels() const;
  void set_channels(::int32_t value);

  private:
  ::int32_t _internal_channels() const;
  void _internal_set_channels(::int32_t value);

  public:
  // optional int32 height = 2;
  [[nodiscard]] bool has_height()
      const;
  void clear_height() ;
  [[nodiscard]] ::int32_t height() const;
  void set_height(::int32_t value);

  private:
  ::int32_t _internal_height() const;
  void _internal_set_height(::int32_t value);

  public:
  // optional int32 width = 3;
  [[nodiscard]] bool has_width()
      const;
  void clear_width() ;
  [[nodiscard]] ::int32_t width() const;
  void set_width(::int32_t value);

  private:
  ::int32_t _internal_width() const;
  void _internal_set_width(::int32_t value);

  public:
  // optional int32 label = 5;
  [[nodiscard]] bool has_label()
      const;
  void clear_label() ;
  [[nodiscard]] ::int32_t label() const;
  void set_label(::int32_t value);

  private:
  ::int32_t _internal_label() const;
  void _internal_set_label(::int32_t value);

  public:
  // optional bool encoded = 7 [default = false];
  [[nodiscard]] bool has_encoded()
      const;
  void clear_encoded() ;
  [[nodiscard]] bool encoded() const;
  void set_encoded(bool value);

  private:
  bool _internal_encoded() const;
  void _internal_set_encoded(bool value);

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

  friend class ::google::protobuf::MessageLite;
  friend class ::google::protobuf::Arena;
  friend ::google::protobuf::internal::PrivateAccess;
  template <typename T>
  friend class ::google::protobuf::Arena::InternalHelper;
  using InternalArenaConstructable_ = void;
  using DestructorSkippable_ = void;
  struct Impl_ {
    inline explicit constexpr Impl_(::google::protobuf::internal::InternalVisibility visibility,
                                    ::google::protobuf::internal::ConstantInitialized) noexcept;
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const Impl_& from,
        const Datum& from_msg);
    ::google::protobuf::internal::HasBits<1> _has_bits_;
    ::google::protobuf::internal::CachedSize _cached_size_;
    ::google::protobuf::RepeatedField<float> float_data_;
    ::google::protobuf::internal::ArenaStringPtr data_;
    ::int32_t channels_;
    ::int32_t height_;
    ::int32_t width_;
    ::int32_t label_;
    bool encoded_;
    PROTOBUF_TSAN_DECLARE_MEMBER
  };
  union { Impl_ _impl_; };
  friend struct ::TableStruct_caffe_2eproto;
};
// -------------------------------------------------------------------

class  PROTOBUF_FUTURE_ADD_EARLY_WARN_UNUSED DataParameter final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:caffe.DataParameter) */ {
 public:
  inline DataParameter() : DataParameter(nullptr) {}
  ~DataParameter() PROTOBUF_FINAL;

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

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

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

  [[nodiscard]] inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  [[nodiscard]] inline ::google::protobuf::UnknownFieldSet* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL descriptor() {
    return GetDescriptor();
  }
  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL
  GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  [[nodiscard]] static const ::google::protobuf::Reflection* PROTOBUF_NONNULL GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  [[nodiscard]] static const DataParameter& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<DataParameter>(&DataParameter_globals_);
  }
  static constexpr int kIndexInFileMessages = 24;
  friend void swap(DataParameter& a, DataParameter& b) { a.Swap(&b); }
  inline void Swap(DataParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(DataParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  [[nodiscard]] DataParameter* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::Message::DefaultConstruct<DataParameter>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const DataParameter& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const DataParameter& from) { DataParameter::MergeImpl(*this, from); }

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

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

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

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

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

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

  [[nodiscard]] ::google::protobuf::Metadata GetMetadata() const;
  // nested types ----------------------------------------------------
  using DB = DataParameter_DB;
  static constexpr DB LEVELDB = DataParameter_DB_LEVELDB;
  static constexpr DB LMDB = DataParameter_DB_LMDB;
  [[nodiscard]] static inline bool DB_IsValid(int value) {
    return DataParameter_DB_IsValid(value);
  }
  static constexpr DB DB_MIN = DataParameter_DB_DB_MIN;
  static constexpr DB DB_MAX = DataParameter_DB_DB_MAX;
  static constexpr int DB_ARRAYSIZE = DataParameter_DB_DB_ARRAYSIZE;
  static inline const ::google::protobuf::EnumDescriptor* PROTOBUF_NONNULL DB_descriptor() {
    return DataParameter_DB_descriptor();
  }
  template <typename T>
  [[nodiscard]] static inline const ::std::string& DB_Name(T value) {
    return DataParameter_DB_Name(value);
  }
  [[nodiscard]] static inline bool DB_Parse(
      ::absl::string_view name, DB* PROTOBUF_NONNULL value) {
    return DataParameter_DB_Parse(name, value);
  }

  // accessors -------------------------------------------------------
  enum : int {
    kSourceFieldNumber = 1,
    kMeanFileFieldNumber = 3,
    kBatchSizeFieldNumber = 4,
    kCropSizeFieldNumber = 5,
    kRandSkipFieldNumber = 7,
    kMirrorFieldNumber = 6,
    kForceEncodedColorFieldNumber = 9,
    kBackendFieldNumber = 8,
    kScaleFieldNumber = 2,
    kPrefetchFieldNumber = 10,
  };
  // optional string source = 1;
  [[nodiscard]] bool has_source()
      const;
  void clear_source() ;
  [[nodiscard]] const ::std::string& source() const;
  template <typename Arg_ = const ::std::string&, typename... Args_>
  void set_source(Arg_&& arg, Args_... args);
  ::std::string* PROTOBUF_NONNULL mutable_source();
  [[nodiscard]] ::std::string* PROTOBUF_NULLABLE release_source();
  void set_allocated_source(::std::string* PROTOBUF_NULLABLE value);

  private:
  const ::std::string& _internal_source() const;
  PROTOBUF_ALWAYS_INLINE void _internal_set_source(const ::std::string& value);
  ::std::string* PROTOBUF_NONNULL _internal_mutable_source();

  public:
  // optional string mean_file = 3;
  [[nodiscard]] bool has_mean_file()
      const;
  void clear_mean_file() ;
  [[nodiscard]] const ::std::string& mean_file() const;
  template <typename Arg_ = const ::std::string&, typename... Args_>
  void set_mean_file(Arg_&& arg, Args_... args);
  ::std::string* PROTOBUF_NONNULL mutable_mean_file();
  [[nodiscard]] ::std::string* PROTOBUF_NULLABLE release_mean_file();
  void set_allocated_mean_file(::std::string* PROTOBUF_NULLABLE value);

  private:
  const ::std::string& _internal_mean_file() const;
  PROTOBUF_ALWAYS_INLINE void _internal_set_mean_file(const ::std::string& value);
  ::std::string* PROTOBUF_NONNULL _internal_mutable_mean_file();

  public:
  // optional uint32 batch_size = 4;
  [[nodiscard]] bool has_batch_size()
      const;
  void clear_batch_size() ;
  [[nodiscard]] ::uint32_t batch_size() const;
  void set_batch_size(::uint32_t value);

  private:
  ::uint32_t _internal_batch_size() const;
  void _internal_set_batch_size(::uint32_t value);

  public:
  // optional uint32 crop_size = 5 [default = 0];
  [[nodiscard]] bool has_crop_size()
      const;
  void clear_crop_size() ;
  [[nodiscard]] ::uint32_t crop_size() const;
  void set_crop_size(::uint32_t value);

  private:
  ::uint32_t _internal_crop_size() const;
  void _internal_set_crop_size(::uint32_t value);

  public:
  // optional uint32 rand_skip = 7 [default = 0];
  [[nodiscard]] bool has_rand_skip()
      const;
  void clear_rand_skip() ;
  [[nodiscard]] ::uint32_t rand_skip() const;
  void set_rand_skip(::uint32_t value);

  private:
  ::uint32_t _internal_rand_skip() const;
  void _internal_set_rand_skip(::uint32_t value);

  public:
  // optional bool mirror = 6 [default = false];
  [[nodiscard]] bool has_mirror()
      const;
  void clear_mirror() ;
  [[nodiscard]] bool mirror() const;
  void set_mirror(bool value);

  private:
  bool _internal_mirror() const;
  void _internal_set_mirror(bool value);

  public:
  // optional bool force_encoded_color = 9 [default = false];
  [[nodiscard]] bool has_force_encoded_color()
      const;
  void clear_force_encoded_color() ;
  [[nodiscard]] bool force_encoded_color() const;
  void set_force_encoded_color(bool value);

  private:
  bool _internal_force_encoded_color() const;
  void _internal_set_force_encoded_color(bool value);

  public:
  // optional .caffe.DataParameter.DB backend = 8 [default = LEVELDB];
  [[nodiscard]] bool has_backend()
      const;
  void clear_backend() ;
  [[nodiscard]] ::caffe::DataParameter_DB backend() const;
  void set_backend(::caffe::DataParameter_DB value);

  private:
  ::caffe::DataParameter_DB _internal_backend() const;
  void _internal_set_backend(::caffe::DataParameter_DB value);

  public:
  // optional float scale = 2 [default = 1];
  [[nodiscard]] bool has_scale()
      const;
  void clear_scale() ;
  [[nodiscard]] float scale() const;
  void set_scale(float value);

  private:
  float _internal_scale() const;
  void _internal_set_scale(float value);

  public:
  // optional uint32 prefetch = 10 [default = 4];
  [[nodiscard]] bool has_prefetch()
      const;
  void clear_prefetch() ;
  [[nodiscard]] ::uint32_t prefetch() const;
  void set_prefetch(::uint32_t value);

  private:
  ::uint32_t _internal_prefetch() const;
  void _internal_set_prefetch(::uint32_t value);

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

  friend class ::google::protobuf::MessageLite;
  friend class ::google::protobuf::Arena;
  friend ::google::protobuf::internal::PrivateAccess;
  template <typename T>
  friend class ::google::protobuf::Arena::InternalHelper;
  using InternalArenaConstructable_ = void;
  using DestructorSkippable_ = void;
  struct Impl_ {
    inline explicit constexpr Impl_(::google::protobuf::internal::InternalVisibility visibility,
                                    ::google::protobuf::internal::ConstantInitialized) noexcept;
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const Impl_& from,
        const DataParameter& from_msg);
    ::google::protobuf::internal::HasBits<1> _has_bits_;
    ::google::protobuf::internal::CachedSize _cached_size_;
    ::google::protobuf::internal::ArenaStringPtr source_;
    ::google::protobuf::internal::ArenaStringPtr mean_file_;
    ::uint32_t batch_size_;
    ::uint32_t crop_size_;
    ::uint32_t rand_skip_;
    bool mirror_;
    bool force_encoded_color_;
    int backend_;
    float scale_;
    ::uint32_t prefetch_;
    PROTOBUF_TSAN_DECLARE_MEMBER
  };
  union { Impl_ _impl_; };
  friend struct ::TableStruct_caffe_2eproto;
};
// -------------------------------------------------------------------

class  PROTOBUF_FUTURE_ADD_EARLY_WARN_UNUSED CropParameter final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:caffe.CropParameter) */ {
 public:
  inline CropParameter() : CropParameter(nullptr) {}
  ~CropParameter() PROTOBUF_FINAL;

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

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

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

  [[nodiscard]] inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  [[nodiscard]] inline ::google::protobuf::UnknownFieldSet* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL descriptor() {
    return GetDescriptor();
  }
  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL
  GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  [[nodiscard]] static const ::google::protobuf::Reflection* PROTOBUF_NONNULL GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  [[nodiscard]] static const CropParameter& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<CropParameter>(&CropParameter_globals_);
  }
  static constexpr int kIndexInFileMessages = 23;
  friend void swap(CropParameter& a, CropParameter& b) { a.Swap(&b); }
  inline void Swap(CropParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(CropParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  [[nodiscard]] CropParameter* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::Message::DefaultConstruct<CropParameter>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const CropParameter& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const CropParameter& from) { CropParameter::MergeImpl(*this, from); }

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

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

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

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

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

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

  [[nodiscard]] ::google::protobuf::Metadata GetMetadata() const;
  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------
  enum : int {
    kOffsetFieldNumber = 2,
    kAxisFieldNumber = 1,
  };
  // repeated uint32 offset = 2;
  [[nodiscard]] int offset_size()
      const;
  private:
  int _internal_offset_size() const;

  public:
  void clear_offset() ;
  [[nodiscard]] ::uint32_t offset(int index) const;
  void set_offset(int index, ::uint32_t value);
  void add_offset(::uint32_t value);
  [[nodiscard]] const ::google::protobuf::RepeatedField<::uint32_t>& offset()
      const;
  ::google::protobuf::RepeatedField<::uint32_t>* PROTOBUF_NONNULL mutable_offset();

  private:
  const ::google::protobuf::RepeatedField<::uint32_t>& _internal_offset() const;
  ::google::protobuf::RepeatedField<::uint32_t>* PROTOBUF_NONNULL _internal_mutable_offset();

  public:
  // optional int32 axis = 1 [default = 2];
  [[nodiscard]] bool has_axis()
      const;
  void clear_axis() ;
  [[nodiscard]] ::int32_t axis() const;
  void set_axis(::int32_t value);

  private:
  ::int32_t _internal_axis() const;
  void _internal_set_axis(::int32_t value);

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

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

class  PROTOBUF_FUTURE_ADD_EARLY_WARN_UNUSED ContrastiveLossParameter final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:caffe.ContrastiveLossParameter) */ {
 public:
  inline ContrastiveLossParameter() : ContrastiveLossParameter(nullptr) {}
  ~ContrastiveLossParameter() PROTOBUF_FINAL;

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

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

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

  [[nodiscard]] inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  [[nodiscard]] inline ::google::protobuf::UnknownFieldSet* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL descriptor() {
    return GetDescriptor();
  }
  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL
  GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  [[nodiscard]] static const ::google::protobuf::Reflection* PROTOBUF_NONNULL GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  [[nodiscard]] static const ContrastiveLossParameter& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<ContrastiveLossParameter>(&ContrastiveLossParameter_globals_);
  }
  static constexpr int kIndexInFileMessages = 21;
  friend void swap(ContrastiveLossParameter& a, ContrastiveLossParameter& b) { a.Swap(&b); }
  inline void Swap(ContrastiveLossParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(ContrastiveLossParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  [[nodiscard]] ContrastiveLossParameter* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::Message::DefaultConstruct<ContrastiveLossParameter>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const ContrastiveLossParameter& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const ContrastiveLossParameter& from) { ContrastiveLossParameter::MergeImpl(*this, from); }

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

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

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

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

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

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

  [[nodiscard]] ::google::protobuf::Metadata GetMetadata() const;
  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------
  enum : int {
    kLegacyVersionFieldNumber = 2,
    kMarginFieldNumber = 1,
  };
  // optional bool legacy_version = 2 [default = false];
  [[nodiscard]] bool has_legacy_version()
      const;
  void clear_legacy_version() ;
  [[nodiscard]] bool legacy_version() const;
  void set_legacy_version(bool value);

  private:
  bool _internal_legacy_version() const;
  void _internal_set_legacy_version(bool value);

  public:
  // optional float margin = 1 [default = 1];
  [[nodiscard]] bool has_margin()
      const;
  void clear_margin() ;
  [[nodiscard]] float margin() const;
  void set_margin(float value);

  private:
  float _internal_margin() const;
  void _internal_set_margin(float value);

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

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

class  PROTOBUF_FUTURE_ADD_EARLY_WARN_UNUSED ConcatParameter final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:caffe.ConcatParameter) */ {
 public:
  inline ConcatParameter() : ConcatParameter(nullptr) {}
  ~ConcatParameter() PROTOBUF_FINAL;

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

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

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

  [[nodiscard]] inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  [[nodiscard]] inline ::google::protobuf::UnknownFieldSet* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL descriptor() {
    return GetDescriptor();
  }
  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL
  GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  [[nodiscard]] static const ::google::protobuf::Reflection* PROTOBUF_NONNULL GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  [[nodiscard]] static const ConcatParameter& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<ConcatParameter>(&ConcatParameter_globals_);
  }
  static constexpr int kIndexInFileMessages = 17;
  friend void swap(ConcatParameter& a, ConcatParameter& b) { a.Swap(&b); }
  inline void Swap(ConcatParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(ConcatParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  [[nodiscard]] ConcatParameter* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::Message::DefaultConstruct<ConcatParameter>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const ConcatParameter& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const ConcatParameter& from) { ConcatParameter::MergeImpl(*this, from); }

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

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

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

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

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

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

  [[nodiscard]] ::google::protobuf::Metadata GetMetadata() const;
  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------
  enum : int {
    kConcatDimFieldNumber = 1,
    kAxisFieldNumber = 2,
  };
  // optional uint32 concat_dim = 1 [default = 1];
  [[nodiscard]] bool has_concat_dim()
      const;
  void clear_concat_dim() ;
  [[nodiscard]] ::uint32_t concat_dim() const;
  void set_concat_dim(::uint32_t value);

  private:
  ::uint32_t _internal_concat_dim() const;
  void _internal_set_concat_dim(::uint32_t value);

  public:
  // optional int32 axis = 2 [default = 1];
  [[nodiscard]] bool has_axis()
      const;
  void clear_axis() ;
  [[nodiscard]] ::int32_t axis() const;
  void set_axis(::int32_t value);

  private:
  ::int32_t _internal_axis() const;
  void _internal_set_axis(::int32_t value);

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

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

class  PROTOBUF_FUTURE_ADD_EARLY_WARN_UNUSED BlobShape final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:caffe.BlobShape) */ {
 public:
  inline BlobShape() : BlobShape(nullptr) {}
  ~BlobShape() PROTOBUF_FINAL;

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

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

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

  [[nodiscard]] inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  [[nodiscard]] inline ::google::protobuf::UnknownFieldSet* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL descriptor() {
    return GetDescriptor();
  }
  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL
  GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  [[nodiscard]] static const ::google::protobuf::Reflection* PROTOBUF_NONNULL GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  [[nodiscard]] static const BlobShape& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<BlobShape>(&BlobShape_globals_);
  }
  static constexpr int kIndexInFileMessages = 0;
  friend void swap(BlobShape& a, BlobShape& b) { a.Swap(&b); }
  inline void Swap(BlobShape* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(BlobShape* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  [[nodiscard]] BlobShape* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::Message::DefaultConstruct<BlobShape>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const BlobShape& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const BlobShape& from) { BlobShape::MergeImpl(*this, from); }

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

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

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

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

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

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

  [[nodiscard]] ::google::protobuf::Metadata GetMetadata() const;
  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------
  enum : int {
    kDimFieldNumber = 1,
  };
  // repeated int64 dim = 1 [packed = true];
  [[nodiscard]] int dim_size()
      const;
  private:
  int _internal_dim_size() const;

  public:
  void clear_dim() ;
  [[nodiscard]] ::int64_t dim(int index) const;
  void set_dim(int index, ::int64_t value);
  void add_dim(::int64_t value);
  [[nodiscard]] const ::google::protobuf::RepeatedField<::int64_t>& dim()
      const;
  ::google::protobuf::RepeatedField<::int64_t>* PROTOBUF_NONNULL mutable_dim();

  private:
  const ::google::protobuf::RepeatedField<::int64_t>& _internal_dim() const;
  ::google::protobuf::RepeatedField<::int64_t>* PROTOBUF_NONNULL _internal_mutable_dim();

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

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

class  PROTOBUF_FUTURE_ADD_EARLY_WARN_UNUSED BatchNormParameter final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:caffe.BatchNormParameter) */ {
 public:
  inline BatchNormParameter() : BatchNormParameter(nullptr) {}
  ~BatchNormParameter() PROTOBUF_FINAL;

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

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

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

  [[nodiscard]] inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  [[nodiscard]] inline ::google::protobuf::UnknownFieldSet* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL descriptor() {
    return GetDescriptor();
  }
  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL
  GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  [[nodiscard]] static const ::google::protobuf::Reflection* PROTOBUF_NONNULL GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  [[nodiscard]] static const BatchNormParameter& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<BatchNormParameter>(&BatchNormParameter_globals_);
  }
  static constexpr int kIndexInFileMessages = 18;
  friend void swap(BatchNormParameter& a, BatchNormParameter& b) { a.Swap(&b); }
  inline void Swap(BatchNormParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(BatchNormParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  [[nodiscard]] BatchNormParameter* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::Message::DefaultConstruct<BatchNormParameter>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const BatchNormParameter& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const BatchNormParameter& from) { BatchNormParameter::MergeImpl(*this, from); }

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

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

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

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

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

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

  [[nodiscard]] ::google::protobuf::Metadata GetMetadata() const;
  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------
  enum : int {
    kUseGlobalStatsFieldNumber = 1,
    kMovingAverageFractionFieldNumber = 2,
    kEpsFieldNumber = 3,
  };
  // optional bool use_global_stats = 1;
  [[nodiscard]] bool has_use_global_stats()
      const;
  void clear_use_global_stats() ;
  [[nodiscard]] bool use_global_stats() const;
  void set_use_global_stats(bool value);

  private:
  bool _internal_use_global_stats() const;
  void _internal_set_use_global_stats(bool value);

  public:
  // optional float moving_average_fraction = 2 [default = 0.999];
  [[nodiscard]] bool has_moving_average_fraction()
      const;
  void clear_moving_average_fraction() ;
  [[nodiscard]] float moving_average_fraction() const;
  void set_moving_average_fraction(float value);

  private:
  float _internal_moving_average_fraction() const;
  void _internal_set_moving_average_fraction(float value);

  public:
  // optional float eps = 3 [default = 1e-05];
  [[nodiscard]] bool has_eps()
      const;
  void clear_eps() ;
  [[nodiscard]] float eps() const;
  void set_eps(float value);

  private:
  float _internal_eps() const;
  void _internal_set_eps(float value);

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

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

class  PROTOBUF_FUTURE_ADD_EARLY_WARN_UNUSED ArgMaxParameter final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:caffe.ArgMaxParameter) */ {
 public:
  inline ArgMaxParameter() : ArgMaxParameter(nullptr) {}
  ~ArgMaxParameter() PROTOBUF_FINAL;

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

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

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

  [[nodiscard]] inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  [[nodiscard]] inline ::google::protobuf::UnknownFieldSet* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL descriptor() {
    return GetDescriptor();
  }
  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL
  GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  [[nodiscard]] static const ::google::protobuf::Reflection* PROTOBUF_NONNULL GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  [[nodiscard]] static const ArgMaxParameter& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<ArgMaxParameter>(&ArgMaxParameter_globals_);
  }
  static constexpr int kIndexInFileMessages = 16;
  friend void swap(ArgMaxParameter& a, ArgMaxParameter& b) { a.Swap(&b); }
  inline void Swap(ArgMaxParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(ArgMaxParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  [[nodiscard]] ArgMaxParameter* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::Message::DefaultConstruct<ArgMaxParameter>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const ArgMaxParameter& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const ArgMaxParameter& from) { ArgMaxParameter::MergeImpl(*this, from); }

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

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

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

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

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

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

  [[nodiscard]] ::google::protobuf::Metadata GetMetadata() const;
  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------
  enum : int {
    kOutMaxValFieldNumber = 1,
    kAxisFieldNumber = 3,
    kTopKFieldNumber = 2,
  };
  // optional bool out_max_val = 1 [default = false];
  [[nodiscard]] bool has_out_max_val()
      const;
  void clear_out_max_val() ;
  [[nodiscard]] bool out_max_val() const;
  void set_out_max_val(bool value);

  private:
  bool _internal_out_max_val() const;
  void _internal_set_out_max_val(bool value);

  public:
  // optional int32 axis = 3;
  [[nodiscard]] bool has_axis()
      const;
  void clear_axis() ;
  [[nodiscard]] ::int32_t axis() const;
  void set_axis(::int32_t value);

  private:
  ::int32_t _internal_axis() const;
  void _internal_set_axis(::int32_t value);

  public:
  // optional uint32 top_k = 2 [default = 1];
  [[nodiscard]] bool has_top_k()
      const;
  void clear_top_k() ;
  [[nodiscard]] ::uint32_t top_k() const;
  void set_top_k(::uint32_t value);

  private:
  ::uint32_t _internal_top_k() const;
  void _internal_set_top_k(::uint32_t value);

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

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

class  PROTOBUF_FUTURE_ADD_EARLY_WARN_UNUSED AccuracyParameter final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:caffe.AccuracyParameter) */ {
 public:
  inline AccuracyParameter() : AccuracyParameter(nullptr) {}
  ~AccuracyParameter() PROTOBUF_FINAL;

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

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

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

  [[nodiscard]] inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  [[nodiscard]] inline ::google::protobuf::UnknownFieldSet* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL descriptor() {
    return GetDescriptor();
  }
  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL
  GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  [[nodiscard]] static const ::google::protobuf::Reflection* PROTOBUF_NONNULL GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  [[nodiscard]] static const AccuracyParameter& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<AccuracyParameter>(&AccuracyParameter_globals_);
  }
  static constexpr int kIndexInFileMessages = 15;
  friend void swap(AccuracyParameter& a, AccuracyParameter& b) { a.Swap(&b); }
  inline void Swap(AccuracyParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(AccuracyParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  [[nodiscard]] AccuracyParameter* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::Message::DefaultConstruct<AccuracyParameter>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const AccuracyParameter& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const AccuracyParameter& from) { AccuracyParameter::MergeImpl(*this, from); }

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

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

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

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

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

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

  [[nodiscard]] ::google::protobuf::Metadata GetMetadata() const;
  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------
  enum : int {
    kIgnoreLabelFieldNumber = 3,
    kTopKFieldNumber = 1,
    kAxisFieldNumber = 2,
  };
  // optional int32 ignore_label = 3;
  [[nodiscard]] bool has_ignore_label()
      const;
  void clear_ignore_label() ;
  [[nodiscard]] ::int32_t ignore_label() const;
  void set_ignore_label(::int32_t value);

  private:
  ::int32_t _internal_ignore_label() const;
  void _internal_set_ignore_label(::int32_t value);

  public:
  // optional uint32 top_k = 1 [default = 1];
  [[nodiscard]] bool has_top_k()
      const;
  void clear_top_k() ;
  [[nodiscard]] ::uint32_t top_k() const;
  void set_top_k(::uint32_t value);

  private:
  ::uint32_t _internal_top_k() const;
  void _internal_set_top_k(::uint32_t value);

  public:
  // optional int32 axis = 2 [default = 1];
  [[nodiscard]] bool has_axis()
      const;
  void clear_axis() ;
  [[nodiscard]] ::int32_t axis() const;
  void set_axis(::int32_t value);

  private:
  ::int32_t _internal_axis() const;
  void _internal_set_axis(::int32_t value);

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

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

class  PROTOBUF_FUTURE_ADD_EARLY_WARN_UNUSED ScaleParameter final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:caffe.ScaleParameter) */ {
 public:
  inline ScaleParameter() : ScaleParameter(nullptr) {}
  ~ScaleParameter() PROTOBUF_FINAL;

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

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

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

  [[nodiscard]] inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  [[nodiscard]] inline ::google::protobuf::UnknownFieldSet* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL descriptor() {
    return GetDescriptor();
  }
  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL
  GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  [[nodiscard]] static const ::google::protobuf::Reflection* PROTOBUF_NONNULL GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  [[nodiscard]] static const ScaleParameter& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<ScaleParameter>(&ScaleParameter_globals_);
  }
  static constexpr int kIndexInFileMessages = 63;
  friend void swap(ScaleParameter& a, ScaleParameter& b) { a.Swap(&b); }
  inline void Swap(ScaleParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(ScaleParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  [[nodiscard]] ScaleParameter* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::Message::DefaultConstruct<ScaleParameter>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const ScaleParameter& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const ScaleParameter& from) { ScaleParameter::MergeImpl(*this, from); }

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

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

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

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

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

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

  [[nodiscard]] ::google::protobuf::Metadata GetMetadata() const;
  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------
  enum : int {
    kFillerFieldNumber = 3,
    kBiasFillerFieldNumber = 5,
    kBiasTermFieldNumber = 4,
    kAxisFieldNumber = 1,
    kNumAxesFieldNumber = 2,
  };
  // optional .caffe.FillerParameter filler = 3;
  [[nodiscard]] bool has_filler()
      const;
  void clear_filler() ;
  [[nodiscard]] const ::caffe::FillerParameter& filler() const;
  [[nodiscard]] ::caffe::FillerParameter* PROTOBUF_NULLABLE release_filler();
  ::caffe::FillerParameter* PROTOBUF_NONNULL mutable_filler();
  void set_allocated_filler(::caffe::FillerParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_filler(::caffe::FillerParameter* PROTOBUF_NULLABLE value);
  ::caffe::FillerParameter* PROTOBUF_NULLABLE unsafe_arena_release_filler();

  private:
  const ::caffe::FillerParameter& _internal_filler() const;
  ::caffe::FillerParameter* PROTOBUF_NONNULL _internal_mutable_filler();

  public:
  // optional .caffe.FillerParameter bias_filler = 5;
  [[nodiscard]] bool has_bias_filler()
      const;
  void clear_bias_filler() ;
  [[nodiscard]] const ::caffe::FillerParameter& bias_filler() const;
  [[nodiscard]] ::caffe::FillerParameter* PROTOBUF_NULLABLE release_bias_filler();
  ::caffe::FillerParameter* PROTOBUF_NONNULL mutable_bias_filler();
  void set_allocated_bias_filler(::caffe::FillerParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_bias_filler(::caffe::FillerParameter* PROTOBUF_NULLABLE value);
  ::caffe::FillerParameter* PROTOBUF_NULLABLE unsafe_arena_release_bias_filler();

  private:
  const ::caffe::FillerParameter& _internal_bias_filler() const;
  ::caffe::FillerParameter* PROTOBUF_NONNULL _internal_mutable_bias_filler();

  public:
  // optional bool bias_term = 4 [default = false];
  [[nodiscard]] bool has_bias_term()
      const;
  void clear_bias_term() ;
  [[nodiscard]] bool bias_term() const;
  void set_bias_term(bool value);

  private:
  bool _internal_bias_term() const;
  void _internal_set_bias_term(bool value);

  public:
  // optional int32 axis = 1 [default = 1];
  [[nodiscard]] bool has_axis()
      const;
  void clear_axis() ;
  [[nodiscard]] ::int32_t axis() const;
  void set_axis(::int32_t value);

  private:
  ::int32_t _internal_axis() const;
  void _internal_set_axis(::int32_t value);

  public:
  // optional int32 num_axes = 2 [default = 1];
  [[nodiscard]] bool has_num_axes()
      const;
  void clear_num_axes() ;
  [[nodiscard]] ::int32_t num_axes() const;
  void set_num_axes(::int32_t value);

  private:
  ::int32_t _internal_num_axes() const;
  void _internal_set_num_axes(::int32_t value);

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

  friend class ::google::protobuf::MessageLite;
  friend class ::google::protobuf::Arena;
  friend ::google::protobuf::internal::PrivateAccess;
  template <typename T>
  friend class ::google::protobuf::Arena::InternalHelper;
  using InternalArenaConstructable_ = void;
  using DestructorSkippable_ = void;
  struct Impl_ {
    inline explicit constexpr Impl_(::google::protobuf::internal::InternalVisibility visibility,
                                    ::google::protobuf::internal::ConstantInitialized) noexcept;
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const Impl_& from,
        const ScaleParameter& from_msg);
    ::google::protobuf::internal::HasBits<1> _has_bits_;
    ::google::protobuf::internal::CachedSize _cached_size_;
    ::caffe::FillerParameter* PROTOBUF_NULLABLE filler_;
    ::caffe::FillerParameter* PROTOBUF_NULLABLE bias_filler_;
    bool bias_term_;
    ::int32_t axis_;
    ::int32_t num_axes_;
    PROTOBUF_TSAN_DECLARE_MEMBER
  };
  union { Impl_ _impl_; };
  friend struct ::TableStruct_caffe_2eproto;
};
// -------------------------------------------------------------------

class  PROTOBUF_FUTURE_ADD_EARLY_WARN_UNUSED SaveOutputParameter final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:caffe.SaveOutputParameter) */ {
 public:
  inline SaveOutputParameter() : SaveOutputParameter(nullptr) {}
  ~SaveOutputParameter() PROTOBUF_FINAL;

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

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

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

  [[nodiscard]] inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  [[nodiscard]] inline ::google::protobuf::UnknownFieldSet* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL descriptor() {
    return GetDescriptor();
  }
  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL
  GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  [[nodiscard]] static const ::google::protobuf::Reflection* PROTOBUF_NONNULL GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  [[nodiscard]] static const SaveOutputParameter& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<SaveOutputParameter>(&SaveOutputParameter_globals_);
  }
  static constexpr int kIndexInFileMessages = 26;
  friend void swap(SaveOutputParameter& a, SaveOutputParameter& b) { a.Swap(&b); }
  inline void Swap(SaveOutputParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(SaveOutputParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  [[nodiscard]] SaveOutputParameter* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::Message::DefaultConstruct<SaveOutputParameter>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const SaveOutputParameter& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const SaveOutputParameter& from) { SaveOutputParameter::MergeImpl(*this, from); }

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

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

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

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

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

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

  [[nodiscard]] ::google::protobuf::Metadata GetMetadata() const;
  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------
  enum : int {
    kOutputDirectoryFieldNumber = 1,
    kOutputNamePrefixFieldNumber = 2,
    kOutputFormatFieldNumber = 3,
    kLabelMapFileFieldNumber = 4,
    kNameSizeFileFieldNumber = 5,
    kResizeParamFieldNumber = 7,
    kNumTestImageFieldNumber = 6,
  };
  // optional string output_directory = 1;
  [[nodiscard]] bool has_output_directory()
      const;
  void clear_output_directory() ;
  [[nodiscard]] const ::std::string& output_directory() const;
  template <typename Arg_ = const ::std::string&, typename... Args_>
  void set_output_directory(Arg_&& arg, Args_... args);
  ::std::string* PROTOBUF_NONNULL mutable_output_directory();
  [[nodiscard]] ::std::string* PROTOBUF_NULLABLE release_output_directory();
  void set_allocated_output_directory(::std::string* PROTOBUF_NULLABLE value);

  private:
  const ::std::string& _internal_output_directory() const;
  PROTOBUF_ALWAYS_INLINE void _internal_set_output_directory(const ::std::string& value);
  ::std::string* PROTOBUF_NONNULL _internal_mutable_output_directory();

  public:
  // optional string output_name_prefix = 2;
  [[nodiscard]] bool has_output_name_prefix()
      const;
  void clear_output_name_prefix() ;
  [[nodiscard]] const ::std::string& output_name_prefix() const;
  template <typename Arg_ = const ::std::string&, typename... Args_>
  void set_output_name_prefix(Arg_&& arg, Args_... args);
  ::std::string* PROTOBUF_NONNULL mutable_output_name_prefix();
  [[nodiscard]] ::std::string* PROTOBUF_NULLABLE release_output_name_prefix();
  void set_allocated_output_name_prefix(::std::string* PROTOBUF_NULLABLE value);

  private:
  const ::std::string& _internal_output_name_prefix() const;
  PROTOBUF_ALWAYS_INLINE void _internal_set_output_name_prefix(const ::std::string& value);
  ::std::string* PROTOBUF_NONNULL _internal_mutable_output_name_prefix();

  public:
  // optional string output_format = 3;
  [[nodiscard]] bool has_output_format()
      const;
  void clear_output_format() ;
  [[nodiscard]] const ::std::string& output_format() const;
  template <typename Arg_ = const ::std::string&, typename... Args_>
  void set_output_format(Arg_&& arg, Args_... args);
  ::std::string* PROTOBUF_NONNULL mutable_output_format();
  [[nodiscard]] ::std::string* PROTOBUF_NULLABLE release_output_format();
  void set_allocated_output_format(::std::string* PROTOBUF_NULLABLE value);

  private:
  const ::std::string& _internal_output_format() const;
  PROTOBUF_ALWAYS_INLINE void _internal_set_output_format(const ::std::string& value);
  ::std::string* PROTOBUF_NONNULL _internal_mutable_output_format();

  public:
  // optional string label_map_file = 4;
  [[nodiscard]] bool has_label_map_file()
      const;
  void clear_label_map_file() ;
  [[nodiscard]] const ::std::string& label_map_file() const;
  template <typename Arg_ = const ::std::string&, typename... Args_>
  void set_label_map_file(Arg_&& arg, Args_... args);
  ::std::string* PROTOBUF_NONNULL mutable_label_map_file();
  [[nodiscard]] ::std::string* PROTOBUF_NULLABLE release_label_map_file();
  void set_allocated_label_map_file(::std::string* PROTOBUF_NULLABLE value);

  private:
  const ::std::string& _internal_label_map_file() const;
  PROTOBUF_ALWAYS_INLINE void _internal_set_label_map_file(const ::std::string& value);
  ::std::string* PROTOBUF_NONNULL _internal_mutable_label_map_file();

  public:
  // optional string name_size_file = 5;
  [[nodiscard]] bool has_name_size_file()
      const;
  void clear_name_size_file() ;
  [[nodiscard]] const ::std::string& name_size_file() const;
  template <typename Arg_ = const ::std::string&, typename... Args_>
  void set_name_size_file(Arg_&& arg, Args_... args);
  ::std::string* PROTOBUF_NONNULL mutable_name_size_file();
  [[nodiscard]] ::std::string* PROTOBUF_NULLABLE release_name_size_file();
  void set_allocated_name_size_file(::std::string* PROTOBUF_NULLABLE value);

  private:
  const ::std::string& _internal_name_size_file() const;
  PROTOBUF_ALWAYS_INLINE void _internal_set_name_size_file(const ::std::string& value);
  ::std::string* PROTOBUF_NONNULL _internal_mutable_name_size_file();

  public:
  // optional .caffe.ResizeParameter resize_param = 7;
  [[nodiscard]] bool has_resize_param()
      const;
  void clear_resize_param() ;
  [[nodiscard]] const ::caffe::ResizeParameter& resize_param() const;
  [[nodiscard]] ::caffe::ResizeParameter* PROTOBUF_NULLABLE release_resize_param();
  ::caffe::ResizeParameter* PROTOBUF_NONNULL mutable_resize_param();
  void set_allocated_resize_param(::caffe::ResizeParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_resize_param(::caffe::ResizeParameter* PROTOBUF_NULLABLE value);
  ::caffe::ResizeParameter* PROTOBUF_NULLABLE unsafe_arena_release_resize_param();

  private:
  const ::caffe::ResizeParameter& _internal_resize_param() const;
  ::caffe::ResizeParameter* PROTOBUF_NONNULL _internal_mutable_resize_param();

  public:
  // optional uint32 num_test_image = 6;
  [[nodiscard]] bool has_num_test_image()
      const;
  void clear_num_test_image() ;
  [[nodiscard]] ::uint32_t num_test_image() const;
  void set_num_test_image(::uint32_t value);

  private:
  ::uint32_t _internal_num_test_image() const;
  void _internal_set_num_test_image(::uint32_t value);

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

  friend class ::google::protobuf::MessageLite;
  friend class ::google::protobuf::Arena;
  friend ::google::protobuf::internal::PrivateAccess;
  template <typename T>
  friend class ::google::protobuf::Arena::InternalHelper;
  using InternalArenaConstructable_ = void;
  using DestructorSkippable_ = void;
  struct Impl_ {
    inline explicit constexpr Impl_(::google::protobuf::internal::InternalVisibility visibility,
                                    ::google::protobuf::internal::ConstantInitialized) noexcept;
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const Impl_& from,
        const SaveOutputParameter& from_msg);
    ::google::protobuf::internal::HasBits<1> _has_bits_;
    ::google::protobuf::internal::CachedSize _cached_size_;
    ::google::protobuf::internal::ArenaStringPtr output_directory_;
    ::google::protobuf::internal::ArenaStringPtr output_name_prefix_;
    ::google::protobuf::internal::ArenaStringPtr output_format_;
    ::google::protobuf::internal::ArenaStringPtr label_map_file_;
    ::google::protobuf::internal::ArenaStringPtr name_size_file_;
    ::caffe::ResizeParameter* PROTOBUF_NULLABLE resize_param_;
    ::uint32_t num_test_image_;
    PROTOBUF_TSAN_DECLARE_MEMBER
  };
  union { Impl_ _impl_; };
  friend struct ::TableStruct_caffe_2eproto;
};
// -------------------------------------------------------------------

class  PROTOBUF_FUTURE_ADD_EARLY_WARN_UNUSED ReshapeParameter final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:caffe.ReshapeParameter) */ {
 public:
  inline ReshapeParameter() : ReshapeParameter(nullptr) {}
  ~ReshapeParameter() PROTOBUF_FINAL;

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

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

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

  [[nodiscard]] inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  [[nodiscard]] inline ::google::protobuf::UnknownFieldSet* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL descriptor() {
    return GetDescriptor();
  }
  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL
  GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  [[nodiscard]] static const ::google::protobuf::Reflection* PROTOBUF_NONNULL GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  [[nodiscard]] static const ReshapeParameter& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<ReshapeParameter>(&ReshapeParameter_globals_);
  }
  static constexpr int kIndexInFileMessages = 60;
  friend void swap(ReshapeParameter& a, ReshapeParameter& b) { a.Swap(&b); }
  inline void Swap(ReshapeParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(ReshapeParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  [[nodiscard]] ReshapeParameter* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::Message::DefaultConstruct<ReshapeParameter>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const ReshapeParameter& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const ReshapeParameter& from) { ReshapeParameter::MergeImpl(*this, from); }

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

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

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

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

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

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

  [[nodiscard]] ::google::protobuf::Metadata GetMetadata() const;
  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------
  enum : int {
    kShapeFieldNumber = 1,
    kAxisFieldNumber = 2,
    kNumAxesFieldNumber = 3,
  };
  // optional .caffe.BlobShape shape = 1;
  [[nodiscard]] bool has_shape()
      const;
  void clear_shape() ;
  [[nodiscard]] const ::caffe::BlobShape& shape() const;
  [[nodiscard]] ::caffe::BlobShape* PROTOBUF_NULLABLE release_shape();
  ::caffe::BlobShape* PROTOBUF_NONNULL mutable_shape();
  void set_allocated_shape(::caffe::BlobShape* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_shape(::caffe::BlobShape* PROTOBUF_NULLABLE value);
  ::caffe::BlobShape* PROTOBUF_NULLABLE unsafe_arena_release_shape();

  private:
  const ::caffe::BlobShape& _internal_shape() const;
  ::caffe::BlobShape* PROTOBUF_NONNULL _internal_mutable_shape();

  public:
  // optional int32 axis = 2 [default = 0];
  [[nodiscard]] bool has_axis()
      const;
  void clear_axis() ;
  [[nodiscard]] ::int32_t axis() const;
  void set_axis(::int32_t value);

  private:
  ::int32_t _internal_axis() const;
  void _internal_set_axis(::int32_t value);

  public:
  // optional int32 num_axes = 3 [default = -1];
  [[nodiscard]] bool has_num_axes()
      const;
  void clear_num_axes() ;
  [[nodiscard]] ::int32_t num_axes() const;
  void set_num_axes(::int32_t value);

  private:
  ::int32_t _internal_num_axes() const;
  void _internal_set_num_axes(::int32_t value);

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

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

class  PROTOBUF_FUTURE_ADD_EARLY_WARN_UNUSED RecurrentParameter final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:caffe.RecurrentParameter) */ {
 public:
  inline RecurrentParameter() : RecurrentParameter(nullptr) {}
  ~RecurrentParameter() PROTOBUF_FINAL;

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

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

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

  [[nodiscard]] inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  [[nodiscard]] inline ::google::protobuf::UnknownFieldSet* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL descriptor() {
    return GetDescriptor();
  }
  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL
  GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  [[nodiscard]] static const ::google::protobuf::Reflection* PROTOBUF_NONNULL GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  [[nodiscard]] static const RecurrentParameter& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<RecurrentParameter>(&RecurrentParameter_globals_);
  }
  static constexpr int kIndexInFileMessages = 56;
  friend void swap(RecurrentParameter& a, RecurrentParameter& b) { a.Swap(&b); }
  inline void Swap(RecurrentParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(RecurrentParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  [[nodiscard]] RecurrentParameter* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::Message::DefaultConstruct<RecurrentParameter>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const RecurrentParameter& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const RecurrentParameter& from) { RecurrentParameter::MergeImpl(*this, from); }

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

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

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

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

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

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

  [[nodiscard]] ::google::protobuf::Metadata GetMetadata() const;
  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------
  enum : int {
    kWeightFillerFieldNumber = 2,
    kBiasFillerFieldNumber = 3,
    kNumOutputFieldNumber = 1,
    kDebugInfoFieldNumber = 4,
    kExposeHiddenFieldNumber = 5,
  };
  // optional .caffe.FillerParameter weight_filler = 2;
  [[nodiscard]] bool has_weight_filler()
      const;
  void clear_weight_filler() ;
  [[nodiscard]] const ::caffe::FillerParameter& weight_filler() const;
  [[nodiscard]] ::caffe::FillerParameter* PROTOBUF_NULLABLE release_weight_filler();
  ::caffe::FillerParameter* PROTOBUF_NONNULL mutable_weight_filler();
  void set_allocated_weight_filler(::caffe::FillerParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_weight_filler(::caffe::FillerParameter* PROTOBUF_NULLABLE value);
  ::caffe::FillerParameter* PROTOBUF_NULLABLE unsafe_arena_release_weight_filler();

  private:
  const ::caffe::FillerParameter& _internal_weight_filler() const;
  ::caffe::FillerParameter* PROTOBUF_NONNULL _internal_mutable_weight_filler();

  public:
  // optional .caffe.FillerParameter bias_filler = 3;
  [[nodiscard]] bool has_bias_filler()
      const;
  void clear_bias_filler() ;
  [[nodiscard]] const ::caffe::FillerParameter& bias_filler() const;
  [[nodiscard]] ::caffe::FillerParameter* PROTOBUF_NULLABLE release_bias_filler();
  ::caffe::FillerParameter* PROTOBUF_NONNULL mutable_bias_filler();
  void set_allocated_bias_filler(::caffe::FillerParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_bias_filler(::caffe::FillerParameter* PROTOBUF_NULLABLE value);
  ::caffe::FillerParameter* PROTOBUF_NULLABLE unsafe_arena_release_bias_filler();

  private:
  const ::caffe::FillerParameter& _internal_bias_filler() const;
  ::caffe::FillerParameter* PROTOBUF_NONNULL _internal_mutable_bias_filler();

  public:
  // optional uint32 num_output = 1 [default = 0];
  [[nodiscard]] bool has_num_output()
      const;
  void clear_num_output() ;
  [[nodiscard]] ::uint32_t num_output() const;
  void set_num_output(::uint32_t value);

  private:
  ::uint32_t _internal_num_output() const;
  void _internal_set_num_output(::uint32_t value);

  public:
  // optional bool debug_info = 4 [default = false];
  [[nodiscard]] bool has_debug_info()
      const;
  void clear_debug_info() ;
  [[nodiscard]] bool debug_info() const;
  void set_debug_info(bool value);

  private:
  bool _internal_debug_info() const;
  void _internal_set_debug_info(bool value);

  public:
  // optional bool expose_hidden = 5 [default = false];
  [[nodiscard]] bool has_expose_hidden()
      const;
  void clear_expose_hidden() ;
  [[nodiscard]] bool expose_hidden() const;
  void set_expose_hidden(bool value);

  private:
  bool _internal_expose_hidden() const;
  void _internal_set_expose_hidden(bool value);

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

  friend class ::google::protobuf::MessageLite;
  friend class ::google::protobuf::Arena;
  friend ::google::protobuf::internal::PrivateAccess;
  template <typename T>
  friend class ::google::protobuf::Arena::InternalHelper;
  using InternalArenaConstructable_ = void;
  using DestructorSkippable_ = void;
  struct Impl_ {
    inline explicit constexpr Impl_(::google::protobuf::internal::InternalVisibility visibility,
                                    ::google::protobuf::internal::ConstantInitialized) noexcept;
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const Impl_& from,
        const RecurrentParameter& from_msg);
    ::google::protobuf::internal::HasBits<1> _has_bits_;
    ::google::protobuf::internal::CachedSize _cached_size_;
    ::caffe::FillerParameter* PROTOBUF_NULLABLE weight_filler_;
    ::caffe::FillerParameter* PROTOBUF_NULLABLE bias_filler_;
    ::uint32_t num_output_;
    bool debug_info_;
    bool expose_hidden_;
    PROTOBUF_TSAN_DECLARE_MEMBER
  };
  union { Impl_ _impl_; };
  friend struct ::TableStruct_caffe_2eproto;
};
// -------------------------------------------------------------------

class  PROTOBUF_FUTURE_ADD_EARLY_WARN_UNUSED PReLUParameter final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:caffe.PReLUParameter) */ {
 public:
  inline PReLUParameter() : PReLUParameter(nullptr) {}
  ~PReLUParameter() PROTOBUF_FINAL;

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

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

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

  [[nodiscard]] inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  [[nodiscard]] inline ::google::protobuf::UnknownFieldSet* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL descriptor() {
    return GetDescriptor();
  }
  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL
  GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  [[nodiscard]] static const ::google::protobuf::Reflection* PROTOBUF_NONNULL GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  [[nodiscard]] static const PReLUParameter& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<PReLUParameter>(&PReLUParameter_globals_);
  }
  static constexpr int kIndexInFileMessages = 76;
  friend void swap(PReLUParameter& a, PReLUParameter& b) { a.Swap(&b); }
  inline void Swap(PReLUParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(PReLUParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  [[nodiscard]] PReLUParameter* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::Message::DefaultConstruct<PReLUParameter>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const PReLUParameter& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const PReLUParameter& from) { PReLUParameter::MergeImpl(*this, from); }

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

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

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

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

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

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

  [[nodiscard]] ::google::protobuf::Metadata GetMetadata() const;
  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------
  enum : int {
    kFillerFieldNumber = 1,
    kChannelSharedFieldNumber = 2,
  };
  // optional .caffe.FillerParameter filler = 1;
  [[nodiscard]] bool has_filler()
      const;
  void clear_filler() ;
  [[nodiscard]] const ::caffe::FillerParameter& filler() const;
  [[nodiscard]] ::caffe::FillerParameter* PROTOBUF_NULLABLE release_filler();
  ::caffe::FillerParameter* PROTOBUF_NONNULL mutable_filler();
  void set_allocated_filler(::caffe::FillerParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_filler(::caffe::FillerParameter* PROTOBUF_NULLABLE value);
  ::caffe::FillerParameter* PROTOBUF_NULLABLE unsafe_arena_release_filler();

  private:
  const ::caffe::FillerParameter& _internal_filler() const;
  ::caffe::FillerParameter* PROTOBUF_NONNULL _internal_mutable_filler();

  public:
  // optional bool channel_shared = 2 [default = false];
  [[nodiscard]] bool has_channel_shared()
      const;
  void clear_channel_shared() ;
  [[nodiscard]] bool channel_shared() const;
  void set_channel_shared(bool value);

  private:
  bool _internal_channel_shared() const;
  void _internal_set_channel_shared(bool value);

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

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

class  PROTOBUF_FUTURE_ADD_EARLY_WARN_UNUSED NormalizeParameter final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:caffe.NormalizeParameter) */ {
 public:
  inline NormalizeParameter() : NormalizeParameter(nullptr) {}
  ~NormalizeParameter() PROTOBUF_FINAL;

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

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

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

  [[nodiscard]] inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  [[nodiscard]] inline ::google::protobuf::UnknownFieldSet* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL descriptor() {
    return GetDescriptor();
  }
  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL
  GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  [[nodiscard]] static const ::google::protobuf::Reflection* PROTOBUF_NONNULL GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  [[nodiscard]] static const NormalizeParameter& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<NormalizeParameter>(&NormalizeParameter_globals_);
  }
  static constexpr int kIndexInFileMessages = 49;
  friend void swap(NormalizeParameter& a, NormalizeParameter& b) { a.Swap(&b); }
  inline void Swap(NormalizeParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(NormalizeParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  [[nodiscard]] NormalizeParameter* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::Message::DefaultConstruct<NormalizeParameter>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const NormalizeParameter& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const NormalizeParameter& from) { NormalizeParameter::MergeImpl(*this, from); }

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

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

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

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

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

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

  [[nodiscard]] ::google::protobuf::Metadata GetMetadata() const;
  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------
  enum : int {
    kScaleFillerFieldNumber = 2,
    kAcrossSpatialFieldNumber = 1,
    kChannelSharedFieldNumber = 3,
    kEpsFieldNumber = 4,
  };
  // optional .caffe.FillerParameter scale_filler = 2;
  [[nodiscard]] bool has_scale_filler()
      const;
  void clear_scale_filler() ;
  [[nodiscard]] const ::caffe::FillerParameter& scale_filler() const;
  [[nodiscard]] ::caffe::FillerParameter* PROTOBUF_NULLABLE release_scale_filler();
  ::caffe::FillerParameter* PROTOBUF_NONNULL mutable_scale_filler();
  void set_allocated_scale_filler(::caffe::FillerParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_scale_filler(::caffe::FillerParameter* PROTOBUF_NULLABLE value);
  ::caffe::FillerParameter* PROTOBUF_NULLABLE unsafe_arena_release_scale_filler();

  private:
  const ::caffe::FillerParameter& _internal_scale_filler() const;
  ::caffe::FillerParameter* PROTOBUF_NONNULL _internal_mutable_scale_filler();

  public:
  // optional bool across_spatial = 1 [default = true];
  [[nodiscard]] bool has_across_spatial()
      const;
  void clear_across_spatial() ;
  [[nodiscard]] bool across_spatial() const;
  void set_across_spatial(bool value);

  private:
  bool _internal_across_spatial() const;
  void _internal_set_across_spatial(bool value);

  public:
  // optional bool channel_shared = 3 [default = true];
  [[nodiscard]] bool has_channel_shared()
      const;
  void clear_channel_shared() ;
  [[nodiscard]] bool channel_shared() const;
  void set_channel_shared(bool value);

  private:
  bool _internal_channel_shared() const;
  void _internal_set_channel_shared(bool value);

  public:
  // optional float eps = 4 [default = 1e-10];
  [[nodiscard]] bool has_eps()
      const;
  void clear_eps() ;
  [[nodiscard]] float eps() const;
  void set_eps(float value);

  private:
  float _internal_eps() const;
  void _internal_set_eps(float value);

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

  friend class ::google::protobuf::MessageLite;
  friend class ::google::protobuf::Arena;
  friend ::google::protobuf::internal::PrivateAccess;
  template <typename T>
  friend class ::google::protobuf::Arena::InternalHelper;
  using InternalArenaConstructable_ = void;
  using DestructorSkippable_ = void;
  struct Impl_ {
    inline explicit constexpr Impl_(::google::protobuf::internal::InternalVisibility visibility,
                                    ::google::protobuf::internal::ConstantInitialized) noexcept;
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const Impl_& from,
        const NormalizeParameter& from_msg);
    ::google::protobuf::internal::HasBits<1> _has_bits_;
    ::google::protobuf::internal::CachedSize _cached_size_;
    ::caffe::FillerParameter* PROTOBUF_NULLABLE scale_filler_;
    bool across_spatial_;
    bool channel_shared_;
    float eps_;
    PROTOBUF_TSAN_DECLARE_MEMBER
  };
  union { Impl_ _impl_; };
  friend struct ::TableStruct_caffe_2eproto;
};
// -------------------------------------------------------------------

class  PROTOBUF_FUTURE_ADD_EARLY_WARN_UNUSED InputParameter final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:caffe.InputParameter) */ {
 public:
  inline InputParameter() : InputParameter(nullptr) {}
  ~InputParameter() PROTOBUF_FINAL;

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

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

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

  [[nodiscard]] inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  [[nodiscard]] inline ::google::protobuf::UnknownFieldSet* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL descriptor() {
    return GetDescriptor();
  }
  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL
  GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  [[nodiscard]] static const ::google::protobuf::Reflection* PROTOBUF_NONNULL GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  [[nodiscard]] static const InputParameter& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<InputParameter>(&InputParameter_globals_);
  }
  static constexpr int kIndexInFileMessages = 43;
  friend void swap(InputParameter& a, InputParameter& b) { a.Swap(&b); }
  inline void Swap(InputParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(InputParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  [[nodiscard]] InputParameter* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::Message::DefaultConstruct<InputParameter>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const InputParameter& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const InputParameter& from) { InputParameter::MergeImpl(*this, from); }

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

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

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

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

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

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

  [[nodiscard]] ::google::protobuf::Metadata GetMetadata() const;
  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------
  enum : int {
    kShapeFieldNumber = 1,
  };
  // repeated .caffe.BlobShape shape = 1;
  [[nodiscard]] int shape_size()
      const;
  private:
  int _internal_shape_size() const;

  public:
  void clear_shape() ;
  [[nodiscard]] const ::caffe::BlobShape& shape(int index) const;
  [[nodiscard]] ::caffe::BlobShape* PROTOBUF_NONNULL mutable_shape(int index);
  ::caffe::BlobShape* PROTOBUF_NONNULL add_shape();
  [[nodiscard]] const ::google::protobuf::RepeatedPtrField<::caffe::BlobShape>&
  shape() const;
  [[nodiscard]] ::google::protobuf::RepeatedPtrField<::caffe::BlobShape>* PROTOBUF_NONNULL
  mutable_shape();

  private:
  const ::google::protobuf::RepeatedPtrField<::caffe::BlobShape>& _internal_shape() const;
  ::google::protobuf::RepeatedPtrField<::caffe::BlobShape>* PROTOBUF_NONNULL _internal_mutable_shape();

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

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

class  PROTOBUF_FUTURE_ADD_EARLY_WARN_UNUSED InnerProductParameter final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:caffe.InnerProductParameter) */ {
 public:
  inline InnerProductParameter() : InnerProductParameter(nullptr) {}
  ~InnerProductParameter() PROTOBUF_FINAL;

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

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

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

  [[nodiscard]] inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  [[nodiscard]] inline ::google::protobuf::UnknownFieldSet* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL descriptor() {
    return GetDescriptor();
  }
  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL
  GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  [[nodiscard]] static const ::google::protobuf::Reflection* PROTOBUF_NONNULL GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  [[nodiscard]] static const InnerProductParameter& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<InnerProductParameter>(&InnerProductParameter_globals_);
  }
  static constexpr int kIndexInFileMessages = 42;
  friend void swap(InnerProductParameter& a, InnerProductParameter& b) { a.Swap(&b); }
  inline void Swap(InnerProductParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(InnerProductParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  [[nodiscard]] InnerProductParameter* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::Message::DefaultConstruct<InnerProductParameter>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const InnerProductParameter& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const InnerProductParameter& from) { InnerProductParameter::MergeImpl(*this, from); }

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

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

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

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

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

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

  [[nodiscard]] ::google::protobuf::Metadata GetMetadata() const;
  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------
  enum : int {
    kWeightFillerFieldNumber = 3,
    kBiasFillerFieldNumber = 4,
    kNumOutputFieldNumber = 1,
    kTransposeFieldNumber = 6,
    kBiasTermFieldNumber = 2,
    kAxisFieldNumber = 5,
  };
  // optional .caffe.FillerParameter weight_filler = 3;
  [[nodiscard]] bool has_weight_filler()
      const;
  void clear_weight_filler() ;
  [[nodiscard]] const ::caffe::FillerParameter& weight_filler() const;
  [[nodiscard]] ::caffe::FillerParameter* PROTOBUF_NULLABLE release_weight_filler();
  ::caffe::FillerParameter* PROTOBUF_NONNULL mutable_weight_filler();
  void set_allocated_weight_filler(::caffe::FillerParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_weight_filler(::caffe::FillerParameter* PROTOBUF_NULLABLE value);
  ::caffe::FillerParameter* PROTOBUF_NULLABLE unsafe_arena_release_weight_filler();

  private:
  const ::caffe::FillerParameter& _internal_weight_filler() const;
  ::caffe::FillerParameter* PROTOBUF_NONNULL _internal_mutable_weight_filler();

  public:
  // optional .caffe.FillerParameter bias_filler = 4;
  [[nodiscard]] bool has_bias_filler()
      const;
  void clear_bias_filler() ;
  [[nodiscard]] const ::caffe::FillerParameter& bias_filler() const;
  [[nodiscard]] ::caffe::FillerParameter* PROTOBUF_NULLABLE release_bias_filler();
  ::caffe::FillerParameter* PROTOBUF_NONNULL mutable_bias_filler();
  void set_allocated_bias_filler(::caffe::FillerParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_bias_filler(::caffe::FillerParameter* PROTOBUF_NULLABLE value);
  ::caffe::FillerParameter* PROTOBUF_NULLABLE unsafe_arena_release_bias_filler();

  private:
  const ::caffe::FillerParameter& _internal_bias_filler() const;
  ::caffe::FillerParameter* PROTOBUF_NONNULL _internal_mutable_bias_filler();

  public:
  // optional uint32 num_output = 1;
  [[nodiscard]] bool has_num_output()
      const;
  void clear_num_output() ;
  [[nodiscard]] ::uint32_t num_output() const;
  void set_num_output(::uint32_t value);

  private:
  ::uint32_t _internal_num_output() const;
  void _internal_set_num_output(::uint32_t value);

  public:
  // optional bool transpose = 6 [default = false];
  [[nodiscard]] bool has_transpose()
      const;
  void clear_transpose() ;
  [[nodiscard]] bool transpose() const;
  void set_transpose(bool value);

  private:
  bool _internal_transpose() const;
  void _internal_set_transpose(bool value);

  public:
  // optional bool bias_term = 2 [default = true];
  [[nodiscard]] bool has_bias_term()
      const;
  void clear_bias_term() ;
  [[nodiscard]] bool bias_term() const;
  void set_bias_term(bool value);

  private:
  bool _internal_bias_term() const;
  void _internal_set_bias_term(bool value);

  public:
  // optional int32 axis = 5 [default = 1];
  [[nodiscard]] bool has_axis()
      const;
  void clear_axis() ;
  [[nodiscard]] ::int32_t axis() const;
  void set_axis(::int32_t value);

  private:
  ::int32_t _internal_axis() const;
  void _internal_set_axis(::int32_t value);

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

  friend class ::google::protobuf::MessageLite;
  friend class ::google::protobuf::Arena;
  friend ::google::protobuf::internal::PrivateAccess;
  template <typename T>
  friend class ::google::protobuf::Arena::InternalHelper;
  using InternalArenaConstructable_ = void;
  using DestructorSkippable_ = void;
  struct Impl_ {
    inline explicit constexpr Impl_(::google::protobuf::internal::InternalVisibility visibility,
                                    ::google::protobuf::internal::ConstantInitialized) noexcept;
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const Impl_& from,
        const InnerProductParameter& from_msg);
    ::google::protobuf::internal::HasBits<1> _has_bits_;
    ::google::protobuf::internal::CachedSize _cached_size_;
    ::caffe::FillerParameter* PROTOBUF_NULLABLE weight_filler_;
    ::caffe::FillerParameter* PROTOBUF_NULLABLE bias_filler_;
    ::uint32_t num_output_;
    bool transpose_;
    bool bias_term_;
    ::int32_t axis_;
    PROTOBUF_TSAN_DECLARE_MEMBER
  };
  union { Impl_ _impl_; };
  friend struct ::TableStruct_caffe_2eproto;
};
// -------------------------------------------------------------------

class  PROTOBUF_FUTURE_ADD_EARLY_WARN_UNUSED EmbedParameter final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:caffe.EmbedParameter) */ {
 public:
  inline EmbedParameter() : EmbedParameter(nullptr) {}
  ~EmbedParameter() PROTOBUF_FINAL;

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

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

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

  [[nodiscard]] inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  [[nodiscard]] inline ::google::protobuf::UnknownFieldSet* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL descriptor() {
    return GetDescriptor();
  }
  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL
  GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  [[nodiscard]] static const ::google::protobuf::Reflection* PROTOBUF_NONNULL GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  [[nodiscard]] static const EmbedParameter& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<EmbedParameter>(&EmbedParameter_globals_);
  }
  static constexpr int kIndexInFileMessages = 34;
  friend void swap(EmbedParameter& a, EmbedParameter& b) { a.Swap(&b); }
  inline void Swap(EmbedParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(EmbedParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  [[nodiscard]] EmbedParameter* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::Message::DefaultConstruct<EmbedParameter>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const EmbedParameter& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const EmbedParameter& from) { EmbedParameter::MergeImpl(*this, from); }

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

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

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

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

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

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

  [[nodiscard]] ::google::protobuf::Metadata GetMetadata() const;
  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------
  enum : int {
    kWeightFillerFieldNumber = 4,
    kBiasFillerFieldNumber = 5,
    kNumOutputFieldNumber = 1,
    kInputDimFieldNumber = 2,
    kBiasTermFieldNumber = 3,
  };
  // optional .caffe.FillerParameter weight_filler = 4;
  [[nodiscard]] bool has_weight_filler()
      const;
  void clear_weight_filler() ;
  [[nodiscard]] const ::caffe::FillerParameter& weight_filler() const;
  [[nodiscard]] ::caffe::FillerParameter* PROTOBUF_NULLABLE release_weight_filler();
  ::caffe::FillerParameter* PROTOBUF_NONNULL mutable_weight_filler();
  void set_allocated_weight_filler(::caffe::FillerParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_weight_filler(::caffe::FillerParameter* PROTOBUF_NULLABLE value);
  ::caffe::FillerParameter* PROTOBUF_NULLABLE unsafe_arena_release_weight_filler();

  private:
  const ::caffe::FillerParameter& _internal_weight_filler() const;
  ::caffe::FillerParameter* PROTOBUF_NONNULL _internal_mutable_weight_filler();

  public:
  // optional .caffe.FillerParameter bias_filler = 5;
  [[nodiscard]] bool has_bias_filler()
      const;
  void clear_bias_filler() ;
  [[nodiscard]] const ::caffe::FillerParameter& bias_filler() const;
  [[nodiscard]] ::caffe::FillerParameter* PROTOBUF_NULLABLE release_bias_filler();
  ::caffe::FillerParameter* PROTOBUF_NONNULL mutable_bias_filler();
  void set_allocated_bias_filler(::caffe::FillerParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_bias_filler(::caffe::FillerParameter* PROTOBUF_NULLABLE value);
  ::caffe::FillerParameter* PROTOBUF_NULLABLE unsafe_arena_release_bias_filler();

  private:
  const ::caffe::FillerParameter& _internal_bias_filler() const;
  ::caffe::FillerParameter* PROTOBUF_NONNULL _internal_mutable_bias_filler();

  public:
  // optional uint32 num_output = 1;
  [[nodiscard]] bool has_num_output()
      const;
  void clear_num_output() ;
  [[nodiscard]] ::uint32_t num_output() const;
  void set_num_output(::uint32_t value);

  private:
  ::uint32_t _internal_num_output() const;
  void _internal_set_num_output(::uint32_t value);

  public:
  // optional uint32 input_dim = 2;
  [[nodiscard]] bool has_input_dim()
      const;
  void clear_input_dim() ;
  [[nodiscard]] ::uint32_t input_dim() const;
  void set_input_dim(::uint32_t value);

  private:
  ::uint32_t _internal_input_dim() const;
  void _internal_set_input_dim(::uint32_t value);

  public:
  // optional bool bias_term = 3 [default = true];
  [[nodiscard]] bool has_bias_term()
      const;
  void clear_bias_term() ;
  [[nodiscard]] bool bias_term() const;
  void set_bias_term(bool value);

  private:
  bool _internal_bias_term() const;
  void _internal_set_bias_term(bool value);

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

  friend class ::google::protobuf::MessageLite;
  friend class ::google::protobuf::Arena;
  friend ::google::protobuf::internal::PrivateAccess;
  template <typename T>
  friend class ::google::protobuf::Arena::InternalHelper;
  using InternalArenaConstructable_ = void;
  using DestructorSkippable_ = void;
  struct Impl_ {
    inline explicit constexpr Impl_(::google::protobuf::internal::InternalVisibility visibility,
                                    ::google::protobuf::internal::ConstantInitialized) noexcept;
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const Impl_& from,
        const EmbedParameter& from_msg);
    ::google::protobuf::internal::HasBits<1> _has_bits_;
    ::google::protobuf::internal::CachedSize _cached_size_;
    ::caffe::FillerParameter* PROTOBUF_NULLABLE weight_filler_;
    ::caffe::FillerParameter* PROTOBUF_NULLABLE bias_filler_;
    ::uint32_t num_output_;
    ::uint32_t input_dim_;
    bool bias_term_;
    PROTOBUF_TSAN_DECLARE_MEMBER
  };
  union { Impl_ _impl_; };
  friend struct ::TableStruct_caffe_2eproto;
};
// -------------------------------------------------------------------

class  PROTOBUF_FUTURE_ADD_EARLY_WARN_UNUSED DummyDataParameter final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:caffe.DummyDataParameter) */ {
 public:
  inline DummyDataParameter() : DummyDataParameter(nullptr) {}
  ~DummyDataParameter() PROTOBUF_FINAL;

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

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

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

  [[nodiscard]] inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  [[nodiscard]] inline ::google::protobuf::UnknownFieldSet* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL descriptor() {
    return GetDescriptor();
  }
  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL
  GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  [[nodiscard]] static const ::google::protobuf::Reflection* PROTOBUF_NONNULL GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  [[nodiscard]] static const DummyDataParameter& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<DummyDataParameter>(&DummyDataParameter_globals_);
  }
  static constexpr int kIndexInFileMessages = 31;
  friend void swap(DummyDataParameter& a, DummyDataParameter& b) { a.Swap(&b); }
  inline void Swap(DummyDataParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(DummyDataParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  [[nodiscard]] DummyDataParameter* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::Message::DefaultConstruct<DummyDataParameter>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const DummyDataParameter& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const DummyDataParameter& from) { DummyDataParameter::MergeImpl(*this, from); }

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

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

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

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

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

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

  [[nodiscard]] ::google::protobuf::Metadata GetMetadata() const;
  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------
  enum : int {
    kDataFillerFieldNumber = 1,
    kNumFieldNumber = 2,
    kChannelsFieldNumber = 3,
    kHeightFieldNumber = 4,
    kWidthFieldNumber = 5,
    kShapeFieldNumber = 6,
  };
  // repeated .caffe.FillerParameter data_filler = 1;
  [[nodiscard]] int data_filler_size()
      const;
  private:
  int _internal_data_filler_size() const;

  public:
  void clear_data_filler() ;
  [[nodiscard]] const ::caffe::FillerParameter& data_filler(int index) const;
  [[nodiscard]] ::caffe::FillerParameter* PROTOBUF_NONNULL mutable_data_filler(int index);
  ::caffe::FillerParameter* PROTOBUF_NONNULL add_data_filler();
  [[nodiscard]] const ::google::protobuf::RepeatedPtrField<::caffe::FillerParameter>&
  data_filler() const;
  [[nodiscard]] ::google::protobuf::RepeatedPtrField<::caffe::FillerParameter>* PROTOBUF_NONNULL
  mutable_data_filler();

  private:
  const ::google::protobuf::RepeatedPtrField<::caffe::FillerParameter>& _internal_data_filler() const;
  ::google::protobuf::RepeatedPtrField<::caffe::FillerParameter>* PROTOBUF_NONNULL _internal_mutable_data_filler();

  public:
  // repeated uint32 num = 2;
  [[nodiscard]] int num_size()
      const;
  private:
  int _internal_num_size() const;

  public:
  void clear_num() ;
  [[nodiscard]] ::uint32_t num(int index) const;
  void set_num(int index, ::uint32_t value);
  void add_num(::uint32_t value);
  [[nodiscard]] const ::google::protobuf::RepeatedField<::uint32_t>& num()
      const;
  ::google::protobuf::RepeatedField<::uint32_t>* PROTOBUF_NONNULL mutable_num();

  private:
  const ::google::protobuf::RepeatedField<::uint32_t>& _internal_num() const;
  ::google::protobuf::RepeatedField<::uint32_t>* PROTOBUF_NONNULL _internal_mutable_num();

  public:
  // repeated uint32 channels = 3;
  [[nodiscard]] int channels_size()
      const;
  private:
  int _internal_channels_size() const;

  public:
  void clear_channels() ;
  [[nodiscard]] ::uint32_t channels(int index) const;
  void set_channels(int index, ::uint32_t value);
  void add_channels(::uint32_t value);
  [[nodiscard]] const ::google::protobuf::RepeatedField<::uint32_t>& channels()
      const;
  ::google::protobuf::RepeatedField<::uint32_t>* PROTOBUF_NONNULL mutable_channels();

  private:
  const ::google::protobuf::RepeatedField<::uint32_t>& _internal_channels() const;
  ::google::protobuf::RepeatedField<::uint32_t>* PROTOBUF_NONNULL _internal_mutable_channels();

  public:
  // repeated uint32 height = 4;
  [[nodiscard]] int height_size()
      const;
  private:
  int _internal_height_size() const;

  public:
  void clear_height() ;
  [[nodiscard]] ::uint32_t height(int index) const;
  void set_height(int index, ::uint32_t value);
  void add_height(::uint32_t value);
  [[nodiscard]] const ::google::protobuf::RepeatedField<::uint32_t>& height()
      const;
  ::google::protobuf::RepeatedField<::uint32_t>* PROTOBUF_NONNULL mutable_height();

  private:
  const ::google::protobuf::RepeatedField<::uint32_t>& _internal_height() const;
  ::google::protobuf::RepeatedField<::uint32_t>* PROTOBUF_NONNULL _internal_mutable_height();

  public:
  // repeated uint32 width = 5;
  [[nodiscard]] int width_size()
      const;
  private:
  int _internal_width_size() const;

  public:
  void clear_width() ;
  [[nodiscard]] ::uint32_t width(int index) const;
  void set_width(int index, ::uint32_t value);
  void add_width(::uint32_t value);
  [[nodiscard]] const ::google::protobuf::RepeatedField<::uint32_t>& width()
      const;
  ::google::protobuf::RepeatedField<::uint32_t>* PROTOBUF_NONNULL mutable_width();

  private:
  const ::google::protobuf::RepeatedField<::uint32_t>& _internal_width() const;
  ::google::protobuf::RepeatedField<::uint32_t>* PROTOBUF_NONNULL _internal_mutable_width();

  public:
  // repeated .caffe.BlobShape shape = 6;
  [[nodiscard]] int shape_size()
      const;
  private:
  int _internal_shape_size() const;

  public:
  void clear_shape() ;
  [[nodiscard]] const ::caffe::BlobShape& shape(int index) const;
  [[nodiscard]] ::caffe::BlobShape* PROTOBUF_NONNULL mutable_shape(int index);
  ::caffe::BlobShape* PROTOBUF_NONNULL add_shape();
  [[nodiscard]] const ::google::protobuf::RepeatedPtrField<::caffe::BlobShape>&
  shape() const;
  [[nodiscard]] ::google::protobuf::RepeatedPtrField<::caffe::BlobShape>* PROTOBUF_NONNULL
  mutable_shape();

  private:
  const ::google::protobuf::RepeatedPtrField<::caffe::BlobShape>& _internal_shape() const;
  ::google::protobuf::RepeatedPtrField<::caffe::BlobShape>* PROTOBUF_NONNULL _internal_mutable_shape();

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

  friend class ::google::protobuf::MessageLite;
  friend class ::google::protobuf::Arena;
  friend ::google::protobuf::internal::PrivateAccess;
  template <typename T>
  friend class ::google::protobuf::Arena::InternalHelper;
  using InternalArenaConstructable_ = void;
  using DestructorSkippable_ = void;
  struct Impl_ {
    inline explicit constexpr Impl_(::google::protobuf::internal::InternalVisibility visibility,
                                    ::google::protobuf::internal::ConstantInitialized) noexcept;
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const Impl_& from,
        const DummyDataParameter& from_msg);
    ::google::protobuf::internal::HasBits<1> _has_bits_;
    ::google::protobuf::internal::CachedSize _cached_size_;
    ::google::protobuf::RepeatedPtrField< ::caffe::FillerParameter > data_filler_;
    ::google::protobuf::RepeatedField<::uint32_t> num_;
    ::google::protobuf::RepeatedField<::uint32_t> channels_;
    ::google::protobuf::RepeatedField<::uint32_t> height_;
    ::google::protobuf::RepeatedField<::uint32_t> width_;
    ::google::protobuf::RepeatedPtrField< ::caffe::BlobShape > shape_;
    PROTOBUF_TSAN_DECLARE_MEMBER
  };
  union { Impl_ _impl_; };
  friend struct ::TableStruct_caffe_2eproto;
};
// -------------------------------------------------------------------

class  PROTOBUF_FUTURE_ADD_EARLY_WARN_UNUSED ConvolutionParameter final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:caffe.ConvolutionParameter) */ {
 public:
  inline ConvolutionParameter() : ConvolutionParameter(nullptr) {}
  ~ConvolutionParameter() PROTOBUF_FINAL;

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

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

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

  [[nodiscard]] inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  [[nodiscard]] inline ::google::protobuf::UnknownFieldSet* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL descriptor() {
    return GetDescriptor();
  }
  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL
  GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  [[nodiscard]] static const ::google::protobuf::Reflection* PROTOBUF_NONNULL GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  [[nodiscard]] static const ConvolutionParameter& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<ConvolutionParameter>(&ConvolutionParameter_globals_);
  }
  static constexpr int kIndexInFileMessages = 22;
  friend void swap(ConvolutionParameter& a, ConvolutionParameter& b) { a.Swap(&b); }
  inline void Swap(ConvolutionParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(ConvolutionParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  [[nodiscard]] ConvolutionParameter* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::Message::DefaultConstruct<ConvolutionParameter>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const ConvolutionParameter& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const ConvolutionParameter& from) { ConvolutionParameter::MergeImpl(*this, from); }

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

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

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

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

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

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

  [[nodiscard]] ::google::protobuf::Metadata GetMetadata() const;
  // nested types ----------------------------------------------------
  using Engine = ConvolutionParameter_Engine;
  static constexpr Engine DEFAULT = ConvolutionParameter_Engine_DEFAULT;
  static constexpr Engine CAFFE = ConvolutionParameter_Engine_CAFFE;
  static constexpr Engine CUDNN = ConvolutionParameter_Engine_CUDNN;
  [[nodiscard]] static inline bool Engine_IsValid(int value) {
    return ConvolutionParameter_Engine_IsValid(value);
  }
  static constexpr Engine Engine_MIN = ConvolutionParameter_Engine_Engine_MIN;
  static constexpr Engine Engine_MAX = ConvolutionParameter_Engine_Engine_MAX;
  static constexpr int Engine_ARRAYSIZE = ConvolutionParameter_Engine_Engine_ARRAYSIZE;
  static inline const ::google::protobuf::EnumDescriptor* PROTOBUF_NONNULL Engine_descriptor() {
    return ConvolutionParameter_Engine_descriptor();
  }
  template <typename T>
  [[nodiscard]] static inline const ::std::string& Engine_Name(T value) {
    return ConvolutionParameter_Engine_Name(value);
  }
  [[nodiscard]] static inline bool Engine_Parse(
      ::absl::string_view name, Engine* PROTOBUF_NONNULL value) {
    return ConvolutionParameter_Engine_Parse(name, value);
  }

  // accessors -------------------------------------------------------
  enum : int {
    kPadFieldNumber = 3,
    kKernelSizeFieldNumber = 4,
    kStrideFieldNumber = 6,
    kDilationFieldNumber = 18,
    kWeightFillerFieldNumber = 7,
    kBiasFillerFieldNumber = 8,
    kNumOutputFieldNumber = 1,
    kPadHFieldNumber = 9,
    kPadWFieldNumber = 10,
    kKernelHFieldNumber = 11,
    kKernelWFieldNumber = 12,
    kStrideHFieldNumber = 13,
    kStrideWFieldNumber = 14,
    kEngineFieldNumber = 15,
    kForceNdIm2ColFieldNumber = 17,
    kAxisFieldNumber = 16,
    kBiasTermFieldNumber = 2,
    kGroupFieldNumber = 5,
  };
  // repeated uint32 pad = 3;
  [[nodiscard]] int pad_size()
      const;
  private:
  int _internal_pad_size() const;

  public:
  void clear_pad() ;
  [[nodiscard]] ::uint32_t pad(int index) const;
  void set_pad(int index, ::uint32_t value);
  void add_pad(::uint32_t value);
  [[nodiscard]] const ::google::protobuf::RepeatedField<::uint32_t>& pad()
      const;
  ::google::protobuf::RepeatedField<::uint32_t>* PROTOBUF_NONNULL mutable_pad();

  private:
  const ::google::protobuf::RepeatedField<::uint32_t>& _internal_pad() const;
  ::google::protobuf::RepeatedField<::uint32_t>* PROTOBUF_NONNULL _internal_mutable_pad();

  public:
  // repeated uint32 kernel_size = 4;
  [[nodiscard]] int kernel_size_size()
      const;
  private:
  int _internal_kernel_size_size() const;

  public:
  void clear_kernel_size() ;
  [[nodiscard]] ::uint32_t kernel_size(int index) const;
  void set_kernel_size(int index, ::uint32_t value);
  void add_kernel_size(::uint32_t value);
  [[nodiscard]] const ::google::protobuf::RepeatedField<::uint32_t>& kernel_size()
      const;
  ::google::protobuf::RepeatedField<::uint32_t>* PROTOBUF_NONNULL mutable_kernel_size();

  private:
  const ::google::protobuf::RepeatedField<::uint32_t>& _internal_kernel_size() const;
  ::google::protobuf::RepeatedField<::uint32_t>* PROTOBUF_NONNULL _internal_mutable_kernel_size();

  public:
  // repeated uint32 stride = 6;
  [[nodiscard]] int stride_size()
      const;
  private:
  int _internal_stride_size() const;

  public:
  void clear_stride() ;
  [[nodiscard]] ::uint32_t stride(int index) const;
  void set_stride(int index, ::uint32_t value);
  void add_stride(::uint32_t value);
  [[nodiscard]] const ::google::protobuf::RepeatedField<::uint32_t>& stride()
      const;
  ::google::protobuf::RepeatedField<::uint32_t>* PROTOBUF_NONNULL mutable_stride();

  private:
  const ::google::protobuf::RepeatedField<::uint32_t>& _internal_stride() const;
  ::google::protobuf::RepeatedField<::uint32_t>* PROTOBUF_NONNULL _internal_mutable_stride();

  public:
  // repeated uint32 dilation = 18;
  [[nodiscard]] int dilation_size()
      const;
  private:
  int _internal_dilation_size() const;

  public:
  void clear_dilation() ;
  [[nodiscard]] ::uint32_t dilation(int index) const;
  void set_dilation(int index, ::uint32_t value);
  void add_dilation(::uint32_t value);
  [[nodiscard]] const ::google::protobuf::RepeatedField<::uint32_t>& dilation()
      const;
  ::google::protobuf::RepeatedField<::uint32_t>* PROTOBUF_NONNULL mutable_dilation();

  private:
  const ::google::protobuf::RepeatedField<::uint32_t>& _internal_dilation() const;
  ::google::protobuf::RepeatedField<::uint32_t>* PROTOBUF_NONNULL _internal_mutable_dilation();

  public:
  // optional .caffe.FillerParameter weight_filler = 7;
  [[nodiscard]] bool has_weight_filler()
      const;
  void clear_weight_filler() ;
  [[nodiscard]] const ::caffe::FillerParameter& weight_filler() const;
  [[nodiscard]] ::caffe::FillerParameter* PROTOBUF_NULLABLE release_weight_filler();
  ::caffe::FillerParameter* PROTOBUF_NONNULL mutable_weight_filler();
  void set_allocated_weight_filler(::caffe::FillerParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_weight_filler(::caffe::FillerParameter* PROTOBUF_NULLABLE value);
  ::caffe::FillerParameter* PROTOBUF_NULLABLE unsafe_arena_release_weight_filler();

  private:
  const ::caffe::FillerParameter& _internal_weight_filler() const;
  ::caffe::FillerParameter* PROTOBUF_NONNULL _internal_mutable_weight_filler();

  public:
  // optional .caffe.FillerParameter bias_filler = 8;
  [[nodiscard]] bool has_bias_filler()
      const;
  void clear_bias_filler() ;
  [[nodiscard]] const ::caffe::FillerParameter& bias_filler() const;
  [[nodiscard]] ::caffe::FillerParameter* PROTOBUF_NULLABLE release_bias_filler();
  ::caffe::FillerParameter* PROTOBUF_NONNULL mutable_bias_filler();
  void set_allocated_bias_filler(::caffe::FillerParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_bias_filler(::caffe::FillerParameter* PROTOBUF_NULLABLE value);
  ::caffe::FillerParameter* PROTOBUF_NULLABLE unsafe_arena_release_bias_filler();

  private:
  const ::caffe::FillerParameter& _internal_bias_filler() const;
  ::caffe::FillerParameter* PROTOBUF_NONNULL _internal_mutable_bias_filler();

  public:
  // optional uint32 num_output = 1;
  [[nodiscard]] bool has_num_output()
      const;
  void clear_num_output() ;
  [[nodiscard]] ::uint32_t num_output() const;
  void set_num_output(::uint32_t value);

  private:
  ::uint32_t _internal_num_output() const;
  void _internal_set_num_output(::uint32_t value);

  public:
  // optional uint32 pad_h = 9 [default = 0];
  [[nodiscard]] bool has_pad_h()
      const;
  void clear_pad_h() ;
  [[nodiscard]] ::uint32_t pad_h() const;
  void set_pad_h(::uint32_t value);

  private:
  ::uint32_t _internal_pad_h() const;
  void _internal_set_pad_h(::uint32_t value);

  public:
  // optional uint32 pad_w = 10 [default = 0];
  [[nodiscard]] bool has_pad_w()
      const;
  void clear_pad_w() ;
  [[nodiscard]] ::uint32_t pad_w() const;
  void set_pad_w(::uint32_t value);

  private:
  ::uint32_t _internal_pad_w() const;
  void _internal_set_pad_w(::uint32_t value);

  public:
  // optional uint32 kernel_h = 11;
  [[nodiscard]] bool has_kernel_h()
      const;
  void clear_kernel_h() ;
  [[nodiscard]] ::uint32_t kernel_h() const;
  void set_kernel_h(::uint32_t value);

  private:
  ::uint32_t _internal_kernel_h() const;
  void _internal_set_kernel_h(::uint32_t value);

  public:
  // optional uint32 kernel_w = 12;
  [[nodiscard]] bool has_kernel_w()
      const;
  void clear_kernel_w() ;
  [[nodiscard]] ::uint32_t kernel_w() const;
  void set_kernel_w(::uint32_t value);

  private:
  ::uint32_t _internal_kernel_w() const;
  void _internal_set_kernel_w(::uint32_t value);

  public:
  // optional uint32 stride_h = 13;
  [[nodiscard]] bool has_stride_h()
      const;
  void clear_stride_h() ;
  [[nodiscard]] ::uint32_t stride_h() const;
  void set_stride_h(::uint32_t value);

  private:
  ::uint32_t _internal_stride_h() const;
  void _internal_set_stride_h(::uint32_t value);

  public:
  // optional uint32 stride_w = 14;
  [[nodiscard]] bool has_stride_w()
      const;
  void clear_stride_w() ;
  [[nodiscard]] ::uint32_t stride_w() const;
  void set_stride_w(::uint32_t value);

  private:
  ::uint32_t _internal_stride_w() const;
  void _internal_set_stride_w(::uint32_t value);

  public:
  // optional .caffe.ConvolutionParameter.Engine engine = 15 [default = DEFAULT];
  [[nodiscard]] bool has_engine()
      const;
  void clear_engine() ;
  [[nodiscard]] ::caffe::ConvolutionParameter_Engine engine() const;
  void set_engine(::caffe::ConvolutionParameter_Engine value);

  private:
  ::caffe::ConvolutionParameter_Engine _internal_engine() const;
  void _internal_set_engine(::caffe::ConvolutionParameter_Engine value);

  public:
  // optional bool force_nd_im2col = 17 [default = false];
  [[nodiscard]] bool has_force_nd_im2col()
      const;
  void clear_force_nd_im2col() ;
  [[nodiscard]] bool force_nd_im2col() const;
  void set_force_nd_im2col(bool value);

  private:
  bool _internal_force_nd_im2col() const;
  void _internal_set_force_nd_im2col(bool value);

  public:
  // optional int32 axis = 16 [default = 1];
  [[nodiscard]] bool has_axis()
      const;
  void clear_axis() ;
  [[nodiscard]] ::int32_t axis() const;
  void set_axis(::int32_t value);

  private:
  ::int32_t _internal_axis() const;
  void _internal_set_axis(::int32_t value);

  public:
  // optional bool bias_term = 2 [default = true];
  [[nodiscard]] bool has_bias_term()
      const;
  void clear_bias_term() ;
  [[nodiscard]] bool bias_term() const;
  void set_bias_term(bool value);

  private:
  bool _internal_bias_term() const;
  void _internal_set_bias_term(bool value);

  public:
  // optional uint32 group = 5 [default = 1];
  [[nodiscard]] bool has_group()
      const;
  void clear_group() ;
  [[nodiscard]] ::uint32_t group() const;
  void set_group(::uint32_t value);

  private:
  ::uint32_t _internal_group() const;
  void _internal_set_group(::uint32_t value);

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

  friend class ::google::protobuf::MessageLite;
  friend class ::google::protobuf::Arena;
  friend ::google::protobuf::internal::PrivateAccess;
  template <typename T>
  friend class ::google::protobuf::Arena::InternalHelper;
  using InternalArenaConstructable_ = void;
  using DestructorSkippable_ = void;
  struct Impl_ {
    inline explicit constexpr Impl_(::google::protobuf::internal::InternalVisibility visibility,
                                    ::google::protobuf::internal::ConstantInitialized) noexcept;
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const Impl_& from,
        const ConvolutionParameter& from_msg);
    ::google::protobuf::internal::HasBits<1> _has_bits_;
    ::google::protobuf::internal::CachedSize _cached_size_;
    ::google::protobuf::RepeatedField<::uint32_t> pad_;
    ::google::protobuf::RepeatedField<::uint32_t> kernel_size_;
    ::google::protobuf::RepeatedField<::uint32_t> stride_;
    ::google::protobuf::RepeatedField<::uint32_t> dilation_;
    ::caffe::FillerParameter* PROTOBUF_NULLABLE weight_filler_;
    ::caffe::FillerParameter* PROTOBUF_NULLABLE bias_filler_;
    ::uint32_t num_output_;
    ::uint32_t pad_h_;
    ::uint32_t pad_w_;
    ::uint32_t kernel_h_;
    ::uint32_t kernel_w_;
    ::uint32_t stride_h_;
    ::uint32_t stride_w_;
    int engine_;
    bool force_nd_im2col_;
    ::int32_t axis_;
    bool bias_term_;
    ::uint32_t group_;
    PROTOBUF_TSAN_DECLARE_MEMBER
  };
  union { Impl_ _impl_; };
  friend struct ::TableStruct_caffe_2eproto;
};
// -------------------------------------------------------------------

class  PROTOBUF_FUTURE_ADD_EARLY_WARN_UNUSED BlobProto final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:caffe.BlobProto) */ {
 public:
  inline BlobProto() : BlobProto(nullptr) {}
  ~BlobProto() PROTOBUF_FINAL;

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

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

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

  [[nodiscard]] inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  [[nodiscard]] inline ::google::protobuf::UnknownFieldSet* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL descriptor() {
    return GetDescriptor();
  }
  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL
  GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  [[nodiscard]] static const ::google::protobuf::Reflection* PROTOBUF_NONNULL GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  [[nodiscard]] static const BlobProto& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<BlobProto>(&BlobProto_globals_);
  }
  static constexpr int kIndexInFileMessages = 1;
  friend void swap(BlobProto& a, BlobProto& b) { a.Swap(&b); }
  inline void Swap(BlobProto* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(BlobProto* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  [[nodiscard]] BlobProto* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::Message::DefaultConstruct<BlobProto>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const BlobProto& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const BlobProto& from) { BlobProto::MergeImpl(*this, from); }

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

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

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

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

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

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

  [[nodiscard]] ::google::protobuf::Metadata GetMetadata() const;
  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------
  enum : int {
    kDataFieldNumber = 5,
    kDiffFieldNumber = 6,
    kDoubleDataFieldNumber = 8,
    kDoubleDiffFieldNumber = 9,
    kShapeFieldNumber = 7,
    kNumFieldNumber = 1,
    kChannelsFieldNumber = 2,
    kHeightFieldNumber = 3,
    kWidthFieldNumber = 4,
  };
  // repeated float data = 5 [packed = true];
  [[nodiscard]] int data_size()
      const;
  private:
  int _internal_data_size() const;

  public:
  void clear_data() ;
  [[nodiscard]] float data(int index) const;
  void set_data(int index, float value);
  void add_data(float value);
  [[nodiscard]] const ::google::protobuf::RepeatedField<float>& data()
      const;
  ::google::protobuf::RepeatedField<float>* PROTOBUF_NONNULL mutable_data();

  private:
  const ::google::protobuf::RepeatedField<float>& _internal_data() const;
  ::google::protobuf::RepeatedField<float>* PROTOBUF_NONNULL _internal_mutable_data();

  public:
  // repeated float diff = 6 [packed = true];
  [[nodiscard]] int diff_size()
      const;
  private:
  int _internal_diff_size() const;

  public:
  void clear_diff() ;
  [[nodiscard]] float diff(int index) const;
  void set_diff(int index, float value);
  void add_diff(float value);
  [[nodiscard]] const ::google::protobuf::RepeatedField<float>& diff()
      const;
  ::google::protobuf::RepeatedField<float>* PROTOBUF_NONNULL mutable_diff();

  private:
  const ::google::protobuf::RepeatedField<float>& _internal_diff() const;
  ::google::protobuf::RepeatedField<float>* PROTOBUF_NONNULL _internal_mutable_diff();

  public:
  // repeated double double_data = 8 [packed = true];
  [[nodiscard]] int double_data_size()
      const;
  private:
  int _internal_double_data_size() const;

  public:
  void clear_double_data() ;
  [[nodiscard]] double double_data(int index) const;
  void set_double_data(int index, double value);
  void add_double_data(double value);
  [[nodiscard]] const ::google::protobuf::RepeatedField<double>& double_data()
      const;
  ::google::protobuf::RepeatedField<double>* PROTOBUF_NONNULL mutable_double_data();

  private:
  const ::google::protobuf::RepeatedField<double>& _internal_double_data() const;
  ::google::protobuf::RepeatedField<double>* PROTOBUF_NONNULL _internal_mutable_double_data();

  public:
  // repeated double double_diff = 9 [packed = true];
  [[nodiscard]] int double_diff_size()
      const;
  private:
  int _internal_double_diff_size() const;

  public:
  void clear_double_diff() ;
  [[nodiscard]] double double_diff(int index) const;
  void set_double_diff(int index, double value);
  void add_double_diff(double value);
  [[nodiscard]] const ::google::protobuf::RepeatedField<double>& double_diff()
      const;
  ::google::protobuf::RepeatedField<double>* PROTOBUF_NONNULL mutable_double_diff();

  private:
  const ::google::protobuf::RepeatedField<double>& _internal_double_diff() const;
  ::google::protobuf::RepeatedField<double>* PROTOBUF_NONNULL _internal_mutable_double_diff();

  public:
  // optional .caffe.BlobShape shape = 7;
  [[nodiscard]] bool has_shape()
      const;
  void clear_shape() ;
  [[nodiscard]] const ::caffe::BlobShape& shape() const;
  [[nodiscard]] ::caffe::BlobShape* PROTOBUF_NULLABLE release_shape();
  ::caffe::BlobShape* PROTOBUF_NONNULL mutable_shape();
  void set_allocated_shape(::caffe::BlobShape* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_shape(::caffe::BlobShape* PROTOBUF_NULLABLE value);
  ::caffe::BlobShape* PROTOBUF_NULLABLE unsafe_arena_release_shape();

  private:
  const ::caffe::BlobShape& _internal_shape() const;
  ::caffe::BlobShape* PROTOBUF_NONNULL _internal_mutable_shape();

  public:
  // optional int32 num = 1 [default = 0];
  [[nodiscard]] bool has_num()
      const;
  void clear_num() ;
  [[nodiscard]] ::int32_t num() const;
  void set_num(::int32_t value);

  private:
  ::int32_t _internal_num() const;
  void _internal_set_num(::int32_t value);

  public:
  // optional int32 channels = 2 [default = 0];
  [[nodiscard]] bool has_channels()
      const;
  void clear_channels() ;
  [[nodiscard]] ::int32_t channels() const;
  void set_channels(::int32_t value);

  private:
  ::int32_t _internal_channels() const;
  void _internal_set_channels(::int32_t value);

  public:
  // optional int32 height = 3 [default = 0];
  [[nodiscard]] bool has_height()
      const;
  void clear_height() ;
  [[nodiscard]] ::int32_t height() const;
  void set_height(::int32_t value);

  private:
  ::int32_t _internal_height() const;
  void _internal_set_height(::int32_t value);

  public:
  // optional int32 width = 4 [default = 0];
  [[nodiscard]] bool has_width()
      const;
  void clear_width() ;
  [[nodiscard]] ::int32_t width() const;
  void set_width(::int32_t value);

  private:
  ::int32_t _internal_width() const;
  void _internal_set_width(::int32_t value);

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

  friend class ::google::protobuf::MessageLite;
  friend class ::google::protobuf::Arena;
  friend ::google::protobuf::internal::PrivateAccess;
  template <typename T>
  friend class ::google::protobuf::Arena::InternalHelper;
  using InternalArenaConstructable_ = void;
  using DestructorSkippable_ = void;
  struct Impl_ {
    inline explicit constexpr Impl_(::google::protobuf::internal::InternalVisibility visibility,
                                    ::google::protobuf::internal::ConstantInitialized) noexcept;
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const Impl_& from,
        const BlobProto& from_msg);
    ::google::protobuf::internal::HasBits<1> _has_bits_;
    ::google::protobuf::internal::CachedSize _cached_size_;
    ::google::protobuf::RepeatedField<float> data_;
    ::google::protobuf::RepeatedField<float> diff_;
    ::google::protobuf::RepeatedField<double> double_data_;
    ::google::protobuf::RepeatedField<double> double_diff_;
    ::caffe::BlobShape* PROTOBUF_NULLABLE shape_;
    ::int32_t num_;
    ::int32_t channels_;
    ::int32_t height_;
    ::int32_t width_;
    PROTOBUF_TSAN_DECLARE_MEMBER
  };
  union { Impl_ _impl_; };
  friend struct ::TableStruct_caffe_2eproto;
};
// -------------------------------------------------------------------

class  PROTOBUF_FUTURE_ADD_EARLY_WARN_UNUSED BiasParameter final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:caffe.BiasParameter) */ {
 public:
  inline BiasParameter() : BiasParameter(nullptr) {}
  ~BiasParameter() PROTOBUF_FINAL;

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

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

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

  [[nodiscard]] inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  [[nodiscard]] inline ::google::protobuf::UnknownFieldSet* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL descriptor() {
    return GetDescriptor();
  }
  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL
  GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  [[nodiscard]] static const ::google::protobuf::Reflection* PROTOBUF_NONNULL GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  [[nodiscard]] static const BiasParameter& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<BiasParameter>(&BiasParameter_globals_);
  }
  static constexpr int kIndexInFileMessages = 19;
  friend void swap(BiasParameter& a, BiasParameter& b) { a.Swap(&b); }
  inline void Swap(BiasParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(BiasParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

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

  [[nodiscard]] BiasParameter* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::Message::DefaultConstruct<BiasParameter>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const BiasParameter& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const BiasParameter& from) { BiasParameter::MergeImpl(*this, from); }

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

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

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

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

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

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

  [[nodiscard]] ::google::protobuf::Metadata GetMetadata() const;
  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------
  enum : int {
    kFillerFieldNumber = 3,
    kAxisFieldNumber = 1,
    kNumAxesFieldNumber = 2,
  };
  // optional .caffe.FillerParameter filler = 3;
  [[nodiscard]] bool has_filler()
      const;
  void clear_filler() ;
  [[nodiscard]] const ::caffe::FillerParameter& filler() const;
  [[nodiscard]] ::caffe::FillerParameter* PROTOBUF_NULLABLE release_filler();
  ::caffe::FillerParameter* PROTOBUF_NONNULL mutable_filler();
  void set_allocated_filler(::caffe::FillerParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_filler(::caffe::FillerParameter* PROTOBUF_NULLABLE value);
  ::caffe::FillerParameter* PROTOBUF_NULLABLE unsafe_arena_release_filler();

  private:
  const ::caffe::FillerParameter& _internal_filler() const;
  ::caffe::FillerParameter* PROTOBUF_NONNULL _internal_mutable_filler();

  public:
  // optional int32 axis = 1 [default = 1];
  [[nodiscard]] bool has_axis()
      const;
  void clear_axis() ;
  [[nodiscard]] ::int32_t axis() const;
  void set_axis(::int32_t value);

  private:
  ::int32_t _internal_axis() const;
  void _internal_set_axis(::int32_t value);

  public:
  // optional int32 num_axes = 2 [default = 1];
  [[nodiscard]] bool has_num_axes()
      const;
  void clear_num_axes() ;
  [[nodiscard]] ::int32_t num_axes() const;
  void set_num_axes(::int32_t value);

  private:
  ::int32_t _internal_num_axes() const;
  void _internal_set_num_axes(::int32_t value);

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

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

class  PROTOBUF_FUTURE_ADD_EARLY_WARN_UNUSED BNParameter final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:caffe.BNParameter) */ {
 public:
  inline BNParameter() : BNParameter(nullptr) {}
  ~BNParameter() PROTOBUF_FINAL;

#if defined(PROTOBUF_CUSTOM_VTABLE)
  void operator delete(BNParameter* PROTOBUF_NONNULL msg, ::std::destroying_delete_t) {
    SharedDtor(*msg);
    ::google::protobuf::internal::SizedDelete(msg, sizeof(BNParameter));
  }
#endif

  template <typename = void>
  explicit constexpr BNParameter(::google::protobuf::internal::ConstantInitialized,
                           const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL
                               class_data);

  inline BNParameter(const BNParameter& from) : BNParameter(nullptr, from) {}
  inline BNParameter(BNParameter&& from) noexcept : BNParameter(nullptr, ::std::move(from)) {}
  inline BNParameter& operator=(const BNParameter& from) {
    CopyFrom(from);
    return *this;
  }
  inline BNParameter& operator=(BNParameter&& from) noexcept {
    if (this == &from) return *this;
    if (::google::protobuf::internal::CanMoveWithInternalSwap(GetArena(), from.GetArena())) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  [[nodiscard]] inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  [[nodiscard]] inline ::google::protobuf::UnknownFieldSet* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL descriptor() {
    return GetDescriptor();
  }
  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL
  GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  [[nodiscard]] static const ::google::protobuf::Reflection* PROTOBUF_NONNULL GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  [[nodiscard]] static const BNParameter& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<BNParameter>(&BNParameter_globals_);
  }
  static constexpr int kIndexInFileMessages = 20;
  friend void swap(BNParameter& a, BNParameter& b) { a.Swap(&b); }
  inline void Swap(BNParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(BNParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  [[nodiscard]] BNParameter* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::Message::DefaultConstruct<BNParameter>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const BNParameter& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const BNParameter& from) { BNParameter::MergeImpl(*this, from); }

  private:
  static void MergeImpl(::google::protobuf::MessageLite& to_msg,
                        const ::google::protobuf::MessageLite& from_msg);

  public:
  [[nodiscard]] bool IsInitialized() const {
    return true;
  }
  ABSL_ATTRIBUTE_REINITIALIZES void Clear() PROTOBUF_FINAL;
  #if defined(PROTOBUF_CUSTOM_VTABLE)
  private:
  [[nodiscard]] static ::size_t ByteSizeLong(const ::google::protobuf::MessageLite& msg);
  [[nodiscard]] static ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      const ::google::protobuf::MessageLite& msg, ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream);

  public:
  [[nodiscard]] ::size_t ByteSizeLong() const { return ByteSizeLong(*this); }
  [[nodiscard]] ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const {
    return _InternalSerialize(*this, target, stream);
  }
  #else   // PROTOBUF_CUSTOM_VTABLE
  [[nodiscard]] ::size_t ByteSizeLong() const final;
  [[nodiscard]] ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const final;
  #endif  // PROTOBUF_CUSTOM_VTABLE
  [[nodiscard]] int GetCachedSize() const {
    return _impl_._cached_size_.Get();
  }

  private:
  void SharedCtor(::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  static void SharedDtor(MessageLite& self);
  void InternalSwap(BNParameter* PROTOBUF_NONNULL other);
 private:
  template <typename T>
  friend ::absl::string_view(::google::protobuf::internal::GetAnyMessageName)();
  static ::absl::string_view FullMessageName() { return "caffe.BNParameter"; }

  explicit BNParameter(::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  BNParameter(::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const BNParameter& from);
  BNParameter(
      ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, BNParameter&& from) noexcept
      : BNParameter(arena) {
    *this = ::std::move(from);
  }
  const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL GetClassData() const PROTOBUF_FINAL;
  static void* PROTOBUF_NONNULL PlacementNew_(
      const void* PROTOBUF_NONNULL, void* PROTOBUF_NONNULL mem,
      ::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  static constexpr auto InternalNewImpl_();

 public:
  static constexpr auto InternalGenerateClassData_(
      const MessageLite& prototype,
      const ::google::protobuf::internal::TcParseTableBase* PROTOBUF_NULLABLE tc_table = nullptr);

  [[nodiscard]] ::google::protobuf::Metadata GetMetadata() const;
  // nested types ----------------------------------------------------
  using BNMode = BNParameter_BNMode;
  static constexpr BNMode LEARN = BNParameter_BNMode_LEARN;
  static constexpr BNMode INFERENCE = BNParameter_BNMode_INFERENCE;
  [[nodiscard]] static inline bool BNMode_IsValid(int value) {
    return BNParameter_BNMode_IsValid(value);
  }
  static constexpr BNMode BNMode_MIN = BNParameter_BNMode_BNMode_MIN;
  static constexpr BNMode BNMode_MAX = BNParameter_BNMode_BNMode_MAX;
  static constexpr int BNMode_ARRAYSIZE = BNParameter_BNMode_BNMode_ARRAYSIZE;
  static inline const ::google::protobuf::EnumDescriptor* PROTOBUF_NONNULL BNMode_descriptor() {
    return BNParameter_BNMode_descriptor();
  }
  template <typename T>
  [[nodiscard]] static inline const ::std::string& BNMode_Name(T value) {
    return BNParameter_BNMode_Name(value);
  }
  [[nodiscard]] static inline bool BNMode_Parse(
      ::absl::string_view name, BNMode* PROTOBUF_NONNULL value) {
    return BNParameter_BNMode_Parse(name, value);
  }

  // accessors -------------------------------------------------------
  enum : int {
    kScaleFillerFieldNumber = 1,
    kShiftFillerFieldNumber = 2,
    kBnModeFieldNumber = 3,
  };
  // optional .caffe.FillerParameter scale_filler = 1;
  [[nodiscard]] bool has_scale_filler()
      const;
  void clear_scale_filler() ;
  [[nodiscard]] const ::caffe::FillerParameter& scale_filler() const;
  [[nodiscard]] ::caffe::FillerParameter* PROTOBUF_NULLABLE release_scale_filler();
  ::caffe::FillerParameter* PROTOBUF_NONNULL mutable_scale_filler();
  void set_allocated_scale_filler(::caffe::FillerParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_scale_filler(::caffe::FillerParameter* PROTOBUF_NULLABLE value);
  ::caffe::FillerParameter* PROTOBUF_NULLABLE unsafe_arena_release_scale_filler();

  private:
  const ::caffe::FillerParameter& _internal_scale_filler() const;
  ::caffe::FillerParameter* PROTOBUF_NONNULL _internal_mutable_scale_filler();

  public:
  // optional .caffe.FillerParameter shift_filler = 2;
  [[nodiscard]] bool has_shift_filler()
      const;
  void clear_shift_filler() ;
  [[nodiscard]] const ::caffe::FillerParameter& shift_filler() const;
  [[nodiscard]] ::caffe::FillerParameter* PROTOBUF_NULLABLE release_shift_filler();
  ::caffe::FillerParameter* PROTOBUF_NONNULL mutable_shift_filler();
  void set_allocated_shift_filler(::caffe::FillerParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_shift_filler(::caffe::FillerParameter* PROTOBUF_NULLABLE value);
  ::caffe::FillerParameter* PROTOBUF_NULLABLE unsafe_arena_release_shift_filler();

  private:
  const ::caffe::FillerParameter& _internal_shift_filler() const;
  ::caffe::FillerParameter* PROTOBUF_NONNULL _internal_mutable_shift_filler();

  public:
  // optional .caffe.BNParameter.BNMode bn_mode = 3 [default = LEARN];
  [[nodiscard]] bool has_bn_mode()
      const;
  void clear_bn_mode() ;
  [[nodiscard]] ::caffe::BNParameter_BNMode bn_mode() const;
  void set_bn_mode(::caffe::BNParameter_BNMode value);

  private:
  ::caffe::BNParameter_BNMode _internal_bn_mode() const;
  void _internal_set_bn_mode(::caffe::BNParameter_BNMode value);

  public:
  // @@protoc_insertion_point(class_scope:caffe.BNParameter)
 private:
  class _Internal;
  using ParseTableT_ =
      ::google::protobuf::internal::TcParseTable<2, 3,
                          3, 0,
                          2>;
  static constexpr ParseTableT_ InternalGenerateParseTable_(
      const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL class_data);
  friend class ::google::protobuf::internal::TcParser;
  #ifndef PROTOBUF_MESSAGE_GLOBALS
  static const ParseTableT_ _table_;
  #endif

  friend class ::google::protobuf::MessageLite;
  friend class ::google::protobuf::Arena;
  friend ::google::protobuf::internal::PrivateAccess;
  template <typename T>
  friend class ::google::protobuf::Arena::InternalHelper;
  using InternalArenaConstructable_ = void;
  using DestructorSkippable_ = void;
  struct Impl_ {
    inline explicit constexpr Impl_(::google::protobuf::internal::InternalVisibility visibility,
                                    ::google::protobuf::internal::ConstantInitialized) noexcept;
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const Impl_& from,
        const BNParameter& from_msg);
    ::google::protobuf::internal::HasBits<1> _has_bits_;
    ::google::protobuf::internal::CachedSize _cached_size_;
    ::caffe::FillerParameter* PROTOBUF_NULLABLE scale_filler_;
    ::caffe::FillerParameter* PROTOBUF_NULLABLE shift_filler_;
    int bn_mode_;
    PROTOBUF_TSAN_DECLARE_MEMBER
  };
  union { Impl_ _impl_; };
  friend struct ::TableStruct_caffe_2eproto;
};
// -------------------------------------------------------------------

class  PROTOBUF_FUTURE_ADD_EARLY_WARN_UNUSED V0LayerParameter final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:caffe.V0LayerParameter) */ {
 public:
  inline V0LayerParameter() : V0LayerParameter(nullptr) {}
  ~V0LayerParameter() PROTOBUF_FINAL;

#if defined(PROTOBUF_CUSTOM_VTABLE)
  void operator delete(V0LayerParameter* PROTOBUF_NONNULL msg, ::std::destroying_delete_t) {
    SharedDtor(*msg);
    ::google::protobuf::internal::SizedDelete(msg, sizeof(V0LayerParameter));
  }
#endif

  template <typename = void>
  explicit constexpr V0LayerParameter(::google::protobuf::internal::ConstantInitialized,
                           const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL
                               class_data);

  inline V0LayerParameter(const V0LayerParameter& from) : V0LayerParameter(nullptr, from) {}
  inline V0LayerParameter(V0LayerParameter&& from) noexcept : V0LayerParameter(nullptr, ::std::move(from)) {}
  inline V0LayerParameter& operator=(const V0LayerParameter& from) {
    CopyFrom(from);
    return *this;
  }
  inline V0LayerParameter& operator=(V0LayerParameter&& from) noexcept {
    if (this == &from) return *this;
    if (::google::protobuf::internal::CanMoveWithInternalSwap(GetArena(), from.GetArena())) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  [[nodiscard]] inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  [[nodiscard]] inline ::google::protobuf::UnknownFieldSet* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL descriptor() {
    return GetDescriptor();
  }
  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL
  GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  [[nodiscard]] static const ::google::protobuf::Reflection* PROTOBUF_NONNULL GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  [[nodiscard]] static const V0LayerParameter& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<V0LayerParameter>(&V0LayerParameter_globals_);
  }
  static constexpr int kIndexInFileMessages = 75;
  friend void swap(V0LayerParameter& a, V0LayerParameter& b) { a.Swap(&b); }
  inline void Swap(V0LayerParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(V0LayerParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  [[nodiscard]] V0LayerParameter* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::Message::DefaultConstruct<V0LayerParameter>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const V0LayerParameter& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const V0LayerParameter& from) { V0LayerParameter::MergeImpl(*this, from); }

  private:
  static void MergeImpl(::google::protobuf::MessageLite& to_msg,
                        const ::google::protobuf::MessageLite& from_msg);

  public:
  [[nodiscard]] bool IsInitialized() const {
    return true;
  }
  ABSL_ATTRIBUTE_REINITIALIZES void Clear() PROTOBUF_FINAL;
  #if defined(PROTOBUF_CUSTOM_VTABLE)
  private:
  [[nodiscard]] static ::size_t ByteSizeLong(const ::google::protobuf::MessageLite& msg);
  [[nodiscard]] static ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      const ::google::protobuf::MessageLite& msg, ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream);

  public:
  [[nodiscard]] ::size_t ByteSizeLong() const { return ByteSizeLong(*this); }
  [[nodiscard]] ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const {
    return _InternalSerialize(*this, target, stream);
  }
  #else   // PROTOBUF_CUSTOM_VTABLE
  [[nodiscard]] ::size_t ByteSizeLong() const final;
  [[nodiscard]] ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const final;
  #endif  // PROTOBUF_CUSTOM_VTABLE
  [[nodiscard]] int GetCachedSize() const {
    return _impl_._cached_size_.Get();
  }

  private:
  void SharedCtor(::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  static void SharedDtor(MessageLite& self);
  void InternalSwap(V0LayerParameter* PROTOBUF_NONNULL other);
 private:
  template <typename T>
  friend ::absl::string_view(::google::protobuf::internal::GetAnyMessageName)();
  static ::absl::string_view FullMessageName() { return "caffe.V0LayerParameter"; }

  explicit V0LayerParameter(::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  V0LayerParameter(::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const V0LayerParameter& from);
  V0LayerParameter(
      ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, V0LayerParameter&& from) noexcept
      : V0LayerParameter(arena) {
    *this = ::std::move(from);
  }
  const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL GetClassData() const PROTOBUF_FINAL;
  static void* PROTOBUF_NONNULL PlacementNew_(
      const void* PROTOBUF_NONNULL, void* PROTOBUF_NONNULL mem,
      ::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  static constexpr auto InternalNewImpl_();

 public:
  static constexpr auto InternalGenerateClassData_(
      const MessageLite& prototype,
      const ::google::protobuf::internal::TcParseTableBase* PROTOBUF_NULLABLE tc_table = nullptr);

  [[nodiscard]] ::google::protobuf::Metadata GetMetadata() const;
  // nested types ----------------------------------------------------
  using PoolMethod = V0LayerParameter_PoolMethod;
  static constexpr PoolMethod MAX = V0LayerParameter_PoolMethod_MAX;
  static constexpr PoolMethod AVE = V0LayerParameter_PoolMethod_AVE;
  static constexpr PoolMethod STOCHASTIC = V0LayerParameter_PoolMethod_STOCHASTIC;
  [[nodiscard]] static inline bool PoolMethod_IsValid(int value) {
    return V0LayerParameter_PoolMethod_IsValid(value);
  }
  static constexpr PoolMethod PoolMethod_MIN = V0LayerParameter_PoolMethod_PoolMethod_MIN;
  static constexpr PoolMethod PoolMethod_MAX = V0LayerParameter_PoolMethod_PoolMethod_MAX;
  static constexpr int PoolMethod_ARRAYSIZE = V0LayerParameter_PoolMethod_PoolMethod_ARRAYSIZE;
  static inline const ::google::protobuf::EnumDescriptor* PROTOBUF_NONNULL PoolMethod_descriptor() {
    return V0LayerParameter_PoolMethod_descriptor();
  }
  template <typename T>
  [[nodiscard]] static inline const ::std::string& PoolMethod_Name(T value) {
    return V0LayerParameter_PoolMethod_Name(value);
  }
  [[nodiscard]] static inline bool PoolMethod_Parse(
      ::absl::string_view name, PoolMethod* PROTOBUF_NONNULL value) {
    return V0LayerParameter_PoolMethod_Parse(name, value);
  }

  // accessors -------------------------------------------------------
  enum : int {
    kNameFieldNumber = 1,
    kTypeFieldNumber = 2,
    kSourceFieldNumber = 16,
    kMeanfileFieldNumber = 18,
    kDetCropModeFieldNumber = 59,
    kWeightFillerFieldNumber = 5,
    kBiasFillerFieldNumber = 6,
    kHdf5OutputParamFieldNumber = 1001,
    kNumOutputFieldNumber = 3,
    kPadFieldNumber = 7,
    kKernelsizeFieldNumber = 8,
    kPoolFieldNumber = 11,
    kBatchsizeFieldNumber = 19,
    kCropsizeFieldNumber = 20,
    kMirrorFieldNumber = 21,
    kDetContextPadFieldNumber = 58,
    kNewNumFieldNumber = 60,
    kNewChannelsFieldNumber = 61,
    kNewHeightFieldNumber = 62,
    kNewWidthFieldNumber = 63,
    kBiastermFieldNumber = 4,
    kGroupFieldNumber = 9,
    kStrideFieldNumber = 10,
    kDropoutRatioFieldNumber = 12,
    kLocalSizeFieldNumber = 13,
    kAlphaFieldNumber = 14,
    kBetaFieldNumber = 15,
    kScaleFieldNumber = 17,
    kKFieldNumber = 22,
    kDetBgThresholdFieldNumber = 55,
    kDetFgFractionFieldNumber = 56,
    kBlobsFieldNumber = 50,
    kBlobsLrFieldNumber = 51,
    kWeightDecayFieldNumber = 52,
    kRandSkipFieldNumber = 53,
    kShuffleImagesFieldNumber = 64,
    kDetFgThresholdFieldNumber = 54,
    kConcatDimFieldNumber = 65,
  };
  // optional string name = 1;
  [[nodiscard]] bool has_name()
      const;
  void clear_name() ;
  [[nodiscard]] const ::std::string& name() const;
  template <typename Arg_ = const ::std::string&, typename... Args_>
  void set_name(Arg_&& arg, Args_... args);
  ::std::string* PROTOBUF_NONNULL mutable_name();
  [[nodiscard]] ::std::string* PROTOBUF_NULLABLE release_name();
  void set_allocated_name(::std::string* PROTOBUF_NULLABLE value);

  private:
  const ::std::string& _internal_name() const;
  PROTOBUF_ALWAYS_INLINE void _internal_set_name(const ::std::string& value);
  ::std::string* PROTOBUF_NONNULL _internal_mutable_name();

  public:
  // optional string type = 2;
  [[nodiscard]] bool has_type()
      const;
  void clear_type() ;
  [[nodiscard]] const ::std::string& type() const;
  template <typename Arg_ = const ::std::string&, typename... Args_>
  void set_type(Arg_&& arg, Args_... args);
  ::std::string* PROTOBUF_NONNULL mutable_type();
  [[nodiscard]] ::std::string* PROTOBUF_NULLABLE release_type();
  void set_allocated_type(::std::string* PROTOBUF_NULLABLE value);

  private:
  const ::std::string& _internal_type() const;
  PROTOBUF_ALWAYS_INLINE void _internal_set_type(const ::std::string& value);
  ::std::string* PROTOBUF_NONNULL _internal_mutable_type();

  public:
  // optional string source = 16;
  [[nodiscard]] bool has_source()
      const;
  void clear_source() ;
  [[nodiscard]] const ::std::string& source() const;
  template <typename Arg_ = const ::std::string&, typename... Args_>
  void set_source(Arg_&& arg, Args_... args);
  ::std::string* PROTOBUF_NONNULL mutable_source();
  [[nodiscard]] ::std::string* PROTOBUF_NULLABLE release_source();
  void set_allocated_source(::std::string* PROTOBUF_NULLABLE value);

  private:
  const ::std::string& _internal_source() const;
  PROTOBUF_ALWAYS_INLINE void _internal_set_source(const ::std::string& value);
  ::std::string* PROTOBUF_NONNULL _internal_mutable_source();

  public:
  // optional string meanfile = 18;
  [[nodiscard]] bool has_meanfile()
      const;
  void clear_meanfile() ;
  [[nodiscard]] const ::std::string& meanfile() const;
  template <typename Arg_ = const ::std::string&, typename... Args_>
  void set_meanfile(Arg_&& arg, Args_... args);
  ::std::string* PROTOBUF_NONNULL mutable_meanfile();
  [[nodiscard]] ::std::string* PROTOBUF_NULLABLE release_meanfile();
  void set_allocated_meanfile(::std::string* PROTOBUF_NULLABLE value);

  private:
  const ::std::string& _internal_meanfile() const;
  PROTOBUF_ALWAYS_INLINE void _internal_set_meanfile(const ::std::string& value);
  ::std::string* PROTOBUF_NONNULL _internal_mutable_meanfile();

  public:
  // optional string det_crop_mode = 59 [default = "warp"];
  [[nodiscard]] bool has_det_crop_mode()
      const;
  void clear_det_crop_mode() ;
  [[nodiscard]] const ::std::string& det_crop_mode() const;
  template <typename Arg_ = const ::std::string&, typename... Args_>
  void set_det_crop_mode(Arg_&& arg, Args_... args);
  ::std::string* PROTOBUF_NONNULL mutable_det_crop_mode();
  [[nodiscard]] ::std::string* PROTOBUF_NULLABLE release_det_crop_mode();
  void set_allocated_det_crop_mode(::std::string* PROTOBUF_NULLABLE value);

  private:
  const ::std::string& _internal_det_crop_mode() const;
  PROTOBUF_ALWAYS_INLINE void _internal_set_det_crop_mode(const ::std::string& value);
  ::std::string* PROTOBUF_NONNULL _internal_mutable_det_crop_mode();

  public:
  // optional .caffe.FillerParameter weight_filler = 5;
  [[nodiscard]] bool has_weight_filler()
      const;
  void clear_weight_filler() ;
  [[nodiscard]] const ::caffe::FillerParameter& weight_filler() const;
  [[nodiscard]] ::caffe::FillerParameter* PROTOBUF_NULLABLE release_weight_filler();
  ::caffe::FillerParameter* PROTOBUF_NONNULL mutable_weight_filler();
  void set_allocated_weight_filler(::caffe::FillerParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_weight_filler(::caffe::FillerParameter* PROTOBUF_NULLABLE value);
  ::caffe::FillerParameter* PROTOBUF_NULLABLE unsafe_arena_release_weight_filler();

  private:
  const ::caffe::FillerParameter& _internal_weight_filler() const;
  ::caffe::FillerParameter* PROTOBUF_NONNULL _internal_mutable_weight_filler();

  public:
  // optional .caffe.FillerParameter bias_filler = 6;
  [[nodiscard]] bool has_bias_filler()
      const;
  void clear_bias_filler() ;
  [[nodiscard]] const ::caffe::FillerParameter& bias_filler() const;
  [[nodiscard]] ::caffe::FillerParameter* PROTOBUF_NULLABLE release_bias_filler();
  ::caffe::FillerParameter* PROTOBUF_NONNULL mutable_bias_filler();
  void set_allocated_bias_filler(::caffe::FillerParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_bias_filler(::caffe::FillerParameter* PROTOBUF_NULLABLE value);
  ::caffe::FillerParameter* PROTOBUF_NULLABLE unsafe_arena_release_bias_filler();

  private:
  const ::caffe::FillerParameter& _internal_bias_filler() const;
  ::caffe::FillerParameter* PROTOBUF_NONNULL _internal_mutable_bias_filler();

  public:
  // optional .caffe.HDF5OutputParameter hdf5_output_param = 1001;
  [[nodiscard]] bool has_hdf5_output_param()
      const;
  void clear_hdf5_output_param() ;
  [[nodiscard]] const ::caffe::HDF5OutputParameter& hdf5_output_param() const;
  [[nodiscard]] ::caffe::HDF5OutputParameter* PROTOBUF_NULLABLE release_hdf5_output_param();
  ::caffe::HDF5OutputParameter* PROTOBUF_NONNULL mutable_hdf5_output_param();
  void set_allocated_hdf5_output_param(::caffe::HDF5OutputParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_hdf5_output_param(::caffe::HDF5OutputParameter* PROTOBUF_NULLABLE value);
  ::caffe::HDF5OutputParameter* PROTOBUF_NULLABLE unsafe_arena_release_hdf5_output_param();

  private:
  const ::caffe::HDF5OutputParameter& _internal_hdf5_output_param() const;
  ::caffe::HDF5OutputParameter* PROTOBUF_NONNULL _internal_mutable_hdf5_output_param();

  public:
  // optional uint32 num_output = 3;
  [[nodiscard]] bool has_num_output()
      const;
  void clear_num_output() ;
  [[nodiscard]] ::uint32_t num_output() const;
  void set_num_output(::uint32_t value);

  private:
  ::uint32_t _internal_num_output() const;
  void _internal_set_num_output(::uint32_t value);

  public:
  // optional uint32 pad = 7 [default = 0];
  [[nodiscard]] bool has_pad()
      const;
  void clear_pad() ;
  [[nodiscard]] ::uint32_t pad() const;
  void set_pad(::uint32_t value);

  private:
  ::uint32_t _internal_pad() const;
  void _internal_set_pad(::uint32_t value);

  public:
  // optional uint32 kernelsize = 8;
  [[nodiscard]] bool has_kernelsize()
      const;
  void clear_kernelsize() ;
  [[nodiscard]] ::uint32_t kernelsize() const;
  void set_kernelsize(::uint32_t value);

  private:
  ::uint32_t _internal_kernelsize() const;
  void _internal_set_kernelsize(::uint32_t value);

  public:
  // optional .caffe.V0LayerParameter.PoolMethod pool = 11 [default = MAX];
  [[nodiscard]] bool has_pool()
      const;
  void clear_pool() ;
  [[nodiscard]] ::caffe::V0LayerParameter_PoolMethod pool() const;
  void set_pool(::caffe::V0LayerParameter_PoolMethod value);

  private:
  ::caffe::V0LayerParameter_PoolMethod _internal_pool() const;
  void _internal_set_pool(::caffe::V0LayerParameter_PoolMethod value);

  public:
  // optional uint32 batchsize = 19;
  [[nodiscard]] bool has_batchsize()
      const;
  void clear_batchsize() ;
  [[nodiscard]] ::uint32_t batchsize() const;
  void set_batchsize(::uint32_t value);

  private:
  ::uint32_t _internal_batchsize() const;
  void _internal_set_batchsize(::uint32_t value);

  public:
  // optional uint32 cropsize = 20 [default = 0];
  [[nodiscard]] bool has_cropsize()
      const;
  void clear_cropsize() ;
  [[nodiscard]] ::uint32_t cropsize() const;
  void set_cropsize(::uint32_t value);

  private:
  ::uint32_t _internal_cropsize() const;
  void _internal_set_cropsize(::uint32_t value);

  public:
  // optional bool mirror = 21 [default = false];
  [[nodiscard]] bool has_mirror()
      const;
  void clear_mirror() ;
  [[nodiscard]] bool mirror() const;
  void set_mirror(bool value);

  private:
  bool _internal_mirror() const;
  void _internal_set_mirror(bool value);

  public:
  // optional uint32 det_context_pad = 58 [default = 0];
  [[nodiscard]] bool has_det_context_pad()
      const;
  void clear_det_context_pad() ;
  [[nodiscard]] ::uint32_t det_context_pad() const;
  void set_det_context_pad(::uint32_t value);

  private:
  ::uint32_t _internal_det_context_pad() const;
  void _internal_set_det_context_pad(::uint32_t value);

  public:
  // optional int32 new_num = 60 [default = 0];
  [[nodiscard]] bool has_new_num()
      const;
  void clear_new_num() ;
  [[nodiscard]] ::int32_t new_num() const;
  void set_new_num(::int32_t value);

  private:
  ::int32_t _internal_new_num() const;
  void _internal_set_new_num(::int32_t value);

  public:
  // optional int32 new_channels = 61 [default = 0];
  [[nodiscard]] bool has_new_channels()
      const;
  void clear_new_channels() ;
  [[nodiscard]] ::int32_t new_channels() const;
  void set_new_channels(::int32_t value);

  private:
  ::int32_t _internal_new_channels() const;
  void _internal_set_new_channels(::int32_t value);

  public:
  // optional int32 new_height = 62 [default = 0];
  [[nodiscard]] bool has_new_height()
      const;
  void clear_new_height() ;
  [[nodiscard]] ::int32_t new_height() const;
  void set_new_height(::int32_t value);

  private:
  ::int32_t _internal_new_height() const;
  void _internal_set_new_height(::int32_t value);

  public:
  // optional int32 new_width = 63 [default = 0];
  [[nodiscard]] bool has_new_width()
      const;
  void clear_new_width() ;
  [[nodiscard]] ::int32_t new_width() const;
  void set_new_width(::int32_t value);

  private:
  ::int32_t _internal_new_width() const;
  void _internal_set_new_width(::int32_t value);

  public:
  // optional bool biasterm = 4 [default = true];
  [[nodiscard]] bool has_biasterm()
      const;
  void clear_biasterm() ;
  [[nodiscard]] bool biasterm() const;
  void set_biasterm(bool value);

  private:
  bool _internal_biasterm() const;
  void _internal_set_biasterm(bool value);

  public:
  // optional uint32 group = 9 [default = 1];
  [[nodiscard]] bool has_group()
      const;
  void clear_group() ;
  [[nodiscard]] ::uint32_t group() const;
  void set_group(::uint32_t value);

  private:
  ::uint32_t _internal_group() const;
  void _internal_set_group(::uint32_t value);

  public:
  // optional uint32 stride = 10 [default = 1];
  [[nodiscard]] bool has_stride()
      const;
  void clear_stride() ;
  [[nodiscard]] ::uint32_t stride() const;
  void set_stride(::uint32_t value);

  private:
  ::uint32_t _internal_stride() const;
  void _internal_set_stride(::uint32_t value);

  public:
  // optional float dropout_ratio = 12 [default = 0.5];
  [[nodiscard]] bool has_dropout_ratio()
      const;
  void clear_dropout_ratio() ;
  [[nodiscard]] float dropout_ratio() const;
  void set_dropout_ratio(float value);

  private:
  float _internal_dropout_ratio() const;
  void _internal_set_dropout_ratio(float value);

  public:
  // optional uint32 local_size = 13 [default = 5];
  [[nodiscard]] bool has_local_size()
      const;
  void clear_local_size() ;
  [[nodiscard]] ::uint32_t local_size() const;
  void set_local_size(::uint32_t value);

  private:
  ::uint32_t _internal_local_size() const;
  void _internal_set_local_size(::uint32_t value);

  public:
  // optional float alpha = 14 [default = 1];
  [[nodiscard]] bool has_alpha()
      const;
  void clear_alpha() ;
  [[nodiscard]] float alpha() const;
  void set_alpha(float value);

  private:
  float _internal_alpha() const;
  void _internal_set_alpha(float value);

  public:
  // optional float beta = 15 [default = 0.75];
  [[nodiscard]] bool has_beta()
      const;
  void clear_beta() ;
  [[nodiscard]] float beta() const;
  void set_beta(float value);

  private:
  float _internal_beta() const;
  void _internal_set_beta(float value);

  public:
  // optional float scale = 17 [default = 1];
  [[nodiscard]] bool has_scale()
      const;
  void clear_scale() ;
  [[nodiscard]] float scale() const;
  void set_scale(float value);

  private:
  float _internal_scale() const;
  void _internal_set_scale(float value);

  public:
  // optional float k = 22 [default = 1];
  [[nodiscard]] bool has_k()
      const;
  void clear_k() ;
  [[nodiscard]] float k() const;
  void set_k(float value);

  private:
  float _internal_k() const;
  void _internal_set_k(float value);

  public:
  // optional float det_bg_threshold = 55 [default = 0.5];
  [[nodiscard]] bool has_det_bg_threshold()
      const;
  void clear_det_bg_threshold() ;
  [[nodiscard]] float det_bg_threshold() const;
  void set_det_bg_threshold(float value);

  private:
  float _internal_det_bg_threshold() const;
  void _internal_set_det_bg_threshold(float value);

  public:
  // optional float det_fg_fraction = 56 [default = 0.25];
  [[nodiscard]] bool has_det_fg_fraction()
      const;
  void clear_det_fg_fraction() ;
  [[nodiscard]] float det_fg_fraction() const;
  void set_det_fg_fraction(float value);

  private:
  float _internal_det_fg_fraction() const;
  void _internal_set_det_fg_fraction(float value);

  public:
  // repeated .caffe.BlobProto blobs = 50;
  [[nodiscard]] int blobs_size()
      const;
  private:
  int _internal_blobs_size() const;

  public:
  void clear_blobs() ;
  [[nodiscard]] const ::caffe::BlobProto& blobs(int index) const;
  [[nodiscard]] ::caffe::BlobProto* PROTOBUF_NONNULL mutable_blobs(int index);
  ::caffe::BlobProto* PROTOBUF_NONNULL add_blobs();
  [[nodiscard]] const ::google::protobuf::RepeatedPtrField<::caffe::BlobProto>&
  blobs() const;
  [[nodiscard]] ::google::protobuf::RepeatedPtrField<::caffe::BlobProto>* PROTOBUF_NONNULL
  mutable_blobs();

  private:
  const ::google::protobuf::RepeatedPtrField<::caffe::BlobProto>& _internal_blobs() const;
  ::google::protobuf::RepeatedPtrField<::caffe::BlobProto>* PROTOBUF_NONNULL _internal_mutable_blobs();

  public:
  // repeated float blobs_lr = 51;
  [[nodiscard]] int blobs_lr_size()
      const;
  private:
  int _internal_blobs_lr_size() const;

  public:
  void clear_blobs_lr() ;
  [[nodiscard]] float blobs_lr(int index) const;
  void set_blobs_lr(int index, float value);
  void add_blobs_lr(float value);
  [[nodiscard]] const ::google::protobuf::RepeatedField<float>& blobs_lr()
      const;
  ::google::protobuf::RepeatedField<float>* PROTOBUF_NONNULL mutable_blobs_lr();

  private:
  const ::google::protobuf::RepeatedField<float>& _internal_blobs_lr() const;
  ::google::protobuf::RepeatedField<float>* PROTOBUF_NONNULL _internal_mutable_blobs_lr();

  public:
  // repeated float weight_decay = 52;
  [[nodiscard]] int weight_decay_size()
      const;
  private:
  int _internal_weight_decay_size() const;

  public:
  void clear_weight_decay() ;
  [[nodiscard]] float weight_decay(int index) const;
  void set_weight_decay(int index, float value);
  void add_weight_decay(float value);
  [[nodiscard]] const ::google::protobuf::RepeatedField<float>& weight_decay()
      const;
  ::google::protobuf::RepeatedField<float>* PROTOBUF_NONNULL mutable_weight_decay();

  private:
  const ::google::protobuf::RepeatedField<float>& _internal_weight_decay() const;
  ::google::protobuf::RepeatedField<float>* PROTOBUF_NONNULL _internal_mutable_weight_decay();

  public:
  // optional uint32 rand_skip = 53 [default = 0];
  [[nodiscard]] bool has_rand_skip()
      const;
  void clear_rand_skip() ;
  [[nodiscard]] ::uint32_t rand_skip() const;
  void set_rand_skip(::uint32_t value);

  private:
  ::uint32_t _internal_rand_skip() const;
  void _internal_set_rand_skip(::uint32_t value);

  public:
  // optional bool shuffle_images = 64 [default = false];
  [[nodiscard]] bool has_shuffle_images()
      const;
  void clear_shuffle_images() ;
  [[nodiscard]] bool shuffle_images() const;
  void set_shuffle_images(bool value);

  private:
  bool _internal_shuffle_images() const;
  void _internal_set_shuffle_images(bool value);

  public:
  // optional float det_fg_threshold = 54 [default = 0.5];
  [[nodiscard]] bool has_det_fg_threshold()
      const;
  void clear_det_fg_threshold() ;
  [[nodiscard]] float det_fg_threshold() const;
  void set_det_fg_threshold(float value);

  private:
  float _internal_det_fg_threshold() const;
  void _internal_set_det_fg_threshold(float value);

  public:
  // optional uint32 concat_dim = 65 [default = 1];
  [[nodiscard]] bool has_concat_dim()
      const;
  void clear_concat_dim() ;
  [[nodiscard]] ::uint32_t concat_dim() const;
  void set_concat_dim(::uint32_t value);

  private:
  ::uint32_t _internal_concat_dim() const;
  void _internal_set_concat_dim(::uint32_t value);

  public:
  // @@protoc_insertion_point(class_scope:caffe.V0LayerParameter)
 private:
  class _Internal;
  using ParseTableT_ =
      ::google::protobuf::internal::TcParseTable<5, 38,
                          5, 0,
                          12>;
  static constexpr ParseTableT_ InternalGenerateParseTable_(
      const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL class_data);
  friend class ::google::protobuf::internal::TcParser;
  #ifndef PROTOBUF_MESSAGE_GLOBALS
  static const ParseTableT_ _table_;
  #endif

  friend class ::google::protobuf::MessageLite;
  friend class ::google::protobuf::Arena;
  friend ::google::protobuf::internal::PrivateAccess;
  template <typename T>
  friend class ::google::protobuf::Arena::InternalHelper;
  using InternalArenaConstructable_ = void;
  using DestructorSkippable_ = void;
  struct Impl_ {
    inline explicit constexpr Impl_(::google::protobuf::internal::InternalVisibility visibility,
                                    ::google::protobuf::internal::ConstantInitialized) noexcept;
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const Impl_& from,
        const V0LayerParameter& from_msg);
    ::google::protobuf::internal::HasBits<2> _has_bits_;
    ::google::protobuf::internal::CachedSize _cached_size_;
    ::google::protobuf::internal::ArenaStringPtr name_;
    ::google::protobuf::internal::ArenaStringPtr type_;
    ::google::protobuf::internal::ArenaStringPtr source_;
    ::google::protobuf::internal::ArenaStringPtr meanfile_;
    static const ::google::protobuf::internal::LazyString _i_give_permission_to_break_this_code_default_det_crop_mode_;
    ::google::protobuf::internal::ArenaStringPtr det_crop_mode_;
    ::caffe::FillerParameter* PROTOBUF_NULLABLE weight_filler_;
    ::caffe::FillerParameter* PROTOBUF_NULLABLE bias_filler_;
    ::caffe::HDF5OutputParameter* PROTOBUF_NULLABLE hdf5_output_param_;
    ::uint32_t num_output_;
    ::uint32_t pad_;
    ::uint32_t kernelsize_;
    int pool_;
    ::uint32_t batchsize_;
    ::uint32_t cropsize_;
    bool mirror_;
    ::uint32_t det_context_pad_;
    ::int32_t new_num_;
    ::int32_t new_channels_;
    ::int32_t new_height_;
    ::int32_t new_width_;
    bool biasterm_;
    ::uint32_t group_;
    ::uint32_t stride_;
    float dropout_ratio_;
    ::uint32_t local_size_;
    float alpha_;
    float beta_;
    float scale_;
    float k_;
    float det_bg_threshold_;
    float det_fg_fraction_;
    ::google::protobuf::RepeatedPtrField< ::caffe::BlobProto > blobs_;
    ::google::protobuf::RepeatedField<float> blobs_lr_;
    ::google::protobuf::RepeatedField<float> weight_decay_;
    ::uint32_t rand_skip_;
    bool shuffle_images_;
    float det_fg_threshold_;
    ::uint32_t concat_dim_;
    PROTOBUF_TSAN_DECLARE_MEMBER
  };
  union { Impl_ _impl_; };
  friend struct ::TableStruct_caffe_2eproto;
};
// -------------------------------------------------------------------

class  PROTOBUF_FUTURE_ADD_EARLY_WARN_UNUSED SolverState final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:caffe.SolverState) */ {
 public:
  inline SolverState() : SolverState(nullptr) {}
  ~SolverState() PROTOBUF_FINAL;

#if defined(PROTOBUF_CUSTOM_VTABLE)
  void operator delete(SolverState* PROTOBUF_NONNULL msg, ::std::destroying_delete_t) {
    SharedDtor(*msg);
    ::google::protobuf::internal::SizedDelete(msg, sizeof(SolverState));
  }
#endif

  template <typename = void>
  explicit constexpr SolverState(::google::protobuf::internal::ConstantInitialized,
                           const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL
                               class_data);

  inline SolverState(const SolverState& from) : SolverState(nullptr, from) {}
  inline SolverState(SolverState&& from) noexcept : SolverState(nullptr, ::std::move(from)) {}
  inline SolverState& operator=(const SolverState& from) {
    CopyFrom(from);
    return *this;
  }
  inline SolverState& operator=(SolverState&& from) noexcept {
    if (this == &from) return *this;
    if (::google::protobuf::internal::CanMoveWithInternalSwap(GetArena(), from.GetArena())) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  [[nodiscard]] inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  [[nodiscard]] inline ::google::protobuf::UnknownFieldSet* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL descriptor() {
    return GetDescriptor();
  }
  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL
  GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  [[nodiscard]] static const ::google::protobuf::Reflection* PROTOBUF_NONNULL GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  [[nodiscard]] static const SolverState& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<SolverState>(&SolverState_globals_);
  }
  static constexpr int kIndexInFileMessages = 7;
  friend void swap(SolverState& a, SolverState& b) { a.Swap(&b); }
  inline void Swap(SolverState* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(SolverState* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  [[nodiscard]] SolverState* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::Message::DefaultConstruct<SolverState>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const SolverState& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const SolverState& from) { SolverState::MergeImpl(*this, from); }

  private:
  static void MergeImpl(::google::protobuf::MessageLite& to_msg,
                        const ::google::protobuf::MessageLite& from_msg);

  public:
  [[nodiscard]] bool IsInitialized() const {
    return true;
  }
  ABSL_ATTRIBUTE_REINITIALIZES void Clear() PROTOBUF_FINAL;
  #if defined(PROTOBUF_CUSTOM_VTABLE)
  private:
  [[nodiscard]] static ::size_t ByteSizeLong(const ::google::protobuf::MessageLite& msg);
  [[nodiscard]] static ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      const ::google::protobuf::MessageLite& msg, ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream);

  public:
  [[nodiscard]] ::size_t ByteSizeLong() const { return ByteSizeLong(*this); }
  [[nodiscard]] ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const {
    return _InternalSerialize(*this, target, stream);
  }
  #else   // PROTOBUF_CUSTOM_VTABLE
  [[nodiscard]] ::size_t ByteSizeLong() const final;
  [[nodiscard]] ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const final;
  #endif  // PROTOBUF_CUSTOM_VTABLE
  [[nodiscard]] int GetCachedSize() const {
    return _impl_._cached_size_.Get();
  }

  private:
  void SharedCtor(::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  static void SharedDtor(MessageLite& self);
  void InternalSwap(SolverState* PROTOBUF_NONNULL other);
 private:
  template <typename T>
  friend ::absl::string_view(::google::protobuf::internal::GetAnyMessageName)();
  static ::absl::string_view FullMessageName() { return "caffe.SolverState"; }

  explicit SolverState(::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  SolverState(::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const SolverState& from);
  SolverState(
      ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, SolverState&& from) noexcept
      : SolverState(arena) {
    *this = ::std::move(from);
  }
  const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL GetClassData() const PROTOBUF_FINAL;
  static void* PROTOBUF_NONNULL PlacementNew_(
      const void* PROTOBUF_NONNULL, void* PROTOBUF_NONNULL mem,
      ::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  static constexpr auto InternalNewImpl_();

 public:
  static constexpr auto InternalGenerateClassData_(
      const MessageLite& prototype,
      const ::google::protobuf::internal::TcParseTableBase* PROTOBUF_NULLABLE tc_table = nullptr);

  [[nodiscard]] ::google::protobuf::Metadata GetMetadata() const;
  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------
  enum : int {
    kHistoryFieldNumber = 3,
    kLearnedNetFieldNumber = 2,
    kIterFieldNumber = 1,
    kCurrentStepFieldNumber = 4,
  };
  // repeated .caffe.BlobProto history = 3;
  [[nodiscard]] int history_size()
      const;
  private:
  int _internal_history_size() const;

  public:
  void clear_history() ;
  [[nodiscard]] const ::caffe::BlobProto& history(int index) const;
  [[nodiscard]] ::caffe::BlobProto* PROTOBUF_NONNULL mutable_history(int index);
  ::caffe::BlobProto* PROTOBUF_NONNULL add_history();
  [[nodiscard]] const ::google::protobuf::RepeatedPtrField<::caffe::BlobProto>&
  history() const;
  [[nodiscard]] ::google::protobuf::RepeatedPtrField<::caffe::BlobProto>* PROTOBUF_NONNULL
  mutable_history();

  private:
  const ::google::protobuf::RepeatedPtrField<::caffe::BlobProto>& _internal_history() const;
  ::google::protobuf::RepeatedPtrField<::caffe::BlobProto>* PROTOBUF_NONNULL _internal_mutable_history();

  public:
  // optional string learned_net = 2;
  [[nodiscard]] bool has_learned_net()
      const;
  void clear_learned_net() ;
  [[nodiscard]] const ::std::string& learned_net() const;
  template <typename Arg_ = const ::std::string&, typename... Args_>
  void set_learned_net(Arg_&& arg, Args_... args);
  ::std::string* PROTOBUF_NONNULL mutable_learned_net();
  [[nodiscard]] ::std::string* PROTOBUF_NULLABLE release_learned_net();
  void set_allocated_learned_net(::std::string* PROTOBUF_NULLABLE value);

  private:
  const ::std::string& _internal_learned_net() const;
  PROTOBUF_ALWAYS_INLINE void _internal_set_learned_net(const ::std::string& value);
  ::std::string* PROTOBUF_NONNULL _internal_mutable_learned_net();

  public:
  // optional int32 iter = 1;
  [[nodiscard]] bool has_iter()
      const;
  void clear_iter() ;
  [[nodiscard]] ::int32_t iter() const;
  void set_iter(::int32_t value);

  private:
  ::int32_t _internal_iter() const;
  void _internal_set_iter(::int32_t value);

  public:
  // optional int32 current_step = 4 [default = 0];
  [[nodiscard]] bool has_current_step()
      const;
  void clear_current_step() ;
  [[nodiscard]] ::int32_t current_step() const;
  void set_current_step(::int32_t value);

  private:
  ::int32_t _internal_current_step() const;
  void _internal_set_current_step(::int32_t value);

  public:
  // @@protoc_insertion_point(class_scope:caffe.SolverState)
 private:
  class _Internal;
  using ParseTableT_ =
      ::google::protobuf::internal::TcParseTable<2, 4,
                          1, 0,
                          2>;
  static constexpr ParseTableT_ InternalGenerateParseTable_(
      const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL class_data);
  friend class ::google::protobuf::internal::TcParser;
  #ifndef PROTOBUF_MESSAGE_GLOBALS
  static const ParseTableT_ _table_;
  #endif

  friend class ::google::protobuf::MessageLite;
  friend class ::google::protobuf::Arena;
  friend ::google::protobuf::internal::PrivateAccess;
  template <typename T>
  friend class ::google::protobuf::Arena::InternalHelper;
  using InternalArenaConstructable_ = void;
  using DestructorSkippable_ = void;
  struct Impl_ {
    inline explicit constexpr Impl_(::google::protobuf::internal::InternalVisibility visibility,
                                    ::google::protobuf::internal::ConstantInitialized) noexcept;
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const Impl_& from,
        const SolverState& from_msg);
    ::google::protobuf::internal::HasBits<1> _has_bits_;
    ::google::protobuf::internal::CachedSize _cached_size_;
    ::google::protobuf::RepeatedPtrField< ::caffe::BlobProto > history_;
    ::google::protobuf::internal::ArenaStringPtr learned_net_;
    ::int32_t iter_;
    ::int32_t current_step_;
    PROTOBUF_TSAN_DECLARE_MEMBER
  };
  union { Impl_ _impl_; };
  friend struct ::TableStruct_caffe_2eproto;
};
// -------------------------------------------------------------------

class  PROTOBUF_FUTURE_ADD_EARLY_WARN_UNUSED DetectionOutputParameter final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:caffe.DetectionOutputParameter) */ {
 public:
  inline DetectionOutputParameter() : DetectionOutputParameter(nullptr) {}
  ~DetectionOutputParameter() PROTOBUF_FINAL;

#if defined(PROTOBUF_CUSTOM_VTABLE)
  void operator delete(DetectionOutputParameter* PROTOBUF_NONNULL msg, ::std::destroying_delete_t) {
    SharedDtor(*msg);
    ::google::protobuf::internal::SizedDelete(msg, sizeof(DetectionOutputParameter));
  }
#endif

  template <typename = void>
  explicit constexpr DetectionOutputParameter(::google::protobuf::internal::ConstantInitialized,
                           const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL
                               class_data);

  inline DetectionOutputParameter(const DetectionOutputParameter& from) : DetectionOutputParameter(nullptr, from) {}
  inline DetectionOutputParameter(DetectionOutputParameter&& from) noexcept : DetectionOutputParameter(nullptr, ::std::move(from)) {}
  inline DetectionOutputParameter& operator=(const DetectionOutputParameter& from) {
    CopyFrom(from);
    return *this;
  }
  inline DetectionOutputParameter& operator=(DetectionOutputParameter&& from) noexcept {
    if (this == &from) return *this;
    if (::google::protobuf::internal::CanMoveWithInternalSwap(GetArena(), from.GetArena())) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  [[nodiscard]] inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  [[nodiscard]] inline ::google::protobuf::UnknownFieldSet* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL descriptor() {
    return GetDescriptor();
  }
  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL
  GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  [[nodiscard]] static const ::google::protobuf::Reflection* PROTOBUF_NONNULL GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  [[nodiscard]] static const DetectionOutputParameter& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<DetectionOutputParameter>(&DetectionOutputParameter_globals_);
  }
  static constexpr int kIndexInFileMessages = 27;
  friend void swap(DetectionOutputParameter& a, DetectionOutputParameter& b) { a.Swap(&b); }
  inline void Swap(DetectionOutputParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(DetectionOutputParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  [[nodiscard]] DetectionOutputParameter* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::Message::DefaultConstruct<DetectionOutputParameter>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const DetectionOutputParameter& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const DetectionOutputParameter& from) { DetectionOutputParameter::MergeImpl(*this, from); }

  private:
  static void MergeImpl(::google::protobuf::MessageLite& to_msg,
                        const ::google::protobuf::MessageLite& from_msg);

  public:
  [[nodiscard]] bool IsInitialized() const {
    return true;
  }
  ABSL_ATTRIBUTE_REINITIALIZES void Clear() PROTOBUF_FINAL;
  #if defined(PROTOBUF_CUSTOM_VTABLE)
  private:
  [[nodiscard]] static ::size_t ByteSizeLong(const ::google::protobuf::MessageLite& msg);
  [[nodiscard]] static ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      const ::google::protobuf::MessageLite& msg, ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream);

  public:
  [[nodiscard]] ::size_t ByteSizeLong() const { return ByteSizeLong(*this); }
  [[nodiscard]] ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const {
    return _InternalSerialize(*this, target, stream);
  }
  #else   // PROTOBUF_CUSTOM_VTABLE
  [[nodiscard]] ::size_t ByteSizeLong() const final;
  [[nodiscard]] ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const final;
  #endif  // PROTOBUF_CUSTOM_VTABLE
  [[nodiscard]] int GetCachedSize() const {
    return _impl_._cached_size_.Get();
  }

  private:
  void SharedCtor(::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  static void SharedDtor(MessageLite& self);
  void InternalSwap(DetectionOutputParameter* PROTOBUF_NONNULL other);
 private:
  template <typename T>
  friend ::absl::string_view(::google::protobuf::internal::GetAnyMessageName)();
  static ::absl::string_view FullMessageName() { return "caffe.DetectionOutputParameter"; }

  explicit DetectionOutputParameter(::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  DetectionOutputParameter(::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const DetectionOutputParameter& from);
  DetectionOutputParameter(
      ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, DetectionOutputParameter&& from) noexcept
      : DetectionOutputParameter(arena) {
    *this = ::std::move(from);
  }
  const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL GetClassData() const PROTOBUF_FINAL;
  static void* PROTOBUF_NONNULL PlacementNew_(
      const void* PROTOBUF_NONNULL, void* PROTOBUF_NONNULL mem,
      ::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  static constexpr auto InternalNewImpl_();

 public:
  static constexpr auto InternalGenerateClassData_(
      const MessageLite& prototype,
      const ::google::protobuf::internal::TcParseTableBase* PROTOBUF_NULLABLE tc_table = nullptr);

  [[nodiscard]] ::google::protobuf::Metadata GetMetadata() const;
  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------
  enum : int {
    kSaveFileFieldNumber = 12,
    kNmsParamFieldNumber = 4,
    kSaveOutputParamFieldNumber = 5,
    kNumClassesFieldNumber = 1,
    kBackgroundLabelIdFieldNumber = 3,
    kConfidenceThresholdFieldNumber = 9,
    kVarianceEncodedInTargetFieldNumber = 8,
    kVisualizeFieldNumber = 10,
    kVisualizeThresholdFieldNumber = 11,
    kKeepTopKFieldNumber = 7,
    kShareLocationFieldNumber = 2,
    kCodeTypeFieldNumber = 6,
  };
  // optional string save_file = 12;
  [[nodiscard]] bool has_save_file()
      const;
  void clear_save_file() ;
  [[nodiscard]] const ::std::string& save_file() const;
  template <typename Arg_ = const ::std::string&, typename... Args_>
  void set_save_file(Arg_&& arg, Args_... args);
  ::std::string* PROTOBUF_NONNULL mutable_save_file();
  [[nodiscard]] ::std::string* PROTOBUF_NULLABLE release_save_file();
  void set_allocated_save_file(::std::string* PROTOBUF_NULLABLE value);

  private:
  const ::std::string& _internal_save_file() const;
  PROTOBUF_ALWAYS_INLINE void _internal_set_save_file(const ::std::string& value);
  ::std::string* PROTOBUF_NONNULL _internal_mutable_save_file();

  public:
  // optional .caffe.NonMaximumSuppressionParameter nms_param = 4;
  [[nodiscard]] bool has_nms_param()
      const;
  void clear_nms_param() ;
  [[nodiscard]] const ::caffe::NonMaximumSuppressionParameter& nms_param() const;
  [[nodiscard]] ::caffe::NonMaximumSuppressionParameter* PROTOBUF_NULLABLE release_nms_param();
  ::caffe::NonMaximumSuppressionParameter* PROTOBUF_NONNULL mutable_nms_param();
  void set_allocated_nms_param(::caffe::NonMaximumSuppressionParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_nms_param(::caffe::NonMaximumSuppressionParameter* PROTOBUF_NULLABLE value);
  ::caffe::NonMaximumSuppressionParameter* PROTOBUF_NULLABLE unsafe_arena_release_nms_param();

  private:
  const ::caffe::NonMaximumSuppressionParameter& _internal_nms_param() const;
  ::caffe::NonMaximumSuppressionParameter* PROTOBUF_NONNULL _internal_mutable_nms_param();

  public:
  // optional .caffe.SaveOutputParameter save_output_param = 5;
  [[nodiscard]] bool has_save_output_param()
      const;
  void clear_save_output_param() ;
  [[nodiscard]] const ::caffe::SaveOutputParameter& save_output_param() const;
  [[nodiscard]] ::caffe::SaveOutputParameter* PROTOBUF_NULLABLE release_save_output_param();
  ::caffe::SaveOutputParameter* PROTOBUF_NONNULL mutable_save_output_param();
  void set_allocated_save_output_param(::caffe::SaveOutputParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_save_output_param(::caffe::SaveOutputParameter* PROTOBUF_NULLABLE value);
  ::caffe::SaveOutputParameter* PROTOBUF_NULLABLE unsafe_arena_release_save_output_param();

  private:
  const ::caffe::SaveOutputParameter& _internal_save_output_param() const;
  ::caffe::SaveOutputParameter* PROTOBUF_NONNULL _internal_mutable_save_output_param();

  public:
  // optional uint32 num_classes = 1;
  [[nodiscard]] bool has_num_classes()
      const;
  void clear_num_classes() ;
  [[nodiscard]] ::uint32_t num_classes() const;
  void set_num_classes(::uint32_t value);

  private:
  ::uint32_t _internal_num_classes() const;
  void _internal_set_num_classes(::uint32_t value);

  public:
  // optional int32 background_label_id = 3 [default = 0];
  [[nodiscard]] bool has_background_label_id()
      const;
  void clear_background_label_id() ;
  [[nodiscard]] ::int32_t background_label_id() const;
  void set_background_label_id(::int32_t value);

  private:
  ::int32_t _internal_background_label_id() const;
  void _internal_set_background_label_id(::int32_t value);

  public:
  // optional float confidence_threshold = 9;
  [[nodiscard]] bool has_confidence_threshold()
      const;
  void clear_confidence_threshold() ;
  [[nodiscard]] float confidence_threshold() const;
  void set_confidence_threshold(float value);

  private:
  float _internal_confidence_threshold() const;
  void _internal_set_confidence_threshold(float value);

  public:
  // optional bool variance_encoded_in_target = 8 [default = false];
  [[nodiscard]] bool has_variance_encoded_in_target()
      const;
  void clear_variance_encoded_in_target() ;
  [[nodiscard]] bool variance_encoded_in_target() const;
  void set_variance_encoded_in_target(bool value);

  private:
  bool _internal_variance_encoded_in_target() const;
  void _internal_set_variance_encoded_in_target(bool value);

  public:
  // optional bool visualize = 10 [default = false];
  [[nodiscard]] bool has_visualize()
      const;
  void clear_visualize() ;
  [[nodiscard]] bool visualize() const;
  void set_visualize(bool value);

  private:
  bool _internal_visualize() const;
  void _internal_set_visualize(bool value);

  public:
  // optional float visualize_threshold = 11;
  [[nodiscard]] bool has_visualize_threshold()
      const;
  void clear_visualize_threshold() ;
  [[nodiscard]] float visualize_threshold() const;
  void set_visualize_threshold(float value);

  private:
  float _internal_visualize_threshold() const;
  void _internal_set_visualize_threshold(float value);

  public:
  // optional int32 keep_top_k = 7 [default = -1];
  [[nodiscard]] bool has_keep_top_k()
      const;
  void clear_keep_top_k() ;
  [[nodiscard]] ::int32_t keep_top_k() const;
  void set_keep_top_k(::int32_t value);

  private:
  ::int32_t _internal_keep_top_k() const;
  void _internal_set_keep_top_k(::int32_t value);

  public:
  // optional bool share_location = 2 [default = true];
  [[nodiscard]] bool has_share_location()
      const;
  void clear_share_location() ;
  [[nodiscard]] bool share_location() const;
  void set_share_location(bool value);

  private:
  bool _internal_share_location() const;
  void _internal_set_share_location(bool value);

  public:
  // optional .caffe.PriorBoxParameter.CodeType code_type = 6 [default = CORNER];
  [[nodiscard]] bool has_code_type()
      const;
  void clear_code_type() ;
  [[nodiscard]] ::caffe::PriorBoxParameter_CodeType code_type() const;
  void set_code_type(::caffe::PriorBoxParameter_CodeType value);

  private:
  ::caffe::PriorBoxParameter_CodeType _internal_code_type() const;
  void _internal_set_code_type(::caffe::PriorBoxParameter_CodeType value);

  public:
  // @@protoc_insertion_point(class_scope:caffe.DetectionOutputParameter)
 private:
  class _Internal;
  using ParseTableT_ =
      ::google::protobuf::internal::TcParseTable<4, 12,
                          3, 0,
                          2>;
  static constexpr ParseTableT_ InternalGenerateParseTable_(
      const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL class_data);
  friend class ::google::protobuf::internal::TcParser;
  #ifndef PROTOBUF_MESSAGE_GLOBALS
  static const ParseTableT_ _table_;
  #endif

  friend class ::google::protobuf::MessageLite;
  friend class ::google::protobuf::Arena;
  friend ::google::protobuf::internal::PrivateAccess;
  template <typename T>
  friend class ::google::protobuf::Arena::InternalHelper;
  using InternalArenaConstructable_ = void;
  using DestructorSkippable_ = void;
  struct Impl_ {
    inline explicit constexpr Impl_(::google::protobuf::internal::InternalVisibility visibility,
                                    ::google::protobuf::internal::ConstantInitialized) noexcept;
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const Impl_& from,
        const DetectionOutputParameter& from_msg);
    ::google::protobuf::internal::HasBits<1> _has_bits_;
    ::google::protobuf::internal::CachedSize _cached_size_;
    ::google::protobuf::internal::ArenaStringPtr save_file_;
    ::caffe::NonMaximumSuppressionParameter* PROTOBUF_NULLABLE nms_param_;
    ::caffe::SaveOutputParameter* PROTOBUF_NULLABLE save_output_param_;
    ::uint32_t num_classes_;
    ::int32_t background_label_id_;
    float confidence_threshold_;
    bool variance_encoded_in_target_;
    bool visualize_;
    float visualize_threshold_;
    ::int32_t keep_top_k_;
    bool share_location_;
    int code_type_;
    PROTOBUF_TSAN_DECLARE_MEMBER
  };
  union { Impl_ _impl_; };
  friend struct ::TableStruct_caffe_2eproto;
};
// -------------------------------------------------------------------

class  PROTOBUF_FUTURE_ADD_EARLY_WARN_UNUSED BlobProtoVector final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:caffe.BlobProtoVector) */ {
 public:
  inline BlobProtoVector() : BlobProtoVector(nullptr) {}
  ~BlobProtoVector() PROTOBUF_FINAL;

#if defined(PROTOBUF_CUSTOM_VTABLE)
  void operator delete(BlobProtoVector* PROTOBUF_NONNULL msg, ::std::destroying_delete_t) {
    SharedDtor(*msg);
    ::google::protobuf::internal::SizedDelete(msg, sizeof(BlobProtoVector));
  }
#endif

  template <typename = void>
  explicit constexpr BlobProtoVector(::google::protobuf::internal::ConstantInitialized,
                           const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL
                               class_data);

  inline BlobProtoVector(const BlobProtoVector& from) : BlobProtoVector(nullptr, from) {}
  inline BlobProtoVector(BlobProtoVector&& from) noexcept : BlobProtoVector(nullptr, ::std::move(from)) {}
  inline BlobProtoVector& operator=(const BlobProtoVector& from) {
    CopyFrom(from);
    return *this;
  }
  inline BlobProtoVector& operator=(BlobProtoVector&& from) noexcept {
    if (this == &from) return *this;
    if (::google::protobuf::internal::CanMoveWithInternalSwap(GetArena(), from.GetArena())) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  [[nodiscard]] inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  [[nodiscard]] inline ::google::protobuf::UnknownFieldSet* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL descriptor() {
    return GetDescriptor();
  }
  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL
  GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  [[nodiscard]] static const ::google::protobuf::Reflection* PROTOBUF_NONNULL GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  [[nodiscard]] static const BlobProtoVector& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<BlobProtoVector>(&BlobProtoVector_globals_);
  }
  static constexpr int kIndexInFileMessages = 2;
  friend void swap(BlobProtoVector& a, BlobProtoVector& b) { a.Swap(&b); }
  inline void Swap(BlobProtoVector* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(BlobProtoVector* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  [[nodiscard]] BlobProtoVector* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::Message::DefaultConstruct<BlobProtoVector>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const BlobProtoVector& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const BlobProtoVector& from) { BlobProtoVector::MergeImpl(*this, from); }

  private:
  static void MergeImpl(::google::protobuf::MessageLite& to_msg,
                        const ::google::protobuf::MessageLite& from_msg);

  public:
  [[nodiscard]] bool IsInitialized() const {
    return true;
  }
  ABSL_ATTRIBUTE_REINITIALIZES void Clear() PROTOBUF_FINAL;
  #if defined(PROTOBUF_CUSTOM_VTABLE)
  private:
  [[nodiscard]] static ::size_t ByteSizeLong(const ::google::protobuf::MessageLite& msg);
  [[nodiscard]] static ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      const ::google::protobuf::MessageLite& msg, ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream);

  public:
  [[nodiscard]] ::size_t ByteSizeLong() const { return ByteSizeLong(*this); }
  [[nodiscard]] ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const {
    return _InternalSerialize(*this, target, stream);
  }
  #else   // PROTOBUF_CUSTOM_VTABLE
  [[nodiscard]] ::size_t ByteSizeLong() const final;
  [[nodiscard]] ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const final;
  #endif  // PROTOBUF_CUSTOM_VTABLE
  [[nodiscard]] int GetCachedSize() const {
    return _impl_._cached_size_.Get();
  }

  private:
  void SharedCtor(::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  static void SharedDtor(MessageLite& self);
  void InternalSwap(BlobProtoVector* PROTOBUF_NONNULL other);
 private:
  template <typename T>
  friend ::absl::string_view(::google::protobuf::internal::GetAnyMessageName)();
  static ::absl::string_view FullMessageName() { return "caffe.BlobProtoVector"; }

  explicit BlobProtoVector(::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  BlobProtoVector(::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const BlobProtoVector& from);
  BlobProtoVector(
      ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, BlobProtoVector&& from) noexcept
      : BlobProtoVector(arena) {
    *this = ::std::move(from);
  }
  const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL GetClassData() const PROTOBUF_FINAL;
  static void* PROTOBUF_NONNULL PlacementNew_(
      const void* PROTOBUF_NONNULL, void* PROTOBUF_NONNULL mem,
      ::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  static constexpr auto InternalNewImpl_();

 public:
  static constexpr auto InternalGenerateClassData_(
      const MessageLite& prototype,
      const ::google::protobuf::internal::TcParseTableBase* PROTOBUF_NULLABLE tc_table = nullptr);

  [[nodiscard]] ::google::protobuf::Metadata GetMetadata() const;
  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------
  enum : int {
    kBlobsFieldNumber = 1,
  };
  // repeated .caffe.BlobProto blobs = 1;
  [[nodiscard]] int blobs_size()
      const;
  private:
  int _internal_blobs_size() const;

  public:
  void clear_blobs() ;
  [[nodiscard]] const ::caffe::BlobProto& blobs(int index) const;
  [[nodiscard]] ::caffe::BlobProto* PROTOBUF_NONNULL mutable_blobs(int index);
  ::caffe::BlobProto* PROTOBUF_NONNULL add_blobs();
  [[nodiscard]] const ::google::protobuf::RepeatedPtrField<::caffe::BlobProto>&
  blobs() const;
  [[nodiscard]] ::google::protobuf::RepeatedPtrField<::caffe::BlobProto>* PROTOBUF_NONNULL
  mutable_blobs();

  private:
  const ::google::protobuf::RepeatedPtrField<::caffe::BlobProto>& _internal_blobs() const;
  ::google::protobuf::RepeatedPtrField<::caffe::BlobProto>* PROTOBUF_NONNULL _internal_mutable_blobs();

  public:
  // @@protoc_insertion_point(class_scope:caffe.BlobProtoVector)
 private:
  class _Internal;
  using ParseTableT_ =
      ::google::protobuf::internal::TcParseTable<0, 1,
                          1, 0,
                          2>;
  static constexpr ParseTableT_ InternalGenerateParseTable_(
      const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL class_data);
  friend class ::google::protobuf::internal::TcParser;
  #ifndef PROTOBUF_MESSAGE_GLOBALS
  static const ParseTableT_ _table_;
  #endif

  friend class ::google::protobuf::MessageLite;
  friend class ::google::protobuf::Arena;
  friend ::google::protobuf::internal::PrivateAccess;
  template <typename T>
  friend class ::google::protobuf::Arena::InternalHelper;
  using InternalArenaConstructable_ = void;
  using DestructorSkippable_ = void;
  struct Impl_ {
    inline explicit constexpr Impl_(::google::protobuf::internal::InternalVisibility visibility,
                                    ::google::protobuf::internal::ConstantInitialized) noexcept;
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const Impl_& from,
        const BlobProtoVector& from_msg);
    ::google::protobuf::internal::HasBits<1> _has_bits_;
    ::google::protobuf::internal::CachedSize _cached_size_;
    ::google::protobuf::RepeatedPtrField< ::caffe::BlobProto > blobs_;
    PROTOBUF_TSAN_DECLARE_MEMBER
  };
  union { Impl_ _impl_; };
  friend struct ::TableStruct_caffe_2eproto;
};
// -------------------------------------------------------------------

class  PROTOBUF_FUTURE_ADD_EARLY_WARN_UNUSED V1LayerParameter final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:caffe.V1LayerParameter) */ {
 public:
  inline V1LayerParameter() : V1LayerParameter(nullptr) {}
  ~V1LayerParameter() PROTOBUF_FINAL;

#if defined(PROTOBUF_CUSTOM_VTABLE)
  void operator delete(V1LayerParameter* PROTOBUF_NONNULL msg, ::std::destroying_delete_t) {
    SharedDtor(*msg);
    ::google::protobuf::internal::SizedDelete(msg, sizeof(V1LayerParameter));
  }
#endif

  template <typename = void>
  explicit constexpr V1LayerParameter(::google::protobuf::internal::ConstantInitialized,
                           const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL
                               class_data);

  inline V1LayerParameter(const V1LayerParameter& from) : V1LayerParameter(nullptr, from) {}
  inline V1LayerParameter(V1LayerParameter&& from) noexcept : V1LayerParameter(nullptr, ::std::move(from)) {}
  inline V1LayerParameter& operator=(const V1LayerParameter& from) {
    CopyFrom(from);
    return *this;
  }
  inline V1LayerParameter& operator=(V1LayerParameter&& from) noexcept {
    if (this == &from) return *this;
    if (::google::protobuf::internal::CanMoveWithInternalSwap(GetArena(), from.GetArena())) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  [[nodiscard]] inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  [[nodiscard]] inline ::google::protobuf::UnknownFieldSet* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL descriptor() {
    return GetDescriptor();
  }
  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL
  GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  [[nodiscard]] static const ::google::protobuf::Reflection* PROTOBUF_NONNULL GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  [[nodiscard]] static const V1LayerParameter& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<V1LayerParameter>(&V1LayerParameter_globals_);
  }
  static constexpr int kIndexInFileMessages = 74;
  friend void swap(V1LayerParameter& a, V1LayerParameter& b) { a.Swap(&b); }
  inline void Swap(V1LayerParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(V1LayerParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  [[nodiscard]] V1LayerParameter* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::Message::DefaultConstruct<V1LayerParameter>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const V1LayerParameter& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const V1LayerParameter& from) { V1LayerParameter::MergeImpl(*this, from); }

  private:
  static void MergeImpl(::google::protobuf::MessageLite& to_msg,
                        const ::google::protobuf::MessageLite& from_msg);

  public:
  [[nodiscard]] bool IsInitialized() const {
    return true;
  }
  ABSL_ATTRIBUTE_REINITIALIZES void Clear() PROTOBUF_FINAL;
  #if defined(PROTOBUF_CUSTOM_VTABLE)
  private:
  [[nodiscard]] static ::size_t ByteSizeLong(const ::google::protobuf::MessageLite& msg);
  [[nodiscard]] static ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      const ::google::protobuf::MessageLite& msg, ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream);

  public:
  [[nodiscard]] ::size_t ByteSizeLong() const { return ByteSizeLong(*this); }
  [[nodiscard]] ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const {
    return _InternalSerialize(*this, target, stream);
  }
  #else   // PROTOBUF_CUSTOM_VTABLE
  [[nodiscard]] ::size_t ByteSizeLong() const final;
  [[nodiscard]] ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const final;
  #endif  // PROTOBUF_CUSTOM_VTABLE
  [[nodiscard]] int GetCachedSize() const {
    return _impl_._cached_size_.Get();
  }

  private:
  void SharedCtor(::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  static void SharedDtor(MessageLite& self);
  void InternalSwap(V1LayerParameter* PROTOBUF_NONNULL other);
 private:
  template <typename T>
  friend ::absl::string_view(::google::protobuf::internal::GetAnyMessageName)();
  static ::absl::string_view FullMessageName() { return "caffe.V1LayerParameter"; }

  explicit V1LayerParameter(::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  V1LayerParameter(::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const V1LayerParameter& from);
  V1LayerParameter(
      ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, V1LayerParameter&& from) noexcept
      : V1LayerParameter(arena) {
    *this = ::std::move(from);
  }
  const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL GetClassData() const PROTOBUF_FINAL;
  static void* PROTOBUF_NONNULL PlacementNew_(
      const void* PROTOBUF_NONNULL, void* PROTOBUF_NONNULL mem,
      ::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  static constexpr auto InternalNewImpl_();

 public:
  static constexpr auto InternalGenerateClassData_(
      const MessageLite& prototype,
      const ::google::protobuf::internal::TcParseTableBase* PROTOBUF_NULLABLE tc_table = nullptr);

  [[nodiscard]] ::google::protobuf::Metadata GetMetadata() const;
  // nested types ----------------------------------------------------
  using LayerType = V1LayerParameter_LayerType;
  static constexpr LayerType NONE = V1LayerParameter_LayerType_NONE;
  static constexpr LayerType ABSVAL = V1LayerParameter_LayerType_ABSVAL;
  static constexpr LayerType ACCURACY = V1LayerParameter_LayerType_ACCURACY;
  static constexpr LayerType ARGMAX = V1LayerParameter_LayerType_ARGMAX;
  static constexpr LayerType BNLL = V1LayerParameter_LayerType_BNLL;
  static constexpr LayerType CONCAT = V1LayerParameter_LayerType_CONCAT;
  static constexpr LayerType CONTRASTIVE_LOSS = V1LayerParameter_LayerType_CONTRASTIVE_LOSS;
  static constexpr LayerType CONVOLUTION = V1LayerParameter_LayerType_CONVOLUTION;
  static constexpr LayerType DATA = V1LayerParameter_LayerType_DATA;
  static constexpr LayerType DECONVOLUTION = V1LayerParameter_LayerType_DECONVOLUTION;
  static constexpr LayerType DROPOUT = V1LayerParameter_LayerType_DROPOUT;
  static constexpr LayerType DUMMY_DATA = V1LayerParameter_LayerType_DUMMY_DATA;
  static constexpr LayerType EUCLIDEAN_LOSS = V1LayerParameter_LayerType_EUCLIDEAN_LOSS;
  static constexpr LayerType ELTWISE = V1LayerParameter_LayerType_ELTWISE;
  static constexpr LayerType EXP = V1LayerParameter_LayerType_EXP;
  static constexpr LayerType FLATTEN = V1LayerParameter_LayerType_FLATTEN;
  static constexpr LayerType HDF5_DATA = V1LayerParameter_LayerType_HDF5_DATA;
  static constexpr LayerType HDF5_OUTPUT = V1LayerParameter_LayerType_HDF5_OUTPUT;
  static constexpr LayerType HINGE_LOSS = V1LayerParameter_LayerType_HINGE_LOSS;
  static constexpr LayerType IM2COL = V1LayerParameter_LayerType_IM2COL;
  static constexpr LayerType IMAGE_DATA = V1LayerParameter_LayerType_IMAGE_DATA;
  static constexpr LayerType INFOGAIN_LOSS = V1LayerParameter_LayerType_INFOGAIN_LOSS;
  static constexpr LayerType INNER_PRODUCT = V1LayerParameter_LayerType_INNER_PRODUCT;
  static constexpr LayerType LRN = V1LayerParameter_LayerType_LRN;
  static constexpr LayerType MEMORY_DATA = V1LayerParameter_LayerType_MEMORY_DATA;
  static constexpr LayerType MULTINOMIAL_LOGISTIC_LOSS = V1LayerParameter_LayerType_MULTINOMIAL_LOGISTIC_LOSS;
  static constexpr LayerType MVN = V1LayerParameter_LayerType_MVN;
  static constexpr LayerType POOLING = V1LayerParameter_LayerType_POOLING;
  static constexpr LayerType POWER = V1LayerParameter_LayerType_POWER;
  static constexpr LayerType RELU = V1LayerParameter_LayerType_RELU;
  static constexpr LayerType SIGMOID = V1LayerParameter_LayerType_SIGMOID;
  static constexpr LayerType SIGMOID_CROSS_ENTROPY_LOSS = V1LayerParameter_LayerType_SIGMOID_CROSS_ENTROPY_LOSS;
  static constexpr LayerType SILENCE = V1LayerParameter_LayerType_SILENCE;
  static constexpr LayerType SOFTMAX = V1LayerParameter_LayerType_SOFTMAX;
  static constexpr LayerType SOFTMAX_LOSS = V1LayerParameter_LayerType_SOFTMAX_LOSS;
  static constexpr LayerType SPLIT = V1LayerParameter_LayerType_SPLIT;
  static constexpr LayerType SLICE = V1LayerParameter_LayerType_SLICE;
  static constexpr LayerType TANH = V1LayerParameter_LayerType_TANH;
  static constexpr LayerType WINDOW_DATA = V1LayerParameter_LayerType_WINDOW_DATA;
  static constexpr LayerType THRESHOLD = V1LayerParameter_LayerType_THRESHOLD;
  [[nodiscard]] static inline bool LayerType_IsValid(int value) {
    return V1LayerParameter_LayerType_IsValid(value);
  }
  static constexpr LayerType LayerType_MIN = V1LayerParameter_LayerType_LayerType_MIN;
  static constexpr LayerType LayerType_MAX = V1LayerParameter_LayerType_LayerType_MAX;
  static constexpr int LayerType_ARRAYSIZE = V1LayerParameter_LayerType_LayerType_ARRAYSIZE;
  static inline const ::google::protobuf::EnumDescriptor* PROTOBUF_NONNULL LayerType_descriptor() {
    return V1LayerParameter_LayerType_descriptor();
  }
  template <typename T>
  [[nodiscard]] static inline const ::std::string& LayerType_Name(T value) {
    return V1LayerParameter_LayerType_Name(value);
  }
  [[nodiscard]] static inline bool LayerType_Parse(
      ::absl::string_view name, LayerType* PROTOBUF_NONNULL value) {
    return V1LayerParameter_LayerType_Parse(name, value);
  }
  using DimCheckMode = V1LayerParameter_DimCheckMode;
  static constexpr DimCheckMode STRICT = V1LayerParameter_DimCheckMode_STRICT;
  static constexpr DimCheckMode PERMISSIVE = V1LayerParameter_DimCheckMode_PERMISSIVE;
  [[nodiscard]] static inline bool DimCheckMode_IsValid(int value) {
    return V1LayerParameter_DimCheckMode_IsValid(value);
  }
  static constexpr DimCheckMode DimCheckMode_MIN = V1LayerParameter_DimCheckMode_DimCheckMode_MIN;
  static constexpr DimCheckMode DimCheckMode_MAX = V1LayerParameter_DimCheckMode_DimCheckMode_MAX;
  static constexpr int DimCheckMode_ARRAYSIZE = V1LayerParameter_DimCheckMode_DimCheckMode_ARRAYSIZE;
  static inline const ::google::protobuf::EnumDescriptor* PROTOBUF_NONNULL DimCheckMode_descriptor() {
    return V1LayerParameter_DimCheckMode_descriptor();
  }
  template <typename T>
  [[nodiscard]] static inline const ::std::string& DimCheckMode_Name(T value) {
    return V1LayerParameter_DimCheckMode_Name(value);
  }
  [[nodiscard]] static inline bool DimCheckMode_Parse(
      ::absl::string_view name, DimCheckMode* PROTOBUF_NONNULL value) {
    return V1LayerParameter_DimCheckMode_Parse(name, value);
  }

  // accessors -------------------------------------------------------
  enum : int {
    kBottomFieldNumber = 2,
    kTopFieldNumber = 3,
    kBlobsFieldNumber = 6,
    kBlobsLrFieldNumber = 7,
    kWeightDecayFieldNumber = 8,
    kNameFieldNumber = 4,
    kLayerFieldNumber = 1,
    kConcatParamFieldNumber = 9,
    kConvolutionParamFieldNumber = 10,
    kDataParamFieldNumber = 11,
    kDropoutParamFieldNumber = 12,
    kHdf5DataParamFieldNumber = 13,
    kHdf5OutputParamFieldNumber = 14,
    kImageDataParamFieldNumber = 15,
    kInfogainLossParamFieldNumber = 16,
    kInnerProductParamFieldNumber = 17,
    kLrnParamFieldNumber = 18,
    kPoolingParamFieldNumber = 19,
    kWindowDataParamFieldNumber = 20,
    kPowerParamFieldNumber = 21,
    kMemoryDataParamFieldNumber = 22,
    kArgmaxParamFieldNumber = 23,
    kEltwiseParamFieldNumber = 24,
    kThresholdParamFieldNumber = 25,
    kDummyDataParamFieldNumber = 26,
    kAccuracyParamFieldNumber = 27,
    kHingeLossParamFieldNumber = 29,
    kReluParamFieldNumber = 30,
    kSliceParamFieldNumber = 31,
    kTypeFieldNumber = 5,
    kIncludeFieldNumber = 32,
    kExcludeFieldNumber = 33,
    kLossWeightFieldNumber = 35,
    kParamFieldNumber = 1001,
    kBlobShareModeFieldNumber = 1002,
    kMvnParamFieldNumber = 34,
    kTransformParamFieldNumber = 36,
    kTanhParamFieldNumber = 37,
    kSigmoidParamFieldNumber = 38,
    kSoftmaxParamFieldNumber = 39,
    kContrastiveLossParamFieldNumber = 40,
    kExpParamFieldNumber = 41,
    kLossParamFieldNumber = 42,
  };
  // repeated string bottom = 2;
  [[nodiscard]] int bottom_size()
      const;
  private:
  int _internal_bottom_size() const;

  public:
  void clear_bottom() ;
  [[nodiscard]] const ::std::string& bottom(int index) const;
  ::std::string* PROTOBUF_NONNULL mutable_bottom(int index);
  template <typename Arg_ = const ::std::string&, typename... Args_>
  void set_bottom(int index, Arg_&& value, Args_... args);
  ::std::string* PROTOBUF_NONNULL add_bottom();
  template <typename Arg_ = const ::std::string&, typename... Args_>
  void add_bottom(Arg_&& value, Args_... args);
  [[nodiscard]] const
      ::google::protobuf::RepeatedPtrField<::std::string>&
      bottom() const;
  [[nodiscard]] ::google::protobuf::RepeatedPtrField<::std::string>*
      PROTOBUF_NONNULL
      mutable_bottom();

  private:
  const ::google::protobuf::RepeatedPtrField<::std::string>& _internal_bottom() const;
  ::google::protobuf::RepeatedPtrField<::std::string>* PROTOBUF_NONNULL _internal_mutable_bottom();

  public:
  // repeated string top = 3;
  [[nodiscard]] int top_size()
      const;
  private:
  int _internal_top_size() const;

  public:
  void clear_top() ;
  [[nodiscard]] const ::std::string& top(int index) const;
  ::std::string* PROTOBUF_NONNULL mutable_top(int index);
  template <typename Arg_ = const ::std::string&, typename... Args_>
  void set_top(int index, Arg_&& value, Args_... args);
  ::std::string* PROTOBUF_NONNULL add_top();
  template <typename Arg_ = const ::std::string&, typename... Args_>
  void add_top(Arg_&& value, Args_... args);
  [[nodiscard]] const
      ::google::protobuf::RepeatedPtrField<::std::string>&
      top() const;
  [[nodiscard]] ::google::protobuf::RepeatedPtrField<::std::string>*
      PROTOBUF_NONNULL
      mutable_top();

  private:
  const ::google::protobuf::RepeatedPtrField<::std::string>& _internal_top() const;
  ::google::protobuf::RepeatedPtrField<::std::string>* PROTOBUF_NONNULL _internal_mutable_top();

  public:
  // repeated .caffe.BlobProto blobs = 6;
  [[nodiscard]] int blobs_size()
      const;
  private:
  int _internal_blobs_size() const;

  public:
  void clear_blobs() ;
  [[nodiscard]] const ::caffe::BlobProto& blobs(int index) const;
  [[nodiscard]] ::caffe::BlobProto* PROTOBUF_NONNULL mutable_blobs(int index);
  ::caffe::BlobProto* PROTOBUF_NONNULL add_blobs();
  [[nodiscard]] const ::google::protobuf::RepeatedPtrField<::caffe::BlobProto>&
  blobs() const;
  [[nodiscard]] ::google::protobuf::RepeatedPtrField<::caffe::BlobProto>* PROTOBUF_NONNULL
  mutable_blobs();

  private:
  const ::google::protobuf::RepeatedPtrField<::caffe::BlobProto>& _internal_blobs() const;
  ::google::protobuf::RepeatedPtrField<::caffe::BlobProto>* PROTOBUF_NONNULL _internal_mutable_blobs();

  public:
  // repeated float blobs_lr = 7;
  [[nodiscard]] int blobs_lr_size()
      const;
  private:
  int _internal_blobs_lr_size() const;

  public:
  void clear_blobs_lr() ;
  [[nodiscard]] float blobs_lr(int index) const;
  void set_blobs_lr(int index, float value);
  void add_blobs_lr(float value);
  [[nodiscard]] const ::google::protobuf::RepeatedField<float>& blobs_lr()
      const;
  ::google::protobuf::RepeatedField<float>* PROTOBUF_NONNULL mutable_blobs_lr();

  private:
  const ::google::protobuf::RepeatedField<float>& _internal_blobs_lr() const;
  ::google::protobuf::RepeatedField<float>* PROTOBUF_NONNULL _internal_mutable_blobs_lr();

  public:
  // repeated float weight_decay = 8;
  [[nodiscard]] int weight_decay_size()
      const;
  private:
  int _internal_weight_decay_size() const;

  public:
  void clear_weight_decay() ;
  [[nodiscard]] float weight_decay(int index) const;
  void set_weight_decay(int index, float value);
  void add_weight_decay(float value);
  [[nodiscard]] const ::google::protobuf::RepeatedField<float>& weight_decay()
      const;
  ::google::protobuf::RepeatedField<float>* PROTOBUF_NONNULL mutable_weight_decay();

  private:
  const ::google::protobuf::RepeatedField<float>& _internal_weight_decay() const;
  ::google::protobuf::RepeatedField<float>* PROTOBUF_NONNULL _internal_mutable_weight_decay();

  public:
  // optional string name = 4;
  [[nodiscard]] bool has_name()
      const;
  void clear_name() ;
  [[nodiscard]] const ::std::string& name() const;
  template <typename Arg_ = const ::std::string&, typename... Args_>
  void set_name(Arg_&& arg, Args_... args);
  ::std::string* PROTOBUF_NONNULL mutable_name();
  [[nodiscard]] ::std::string* PROTOBUF_NULLABLE release_name();
  void set_allocated_name(::std::string* PROTOBUF_NULLABLE value);

  private:
  const ::std::string& _internal_name() const;
  PROTOBUF_ALWAYS_INLINE void _internal_set_name(const ::std::string& value);
  ::std::string* PROTOBUF_NONNULL _internal_mutable_name();

  public:
  // optional .caffe.V0LayerParameter layer = 1;
  [[nodiscard]] bool has_layer()
      const;
  void clear_layer() ;
  [[nodiscard]] const ::caffe::V0LayerParameter& layer() const;
  [[nodiscard]] ::caffe::V0LayerParameter* PROTOBUF_NULLABLE release_layer();
  ::caffe::V0LayerParameter* PROTOBUF_NONNULL mutable_layer();
  void set_allocated_layer(::caffe::V0LayerParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_layer(::caffe::V0LayerParameter* PROTOBUF_NULLABLE value);
  ::caffe::V0LayerParameter* PROTOBUF_NULLABLE unsafe_arena_release_layer();

  private:
  const ::caffe::V0LayerParameter& _internal_layer() const;
  ::caffe::V0LayerParameter* PROTOBUF_NONNULL _internal_mutable_layer();

  public:
  // optional .caffe.ConcatParameter concat_param = 9;
  [[nodiscard]] bool has_concat_param()
      const;
  void clear_concat_param() ;
  [[nodiscard]] const ::caffe::ConcatParameter& concat_param() const;
  [[nodiscard]] ::caffe::ConcatParameter* PROTOBUF_NULLABLE release_concat_param();
  ::caffe::ConcatParameter* PROTOBUF_NONNULL mutable_concat_param();
  void set_allocated_concat_param(::caffe::ConcatParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_concat_param(::caffe::ConcatParameter* PROTOBUF_NULLABLE value);
  ::caffe::ConcatParameter* PROTOBUF_NULLABLE unsafe_arena_release_concat_param();

  private:
  const ::caffe::ConcatParameter& _internal_concat_param() const;
  ::caffe::ConcatParameter* PROTOBUF_NONNULL _internal_mutable_concat_param();

  public:
  // optional .caffe.ConvolutionParameter convolution_param = 10;
  [[nodiscard]] bool has_convolution_param()
      const;
  void clear_convolution_param() ;
  [[nodiscard]] const ::caffe::ConvolutionParameter& convolution_param() const;
  [[nodiscard]] ::caffe::ConvolutionParameter* PROTOBUF_NULLABLE release_convolution_param();
  ::caffe::ConvolutionParameter* PROTOBUF_NONNULL mutable_convolution_param();
  void set_allocated_convolution_param(::caffe::ConvolutionParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_convolution_param(::caffe::ConvolutionParameter* PROTOBUF_NULLABLE value);
  ::caffe::ConvolutionParameter* PROTOBUF_NULLABLE unsafe_arena_release_convolution_param();

  private:
  const ::caffe::ConvolutionParameter& _internal_convolution_param() const;
  ::caffe::ConvolutionParameter* PROTOBUF_NONNULL _internal_mutable_convolution_param();

  public:
  // optional .caffe.DataParameter data_param = 11;
  [[nodiscard]] bool has_data_param()
      const;
  void clear_data_param() ;
  [[nodiscard]] const ::caffe::DataParameter& data_param() const;
  [[nodiscard]] ::caffe::DataParameter* PROTOBUF_NULLABLE release_data_param();
  ::caffe::DataParameter* PROTOBUF_NONNULL mutable_data_param();
  void set_allocated_data_param(::caffe::DataParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_data_param(::caffe::DataParameter* PROTOBUF_NULLABLE value);
  ::caffe::DataParameter* PROTOBUF_NULLABLE unsafe_arena_release_data_param();

  private:
  const ::caffe::DataParameter& _internal_data_param() const;
  ::caffe::DataParameter* PROTOBUF_NONNULL _internal_mutable_data_param();

  public:
  // optional .caffe.DropoutParameter dropout_param = 12;
  [[nodiscard]] bool has_dropout_param()
      const;
  void clear_dropout_param() ;
  [[nodiscard]] const ::caffe::DropoutParameter& dropout_param() const;
  [[nodiscard]] ::caffe::DropoutParameter* PROTOBUF_NULLABLE release_dropout_param();
  ::caffe::DropoutParameter* PROTOBUF_NONNULL mutable_dropout_param();
  void set_allocated_dropout_param(::caffe::DropoutParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_dropout_param(::caffe::DropoutParameter* PROTOBUF_NULLABLE value);
  ::caffe::DropoutParameter* PROTOBUF_NULLABLE unsafe_arena_release_dropout_param();

  private:
  const ::caffe::DropoutParameter& _internal_dropout_param() const;
  ::caffe::DropoutParameter* PROTOBUF_NONNULL _internal_mutable_dropout_param();

  public:
  // optional .caffe.HDF5DataParameter hdf5_data_param = 13;
  [[nodiscard]] bool has_hdf5_data_param()
      const;
  void clear_hdf5_data_param() ;
  [[nodiscard]] const ::caffe::HDF5DataParameter& hdf5_data_param() const;
  [[nodiscard]] ::caffe::HDF5DataParameter* PROTOBUF_NULLABLE release_hdf5_data_param();
  ::caffe::HDF5DataParameter* PROTOBUF_NONNULL mutable_hdf5_data_param();
  void set_allocated_hdf5_data_param(::caffe::HDF5DataParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_hdf5_data_param(::caffe::HDF5DataParameter* PROTOBUF_NULLABLE value);
  ::caffe::HDF5DataParameter* PROTOBUF_NULLABLE unsafe_arena_release_hdf5_data_param();

  private:
  const ::caffe::HDF5DataParameter& _internal_hdf5_data_param() const;
  ::caffe::HDF5DataParameter* PROTOBUF_NONNULL _internal_mutable_hdf5_data_param();

  public:
  // optional .caffe.HDF5OutputParameter hdf5_output_param = 14;
  [[nodiscard]] bool has_hdf5_output_param()
      const;
  void clear_hdf5_output_param() ;
  [[nodiscard]] const ::caffe::HDF5OutputParameter& hdf5_output_param() const;
  [[nodiscard]] ::caffe::HDF5OutputParameter* PROTOBUF_NULLABLE release_hdf5_output_param();
  ::caffe::HDF5OutputParameter* PROTOBUF_NONNULL mutable_hdf5_output_param();
  void set_allocated_hdf5_output_param(::caffe::HDF5OutputParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_hdf5_output_param(::caffe::HDF5OutputParameter* PROTOBUF_NULLABLE value);
  ::caffe::HDF5OutputParameter* PROTOBUF_NULLABLE unsafe_arena_release_hdf5_output_param();

  private:
  const ::caffe::HDF5OutputParameter& _internal_hdf5_output_param() const;
  ::caffe::HDF5OutputParameter* PROTOBUF_NONNULL _internal_mutable_hdf5_output_param();

  public:
  // optional .caffe.ImageDataParameter image_data_param = 15;
  [[nodiscard]] bool has_image_data_param()
      const;
  void clear_image_data_param() ;
  [[nodiscard]] const ::caffe::ImageDataParameter& image_data_param() const;
  [[nodiscard]] ::caffe::ImageDataParameter* PROTOBUF_NULLABLE release_image_data_param();
  ::caffe::ImageDataParameter* PROTOBUF_NONNULL mutable_image_data_param();
  void set_allocated_image_data_param(::caffe::ImageDataParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_image_data_param(::caffe::ImageDataParameter* PROTOBUF_NULLABLE value);
  ::caffe::ImageDataParameter* PROTOBUF_NULLABLE unsafe_arena_release_image_data_param();

  private:
  const ::caffe::ImageDataParameter& _internal_image_data_param() const;
  ::caffe::ImageDataParameter* PROTOBUF_NONNULL _internal_mutable_image_data_param();

  public:
  // optional .caffe.InfogainLossParameter infogain_loss_param = 16;
  [[nodiscard]] bool has_infogain_loss_param()
      const;
  void clear_infogain_loss_param() ;
  [[nodiscard]] const ::caffe::InfogainLossParameter& infogain_loss_param() const;
  [[nodiscard]] ::caffe::InfogainLossParameter* PROTOBUF_NULLABLE release_infogain_loss_param();
  ::caffe::InfogainLossParameter* PROTOBUF_NONNULL mutable_infogain_loss_param();
  void set_allocated_infogain_loss_param(::caffe::InfogainLossParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_infogain_loss_param(::caffe::InfogainLossParameter* PROTOBUF_NULLABLE value);
  ::caffe::InfogainLossParameter* PROTOBUF_NULLABLE unsafe_arena_release_infogain_loss_param();

  private:
  const ::caffe::InfogainLossParameter& _internal_infogain_loss_param() const;
  ::caffe::InfogainLossParameter* PROTOBUF_NONNULL _internal_mutable_infogain_loss_param();

  public:
  // optional .caffe.InnerProductParameter inner_product_param = 17;
  [[nodiscard]] bool has_inner_product_param()
      const;
  void clear_inner_product_param() ;
  [[nodiscard]] const ::caffe::InnerProductParameter& inner_product_param() const;
  [[nodiscard]] ::caffe::InnerProductParameter* PROTOBUF_NULLABLE release_inner_product_param();
  ::caffe::InnerProductParameter* PROTOBUF_NONNULL mutable_inner_product_param();
  void set_allocated_inner_product_param(::caffe::InnerProductParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_inner_product_param(::caffe::InnerProductParameter* PROTOBUF_NULLABLE value);
  ::caffe::InnerProductParameter* PROTOBUF_NULLABLE unsafe_arena_release_inner_product_param();

  private:
  const ::caffe::InnerProductParameter& _internal_inner_product_param() const;
  ::caffe::InnerProductParameter* PROTOBUF_NONNULL _internal_mutable_inner_product_param();

  public:
  // optional .caffe.LRNParameter lrn_param = 18;
  [[nodiscard]] bool has_lrn_param()
      const;
  void clear_lrn_param() ;
  [[nodiscard]] const ::caffe::LRNParameter& lrn_param() const;
  [[nodiscard]] ::caffe::LRNParameter* PROTOBUF_NULLABLE release_lrn_param();
  ::caffe::LRNParameter* PROTOBUF_NONNULL mutable_lrn_param();
  void set_allocated_lrn_param(::caffe::LRNParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_lrn_param(::caffe::LRNParameter* PROTOBUF_NULLABLE value);
  ::caffe::LRNParameter* PROTOBUF_NULLABLE unsafe_arena_release_lrn_param();

  private:
  const ::caffe::LRNParameter& _internal_lrn_param() const;
  ::caffe::LRNParameter* PROTOBUF_NONNULL _internal_mutable_lrn_param();

  public:
  // optional .caffe.PoolingParameter pooling_param = 19;
  [[nodiscard]] bool has_pooling_param()
      const;
  void clear_pooling_param() ;
  [[nodiscard]] const ::caffe::PoolingParameter& pooling_param() const;
  [[nodiscard]] ::caffe::PoolingParameter* PROTOBUF_NULLABLE release_pooling_param();
  ::caffe::PoolingParameter* PROTOBUF_NONNULL mutable_pooling_param();
  void set_allocated_pooling_param(::caffe::PoolingParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_pooling_param(::caffe::PoolingParameter* PROTOBUF_NULLABLE value);
  ::caffe::PoolingParameter* PROTOBUF_NULLABLE unsafe_arena_release_pooling_param();

  private:
  const ::caffe::PoolingParameter& _internal_pooling_param() const;
  ::caffe::PoolingParameter* PROTOBUF_NONNULL _internal_mutable_pooling_param();

  public:
  // optional .caffe.WindowDataParameter window_data_param = 20;
  [[nodiscard]] bool has_window_data_param()
      const;
  void clear_window_data_param() ;
  [[nodiscard]] const ::caffe::WindowDataParameter& window_data_param() const;
  [[nodiscard]] ::caffe::WindowDataParameter* PROTOBUF_NULLABLE release_window_data_param();
  ::caffe::WindowDataParameter* PROTOBUF_NONNULL mutable_window_data_param();
  void set_allocated_window_data_param(::caffe::WindowDataParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_window_data_param(::caffe::WindowDataParameter* PROTOBUF_NULLABLE value);
  ::caffe::WindowDataParameter* PROTOBUF_NULLABLE unsafe_arena_release_window_data_param();

  private:
  const ::caffe::WindowDataParameter& _internal_window_data_param() const;
  ::caffe::WindowDataParameter* PROTOBUF_NONNULL _internal_mutable_window_data_param();

  public:
  // optional .caffe.PowerParameter power_param = 21;
  [[nodiscard]] bool has_power_param()
      const;
  void clear_power_param() ;
  [[nodiscard]] const ::caffe::PowerParameter& power_param() const;
  [[nodiscard]] ::caffe::PowerParameter* PROTOBUF_NULLABLE release_power_param();
  ::caffe::PowerParameter* PROTOBUF_NONNULL mutable_power_param();
  void set_allocated_power_param(::caffe::PowerParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_power_param(::caffe::PowerParameter* PROTOBUF_NULLABLE value);
  ::caffe::PowerParameter* PROTOBUF_NULLABLE unsafe_arena_release_power_param();

  private:
  const ::caffe::PowerParameter& _internal_power_param() const;
  ::caffe::PowerParameter* PROTOBUF_NONNULL _internal_mutable_power_param();

  public:
  // optional .caffe.MemoryDataParameter memory_data_param = 22;
  [[nodiscard]] bool has_memory_data_param()
      const;
  void clear_memory_data_param() ;
  [[nodiscard]] const ::caffe::MemoryDataParameter& memory_data_param() const;
  [[nodiscard]] ::caffe::MemoryDataParameter* PROTOBUF_NULLABLE release_memory_data_param();
  ::caffe::MemoryDataParameter* PROTOBUF_NONNULL mutable_memory_data_param();
  void set_allocated_memory_data_param(::caffe::MemoryDataParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_memory_data_param(::caffe::MemoryDataParameter* PROTOBUF_NULLABLE value);
  ::caffe::MemoryDataParameter* PROTOBUF_NULLABLE unsafe_arena_release_memory_data_param();

  private:
  const ::caffe::MemoryDataParameter& _internal_memory_data_param() const;
  ::caffe::MemoryDataParameter* PROTOBUF_NONNULL _internal_mutable_memory_data_param();

  public:
  // optional .caffe.ArgMaxParameter argmax_param = 23;
  [[nodiscard]] bool has_argmax_param()
      const;
  void clear_argmax_param() ;
  [[nodiscard]] const ::caffe::ArgMaxParameter& argmax_param() const;
  [[nodiscard]] ::caffe::ArgMaxParameter* PROTOBUF_NULLABLE release_argmax_param();
  ::caffe::ArgMaxParameter* PROTOBUF_NONNULL mutable_argmax_param();
  void set_allocated_argmax_param(::caffe::ArgMaxParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_argmax_param(::caffe::ArgMaxParameter* PROTOBUF_NULLABLE value);
  ::caffe::ArgMaxParameter* PROTOBUF_NULLABLE unsafe_arena_release_argmax_param();

  private:
  const ::caffe::ArgMaxParameter& _internal_argmax_param() const;
  ::caffe::ArgMaxParameter* PROTOBUF_NONNULL _internal_mutable_argmax_param();

  public:
  // optional .caffe.EltwiseParameter eltwise_param = 24;
  [[nodiscard]] bool has_eltwise_param()
      const;
  void clear_eltwise_param() ;
  [[nodiscard]] const ::caffe::EltwiseParameter& eltwise_param() const;
  [[nodiscard]] ::caffe::EltwiseParameter* PROTOBUF_NULLABLE release_eltwise_param();
  ::caffe::EltwiseParameter* PROTOBUF_NONNULL mutable_eltwise_param();
  void set_allocated_eltwise_param(::caffe::EltwiseParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_eltwise_param(::caffe::EltwiseParameter* PROTOBUF_NULLABLE value);
  ::caffe::EltwiseParameter* PROTOBUF_NULLABLE unsafe_arena_release_eltwise_param();

  private:
  const ::caffe::EltwiseParameter& _internal_eltwise_param() const;
  ::caffe::EltwiseParameter* PROTOBUF_NONNULL _internal_mutable_eltwise_param();

  public:
  // optional .caffe.ThresholdParameter threshold_param = 25;
  [[nodiscard]] bool has_threshold_param()
      const;
  void clear_threshold_param() ;
  [[nodiscard]] const ::caffe::ThresholdParameter& threshold_param() const;
  [[nodiscard]] ::caffe::ThresholdParameter* PROTOBUF_NULLABLE release_threshold_param();
  ::caffe::ThresholdParameter* PROTOBUF_NONNULL mutable_threshold_param();
  void set_allocated_threshold_param(::caffe::ThresholdParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_threshold_param(::caffe::ThresholdParameter* PROTOBUF_NULLABLE value);
  ::caffe::ThresholdParameter* PROTOBUF_NULLABLE unsafe_arena_release_threshold_param();

  private:
  const ::caffe::ThresholdParameter& _internal_threshold_param() const;
  ::caffe::ThresholdParameter* PROTOBUF_NONNULL _internal_mutable_threshold_param();

  public:
  // optional .caffe.DummyDataParameter dummy_data_param = 26;
  [[nodiscard]] bool has_dummy_data_param()
      const;
  void clear_dummy_data_param() ;
  [[nodiscard]] const ::caffe::DummyDataParameter& dummy_data_param() const;
  [[nodiscard]] ::caffe::DummyDataParameter* PROTOBUF_NULLABLE release_dummy_data_param();
  ::caffe::DummyDataParameter* PROTOBUF_NONNULL mutable_dummy_data_param();
  void set_allocated_dummy_data_param(::caffe::DummyDataParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_dummy_data_param(::caffe::DummyDataParameter* PROTOBUF_NULLABLE value);
  ::caffe::DummyDataParameter* PROTOBUF_NULLABLE unsafe_arena_release_dummy_data_param();

  private:
  const ::caffe::DummyDataParameter& _internal_dummy_data_param() const;
  ::caffe::DummyDataParameter* PROTOBUF_NONNULL _internal_mutable_dummy_data_param();

  public:
  // optional .caffe.AccuracyParameter accuracy_param = 27;
  [[nodiscard]] bool has_accuracy_param()
      const;
  void clear_accuracy_param() ;
  [[nodiscard]] const ::caffe::AccuracyParameter& accuracy_param() const;
  [[nodiscard]] ::caffe::AccuracyParameter* PROTOBUF_NULLABLE release_accuracy_param();
  ::caffe::AccuracyParameter* PROTOBUF_NONNULL mutable_accuracy_param();
  void set_allocated_accuracy_param(::caffe::AccuracyParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_accuracy_param(::caffe::AccuracyParameter* PROTOBUF_NULLABLE value);
  ::caffe::AccuracyParameter* PROTOBUF_NULLABLE unsafe_arena_release_accuracy_param();

  private:
  const ::caffe::AccuracyParameter& _internal_accuracy_param() const;
  ::caffe::AccuracyParameter* PROTOBUF_NONNULL _internal_mutable_accuracy_param();

  public:
  // optional .caffe.HingeLossParameter hinge_loss_param = 29;
  [[nodiscard]] bool has_hinge_loss_param()
      const;
  void clear_hinge_loss_param() ;
  [[nodiscard]] const ::caffe::HingeLossParameter& hinge_loss_param() const;
  [[nodiscard]] ::caffe::HingeLossParameter* PROTOBUF_NULLABLE release_hinge_loss_param();
  ::caffe::HingeLossParameter* PROTOBUF_NONNULL mutable_hinge_loss_param();
  void set_allocated_hinge_loss_param(::caffe::HingeLossParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_hinge_loss_param(::caffe::HingeLossParameter* PROTOBUF_NULLABLE value);
  ::caffe::HingeLossParameter* PROTOBUF_NULLABLE unsafe_arena_release_hinge_loss_param();

  private:
  const ::caffe::HingeLossParameter& _internal_hinge_loss_param() const;
  ::caffe::HingeLossParameter* PROTOBUF_NONNULL _internal_mutable_hinge_loss_param();

  public:
  // optional .caffe.ReLUParameter relu_param = 30;
  [[nodiscard]] bool has_relu_param()
      const;
  void clear_relu_param() ;
  [[nodiscard]] const ::caffe::ReLUParameter& relu_param() const;
  [[nodiscard]] ::caffe::ReLUParameter* PROTOBUF_NULLABLE release_relu_param();
  ::caffe::ReLUParameter* PROTOBUF_NONNULL mutable_relu_param();
  void set_allocated_relu_param(::caffe::ReLUParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_relu_param(::caffe::ReLUParameter* PROTOBUF_NULLABLE value);
  ::caffe::ReLUParameter* PROTOBUF_NULLABLE unsafe_arena_release_relu_param();

  private:
  const ::caffe::ReLUParameter& _internal_relu_param() const;
  ::caffe::ReLUParameter* PROTOBUF_NONNULL _internal_mutable_relu_param();

  public:
  // optional .caffe.SliceParameter slice_param = 31;
  [[nodiscard]] bool has_slice_param()
      const;
  void clear_slice_param() ;
  [[nodiscard]] const ::caffe::SliceParameter& slice_param() const;
  [[nodiscard]] ::caffe::SliceParameter* PROTOBUF_NULLABLE release_slice_param();
  ::caffe::SliceParameter* PROTOBUF_NONNULL mutable_slice_param();
  void set_allocated_slice_param(::caffe::SliceParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_slice_param(::caffe::SliceParameter* PROTOBUF_NULLABLE value);
  ::caffe::SliceParameter* PROTOBUF_NULLABLE unsafe_arena_release_slice_param();

  private:
  const ::caffe::SliceParameter& _internal_slice_param() const;
  ::caffe::SliceParameter* PROTOBUF_NONNULL _internal_mutable_slice_param();

  public:
  // optional .caffe.V1LayerParameter.LayerType type = 5;
  [[nodiscard]] bool has_type()
      const;
  void clear_type() ;
  [[nodiscard]] ::caffe::V1LayerParameter_LayerType type() const;
  void set_type(::caffe::V1LayerParameter_LayerType value);

  private:
  ::caffe::V1LayerParameter_LayerType _internal_type() const;
  void _internal_set_type(::caffe::V1LayerParameter_LayerType value);

  public:
  // repeated .caffe.NetStateRule include = 32;
  [[nodiscard]] int include_size()
      const;
  private:
  int _internal_include_size() const;

  public:
  void clear_include() ;
  [[nodiscard]] const ::caffe::NetStateRule& include(int index) const;
  [[nodiscard]] ::caffe::NetStateRule* PROTOBUF_NONNULL mutable_include(int index);
  ::caffe::NetStateRule* PROTOBUF_NONNULL add_include();
  [[nodiscard]] const ::google::protobuf::RepeatedPtrField<::caffe::NetStateRule>&
  include() const;
  [[nodiscard]] ::google::protobuf::RepeatedPtrField<::caffe::NetStateRule>* PROTOBUF_NONNULL
  mutable_include();

  private:
  const ::google::protobuf::RepeatedPtrField<::caffe::NetStateRule>& _internal_include() const;
  ::google::protobuf::RepeatedPtrField<::caffe::NetStateRule>* PROTOBUF_NONNULL _internal_mutable_include();

  public:
  // repeated .caffe.NetStateRule exclude = 33;
  [[nodiscard]] int exclude_size()
      const;
  private:
  int _internal_exclude_size() const;

  public:
  void clear_exclude() ;
  [[nodiscard]] const ::caffe::NetStateRule& exclude(int index) const;
  [[nodiscard]] ::caffe::NetStateRule* PROTOBUF_NONNULL mutable_exclude(int index);
  ::caffe::NetStateRule* PROTOBUF_NONNULL add_exclude();
  [[nodiscard]] const ::google::protobuf::RepeatedPtrField<::caffe::NetStateRule>&
  exclude() const;
  [[nodiscard]] ::google::protobuf::RepeatedPtrField<::caffe::NetStateRule>* PROTOBUF_NONNULL
  mutable_exclude();

  private:
  const ::google::protobuf::RepeatedPtrField<::caffe::NetStateRule>& _internal_exclude() const;
  ::google::protobuf::RepeatedPtrField<::caffe::NetStateRule>* PROTOBUF_NONNULL _internal_mutable_exclude();

  public:
  // repeated float loss_weight = 35;
  [[nodiscard]] int loss_weight_size()
      const;
  private:
  int _internal_loss_weight_size() const;

  public:
  void clear_loss_weight() ;
  [[nodiscard]] float loss_weight(int index) const;
  void set_loss_weight(int index, float value);
  void add_loss_weight(float value);
  [[nodiscard]] const ::google::protobuf::RepeatedField<float>& loss_weight()
      const;
  ::google::protobuf::RepeatedField<float>* PROTOBUF_NONNULL mutable_loss_weight();

  private:
  const ::google::protobuf::RepeatedField<float>& _internal_loss_weight() const;
  ::google::protobuf::RepeatedField<float>* PROTOBUF_NONNULL _internal_mutable_loss_weight();

  public:
  // repeated string param = 1001;
  [[nodiscard]] int param_size()
      const;
  private:
  int _internal_param_size() const;

  public:
  void clear_param() ;
  [[nodiscard]] const ::std::string& param(int index) const;
  ::std::string* PROTOBUF_NONNULL mutable_param(int index);
  template <typename Arg_ = const ::std::string&, typename... Args_>
  void set_param(int index, Arg_&& value, Args_... args);
  ::std::string* PROTOBUF_NONNULL add_param();
  template <typename Arg_ = const ::std::string&, typename... Args_>
  void add_param(Arg_&& value, Args_... args);
  [[nodiscard]] const
      ::google::protobuf::RepeatedPtrField<::std::string>&
      param() const;
  [[nodiscard]] ::google::protobuf::RepeatedPtrField<::std::string>*
      PROTOBUF_NONNULL
      mutable_param();

  private:
  const ::google::protobuf::RepeatedPtrField<::std::string>& _internal_param() const;
  ::google::protobuf::RepeatedPtrField<::std::string>* PROTOBUF_NONNULL _internal_mutable_param();

  public:
  // repeated .caffe.V1LayerParameter.DimCheckMode blob_share_mode = 1002;
  [[nodiscard]] int blob_share_mode_size()
      const;
  private:
  int _internal_blob_share_mode_size() const;

  public:
  void clear_blob_share_mode() ;
  public:
  [[nodiscard]] ::caffe::V1LayerParameter_DimCheckMode blob_share_mode(int index) const;
  void set_blob_share_mode(int index, ::caffe::V1LayerParameter_DimCheckMode value);
  void add_blob_share_mode(::caffe::V1LayerParameter_DimCheckMode value);
  [[nodiscard]] const ::google::protobuf::RepeatedField<int>& blob_share_mode()
      const;
  [[nodiscard]] ::google::protobuf::RepeatedField<int>* PROTOBUF_NONNULL mutable_blob_share_mode();

  private:
  const ::google::protobuf::RepeatedField<int>& _internal_blob_share_mode() const;
  ::google::protobuf::RepeatedField<int>* PROTOBUF_NONNULL _internal_mutable_blob_share_mode();

  public:
  // optional .caffe.MVNParameter mvn_param = 34;
  [[nodiscard]] bool has_mvn_param()
      const;
  void clear_mvn_param() ;
  [[nodiscard]] const ::caffe::MVNParameter& mvn_param() const;
  [[nodiscard]] ::caffe::MVNParameter* PROTOBUF_NULLABLE release_mvn_param();
  ::caffe::MVNParameter* PROTOBUF_NONNULL mutable_mvn_param();
  void set_allocated_mvn_param(::caffe::MVNParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_mvn_param(::caffe::MVNParameter* PROTOBUF_NULLABLE value);
  ::caffe::MVNParameter* PROTOBUF_NULLABLE unsafe_arena_release_mvn_param();

  private:
  const ::caffe::MVNParameter& _internal_mvn_param() const;
  ::caffe::MVNParameter* PROTOBUF_NONNULL _internal_mutable_mvn_param();

  public:
  // optional .caffe.TransformationParameter transform_param = 36;
  [[nodiscard]] bool has_transform_param()
      const;
  void clear_transform_param() ;
  [[nodiscard]] const ::caffe::TransformationParameter& transform_param() const;
  [[nodiscard]] ::caffe::TransformationParameter* PROTOBUF_NULLABLE release_transform_param();
  ::caffe::TransformationParameter* PROTOBUF_NONNULL mutable_transform_param();
  void set_allocated_transform_param(::caffe::TransformationParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_transform_param(::caffe::TransformationParameter* PROTOBUF_NULLABLE value);
  ::caffe::TransformationParameter* PROTOBUF_NULLABLE unsafe_arena_release_transform_param();

  private:
  const ::caffe::TransformationParameter& _internal_transform_param() const;
  ::caffe::TransformationParameter* PROTOBUF_NONNULL _internal_mutable_transform_param();

  public:
  // optional .caffe.TanHParameter tanh_param = 37;
  [[nodiscard]] bool has_tanh_param()
      const;
  void clear_tanh_param() ;
  [[nodiscard]] const ::caffe::TanHParameter& tanh_param() const;
  [[nodiscard]] ::caffe::TanHParameter* PROTOBUF_NULLABLE release_tanh_param();
  ::caffe::TanHParameter* PROTOBUF_NONNULL mutable_tanh_param();
  void set_allocated_tanh_param(::caffe::TanHParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_tanh_param(::caffe::TanHParameter* PROTOBUF_NULLABLE value);
  ::caffe::TanHParameter* PROTOBUF_NULLABLE unsafe_arena_release_tanh_param();

  private:
  const ::caffe::TanHParameter& _internal_tanh_param() const;
  ::caffe::TanHParameter* PROTOBUF_NONNULL _internal_mutable_tanh_param();

  public:
  // optional .caffe.SigmoidParameter sigmoid_param = 38;
  [[nodiscard]] bool has_sigmoid_param()
      const;
  void clear_sigmoid_param() ;
  [[nodiscard]] const ::caffe::SigmoidParameter& sigmoid_param() const;
  [[nodiscard]] ::caffe::SigmoidParameter* PROTOBUF_NULLABLE release_sigmoid_param();
  ::caffe::SigmoidParameter* PROTOBUF_NONNULL mutable_sigmoid_param();
  void set_allocated_sigmoid_param(::caffe::SigmoidParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_sigmoid_param(::caffe::SigmoidParameter* PROTOBUF_NULLABLE value);
  ::caffe::SigmoidParameter* PROTOBUF_NULLABLE unsafe_arena_release_sigmoid_param();

  private:
  const ::caffe::SigmoidParameter& _internal_sigmoid_param() const;
  ::caffe::SigmoidParameter* PROTOBUF_NONNULL _internal_mutable_sigmoid_param();

  public:
  // optional .caffe.SoftmaxParameter softmax_param = 39;
  [[nodiscard]] bool has_softmax_param()
      const;
  void clear_softmax_param() ;
  [[nodiscard]] const ::caffe::SoftmaxParameter& softmax_param() const;
  [[nodiscard]] ::caffe::SoftmaxParameter* PROTOBUF_NULLABLE release_softmax_param();
  ::caffe::SoftmaxParameter* PROTOBUF_NONNULL mutable_softmax_param();
  void set_allocated_softmax_param(::caffe::SoftmaxParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_softmax_param(::caffe::SoftmaxParameter* PROTOBUF_NULLABLE value);
  ::caffe::SoftmaxParameter* PROTOBUF_NULLABLE unsafe_arena_release_softmax_param();

  private:
  const ::caffe::SoftmaxParameter& _internal_softmax_param() const;
  ::caffe::SoftmaxParameter* PROTOBUF_NONNULL _internal_mutable_softmax_param();

  public:
  // optional .caffe.ContrastiveLossParameter contrastive_loss_param = 40;
  [[nodiscard]] bool has_contrastive_loss_param()
      const;
  void clear_contrastive_loss_param() ;
  [[nodiscard]] const ::caffe::ContrastiveLossParameter& contrastive_loss_param() const;
  [[nodiscard]] ::caffe::ContrastiveLossParameter* PROTOBUF_NULLABLE release_contrastive_loss_param();
  ::caffe::ContrastiveLossParameter* PROTOBUF_NONNULL mutable_contrastive_loss_param();
  void set_allocated_contrastive_loss_param(::caffe::ContrastiveLossParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_contrastive_loss_param(::caffe::ContrastiveLossParameter* PROTOBUF_NULLABLE value);
  ::caffe::ContrastiveLossParameter* PROTOBUF_NULLABLE unsafe_arena_release_contrastive_loss_param();

  private:
  const ::caffe::ContrastiveLossParameter& _internal_contrastive_loss_param() const;
  ::caffe::ContrastiveLossParameter* PROTOBUF_NONNULL _internal_mutable_contrastive_loss_param();

  public:
  // optional .caffe.ExpParameter exp_param = 41;
  [[nodiscard]] bool has_exp_param()
      const;
  void clear_exp_param() ;
  [[nodiscard]] const ::caffe::ExpParameter& exp_param() const;
  [[nodiscard]] ::caffe::ExpParameter* PROTOBUF_NULLABLE release_exp_param();
  ::caffe::ExpParameter* PROTOBUF_NONNULL mutable_exp_param();
  void set_allocated_exp_param(::caffe::ExpParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_exp_param(::caffe::ExpParameter* PROTOBUF_NULLABLE value);
  ::caffe::ExpParameter* PROTOBUF_NULLABLE unsafe_arena_release_exp_param();

  private:
  const ::caffe::ExpParameter& _internal_exp_param() const;
  ::caffe::ExpParameter* PROTOBUF_NONNULL _internal_mutable_exp_param();

  public:
  // optional .caffe.LossParameter loss_param = 42;
  [[nodiscard]] bool has_loss_param()
      const;
  void clear_loss_param() ;
  [[nodiscard]] const ::caffe::LossParameter& loss_param() const;
  [[nodiscard]] ::caffe::LossParameter* PROTOBUF_NULLABLE release_loss_param();
  ::caffe::LossParameter* PROTOBUF_NONNULL mutable_loss_param();
  void set_allocated_loss_param(::caffe::LossParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_loss_param(::caffe::LossParameter* PROTOBUF_NULLABLE value);
  ::caffe::LossParameter* PROTOBUF_NULLABLE unsafe_arena_release_loss_param();

  private:
  const ::caffe::LossParameter& _internal_loss_param() const;
  ::caffe::LossParameter* PROTOBUF_NONNULL _internal_mutable_loss_param();

  public:
  // @@protoc_insertion_point(class_scope:caffe.V1LayerParameter)
 private:
  class _Internal;
  using ParseTableT_ =
      ::google::protobuf::internal::TcParseTable<5, 43,
                          36, 0,
                          12>;
  static constexpr ParseTableT_ InternalGenerateParseTable_(
      const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL class_data);
  friend class ::google::protobuf::internal::TcParser;
  #ifndef PROTOBUF_MESSAGE_GLOBALS
  static const ParseTableT_ _table_;
  #endif

  friend class ::google::protobuf::MessageLite;
  friend class ::google::protobuf::Arena;
  friend ::google::protobuf::internal::PrivateAccess;
  template <typename T>
  friend class ::google::protobuf::Arena::InternalHelper;
  using InternalArenaConstructable_ = void;
  using DestructorSkippable_ = void;
  struct Impl_ {
    inline explicit constexpr Impl_(::google::protobuf::internal::InternalVisibility visibility,
                                    ::google::protobuf::internal::ConstantInitialized) noexcept;
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const Impl_& from,
        const V1LayerParameter& from_msg);
    ::google::protobuf::internal::HasBits<2> _has_bits_;
    ::google::protobuf::internal::CachedSize _cached_size_;
    ::google::protobuf::RepeatedPtrField<::std::string> bottom_;
    ::google::protobuf::RepeatedPtrField<::std::string> top_;
    ::google::protobuf::RepeatedPtrField< ::caffe::BlobProto > blobs_;
    ::google::protobuf::RepeatedField<float> blobs_lr_;
    ::google::protobuf::RepeatedField<float> weight_decay_;
    ::google::protobuf::internal::ArenaStringPtr name_;
    ::caffe::V0LayerParameter* PROTOBUF_NULLABLE layer_;
    ::caffe::ConcatParameter* PROTOBUF_NULLABLE concat_param_;
    ::caffe::ConvolutionParameter* PROTOBUF_NULLABLE convolution_param_;
    ::caffe::DataParameter* PROTOBUF_NULLABLE data_param_;
    ::caffe::DropoutParameter* PROTOBUF_NULLABLE dropout_param_;
    ::caffe::HDF5DataParameter* PROTOBUF_NULLABLE hdf5_data_param_;
    ::caffe::HDF5OutputParameter* PROTOBUF_NULLABLE hdf5_output_param_;
    ::caffe::ImageDataParameter* PROTOBUF_NULLABLE image_data_param_;
    ::caffe::InfogainLossParameter* PROTOBUF_NULLABLE infogain_loss_param_;
    ::caffe::InnerProductParameter* PROTOBUF_NULLABLE inner_product_param_;
    ::caffe::LRNParameter* PROTOBUF_NULLABLE lrn_param_;
    ::caffe::PoolingParameter* PROTOBUF_NULLABLE pooling_param_;
    ::caffe::WindowDataParameter* PROTOBUF_NULLABLE window_data_param_;
    ::caffe::PowerParameter* PROTOBUF_NULLABLE power_param_;
    ::caffe::MemoryDataParameter* PROTOBUF_NULLABLE memory_data_param_;
    ::caffe::ArgMaxParameter* PROTOBUF_NULLABLE argmax_param_;
    ::caffe::EltwiseParameter* PROTOBUF_NULLABLE eltwise_param_;
    ::caffe::ThresholdParameter* PROTOBUF_NULLABLE threshold_param_;
    ::caffe::DummyDataParameter* PROTOBUF_NULLABLE dummy_data_param_;
    ::caffe::AccuracyParameter* PROTOBUF_NULLABLE accuracy_param_;
    ::caffe::HingeLossParameter* PROTOBUF_NULLABLE hinge_loss_param_;
    ::caffe::ReLUParameter* PROTOBUF_NULLABLE relu_param_;
    ::caffe::SliceParameter* PROTOBUF_NULLABLE slice_param_;
    int type_;
    ::google::protobuf::RepeatedPtrField< ::caffe::NetStateRule > include_;
    ::google::protobuf::RepeatedPtrField< ::caffe::NetStateRule > exclude_;
    ::google::protobuf::RepeatedField<float> loss_weight_;
    ::google::protobuf::RepeatedPtrField<::std::string> param_;
    ::google::protobuf::RepeatedField<int> blob_share_mode_;
    ::caffe::MVNParameter* PROTOBUF_NULLABLE mvn_param_;
    ::caffe::TransformationParameter* PROTOBUF_NULLABLE transform_param_;
    ::caffe::TanHParameter* PROTOBUF_NULLABLE tanh_param_;
    ::caffe::SigmoidParameter* PROTOBUF_NULLABLE sigmoid_param_;
    ::caffe::SoftmaxParameter* PROTOBUF_NULLABLE softmax_param_;
    ::caffe::ContrastiveLossParameter* PROTOBUF_NULLABLE contrastive_loss_param_;
    ::caffe::ExpParameter* PROTOBUF_NULLABLE exp_param_;
    ::caffe::LossParameter* PROTOBUF_NULLABLE loss_param_;
    PROTOBUF_TSAN_DECLARE_MEMBER
  };
  union { Impl_ _impl_; };
  friend struct ::TableStruct_caffe_2eproto;
};
// -------------------------------------------------------------------

class  PROTOBUF_FUTURE_ADD_EARLY_WARN_UNUSED LayerParameter final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:caffe.LayerParameter) */ {
 public:
  inline LayerParameter() : LayerParameter(nullptr) {}
  ~LayerParameter() PROTOBUF_FINAL;

#if defined(PROTOBUF_CUSTOM_VTABLE)
  void operator delete(LayerParameter* PROTOBUF_NONNULL msg, ::std::destroying_delete_t) {
    SharedDtor(*msg);
    ::google::protobuf::internal::SizedDelete(msg, sizeof(LayerParameter));
  }
#endif

  template <typename = void>
  explicit constexpr LayerParameter(::google::protobuf::internal::ConstantInitialized,
                           const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL
                               class_data);

  inline LayerParameter(const LayerParameter& from) : LayerParameter(nullptr, from) {}
  inline LayerParameter(LayerParameter&& from) noexcept : LayerParameter(nullptr, ::std::move(from)) {}
  inline LayerParameter& operator=(const LayerParameter& from) {
    CopyFrom(from);
    return *this;
  }
  inline LayerParameter& operator=(LayerParameter&& from) noexcept {
    if (this == &from) return *this;
    if (::google::protobuf::internal::CanMoveWithInternalSwap(GetArena(), from.GetArena())) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  [[nodiscard]] inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  [[nodiscard]] inline ::google::protobuf::UnknownFieldSet* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL descriptor() {
    return GetDescriptor();
  }
  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL
  GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  [[nodiscard]] static const ::google::protobuf::Reflection* PROTOBUF_NONNULL GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  [[nodiscard]] static const LayerParameter& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<LayerParameter>(&LayerParameter_globals_);
  }
  static constexpr int kIndexInFileMessages = 11;
  friend void swap(LayerParameter& a, LayerParameter& b) { a.Swap(&b); }
  inline void Swap(LayerParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(LayerParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  [[nodiscard]] LayerParameter* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::Message::DefaultConstruct<LayerParameter>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const LayerParameter& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const LayerParameter& from) { LayerParameter::MergeImpl(*this, from); }

  private:
  static void MergeImpl(::google::protobuf::MessageLite& to_msg,
                        const ::google::protobuf::MessageLite& from_msg);

  public:
  [[nodiscard]] bool IsInitialized() const {
    return IsInitializedImpl(*this);
  }

  private:
  static bool IsInitializedImpl(const MessageLite& msg);

  public:
  ABSL_ATTRIBUTE_REINITIALIZES void Clear() PROTOBUF_FINAL;
  #if defined(PROTOBUF_CUSTOM_VTABLE)
  private:
  [[nodiscard]] static ::size_t ByteSizeLong(const ::google::protobuf::MessageLite& msg);
  [[nodiscard]] static ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      const ::google::protobuf::MessageLite& msg, ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream);

  public:
  [[nodiscard]] ::size_t ByteSizeLong() const { return ByteSizeLong(*this); }
  [[nodiscard]] ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const {
    return _InternalSerialize(*this, target, stream);
  }
  #else   // PROTOBUF_CUSTOM_VTABLE
  [[nodiscard]] ::size_t ByteSizeLong() const final;
  [[nodiscard]] ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const final;
  #endif  // PROTOBUF_CUSTOM_VTABLE
  [[nodiscard]] int GetCachedSize() const {
    return _impl_._cached_size_.Get();
  }

  private:
  void SharedCtor(::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  static void SharedDtor(MessageLite& self);
  void InternalSwap(LayerParameter* PROTOBUF_NONNULL other);
 private:
  template <typename T>
  friend ::absl::string_view(::google::protobuf::internal::GetAnyMessageName)();
  static ::absl::string_view FullMessageName() { return "caffe.LayerParameter"; }

  explicit LayerParameter(::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  LayerParameter(::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const LayerParameter& from);
  LayerParameter(
      ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, LayerParameter&& from) noexcept
      : LayerParameter(arena) {
    *this = ::std::move(from);
  }
  const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL GetClassData() const PROTOBUF_FINAL;
  static void* PROTOBUF_NONNULL PlacementNew_(
      const void* PROTOBUF_NONNULL, void* PROTOBUF_NONNULL mem,
      ::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  static constexpr auto InternalNewImpl_();

 public:
  static constexpr auto InternalGenerateClassData_(
      const MessageLite& prototype,
      const ::google::protobuf::internal::TcParseTableBase* PROTOBUF_NULLABLE tc_table = nullptr);

  [[nodiscard]] ::google::protobuf::Metadata GetMetadata() const;
  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------
  enum : int {
    kBottomFieldNumber = 3,
    kTopFieldNumber = 4,
    kLossWeightFieldNumber = 5,
    kParamFieldNumber = 6,
    kBlobsFieldNumber = 7,
    kIncludeFieldNumber = 8,
    kExcludeFieldNumber = 9,
    kPropagateDownFieldNumber = 11,
    kNameFieldNumber = 1,
    kTypeFieldNumber = 2,
    kBnParamFieldNumber = 45,
    kTransformParamFieldNumber = 100,
    kLossParamFieldNumber = 101,
    kAccuracyParamFieldNumber = 102,
    kArgmaxParamFieldNumber = 103,
    kConcatParamFieldNumber = 104,
    kContrastiveLossParamFieldNumber = 105,
    kConvolutionParamFieldNumber = 106,
    kDataParamFieldNumber = 107,
    kDropoutParamFieldNumber = 108,
    kEltwiseParamFieldNumber = 110,
    kExpParamFieldNumber = 111,
    kHdf5DataParamFieldNumber = 112,
    kHdf5OutputParamFieldNumber = 113,
    kHingeLossParamFieldNumber = 114,
    kImageDataParamFieldNumber = 115,
    kPhaseFieldNumber = 10,
    kDummyDataParamFieldNumber = 109,
    kInfogainLossParamFieldNumber = 116,
    kInnerProductParamFieldNumber = 117,
    kLrnParamFieldNumber = 118,
    kMemoryDataParamFieldNumber = 119,
    kMvnParamFieldNumber = 120,
    kPoolingParamFieldNumber = 121,
    kPowerParamFieldNumber = 122,
    kReluParamFieldNumber = 123,
    kSigmoidParamFieldNumber = 124,
    kSoftmaxParamFieldNumber = 125,
    kSliceParamFieldNumber = 126,
    kTanhParamFieldNumber = 127,
    kThresholdParamFieldNumber = 128,
    kWindowDataParamFieldNumber = 129,
    kPythonParamFieldNumber = 130,
    kPreluParamFieldNumber = 131,
    kSppParamFieldNumber = 132,
    kReshapeParamFieldNumber = 133,
    kLogParamFieldNumber = 134,
    kFlattenParamFieldNumber = 135,
    kReductionParamFieldNumber = 136,
    kEmbedParamFieldNumber = 137,
    kTileParamFieldNumber = 138,
    kBatchNormParamFieldNumber = 139,
    kEluParamFieldNumber = 140,
    kBiasParamFieldNumber = 141,
    kScaleParamFieldNumber = 142,
    kInputParamFieldNumber = 143,
    kCropParamFieldNumber = 144,
    kShuffleChannelParamFieldNumber = 145,
    kRecurrentParamFieldNumber = 146,
    kReorgParamFieldNumber = 147,
    kRoiAlignParamFieldNumber = 148,
    kPsroiPoolingParamFieldNumber = 149,
    kPermuteParamFieldNumber = 202,
    kPriorBoxParamFieldNumber = 203,
    kDetectionOutputParamFieldNumber = 204,
    kInterpParamFieldNumber = 205,
    kNormParamFieldNumber = 206,
    kYoloDetectionOutputParamFieldNumber = 601,
    kYolov3DetectionOutputParamFieldNumber = 603,
    kRoiPoolingParamFieldNumber = 8266711,
    kSmoothL1LossParamFieldNumber = 8266712,
  };
  // repeated string bottom = 3;
  [[nodiscard]] int bottom_size()
      const;
  private:
  int _internal_bottom_size() const;

  public:
  void clear_bottom() ;
  [[nodiscard]] const ::std::string& bottom(int index) const;
  ::std::string* PROTOBUF_NONNULL mutable_bottom(int index);
  template <typename Arg_ = const ::std::string&, typename... Args_>
  void set_bottom(int index, Arg_&& value, Args_... args);
  ::std::string* PROTOBUF_NONNULL add_bottom();
  template <typename Arg_ = const ::std::string&, typename... Args_>
  void add_bottom(Arg_&& value, Args_... args);
  [[nodiscard]] const
      ::google::protobuf::RepeatedPtrField<::std::string>&
      bottom() const;
  [[nodiscard]] ::google::protobuf::RepeatedPtrField<::std::string>*
      PROTOBUF_NONNULL
      mutable_bottom();

  private:
  const ::google::protobuf::RepeatedPtrField<::std::string>& _internal_bottom() const;
  ::google::protobuf::RepeatedPtrField<::std::string>* PROTOBUF_NONNULL _internal_mutable_bottom();

  public:
  // repeated string top = 4;
  [[nodiscard]] int top_size()
      const;
  private:
  int _internal_top_size() const;

  public:
  void clear_top() ;
  [[nodiscard]] const ::std::string& top(int index) const;
  ::std::string* PROTOBUF_NONNULL mutable_top(int index);
  template <typename Arg_ = const ::std::string&, typename... Args_>
  void set_top(int index, Arg_&& value, Args_... args);
  ::std::string* PROTOBUF_NONNULL add_top();
  template <typename Arg_ = const ::std::string&, typename... Args_>
  void add_top(Arg_&& value, Args_... args);
  [[nodiscard]] const
      ::google::protobuf::RepeatedPtrField<::std::string>&
      top() const;
  [[nodiscard]] ::google::protobuf::RepeatedPtrField<::std::string>*
      PROTOBUF_NONNULL
      mutable_top();

  private:
  const ::google::protobuf::RepeatedPtrField<::std::string>& _internal_top() const;
  ::google::protobuf::RepeatedPtrField<::std::string>* PROTOBUF_NONNULL _internal_mutable_top();

  public:
  // repeated float loss_weight = 5;
  [[nodiscard]] int loss_weight_size()
      const;
  private:
  int _internal_loss_weight_size() const;

  public:
  void clear_loss_weight() ;
  [[nodiscard]] float loss_weight(int index) const;
  void set_loss_weight(int index, float value);
  void add_loss_weight(float value);
  [[nodiscard]] const ::google::protobuf::RepeatedField<float>& loss_weight()
      const;
  ::google::protobuf::RepeatedField<float>* PROTOBUF_NONNULL mutable_loss_weight();

  private:
  const ::google::protobuf::RepeatedField<float>& _internal_loss_weight() const;
  ::google::protobuf::RepeatedField<float>* PROTOBUF_NONNULL _internal_mutable_loss_weight();

  public:
  // repeated .caffe.ParamSpec param = 6;
  [[nodiscard]] int param_size()
      const;
  private:
  int _internal_param_size() const;

  public:
  void clear_param() ;
  [[nodiscard]] const ::caffe::ParamSpec& param(int index) const;
  [[nodiscard]] ::caffe::ParamSpec* PROTOBUF_NONNULL mutable_param(int index);
  ::caffe::ParamSpec* PROTOBUF_NONNULL add_param();
  [[nodiscard]] const ::google::protobuf::RepeatedPtrField<::caffe::ParamSpec>&
  param() const;
  [[nodiscard]] ::google::protobuf::RepeatedPtrField<::caffe::ParamSpec>* PROTOBUF_NONNULL
  mutable_param();

  private:
  const ::google::protobuf::RepeatedPtrField<::caffe::ParamSpec>& _internal_param() const;
  ::google::protobuf::RepeatedPtrField<::caffe::ParamSpec>* PROTOBUF_NONNULL _internal_mutable_param();

  public:
  // repeated .caffe.BlobProto blobs = 7;
  [[nodiscard]] int blobs_size()
      const;
  private:
  int _internal_blobs_size() const;

  public:
  void clear_blobs() ;
  [[nodiscard]] const ::caffe::BlobProto& blobs(int index) const;
  [[nodiscard]] ::caffe::BlobProto* PROTOBUF_NONNULL mutable_blobs(int index);
  ::caffe::BlobProto* PROTOBUF_NONNULL add_blobs();
  [[nodiscard]] const ::google::protobuf::RepeatedPtrField<::caffe::BlobProto>&
  blobs() const;
  [[nodiscard]] ::google::protobuf::RepeatedPtrField<::caffe::BlobProto>* PROTOBUF_NONNULL
  mutable_blobs();

  private:
  const ::google::protobuf::RepeatedPtrField<::caffe::BlobProto>& _internal_blobs() const;
  ::google::protobuf::RepeatedPtrField<::caffe::BlobProto>* PROTOBUF_NONNULL _internal_mutable_blobs();

  public:
  // repeated .caffe.NetStateRule include = 8;
  [[nodiscard]] int include_size()
      const;
  private:
  int _internal_include_size() const;

  public:
  void clear_include() ;
  [[nodiscard]] const ::caffe::NetStateRule& include(int index) const;
  [[nodiscard]] ::caffe::NetStateRule* PROTOBUF_NONNULL mutable_include(int index);
  ::caffe::NetStateRule* PROTOBUF_NONNULL add_include();
  [[nodiscard]] const ::google::protobuf::RepeatedPtrField<::caffe::NetStateRule>&
  include() const;
  [[nodiscard]] ::google::protobuf::RepeatedPtrField<::caffe::NetStateRule>* PROTOBUF_NONNULL
  mutable_include();

  private:
  const ::google::protobuf::RepeatedPtrField<::caffe::NetStateRule>& _internal_include() const;
  ::google::protobuf::RepeatedPtrField<::caffe::NetStateRule>* PROTOBUF_NONNULL _internal_mutable_include();

  public:
  // repeated .caffe.NetStateRule exclude = 9;
  [[nodiscard]] int exclude_size()
      const;
  private:
  int _internal_exclude_size() const;

  public:
  void clear_exclude() ;
  [[nodiscard]] const ::caffe::NetStateRule& exclude(int index) const;
  [[nodiscard]] ::caffe::NetStateRule* PROTOBUF_NONNULL mutable_exclude(int index);
  ::caffe::NetStateRule* PROTOBUF_NONNULL add_exclude();
  [[nodiscard]] const ::google::protobuf::RepeatedPtrField<::caffe::NetStateRule>&
  exclude() const;
  [[nodiscard]] ::google::protobuf::RepeatedPtrField<::caffe::NetStateRule>* PROTOBUF_NONNULL
  mutable_exclude();

  private:
  const ::google::protobuf::RepeatedPtrField<::caffe::NetStateRule>& _internal_exclude() const;
  ::google::protobuf::RepeatedPtrField<::caffe::NetStateRule>* PROTOBUF_NONNULL _internal_mutable_exclude();

  public:
  // repeated bool propagate_down = 11;
  [[nodiscard]] int propagate_down_size()
      const;
  private:
  int _internal_propagate_down_size() const;

  public:
  void clear_propagate_down() ;
  [[nodiscard]] bool propagate_down(int index) const;
  void set_propagate_down(int index, bool value);
  void add_propagate_down(bool value);
  [[nodiscard]] const ::google::protobuf::RepeatedField<bool>& propagate_down()
      const;
  ::google::protobuf::RepeatedField<bool>* PROTOBUF_NONNULL mutable_propagate_down();

  private:
  const ::google::protobuf::RepeatedField<bool>& _internal_propagate_down() const;
  ::google::protobuf::RepeatedField<bool>* PROTOBUF_NONNULL _internal_mutable_propagate_down();

  public:
  // optional string name = 1;
  [[nodiscard]] bool has_name()
      const;
  void clear_name() ;
  [[nodiscard]] const ::std::string& name() const;
  template <typename Arg_ = const ::std::string&, typename... Args_>
  void set_name(Arg_&& arg, Args_... args);
  ::std::string* PROTOBUF_NONNULL mutable_name();
  [[nodiscard]] ::std::string* PROTOBUF_NULLABLE release_name();
  void set_allocated_name(::std::string* PROTOBUF_NULLABLE value);

  private:
  const ::std::string& _internal_name() const;
  PROTOBUF_ALWAYS_INLINE void _internal_set_name(const ::std::string& value);
  ::std::string* PROTOBUF_NONNULL _internal_mutable_name();

  public:
  // optional string type = 2;
  [[nodiscard]] bool has_type()
      const;
  void clear_type() ;
  [[nodiscard]] const ::std::string& type() const;
  template <typename Arg_ = const ::std::string&, typename... Args_>
  void set_type(Arg_&& arg, Args_... args);
  ::std::string* PROTOBUF_NONNULL mutable_type();
  [[nodiscard]] ::std::string* PROTOBUF_NULLABLE release_type();
  void set_allocated_type(::std::string* PROTOBUF_NULLABLE value);

  private:
  const ::std::string& _internal_type() const;
  PROTOBUF_ALWAYS_INLINE void _internal_set_type(const ::std::string& value);
  ::std::string* PROTOBUF_NONNULL _internal_mutable_type();

  public:
  // optional .caffe.BNParameter bn_param = 45;
  [[nodiscard]] bool has_bn_param()
      const;
  void clear_bn_param() ;
  [[nodiscard]] const ::caffe::BNParameter& bn_param() const;
  [[nodiscard]] ::caffe::BNParameter* PROTOBUF_NULLABLE release_bn_param();
  ::caffe::BNParameter* PROTOBUF_NONNULL mutable_bn_param();
  void set_allocated_bn_param(::caffe::BNParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_bn_param(::caffe::BNParameter* PROTOBUF_NULLABLE value);
  ::caffe::BNParameter* PROTOBUF_NULLABLE unsafe_arena_release_bn_param();

  private:
  const ::caffe::BNParameter& _internal_bn_param() const;
  ::caffe::BNParameter* PROTOBUF_NONNULL _internal_mutable_bn_param();

  public:
  // optional .caffe.TransformationParameter transform_param = 100;
  [[nodiscard]] bool has_transform_param()
      const;
  void clear_transform_param() ;
  [[nodiscard]] const ::caffe::TransformationParameter& transform_param() const;
  [[nodiscard]] ::caffe::TransformationParameter* PROTOBUF_NULLABLE release_transform_param();
  ::caffe::TransformationParameter* PROTOBUF_NONNULL mutable_transform_param();
  void set_allocated_transform_param(::caffe::TransformationParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_transform_param(::caffe::TransformationParameter* PROTOBUF_NULLABLE value);
  ::caffe::TransformationParameter* PROTOBUF_NULLABLE unsafe_arena_release_transform_param();

  private:
  const ::caffe::TransformationParameter& _internal_transform_param() const;
  ::caffe::TransformationParameter* PROTOBUF_NONNULL _internal_mutable_transform_param();

  public:
  // optional .caffe.LossParameter loss_param = 101;
  [[nodiscard]] bool has_loss_param()
      const;
  void clear_loss_param() ;
  [[nodiscard]] const ::caffe::LossParameter& loss_param() const;
  [[nodiscard]] ::caffe::LossParameter* PROTOBUF_NULLABLE release_loss_param();
  ::caffe::LossParameter* PROTOBUF_NONNULL mutable_loss_param();
  void set_allocated_loss_param(::caffe::LossParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_loss_param(::caffe::LossParameter* PROTOBUF_NULLABLE value);
  ::caffe::LossParameter* PROTOBUF_NULLABLE unsafe_arena_release_loss_param();

  private:
  const ::caffe::LossParameter& _internal_loss_param() const;
  ::caffe::LossParameter* PROTOBUF_NONNULL _internal_mutable_loss_param();

  public:
  // optional .caffe.AccuracyParameter accuracy_param = 102;
  [[nodiscard]] bool has_accuracy_param()
      const;
  void clear_accuracy_param() ;
  [[nodiscard]] const ::caffe::AccuracyParameter& accuracy_param() const;
  [[nodiscard]] ::caffe::AccuracyParameter* PROTOBUF_NULLABLE release_accuracy_param();
  ::caffe::AccuracyParameter* PROTOBUF_NONNULL mutable_accuracy_param();
  void set_allocated_accuracy_param(::caffe::AccuracyParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_accuracy_param(::caffe::AccuracyParameter* PROTOBUF_NULLABLE value);
  ::caffe::AccuracyParameter* PROTOBUF_NULLABLE unsafe_arena_release_accuracy_param();

  private:
  const ::caffe::AccuracyParameter& _internal_accuracy_param() const;
  ::caffe::AccuracyParameter* PROTOBUF_NONNULL _internal_mutable_accuracy_param();

  public:
  // optional .caffe.ArgMaxParameter argmax_param = 103;
  [[nodiscard]] bool has_argmax_param()
      const;
  void clear_argmax_param() ;
  [[nodiscard]] const ::caffe::ArgMaxParameter& argmax_param() const;
  [[nodiscard]] ::caffe::ArgMaxParameter* PROTOBUF_NULLABLE release_argmax_param();
  ::caffe::ArgMaxParameter* PROTOBUF_NONNULL mutable_argmax_param();
  void set_allocated_argmax_param(::caffe::ArgMaxParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_argmax_param(::caffe::ArgMaxParameter* PROTOBUF_NULLABLE value);
  ::caffe::ArgMaxParameter* PROTOBUF_NULLABLE unsafe_arena_release_argmax_param();

  private:
  const ::caffe::ArgMaxParameter& _internal_argmax_param() const;
  ::caffe::ArgMaxParameter* PROTOBUF_NONNULL _internal_mutable_argmax_param();

  public:
  // optional .caffe.ConcatParameter concat_param = 104;
  [[nodiscard]] bool has_concat_param()
      const;
  void clear_concat_param() ;
  [[nodiscard]] const ::caffe::ConcatParameter& concat_param() const;
  [[nodiscard]] ::caffe::ConcatParameter* PROTOBUF_NULLABLE release_concat_param();
  ::caffe::ConcatParameter* PROTOBUF_NONNULL mutable_concat_param();
  void set_allocated_concat_param(::caffe::ConcatParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_concat_param(::caffe::ConcatParameter* PROTOBUF_NULLABLE value);
  ::caffe::ConcatParameter* PROTOBUF_NULLABLE unsafe_arena_release_concat_param();

  private:
  const ::caffe::ConcatParameter& _internal_concat_param() const;
  ::caffe::ConcatParameter* PROTOBUF_NONNULL _internal_mutable_concat_param();

  public:
  // optional .caffe.ContrastiveLossParameter contrastive_loss_param = 105;
  [[nodiscard]] bool has_contrastive_loss_param()
      const;
  void clear_contrastive_loss_param() ;
  [[nodiscard]] const ::caffe::ContrastiveLossParameter& contrastive_loss_param() const;
  [[nodiscard]] ::caffe::ContrastiveLossParameter* PROTOBUF_NULLABLE release_contrastive_loss_param();
  ::caffe::ContrastiveLossParameter* PROTOBUF_NONNULL mutable_contrastive_loss_param();
  void set_allocated_contrastive_loss_param(::caffe::ContrastiveLossParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_contrastive_loss_param(::caffe::ContrastiveLossParameter* PROTOBUF_NULLABLE value);
  ::caffe::ContrastiveLossParameter* PROTOBUF_NULLABLE unsafe_arena_release_contrastive_loss_param();

  private:
  const ::caffe::ContrastiveLossParameter& _internal_contrastive_loss_param() const;
  ::caffe::ContrastiveLossParameter* PROTOBUF_NONNULL _internal_mutable_contrastive_loss_param();

  public:
  // optional .caffe.ConvolutionParameter convolution_param = 106;
  [[nodiscard]] bool has_convolution_param()
      const;
  void clear_convolution_param() ;
  [[nodiscard]] const ::caffe::ConvolutionParameter& convolution_param() const;
  [[nodiscard]] ::caffe::ConvolutionParameter* PROTOBUF_NULLABLE release_convolution_param();
  ::caffe::ConvolutionParameter* PROTOBUF_NONNULL mutable_convolution_param();
  void set_allocated_convolution_param(::caffe::ConvolutionParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_convolution_param(::caffe::ConvolutionParameter* PROTOBUF_NULLABLE value);
  ::caffe::ConvolutionParameter* PROTOBUF_NULLABLE unsafe_arena_release_convolution_param();

  private:
  const ::caffe::ConvolutionParameter& _internal_convolution_param() const;
  ::caffe::ConvolutionParameter* PROTOBUF_NONNULL _internal_mutable_convolution_param();

  public:
  // optional .caffe.DataParameter data_param = 107;
  [[nodiscard]] bool has_data_param()
      const;
  void clear_data_param() ;
  [[nodiscard]] const ::caffe::DataParameter& data_param() const;
  [[nodiscard]] ::caffe::DataParameter* PROTOBUF_NULLABLE release_data_param();
  ::caffe::DataParameter* PROTOBUF_NONNULL mutable_data_param();
  void set_allocated_data_param(::caffe::DataParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_data_param(::caffe::DataParameter* PROTOBUF_NULLABLE value);
  ::caffe::DataParameter* PROTOBUF_NULLABLE unsafe_arena_release_data_param();

  private:
  const ::caffe::DataParameter& _internal_data_param() const;
  ::caffe::DataParameter* PROTOBUF_NONNULL _internal_mutable_data_param();

  public:
  // optional .caffe.DropoutParameter dropout_param = 108;
  [[nodiscard]] bool has_dropout_param()
      const;
  void clear_dropout_param() ;
  [[nodiscard]] const ::caffe::DropoutParameter& dropout_param() const;
  [[nodiscard]] ::caffe::DropoutParameter* PROTOBUF_NULLABLE release_dropout_param();
  ::caffe::DropoutParameter* PROTOBUF_NONNULL mutable_dropout_param();
  void set_allocated_dropout_param(::caffe::DropoutParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_dropout_param(::caffe::DropoutParameter* PROTOBUF_NULLABLE value);
  ::caffe::DropoutParameter* PROTOBUF_NULLABLE unsafe_arena_release_dropout_param();

  private:
  const ::caffe::DropoutParameter& _internal_dropout_param() const;
  ::caffe::DropoutParameter* PROTOBUF_NONNULL _internal_mutable_dropout_param();

  public:
  // optional .caffe.EltwiseParameter eltwise_param = 110;
  [[nodiscard]] bool has_eltwise_param()
      const;
  void clear_eltwise_param() ;
  [[nodiscard]] const ::caffe::EltwiseParameter& eltwise_param() const;
  [[nodiscard]] ::caffe::EltwiseParameter* PROTOBUF_NULLABLE release_eltwise_param();
  ::caffe::EltwiseParameter* PROTOBUF_NONNULL mutable_eltwise_param();
  void set_allocated_eltwise_param(::caffe::EltwiseParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_eltwise_param(::caffe::EltwiseParameter* PROTOBUF_NULLABLE value);
  ::caffe::EltwiseParameter* PROTOBUF_NULLABLE unsafe_arena_release_eltwise_param();

  private:
  const ::caffe::EltwiseParameter& _internal_eltwise_param() const;
  ::caffe::EltwiseParameter* PROTOBUF_NONNULL _internal_mutable_eltwise_param();

  public:
  // optional .caffe.ExpParameter exp_param = 111;
  [[nodiscard]] bool has_exp_param()
      const;
  void clear_exp_param() ;
  [[nodiscard]] const ::caffe::ExpParameter& exp_param() const;
  [[nodiscard]] ::caffe::ExpParameter* PROTOBUF_NULLABLE release_exp_param();
  ::caffe::ExpParameter* PROTOBUF_NONNULL mutable_exp_param();
  void set_allocated_exp_param(::caffe::ExpParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_exp_param(::caffe::ExpParameter* PROTOBUF_NULLABLE value);
  ::caffe::ExpParameter* PROTOBUF_NULLABLE unsafe_arena_release_exp_param();

  private:
  const ::caffe::ExpParameter& _internal_exp_param() const;
  ::caffe::ExpParameter* PROTOBUF_NONNULL _internal_mutable_exp_param();

  public:
  // optional .caffe.HDF5DataParameter hdf5_data_param = 112;
  [[nodiscard]] bool has_hdf5_data_param()
      const;
  void clear_hdf5_data_param() ;
  [[nodiscard]] const ::caffe::HDF5DataParameter& hdf5_data_param() const;
  [[nodiscard]] ::caffe::HDF5DataParameter* PROTOBUF_NULLABLE release_hdf5_data_param();
  ::caffe::HDF5DataParameter* PROTOBUF_NONNULL mutable_hdf5_data_param();
  void set_allocated_hdf5_data_param(::caffe::HDF5DataParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_hdf5_data_param(::caffe::HDF5DataParameter* PROTOBUF_NULLABLE value);
  ::caffe::HDF5DataParameter* PROTOBUF_NULLABLE unsafe_arena_release_hdf5_data_param();

  private:
  const ::caffe::HDF5DataParameter& _internal_hdf5_data_param() const;
  ::caffe::HDF5DataParameter* PROTOBUF_NONNULL _internal_mutable_hdf5_data_param();

  public:
  // optional .caffe.HDF5OutputParameter hdf5_output_param = 113;
  [[nodiscard]] bool has_hdf5_output_param()
      const;
  void clear_hdf5_output_param() ;
  [[nodiscard]] const ::caffe::HDF5OutputParameter& hdf5_output_param() const;
  [[nodiscard]] ::caffe::HDF5OutputParameter* PROTOBUF_NULLABLE release_hdf5_output_param();
  ::caffe::HDF5OutputParameter* PROTOBUF_NONNULL mutable_hdf5_output_param();
  void set_allocated_hdf5_output_param(::caffe::HDF5OutputParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_hdf5_output_param(::caffe::HDF5OutputParameter* PROTOBUF_NULLABLE value);
  ::caffe::HDF5OutputParameter* PROTOBUF_NULLABLE unsafe_arena_release_hdf5_output_param();

  private:
  const ::caffe::HDF5OutputParameter& _internal_hdf5_output_param() const;
  ::caffe::HDF5OutputParameter* PROTOBUF_NONNULL _internal_mutable_hdf5_output_param();

  public:
  // optional .caffe.HingeLossParameter hinge_loss_param = 114;
  [[nodiscard]] bool has_hinge_loss_param()
      const;
  void clear_hinge_loss_param() ;
  [[nodiscard]] const ::caffe::HingeLossParameter& hinge_loss_param() const;
  [[nodiscard]] ::caffe::HingeLossParameter* PROTOBUF_NULLABLE release_hinge_loss_param();
  ::caffe::HingeLossParameter* PROTOBUF_NONNULL mutable_hinge_loss_param();
  void set_allocated_hinge_loss_param(::caffe::HingeLossParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_hinge_loss_param(::caffe::HingeLossParameter* PROTOBUF_NULLABLE value);
  ::caffe::HingeLossParameter* PROTOBUF_NULLABLE unsafe_arena_release_hinge_loss_param();

  private:
  const ::caffe::HingeLossParameter& _internal_hinge_loss_param() const;
  ::caffe::HingeLossParameter* PROTOBUF_NONNULL _internal_mutable_hinge_loss_param();

  public:
  // optional .caffe.ImageDataParameter image_data_param = 115;
  [[nodiscard]] bool has_image_data_param()
      const;
  void clear_image_data_param() ;
  [[nodiscard]] const ::caffe::ImageDataParameter& image_data_param() const;
  [[nodiscard]] ::caffe::ImageDataParameter* PROTOBUF_NULLABLE release_image_data_param();
  ::caffe::ImageDataParameter* PROTOBUF_NONNULL mutable_image_data_param();
  void set_allocated_image_data_param(::caffe::ImageDataParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_image_data_param(::caffe::ImageDataParameter* PROTOBUF_NULLABLE value);
  ::caffe::ImageDataParameter* PROTOBUF_NULLABLE unsafe_arena_release_image_data_param();

  private:
  const ::caffe::ImageDataParameter& _internal_image_data_param() const;
  ::caffe::ImageDataParameter* PROTOBUF_NONNULL _internal_mutable_image_data_param();

  public:
  // optional .caffe.Phase phase = 10;
  [[nodiscard]] bool has_phase()
      const;
  void clear_phase() ;
  [[nodiscard]] ::caffe::Phase phase() const;
  void set_phase(::caffe::Phase value);

  private:
  ::caffe::Phase _internal_phase() const;
  void _internal_set_phase(::caffe::Phase value);

  public:
  // optional .caffe.DummyDataParameter dummy_data_param = 109;
  [[nodiscard]] bool has_dummy_data_param()
      const;
  void clear_dummy_data_param() ;
  [[nodiscard]] const ::caffe::DummyDataParameter& dummy_data_param() const;
  [[nodiscard]] ::caffe::DummyDataParameter* PROTOBUF_NULLABLE release_dummy_data_param();
  ::caffe::DummyDataParameter* PROTOBUF_NONNULL mutable_dummy_data_param();
  void set_allocated_dummy_data_param(::caffe::DummyDataParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_dummy_data_param(::caffe::DummyDataParameter* PROTOBUF_NULLABLE value);
  ::caffe::DummyDataParameter* PROTOBUF_NULLABLE unsafe_arena_release_dummy_data_param();

  private:
  const ::caffe::DummyDataParameter& _internal_dummy_data_param() const;
  ::caffe::DummyDataParameter* PROTOBUF_NONNULL _internal_mutable_dummy_data_param();

  public:
  // optional .caffe.InfogainLossParameter infogain_loss_param = 116;
  [[nodiscard]] bool has_infogain_loss_param()
      const;
  void clear_infogain_loss_param() ;
  [[nodiscard]] const ::caffe::InfogainLossParameter& infogain_loss_param() const;
  [[nodiscard]] ::caffe::InfogainLossParameter* PROTOBUF_NULLABLE release_infogain_loss_param();
  ::caffe::InfogainLossParameter* PROTOBUF_NONNULL mutable_infogain_loss_param();
  void set_allocated_infogain_loss_param(::caffe::InfogainLossParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_infogain_loss_param(::caffe::InfogainLossParameter* PROTOBUF_NULLABLE value);
  ::caffe::InfogainLossParameter* PROTOBUF_NULLABLE unsafe_arena_release_infogain_loss_param();

  private:
  const ::caffe::InfogainLossParameter& _internal_infogain_loss_param() const;
  ::caffe::InfogainLossParameter* PROTOBUF_NONNULL _internal_mutable_infogain_loss_param();

  public:
  // optional .caffe.InnerProductParameter inner_product_param = 117;
  [[nodiscard]] bool has_inner_product_param()
      const;
  void clear_inner_product_param() ;
  [[nodiscard]] const ::caffe::InnerProductParameter& inner_product_param() const;
  [[nodiscard]] ::caffe::InnerProductParameter* PROTOBUF_NULLABLE release_inner_product_param();
  ::caffe::InnerProductParameter* PROTOBUF_NONNULL mutable_inner_product_param();
  void set_allocated_inner_product_param(::caffe::InnerProductParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_inner_product_param(::caffe::InnerProductParameter* PROTOBUF_NULLABLE value);
  ::caffe::InnerProductParameter* PROTOBUF_NULLABLE unsafe_arena_release_inner_product_param();

  private:
  const ::caffe::InnerProductParameter& _internal_inner_product_param() const;
  ::caffe::InnerProductParameter* PROTOBUF_NONNULL _internal_mutable_inner_product_param();

  public:
  // optional .caffe.LRNParameter lrn_param = 118;
  [[nodiscard]] bool has_lrn_param()
      const;
  void clear_lrn_param() ;
  [[nodiscard]] const ::caffe::LRNParameter& lrn_param() const;
  [[nodiscard]] ::caffe::LRNParameter* PROTOBUF_NULLABLE release_lrn_param();
  ::caffe::LRNParameter* PROTOBUF_NONNULL mutable_lrn_param();
  void set_allocated_lrn_param(::caffe::LRNParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_lrn_param(::caffe::LRNParameter* PROTOBUF_NULLABLE value);
  ::caffe::LRNParameter* PROTOBUF_NULLABLE unsafe_arena_release_lrn_param();

  private:
  const ::caffe::LRNParameter& _internal_lrn_param() const;
  ::caffe::LRNParameter* PROTOBUF_NONNULL _internal_mutable_lrn_param();

  public:
  // optional .caffe.MemoryDataParameter memory_data_param = 119;
  [[nodiscard]] bool has_memory_data_param()
      const;
  void clear_memory_data_param() ;
  [[nodiscard]] const ::caffe::MemoryDataParameter& memory_data_param() const;
  [[nodiscard]] ::caffe::MemoryDataParameter* PROTOBUF_NULLABLE release_memory_data_param();
  ::caffe::MemoryDataParameter* PROTOBUF_NONNULL mutable_memory_data_param();
  void set_allocated_memory_data_param(::caffe::MemoryDataParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_memory_data_param(::caffe::MemoryDataParameter* PROTOBUF_NULLABLE value);
  ::caffe::MemoryDataParameter* PROTOBUF_NULLABLE unsafe_arena_release_memory_data_param();

  private:
  const ::caffe::MemoryDataParameter& _internal_memory_data_param() const;
  ::caffe::MemoryDataParameter* PROTOBUF_NONNULL _internal_mutable_memory_data_param();

  public:
  // optional .caffe.MVNParameter mvn_param = 120;
  [[nodiscard]] bool has_mvn_param()
      const;
  void clear_mvn_param() ;
  [[nodiscard]] const ::caffe::MVNParameter& mvn_param() const;
  [[nodiscard]] ::caffe::MVNParameter* PROTOBUF_NULLABLE release_mvn_param();
  ::caffe::MVNParameter* PROTOBUF_NONNULL mutable_mvn_param();
  void set_allocated_mvn_param(::caffe::MVNParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_mvn_param(::caffe::MVNParameter* PROTOBUF_NULLABLE value);
  ::caffe::MVNParameter* PROTOBUF_NULLABLE unsafe_arena_release_mvn_param();

  private:
  const ::caffe::MVNParameter& _internal_mvn_param() const;
  ::caffe::MVNParameter* PROTOBUF_NONNULL _internal_mutable_mvn_param();

  public:
  // optional .caffe.PoolingParameter pooling_param = 121;
  [[nodiscard]] bool has_pooling_param()
      const;
  void clear_pooling_param() ;
  [[nodiscard]] const ::caffe::PoolingParameter& pooling_param() const;
  [[nodiscard]] ::caffe::PoolingParameter* PROTOBUF_NULLABLE release_pooling_param();
  ::caffe::PoolingParameter* PROTOBUF_NONNULL mutable_pooling_param();
  void set_allocated_pooling_param(::caffe::PoolingParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_pooling_param(::caffe::PoolingParameter* PROTOBUF_NULLABLE value);
  ::caffe::PoolingParameter* PROTOBUF_NULLABLE unsafe_arena_release_pooling_param();

  private:
  const ::caffe::PoolingParameter& _internal_pooling_param() const;
  ::caffe::PoolingParameter* PROTOBUF_NONNULL _internal_mutable_pooling_param();

  public:
  // optional .caffe.PowerParameter power_param = 122;
  [[nodiscard]] bool has_power_param()
      const;
  void clear_power_param() ;
  [[nodiscard]] const ::caffe::PowerParameter& power_param() const;
  [[nodiscard]] ::caffe::PowerParameter* PROTOBUF_NULLABLE release_power_param();
  ::caffe::PowerParameter* PROTOBUF_NONNULL mutable_power_param();
  void set_allocated_power_param(::caffe::PowerParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_power_param(::caffe::PowerParameter* PROTOBUF_NULLABLE value);
  ::caffe::PowerParameter* PROTOBUF_NULLABLE unsafe_arena_release_power_param();

  private:
  const ::caffe::PowerParameter& _internal_power_param() const;
  ::caffe::PowerParameter* PROTOBUF_NONNULL _internal_mutable_power_param();

  public:
  // optional .caffe.ReLUParameter relu_param = 123;
  [[nodiscard]] bool has_relu_param()
      const;
  void clear_relu_param() ;
  [[nodiscard]] const ::caffe::ReLUParameter& relu_param() const;
  [[nodiscard]] ::caffe::ReLUParameter* PROTOBUF_NULLABLE release_relu_param();
  ::caffe::ReLUParameter* PROTOBUF_NONNULL mutable_relu_param();
  void set_allocated_relu_param(::caffe::ReLUParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_relu_param(::caffe::ReLUParameter* PROTOBUF_NULLABLE value);
  ::caffe::ReLUParameter* PROTOBUF_NULLABLE unsafe_arena_release_relu_param();

  private:
  const ::caffe::ReLUParameter& _internal_relu_param() const;
  ::caffe::ReLUParameter* PROTOBUF_NONNULL _internal_mutable_relu_param();

  public:
  // optional .caffe.SigmoidParameter sigmoid_param = 124;
  [[nodiscard]] bool has_sigmoid_param()
      const;
  void clear_sigmoid_param() ;
  [[nodiscard]] const ::caffe::SigmoidParameter& sigmoid_param() const;
  [[nodiscard]] ::caffe::SigmoidParameter* PROTOBUF_NULLABLE release_sigmoid_param();
  ::caffe::SigmoidParameter* PROTOBUF_NONNULL mutable_sigmoid_param();
  void set_allocated_sigmoid_param(::caffe::SigmoidParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_sigmoid_param(::caffe::SigmoidParameter* PROTOBUF_NULLABLE value);
  ::caffe::SigmoidParameter* PROTOBUF_NULLABLE unsafe_arena_release_sigmoid_param();

  private:
  const ::caffe::SigmoidParameter& _internal_sigmoid_param() const;
  ::caffe::SigmoidParameter* PROTOBUF_NONNULL _internal_mutable_sigmoid_param();

  public:
  // optional .caffe.SoftmaxParameter softmax_param = 125;
  [[nodiscard]] bool has_softmax_param()
      const;
  void clear_softmax_param() ;
  [[nodiscard]] const ::caffe::SoftmaxParameter& softmax_param() const;
  [[nodiscard]] ::caffe::SoftmaxParameter* PROTOBUF_NULLABLE release_softmax_param();
  ::caffe::SoftmaxParameter* PROTOBUF_NONNULL mutable_softmax_param();
  void set_allocated_softmax_param(::caffe::SoftmaxParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_softmax_param(::caffe::SoftmaxParameter* PROTOBUF_NULLABLE value);
  ::caffe::SoftmaxParameter* PROTOBUF_NULLABLE unsafe_arena_release_softmax_param();

  private:
  const ::caffe::SoftmaxParameter& _internal_softmax_param() const;
  ::caffe::SoftmaxParameter* PROTOBUF_NONNULL _internal_mutable_softmax_param();

  public:
  // optional .caffe.SliceParameter slice_param = 126;
  [[nodiscard]] bool has_slice_param()
      const;
  void clear_slice_param() ;
  [[nodiscard]] const ::caffe::SliceParameter& slice_param() const;
  [[nodiscard]] ::caffe::SliceParameter* PROTOBUF_NULLABLE release_slice_param();
  ::caffe::SliceParameter* PROTOBUF_NONNULL mutable_slice_param();
  void set_allocated_slice_param(::caffe::SliceParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_slice_param(::caffe::SliceParameter* PROTOBUF_NULLABLE value);
  ::caffe::SliceParameter* PROTOBUF_NULLABLE unsafe_arena_release_slice_param();

  private:
  const ::caffe::SliceParameter& _internal_slice_param() const;
  ::caffe::SliceParameter* PROTOBUF_NONNULL _internal_mutable_slice_param();

  public:
  // optional .caffe.TanHParameter tanh_param = 127;
  [[nodiscard]] bool has_tanh_param()
      const;
  void clear_tanh_param() ;
  [[nodiscard]] const ::caffe::TanHParameter& tanh_param() const;
  [[nodiscard]] ::caffe::TanHParameter* PROTOBUF_NULLABLE release_tanh_param();
  ::caffe::TanHParameter* PROTOBUF_NONNULL mutable_tanh_param();
  void set_allocated_tanh_param(::caffe::TanHParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_tanh_param(::caffe::TanHParameter* PROTOBUF_NULLABLE value);
  ::caffe::TanHParameter* PROTOBUF_NULLABLE unsafe_arena_release_tanh_param();

  private:
  const ::caffe::TanHParameter& _internal_tanh_param() const;
  ::caffe::TanHParameter* PROTOBUF_NONNULL _internal_mutable_tanh_param();

  public:
  // optional .caffe.ThresholdParameter threshold_param = 128;
  [[nodiscard]] bool has_threshold_param()
      const;
  void clear_threshold_param() ;
  [[nodiscard]] const ::caffe::ThresholdParameter& threshold_param() const;
  [[nodiscard]] ::caffe::ThresholdParameter* PROTOBUF_NULLABLE release_threshold_param();
  ::caffe::ThresholdParameter* PROTOBUF_NONNULL mutable_threshold_param();
  void set_allocated_threshold_param(::caffe::ThresholdParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_threshold_param(::caffe::ThresholdParameter* PROTOBUF_NULLABLE value);
  ::caffe::ThresholdParameter* PROTOBUF_NULLABLE unsafe_arena_release_threshold_param();

  private:
  const ::caffe::ThresholdParameter& _internal_threshold_param() const;
  ::caffe::ThresholdParameter* PROTOBUF_NONNULL _internal_mutable_threshold_param();

  public:
  // optional .caffe.WindowDataParameter window_data_param = 129;
  [[nodiscard]] bool has_window_data_param()
      const;
  void clear_window_data_param() ;
  [[nodiscard]] const ::caffe::WindowDataParameter& window_data_param() const;
  [[nodiscard]] ::caffe::WindowDataParameter* PROTOBUF_NULLABLE release_window_data_param();
  ::caffe::WindowDataParameter* PROTOBUF_NONNULL mutable_window_data_param();
  void set_allocated_window_data_param(::caffe::WindowDataParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_window_data_param(::caffe::WindowDataParameter* PROTOBUF_NULLABLE value);
  ::caffe::WindowDataParameter* PROTOBUF_NULLABLE unsafe_arena_release_window_data_param();

  private:
  const ::caffe::WindowDataParameter& _internal_window_data_param() const;
  ::caffe::WindowDataParameter* PROTOBUF_NONNULL _internal_mutable_window_data_param();

  public:
  // optional .caffe.PythonParameter python_param = 130;
  [[nodiscard]] bool has_python_param()
      const;
  void clear_python_param() ;
  [[nodiscard]] const ::caffe::PythonParameter& python_param() const;
  [[nodiscard]] ::caffe::PythonParameter* PROTOBUF_NULLABLE release_python_param();
  ::caffe::PythonParameter* PROTOBUF_NONNULL mutable_python_param();
  void set_allocated_python_param(::caffe::PythonParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_python_param(::caffe::PythonParameter* PROTOBUF_NULLABLE value);
  ::caffe::PythonParameter* PROTOBUF_NULLABLE unsafe_arena_release_python_param();

  private:
  const ::caffe::PythonParameter& _internal_python_param() const;
  ::caffe::PythonParameter* PROTOBUF_NONNULL _internal_mutable_python_param();

  public:
  // optional .caffe.PReLUParameter prelu_param = 131;
  [[nodiscard]] bool has_prelu_param()
      const;
  void clear_prelu_param() ;
  [[nodiscard]] const ::caffe::PReLUParameter& prelu_param() const;
  [[nodiscard]] ::caffe::PReLUParameter* PROTOBUF_NULLABLE release_prelu_param();
  ::caffe::PReLUParameter* PROTOBUF_NONNULL mutable_prelu_param();
  void set_allocated_prelu_param(::caffe::PReLUParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_prelu_param(::caffe::PReLUParameter* PROTOBUF_NULLABLE value);
  ::caffe::PReLUParameter* PROTOBUF_NULLABLE unsafe_arena_release_prelu_param();

  private:
  const ::caffe::PReLUParameter& _internal_prelu_param() const;
  ::caffe::PReLUParameter* PROTOBUF_NONNULL _internal_mutable_prelu_param();

  public:
  // optional .caffe.SPPParameter spp_param = 132;
  [[nodiscard]] bool has_spp_param()
      const;
  void clear_spp_param() ;
  [[nodiscard]] const ::caffe::SPPParameter& spp_param() const;
  [[nodiscard]] ::caffe::SPPParameter* PROTOBUF_NULLABLE release_spp_param();
  ::caffe::SPPParameter* PROTOBUF_NONNULL mutable_spp_param();
  void set_allocated_spp_param(::caffe::SPPParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_spp_param(::caffe::SPPParameter* PROTOBUF_NULLABLE value);
  ::caffe::SPPParameter* PROTOBUF_NULLABLE unsafe_arena_release_spp_param();

  private:
  const ::caffe::SPPParameter& _internal_spp_param() const;
  ::caffe::SPPParameter* PROTOBUF_NONNULL _internal_mutable_spp_param();

  public:
  // optional .caffe.ReshapeParameter reshape_param = 133;
  [[nodiscard]] bool has_reshape_param()
      const;
  void clear_reshape_param() ;
  [[nodiscard]] const ::caffe::ReshapeParameter& reshape_param() const;
  [[nodiscard]] ::caffe::ReshapeParameter* PROTOBUF_NULLABLE release_reshape_param();
  ::caffe::ReshapeParameter* PROTOBUF_NONNULL mutable_reshape_param();
  void set_allocated_reshape_param(::caffe::ReshapeParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_reshape_param(::caffe::ReshapeParameter* PROTOBUF_NULLABLE value);
  ::caffe::ReshapeParameter* PROTOBUF_NULLABLE unsafe_arena_release_reshape_param();

  private:
  const ::caffe::ReshapeParameter& _internal_reshape_param() const;
  ::caffe::ReshapeParameter* PROTOBUF_NONNULL _internal_mutable_reshape_param();

  public:
  // optional .caffe.LogParameter log_param = 134;
  [[nodiscard]] bool has_log_param()
      const;
  void clear_log_param() ;
  [[nodiscard]] const ::caffe::LogParameter& log_param() const;
  [[nodiscard]] ::caffe::LogParameter* PROTOBUF_NULLABLE release_log_param();
  ::caffe::LogParameter* PROTOBUF_NONNULL mutable_log_param();
  void set_allocated_log_param(::caffe::LogParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_log_param(::caffe::LogParameter* PROTOBUF_NULLABLE value);
  ::caffe::LogParameter* PROTOBUF_NULLABLE unsafe_arena_release_log_param();

  private:
  const ::caffe::LogParameter& _internal_log_param() const;
  ::caffe::LogParameter* PROTOBUF_NONNULL _internal_mutable_log_param();

  public:
  // optional .caffe.FlattenParameter flatten_param = 135;
  [[nodiscard]] bool has_flatten_param()
      const;
  void clear_flatten_param() ;
  [[nodiscard]] const ::caffe::FlattenParameter& flatten_param() const;
  [[nodiscard]] ::caffe::FlattenParameter* PROTOBUF_NULLABLE release_flatten_param();
  ::caffe::FlattenParameter* PROTOBUF_NONNULL mutable_flatten_param();
  void set_allocated_flatten_param(::caffe::FlattenParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_flatten_param(::caffe::FlattenParameter* PROTOBUF_NULLABLE value);
  ::caffe::FlattenParameter* PROTOBUF_NULLABLE unsafe_arena_release_flatten_param();

  private:
  const ::caffe::FlattenParameter& _internal_flatten_param() const;
  ::caffe::FlattenParameter* PROTOBUF_NONNULL _internal_mutable_flatten_param();

  public:
  // optional .caffe.ReductionParameter reduction_param = 136;
  [[nodiscard]] bool has_reduction_param()
      const;
  void clear_reduction_param() ;
  [[nodiscard]] const ::caffe::ReductionParameter& reduction_param() const;
  [[nodiscard]] ::caffe::ReductionParameter* PROTOBUF_NULLABLE release_reduction_param();
  ::caffe::ReductionParameter* PROTOBUF_NONNULL mutable_reduction_param();
  void set_allocated_reduction_param(::caffe::ReductionParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_reduction_param(::caffe::ReductionParameter* PROTOBUF_NULLABLE value);
  ::caffe::ReductionParameter* PROTOBUF_NULLABLE unsafe_arena_release_reduction_param();

  private:
  const ::caffe::ReductionParameter& _internal_reduction_param() const;
  ::caffe::ReductionParameter* PROTOBUF_NONNULL _internal_mutable_reduction_param();

  public:
  // optional .caffe.EmbedParameter embed_param = 137;
  [[nodiscard]] bool has_embed_param()
      const;
  void clear_embed_param() ;
  [[nodiscard]] const ::caffe::EmbedParameter& embed_param() const;
  [[nodiscard]] ::caffe::EmbedParameter* PROTOBUF_NULLABLE release_embed_param();
  ::caffe::EmbedParameter* PROTOBUF_NONNULL mutable_embed_param();
  void set_allocated_embed_param(::caffe::EmbedParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_embed_param(::caffe::EmbedParameter* PROTOBUF_NULLABLE value);
  ::caffe::EmbedParameter* PROTOBUF_NULLABLE unsafe_arena_release_embed_param();

  private:
  const ::caffe::EmbedParameter& _internal_embed_param() const;
  ::caffe::EmbedParameter* PROTOBUF_NONNULL _internal_mutable_embed_param();

  public:
  // optional .caffe.TileParameter tile_param = 138;
  [[nodiscard]] bool has_tile_param()
      const;
  void clear_tile_param() ;
  [[nodiscard]] const ::caffe::TileParameter& tile_param() const;
  [[nodiscard]] ::caffe::TileParameter* PROTOBUF_NULLABLE release_tile_param();
  ::caffe::TileParameter* PROTOBUF_NONNULL mutable_tile_param();
  void set_allocated_tile_param(::caffe::TileParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_tile_param(::caffe::TileParameter* PROTOBUF_NULLABLE value);
  ::caffe::TileParameter* PROTOBUF_NULLABLE unsafe_arena_release_tile_param();

  private:
  const ::caffe::TileParameter& _internal_tile_param() const;
  ::caffe::TileParameter* PROTOBUF_NONNULL _internal_mutable_tile_param();

  public:
  // optional .caffe.BatchNormParameter batch_norm_param = 139;
  [[nodiscard]] bool has_batch_norm_param()
      const;
  void clear_batch_norm_param() ;
  [[nodiscard]] const ::caffe::BatchNormParameter& batch_norm_param() const;
  [[nodiscard]] ::caffe::BatchNormParameter* PROTOBUF_NULLABLE release_batch_norm_param();
  ::caffe::BatchNormParameter* PROTOBUF_NONNULL mutable_batch_norm_param();
  void set_allocated_batch_norm_param(::caffe::BatchNormParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_batch_norm_param(::caffe::BatchNormParameter* PROTOBUF_NULLABLE value);
  ::caffe::BatchNormParameter* PROTOBUF_NULLABLE unsafe_arena_release_batch_norm_param();

  private:
  const ::caffe::BatchNormParameter& _internal_batch_norm_param() const;
  ::caffe::BatchNormParameter* PROTOBUF_NONNULL _internal_mutable_batch_norm_param();

  public:
  // optional .caffe.ELUParameter elu_param = 140;
  [[nodiscard]] bool has_elu_param()
      const;
  void clear_elu_param() ;
  [[nodiscard]] const ::caffe::ELUParameter& elu_param() const;
  [[nodiscard]] ::caffe::ELUParameter* PROTOBUF_NULLABLE release_elu_param();
  ::caffe::ELUParameter* PROTOBUF_NONNULL mutable_elu_param();
  void set_allocated_elu_param(::caffe::ELUParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_elu_param(::caffe::ELUParameter* PROTOBUF_NULLABLE value);
  ::caffe::ELUParameter* PROTOBUF_NULLABLE unsafe_arena_release_elu_param();

  private:
  const ::caffe::ELUParameter& _internal_elu_param() const;
  ::caffe::ELUParameter* PROTOBUF_NONNULL _internal_mutable_elu_param();

  public:
  // optional .caffe.BiasParameter bias_param = 141;
  [[nodiscard]] bool has_bias_param()
      const;
  void clear_bias_param() ;
  [[nodiscard]] const ::caffe::BiasParameter& bias_param() const;
  [[nodiscard]] ::caffe::BiasParameter* PROTOBUF_NULLABLE release_bias_param();
  ::caffe::BiasParameter* PROTOBUF_NONNULL mutable_bias_param();
  void set_allocated_bias_param(::caffe::BiasParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_bias_param(::caffe::BiasParameter* PROTOBUF_NULLABLE value);
  ::caffe::BiasParameter* PROTOBUF_NULLABLE unsafe_arena_release_bias_param();

  private:
  const ::caffe::BiasParameter& _internal_bias_param() const;
  ::caffe::BiasParameter* PROTOBUF_NONNULL _internal_mutable_bias_param();

  public:
  // optional .caffe.ScaleParameter scale_param = 142;
  [[nodiscard]] bool has_scale_param()
      const;
  void clear_scale_param() ;
  [[nodiscard]] const ::caffe::ScaleParameter& scale_param() const;
  [[nodiscard]] ::caffe::ScaleParameter* PROTOBUF_NULLABLE release_scale_param();
  ::caffe::ScaleParameter* PROTOBUF_NONNULL mutable_scale_param();
  void set_allocated_scale_param(::caffe::ScaleParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_scale_param(::caffe::ScaleParameter* PROTOBUF_NULLABLE value);
  ::caffe::ScaleParameter* PROTOBUF_NULLABLE unsafe_arena_release_scale_param();

  private:
  const ::caffe::ScaleParameter& _internal_scale_param() const;
  ::caffe::ScaleParameter* PROTOBUF_NONNULL _internal_mutable_scale_param();

  public:
  // optional .caffe.InputParameter input_param = 143;
  [[nodiscard]] bool has_input_param()
      const;
  void clear_input_param() ;
  [[nodiscard]] const ::caffe::InputParameter& input_param() const;
  [[nodiscard]] ::caffe::InputParameter* PROTOBUF_NULLABLE release_input_param();
  ::caffe::InputParameter* PROTOBUF_NONNULL mutable_input_param();
  void set_allocated_input_param(::caffe::InputParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_input_param(::caffe::InputParameter* PROTOBUF_NULLABLE value);
  ::caffe::InputParameter* PROTOBUF_NULLABLE unsafe_arena_release_input_param();

  private:
  const ::caffe::InputParameter& _internal_input_param() const;
  ::caffe::InputParameter* PROTOBUF_NONNULL _internal_mutable_input_param();

  public:
  // optional .caffe.CropParameter crop_param = 144;
  [[nodiscard]] bool has_crop_param()
      const;
  void clear_crop_param() ;
  [[nodiscard]] const ::caffe::CropParameter& crop_param() const;
  [[nodiscard]] ::caffe::CropParameter* PROTOBUF_NULLABLE release_crop_param();
  ::caffe::CropParameter* PROTOBUF_NONNULL mutable_crop_param();
  void set_allocated_crop_param(::caffe::CropParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_crop_param(::caffe::CropParameter* PROTOBUF_NULLABLE value);
  ::caffe::CropParameter* PROTOBUF_NULLABLE unsafe_arena_release_crop_param();

  private:
  const ::caffe::CropParameter& _internal_crop_param() const;
  ::caffe::CropParameter* PROTOBUF_NONNULL _internal_mutable_crop_param();

  public:
  // optional .caffe.ShuffleChannelParameter shuffle_channel_param = 145;
  [[nodiscard]] bool has_shuffle_channel_param()
      const;
  void clear_shuffle_channel_param() ;
  [[nodiscard]] const ::caffe::ShuffleChannelParameter& shuffle_channel_param() const;
  [[nodiscard]] ::caffe::ShuffleChannelParameter* PROTOBUF_NULLABLE release_shuffle_channel_param();
  ::caffe::ShuffleChannelParameter* PROTOBUF_NONNULL mutable_shuffle_channel_param();
  void set_allocated_shuffle_channel_param(::caffe::ShuffleChannelParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_shuffle_channel_param(::caffe::ShuffleChannelParameter* PROTOBUF_NULLABLE value);
  ::caffe::ShuffleChannelParameter* PROTOBUF_NULLABLE unsafe_arena_release_shuffle_channel_param();

  private:
  const ::caffe::ShuffleChannelParameter& _internal_shuffle_channel_param() const;
  ::caffe::ShuffleChannelParameter* PROTOBUF_NONNULL _internal_mutable_shuffle_channel_param();

  public:
  // optional .caffe.RecurrentParameter recurrent_param = 146;
  [[nodiscard]] bool has_recurrent_param()
      const;
  void clear_recurrent_param() ;
  [[nodiscard]] const ::caffe::RecurrentParameter& recurrent_param() const;
  [[nodiscard]] ::caffe::RecurrentParameter* PROTOBUF_NULLABLE release_recurrent_param();
  ::caffe::RecurrentParameter* PROTOBUF_NONNULL mutable_recurrent_param();
  void set_allocated_recurrent_param(::caffe::RecurrentParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_recurrent_param(::caffe::RecurrentParameter* PROTOBUF_NULLABLE value);
  ::caffe::RecurrentParameter* PROTOBUF_NULLABLE unsafe_arena_release_recurrent_param();

  private:
  const ::caffe::RecurrentParameter& _internal_recurrent_param() const;
  ::caffe::RecurrentParameter* PROTOBUF_NONNULL _internal_mutable_recurrent_param();

  public:
  // optional .caffe.ReorgParameter reorg_param = 147;
  [[nodiscard]] bool has_reorg_param()
      const;
  void clear_reorg_param() ;
  [[nodiscard]] const ::caffe::ReorgParameter& reorg_param() const;
  [[nodiscard]] ::caffe::ReorgParameter* PROTOBUF_NULLABLE release_reorg_param();
  ::caffe::ReorgParameter* PROTOBUF_NONNULL mutable_reorg_param();
  void set_allocated_reorg_param(::caffe::ReorgParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_reorg_param(::caffe::ReorgParameter* PROTOBUF_NULLABLE value);
  ::caffe::ReorgParameter* PROTOBUF_NULLABLE unsafe_arena_release_reorg_param();

  private:
  const ::caffe::ReorgParameter& _internal_reorg_param() const;
  ::caffe::ReorgParameter* PROTOBUF_NONNULL _internal_mutable_reorg_param();

  public:
  // optional .caffe.ROIAlignParameter roi_align_param = 148;
  [[nodiscard]] bool has_roi_align_param()
      const;
  void clear_roi_align_param() ;
  [[nodiscard]] const ::caffe::ROIAlignParameter& roi_align_param() const;
  [[nodiscard]] ::caffe::ROIAlignParameter* PROTOBUF_NULLABLE release_roi_align_param();
  ::caffe::ROIAlignParameter* PROTOBUF_NONNULL mutable_roi_align_param();
  void set_allocated_roi_align_param(::caffe::ROIAlignParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_roi_align_param(::caffe::ROIAlignParameter* PROTOBUF_NULLABLE value);
  ::caffe::ROIAlignParameter* PROTOBUF_NULLABLE unsafe_arena_release_roi_align_param();

  private:
  const ::caffe::ROIAlignParameter& _internal_roi_align_param() const;
  ::caffe::ROIAlignParameter* PROTOBUF_NONNULL _internal_mutable_roi_align_param();

  public:
  // optional .caffe.PSROIPoolingParameter psroi_pooling_param = 149;
  [[nodiscard]] bool has_psroi_pooling_param()
      const;
  void clear_psroi_pooling_param() ;
  [[nodiscard]] const ::caffe::PSROIPoolingParameter& psroi_pooling_param() const;
  [[nodiscard]] ::caffe::PSROIPoolingParameter* PROTOBUF_NULLABLE release_psroi_pooling_param();
  ::caffe::PSROIPoolingParameter* PROTOBUF_NONNULL mutable_psroi_pooling_param();
  void set_allocated_psroi_pooling_param(::caffe::PSROIPoolingParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_psroi_pooling_param(::caffe::PSROIPoolingParameter* PROTOBUF_NULLABLE value);
  ::caffe::PSROIPoolingParameter* PROTOBUF_NULLABLE unsafe_arena_release_psroi_pooling_param();

  private:
  const ::caffe::PSROIPoolingParameter& _internal_psroi_pooling_param() const;
  ::caffe::PSROIPoolingParameter* PROTOBUF_NONNULL _internal_mutable_psroi_pooling_param();

  public:
  // optional .caffe.PermuteParameter permute_param = 202;
  [[nodiscard]] bool has_permute_param()
      const;
  void clear_permute_param() ;
  [[nodiscard]] const ::caffe::PermuteParameter& permute_param() const;
  [[nodiscard]] ::caffe::PermuteParameter* PROTOBUF_NULLABLE release_permute_param();
  ::caffe::PermuteParameter* PROTOBUF_NONNULL mutable_permute_param();
  void set_allocated_permute_param(::caffe::PermuteParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_permute_param(::caffe::PermuteParameter* PROTOBUF_NULLABLE value);
  ::caffe::PermuteParameter* PROTOBUF_NULLABLE unsafe_arena_release_permute_param();

  private:
  const ::caffe::PermuteParameter& _internal_permute_param() const;
  ::caffe::PermuteParameter* PROTOBUF_NONNULL _internal_mutable_permute_param();

  public:
  // optional .caffe.PriorBoxParameter prior_box_param = 203;
  [[nodiscard]] bool has_prior_box_param()
      const;
  void clear_prior_box_param() ;
  [[nodiscard]] const ::caffe::PriorBoxParameter& prior_box_param() const;
  [[nodiscard]] ::caffe::PriorBoxParameter* PROTOBUF_NULLABLE release_prior_box_param();
  ::caffe::PriorBoxParameter* PROTOBUF_NONNULL mutable_prior_box_param();
  void set_allocated_prior_box_param(::caffe::PriorBoxParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_prior_box_param(::caffe::PriorBoxParameter* PROTOBUF_NULLABLE value);
  ::caffe::PriorBoxParameter* PROTOBUF_NULLABLE unsafe_arena_release_prior_box_param();

  private:
  const ::caffe::PriorBoxParameter& _internal_prior_box_param() const;
  ::caffe::PriorBoxParameter* PROTOBUF_NONNULL _internal_mutable_prior_box_param();

  public:
  // optional .caffe.DetectionOutputParameter detection_output_param = 204;
  [[nodiscard]] bool has_detection_output_param()
      const;
  void clear_detection_output_param() ;
  [[nodiscard]] const ::caffe::DetectionOutputParameter& detection_output_param() const;
  [[nodiscard]] ::caffe::DetectionOutputParameter* PROTOBUF_NULLABLE release_detection_output_param();
  ::caffe::DetectionOutputParameter* PROTOBUF_NONNULL mutable_detection_output_param();
  void set_allocated_detection_output_param(::caffe::DetectionOutputParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_detection_output_param(::caffe::DetectionOutputParameter* PROTOBUF_NULLABLE value);
  ::caffe::DetectionOutputParameter* PROTOBUF_NULLABLE unsafe_arena_release_detection_output_param();

  private:
  const ::caffe::DetectionOutputParameter& _internal_detection_output_param() const;
  ::caffe::DetectionOutputParameter* PROTOBUF_NONNULL _internal_mutable_detection_output_param();

  public:
  // optional .caffe.InterpParameter interp_param = 205;
  [[nodiscard]] bool has_interp_param()
      const;
  void clear_interp_param() ;
  [[nodiscard]] const ::caffe::InterpParameter& interp_param() const;
  [[nodiscard]] ::caffe::InterpParameter* PROTOBUF_NULLABLE release_interp_param();
  ::caffe::InterpParameter* PROTOBUF_NONNULL mutable_interp_param();
  void set_allocated_interp_param(::caffe::InterpParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_interp_param(::caffe::InterpParameter* PROTOBUF_NULLABLE value);
  ::caffe::InterpParameter* PROTOBUF_NULLABLE unsafe_arena_release_interp_param();

  private:
  const ::caffe::InterpParameter& _internal_interp_param() const;
  ::caffe::InterpParameter* PROTOBUF_NONNULL _internal_mutable_interp_param();

  public:
  // optional .caffe.NormalizeParameter norm_param = 206;
  [[nodiscard]] bool has_norm_param()
      const;
  void clear_norm_param() ;
  [[nodiscard]] const ::caffe::NormalizeParameter& norm_param() const;
  [[nodiscard]] ::caffe::NormalizeParameter* PROTOBUF_NULLABLE release_norm_param();
  ::caffe::NormalizeParameter* PROTOBUF_NONNULL mutable_norm_param();
  void set_allocated_norm_param(::caffe::NormalizeParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_norm_param(::caffe::NormalizeParameter* PROTOBUF_NULLABLE value);
  ::caffe::NormalizeParameter* PROTOBUF_NULLABLE unsafe_arena_release_norm_param();

  private:
  const ::caffe::NormalizeParameter& _internal_norm_param() const;
  ::caffe::NormalizeParameter* PROTOBUF_NONNULL _internal_mutable_norm_param();

  public:
  // optional .caffe.YoloDetectionOutputParameter yolo_detection_output_param = 601;
  [[nodiscard]] bool has_yolo_detection_output_param()
      const;
  void clear_yolo_detection_output_param() ;
  [[nodiscard]] const ::caffe::YoloDetectionOutputParameter& yolo_detection_output_param() const;
  [[nodiscard]] ::caffe::YoloDetectionOutputParameter* PROTOBUF_NULLABLE release_yolo_detection_output_param();
  ::caffe::YoloDetectionOutputParameter* PROTOBUF_NONNULL mutable_yolo_detection_output_param();
  void set_allocated_yolo_detection_output_param(::caffe::YoloDetectionOutputParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_yolo_detection_output_param(::caffe::YoloDetectionOutputParameter* PROTOBUF_NULLABLE value);
  ::caffe::YoloDetectionOutputParameter* PROTOBUF_NULLABLE unsafe_arena_release_yolo_detection_output_param();

  private:
  const ::caffe::YoloDetectionOutputParameter& _internal_yolo_detection_output_param() const;
  ::caffe::YoloDetectionOutputParameter* PROTOBUF_NONNULL _internal_mutable_yolo_detection_output_param();

  public:
  // optional .caffe.Yolov3DetectionOutputParameter yolov3_detection_output_param = 603;
  [[nodiscard]] bool has_yolov3_detection_output_param()
      const;
  void clear_yolov3_detection_output_param() ;
  [[nodiscard]] const ::caffe::Yolov3DetectionOutputParameter& yolov3_detection_output_param() const;
  [[nodiscard]] ::caffe::Yolov3DetectionOutputParameter* PROTOBUF_NULLABLE release_yolov3_detection_output_param();
  ::caffe::Yolov3DetectionOutputParameter* PROTOBUF_NONNULL mutable_yolov3_detection_output_param();
  void set_allocated_yolov3_detection_output_param(::caffe::Yolov3DetectionOutputParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_yolov3_detection_output_param(::caffe::Yolov3DetectionOutputParameter* PROTOBUF_NULLABLE value);
  ::caffe::Yolov3DetectionOutputParameter* PROTOBUF_NULLABLE unsafe_arena_release_yolov3_detection_output_param();

  private:
  const ::caffe::Yolov3DetectionOutputParameter& _internal_yolov3_detection_output_param() const;
  ::caffe::Yolov3DetectionOutputParameter* PROTOBUF_NONNULL _internal_mutable_yolov3_detection_output_param();

  public:
  // optional .caffe.ROIPoolingParameter roi_pooling_param = 8266711;
  [[nodiscard]] bool has_roi_pooling_param()
      const;
  void clear_roi_pooling_param() ;
  [[nodiscard]] const ::caffe::ROIPoolingParameter& roi_pooling_param() const;
  [[nodiscard]] ::caffe::ROIPoolingParameter* PROTOBUF_NULLABLE release_roi_pooling_param();
  ::caffe::ROIPoolingParameter* PROTOBUF_NONNULL mutable_roi_pooling_param();
  void set_allocated_roi_pooling_param(::caffe::ROIPoolingParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_roi_pooling_param(::caffe::ROIPoolingParameter* PROTOBUF_NULLABLE value);
  ::caffe::ROIPoolingParameter* PROTOBUF_NULLABLE unsafe_arena_release_roi_pooling_param();

  private:
  const ::caffe::ROIPoolingParameter& _internal_roi_pooling_param() const;
  ::caffe::ROIPoolingParameter* PROTOBUF_NONNULL _internal_mutable_roi_pooling_param();

  public:
  // optional .caffe.SmoothL1LossParameter smooth_l1_loss_param = 8266712;
  [[nodiscard]] bool has_smooth_l1_loss_param()
      const;
  void clear_smooth_l1_loss_param() ;
  [[nodiscard]] const ::caffe::SmoothL1LossParameter& smooth_l1_loss_param() const;
  [[nodiscard]] ::caffe::SmoothL1LossParameter* PROTOBUF_NULLABLE release_smooth_l1_loss_param();
  ::caffe::SmoothL1LossParameter* PROTOBUF_NONNULL mutable_smooth_l1_loss_param();
  void set_allocated_smooth_l1_loss_param(::caffe::SmoothL1LossParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_smooth_l1_loss_param(::caffe::SmoothL1LossParameter* PROTOBUF_NULLABLE value);
  ::caffe::SmoothL1LossParameter* PROTOBUF_NULLABLE unsafe_arena_release_smooth_l1_loss_param();

  private:
  const ::caffe::SmoothL1LossParameter& _internal_smooth_l1_loss_param() const;
  ::caffe::SmoothL1LossParameter* PROTOBUF_NONNULL _internal_mutable_smooth_l1_loss_param();

  public:
  // @@protoc_insertion_point(class_scope:caffe.LayerParameter)
 private:
  class _Internal;
  using ParseTableT_ =
      ::google::protobuf::internal::TcParseTable<5, 71,
                          65, 0,
                          37>;
  static constexpr ParseTableT_ InternalGenerateParseTable_(
      const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL class_data);
  friend class ::google::protobuf::internal::TcParser;
  #ifndef PROTOBUF_MESSAGE_GLOBALS
  static const ParseTableT_ _table_;
  #endif

  friend class ::google::protobuf::MessageLite;
  friend class ::google::protobuf::Arena;
  friend ::google::protobuf::internal::PrivateAccess;
  template <typename T>
  friend class ::google::protobuf::Arena::InternalHelper;
  using InternalArenaConstructable_ = void;
  using DestructorSkippable_ = void;
  struct Impl_ {
    inline explicit constexpr Impl_(::google::protobuf::internal::InternalVisibility visibility,
                                    ::google::protobuf::internal::ConstantInitialized) noexcept;
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const Impl_& from,
        const LayerParameter& from_msg);
    ::google::protobuf::internal::HasBits<3> _has_bits_;
    ::google::protobuf::internal::CachedSize _cached_size_;
    ::google::protobuf::RepeatedPtrField<::std::string> bottom_;
    ::google::protobuf::RepeatedPtrField<::std::string> top_;
    ::google::protobuf::RepeatedField<float> loss_weight_;
    ::google::protobuf::RepeatedPtrField< ::caffe::ParamSpec > param_;
    ::google::protobuf::RepeatedPtrField< ::caffe::BlobProto > blobs_;
    ::google::protobuf::RepeatedPtrField< ::caffe::NetStateRule > include_;
    ::google::protobuf::RepeatedPtrField< ::caffe::NetStateRule > exclude_;
    ::google::protobuf::RepeatedField<bool> propagate_down_;
    ::google::protobuf::internal::ArenaStringPtr name_;
    ::google::protobuf::internal::ArenaStringPtr type_;
    ::caffe::BNParameter* PROTOBUF_NULLABLE bn_param_;
    ::caffe::TransformationParameter* PROTOBUF_NULLABLE transform_param_;
    ::caffe::LossParameter* PROTOBUF_NULLABLE loss_param_;
    ::caffe::AccuracyParameter* PROTOBUF_NULLABLE accuracy_param_;
    ::caffe::ArgMaxParameter* PROTOBUF_NULLABLE argmax_param_;
    ::caffe::ConcatParameter* PROTOBUF_NULLABLE concat_param_;
    ::caffe::ContrastiveLossParameter* PROTOBUF_NULLABLE contrastive_loss_param_;
    ::caffe::ConvolutionParameter* PROTOBUF_NULLABLE convolution_param_;
    ::caffe::DataParameter* PROTOBUF_NULLABLE data_param_;
    ::caffe::DropoutParameter* PROTOBUF_NULLABLE dropout_param_;
    ::caffe::EltwiseParameter* PROTOBUF_NULLABLE eltwise_param_;
    ::caffe::ExpParameter* PROTOBUF_NULLABLE exp_param_;
    ::caffe::HDF5DataParameter* PROTOBUF_NULLABLE hdf5_data_param_;
    ::caffe::HDF5OutputParameter* PROTOBUF_NULLABLE hdf5_output_param_;
    ::caffe::HingeLossParameter* PROTOBUF_NULLABLE hinge_loss_param_;
    ::caffe::ImageDataParameter* PROTOBUF_NULLABLE image_data_param_;
    int phase_;
    ::caffe::DummyDataParameter* PROTOBUF_NULLABLE dummy_data_param_;
    ::caffe::InfogainLossParameter* PROTOBUF_NULLABLE infogain_loss_param_;
    ::caffe::InnerProductParameter* PROTOBUF_NULLABLE inner_product_param_;
    ::caffe::LRNParameter* PROTOBUF_NULLABLE lrn_param_;
    ::caffe::MemoryDataParameter* PROTOBUF_NULLABLE memory_data_param_;
    ::caffe::MVNParameter* PROTOBUF_NULLABLE mvn_param_;
    ::caffe::PoolingParameter* PROTOBUF_NULLABLE pooling_param_;
    ::caffe::PowerParameter* PROTOBUF_NULLABLE power_param_;
    ::caffe::ReLUParameter* PROTOBUF_NULLABLE relu_param_;
    ::caffe::SigmoidParameter* PROTOBUF_NULLABLE sigmoid_param_;
    ::caffe::SoftmaxParameter* PROTOBUF_NULLABLE softmax_param_;
    ::caffe::SliceParameter* PROTOBUF_NULLABLE slice_param_;
    ::caffe::TanHParameter* PROTOBUF_NULLABLE tanh_param_;
    ::caffe::ThresholdParameter* PROTOBUF_NULLABLE threshold_param_;
    ::caffe::WindowDataParameter* PROTOBUF_NULLABLE window_data_param_;
    ::caffe::PythonParameter* PROTOBUF_NULLABLE python_param_;
    ::caffe::PReLUParameter* PROTOBUF_NULLABLE prelu_param_;
    ::caffe::SPPParameter* PROTOBUF_NULLABLE spp_param_;
    ::caffe::ReshapeParameter* PROTOBUF_NULLABLE reshape_param_;
    ::caffe::LogParameter* PROTOBUF_NULLABLE log_param_;
    ::caffe::FlattenParameter* PROTOBUF_NULLABLE flatten_param_;
    ::caffe::ReductionParameter* PROTOBUF_NULLABLE reduction_param_;
    ::caffe::EmbedParameter* PROTOBUF_NULLABLE embed_param_;
    ::caffe::TileParameter* PROTOBUF_NULLABLE tile_param_;
    ::caffe::BatchNormParameter* PROTOBUF_NULLABLE batch_norm_param_;
    ::caffe::ELUParameter* PROTOBUF_NULLABLE elu_param_;
    ::caffe::BiasParameter* PROTOBUF_NULLABLE bias_param_;
    ::caffe::ScaleParameter* PROTOBUF_NULLABLE scale_param_;
    ::caffe::InputParameter* PROTOBUF_NULLABLE input_param_;
    ::caffe::CropParameter* PROTOBUF_NULLABLE crop_param_;
    ::caffe::ShuffleChannelParameter* PROTOBUF_NULLABLE shuffle_channel_param_;
    ::caffe::RecurrentParameter* PROTOBUF_NULLABLE recurrent_param_;
    ::caffe::ReorgParameter* PROTOBUF_NULLABLE reorg_param_;
    ::caffe::ROIAlignParameter* PROTOBUF_NULLABLE roi_align_param_;
    ::caffe::PSROIPoolingParameter* PROTOBUF_NULLABLE psroi_pooling_param_;
    ::caffe::PermuteParameter* PROTOBUF_NULLABLE permute_param_;
    ::caffe::PriorBoxParameter* PROTOBUF_NULLABLE prior_box_param_;
    ::caffe::DetectionOutputParameter* PROTOBUF_NULLABLE detection_output_param_;
    ::caffe::InterpParameter* PROTOBUF_NULLABLE interp_param_;
    ::caffe::NormalizeParameter* PROTOBUF_NULLABLE norm_param_;
    ::caffe::YoloDetectionOutputParameter* PROTOBUF_NULLABLE yolo_detection_output_param_;
    ::caffe::Yolov3DetectionOutputParameter* PROTOBUF_NULLABLE yolov3_detection_output_param_;
    ::caffe::ROIPoolingParameter* PROTOBUF_NULLABLE roi_pooling_param_;
    ::caffe::SmoothL1LossParameter* PROTOBUF_NULLABLE smooth_l1_loss_param_;
    PROTOBUF_TSAN_DECLARE_MEMBER
  };
  union { Impl_ _impl_; };
  friend struct ::TableStruct_caffe_2eproto;
};
// -------------------------------------------------------------------

class  PROTOBUF_FUTURE_ADD_EARLY_WARN_UNUSED NetParameter final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:caffe.NetParameter) */ {
 public:
  inline NetParameter() : NetParameter(nullptr) {}
  ~NetParameter() PROTOBUF_FINAL;

#if defined(PROTOBUF_CUSTOM_VTABLE)
  void operator delete(NetParameter* PROTOBUF_NONNULL msg, ::std::destroying_delete_t) {
    SharedDtor(*msg);
    ::google::protobuf::internal::SizedDelete(msg, sizeof(NetParameter));
  }
#endif

  template <typename = void>
  explicit constexpr NetParameter(::google::protobuf::internal::ConstantInitialized,
                           const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL
                               class_data);

  inline NetParameter(const NetParameter& from) : NetParameter(nullptr, from) {}
  inline NetParameter(NetParameter&& from) noexcept : NetParameter(nullptr, ::std::move(from)) {}
  inline NetParameter& operator=(const NetParameter& from) {
    CopyFrom(from);
    return *this;
  }
  inline NetParameter& operator=(NetParameter&& from) noexcept {
    if (this == &from) return *this;
    if (::google::protobuf::internal::CanMoveWithInternalSwap(GetArena(), from.GetArena())) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  [[nodiscard]] inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  [[nodiscard]] inline ::google::protobuf::UnknownFieldSet* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL descriptor() {
    return GetDescriptor();
  }
  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL
  GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  [[nodiscard]] static const ::google::protobuf::Reflection* PROTOBUF_NONNULL GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  [[nodiscard]] static const NetParameter& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<NetParameter>(&NetParameter_globals_);
  }
  static constexpr int kIndexInFileMessages = 5;
  friend void swap(NetParameter& a, NetParameter& b) { a.Swap(&b); }
  inline void Swap(NetParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(NetParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  [[nodiscard]] NetParameter* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::Message::DefaultConstruct<NetParameter>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const NetParameter& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const NetParameter& from) { NetParameter::MergeImpl(*this, from); }

  private:
  static void MergeImpl(::google::protobuf::MessageLite& to_msg,
                        const ::google::protobuf::MessageLite& from_msg);

  public:
  [[nodiscard]] bool IsInitialized() const {
    return IsInitializedImpl(*this);
  }

  private:
  static bool IsInitializedImpl(const MessageLite& msg);

  public:
  ABSL_ATTRIBUTE_REINITIALIZES void Clear() PROTOBUF_FINAL;
  #if defined(PROTOBUF_CUSTOM_VTABLE)
  private:
  [[nodiscard]] static ::size_t ByteSizeLong(const ::google::protobuf::MessageLite& msg);
  [[nodiscard]] static ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      const ::google::protobuf::MessageLite& msg, ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream);

  public:
  [[nodiscard]] ::size_t ByteSizeLong() const { return ByteSizeLong(*this); }
  [[nodiscard]] ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const {
    return _InternalSerialize(*this, target, stream);
  }
  #else   // PROTOBUF_CUSTOM_VTABLE
  [[nodiscard]] ::size_t ByteSizeLong() const final;
  [[nodiscard]] ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const final;
  #endif  // PROTOBUF_CUSTOM_VTABLE
  [[nodiscard]] int GetCachedSize() const {
    return _impl_._cached_size_.Get();
  }

  private:
  void SharedCtor(::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  static void SharedDtor(MessageLite& self);
  void InternalSwap(NetParameter* PROTOBUF_NONNULL other);
 private:
  template <typename T>
  friend ::absl::string_view(::google::protobuf::internal::GetAnyMessageName)();
  static ::absl::string_view FullMessageName() { return "caffe.NetParameter"; }

  explicit NetParameter(::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  NetParameter(::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const NetParameter& from);
  NetParameter(
      ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, NetParameter&& from) noexcept
      : NetParameter(arena) {
    *this = ::std::move(from);
  }
  const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL GetClassData() const PROTOBUF_FINAL;
  static void* PROTOBUF_NONNULL PlacementNew_(
      const void* PROTOBUF_NONNULL, void* PROTOBUF_NONNULL mem,
      ::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  static constexpr auto InternalNewImpl_();

 public:
  static constexpr auto InternalGenerateClassData_(
      const MessageLite& prototype,
      const ::google::protobuf::internal::TcParseTableBase* PROTOBUF_NULLABLE tc_table = nullptr);

  [[nodiscard]] ::google::protobuf::Metadata GetMetadata() const;
  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------
  enum : int {
    kLayersFieldNumber = 2,
    kInputFieldNumber = 3,
    kInputDimFieldNumber = 4,
    kInputShapeFieldNumber = 8,
    kNameFieldNumber = 1,
    kStateFieldNumber = 6,
    kForceBackwardFieldNumber = 5,
    kDebugInfoFieldNumber = 7,
    kLayerFieldNumber = 100,
  };
  // repeated .caffe.V1LayerParameter layers = 2;
  [[nodiscard]] int layers_size()
      const;
  private:
  int _internal_layers_size() const;

  public:
  void clear_layers() ;
  [[nodiscard]] const ::caffe::V1LayerParameter& layers(int index) const;
  [[nodiscard]] ::caffe::V1LayerParameter* PROTOBUF_NONNULL mutable_layers(int index);
  ::caffe::V1LayerParameter* PROTOBUF_NONNULL add_layers();
  [[nodiscard]] const ::google::protobuf::RepeatedPtrField<::caffe::V1LayerParameter>&
  layers() const;
  [[nodiscard]] ::google::protobuf::RepeatedPtrField<::caffe::V1LayerParameter>* PROTOBUF_NONNULL
  mutable_layers();

  private:
  const ::google::protobuf::RepeatedPtrField<::caffe::V1LayerParameter>& _internal_layers() const;
  ::google::protobuf::RepeatedPtrField<::caffe::V1LayerParameter>* PROTOBUF_NONNULL _internal_mutable_layers();

  public:
  // repeated string input = 3;
  [[nodiscard]] int input_size()
      const;
  private:
  int _internal_input_size() const;

  public:
  void clear_input() ;
  [[nodiscard]] const ::std::string& input(int index) const;
  ::std::string* PROTOBUF_NONNULL mutable_input(int index);
  template <typename Arg_ = const ::std::string&, typename... Args_>
  void set_input(int index, Arg_&& value, Args_... args);
  ::std::string* PROTOBUF_NONNULL add_input();
  template <typename Arg_ = const ::std::string&, typename... Args_>
  void add_input(Arg_&& value, Args_... args);
  [[nodiscard]] const
      ::google::protobuf::RepeatedPtrField<::std::string>&
      input() const;
  [[nodiscard]] ::google::protobuf::RepeatedPtrField<::std::string>*
      PROTOBUF_NONNULL
      mutable_input();

  private:
  const ::google::protobuf::RepeatedPtrField<::std::string>& _internal_input() const;
  ::google::protobuf::RepeatedPtrField<::std::string>* PROTOBUF_NONNULL _internal_mutable_input();

  public:
  // repeated int32 input_dim = 4;
  [[nodiscard]] int input_dim_size()
      const;
  private:
  int _internal_input_dim_size() const;

  public:
  void clear_input_dim() ;
  [[nodiscard]] ::int32_t input_dim(int index) const;
  void set_input_dim(int index, ::int32_t value);
  void add_input_dim(::int32_t value);
  [[nodiscard]] const ::google::protobuf::RepeatedField<::int32_t>& input_dim()
      const;
  ::google::protobuf::RepeatedField<::int32_t>* PROTOBUF_NONNULL mutable_input_dim();

  private:
  const ::google::protobuf::RepeatedField<::int32_t>& _internal_input_dim() const;
  ::google::protobuf::RepeatedField<::int32_t>* PROTOBUF_NONNULL _internal_mutable_input_dim();

  public:
  // repeated .caffe.BlobShape input_shape = 8;
  [[nodiscard]] int input_shape_size()
      const;
  private:
  int _internal_input_shape_size() const;

  public:
  void clear_input_shape() ;
  [[nodiscard]] const ::caffe::BlobShape& input_shape(int index) const;
  [[nodiscard]] ::caffe::BlobShape* PROTOBUF_NONNULL mutable_input_shape(int index);
  ::caffe::BlobShape* PROTOBUF_NONNULL add_input_shape();
  [[nodiscard]] const ::google::protobuf::RepeatedPtrField<::caffe::BlobShape>&
  input_shape() const;
  [[nodiscard]] ::google::protobuf::RepeatedPtrField<::caffe::BlobShape>* PROTOBUF_NONNULL
  mutable_input_shape();

  private:
  const ::google::protobuf::RepeatedPtrField<::caffe::BlobShape>& _internal_input_shape() const;
  ::google::protobuf::RepeatedPtrField<::caffe::BlobShape>* PROTOBUF_NONNULL _internal_mutable_input_shape();

  public:
  // optional string name = 1;
  [[nodiscard]] bool has_name()
      const;
  void clear_name() ;
  [[nodiscard]] const ::std::string& name() const;
  template <typename Arg_ = const ::std::string&, typename... Args_>
  void set_name(Arg_&& arg, Args_... args);
  ::std::string* PROTOBUF_NONNULL mutable_name();
  [[nodiscard]] ::std::string* PROTOBUF_NULLABLE release_name();
  void set_allocated_name(::std::string* PROTOBUF_NULLABLE value);

  private:
  const ::std::string& _internal_name() const;
  PROTOBUF_ALWAYS_INLINE void _internal_set_name(const ::std::string& value);
  ::std::string* PROTOBUF_NONNULL _internal_mutable_name();

  public:
  // optional .caffe.NetState state = 6;
  [[nodiscard]] bool has_state()
      const;
  void clear_state() ;
  [[nodiscard]] const ::caffe::NetState& state() const;
  [[nodiscard]] ::caffe::NetState* PROTOBUF_NULLABLE release_state();
  ::caffe::NetState* PROTOBUF_NONNULL mutable_state();
  void set_allocated_state(::caffe::NetState* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_state(::caffe::NetState* PROTOBUF_NULLABLE value);
  ::caffe::NetState* PROTOBUF_NULLABLE unsafe_arena_release_state();

  private:
  const ::caffe::NetState& _internal_state() const;
  ::caffe::NetState* PROTOBUF_NONNULL _internal_mutable_state();

  public:
  // optional bool force_backward = 5 [default = false];
  [[nodiscard]] bool has_force_backward()
      const;
  void clear_force_backward() ;
  [[nodiscard]] bool force_backward() const;
  void set_force_backward(bool value);

  private:
  bool _internal_force_backward() const;
  void _internal_set_force_backward(bool value);

  public:
  // optional bool debug_info = 7 [default = false];
  [[nodiscard]] bool has_debug_info()
      const;
  void clear_debug_info() ;
  [[nodiscard]] bool debug_info() const;
  void set_debug_info(bool value);

  private:
  bool _internal_debug_info() const;
  void _internal_set_debug_info(bool value);

  public:
  // repeated .caffe.LayerParameter layer = 100;
  [[nodiscard]] int layer_size()
      const;
  private:
  int _internal_layer_size() const;

  public:
  void clear_layer() ;
  [[nodiscard]] const ::caffe::LayerParameter& layer(int index) const;
  [[nodiscard]] ::caffe::LayerParameter* PROTOBUF_NONNULL mutable_layer(int index);
  ::caffe::LayerParameter* PROTOBUF_NONNULL add_layer();
  [[nodiscard]] const ::google::protobuf::RepeatedPtrField<::caffe::LayerParameter>&
  layer() const;
  [[nodiscard]] ::google::protobuf::RepeatedPtrField<::caffe::LayerParameter>* PROTOBUF_NONNULL
  mutable_layer();

  private:
  const ::google::protobuf::RepeatedPtrField<::caffe::LayerParameter>& _internal_layer() const;
  ::google::protobuf::RepeatedPtrField<::caffe::LayerParameter>* PROTOBUF_NONNULL _internal_mutable_layer();

  public:
  // @@protoc_insertion_point(class_scope:caffe.NetParameter)
 private:
  class _Internal;
  using ParseTableT_ =
      ::google::protobuf::internal::TcParseTable<3, 9,
                          4, 0,
                          7>;
  static constexpr ParseTableT_ InternalGenerateParseTable_(
      const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL class_data);
  friend class ::google::protobuf::internal::TcParser;
  #ifndef PROTOBUF_MESSAGE_GLOBALS
  static const ParseTableT_ _table_;
  #endif

  friend class ::google::protobuf::MessageLite;
  friend class ::google::protobuf::Arena;
  friend ::google::protobuf::internal::PrivateAccess;
  template <typename T>
  friend class ::google::protobuf::Arena::InternalHelper;
  using InternalArenaConstructable_ = void;
  using DestructorSkippable_ = void;
  struct Impl_ {
    inline explicit constexpr Impl_(::google::protobuf::internal::InternalVisibility visibility,
                                    ::google::protobuf::internal::ConstantInitialized) noexcept;
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const Impl_& from,
        const NetParameter& from_msg);
    ::google::protobuf::internal::HasBits<1> _has_bits_;
    ::google::protobuf::internal::CachedSize _cached_size_;
    ::google::protobuf::RepeatedPtrField< ::caffe::V1LayerParameter > layers_;
    ::google::protobuf::RepeatedPtrField<::std::string> input_;
    ::google::protobuf::RepeatedField<::int32_t> input_dim_;
    ::google::protobuf::RepeatedPtrField< ::caffe::BlobShape > input_shape_;
    ::google::protobuf::internal::ArenaStringPtr name_;
    ::caffe::NetState* PROTOBUF_NULLABLE state_;
    bool force_backward_;
    bool debug_info_;
    ::google::protobuf::RepeatedPtrField< ::caffe::LayerParameter > layer_;
    PROTOBUF_TSAN_DECLARE_MEMBER
  };
  union { Impl_ _impl_; };
  friend struct ::TableStruct_caffe_2eproto;
};
// -------------------------------------------------------------------

class  PROTOBUF_FUTURE_ADD_EARLY_WARN_UNUSED SolverParameter final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:caffe.SolverParameter) */ {
 public:
  inline SolverParameter() : SolverParameter(nullptr) {}
  ~SolverParameter() PROTOBUF_FINAL;

#if defined(PROTOBUF_CUSTOM_VTABLE)
  void operator delete(SolverParameter* PROTOBUF_NONNULL msg, ::std::destroying_delete_t) {
    SharedDtor(*msg);
    ::google::protobuf::internal::SizedDelete(msg, sizeof(SolverParameter));
  }
#endif

  template <typename = void>
  explicit constexpr SolverParameter(::google::protobuf::internal::ConstantInitialized,
                           const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL
                               class_data);

  inline SolverParameter(const SolverParameter& from) : SolverParameter(nullptr, from) {}
  inline SolverParameter(SolverParameter&& from) noexcept : SolverParameter(nullptr, ::std::move(from)) {}
  inline SolverParameter& operator=(const SolverParameter& from) {
    CopyFrom(from);
    return *this;
  }
  inline SolverParameter& operator=(SolverParameter&& from) noexcept {
    if (this == &from) return *this;
    if (::google::protobuf::internal::CanMoveWithInternalSwap(GetArena(), from.GetArena())) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  [[nodiscard]] inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  [[nodiscard]] inline ::google::protobuf::UnknownFieldSet* PROTOBUF_NONNULL
  mutable_unknown_fields() ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL descriptor() {
    return GetDescriptor();
  }
  [[nodiscard]] static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL
  GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  [[nodiscard]] static const ::google::protobuf::Reflection* PROTOBUF_NONNULL GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  [[nodiscard]] static const SolverParameter& default_instance() {
    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<SolverParameter>(&SolverParameter_globals_);
  }
  static constexpr int kIndexInFileMessages = 6;
  friend void swap(SolverParameter& a, SolverParameter& b) { a.Swap(&b); }
  inline void Swap(SolverParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(SolverParameter* PROTOBUF_NONNULL other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  [[nodiscard]] SolverParameter* PROTOBUF_NONNULL
  New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
    return ::google::protobuf::Message::DefaultConstruct<SolverParameter>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const SolverParameter& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const SolverParameter& from) { SolverParameter::MergeImpl(*this, from); }

  private:
  static void MergeImpl(::google::protobuf::MessageLite& to_msg,
                        const ::google::protobuf::MessageLite& from_msg);

  public:
  [[nodiscard]] bool IsInitialized() const {
    return IsInitializedImpl(*this);
  }

  private:
  static bool IsInitializedImpl(const MessageLite& msg);

  public:
  ABSL_ATTRIBUTE_REINITIALIZES void Clear() PROTOBUF_FINAL;
  #if defined(PROTOBUF_CUSTOM_VTABLE)
  private:
  [[nodiscard]] static ::size_t ByteSizeLong(const ::google::protobuf::MessageLite& msg);
  [[nodiscard]] static ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      const ::google::protobuf::MessageLite& msg, ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream);

  public:
  [[nodiscard]] ::size_t ByteSizeLong() const { return ByteSizeLong(*this); }
  [[nodiscard]] ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const {
    return _InternalSerialize(*this, target, stream);
  }
  #else   // PROTOBUF_CUSTOM_VTABLE
  [[nodiscard]] ::size_t ByteSizeLong() const final;
  [[nodiscard]] ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
      ::uint8_t* PROTOBUF_NONNULL target,
      ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const final;
  #endif  // PROTOBUF_CUSTOM_VTABLE
  [[nodiscard]] int GetCachedSize() const {
    return _impl_._cached_size_.Get();
  }

  private:
  void SharedCtor(::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  static void SharedDtor(MessageLite& self);
  void InternalSwap(SolverParameter* PROTOBUF_NONNULL other);
 private:
  template <typename T>
  friend ::absl::string_view(::google::protobuf::internal::GetAnyMessageName)();
  static ::absl::string_view FullMessageName() { return "caffe.SolverParameter"; }

  explicit SolverParameter(::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  SolverParameter(::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const SolverParameter& from);
  SolverParameter(
      ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, SolverParameter&& from) noexcept
      : SolverParameter(arena) {
    *this = ::std::move(from);
  }
  const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL GetClassData() const PROTOBUF_FINAL;
  static void* PROTOBUF_NONNULL PlacementNew_(
      const void* PROTOBUF_NONNULL, void* PROTOBUF_NONNULL mem,
      ::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
  static constexpr auto InternalNewImpl_();

 public:
  static constexpr auto InternalGenerateClassData_(
      const MessageLite& prototype,
      const ::google::protobuf::internal::TcParseTableBase* PROTOBUF_NULLABLE tc_table = nullptr);

  [[nodiscard]] ::google::protobuf::Metadata GetMetadata() const;
  // nested types ----------------------------------------------------
  using SnapshotFormat = SolverParameter_SnapshotFormat;
  static constexpr SnapshotFormat HDF5 = SolverParameter_SnapshotFormat_HDF5;
  static constexpr SnapshotFormat BINARYPROTO = SolverParameter_SnapshotFormat_BINARYPROTO;
  [[nodiscard]] static inline bool SnapshotFormat_IsValid(int value) {
    return SolverParameter_SnapshotFormat_IsValid(value);
  }
  static constexpr SnapshotFormat SnapshotFormat_MIN = SolverParameter_SnapshotFormat_SnapshotFormat_MIN;
  static constexpr SnapshotFormat SnapshotFormat_MAX = SolverParameter_SnapshotFormat_SnapshotFormat_MAX;
  static constexpr int SnapshotFormat_ARRAYSIZE = SolverParameter_SnapshotFormat_SnapshotFormat_ARRAYSIZE;
  static inline const ::google::protobuf::EnumDescriptor* PROTOBUF_NONNULL SnapshotFormat_descriptor() {
    return SolverParameter_SnapshotFormat_descriptor();
  }
  template <typename T>
  [[nodiscard]] static inline const ::std::string& SnapshotFormat_Name(T value) {
    return SolverParameter_SnapshotFormat_Name(value);
  }
  [[nodiscard]] static inline bool SnapshotFormat_Parse(
      ::absl::string_view name, SnapshotFormat* PROTOBUF_NONNULL value) {
    return SolverParameter_SnapshotFormat_Parse(name, value);
  }
  using SolverMode = SolverParameter_SolverMode;
  static constexpr SolverMode CPU = SolverParameter_SolverMode_CPU;
  static constexpr SolverMode GPU = SolverParameter_SolverMode_GPU;
  [[nodiscard]] static inline bool SolverMode_IsValid(int value) {
    return SolverParameter_SolverMode_IsValid(value);
  }
  static constexpr SolverMode SolverMode_MIN = SolverParameter_SolverMode_SolverMode_MIN;
  static constexpr SolverMode SolverMode_MAX = SolverParameter_SolverMode_SolverMode_MAX;
  static constexpr int SolverMode_ARRAYSIZE = SolverParameter_SolverMode_SolverMode_ARRAYSIZE;
  static inline const ::google::protobuf::EnumDescriptor* PROTOBUF_NONNULL SolverMode_descriptor() {
    return SolverParameter_SolverMode_descriptor();
  }
  template <typename T>
  [[nodiscard]] static inline const ::std::string& SolverMode_Name(T value) {
    return SolverParameter_SolverMode_Name(value);
  }
  [[nodiscard]] static inline bool SolverMode_Parse(
      ::absl::string_view name, SolverMode* PROTOBUF_NONNULL value) {
    return SolverParameter_SolverMode_Parse(name, value);
  }
  using SolverType = SolverParameter_SolverType;
  static constexpr SolverType SGD = SolverParameter_SolverType_SGD;
  static constexpr SolverType NESTEROV = SolverParameter_SolverType_NESTEROV;
  static constexpr SolverType ADAGRAD = SolverParameter_SolverType_ADAGRAD;
  static constexpr SolverType RMSPROP = SolverParameter_SolverType_RMSPROP;
  static constexpr SolverType ADADELTA = SolverParameter_SolverType_ADADELTA;
  static constexpr SolverType ADAM = SolverParameter_SolverType_ADAM;
  [[nodiscard]] static inline bool SolverType_IsValid(int value) {
    return SolverParameter_SolverType_IsValid(value);
  }
  static constexpr SolverType SolverType_MIN = SolverParameter_SolverType_SolverType_MIN;
  static constexpr SolverType SolverType_MAX = SolverParameter_SolverType_SolverType_MAX;
  static constexpr int SolverType_ARRAYSIZE = SolverParameter_SolverType_SolverType_ARRAYSIZE;
  static inline const ::google::protobuf::EnumDescriptor* PROTOBUF_NONNULL SolverType_descriptor() {
    return SolverParameter_SolverType_descriptor();
  }
  template <typename T>
  [[nodiscard]] static inline const ::std::string& SolverType_Name(T value) {
    return SolverParameter_SolverType_Name(value);
  }
  [[nodiscard]] static inline bool SolverType_Parse(
      ::absl::string_view name, SolverType* PROTOBUF_NONNULL value) {
    return SolverParameter_SolverType_Parse(name, value);
  }

  // accessors -------------------------------------------------------
  enum : int {
    kTestNetFieldNumber = 2,
    kTestIterFieldNumber = 3,
    kTestNetParamFieldNumber = 22,
    kTestStateFieldNumber = 27,
    kTrainNetFieldNumber = 1,
    kLrPolicyFieldNumber = 8,
    kSnapshotPrefixFieldNumber = 15,
    kNetFieldNumber = 24,
    kRegularizationTypeFieldNumber = 29,
    kTrainNetParamFieldNumber = 21,
    kNetParamFieldNumber = 25,
    kTrainStateFieldNumber = 26,
    kTestIntervalFieldNumber = 4,
    kBaseLrFieldNumber = 5,
    kDisplayFieldNumber = 6,
    kMaxIterFieldNumber = 7,
    kGammaFieldNumber = 9,
    kPowerFieldNumber = 10,
    kMomentumFieldNumber = 11,
    kWeightDecayFieldNumber = 12,
    kStepsizeFieldNumber = 13,
    kSnapshotFieldNumber = 14,
    kDeviceIdFieldNumber = 18,
    kSnapshotDiffFieldNumber = 16,
    kTestComputeLossFieldNumber = 19,
    kDebugInfoFieldNumber = 23,
    kSolverTypeFieldNumber = 30,
    kDeltaFieldNumber = 31,
    kRandomSeedFieldNumber = 20,
    kSolverModeFieldNumber = 17,
    kSnapshotAfterTrainFieldNumber = 28,
    kStepvalueFieldNumber = 34,
    kTypeFieldNumber = 40,
    kRmsDecayFieldNumber = 38,
    kTestInitializationFieldNumber = 32,
    kAverageLossFieldNumber = 33,
    kClipGradientsFieldNumber = 35,
    kIterSizeFieldNumber = 36,
    kSnapshotFormatFieldNumber = 37,
    kMomentum2FieldNumber = 39,
  };
  // repeated string test_net = 2;
  [[nodiscard]] int test_net_size()
      const;
  private:
  int _internal_test_net_size() const;

  public:
  void clear_test_net() ;
  [[nodiscard]] const ::std::string& test_net(int index) const;
  ::std::string* PROTOBUF_NONNULL mutable_test_net(int index);
  template <typename Arg_ = const ::std::string&, typename... Args_>
  void set_test_net(int index, Arg_&& value, Args_... args);
  ::std::string* PROTOBUF_NONNULL add_test_net();
  template <typename Arg_ = const ::std::string&, typename... Args_>
  void add_test_net(Arg_&& value, Args_... args);
  [[nodiscard]] const
      ::google::protobuf::RepeatedPtrField<::std::string>&
      test_net() const;
  [[nodiscard]] ::google::protobuf::RepeatedPtrField<::std::string>*
      PROTOBUF_NONNULL
      mutable_test_net();

  private:
  const ::google::protobuf::RepeatedPtrField<::std::string>& _internal_test_net() const;
  ::google::protobuf::RepeatedPtrField<::std::string>* PROTOBUF_NONNULL _internal_mutable_test_net();

  public:
  // repeated int32 test_iter = 3;
  [[nodiscard]] int test_iter_size()
      const;
  private:
  int _internal_test_iter_size() const;

  public:
  void clear_test_iter() ;
  [[nodiscard]] ::int32_t test_iter(int index) const;
  void set_test_iter(int index, ::int32_t value);
  void add_test_iter(::int32_t value);
  [[nodiscard]] const ::google::protobuf::RepeatedField<::int32_t>& test_iter()
      const;
  ::google::protobuf::RepeatedField<::int32_t>* PROTOBUF_NONNULL mutable_test_iter();

  private:
  const ::google::protobuf::RepeatedField<::int32_t>& _internal_test_iter() const;
  ::google::protobuf::RepeatedField<::int32_t>* PROTOBUF_NONNULL _internal_mutable_test_iter();

  public:
  // repeated .caffe.NetParameter test_net_param = 22;
  [[nodiscard]] int test_net_param_size()
      const;
  private:
  int _internal_test_net_param_size() const;

  public:
  void clear_test_net_param() ;
  [[nodiscard]] const ::caffe::NetParameter& test_net_param(int index) const;
  [[nodiscard]] ::caffe::NetParameter* PROTOBUF_NONNULL mutable_test_net_param(int index);
  ::caffe::NetParameter* PROTOBUF_NONNULL add_test_net_param();
  [[nodiscard]] const ::google::protobuf::RepeatedPtrField<::caffe::NetParameter>&
  test_net_param() const;
  [[nodiscard]] ::google::protobuf::RepeatedPtrField<::caffe::NetParameter>* PROTOBUF_NONNULL
  mutable_test_net_param();

  private:
  const ::google::protobuf::RepeatedPtrField<::caffe::NetParameter>& _internal_test_net_param() const;
  ::google::protobuf::RepeatedPtrField<::caffe::NetParameter>* PROTOBUF_NONNULL _internal_mutable_test_net_param();

  public:
  // repeated .caffe.NetState test_state = 27;
  [[nodiscard]] int test_state_size()
      const;
  private:
  int _internal_test_state_size() const;

  public:
  void clear_test_state() ;
  [[nodiscard]] const ::caffe::NetState& test_state(int index) const;
  [[nodiscard]] ::caffe::NetState* PROTOBUF_NONNULL mutable_test_state(int index);
  ::caffe::NetState* PROTOBUF_NONNULL add_test_state();
  [[nodiscard]] const ::google::protobuf::RepeatedPtrField<::caffe::NetState>&
  test_state() const;
  [[nodiscard]] ::google::protobuf::RepeatedPtrField<::caffe::NetState>* PROTOBUF_NONNULL
  mutable_test_state();

  private:
  const ::google::protobuf::RepeatedPtrField<::caffe::NetState>& _internal_test_state() const;
  ::google::protobuf::RepeatedPtrField<::caffe::NetState>* PROTOBUF_NONNULL _internal_mutable_test_state();

  public:
  // optional string train_net = 1;
  [[nodiscard]] bool has_train_net()
      const;
  void clear_train_net() ;
  [[nodiscard]] const ::std::string& train_net() const;
  template <typename Arg_ = const ::std::string&, typename... Args_>
  void set_train_net(Arg_&& arg, Args_... args);
  ::std::string* PROTOBUF_NONNULL mutable_train_net();
  [[nodiscard]] ::std::string* PROTOBUF_NULLABLE release_train_net();
  void set_allocated_train_net(::std::string* PROTOBUF_NULLABLE value);

  private:
  const ::std::string& _internal_train_net() const;
  PROTOBUF_ALWAYS_INLINE void _internal_set_train_net(const ::std::string& value);
  ::std::string* PROTOBUF_NONNULL _internal_mutable_train_net();

  public:
  // optional string lr_policy = 8;
  [[nodiscard]] bool has_lr_policy()
      const;
  void clear_lr_policy() ;
  [[nodiscard]] const ::std::string& lr_policy() const;
  template <typename Arg_ = const ::std::string&, typename... Args_>
  void set_lr_policy(Arg_&& arg, Args_... args);
  ::std::string* PROTOBUF_NONNULL mutable_lr_policy();
  [[nodiscard]] ::std::string* PROTOBUF_NULLABLE release_lr_policy();
  void set_allocated_lr_policy(::std::string* PROTOBUF_NULLABLE value);

  private:
  const ::std::string& _internal_lr_policy() const;
  PROTOBUF_ALWAYS_INLINE void _internal_set_lr_policy(const ::std::string& value);
  ::std::string* PROTOBUF_NONNULL _internal_mutable_lr_policy();

  public:
  // optional string snapshot_prefix = 15;
  [[nodiscard]] bool has_snapshot_prefix()
      const;
  void clear_snapshot_prefix() ;
  [[nodiscard]] const ::std::string& snapshot_prefix() const;
  template <typename Arg_ = const ::std::string&, typename... Args_>
  void set_snapshot_prefix(Arg_&& arg, Args_... args);
  ::std::string* PROTOBUF_NONNULL mutable_snapshot_prefix();
  [[nodiscard]] ::std::string* PROTOBUF_NULLABLE release_snapshot_prefix();
  void set_allocated_snapshot_prefix(::std::string* PROTOBUF_NULLABLE value);

  private:
  const ::std::string& _internal_snapshot_prefix() const;
  PROTOBUF_ALWAYS_INLINE void _internal_set_snapshot_prefix(const ::std::string& value);
  ::std::string* PROTOBUF_NONNULL _internal_mutable_snapshot_prefix();

  public:
  // optional string net = 24;
  [[nodiscard]] bool has_net()
      const;
  void clear_net() ;
  [[nodiscard]] const ::std::string& net() const;
  template <typename Arg_ = const ::std::string&, typename... Args_>
  void set_net(Arg_&& arg, Args_... args);
  ::std::string* PROTOBUF_NONNULL mutable_net();
  [[nodiscard]] ::std::string* PROTOBUF_NULLABLE release_net();
  void set_allocated_net(::std::string* PROTOBUF_NULLABLE value);

  private:
  const ::std::string& _internal_net() const;
  PROTOBUF_ALWAYS_INLINE void _internal_set_net(const ::std::string& value);
  ::std::string* PROTOBUF_NONNULL _internal_mutable_net();

  public:
  // optional string regularization_type = 29 [default = "L2"];
  [[nodiscard]] bool has_regularization_type()
      const;
  void clear_regularization_type() ;
  [[nodiscard]] const ::std::string& regularization_type() const;
  template <typename Arg_ = const ::std::string&, typename... Args_>
  void set_regularization_type(Arg_&& arg, Args_... args);
  ::std::string* PROTOBUF_NONNULL mutable_regularization_type();
  [[nodiscard]] ::std::string* PROTOBUF_NULLABLE release_regularization_type();
  void set_allocated_regularization_type(::std::string* PROTOBUF_NULLABLE value);

  private:
  const ::std::string& _internal_regularization_type() const;
  PROTOBUF_ALWAYS_INLINE void _internal_set_regularization_type(const ::std::string& value);
  ::std::string* PROTOBUF_NONNULL _internal_mutable_regularization_type();

  public:
  // optional .caffe.NetParameter train_net_param = 21;
  [[nodiscard]] bool has_train_net_param()
      const;
  void clear_train_net_param() ;
  [[nodiscard]] const ::caffe::NetParameter& train_net_param() const;
  [[nodiscard]] ::caffe::NetParameter* PROTOBUF_NULLABLE release_train_net_param();
  ::caffe::NetParameter* PROTOBUF_NONNULL mutable_train_net_param();
  void set_allocated_train_net_param(::caffe::NetParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_train_net_param(::caffe::NetParameter* PROTOBUF_NULLABLE value);
  ::caffe::NetParameter* PROTOBUF_NULLABLE unsafe_arena_release_train_net_param();

  private:
  const ::caffe::NetParameter& _internal_train_net_param() const;
  ::caffe::NetParameter* PROTOBUF_NONNULL _internal_mutable_train_net_param();

  public:
  // optional .caffe.NetParameter net_param = 25;
  [[nodiscard]] bool has_net_param()
      const;
  void clear_net_param() ;
  [[nodiscard]] const ::caffe::NetParameter& net_param() const;
  [[nodiscard]] ::caffe::NetParameter* PROTOBUF_NULLABLE release_net_param();
  ::caffe::NetParameter* PROTOBUF_NONNULL mutable_net_param();
  void set_allocated_net_param(::caffe::NetParameter* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_net_param(::caffe::NetParameter* PROTOBUF_NULLABLE value);
  ::caffe::NetParameter* PROTOBUF_NULLABLE unsafe_arena_release_net_param();

  private:
  const ::caffe::NetParameter& _internal_net_param() const;
  ::caffe::NetParameter* PROTOBUF_NONNULL _internal_mutable_net_param();

  public:
  // optional .caffe.NetState train_state = 26;
  [[nodiscard]] bool has_train_state()
      const;
  void clear_train_state() ;
  [[nodiscard]] const ::caffe::NetState& train_state() const;
  [[nodiscard]] ::caffe::NetState* PROTOBUF_NULLABLE release_train_state();
  ::caffe::NetState* PROTOBUF_NONNULL mutable_train_state();
  void set_allocated_train_state(::caffe::NetState* PROTOBUF_NULLABLE value);
  void unsafe_arena_set_allocated_train_state(::caffe::NetState* PROTOBUF_NULLABLE value);
  ::caffe::NetState* PROTOBUF_NULLABLE unsafe_arena_release_train_state();

  private:
  const ::caffe::NetState& _internal_train_state() const;
  ::caffe::NetState* PROTOBUF_NONNULL _internal_mutable_train_state();

  public:
  // optional int32 test_interval = 4 [default = 0];
  [[nodiscard]] bool has_test_interval()
      const;
  void clear_test_interval() ;
  [[nodiscard]] ::int32_t test_interval() const;
  void set_test_interval(::int32_t value);

  private:
  ::int32_t _internal_test_interval() const;
  void _internal_set_test_interval(::int32_t value);

  public:
  // optional float base_lr = 5;
  [[nodiscard]] bool has_base_lr()
      const;
  void clear_base_lr() ;
  [[nodiscard]] float base_lr() const;
  void set_base_lr(float value);

  private:
  float _internal_base_lr() const;
  void _internal_set_base_lr(float value);

  public:
  // optional int32 display = 6;
  [[nodiscard]] bool has_display()
      const;
  void clear_display() ;
  [[nodiscard]] ::int32_t display() const;
  void set_display(::int32_t value);

  private:
  ::int32_t _internal_display() const;
  void _internal_set_display(::int32_t value);

  public:
  // optional int32 max_iter = 7;
  [[nodiscard]] bool has_max_iter()
      const;
  void clear_max_iter() ;
  [[nodiscard]] ::int32_t max_iter() const;
  void set_max_iter(::int32_t value);

  private:
  ::int32_t _internal_max_iter() const;
  void _internal_set_max_iter(::int32_t value);

  public:
  // optional float gamma = 9;
  [[nodiscard]] bool has_gamma()
      const;
  void clear_gamma() ;
  [[nodiscard]] float gamma() const;
  void set_gamma(float value);

  private:
  float _internal_gamma() const;
  void _internal_set_gamma(float value);

  public:
  // optional float power = 10;
  [[nodiscard]] bool has_power()
      const;
  void clear_power() ;
  [[nodiscard]] float power() const;
  void set_power(float value);

  private:
  float _internal_power() const;
  void _internal_set_power(float value);

  public:
  // optional float momentum = 11;
  [[nodiscard]] bool has_momentum()
      const;
  void clear_momentum() ;
  [[nodiscard]] float momentum() const;
  void set_momentum(float value);

  private:
  float _internal_momentum() const;
  void _internal_set_momentum(float value);

  public:
  // optional float weight_decay = 12;
  [[nodiscard]] bool has_weight_decay()
      const;
  void clear_weight_decay() ;
  [[nodiscard]] float weight_decay() const;
  void set_weight_decay(float value);

  private:
  float _internal_weight_decay() const;
  void _internal_set_weight_decay(float value);

  public:
  // optional int32 stepsize = 13;
  [[nodiscard]] bool has_stepsize()
      const;
  void clear_stepsize() ;
  [[nodiscard]] ::int32_t stepsize() const;
  void set_stepsize(::int32_t value);

  private:
  ::int32_t _internal_stepsize() const;
  void _internal_set_stepsize(::int32_t value);

  public:
  // optional int32 snapshot = 14 [default = 0];
  [[nodiscard]] bool has_snapshot()
      const;
  void clear_snapshot() ;
  [[nodiscard]] ::int32_t snapshot() const;
  void set_snapshot(::int32_t value);

  private:
  ::int32_t _internal_snapshot() const;
  void _internal_set_snapshot(::int32_t value);

  public:
  // optional int32 device_id = 18 [default = 0];
  [[nodiscard]] bool has_device_id()
      const;
  void clear_device_id() ;
  [[nodiscard]] ::int32_t device_id() const;
  void set_device_id(::int32_t value);

  private:
  ::int32_t _internal_device_id() const;
  void _internal_set_device_id(::int32_t value);

  public:
  // optional bool snapshot_diff = 16 [default = false];
  [[nodiscard]] bool has_snapshot_diff()
      const;
  void clear_snapshot_diff() ;
  [[nodiscard]] bool snapshot_diff() const;
  void set_snapshot_diff(bool value);

  private:
  bool _internal_snapshot_diff() const;
  void _internal_set_snapshot_diff(bool value);

  public:
  // optional bool test_compute_loss = 19 [default = false];
  [[nodiscard]] bool has_test_compute_loss()
      const;
  void clear_test_compute_loss() ;
  [[nodiscard]] bool test_compute_loss() const;
  void set_test_compute_loss(bool value);

  private:
  bool _internal_test_compute_loss() const;
  void _internal_set_test_compute_loss(bool value);

  public:
  // optional bool debug_info = 23 [default = false];
  [[nodiscard]] bool has_debug_info()
      const;
  void clear_debug_info() ;
  [[nodiscard]] bool debug_info() const;
  void set_debug_info(bool value);

  private:
  bool _internal_debug_info() const;
  void _internal_set_debug_info(bool value);

  public:
  // optional .caffe.SolverParameter.SolverType solver_type = 30 [default = SGD];
  [[nodiscard]] bool has_solver_type()
      const;
  void clear_solver_type() ;
  [[nodiscard]] ::caffe::SolverParameter_SolverType solver_type() const;
  void set_solver_type(::caffe::SolverParameter_SolverType value);

  private:
  ::caffe::SolverParameter_SolverType _internal_solver_type() const;
  void _internal_set_solver_type(::caffe::SolverParameter_SolverType value);

  public:
  // optional float delta = 31 [default = 1e-08];
  [[nodiscard]] bool has_delta()
      const;
  void clear_delta() ;
  [[nodiscard]] float delta() const;
  void set_delta(float value);

  private:
  float _internal_delta() const;
  void _internal_set_delta(float value);

  public:
  // optional int64 random_seed = 20 [default = -1];
  [[nodiscard]] bool has_random_seed()
      const;
  void clear_random_seed() ;
  [[nodiscard]] ::int64_t random_seed() const;
  void set_random_seed(::int64_t value);

  private:
  ::int64_t _internal_random_seed() const;
  void _internal_set_random_seed(::int64_t value);

  public:
  // optional .caffe.SolverParameter.SolverMode solver_mode = 17 [default = GPU];
  [[nodiscard]] bool has_solver_mode()
      const;
  void clear_solver_mode() ;
  [[nodiscard]] ::caffe::SolverParameter_SolverMode solver_mode() const;
  void set_solver_mode(::caffe::SolverParameter_SolverMode value);

  private:
  ::caffe::SolverParameter_SolverMode _internal_solver_mode() const;
  void _internal_set_solver_mode(::caffe::SolverParameter_SolverMode value);

  public:
  // optional bool snapshot_after_train = 28 [default = true];
  [[nodiscard]] bool has_snapshot_after_train()
      const;
  void clear_snapshot_after_train() ;
  [[nodiscard]] bool snapshot_after_train() const;
  void set_snapshot_after_train(bool value);

  private:
  bool _internal_snapshot_after_train() const;
  void _internal_set_snapshot_after_train(bool value);

  public:
  // repeated int32 stepvalue = 34;
  [[nodiscard]] int stepvalue_size()
      const;
  private:
  int _internal_stepvalue_size() const;

  public:
  void clear_stepvalue() ;
  [[nodiscard]] ::int32_t stepvalue(int index) const;
  void set_stepvalue(int index, ::int32_t value);
  void add_stepvalue(::int32_t value);
  [[nodiscard]] const ::google::protobuf::RepeatedField<::int32_t>& stepvalue()
      const;
  ::google::protobuf::RepeatedField<::int32_t>* PROTOBUF_NONNULL mutable_stepvalue();

  private:
  const ::google::protobuf::RepeatedField<::int32_t>& _internal_stepvalue() const;
  ::google::protobuf::RepeatedField<::int32_t>* PROTOBUF_NONNULL _internal_mutable_stepvalue();

  public:
  // optional string type = 40 [default = "SGD"];
  [[nodiscard]] bool has_type()
      const;
  void clear_type() ;
  [[nodiscard]] const ::std::string& type() const;
  template <typename Arg_ = const ::std::string&, typename... Args_>
  void set_type(Arg_&& arg, Args_... args);
  ::std::string* PROTOBUF_NONNULL mutable_type();
  [[nodiscard]] ::std::string* PROTOBUF_NULLABLE release_type();
  void set_allocated_type(::std::string* PROTOBUF_NULLABLE value);

  private:
  const ::std::string& _internal_type() const;
  PROTOBUF_ALWAYS_INLINE void _internal_set_type(const ::std::string& value);
  ::std::string* PROTOBUF_NONNULL _internal_mutable_type();

  public:
  // optional float rms_decay = 38;
  [[nodiscard]] bool has_rms_decay()
      const;
  void clear_rms_decay() ;
  [[nodiscard]] float rms_decay() const;
  void set_rms_decay(float value);

  private:
  float _internal_rms_decay() const;
  void _internal_set_rms_decay(float value);

  public:
  // optional bool test_initialization = 32 [default = true];
  [[nodiscard]] bool has_test_initialization()
      const;
  void clear_test_initialization() ;
  [[nodiscard]] bool test_initialization() const;
  void set_test_initialization(bool value);

  private:
  bool _internal_test_initialization() const;
  void _internal_set_test_initialization(bool value);

  public:
  // optional int32 average_loss = 33 [default = 1];
  [[nodiscard]] bool has_average_loss()
      const;
  void clear_average_loss() ;
  [[nodiscard]] ::int32_t average_loss() const;
  void set_average_loss(::int32_t value);

  private:
  ::int32_t _internal_average_loss() const;
  void _internal_set_average_loss(::int32_t value);

  public:
  // optional float clip_gradients = 35 [default = -1];
  [[nodiscard]] bool has_clip_gradients()
      const;
  void clear_clip_gradients() ;
  [[nodiscard]] float clip_gradients() const;
  void set_clip_gradients(float value);

  private:
  float _internal_clip_gradients() const;
  void _internal_set_clip_gradients(float value);

  public:
  // optional int32 iter_size = 36 [default = 1];
  [[nodiscard]] bool has_iter_size()
      const;
  void clear_iter_size() ;
  [[nodiscard]] ::int32_t iter_size() const;
  void set_iter_size(::int32_t value);

  private:
  ::int32_t _internal_iter_size() const;
  void _internal_set_iter_size(::int32_t value);

  public:
  // optional .caffe.SolverParameter.SnapshotFormat snapshot_format = 37 [default = BINARYPROTO];
  [[nodiscard]] bool has_snapshot_format()
      const;
  void clear_snapshot_format() ;
  [[nodiscard]] ::caffe::SolverParameter_SnapshotFormat snapshot_format() const;
  void set_snapshot_format(::caffe::SolverParameter_SnapshotFormat value);

  private:
  ::caffe::SolverParameter_SnapshotFormat _internal_snapshot_format() const;
  void _internal_set_snapshot_format(::caffe::SolverParameter_SnapshotFormat value);

  public:
  // optional float momentum2 = 39 [default = 0.999];
  [[nodiscard]] bool has_momentum2()
      const;
  void clear_momentum2() ;
  [[nodiscard]] float momentum2() const;
  void set_momentum2(float value);

  private:
  float _internal_momentum2() const;
  void _internal_set_momentum2(float value);

  public:
  // @@protoc_insertion_point(class_scope:caffe.SolverParameter)
 private:
  class _Internal;
  using ParseTableT_ =
      ::google::protobuf::internal::TcParseTable<5, 40,
                          8, 0,
                          7>;
  static constexpr ParseTableT_ InternalGenerateParseTable_(
      const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL class_data);
  friend class ::google::protobuf::internal::TcParser;
  #ifndef PROTOBUF_MESSAGE_GLOBALS
  static const ParseTableT_ _table_;
  #endif

  friend class ::google::protobuf::MessageLite;
  friend class ::google::protobuf::Arena;
  friend ::google::protobuf::internal::PrivateAccess;
  template <typename T>
  friend class ::google::protobuf::Arena::InternalHelper;
  using InternalArenaConstructable_ = void;
  using DestructorSkippable_ = void;
  struct Impl_ {
    inline explicit constexpr Impl_(::google::protobuf::internal::InternalVisibility visibility,
                                    ::google::protobuf::internal::ConstantInitialized) noexcept;
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
    inline explicit Impl_(
        ::google::protobuf::internal::InternalVisibility visibility,
        ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const Impl_& from,
        const SolverParameter& from_msg);
    ::google::protobuf::internal::HasBits<2> _has_bits_;
    ::google::protobuf::internal::CachedSize _cached_size_;
    ::google::protobuf::RepeatedPtrField<::std::string> test_net_;
    ::google::protobuf::RepeatedField<::int32_t> test_iter_;
    ::google::protobuf::RepeatedPtrField< ::caffe::NetParameter > test_net_param_;
    ::google::protobuf::RepeatedPtrField< ::caffe::NetState > test_state_;
    ::google::protobuf::internal::ArenaStringPtr train_net_;
    ::google::protobuf::internal::ArenaStringPtr lr_policy_;
    ::google::protobuf::internal::ArenaStringPtr snapshot_prefix_;
    ::google::protobuf::internal::ArenaStringPtr net_;
    static const ::google::protobuf::internal::LazyString _i_give_permission_to_break_this_code_default_regularization_type_;
    ::google::protobuf::internal::ArenaStringPtr regularization_type_;
    ::caffe::NetParameter* PROTOBUF_NULLABLE train_net_param_;
    ::caffe::NetParameter* PROTOBUF_NULLABLE net_param_;
    ::caffe::NetState* PROTOBUF_NULLABLE train_state_;
    ::int32_t test_interval_;
    float base_lr_;
    ::int32_t display_;
    ::int32_t max_iter_;
    float gamma_;
    float power_;
    float momentum_;
    float weight_decay_;
    ::int32_t stepsize_;
    ::int32_t snapshot_;
    ::int32_t device_id_;
    bool snapshot_diff_;
    bool test_compute_loss_;
    bool debug_info_;
    int solver_type_;
    float delta_;
    ::int64_t random_seed_;
    int solver_mode_;
    bool snapshot_after_train_;
    ::google::protobuf::RepeatedField<::int32_t> stepvalue_;
    static const ::google::protobuf::internal::LazyString _i_give_permission_to_break_this_code_default_type_;
    ::google::protobuf::internal::ArenaStringPtr type_;
    float rms_decay_;
    bool test_initialization_;
    ::int32_t average_loss_;
    float clip_gradients_;
    ::int32_t iter_size_;
    int snapshot_format_;
    float momentum2_;
    PROTOBUF_TSAN_DECLARE_MEMBER
  };
  union { Impl_ _impl_; };
  friend struct ::TableStruct_caffe_2eproto;
};

// ===================================================================




// ===================================================================


#ifdef __GNUC__
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wstrict-aliasing"
#endif  // __GNUC__
// -------------------------------------------------------------------

// BlobShape

// repeated int64 dim = 1 [packed = true];
inline int BlobShape::_internal_dim_size() const {
  return _internal_dim().size();
}
inline int BlobShape::dim_size() const {
  return _internal_dim_size();
}
inline void BlobShape::clear_dim() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.dim_.Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
}
inline ::int64_t BlobShape::dim(int index) const {
  // @@protoc_insertion_point(field_get:caffe.BlobShape.dim)
  return _internal_dim().Get(index);
}
inline void BlobShape::set_dim(int index, ::int64_t value) {
  _internal_mutable_dim()->Set(index, value);
  // @@protoc_insertion_point(field_set:caffe.BlobShape.dim)
}
inline void BlobShape::add_dim(::int64_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _internal_mutable_dim()
      ->InternalAddWithArena<const ::google::protobuf::MessageLite*>(
          internal_visibility(), this, value);
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_add:caffe.BlobShape.dim)
}
inline const ::google::protobuf::RepeatedField<::int64_t>& BlobShape::dim() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_list:caffe.BlobShape.dim)
  return _internal_dim();
}
inline ::google::protobuf::RepeatedField<::int64_t>* PROTOBUF_NONNULL BlobShape::mutable_dim()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_mutable_list:caffe.BlobShape.dim)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _internal_mutable_dim();
}
inline const ::google::protobuf::RepeatedField<::int64_t>&
BlobShape::_internal_dim() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.dim_;
}
inline ::google::protobuf::RepeatedField<::int64_t>* PROTOBUF_NONNULL
BlobShape::_internal_mutable_dim() {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return &_impl_.dim_;
}

// -------------------------------------------------------------------

// BlobProto

// optional .caffe.BlobShape shape = 7;
inline bool BlobProto::has_shape() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000010U);
  PROTOBUF_ASSUME(!value || _impl_.shape_ != nullptr);
  return value;
}
inline void BlobProto::clear_shape() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.shape_ != nullptr) _impl_.shape_->Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000010U);
}
inline const ::caffe::BlobShape& BlobProto::_internal_shape() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::BlobShape* p = _impl_.shape_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::BlobShape>(&::caffe::BlobShape_globals_);
}
inline const ::caffe::BlobShape& BlobProto::shape() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.BlobProto.shape)
  return _internal_shape();
}
inline void BlobProto::unsafe_arena_set_allocated_shape(
    ::caffe::BlobShape* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.shape_);
  }
  _impl_.shape_ = reinterpret_cast<::caffe::BlobShape*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000010U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000010U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.BlobProto.shape)
}
inline ::caffe::BlobShape* PROTOBUF_NULLABLE BlobProto::release_shape() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[0], 0x00000010U);
  ::caffe::BlobShape* released = _impl_.shape_;
  _impl_.shape_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::BlobShape* PROTOBUF_NULLABLE BlobProto::unsafe_arena_release_shape() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.BlobProto.shape)

  ClearHasBit(_impl_._has_bits_[0], 0x00000010U);
  ::caffe::BlobShape* temp = _impl_.shape_;
  _impl_.shape_ = nullptr;
  return temp;
}
inline ::caffe::BlobShape* PROTOBUF_NONNULL BlobProto::_internal_mutable_shape() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.shape_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::BlobShape>(GetArena());
    _impl_.shape_ = reinterpret_cast<::caffe::BlobShape*>(p);
  }
  return _impl_.shape_;
}
inline ::caffe::BlobShape* PROTOBUF_NONNULL BlobProto::mutable_shape()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000010U);
  ::caffe::BlobShape* _msg = _internal_mutable_shape();
  // @@protoc_insertion_point(field_mutable:caffe.BlobProto.shape)
  return _msg;
}
inline void BlobProto::set_allocated_shape(::caffe::BlobShape* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.shape_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[0], 0x00000010U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000010U);
  }

  _impl_.shape_ = reinterpret_cast<::caffe::BlobShape*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.BlobProto.shape)
}

// repeated float data = 5 [packed = true];
inline int BlobProto::_internal_data_size() const {
  return _internal_data().size();
}
inline int BlobProto::data_size() const {
  return _internal_data_size();
}
inline void BlobProto::clear_data() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.data_.Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
}
inline float BlobProto::data(int index) const {
  // @@protoc_insertion_point(field_get:caffe.BlobProto.data)
  return _internal_data().Get(index);
}
inline void BlobProto::set_data(int index, float value) {
  _internal_mutable_data()->Set(index, value);
  // @@protoc_insertion_point(field_set:caffe.BlobProto.data)
}
inline void BlobProto::add_data(float value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _internal_mutable_data()
      ->InternalAddWithArena<const ::google::protobuf::MessageLite*>(
          internal_visibility(), this, value);
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_add:caffe.BlobProto.data)
}
inline const ::google::protobuf::RepeatedField<float>& BlobProto::data() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_list:caffe.BlobProto.data)
  return _internal_data();
}
inline ::google::protobuf::RepeatedField<float>* PROTOBUF_NONNULL BlobProto::mutable_data()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_mutable_list:caffe.BlobProto.data)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _internal_mutable_data();
}
inline const ::google::protobuf::RepeatedField<float>&
BlobProto::_internal_data() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.data_;
}
inline ::google::protobuf::RepeatedField<float>* PROTOBUF_NONNULL
BlobProto::_internal_mutable_data() {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return &_impl_.data_;
}

// repeated float diff = 6 [packed = true];
inline int BlobProto::_internal_diff_size() const {
  return _internal_diff().size();
}
inline int BlobProto::diff_size() const {
  return _internal_diff_size();
}
inline void BlobProto::clear_diff() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.diff_.Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
}
inline float BlobProto::diff(int index) const {
  // @@protoc_insertion_point(field_get:caffe.BlobProto.diff)
  return _internal_diff().Get(index);
}
inline void BlobProto::set_diff(int index, float value) {
  _internal_mutable_diff()->Set(index, value);
  // @@protoc_insertion_point(field_set:caffe.BlobProto.diff)
}
inline void BlobProto::add_diff(float value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _internal_mutable_diff()
      ->InternalAddWithArena<const ::google::protobuf::MessageLite*>(
          internal_visibility(), this, value);
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  // @@protoc_insertion_point(field_add:caffe.BlobProto.diff)
}
inline const ::google::protobuf::RepeatedField<float>& BlobProto::diff() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_list:caffe.BlobProto.diff)
  return _internal_diff();
}
inline ::google::protobuf::RepeatedField<float>* PROTOBUF_NONNULL BlobProto::mutable_diff()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  // @@protoc_insertion_point(field_mutable_list:caffe.BlobProto.diff)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _internal_mutable_diff();
}
inline const ::google::protobuf::RepeatedField<float>&
BlobProto::_internal_diff() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.diff_;
}
inline ::google::protobuf::RepeatedField<float>* PROTOBUF_NONNULL
BlobProto::_internal_mutable_diff() {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return &_impl_.diff_;
}

// repeated double double_data = 8 [packed = true];
inline int BlobProto::_internal_double_data_size() const {
  return _internal_double_data().size();
}
inline int BlobProto::double_data_size() const {
  return _internal_double_data_size();
}
inline void BlobProto::clear_double_data() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.double_data_.Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000004U);
}
inline double BlobProto::double_data(int index) const {
  // @@protoc_insertion_point(field_get:caffe.BlobProto.double_data)
  return _internal_double_data().Get(index);
}
inline void BlobProto::set_double_data(int index, double value) {
  _internal_mutable_double_data()->Set(index, value);
  // @@protoc_insertion_point(field_set:caffe.BlobProto.double_data)
}
inline void BlobProto::add_double_data(double value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _internal_mutable_double_data()
      ->InternalAddWithArena<const ::google::protobuf::MessageLite*>(
          internal_visibility(), this, value);
  SetHasBit(_impl_._has_bits_[0], 0x00000004U);
  // @@protoc_insertion_point(field_add:caffe.BlobProto.double_data)
}
inline const ::google::protobuf::RepeatedField<double>& BlobProto::double_data() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_list:caffe.BlobProto.double_data)
  return _internal_double_data();
}
inline ::google::protobuf::RepeatedField<double>* PROTOBUF_NONNULL BlobProto::mutable_double_data()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000004U);
  // @@protoc_insertion_point(field_mutable_list:caffe.BlobProto.double_data)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _internal_mutable_double_data();
}
inline const ::google::protobuf::RepeatedField<double>&
BlobProto::_internal_double_data() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.double_data_;
}
inline ::google::protobuf::RepeatedField<double>* PROTOBUF_NONNULL
BlobProto::_internal_mutable_double_data() {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return &_impl_.double_data_;
}

// repeated double double_diff = 9 [packed = true];
inline int BlobProto::_internal_double_diff_size() const {
  return _internal_double_diff().size();
}
inline int BlobProto::double_diff_size() const {
  return _internal_double_diff_size();
}
inline void BlobProto::clear_double_diff() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.double_diff_.Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000008U);
}
inline double BlobProto::double_diff(int index) const {
  // @@protoc_insertion_point(field_get:caffe.BlobProto.double_diff)
  return _internal_double_diff().Get(index);
}
inline void BlobProto::set_double_diff(int index, double value) {
  _internal_mutable_double_diff()->Set(index, value);
  // @@protoc_insertion_point(field_set:caffe.BlobProto.double_diff)
}
inline void BlobProto::add_double_diff(double value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _internal_mutable_double_diff()
      ->InternalAddWithArena<const ::google::protobuf::MessageLite*>(
          internal_visibility(), this, value);
  SetHasBit(_impl_._has_bits_[0], 0x00000008U);
  // @@protoc_insertion_point(field_add:caffe.BlobProto.double_diff)
}
inline const ::google::protobuf::RepeatedField<double>& BlobProto::double_diff() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_list:caffe.BlobProto.double_diff)
  return _internal_double_diff();
}
inline ::google::protobuf::RepeatedField<double>* PROTOBUF_NONNULL BlobProto::mutable_double_diff()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000008U);
  // @@protoc_insertion_point(field_mutable_list:caffe.BlobProto.double_diff)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _internal_mutable_double_diff();
}
inline const ::google::protobuf::RepeatedField<double>&
BlobProto::_internal_double_diff() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.double_diff_;
}
inline ::google::protobuf::RepeatedField<double>* PROTOBUF_NONNULL
BlobProto::_internal_mutable_double_diff() {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return &_impl_.double_diff_;
}

// optional int32 num = 1 [default = 0];
inline bool BlobProto::has_num() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000020U);
  return value;
}
inline void BlobProto::clear_num() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.num_ = 0;
  ClearHasBit(_impl_._has_bits_[0], 0x00000020U);
}
inline ::int32_t BlobProto::num() const {
  // @@protoc_insertion_point(field_get:caffe.BlobProto.num)
  return _internal_num();
}
inline void BlobProto::set_num(::int32_t value) {
  _internal_set_num(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000020U);
  // @@protoc_insertion_point(field_set:caffe.BlobProto.num)
}
inline ::int32_t BlobProto::_internal_num() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.num_;
}
inline void BlobProto::_internal_set_num(::int32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.num_ = value;
}

// optional int32 channels = 2 [default = 0];
inline bool BlobProto::has_channels() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000040U);
  return value;
}
inline void BlobProto::clear_channels() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.channels_ = 0;
  ClearHasBit(_impl_._has_bits_[0], 0x00000040U);
}
inline ::int32_t BlobProto::channels() const {
  // @@protoc_insertion_point(field_get:caffe.BlobProto.channels)
  return _internal_channels();
}
inline void BlobProto::set_channels(::int32_t value) {
  _internal_set_channels(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000040U);
  // @@protoc_insertion_point(field_set:caffe.BlobProto.channels)
}
inline ::int32_t BlobProto::_internal_channels() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.channels_;
}
inline void BlobProto::_internal_set_channels(::int32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.channels_ = value;
}

// optional int32 height = 3 [default = 0];
inline bool BlobProto::has_height() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000080U);
  return value;
}
inline void BlobProto::clear_height() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.height_ = 0;
  ClearHasBit(_impl_._has_bits_[0], 0x00000080U);
}
inline ::int32_t BlobProto::height() const {
  // @@protoc_insertion_point(field_get:caffe.BlobProto.height)
  return _internal_height();
}
inline void BlobProto::set_height(::int32_t value) {
  _internal_set_height(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000080U);
  // @@protoc_insertion_point(field_set:caffe.BlobProto.height)
}
inline ::int32_t BlobProto::_internal_height() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.height_;
}
inline void BlobProto::_internal_set_height(::int32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.height_ = value;
}

// optional int32 width = 4 [default = 0];
inline bool BlobProto::has_width() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000100U);
  return value;
}
inline void BlobProto::clear_width() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.width_ = 0;
  ClearHasBit(_impl_._has_bits_[0], 0x00000100U);
}
inline ::int32_t BlobProto::width() const {
  // @@protoc_insertion_point(field_get:caffe.BlobProto.width)
  return _internal_width();
}
inline void BlobProto::set_width(::int32_t value) {
  _internal_set_width(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000100U);
  // @@protoc_insertion_point(field_set:caffe.BlobProto.width)
}
inline ::int32_t BlobProto::_internal_width() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.width_;
}
inline void BlobProto::_internal_set_width(::int32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.width_ = value;
}

// -------------------------------------------------------------------

// BlobProtoVector

// repeated .caffe.BlobProto blobs = 1;
inline int BlobProtoVector::_internal_blobs_size() const {
  return _internal_blobs().size();
}
inline int BlobProtoVector::blobs_size() const {
  return _internal_blobs_size();
}
inline void BlobProtoVector::clear_blobs() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.blobs_.Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
}
inline const ::caffe::BlobProto& BlobProtoVector::blobs(int index) const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.BlobProtoVector.blobs)
  return _internal_blobs().Get(index);
}
inline ::caffe::BlobProto* PROTOBUF_NONNULL BlobProtoVector::mutable_blobs(int index)
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_mutable:caffe.BlobProtoVector.blobs)
  return _internal_mutable_blobs()->Mutable(index);
}
inline ::caffe::BlobProto* PROTOBUF_NONNULL BlobProtoVector::add_blobs()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  ::caffe::BlobProto* _add =
      _internal_mutable_blobs()->InternalAddWithArena(
          ::google::protobuf::MessageLite::internal_visibility(), GetArena());
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_add:caffe.BlobProtoVector.blobs)
  return _add;
}
inline const ::google::protobuf::RepeatedPtrField<::caffe::BlobProto>& BlobProtoVector::blobs() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_list:caffe.BlobProtoVector.blobs)
  return _internal_blobs();
}
inline ::google::protobuf::RepeatedPtrField<::caffe::BlobProto>* PROTOBUF_NONNULL
BlobProtoVector::mutable_blobs() ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_mutable_list:caffe.BlobProtoVector.blobs)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _internal_mutable_blobs();
}
inline const ::google::protobuf::RepeatedPtrField<::caffe::BlobProto>&
BlobProtoVector::_internal_blobs() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.blobs_;
}
inline ::google::protobuf::RepeatedPtrField<::caffe::BlobProto>* PROTOBUF_NONNULL
BlobProtoVector::_internal_mutable_blobs() {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return &_impl_.blobs_;
}

// -------------------------------------------------------------------

// Datum

// optional int32 channels = 1;
inline bool Datum::has_channels() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000004U);
  return value;
}
inline void Datum::clear_channels() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.channels_ = 0;
  ClearHasBit(_impl_._has_bits_[0], 0x00000004U);
}
inline ::int32_t Datum::channels() const {
  // @@protoc_insertion_point(field_get:caffe.Datum.channels)
  return _internal_channels();
}
inline void Datum::set_channels(::int32_t value) {
  _internal_set_channels(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000004U);
  // @@protoc_insertion_point(field_set:caffe.Datum.channels)
}
inline ::int32_t Datum::_internal_channels() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.channels_;
}
inline void Datum::_internal_set_channels(::int32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.channels_ = value;
}

// optional int32 height = 2;
inline bool Datum::has_height() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000008U);
  return value;
}
inline void Datum::clear_height() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.height_ = 0;
  ClearHasBit(_impl_._has_bits_[0], 0x00000008U);
}
inline ::int32_t Datum::height() const {
  // @@protoc_insertion_point(field_get:caffe.Datum.height)
  return _internal_height();
}
inline void Datum::set_height(::int32_t value) {
  _internal_set_height(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000008U);
  // @@protoc_insertion_point(field_set:caffe.Datum.height)
}
inline ::int32_t Datum::_internal_height() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.height_;
}
inline void Datum::_internal_set_height(::int32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.height_ = value;
}

// optional int32 width = 3;
inline bool Datum::has_width() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000010U);
  return value;
}
inline void Datum::clear_width() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.width_ = 0;
  ClearHasBit(_impl_._has_bits_[0], 0x00000010U);
}
inline ::int32_t Datum::width() const {
  // @@protoc_insertion_point(field_get:caffe.Datum.width)
  return _internal_width();
}
inline void Datum::set_width(::int32_t value) {
  _internal_set_width(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000010U);
  // @@protoc_insertion_point(field_set:caffe.Datum.width)
}
inline ::int32_t Datum::_internal_width() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.width_;
}
inline void Datum::_internal_set_width(::int32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.width_ = value;
}

// optional bytes data = 4;
inline bool Datum::has_data() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000002U);
  return value;
}
inline void Datum::clear_data() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.data_.ClearToEmpty();
  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
}
inline const ::std::string& Datum::data() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.Datum.data)
  return _internal_data();
}
template <typename Arg_, typename... Args_>
PROTOBUF_ALWAYS_INLINE void Datum::set_data(Arg_&& arg, Args_... args) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  _impl_.data_.SetBytes(static_cast<Arg_&&>(arg), args..., GetArena());
  // @@protoc_insertion_point(field_set:caffe.Datum.data)
}
inline ::std::string* PROTOBUF_NONNULL Datum::mutable_data()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  ::std::string* _s = _internal_mutable_data();
  // @@protoc_insertion_point(field_mutable:caffe.Datum.data)
  return _s;
}
inline const ::std::string& Datum::_internal_data() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.data_.Get();
}
inline void Datum::_internal_set_data(const ::std::string& value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.data_.Set(value, GetArena());
}
inline ::std::string* PROTOBUF_NONNULL Datum::_internal_mutable_data() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _impl_.data_.Mutable( GetArena());
}
inline ::std::string* PROTOBUF_NULLABLE Datum::release_data() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.Datum.data)
  if (!CheckHasBit(_impl_._has_bits_[0], 0x00000002U)) {
    return nullptr;
  }
  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
  auto* released = _impl_.data_.Release();
  if (::google::protobuf::internal::DebugHardenForceCopyDefaultString()) {
    _impl_.data_.Set("", GetArena());
  }
  return released;
}
inline void Datum::set_allocated_data(::std::string* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
  }
  _impl_.data_.SetAllocated(value, GetArena());
  if (::google::protobuf::internal::DebugHardenForceCopyDefaultString() && _impl_.data_.IsDefault()) {
    _impl_.data_.Set("", GetArena());
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.Datum.data)
}

// optional int32 label = 5;
inline bool Datum::has_label() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000020U);
  return value;
}
inline void Datum::clear_label() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.label_ = 0;
  ClearHasBit(_impl_._has_bits_[0], 0x00000020U);
}
inline ::int32_t Datum::label() const {
  // @@protoc_insertion_point(field_get:caffe.Datum.label)
  return _internal_label();
}
inline void Datum::set_label(::int32_t value) {
  _internal_set_label(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000020U);
  // @@protoc_insertion_point(field_set:caffe.Datum.label)
}
inline ::int32_t Datum::_internal_label() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.label_;
}
inline void Datum::_internal_set_label(::int32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.label_ = value;
}

// repeated float float_data = 6;
inline int Datum::_internal_float_data_size() const {
  return _internal_float_data().size();
}
inline int Datum::float_data_size() const {
  return _internal_float_data_size();
}
inline void Datum::clear_float_data() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.float_data_.Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
}
inline float Datum::float_data(int index) const {
  // @@protoc_insertion_point(field_get:caffe.Datum.float_data)
  return _internal_float_data().Get(index);
}
inline void Datum::set_float_data(int index, float value) {
  _internal_mutable_float_data()->Set(index, value);
  // @@protoc_insertion_point(field_set:caffe.Datum.float_data)
}
inline void Datum::add_float_data(float value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _internal_mutable_float_data()
      ->InternalAddWithArena<const ::google::protobuf::MessageLite*>(
          internal_visibility(), this, value);
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_add:caffe.Datum.float_data)
}
inline const ::google::protobuf::RepeatedField<float>& Datum::float_data() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_list:caffe.Datum.float_data)
  return _internal_float_data();
}
inline ::google::protobuf::RepeatedField<float>* PROTOBUF_NONNULL Datum::mutable_float_data()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_mutable_list:caffe.Datum.float_data)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _internal_mutable_float_data();
}
inline const ::google::protobuf::RepeatedField<float>&
Datum::_internal_float_data() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.float_data_;
}
inline ::google::protobuf::RepeatedField<float>* PROTOBUF_NONNULL
Datum::_internal_mutable_float_data() {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return &_impl_.float_data_;
}

// optional bool encoded = 7 [default = false];
inline bool Datum::has_encoded() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000040U);
  return value;
}
inline void Datum::clear_encoded() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.encoded_ = false;
  ClearHasBit(_impl_._has_bits_[0], 0x00000040U);
}
inline bool Datum::encoded() const {
  // @@protoc_insertion_point(field_get:caffe.Datum.encoded)
  return _internal_encoded();
}
inline void Datum::set_encoded(bool value) {
  _internal_set_encoded(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000040U);
  // @@protoc_insertion_point(field_set:caffe.Datum.encoded)
}
inline bool Datum::_internal_encoded() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.encoded_;
}
inline void Datum::_internal_set_encoded(bool value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.encoded_ = value;
}

// -------------------------------------------------------------------

// FillerParameter

// optional string type = 1 [default = "constant"];
inline bool FillerParameter::has_type() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000001U);
  return value;
}
inline void FillerParameter::clear_type() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.type_.ClearToDefault(::caffe::FillerParameter::Impl_::_i_give_permission_to_break_this_code_default_type_, GetArena());
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
}
inline const ::std::string& FillerParameter::type() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.FillerParameter.type)
  if (_impl_.type_.IsDefault()) {
    return Impl_::_i_give_permission_to_break_this_code_default_type_.get();
  }
  return _internal_type();
}
template <typename Arg_, typename... Args_>
PROTOBUF_ALWAYS_INLINE void FillerParameter::set_type(Arg_&& arg, Args_... args) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  _impl_.type_.Set(static_cast<Arg_&&>(arg), args..., GetArena());
  // @@protoc_insertion_point(field_set:caffe.FillerParameter.type)
}
inline ::std::string* PROTOBUF_NONNULL FillerParameter::mutable_type()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  ::std::string* _s = _internal_mutable_type();
  // @@protoc_insertion_point(field_mutable:caffe.FillerParameter.type)
  return _s;
}
inline const ::std::string& FillerParameter::_internal_type() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.type_.Get();
}
inline void FillerParameter::_internal_set_type(const ::std::string& value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.type_.Set(value, GetArena());
}
inline ::std::string* PROTOBUF_NONNULL FillerParameter::_internal_mutable_type() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _impl_.type_.Mutable(::caffe::FillerParameter::Impl_::_i_give_permission_to_break_this_code_default_type_, GetArena());
}
inline ::std::string* PROTOBUF_NULLABLE FillerParameter::release_type() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.FillerParameter.type)
  if (!CheckHasBit(_impl_._has_bits_[0], 0x00000001U)) {
    return nullptr;
  }
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
  return _impl_.type_.Release();
}
inline void FillerParameter::set_allocated_type(::std::string* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
  }
  _impl_.type_.SetAllocated(value, GetArena());
  // @@protoc_insertion_point(field_set_allocated:caffe.FillerParameter.type)
}

// optional float value = 2 [default = 0];
inline bool FillerParameter::has_value() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000002U);
  return value;
}
inline void FillerParameter::clear_value() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.value_ = 0;
  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
}
inline float FillerParameter::value() const {
  // @@protoc_insertion_point(field_get:caffe.FillerParameter.value)
  return _internal_value();
}
inline void FillerParameter::set_value(float value) {
  _internal_set_value(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  // @@protoc_insertion_point(field_set:caffe.FillerParameter.value)
}
inline float FillerParameter::_internal_value() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.value_;
}
inline void FillerParameter::_internal_set_value(float value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.value_ = value;
}

// optional float min = 3 [default = 0];
inline bool FillerParameter::has_min() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000004U);
  return value;
}
inline void FillerParameter::clear_min() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.min_ = 0;
  ClearHasBit(_impl_._has_bits_[0], 0x00000004U);
}
inline float FillerParameter::min() const {
  // @@protoc_insertion_point(field_get:caffe.FillerParameter.min)
  return _internal_min();
}
inline void FillerParameter::set_min(float value) {
  _internal_set_min(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000004U);
  // @@protoc_insertion_point(field_set:caffe.FillerParameter.min)
}
inline float FillerParameter::_internal_min() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.min_;
}
inline void FillerParameter::_internal_set_min(float value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.min_ = value;
}

// optional float max = 4 [default = 1];
inline bool FillerParameter::has_max() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000020U);
  return value;
}
inline void FillerParameter::clear_max() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.max_ = 1;
  ClearHasBit(_impl_._has_bits_[0], 0x00000020U);
}
inline float FillerParameter::max() const {
  // @@protoc_insertion_point(field_get:caffe.FillerParameter.max)
  return _internal_max();
}
inline void FillerParameter::set_max(float value) {
  _internal_set_max(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000020U);
  // @@protoc_insertion_point(field_set:caffe.FillerParameter.max)
}
inline float FillerParameter::_internal_max() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.max_;
}
inline void FillerParameter::_internal_set_max(float value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.max_ = value;
}

// optional float mean = 5 [default = 0];
inline bool FillerParameter::has_mean() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000008U);
  return value;
}
inline void FillerParameter::clear_mean() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.mean_ = 0;
  ClearHasBit(_impl_._has_bits_[0], 0x00000008U);
}
inline float FillerParameter::mean() const {
  // @@protoc_insertion_point(field_get:caffe.FillerParameter.mean)
  return _internal_mean();
}
inline void FillerParameter::set_mean(float value) {
  _internal_set_mean(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000008U);
  // @@protoc_insertion_point(field_set:caffe.FillerParameter.mean)
}
inline float FillerParameter::_internal_mean() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.mean_;
}
inline void FillerParameter::_internal_set_mean(float value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.mean_ = value;
}

// optional float std = 6 [default = 1];
inline bool FillerParameter::has_std() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000040U);
  return value;
}
inline void FillerParameter::clear_std() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.std_ = 1;
  ClearHasBit(_impl_._has_bits_[0], 0x00000040U);
}
inline float FillerParameter::std() const {
  // @@protoc_insertion_point(field_get:caffe.FillerParameter.std)
  return _internal_std();
}
inline void FillerParameter::set_std(float value) {
  _internal_set_std(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000040U);
  // @@protoc_insertion_point(field_set:caffe.FillerParameter.std)
}
inline float FillerParameter::_internal_std() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.std_;
}
inline void FillerParameter::_internal_set_std(float value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.std_ = value;
}

// optional int32 sparse = 7 [default = -1];
inline bool FillerParameter::has_sparse() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000080U);
  return value;
}
inline void FillerParameter::clear_sparse() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.sparse_ = -1;
  ClearHasBit(_impl_._has_bits_[0], 0x00000080U);
}
inline ::int32_t FillerParameter::sparse() const {
  // @@protoc_insertion_point(field_get:caffe.FillerParameter.sparse)
  return _internal_sparse();
}
inline void FillerParameter::set_sparse(::int32_t value) {
  _internal_set_sparse(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000080U);
  // @@protoc_insertion_point(field_set:caffe.FillerParameter.sparse)
}
inline ::int32_t FillerParameter::_internal_sparse() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.sparse_;
}
inline void FillerParameter::_internal_set_sparse(::int32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.sparse_ = value;
}

// optional .caffe.FillerParameter.VarianceNorm variance_norm = 8 [default = FAN_IN];
inline bool FillerParameter::has_variance_norm() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000010U);
  return value;
}
inline void FillerParameter::clear_variance_norm() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.variance_norm_ = 0;
  ClearHasBit(_impl_._has_bits_[0], 0x00000010U);
}
inline ::caffe::FillerParameter_VarianceNorm FillerParameter::variance_norm() const {
  // @@protoc_insertion_point(field_get:caffe.FillerParameter.variance_norm)
  return _internal_variance_norm();
}
inline void FillerParameter::set_variance_norm(::caffe::FillerParameter_VarianceNorm value) {
  _internal_set_variance_norm(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000010U);
  // @@protoc_insertion_point(field_set:caffe.FillerParameter.variance_norm)
}
inline ::caffe::FillerParameter_VarianceNorm FillerParameter::_internal_variance_norm() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return static_cast<::caffe::FillerParameter_VarianceNorm>(_impl_.variance_norm_);
}
inline void FillerParameter::_internal_set_variance_norm(::caffe::FillerParameter_VarianceNorm value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);

                                          assert(::google::protobuf::internal::ValidateEnum(
                                              value, ::caffe::FillerParameter_VarianceNorm_internal_data_));
                                          _impl_.variance_norm_ = value;
}

// -------------------------------------------------------------------

// NetParameter

// optional string name = 1;
inline bool NetParameter::has_name() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000010U);
  return value;
}
inline void NetParameter::clear_name() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.name_.ClearToEmpty();
  ClearHasBit(_impl_._has_bits_[0], 0x00000010U);
}
inline const ::std::string& NetParameter::name() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.NetParameter.name)
  return _internal_name();
}
template <typename Arg_, typename... Args_>
PROTOBUF_ALWAYS_INLINE void NetParameter::set_name(Arg_&& arg, Args_... args) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  SetHasBit(_impl_._has_bits_[0], 0x00000010U);
  _impl_.name_.Set(static_cast<Arg_&&>(arg), args..., GetArena());
  // @@protoc_insertion_point(field_set:caffe.NetParameter.name)
}
inline ::std::string* PROTOBUF_NONNULL NetParameter::mutable_name()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000010U);
  ::std::string* _s = _internal_mutable_name();
  // @@protoc_insertion_point(field_mutable:caffe.NetParameter.name)
  return _s;
}
inline const ::std::string& NetParameter::_internal_name() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.name_.Get();
}
inline void NetParameter::_internal_set_name(const ::std::string& value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.name_.Set(value, GetArena());
}
inline ::std::string* PROTOBUF_NONNULL NetParameter::_internal_mutable_name() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _impl_.name_.Mutable( GetArena());
}
inline ::std::string* PROTOBUF_NULLABLE NetParameter::release_name() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.NetParameter.name)
  if (!CheckHasBit(_impl_._has_bits_[0], 0x00000010U)) {
    return nullptr;
  }
  ClearHasBit(_impl_._has_bits_[0], 0x00000010U);
  auto* released = _impl_.name_.Release();
  if (::google::protobuf::internal::DebugHardenForceCopyDefaultString()) {
    _impl_.name_.Set("", GetArena());
  }
  return released;
}
inline void NetParameter::set_allocated_name(::std::string* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000010U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000010U);
  }
  _impl_.name_.SetAllocated(value, GetArena());
  if (::google::protobuf::internal::DebugHardenForceCopyDefaultString() && _impl_.name_.IsDefault()) {
    _impl_.name_.Set("", GetArena());
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.NetParameter.name)
}

// repeated string input = 3;
inline int NetParameter::_internal_input_size() const {
  return _internal_input().size();
}
inline int NetParameter::input_size() const {
  return _internal_input_size();
}
inline void NetParameter::clear_input() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.input_.Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
}
inline ::std::string* PROTOBUF_NONNULL NetParameter::add_input()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  ::std::string* _s =
      _internal_mutable_input()->InternalAddWithArena(
          ::google::protobuf::MessageLite::internal_visibility(), GetArena());
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  // @@protoc_insertion_point(field_add_mutable:caffe.NetParameter.input)
  return _s;
}
inline const ::std::string& NetParameter::input(int index) const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.NetParameter.input)
  return _internal_input().Get(index);
}
inline ::std::string* PROTOBUF_NONNULL NetParameter::mutable_input(int index)
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_mutable:caffe.NetParameter.input)
  return _internal_mutable_input()->Mutable(index);
}
template <typename Arg_, typename... Args_>
inline void NetParameter::set_input(int index, Arg_&& value, Args_... args) {
  ::google::protobuf::internal::AssignToString(
      *_internal_mutable_input()->Mutable(index),
      ::std::forward<Arg_>(value), args... );
  // @@protoc_insertion_point(field_set:caffe.NetParameter.input)
}
template <typename Arg_, typename... Args_>
inline void NetParameter::add_input(Arg_&& value, Args_... args) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  ::google::protobuf::internal::AddToRepeatedPtrField(
      ::google::protobuf::MessageLite::internal_visibility(), GetArena(),
      *_internal_mutable_input(), ::std::forward<Arg_>(value),
      args... );
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  // @@protoc_insertion_point(field_add:caffe.NetParameter.input)
}
inline const ::google::protobuf::RepeatedPtrField<::std::string>& NetParameter::input()
    const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_list:caffe.NetParameter.input)
  return _internal_input();
}
inline ::google::protobuf::RepeatedPtrField<::std::string>* PROTOBUF_NONNULL
NetParameter::mutable_input() ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  // @@protoc_insertion_point(field_mutable_list:caffe.NetParameter.input)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _internal_mutable_input();
}
inline const ::google::protobuf::RepeatedPtrField<::std::string>&
NetParameter::_internal_input() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.input_;
}
inline ::google::protobuf::RepeatedPtrField<::std::string>* PROTOBUF_NONNULL
NetParameter::_internal_mutable_input() {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return &_impl_.input_;
}

// repeated .caffe.BlobShape input_shape = 8;
inline int NetParameter::_internal_input_shape_size() const {
  return _internal_input_shape().size();
}
inline int NetParameter::input_shape_size() const {
  return _internal_input_shape_size();
}
inline void NetParameter::clear_input_shape() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.input_shape_.Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000008U);
}
inline const ::caffe::BlobShape& NetParameter::input_shape(int index) const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.NetParameter.input_shape)
  return _internal_input_shape().Get(index);
}
inline ::caffe::BlobShape* PROTOBUF_NONNULL NetParameter::mutable_input_shape(int index)
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_mutable:caffe.NetParameter.input_shape)
  return _internal_mutable_input_shape()->Mutable(index);
}
inline ::caffe::BlobShape* PROTOBUF_NONNULL NetParameter::add_input_shape()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  ::caffe::BlobShape* _add =
      _internal_mutable_input_shape()->InternalAddWithArena(
          ::google::protobuf::MessageLite::internal_visibility(), GetArena());
  SetHasBit(_impl_._has_bits_[0], 0x00000008U);
  // @@protoc_insertion_point(field_add:caffe.NetParameter.input_shape)
  return _add;
}
inline const ::google::protobuf::RepeatedPtrField<::caffe::BlobShape>& NetParameter::input_shape() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_list:caffe.NetParameter.input_shape)
  return _internal_input_shape();
}
inline ::google::protobuf::RepeatedPtrField<::caffe::BlobShape>* PROTOBUF_NONNULL
NetParameter::mutable_input_shape() ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000008U);
  // @@protoc_insertion_point(field_mutable_list:caffe.NetParameter.input_shape)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _internal_mutable_input_shape();
}
inline const ::google::protobuf::RepeatedPtrField<::caffe::BlobShape>&
NetParameter::_internal_input_shape() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.input_shape_;
}
inline ::google::protobuf::RepeatedPtrField<::caffe::BlobShape>* PROTOBUF_NONNULL
NetParameter::_internal_mutable_input_shape() {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return &_impl_.input_shape_;
}

// repeated int32 input_dim = 4;
inline int NetParameter::_internal_input_dim_size() const {
  return _internal_input_dim().size();
}
inline int NetParameter::input_dim_size() const {
  return _internal_input_dim_size();
}
inline void NetParameter::clear_input_dim() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.input_dim_.Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000004U);
}
inline ::int32_t NetParameter::input_dim(int index) const {
  // @@protoc_insertion_point(field_get:caffe.NetParameter.input_dim)
  return _internal_input_dim().Get(index);
}
inline void NetParameter::set_input_dim(int index, ::int32_t value) {
  _internal_mutable_input_dim()->Set(index, value);
  // @@protoc_insertion_point(field_set:caffe.NetParameter.input_dim)
}
inline void NetParameter::add_input_dim(::int32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _internal_mutable_input_dim()
      ->InternalAddWithArena<const ::google::protobuf::MessageLite*>(
          internal_visibility(), this, value);
  SetHasBit(_impl_._has_bits_[0], 0x00000004U);
  // @@protoc_insertion_point(field_add:caffe.NetParameter.input_dim)
}
inline const ::google::protobuf::RepeatedField<::int32_t>& NetParameter::input_dim() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_list:caffe.NetParameter.input_dim)
  return _internal_input_dim();
}
inline ::google::protobuf::RepeatedField<::int32_t>* PROTOBUF_NONNULL NetParameter::mutable_input_dim()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000004U);
  // @@protoc_insertion_point(field_mutable_list:caffe.NetParameter.input_dim)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _internal_mutable_input_dim();
}
inline const ::google::protobuf::RepeatedField<::int32_t>&
NetParameter::_internal_input_dim() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.input_dim_;
}
inline ::google::protobuf::RepeatedField<::int32_t>* PROTOBUF_NONNULL
NetParameter::_internal_mutable_input_dim() {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return &_impl_.input_dim_;
}

// optional bool force_backward = 5 [default = false];
inline bool NetParameter::has_force_backward() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000040U);
  return value;
}
inline void NetParameter::clear_force_backward() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.force_backward_ = false;
  ClearHasBit(_impl_._has_bits_[0], 0x00000040U);
}
inline bool NetParameter::force_backward() const {
  // @@protoc_insertion_point(field_get:caffe.NetParameter.force_backward)
  return _internal_force_backward();
}
inline void NetParameter::set_force_backward(bool value) {
  _internal_set_force_backward(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000040U);
  // @@protoc_insertion_point(field_set:caffe.NetParameter.force_backward)
}
inline bool NetParameter::_internal_force_backward() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.force_backward_;
}
inline void NetParameter::_internal_set_force_backward(bool value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.force_backward_ = value;
}

// optional .caffe.NetState state = 6;
inline bool NetParameter::has_state() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000020U);
  PROTOBUF_ASSUME(!value || _impl_.state_ != nullptr);
  return value;
}
inline void NetParameter::clear_state() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.state_ != nullptr) _impl_.state_->Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000020U);
}
inline const ::caffe::NetState& NetParameter::_internal_state() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::NetState* p = _impl_.state_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::NetState>(&::caffe::NetState_globals_);
}
inline const ::caffe::NetState& NetParameter::state() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.NetParameter.state)
  return _internal_state();
}
inline void NetParameter::unsafe_arena_set_allocated_state(
    ::caffe::NetState* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.state_);
  }
  _impl_.state_ = reinterpret_cast<::caffe::NetState*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000020U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000020U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.NetParameter.state)
}
inline ::caffe::NetState* PROTOBUF_NULLABLE NetParameter::release_state() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[0], 0x00000020U);
  ::caffe::NetState* released = _impl_.state_;
  _impl_.state_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::NetState* PROTOBUF_NULLABLE NetParameter::unsafe_arena_release_state() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.NetParameter.state)

  ClearHasBit(_impl_._has_bits_[0], 0x00000020U);
  ::caffe::NetState* temp = _impl_.state_;
  _impl_.state_ = nullptr;
  return temp;
}
inline ::caffe::NetState* PROTOBUF_NONNULL NetParameter::_internal_mutable_state() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.state_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::NetState>(GetArena());
    _impl_.state_ = reinterpret_cast<::caffe::NetState*>(p);
  }
  return _impl_.state_;
}
inline ::caffe::NetState* PROTOBUF_NONNULL NetParameter::mutable_state()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000020U);
  ::caffe::NetState* _msg = _internal_mutable_state();
  // @@protoc_insertion_point(field_mutable:caffe.NetParameter.state)
  return _msg;
}
inline void NetParameter::set_allocated_state(::caffe::NetState* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.state_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[0], 0x00000020U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000020U);
  }

  _impl_.state_ = reinterpret_cast<::caffe::NetState*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.NetParameter.state)
}

// optional bool debug_info = 7 [default = false];
inline bool NetParameter::has_debug_info() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000080U);
  return value;
}
inline void NetParameter::clear_debug_info() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.debug_info_ = false;
  ClearHasBit(_impl_._has_bits_[0], 0x00000080U);
}
inline bool NetParameter::debug_info() const {
  // @@protoc_insertion_point(field_get:caffe.NetParameter.debug_info)
  return _internal_debug_info();
}
inline void NetParameter::set_debug_info(bool value) {
  _internal_set_debug_info(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000080U);
  // @@protoc_insertion_point(field_set:caffe.NetParameter.debug_info)
}
inline bool NetParameter::_internal_debug_info() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.debug_info_;
}
inline void NetParameter::_internal_set_debug_info(bool value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.debug_info_ = value;
}

// repeated .caffe.LayerParameter layer = 100;
inline int NetParameter::_internal_layer_size() const {
  return _internal_layer().size();
}
inline int NetParameter::layer_size() const {
  return _internal_layer_size();
}
inline void NetParameter::clear_layer() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.layer_.Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000100U);
}
inline const ::caffe::LayerParameter& NetParameter::layer(int index) const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.NetParameter.layer)
  return _internal_layer().Get(index);
}
inline ::caffe::LayerParameter* PROTOBUF_NONNULL NetParameter::mutable_layer(int index)
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_mutable:caffe.NetParameter.layer)
  return _internal_mutable_layer()->Mutable(index);
}
inline ::caffe::LayerParameter* PROTOBUF_NONNULL NetParameter::add_layer()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  ::caffe::LayerParameter* _add =
      _internal_mutable_layer()->InternalAddWithArena(
          ::google::protobuf::MessageLite::internal_visibility(), GetArena());
  SetHasBit(_impl_._has_bits_[0], 0x00000100U);
  // @@protoc_insertion_point(field_add:caffe.NetParameter.layer)
  return _add;
}
inline const ::google::protobuf::RepeatedPtrField<::caffe::LayerParameter>& NetParameter::layer() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_list:caffe.NetParameter.layer)
  return _internal_layer();
}
inline ::google::protobuf::RepeatedPtrField<::caffe::LayerParameter>* PROTOBUF_NONNULL
NetParameter::mutable_layer() ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000100U);
  // @@protoc_insertion_point(field_mutable_list:caffe.NetParameter.layer)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _internal_mutable_layer();
}
inline const ::google::protobuf::RepeatedPtrField<::caffe::LayerParameter>&
NetParameter::_internal_layer() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.layer_;
}
inline ::google::protobuf::RepeatedPtrField<::caffe::LayerParameter>* PROTOBUF_NONNULL
NetParameter::_internal_mutable_layer() {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return &_impl_.layer_;
}

// repeated .caffe.V1LayerParameter layers = 2;
inline int NetParameter::_internal_layers_size() const {
  return _internal_layers().size();
}
inline int NetParameter::layers_size() const {
  return _internal_layers_size();
}
inline void NetParameter::clear_layers() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.layers_.Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
}
inline const ::caffe::V1LayerParameter& NetParameter::layers(int index) const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.NetParameter.layers)
  return _internal_layers().Get(index);
}
inline ::caffe::V1LayerParameter* PROTOBUF_NONNULL NetParameter::mutable_layers(int index)
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_mutable:caffe.NetParameter.layers)
  return _internal_mutable_layers()->Mutable(index);
}
inline ::caffe::V1LayerParameter* PROTOBUF_NONNULL NetParameter::add_layers()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  ::caffe::V1LayerParameter* _add =
      _internal_mutable_layers()->InternalAddWithArena(
          ::google::protobuf::MessageLite::internal_visibility(), GetArena());
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_add:caffe.NetParameter.layers)
  return _add;
}
inline const ::google::protobuf::RepeatedPtrField<::caffe::V1LayerParameter>& NetParameter::layers() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_list:caffe.NetParameter.layers)
  return _internal_layers();
}
inline ::google::protobuf::RepeatedPtrField<::caffe::V1LayerParameter>* PROTOBUF_NONNULL
NetParameter::mutable_layers() ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_mutable_list:caffe.NetParameter.layers)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _internal_mutable_layers();
}
inline const ::google::protobuf::RepeatedPtrField<::caffe::V1LayerParameter>&
NetParameter::_internal_layers() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.layers_;
}
inline ::google::protobuf::RepeatedPtrField<::caffe::V1LayerParameter>* PROTOBUF_NONNULL
NetParameter::_internal_mutable_layers() {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return &_impl_.layers_;
}

// -------------------------------------------------------------------

// SolverParameter

// optional string net = 24;
inline bool SolverParameter::has_net() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000080U);
  return value;
}
inline void SolverParameter::clear_net() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.net_.ClearToEmpty();
  ClearHasBit(_impl_._has_bits_[0], 0x00000080U);
}
inline const ::std::string& SolverParameter::net() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.SolverParameter.net)
  return _internal_net();
}
template <typename Arg_, typename... Args_>
PROTOBUF_ALWAYS_INLINE void SolverParameter::set_net(Arg_&& arg, Args_... args) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  SetHasBit(_impl_._has_bits_[0], 0x00000080U);
  _impl_.net_.Set(static_cast<Arg_&&>(arg), args..., GetArena());
  // @@protoc_insertion_point(field_set:caffe.SolverParameter.net)
}
inline ::std::string* PROTOBUF_NONNULL SolverParameter::mutable_net()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000080U);
  ::std::string* _s = _internal_mutable_net();
  // @@protoc_insertion_point(field_mutable:caffe.SolverParameter.net)
  return _s;
}
inline const ::std::string& SolverParameter::_internal_net() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.net_.Get();
}
inline void SolverParameter::_internal_set_net(const ::std::string& value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.net_.Set(value, GetArena());
}
inline ::std::string* PROTOBUF_NONNULL SolverParameter::_internal_mutable_net() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _impl_.net_.Mutable( GetArena());
}
inline ::std::string* PROTOBUF_NULLABLE SolverParameter::release_net() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.SolverParameter.net)
  if (!CheckHasBit(_impl_._has_bits_[0], 0x00000080U)) {
    return nullptr;
  }
  ClearHasBit(_impl_._has_bits_[0], 0x00000080U);
  auto* released = _impl_.net_.Release();
  if (::google::protobuf::internal::DebugHardenForceCopyDefaultString()) {
    _impl_.net_.Set("", GetArena());
  }
  return released;
}
inline void SolverParameter::set_allocated_net(::std::string* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000080U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000080U);
  }
  _impl_.net_.SetAllocated(value, GetArena());
  if (::google::protobuf::internal::DebugHardenForceCopyDefaultString() && _impl_.net_.IsDefault()) {
    _impl_.net_.Set("", GetArena());
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.SolverParameter.net)
}

// optional .caffe.NetParameter net_param = 25;
inline bool SolverParameter::has_net_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000400U);
  PROTOBUF_ASSUME(!value || _impl_.net_param_ != nullptr);
  return value;
}
inline void SolverParameter::clear_net_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.net_param_ != nullptr) _impl_.net_param_->Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000400U);
}
inline const ::caffe::NetParameter& SolverParameter::_internal_net_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::NetParameter* p = _impl_.net_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::NetParameter>(&::caffe::NetParameter_globals_);
}
inline const ::caffe::NetParameter& SolverParameter::net_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.SolverParameter.net_param)
  return _internal_net_param();
}
inline void SolverParameter::unsafe_arena_set_allocated_net_param(
    ::caffe::NetParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.net_param_);
  }
  _impl_.net_param_ = reinterpret_cast<::caffe::NetParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000400U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000400U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.SolverParameter.net_param)
}
inline ::caffe::NetParameter* PROTOBUF_NULLABLE SolverParameter::release_net_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[0], 0x00000400U);
  ::caffe::NetParameter* released = _impl_.net_param_;
  _impl_.net_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::NetParameter* PROTOBUF_NULLABLE SolverParameter::unsafe_arena_release_net_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.SolverParameter.net_param)

  ClearHasBit(_impl_._has_bits_[0], 0x00000400U);
  ::caffe::NetParameter* temp = _impl_.net_param_;
  _impl_.net_param_ = nullptr;
  return temp;
}
inline ::caffe::NetParameter* PROTOBUF_NONNULL SolverParameter::_internal_mutable_net_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.net_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::NetParameter>(GetArena());
    _impl_.net_param_ = reinterpret_cast<::caffe::NetParameter*>(p);
  }
  return _impl_.net_param_;
}
inline ::caffe::NetParameter* PROTOBUF_NONNULL SolverParameter::mutable_net_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000400U);
  ::caffe::NetParameter* _msg = _internal_mutable_net_param();
  // @@protoc_insertion_point(field_mutable:caffe.SolverParameter.net_param)
  return _msg;
}
inline void SolverParameter::set_allocated_net_param(::caffe::NetParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.net_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[0], 0x00000400U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000400U);
  }

  _impl_.net_param_ = reinterpret_cast<::caffe::NetParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.SolverParameter.net_param)
}

// optional string train_net = 1;
inline bool SolverParameter::has_train_net() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000010U);
  return value;
}
inline void SolverParameter::clear_train_net() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.train_net_.ClearToEmpty();
  ClearHasBit(_impl_._has_bits_[0], 0x00000010U);
}
inline const ::std::string& SolverParameter::train_net() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.SolverParameter.train_net)
  return _internal_train_net();
}
template <typename Arg_, typename... Args_>
PROTOBUF_ALWAYS_INLINE void SolverParameter::set_train_net(Arg_&& arg, Args_... args) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  SetHasBit(_impl_._has_bits_[0], 0x00000010U);
  _impl_.train_net_.Set(static_cast<Arg_&&>(arg), args..., GetArena());
  // @@protoc_insertion_point(field_set:caffe.SolverParameter.train_net)
}
inline ::std::string* PROTOBUF_NONNULL SolverParameter::mutable_train_net()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000010U);
  ::std::string* _s = _internal_mutable_train_net();
  // @@protoc_insertion_point(field_mutable:caffe.SolverParameter.train_net)
  return _s;
}
inline const ::std::string& SolverParameter::_internal_train_net() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.train_net_.Get();
}
inline void SolverParameter::_internal_set_train_net(const ::std::string& value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.train_net_.Set(value, GetArena());
}
inline ::std::string* PROTOBUF_NONNULL SolverParameter::_internal_mutable_train_net() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _impl_.train_net_.Mutable( GetArena());
}
inline ::std::string* PROTOBUF_NULLABLE SolverParameter::release_train_net() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.SolverParameter.train_net)
  if (!CheckHasBit(_impl_._has_bits_[0], 0x00000010U)) {
    return nullptr;
  }
  ClearHasBit(_impl_._has_bits_[0], 0x00000010U);
  auto* released = _impl_.train_net_.Release();
  if (::google::protobuf::internal::DebugHardenForceCopyDefaultString()) {
    _impl_.train_net_.Set("", GetArena());
  }
  return released;
}
inline void SolverParameter::set_allocated_train_net(::std::string* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000010U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000010U);
  }
  _impl_.train_net_.SetAllocated(value, GetArena());
  if (::google::protobuf::internal::DebugHardenForceCopyDefaultString() && _impl_.train_net_.IsDefault()) {
    _impl_.train_net_.Set("", GetArena());
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.SolverParameter.train_net)
}

// repeated string test_net = 2;
inline int SolverParameter::_internal_test_net_size() const {
  return _internal_test_net().size();
}
inline int SolverParameter::test_net_size() const {
  return _internal_test_net_size();
}
inline void SolverParameter::clear_test_net() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.test_net_.Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
}
inline ::std::string* PROTOBUF_NONNULL SolverParameter::add_test_net()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  ::std::string* _s =
      _internal_mutable_test_net()->InternalAddWithArena(
          ::google::protobuf::MessageLite::internal_visibility(), GetArena());
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_add_mutable:caffe.SolverParameter.test_net)
  return _s;
}
inline const ::std::string& SolverParameter::test_net(int index) const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.SolverParameter.test_net)
  return _internal_test_net().Get(index);
}
inline ::std::string* PROTOBUF_NONNULL SolverParameter::mutable_test_net(int index)
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_mutable:caffe.SolverParameter.test_net)
  return _internal_mutable_test_net()->Mutable(index);
}
template <typename Arg_, typename... Args_>
inline void SolverParameter::set_test_net(int index, Arg_&& value, Args_... args) {
  ::google::protobuf::internal::AssignToString(
      *_internal_mutable_test_net()->Mutable(index),
      ::std::forward<Arg_>(value), args... );
  // @@protoc_insertion_point(field_set:caffe.SolverParameter.test_net)
}
template <typename Arg_, typename... Args_>
inline void SolverParameter::add_test_net(Arg_&& value, Args_... args) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  ::google::protobuf::internal::AddToRepeatedPtrField(
      ::google::protobuf::MessageLite::internal_visibility(), GetArena(),
      *_internal_mutable_test_net(), ::std::forward<Arg_>(value),
      args... );
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_add:caffe.SolverParameter.test_net)
}
inline const ::google::protobuf::RepeatedPtrField<::std::string>& SolverParameter::test_net()
    const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_list:caffe.SolverParameter.test_net)
  return _internal_test_net();
}
inline ::google::protobuf::RepeatedPtrField<::std::string>* PROTOBUF_NONNULL
SolverParameter::mutable_test_net() ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_mutable_list:caffe.SolverParameter.test_net)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _internal_mutable_test_net();
}
inline const ::google::protobuf::RepeatedPtrField<::std::string>&
SolverParameter::_internal_test_net() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.test_net_;
}
inline ::google::protobuf::RepeatedPtrField<::std::string>* PROTOBUF_NONNULL
SolverParameter::_internal_mutable_test_net() {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return &_impl_.test_net_;
}

// optional .caffe.NetParameter train_net_param = 21;
inline bool SolverParameter::has_train_net_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000200U);
  PROTOBUF_ASSUME(!value || _impl_.train_net_param_ != nullptr);
  return value;
}
inline void SolverParameter::clear_train_net_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.train_net_param_ != nullptr) _impl_.train_net_param_->Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000200U);
}
inline const ::caffe::NetParameter& SolverParameter::_internal_train_net_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::NetParameter* p = _impl_.train_net_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::NetParameter>(&::caffe::NetParameter_globals_);
}
inline const ::caffe::NetParameter& SolverParameter::train_net_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.SolverParameter.train_net_param)
  return _internal_train_net_param();
}
inline void SolverParameter::unsafe_arena_set_allocated_train_net_param(
    ::caffe::NetParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.train_net_param_);
  }
  _impl_.train_net_param_ = reinterpret_cast<::caffe::NetParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000200U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000200U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.SolverParameter.train_net_param)
}
inline ::caffe::NetParameter* PROTOBUF_NULLABLE SolverParameter::release_train_net_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[0], 0x00000200U);
  ::caffe::NetParameter* released = _impl_.train_net_param_;
  _impl_.train_net_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::NetParameter* PROTOBUF_NULLABLE SolverParameter::unsafe_arena_release_train_net_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.SolverParameter.train_net_param)

  ClearHasBit(_impl_._has_bits_[0], 0x00000200U);
  ::caffe::NetParameter* temp = _impl_.train_net_param_;
  _impl_.train_net_param_ = nullptr;
  return temp;
}
inline ::caffe::NetParameter* PROTOBUF_NONNULL SolverParameter::_internal_mutable_train_net_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.train_net_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::NetParameter>(GetArena());
    _impl_.train_net_param_ = reinterpret_cast<::caffe::NetParameter*>(p);
  }
  return _impl_.train_net_param_;
}
inline ::caffe::NetParameter* PROTOBUF_NONNULL SolverParameter::mutable_train_net_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000200U);
  ::caffe::NetParameter* _msg = _internal_mutable_train_net_param();
  // @@protoc_insertion_point(field_mutable:caffe.SolverParameter.train_net_param)
  return _msg;
}
inline void SolverParameter::set_allocated_train_net_param(::caffe::NetParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.train_net_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[0], 0x00000200U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000200U);
  }

  _impl_.train_net_param_ = reinterpret_cast<::caffe::NetParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.SolverParameter.train_net_param)
}

// repeated .caffe.NetParameter test_net_param = 22;
inline int SolverParameter::_internal_test_net_param_size() const {
  return _internal_test_net_param().size();
}
inline int SolverParameter::test_net_param_size() const {
  return _internal_test_net_param_size();
}
inline void SolverParameter::clear_test_net_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.test_net_param_.Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000004U);
}
inline const ::caffe::NetParameter& SolverParameter::test_net_param(int index) const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.SolverParameter.test_net_param)
  return _internal_test_net_param().Get(index);
}
inline ::caffe::NetParameter* PROTOBUF_NONNULL SolverParameter::mutable_test_net_param(int index)
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_mutable:caffe.SolverParameter.test_net_param)
  return _internal_mutable_test_net_param()->Mutable(index);
}
inline ::caffe::NetParameter* PROTOBUF_NONNULL SolverParameter::add_test_net_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  ::caffe::NetParameter* _add =
      _internal_mutable_test_net_param()->InternalAddWithArena(
          ::google::protobuf::MessageLite::internal_visibility(), GetArena());
  SetHasBit(_impl_._has_bits_[0], 0x00000004U);
  // @@protoc_insertion_point(field_add:caffe.SolverParameter.test_net_param)
  return _add;
}
inline const ::google::protobuf::RepeatedPtrField<::caffe::NetParameter>& SolverParameter::test_net_param() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_list:caffe.SolverParameter.test_net_param)
  return _internal_test_net_param();
}
inline ::google::protobuf::RepeatedPtrField<::caffe::NetParameter>* PROTOBUF_NONNULL
SolverParameter::mutable_test_net_param() ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000004U);
  // @@protoc_insertion_point(field_mutable_list:caffe.SolverParameter.test_net_param)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _internal_mutable_test_net_param();
}
inline const ::google::protobuf::RepeatedPtrField<::caffe::NetParameter>&
SolverParameter::_internal_test_net_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.test_net_param_;
}
inline ::google::protobuf::RepeatedPtrField<::caffe::NetParameter>* PROTOBUF_NONNULL
SolverParameter::_internal_mutable_test_net_param() {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return &_impl_.test_net_param_;
}

// optional .caffe.NetState train_state = 26;
inline bool SolverParameter::has_train_state() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000800U);
  PROTOBUF_ASSUME(!value || _impl_.train_state_ != nullptr);
  return value;
}
inline void SolverParameter::clear_train_state() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.train_state_ != nullptr) _impl_.train_state_->Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000800U);
}
inline const ::caffe::NetState& SolverParameter::_internal_train_state() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::NetState* p = _impl_.train_state_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::NetState>(&::caffe::NetState_globals_);
}
inline const ::caffe::NetState& SolverParameter::train_state() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.SolverParameter.train_state)
  return _internal_train_state();
}
inline void SolverParameter::unsafe_arena_set_allocated_train_state(
    ::caffe::NetState* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.train_state_);
  }
  _impl_.train_state_ = reinterpret_cast<::caffe::NetState*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000800U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000800U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.SolverParameter.train_state)
}
inline ::caffe::NetState* PROTOBUF_NULLABLE SolverParameter::release_train_state() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[0], 0x00000800U);
  ::caffe::NetState* released = _impl_.train_state_;
  _impl_.train_state_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::NetState* PROTOBUF_NULLABLE SolverParameter::unsafe_arena_release_train_state() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.SolverParameter.train_state)

  ClearHasBit(_impl_._has_bits_[0], 0x00000800U);
  ::caffe::NetState* temp = _impl_.train_state_;
  _impl_.train_state_ = nullptr;
  return temp;
}
inline ::caffe::NetState* PROTOBUF_NONNULL SolverParameter::_internal_mutable_train_state() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.train_state_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::NetState>(GetArena());
    _impl_.train_state_ = reinterpret_cast<::caffe::NetState*>(p);
  }
  return _impl_.train_state_;
}
inline ::caffe::NetState* PROTOBUF_NONNULL SolverParameter::mutable_train_state()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000800U);
  ::caffe::NetState* _msg = _internal_mutable_train_state();
  // @@protoc_insertion_point(field_mutable:caffe.SolverParameter.train_state)
  return _msg;
}
inline void SolverParameter::set_allocated_train_state(::caffe::NetState* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.train_state_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[0], 0x00000800U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000800U);
  }

  _impl_.train_state_ = reinterpret_cast<::caffe::NetState*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.SolverParameter.train_state)
}

// repeated .caffe.NetState test_state = 27;
inline int SolverParameter::_internal_test_state_size() const {
  return _internal_test_state().size();
}
inline int SolverParameter::test_state_size() const {
  return _internal_test_state_size();
}
inline void SolverParameter::clear_test_state() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.test_state_.Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000008U);
}
inline const ::caffe::NetState& SolverParameter::test_state(int index) const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.SolverParameter.test_state)
  return _internal_test_state().Get(index);
}
inline ::caffe::NetState* PROTOBUF_NONNULL SolverParameter::mutable_test_state(int index)
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_mutable:caffe.SolverParameter.test_state)
  return _internal_mutable_test_state()->Mutable(index);
}
inline ::caffe::NetState* PROTOBUF_NONNULL SolverParameter::add_test_state()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  ::caffe::NetState* _add =
      _internal_mutable_test_state()->InternalAddWithArena(
          ::google::protobuf::MessageLite::internal_visibility(), GetArena());
  SetHasBit(_impl_._has_bits_[0], 0x00000008U);
  // @@protoc_insertion_point(field_add:caffe.SolverParameter.test_state)
  return _add;
}
inline const ::google::protobuf::RepeatedPtrField<::caffe::NetState>& SolverParameter::test_state() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_list:caffe.SolverParameter.test_state)
  return _internal_test_state();
}
inline ::google::protobuf::RepeatedPtrField<::caffe::NetState>* PROTOBUF_NONNULL
SolverParameter::mutable_test_state() ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000008U);
  // @@protoc_insertion_point(field_mutable_list:caffe.SolverParameter.test_state)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _internal_mutable_test_state();
}
inline const ::google::protobuf::RepeatedPtrField<::caffe::NetState>&
SolverParameter::_internal_test_state() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.test_state_;
}
inline ::google::protobuf::RepeatedPtrField<::caffe::NetState>* PROTOBUF_NONNULL
SolverParameter::_internal_mutable_test_state() {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return &_impl_.test_state_;
}

// repeated int32 test_iter = 3;
inline int SolverParameter::_internal_test_iter_size() const {
  return _internal_test_iter().size();
}
inline int SolverParameter::test_iter_size() const {
  return _internal_test_iter_size();
}
inline void SolverParameter::clear_test_iter() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.test_iter_.Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
}
inline ::int32_t SolverParameter::test_iter(int index) const {
  // @@protoc_insertion_point(field_get:caffe.SolverParameter.test_iter)
  return _internal_test_iter().Get(index);
}
inline void SolverParameter::set_test_iter(int index, ::int32_t value) {
  _internal_mutable_test_iter()->Set(index, value);
  // @@protoc_insertion_point(field_set:caffe.SolverParameter.test_iter)
}
inline void SolverParameter::add_test_iter(::int32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _internal_mutable_test_iter()
      ->InternalAddWithArena<const ::google::protobuf::MessageLite*>(
          internal_visibility(), this, value);
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  // @@protoc_insertion_point(field_add:caffe.SolverParameter.test_iter)
}
inline const ::google::protobuf::RepeatedField<::int32_t>& SolverParameter::test_iter() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_list:caffe.SolverParameter.test_iter)
  return _internal_test_iter();
}
inline ::google::protobuf::RepeatedField<::int32_t>* PROTOBUF_NONNULL SolverParameter::mutable_test_iter()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  // @@protoc_insertion_point(field_mutable_list:caffe.SolverParameter.test_iter)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _internal_mutable_test_iter();
}
inline const ::google::protobuf::RepeatedField<::int32_t>&
SolverParameter::_internal_test_iter() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.test_iter_;
}
inline ::google::protobuf::RepeatedField<::int32_t>* PROTOBUF_NONNULL
SolverParameter::_internal_mutable_test_iter() {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return &_impl_.test_iter_;
}

// optional int32 test_interval = 4 [default = 0];
inline bool SolverParameter::has_test_interval() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00001000U);
  return value;
}
inline void SolverParameter::clear_test_interval() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.test_interval_ = 0;
  ClearHasBit(_impl_._has_bits_[0], 0x00001000U);
}
inline ::int32_t SolverParameter::test_interval() const {
  // @@protoc_insertion_point(field_get:caffe.SolverParameter.test_interval)
  return _internal_test_interval();
}
inline void SolverParameter::set_test_interval(::int32_t value) {
  _internal_set_test_interval(value);
  SetHasBit(_impl_._has_bits_[0], 0x00001000U);
  // @@protoc_insertion_point(field_set:caffe.SolverParameter.test_interval)
}
inline ::int32_t SolverParameter::_internal_test_interval() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.test_interval_;
}
inline void SolverParameter::_internal_set_test_interval(::int32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.test_interval_ = value;
}

// optional bool test_compute_loss = 19 [default = false];
inline bool SolverParameter::has_test_compute_loss() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x01000000U);
  return value;
}
inline void SolverParameter::clear_test_compute_loss() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.test_compute_loss_ = false;
  ClearHasBit(_impl_._has_bits_[0], 0x01000000U);
}
inline bool SolverParameter::test_compute_loss() const {
  // @@protoc_insertion_point(field_get:caffe.SolverParameter.test_compute_loss)
  return _internal_test_compute_loss();
}
inline void SolverParameter::set_test_compute_loss(bool value) {
  _internal_set_test_compute_loss(value);
  SetHasBit(_impl_._has_bits_[0], 0x01000000U);
  // @@protoc_insertion_point(field_set:caffe.SolverParameter.test_compute_loss)
}
inline bool SolverParameter::_internal_test_compute_loss() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.test_compute_loss_;
}
inline void SolverParameter::_internal_set_test_compute_loss(bool value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.test_compute_loss_ = value;
}

// optional bool test_initialization = 32 [default = true];
inline bool SolverParameter::has_test_initialization() const {
  bool value = CheckHasBit(_impl_._has_bits_[1], 0x00000004U);
  return value;
}
inline void SolverParameter::clear_test_initialization() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.test_initialization_ = true;
  ClearHasBit(_impl_._has_bits_[1], 0x00000004U);
}
inline bool SolverParameter::test_initialization() const {
  // @@protoc_insertion_point(field_get:caffe.SolverParameter.test_initialization)
  return _internal_test_initialization();
}
inline void SolverParameter::set_test_initialization(bool value) {
  _internal_set_test_initialization(value);
  SetHasBit(_impl_._has_bits_[1], 0x00000004U);
  // @@protoc_insertion_point(field_set:caffe.SolverParameter.test_initialization)
}
inline bool SolverParameter::_internal_test_initialization() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.test_initialization_;
}
inline void SolverParameter::_internal_set_test_initialization(bool value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.test_initialization_ = value;
}

// optional float base_lr = 5;
inline bool SolverParameter::has_base_lr() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00002000U);
  return value;
}
inline void SolverParameter::clear_base_lr() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.base_lr_ = 0;
  ClearHasBit(_impl_._has_bits_[0], 0x00002000U);
}
inline float SolverParameter::base_lr() const {
  // @@protoc_insertion_point(field_get:caffe.SolverParameter.base_lr)
  return _internal_base_lr();
}
inline void SolverParameter::set_base_lr(float value) {
  _internal_set_base_lr(value);
  SetHasBit(_impl_._has_bits_[0], 0x00002000U);
  // @@protoc_insertion_point(field_set:caffe.SolverParameter.base_lr)
}
inline float SolverParameter::_internal_base_lr() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.base_lr_;
}
inline void SolverParameter::_internal_set_base_lr(float value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.base_lr_ = value;
}

// optional int32 display = 6;
inline bool SolverParameter::has_display() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00004000U);
  return value;
}
inline void SolverParameter::clear_display() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.display_ = 0;
  ClearHasBit(_impl_._has_bits_[0], 0x00004000U);
}
inline ::int32_t SolverParameter::display() const {
  // @@protoc_insertion_point(field_get:caffe.SolverParameter.display)
  return _internal_display();
}
inline void SolverParameter::set_display(::int32_t value) {
  _internal_set_display(value);
  SetHasBit(_impl_._has_bits_[0], 0x00004000U);
  // @@protoc_insertion_point(field_set:caffe.SolverParameter.display)
}
inline ::int32_t SolverParameter::_internal_display() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.display_;
}
inline void SolverParameter::_internal_set_display(::int32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.display_ = value;
}

// optional int32 average_loss = 33 [default = 1];
inline bool SolverParameter::has_average_loss() const {
  bool value = CheckHasBit(_impl_._has_bits_[1], 0x00000008U);
  return value;
}
inline void SolverParameter::clear_average_loss() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.average_loss_ = 1;
  ClearHasBit(_impl_._has_bits_[1], 0x00000008U);
}
inline ::int32_t SolverParameter::average_loss() const {
  // @@protoc_insertion_point(field_get:caffe.SolverParameter.average_loss)
  return _internal_average_loss();
}
inline void SolverParameter::set_average_loss(::int32_t value) {
  _internal_set_average_loss(value);
  SetHasBit(_impl_._has_bits_[1], 0x00000008U);
  // @@protoc_insertion_point(field_set:caffe.SolverParameter.average_loss)
}
inline ::int32_t SolverParameter::_internal_average_loss() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.average_loss_;
}
inline void SolverParameter::_internal_set_average_loss(::int32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.average_loss_ = value;
}

// optional int32 max_iter = 7;
inline bool SolverParameter::has_max_iter() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00008000U);
  return value;
}
inline void SolverParameter::clear_max_iter() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.max_iter_ = 0;
  ClearHasBit(_impl_._has_bits_[0], 0x00008000U);
}
inline ::int32_t SolverParameter::max_iter() const {
  // @@protoc_insertion_point(field_get:caffe.SolverParameter.max_iter)
  return _internal_max_iter();
}
inline void SolverParameter::set_max_iter(::int32_t value) {
  _internal_set_max_iter(value);
  SetHasBit(_impl_._has_bits_[0], 0x00008000U);
  // @@protoc_insertion_point(field_set:caffe.SolverParameter.max_iter)
}
inline ::int32_t SolverParameter::_internal_max_iter() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.max_iter_;
}
inline void SolverParameter::_internal_set_max_iter(::int32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.max_iter_ = value;
}

// optional int32 iter_size = 36 [default = 1];
inline bool SolverParameter::has_iter_size() const {
  bool value = CheckHasBit(_impl_._has_bits_[1], 0x00000020U);
  return value;
}
inline void SolverParameter::clear_iter_size() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.iter_size_ = 1;
  ClearHasBit(_impl_._has_bits_[1], 0x00000020U);
}
inline ::int32_t SolverParameter::iter_size() const {
  // @@protoc_insertion_point(field_get:caffe.SolverParameter.iter_size)
  return _internal_iter_size();
}
inline void SolverParameter::set_iter_size(::int32_t value) {
  _internal_set_iter_size(value);
  SetHasBit(_impl_._has_bits_[1], 0x00000020U);
  // @@protoc_insertion_point(field_set:caffe.SolverParameter.iter_size)
}
inline ::int32_t SolverParameter::_internal_iter_size() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.iter_size_;
}
inline void SolverParameter::_internal_set_iter_size(::int32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.iter_size_ = value;
}

// optional string lr_policy = 8;
inline bool SolverParameter::has_lr_policy() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000020U);
  return value;
}
inline void SolverParameter::clear_lr_policy() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.lr_policy_.ClearToEmpty();
  ClearHasBit(_impl_._has_bits_[0], 0x00000020U);
}
inline const ::std::string& SolverParameter::lr_policy() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.SolverParameter.lr_policy)
  return _internal_lr_policy();
}
template <typename Arg_, typename... Args_>
PROTOBUF_ALWAYS_INLINE void SolverParameter::set_lr_policy(Arg_&& arg, Args_... args) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  SetHasBit(_impl_._has_bits_[0], 0x00000020U);
  _impl_.lr_policy_.Set(static_cast<Arg_&&>(arg), args..., GetArena());
  // @@protoc_insertion_point(field_set:caffe.SolverParameter.lr_policy)
}
inline ::std::string* PROTOBUF_NONNULL SolverParameter::mutable_lr_policy()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000020U);
  ::std::string* _s = _internal_mutable_lr_policy();
  // @@protoc_insertion_point(field_mutable:caffe.SolverParameter.lr_policy)
  return _s;
}
inline const ::std::string& SolverParameter::_internal_lr_policy() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.lr_policy_.Get();
}
inline void SolverParameter::_internal_set_lr_policy(const ::std::string& value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.lr_policy_.Set(value, GetArena());
}
inline ::std::string* PROTOBUF_NONNULL SolverParameter::_internal_mutable_lr_policy() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _impl_.lr_policy_.Mutable( GetArena());
}
inline ::std::string* PROTOBUF_NULLABLE SolverParameter::release_lr_policy() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.SolverParameter.lr_policy)
  if (!CheckHasBit(_impl_._has_bits_[0], 0x00000020U)) {
    return nullptr;
  }
  ClearHasBit(_impl_._has_bits_[0], 0x00000020U);
  auto* released = _impl_.lr_policy_.Release();
  if (::google::protobuf::internal::DebugHardenForceCopyDefaultString()) {
    _impl_.lr_policy_.Set("", GetArena());
  }
  return released;
}
inline void SolverParameter::set_allocated_lr_policy(::std::string* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000020U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000020U);
  }
  _impl_.lr_policy_.SetAllocated(value, GetArena());
  if (::google::protobuf::internal::DebugHardenForceCopyDefaultString() && _impl_.lr_policy_.IsDefault()) {
    _impl_.lr_policy_.Set("", GetArena());
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.SolverParameter.lr_policy)
}

// optional float gamma = 9;
inline bool SolverParameter::has_gamma() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00010000U);
  return value;
}
inline void SolverParameter::clear_gamma() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.gamma_ = 0;
  ClearHasBit(_impl_._has_bits_[0], 0x00010000U);
}
inline float SolverParameter::gamma() const {
  // @@protoc_insertion_point(field_get:caffe.SolverParameter.gamma)
  return _internal_gamma();
}
inline void SolverParameter::set_gamma(float value) {
  _internal_set_gamma(value);
  SetHasBit(_impl_._has_bits_[0], 0x00010000U);
  // @@protoc_insertion_point(field_set:caffe.SolverParameter.gamma)
}
inline float SolverParameter::_internal_gamma() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.gamma_;
}
inline void SolverParameter::_internal_set_gamma(float value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.gamma_ = value;
}

// optional float power = 10;
inline bool SolverParameter::has_power() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00020000U);
  return value;
}
inline void SolverParameter::clear_power() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.power_ = 0;
  ClearHasBit(_impl_._has_bits_[0], 0x00020000U);
}
inline float SolverParameter::power() const {
  // @@protoc_insertion_point(field_get:caffe.SolverParameter.power)
  return _internal_power();
}
inline void SolverParameter::set_power(float value) {
  _internal_set_power(value);
  SetHasBit(_impl_._has_bits_[0], 0x00020000U);
  // @@protoc_insertion_point(field_set:caffe.SolverParameter.power)
}
inline float SolverParameter::_internal_power() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.power_;
}
inline void SolverParameter::_internal_set_power(float value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.power_ = value;
}

// optional float momentum = 11;
inline bool SolverParameter::has_momentum() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00040000U);
  return value;
}
inline void SolverParameter::clear_momentum() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.momentum_ = 0;
  ClearHasBit(_impl_._has_bits_[0], 0x00040000U);
}
inline float SolverParameter::momentum() const {
  // @@protoc_insertion_point(field_get:caffe.SolverParameter.momentum)
  return _internal_momentum();
}
inline void SolverParameter::set_momentum(float value) {
  _internal_set_momentum(value);
  SetHasBit(_impl_._has_bits_[0], 0x00040000U);
  // @@protoc_insertion_point(field_set:caffe.SolverParameter.momentum)
}
inline float SolverParameter::_internal_momentum() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.momentum_;
}
inline void SolverParameter::_internal_set_momentum(float value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.momentum_ = value;
}

// optional float weight_decay = 12;
inline bool SolverParameter::has_weight_decay() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00080000U);
  return value;
}
inline void SolverParameter::clear_weight_decay() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.weight_decay_ = 0;
  ClearHasBit(_impl_._has_bits_[0], 0x00080000U);
}
inline float SolverParameter::weight_decay() const {
  // @@protoc_insertion_point(field_get:caffe.SolverParameter.weight_decay)
  return _internal_weight_decay();
}
inline void SolverParameter::set_weight_decay(float value) {
  _internal_set_weight_decay(value);
  SetHasBit(_impl_._has_bits_[0], 0x00080000U);
  // @@protoc_insertion_point(field_set:caffe.SolverParameter.weight_decay)
}
inline float SolverParameter::_internal_weight_decay() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.weight_decay_;
}
inline void SolverParameter::_internal_set_weight_decay(float value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.weight_decay_ = value;
}

// optional string regularization_type = 29 [default = "L2"];
inline bool SolverParameter::has_regularization_type() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000100U);
  return value;
}
inline void SolverParameter::clear_regularization_type() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.regularization_type_.ClearToDefault(::caffe::SolverParameter::Impl_::_i_give_permission_to_break_this_code_default_regularization_type_, GetArena());
  ClearHasBit(_impl_._has_bits_[0], 0x00000100U);
}
inline const ::std::string& SolverParameter::regularization_type() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.SolverParameter.regularization_type)
  if (_impl_.regularization_type_.IsDefault()) {
    return Impl_::_i_give_permission_to_break_this_code_default_regularization_type_.get();
  }
  return _internal_regularization_type();
}
template <typename Arg_, typename... Args_>
PROTOBUF_ALWAYS_INLINE void SolverParameter::set_regularization_type(Arg_&& arg, Args_... args) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  SetHasBit(_impl_._has_bits_[0], 0x00000100U);
  _impl_.regularization_type_.Set(static_cast<Arg_&&>(arg), args..., GetArena());
  // @@protoc_insertion_point(field_set:caffe.SolverParameter.regularization_type)
}
inline ::std::string* PROTOBUF_NONNULL SolverParameter::mutable_regularization_type()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000100U);
  ::std::string* _s = _internal_mutable_regularization_type();
  // @@protoc_insertion_point(field_mutable:caffe.SolverParameter.regularization_type)
  return _s;
}
inline const ::std::string& SolverParameter::_internal_regularization_type() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.regularization_type_.Get();
}
inline void SolverParameter::_internal_set_regularization_type(const ::std::string& value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.regularization_type_.Set(value, GetArena());
}
inline ::std::string* PROTOBUF_NONNULL SolverParameter::_internal_mutable_regularization_type() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _impl_.regularization_type_.Mutable(::caffe::SolverParameter::Impl_::_i_give_permission_to_break_this_code_default_regularization_type_, GetArena());
}
inline ::std::string* PROTOBUF_NULLABLE SolverParameter::release_regularization_type() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.SolverParameter.regularization_type)
  if (!CheckHasBit(_impl_._has_bits_[0], 0x00000100U)) {
    return nullptr;
  }
  ClearHasBit(_impl_._has_bits_[0], 0x00000100U);
  return _impl_.regularization_type_.Release();
}
inline void SolverParameter::set_allocated_regularization_type(::std::string* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000100U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000100U);
  }
  _impl_.regularization_type_.SetAllocated(value, GetArena());
  // @@protoc_insertion_point(field_set_allocated:caffe.SolverParameter.regularization_type)
}

// optional int32 stepsize = 13;
inline bool SolverParameter::has_stepsize() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00100000U);
  return value;
}
inline void SolverParameter::clear_stepsize() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.stepsize_ = 0;
  ClearHasBit(_impl_._has_bits_[0], 0x00100000U);
}
inline ::int32_t SolverParameter::stepsize() const {
  // @@protoc_insertion_point(field_get:caffe.SolverParameter.stepsize)
  return _internal_stepsize();
}
inline void SolverParameter::set_stepsize(::int32_t value) {
  _internal_set_stepsize(value);
  SetHasBit(_impl_._has_bits_[0], 0x00100000U);
  // @@protoc_insertion_point(field_set:caffe.SolverParameter.stepsize)
}
inline ::int32_t SolverParameter::_internal_stepsize() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.stepsize_;
}
inline void SolverParameter::_internal_set_stepsize(::int32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.stepsize_ = value;
}

// repeated int32 stepvalue = 34;
inline int SolverParameter::_internal_stepvalue_size() const {
  return _internal_stepvalue().size();
}
inline int SolverParameter::stepvalue_size() const {
  return _internal_stepvalue_size();
}
inline void SolverParameter::clear_stepvalue() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.stepvalue_.Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x80000000U);
}
inline ::int32_t SolverParameter::stepvalue(int index) const {
  // @@protoc_insertion_point(field_get:caffe.SolverParameter.stepvalue)
  return _internal_stepvalue().Get(index);
}
inline void SolverParameter::set_stepvalue(int index, ::int32_t value) {
  _internal_mutable_stepvalue()->Set(index, value);
  // @@protoc_insertion_point(field_set:caffe.SolverParameter.stepvalue)
}
inline void SolverParameter::add_stepvalue(::int32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _internal_mutable_stepvalue()
      ->InternalAddWithArena<const ::google::protobuf::MessageLite*>(
          internal_visibility(), this, value);
  SetHasBit(_impl_._has_bits_[0], 0x80000000U);
  // @@protoc_insertion_point(field_add:caffe.SolverParameter.stepvalue)
}
inline const ::google::protobuf::RepeatedField<::int32_t>& SolverParameter::stepvalue() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_list:caffe.SolverParameter.stepvalue)
  return _internal_stepvalue();
}
inline ::google::protobuf::RepeatedField<::int32_t>* PROTOBUF_NONNULL SolverParameter::mutable_stepvalue()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x80000000U);
  // @@protoc_insertion_point(field_mutable_list:caffe.SolverParameter.stepvalue)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _internal_mutable_stepvalue();
}
inline const ::google::protobuf::RepeatedField<::int32_t>&
SolverParameter::_internal_stepvalue() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.stepvalue_;
}
inline ::google::protobuf::RepeatedField<::int32_t>* PROTOBUF_NONNULL
SolverParameter::_internal_mutable_stepvalue() {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return &_impl_.stepvalue_;
}

// optional float clip_gradients = 35 [default = -1];
inline bool SolverParameter::has_clip_gradients() const {
  bool value = CheckHasBit(_impl_._has_bits_[1], 0x00000010U);
  return value;
}
inline void SolverParameter::clear_clip_gradients() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.clip_gradients_ = -1;
  ClearHasBit(_impl_._has_bits_[1], 0x00000010U);
}
inline float SolverParameter::clip_gradients() const {
  // @@protoc_insertion_point(field_get:caffe.SolverParameter.clip_gradients)
  return _internal_clip_gradients();
}
inline void SolverParameter::set_clip_gradients(float value) {
  _internal_set_clip_gradients(value);
  SetHasBit(_impl_._has_bits_[1], 0x00000010U);
  // @@protoc_insertion_point(field_set:caffe.SolverParameter.clip_gradients)
}
inline float SolverParameter::_internal_clip_gradients() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.clip_gradients_;
}
inline void SolverParameter::_internal_set_clip_gradients(float value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.clip_gradients_ = value;
}

// optional int32 snapshot = 14 [default = 0];
inline bool SolverParameter::has_snapshot() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00200000U);
  return value;
}
inline void SolverParameter::clear_snapshot() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.snapshot_ = 0;
  ClearHasBit(_impl_._has_bits_[0], 0x00200000U);
}
inline ::int32_t SolverParameter::snapshot() const {
  // @@protoc_insertion_point(field_get:caffe.SolverParameter.snapshot)
  return _internal_snapshot();
}
inline void SolverParameter::set_snapshot(::int32_t value) {
  _internal_set_snapshot(value);
  SetHasBit(_impl_._has_bits_[0], 0x00200000U);
  // @@protoc_insertion_point(field_set:caffe.SolverParameter.snapshot)
}
inline ::int32_t SolverParameter::_internal_snapshot() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.snapshot_;
}
inline void SolverParameter::_internal_set_snapshot(::int32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.snapshot_ = value;
}

// optional string snapshot_prefix = 15;
inline bool SolverParameter::has_snapshot_prefix() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000040U);
  return value;
}
inline void SolverParameter::clear_snapshot_prefix() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.snapshot_prefix_.ClearToEmpty();
  ClearHasBit(_impl_._has_bits_[0], 0x00000040U);
}
inline const ::std::string& SolverParameter::snapshot_prefix() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.SolverParameter.snapshot_prefix)
  return _internal_snapshot_prefix();
}
template <typename Arg_, typename... Args_>
PROTOBUF_ALWAYS_INLINE void SolverParameter::set_snapshot_prefix(Arg_&& arg, Args_... args) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  SetHasBit(_impl_._has_bits_[0], 0x00000040U);
  _impl_.snapshot_prefix_.Set(static_cast<Arg_&&>(arg), args..., GetArena());
  // @@protoc_insertion_point(field_set:caffe.SolverParameter.snapshot_prefix)
}
inline ::std::string* PROTOBUF_NONNULL SolverParameter::mutable_snapshot_prefix()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000040U);
  ::std::string* _s = _internal_mutable_snapshot_prefix();
  // @@protoc_insertion_point(field_mutable:caffe.SolverParameter.snapshot_prefix)
  return _s;
}
inline const ::std::string& SolverParameter::_internal_snapshot_prefix() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.snapshot_prefix_.Get();
}
inline void SolverParameter::_internal_set_snapshot_prefix(const ::std::string& value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.snapshot_prefix_.Set(value, GetArena());
}
inline ::std::string* PROTOBUF_NONNULL SolverParameter::_internal_mutable_snapshot_prefix() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _impl_.snapshot_prefix_.Mutable( GetArena());
}
inline ::std::string* PROTOBUF_NULLABLE SolverParameter::release_snapshot_prefix() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.SolverParameter.snapshot_prefix)
  if (!CheckHasBit(_impl_._has_bits_[0], 0x00000040U)) {
    return nullptr;
  }
  ClearHasBit(_impl_._has_bits_[0], 0x00000040U);
  auto* released = _impl_.snapshot_prefix_.Release();
  if (::google::protobuf::internal::DebugHardenForceCopyDefaultString()) {
    _impl_.snapshot_prefix_.Set("", GetArena());
  }
  return released;
}
inline void SolverParameter::set_allocated_snapshot_prefix(::std::string* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000040U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000040U);
  }
  _impl_.snapshot_prefix_.SetAllocated(value, GetArena());
  if (::google::protobuf::internal::DebugHardenForceCopyDefaultString() && _impl_.snapshot_prefix_.IsDefault()) {
    _impl_.snapshot_prefix_.Set("", GetArena());
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.SolverParameter.snapshot_prefix)
}

// optional bool snapshot_diff = 16 [default = false];
inline bool SolverParameter::has_snapshot_diff() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00800000U);
  return value;
}
inline void SolverParameter::clear_snapshot_diff() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.snapshot_diff_ = false;
  ClearHasBit(_impl_._has_bits_[0], 0x00800000U);
}
inline bool SolverParameter::snapshot_diff() const {
  // @@protoc_insertion_point(field_get:caffe.SolverParameter.snapshot_diff)
  return _internal_snapshot_diff();
}
inline void SolverParameter::set_snapshot_diff(bool value) {
  _internal_set_snapshot_diff(value);
  SetHasBit(_impl_._has_bits_[0], 0x00800000U);
  // @@protoc_insertion_point(field_set:caffe.SolverParameter.snapshot_diff)
}
inline bool SolverParameter::_internal_snapshot_diff() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.snapshot_diff_;
}
inline void SolverParameter::_internal_set_snapshot_diff(bool value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.snapshot_diff_ = value;
}

// optional .caffe.SolverParameter.SnapshotFormat snapshot_format = 37 [default = BINARYPROTO];
inline bool SolverParameter::has_snapshot_format() const {
  bool value = CheckHasBit(_impl_._has_bits_[1], 0x00000040U);
  return value;
}
inline void SolverParameter::clear_snapshot_format() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.snapshot_format_ = 1;
  ClearHasBit(_impl_._has_bits_[1], 0x00000040U);
}
inline ::caffe::SolverParameter_SnapshotFormat SolverParameter::snapshot_format() const {
  // @@protoc_insertion_point(field_get:caffe.SolverParameter.snapshot_format)
  return _internal_snapshot_format();
}
inline void SolverParameter::set_snapshot_format(::caffe::SolverParameter_SnapshotFormat value) {
  _internal_set_snapshot_format(value);
  SetHasBit(_impl_._has_bits_[1], 0x00000040U);
  // @@protoc_insertion_point(field_set:caffe.SolverParameter.snapshot_format)
}
inline ::caffe::SolverParameter_SnapshotFormat SolverParameter::_internal_snapshot_format() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return static_cast<::caffe::SolverParameter_SnapshotFormat>(_impl_.snapshot_format_);
}
inline void SolverParameter::_internal_set_snapshot_format(::caffe::SolverParameter_SnapshotFormat value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);

                                          assert(::google::protobuf::internal::ValidateEnum(
                                              value, ::caffe::SolverParameter_SnapshotFormat_internal_data_));
                                          _impl_.snapshot_format_ = value;
}

// optional .caffe.SolverParameter.SolverMode solver_mode = 17 [default = GPU];
inline bool SolverParameter::has_solver_mode() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x20000000U);
  return value;
}
inline void SolverParameter::clear_solver_mode() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.solver_mode_ = 1;
  ClearHasBit(_impl_._has_bits_[0], 0x20000000U);
}
inline ::caffe::SolverParameter_SolverMode SolverParameter::solver_mode() const {
  // @@protoc_insertion_point(field_get:caffe.SolverParameter.solver_mode)
  return _internal_solver_mode();
}
inline void SolverParameter::set_solver_mode(::caffe::SolverParameter_SolverMode value) {
  _internal_set_solver_mode(value);
  SetHasBit(_impl_._has_bits_[0], 0x20000000U);
  // @@protoc_insertion_point(field_set:caffe.SolverParameter.solver_mode)
}
inline ::caffe::SolverParameter_SolverMode SolverParameter::_internal_solver_mode() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return static_cast<::caffe::SolverParameter_SolverMode>(_impl_.solver_mode_);
}
inline void SolverParameter::_internal_set_solver_mode(::caffe::SolverParameter_SolverMode value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);

                                          assert(::google::protobuf::internal::ValidateEnum(
                                              value, ::caffe::SolverParameter_SolverMode_internal_data_));
                                          _impl_.solver_mode_ = value;
}

// optional int32 device_id = 18 [default = 0];
inline bool SolverParameter::has_device_id() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00400000U);
  return value;
}
inline void SolverParameter::clear_device_id() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.device_id_ = 0;
  ClearHasBit(_impl_._has_bits_[0], 0x00400000U);
}
inline ::int32_t SolverParameter::device_id() const {
  // @@protoc_insertion_point(field_get:caffe.SolverParameter.device_id)
  return _internal_device_id();
}
inline void SolverParameter::set_device_id(::int32_t value) {
  _internal_set_device_id(value);
  SetHasBit(_impl_._has_bits_[0], 0x00400000U);
  // @@protoc_insertion_point(field_set:caffe.SolverParameter.device_id)
}
inline ::int32_t SolverParameter::_internal_device_id() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.device_id_;
}
inline void SolverParameter::_internal_set_device_id(::int32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.device_id_ = value;
}

// optional int64 random_seed = 20 [default = -1];
inline bool SolverParameter::has_random_seed() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x10000000U);
  return value;
}
inline void SolverParameter::clear_random_seed() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.random_seed_ = ::int64_t{-1};
  ClearHasBit(_impl_._has_bits_[0], 0x10000000U);
}
inline ::int64_t SolverParameter::random_seed() const {
  // @@protoc_insertion_point(field_get:caffe.SolverParameter.random_seed)
  return _internal_random_seed();
}
inline void SolverParameter::set_random_seed(::int64_t value) {
  _internal_set_random_seed(value);
  SetHasBit(_impl_._has_bits_[0], 0x10000000U);
  // @@protoc_insertion_point(field_set:caffe.SolverParameter.random_seed)
}
inline ::int64_t SolverParameter::_internal_random_seed() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.random_seed_;
}
inline void SolverParameter::_internal_set_random_seed(::int64_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.random_seed_ = value;
}

// optional string type = 40 [default = "SGD"];
inline bool SolverParameter::has_type() const {
  bool value = CheckHasBit(_impl_._has_bits_[1], 0x00000001U);
  return value;
}
inline void SolverParameter::clear_type() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.type_.ClearToDefault(::caffe::SolverParameter::Impl_::_i_give_permission_to_break_this_code_default_type_, GetArena());
  ClearHasBit(_impl_._has_bits_[1], 0x00000001U);
}
inline const ::std::string& SolverParameter::type() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.SolverParameter.type)
  if (_impl_.type_.IsDefault()) {
    return Impl_::_i_give_permission_to_break_this_code_default_type_.get();
  }
  return _internal_type();
}
template <typename Arg_, typename... Args_>
PROTOBUF_ALWAYS_INLINE void SolverParameter::set_type(Arg_&& arg, Args_... args) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  SetHasBit(_impl_._has_bits_[1], 0x00000001U);
  _impl_.type_.Set(static_cast<Arg_&&>(arg), args..., GetArena());
  // @@protoc_insertion_point(field_set:caffe.SolverParameter.type)
}
inline ::std::string* PROTOBUF_NONNULL SolverParameter::mutable_type()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[1], 0x00000001U);
  ::std::string* _s = _internal_mutable_type();
  // @@protoc_insertion_point(field_mutable:caffe.SolverParameter.type)
  return _s;
}
inline const ::std::string& SolverParameter::_internal_type() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.type_.Get();
}
inline void SolverParameter::_internal_set_type(const ::std::string& value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.type_.Set(value, GetArena());
}
inline ::std::string* PROTOBUF_NONNULL SolverParameter::_internal_mutable_type() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _impl_.type_.Mutable(::caffe::SolverParameter::Impl_::_i_give_permission_to_break_this_code_default_type_, GetArena());
}
inline ::std::string* PROTOBUF_NULLABLE SolverParameter::release_type() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.SolverParameter.type)
  if (!CheckHasBit(_impl_._has_bits_[1], 0x00000001U)) {
    return nullptr;
  }
  ClearHasBit(_impl_._has_bits_[1], 0x00000001U);
  return _impl_.type_.Release();
}
inline void SolverParameter::set_allocated_type(::std::string* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[1], 0x00000001U);
  } else {
    ClearHasBit(_impl_._has_bits_[1], 0x00000001U);
  }
  _impl_.type_.SetAllocated(value, GetArena());
  // @@protoc_insertion_point(field_set_allocated:caffe.SolverParameter.type)
}

// optional float delta = 31 [default = 1e-08];
inline bool SolverParameter::has_delta() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x08000000U);
  return value;
}
inline void SolverParameter::clear_delta() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.delta_ = 1e-08f;
  ClearHasBit(_impl_._has_bits_[0], 0x08000000U);
}
inline float SolverParameter::delta() const {
  // @@protoc_insertion_point(field_get:caffe.SolverParameter.delta)
  return _internal_delta();
}
inline void SolverParameter::set_delta(float value) {
  _internal_set_delta(value);
  SetHasBit(_impl_._has_bits_[0], 0x08000000U);
  // @@protoc_insertion_point(field_set:caffe.SolverParameter.delta)
}
inline float SolverParameter::_internal_delta() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.delta_;
}
inline void SolverParameter::_internal_set_delta(float value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.delta_ = value;
}

// optional float momentum2 = 39 [default = 0.999];
inline bool SolverParameter::has_momentum2() const {
  bool value = CheckHasBit(_impl_._has_bits_[1], 0x00000080U);
  return value;
}
inline void SolverParameter::clear_momentum2() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.momentum2_ = 0.999f;
  ClearHasBit(_impl_._has_bits_[1], 0x00000080U);
}
inline float SolverParameter::momentum2() const {
  // @@protoc_insertion_point(field_get:caffe.SolverParameter.momentum2)
  return _internal_momentum2();
}
inline void SolverParameter::set_momentum2(float value) {
  _internal_set_momentum2(value);
  SetHasBit(_impl_._has_bits_[1], 0x00000080U);
  // @@protoc_insertion_point(field_set:caffe.SolverParameter.momentum2)
}
inline float SolverParameter::_internal_momentum2() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.momentum2_;
}
inline void SolverParameter::_internal_set_momentum2(float value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.momentum2_ = value;
}

// optional float rms_decay = 38;
inline bool SolverParameter::has_rms_decay() const {
  bool value = CheckHasBit(_impl_._has_bits_[1], 0x00000002U);
  return value;
}
inline void SolverParameter::clear_rms_decay() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.rms_decay_ = 0;
  ClearHasBit(_impl_._has_bits_[1], 0x00000002U);
}
inline float SolverParameter::rms_decay() const {
  // @@protoc_insertion_point(field_get:caffe.SolverParameter.rms_decay)
  return _internal_rms_decay();
}
inline void SolverParameter::set_rms_decay(float value) {
  _internal_set_rms_decay(value);
  SetHasBit(_impl_._has_bits_[1], 0x00000002U);
  // @@protoc_insertion_point(field_set:caffe.SolverParameter.rms_decay)
}
inline float SolverParameter::_internal_rms_decay() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.rms_decay_;
}
inline void SolverParameter::_internal_set_rms_decay(float value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.rms_decay_ = value;
}

// optional bool debug_info = 23 [default = false];
inline bool SolverParameter::has_debug_info() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x02000000U);
  return value;
}
inline void SolverParameter::clear_debug_info() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.debug_info_ = false;
  ClearHasBit(_impl_._has_bits_[0], 0x02000000U);
}
inline bool SolverParameter::debug_info() const {
  // @@protoc_insertion_point(field_get:caffe.SolverParameter.debug_info)
  return _internal_debug_info();
}
inline void SolverParameter::set_debug_info(bool value) {
  _internal_set_debug_info(value);
  SetHasBit(_impl_._has_bits_[0], 0x02000000U);
  // @@protoc_insertion_point(field_set:caffe.SolverParameter.debug_info)
}
inline bool SolverParameter::_internal_debug_info() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.debug_info_;
}
inline void SolverParameter::_internal_set_debug_info(bool value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.debug_info_ = value;
}

// optional bool snapshot_after_train = 28 [default = true];
inline bool SolverParameter::has_snapshot_after_train() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x40000000U);
  return value;
}
inline void SolverParameter::clear_snapshot_after_train() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.snapshot_after_train_ = true;
  ClearHasBit(_impl_._has_bits_[0], 0x40000000U);
}
inline bool SolverParameter::snapshot_after_train() const {
  // @@protoc_insertion_point(field_get:caffe.SolverParameter.snapshot_after_train)
  return _internal_snapshot_after_train();
}
inline void SolverParameter::set_snapshot_after_train(bool value) {
  _internal_set_snapshot_after_train(value);
  SetHasBit(_impl_._has_bits_[0], 0x40000000U);
  // @@protoc_insertion_point(field_set:caffe.SolverParameter.snapshot_after_train)
}
inline bool SolverParameter::_internal_snapshot_after_train() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.snapshot_after_train_;
}
inline void SolverParameter::_internal_set_snapshot_after_train(bool value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.snapshot_after_train_ = value;
}

// optional .caffe.SolverParameter.SolverType solver_type = 30 [default = SGD];
inline bool SolverParameter::has_solver_type() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x04000000U);
  return value;
}
inline void SolverParameter::clear_solver_type() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.solver_type_ = 0;
  ClearHasBit(_impl_._has_bits_[0], 0x04000000U);
}
inline ::caffe::SolverParameter_SolverType SolverParameter::solver_type() const {
  // @@protoc_insertion_point(field_get:caffe.SolverParameter.solver_type)
  return _internal_solver_type();
}
inline void SolverParameter::set_solver_type(::caffe::SolverParameter_SolverType value) {
  _internal_set_solver_type(value);
  SetHasBit(_impl_._has_bits_[0], 0x04000000U);
  // @@protoc_insertion_point(field_set:caffe.SolverParameter.solver_type)
}
inline ::caffe::SolverParameter_SolverType SolverParameter::_internal_solver_type() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return static_cast<::caffe::SolverParameter_SolverType>(_impl_.solver_type_);
}
inline void SolverParameter::_internal_set_solver_type(::caffe::SolverParameter_SolverType value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);

                                          assert(::google::protobuf::internal::ValidateEnum(
                                              value, ::caffe::SolverParameter_SolverType_internal_data_));
                                          _impl_.solver_type_ = value;
}

// -------------------------------------------------------------------

// SolverState

// optional int32 iter = 1;
inline bool SolverState::has_iter() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000004U);
  return value;
}
inline void SolverState::clear_iter() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.iter_ = 0;
  ClearHasBit(_impl_._has_bits_[0], 0x00000004U);
}
inline ::int32_t SolverState::iter() const {
  // @@protoc_insertion_point(field_get:caffe.SolverState.iter)
  return _internal_iter();
}
inline void SolverState::set_iter(::int32_t value) {
  _internal_set_iter(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000004U);
  // @@protoc_insertion_point(field_set:caffe.SolverState.iter)
}
inline ::int32_t SolverState::_internal_iter() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.iter_;
}
inline void SolverState::_internal_set_iter(::int32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.iter_ = value;
}

// optional string learned_net = 2;
inline bool SolverState::has_learned_net() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000002U);
  return value;
}
inline void SolverState::clear_learned_net() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.learned_net_.ClearToEmpty();
  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
}
inline const ::std::string& SolverState::learned_net() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.SolverState.learned_net)
  return _internal_learned_net();
}
template <typename Arg_, typename... Args_>
PROTOBUF_ALWAYS_INLINE void SolverState::set_learned_net(Arg_&& arg, Args_... args) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  _impl_.learned_net_.Set(static_cast<Arg_&&>(arg), args..., GetArena());
  // @@protoc_insertion_point(field_set:caffe.SolverState.learned_net)
}
inline ::std::string* PROTOBUF_NONNULL SolverState::mutable_learned_net()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  ::std::string* _s = _internal_mutable_learned_net();
  // @@protoc_insertion_point(field_mutable:caffe.SolverState.learned_net)
  return _s;
}
inline const ::std::string& SolverState::_internal_learned_net() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.learned_net_.Get();
}
inline void SolverState::_internal_set_learned_net(const ::std::string& value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.learned_net_.Set(value, GetArena());
}
inline ::std::string* PROTOBUF_NONNULL SolverState::_internal_mutable_learned_net() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _impl_.learned_net_.Mutable( GetArena());
}
inline ::std::string* PROTOBUF_NULLABLE SolverState::release_learned_net() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.SolverState.learned_net)
  if (!CheckHasBit(_impl_._has_bits_[0], 0x00000002U)) {
    return nullptr;
  }
  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
  auto* released = _impl_.learned_net_.Release();
  if (::google::protobuf::internal::DebugHardenForceCopyDefaultString()) {
    _impl_.learned_net_.Set("", GetArena());
  }
  return released;
}
inline void SolverState::set_allocated_learned_net(::std::string* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
  }
  _impl_.learned_net_.SetAllocated(value, GetArena());
  if (::google::protobuf::internal::DebugHardenForceCopyDefaultString() && _impl_.learned_net_.IsDefault()) {
    _impl_.learned_net_.Set("", GetArena());
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.SolverState.learned_net)
}

// repeated .caffe.BlobProto history = 3;
inline int SolverState::_internal_history_size() const {
  return _internal_history().size();
}
inline int SolverState::history_size() const {
  return _internal_history_size();
}
inline void SolverState::clear_history() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.history_.Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
}
inline const ::caffe::BlobProto& SolverState::history(int index) const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.SolverState.history)
  return _internal_history().Get(index);
}
inline ::caffe::BlobProto* PROTOBUF_NONNULL SolverState::mutable_history(int index)
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_mutable:caffe.SolverState.history)
  return _internal_mutable_history()->Mutable(index);
}
inline ::caffe::BlobProto* PROTOBUF_NONNULL SolverState::add_history()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  ::caffe::BlobProto* _add =
      _internal_mutable_history()->InternalAddWithArena(
          ::google::protobuf::MessageLite::internal_visibility(), GetArena());
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_add:caffe.SolverState.history)
  return _add;
}
inline const ::google::protobuf::RepeatedPtrField<::caffe::BlobProto>& SolverState::history() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_list:caffe.SolverState.history)
  return _internal_history();
}
inline ::google::protobuf::RepeatedPtrField<::caffe::BlobProto>* PROTOBUF_NONNULL
SolverState::mutable_history() ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_mutable_list:caffe.SolverState.history)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _internal_mutable_history();
}
inline const ::google::protobuf::RepeatedPtrField<::caffe::BlobProto>&
SolverState::_internal_history() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.history_;
}
inline ::google::protobuf::RepeatedPtrField<::caffe::BlobProto>* PROTOBUF_NONNULL
SolverState::_internal_mutable_history() {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return &_impl_.history_;
}

// optional int32 current_step = 4 [default = 0];
inline bool SolverState::has_current_step() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000008U);
  return value;
}
inline void SolverState::clear_current_step() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.current_step_ = 0;
  ClearHasBit(_impl_._has_bits_[0], 0x00000008U);
}
inline ::int32_t SolverState::current_step() const {
  // @@protoc_insertion_point(field_get:caffe.SolverState.current_step)
  return _internal_current_step();
}
inline void SolverState::set_current_step(::int32_t value) {
  _internal_set_current_step(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000008U);
  // @@protoc_insertion_point(field_set:caffe.SolverState.current_step)
}
inline ::int32_t SolverState::_internal_current_step() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.current_step_;
}
inline void SolverState::_internal_set_current_step(::int32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.current_step_ = value;
}

// -------------------------------------------------------------------

// NetState

// optional .caffe.Phase phase = 1 [default = TEST];
inline bool NetState::has_phase() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000004U);
  return value;
}
inline void NetState::clear_phase() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.phase_ = 1;
  ClearHasBit(_impl_._has_bits_[0], 0x00000004U);
}
inline ::caffe::Phase NetState::phase() const {
  // @@protoc_insertion_point(field_get:caffe.NetState.phase)
  return _internal_phase();
}
inline void NetState::set_phase(::caffe::Phase value) {
  _internal_set_phase(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000004U);
  // @@protoc_insertion_point(field_set:caffe.NetState.phase)
}
inline ::caffe::Phase NetState::_internal_phase() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return static_cast<::caffe::Phase>(_impl_.phase_);
}
inline void NetState::_internal_set_phase(::caffe::Phase value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);

                                          assert(::google::protobuf::internal::ValidateEnum(
                                              value, ::caffe::Phase_internal_data_));
                                          _impl_.phase_ = value;
}

// optional int32 level = 2 [default = 0];
inline bool NetState::has_level() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000002U);
  return value;
}
inline void NetState::clear_level() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.level_ = 0;
  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
}
inline ::int32_t NetState::level() const {
  // @@protoc_insertion_point(field_get:caffe.NetState.level)
  return _internal_level();
}
inline void NetState::set_level(::int32_t value) {
  _internal_set_level(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  // @@protoc_insertion_point(field_set:caffe.NetState.level)
}
inline ::int32_t NetState::_internal_level() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.level_;
}
inline void NetState::_internal_set_level(::int32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.level_ = value;
}

// repeated string stage = 3;
inline int NetState::_internal_stage_size() const {
  return _internal_stage().size();
}
inline int NetState::stage_size() const {
  return _internal_stage_size();
}
inline void NetState::clear_stage() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.stage_.Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
}
inline ::std::string* PROTOBUF_NONNULL NetState::add_stage()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  ::std::string* _s =
      _internal_mutable_stage()->InternalAddWithArena(
          ::google::protobuf::MessageLite::internal_visibility(), GetArena());
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_add_mutable:caffe.NetState.stage)
  return _s;
}
inline const ::std::string& NetState::stage(int index) const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.NetState.stage)
  return _internal_stage().Get(index);
}
inline ::std::string* PROTOBUF_NONNULL NetState::mutable_stage(int index)
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_mutable:caffe.NetState.stage)
  return _internal_mutable_stage()->Mutable(index);
}
template <typename Arg_, typename... Args_>
inline void NetState::set_stage(int index, Arg_&& value, Args_... args) {
  ::google::protobuf::internal::AssignToString(
      *_internal_mutable_stage()->Mutable(index),
      ::std::forward<Arg_>(value), args... );
  // @@protoc_insertion_point(field_set:caffe.NetState.stage)
}
template <typename Arg_, typename... Args_>
inline void NetState::add_stage(Arg_&& value, Args_... args) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  ::google::protobuf::internal::AddToRepeatedPtrField(
      ::google::protobuf::MessageLite::internal_visibility(), GetArena(),
      *_internal_mutable_stage(), ::std::forward<Arg_>(value),
      args... );
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_add:caffe.NetState.stage)
}
inline const ::google::protobuf::RepeatedPtrField<::std::string>& NetState::stage()
    const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_list:caffe.NetState.stage)
  return _internal_stage();
}
inline ::google::protobuf::RepeatedPtrField<::std::string>* PROTOBUF_NONNULL
NetState::mutable_stage() ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_mutable_list:caffe.NetState.stage)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _internal_mutable_stage();
}
inline const ::google::protobuf::RepeatedPtrField<::std::string>&
NetState::_internal_stage() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.stage_;
}
inline ::google::protobuf::RepeatedPtrField<::std::string>* PROTOBUF_NONNULL
NetState::_internal_mutable_stage() {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return &_impl_.stage_;
}

// -------------------------------------------------------------------

// NetStateRule

// optional .caffe.Phase phase = 1;
inline bool NetStateRule::has_phase() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000004U);
  return value;
}
inline void NetStateRule::clear_phase() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.phase_ = 0;
  ClearHasBit(_impl_._has_bits_[0], 0x00000004U);
}
inline ::caffe::Phase NetStateRule::phase() const {
  // @@protoc_insertion_point(field_get:caffe.NetStateRule.phase)
  return _internal_phase();
}
inline void NetStateRule::set_phase(::caffe::Phase value) {
  _internal_set_phase(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000004U);
  // @@protoc_insertion_point(field_set:caffe.NetStateRule.phase)
}
inline ::caffe::Phase NetStateRule::_internal_phase() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return static_cast<::caffe::Phase>(_impl_.phase_);
}
inline void NetStateRule::_internal_set_phase(::caffe::Phase value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);

                                          assert(::google::protobuf::internal::ValidateEnum(
                                              value, ::caffe::Phase_internal_data_));
                                          _impl_.phase_ = value;
}

// optional int32 min_level = 2;
inline bool NetStateRule::has_min_level() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000008U);
  return value;
}
inline void NetStateRule::clear_min_level() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.min_level_ = 0;
  ClearHasBit(_impl_._has_bits_[0], 0x00000008U);
}
inline ::int32_t NetStateRule::min_level() const {
  // @@protoc_insertion_point(field_get:caffe.NetStateRule.min_level)
  return _internal_min_level();
}
inline void NetStateRule::set_min_level(::int32_t value) {
  _internal_set_min_level(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000008U);
  // @@protoc_insertion_point(field_set:caffe.NetStateRule.min_level)
}
inline ::int32_t NetStateRule::_internal_min_level() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.min_level_;
}
inline void NetStateRule::_internal_set_min_level(::int32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.min_level_ = value;
}

// optional int32 max_level = 3;
inline bool NetStateRule::has_max_level() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000010U);
  return value;
}
inline void NetStateRule::clear_max_level() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.max_level_ = 0;
  ClearHasBit(_impl_._has_bits_[0], 0x00000010U);
}
inline ::int32_t NetStateRule::max_level() const {
  // @@protoc_insertion_point(field_get:caffe.NetStateRule.max_level)
  return _internal_max_level();
}
inline void NetStateRule::set_max_level(::int32_t value) {
  _internal_set_max_level(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000010U);
  // @@protoc_insertion_point(field_set:caffe.NetStateRule.max_level)
}
inline ::int32_t NetStateRule::_internal_max_level() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.max_level_;
}
inline void NetStateRule::_internal_set_max_level(::int32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.max_level_ = value;
}

// repeated string stage = 4;
inline int NetStateRule::_internal_stage_size() const {
  return _internal_stage().size();
}
inline int NetStateRule::stage_size() const {
  return _internal_stage_size();
}
inline void NetStateRule::clear_stage() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.stage_.Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
}
inline ::std::string* PROTOBUF_NONNULL NetStateRule::add_stage()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  ::std::string* _s =
      _internal_mutable_stage()->InternalAddWithArena(
          ::google::protobuf::MessageLite::internal_visibility(), GetArena());
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_add_mutable:caffe.NetStateRule.stage)
  return _s;
}
inline const ::std::string& NetStateRule::stage(int index) const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.NetStateRule.stage)
  return _internal_stage().Get(index);
}
inline ::std::string* PROTOBUF_NONNULL NetStateRule::mutable_stage(int index)
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_mutable:caffe.NetStateRule.stage)
  return _internal_mutable_stage()->Mutable(index);
}
template <typename Arg_, typename... Args_>
inline void NetStateRule::set_stage(int index, Arg_&& value, Args_... args) {
  ::google::protobuf::internal::AssignToString(
      *_internal_mutable_stage()->Mutable(index),
      ::std::forward<Arg_>(value), args... );
  // @@protoc_insertion_point(field_set:caffe.NetStateRule.stage)
}
template <typename Arg_, typename... Args_>
inline void NetStateRule::add_stage(Arg_&& value, Args_... args) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  ::google::protobuf::internal::AddToRepeatedPtrField(
      ::google::protobuf::MessageLite::internal_visibility(), GetArena(),
      *_internal_mutable_stage(), ::std::forward<Arg_>(value),
      args... );
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_add:caffe.NetStateRule.stage)
}
inline const ::google::protobuf::RepeatedPtrField<::std::string>& NetStateRule::stage()
    const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_list:caffe.NetStateRule.stage)
  return _internal_stage();
}
inline ::google::protobuf::RepeatedPtrField<::std::string>* PROTOBUF_NONNULL
NetStateRule::mutable_stage() ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_mutable_list:caffe.NetStateRule.stage)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _internal_mutable_stage();
}
inline const ::google::protobuf::RepeatedPtrField<::std::string>&
NetStateRule::_internal_stage() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.stage_;
}
inline ::google::protobuf::RepeatedPtrField<::std::string>* PROTOBUF_NONNULL
NetStateRule::_internal_mutable_stage() {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return &_impl_.stage_;
}

// repeated string not_stage = 5;
inline int NetStateRule::_internal_not_stage_size() const {
  return _internal_not_stage().size();
}
inline int NetStateRule::not_stage_size() const {
  return _internal_not_stage_size();
}
inline void NetStateRule::clear_not_stage() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.not_stage_.Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
}
inline ::std::string* PROTOBUF_NONNULL NetStateRule::add_not_stage()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  ::std::string* _s =
      _internal_mutable_not_stage()->InternalAddWithArena(
          ::google::protobuf::MessageLite::internal_visibility(), GetArena());
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  // @@protoc_insertion_point(field_add_mutable:caffe.NetStateRule.not_stage)
  return _s;
}
inline const ::std::string& NetStateRule::not_stage(int index) const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.NetStateRule.not_stage)
  return _internal_not_stage().Get(index);
}
inline ::std::string* PROTOBUF_NONNULL NetStateRule::mutable_not_stage(int index)
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_mutable:caffe.NetStateRule.not_stage)
  return _internal_mutable_not_stage()->Mutable(index);
}
template <typename Arg_, typename... Args_>
inline void NetStateRule::set_not_stage(int index, Arg_&& value, Args_... args) {
  ::google::protobuf::internal::AssignToString(
      *_internal_mutable_not_stage()->Mutable(index),
      ::std::forward<Arg_>(value), args... );
  // @@protoc_insertion_point(field_set:caffe.NetStateRule.not_stage)
}
template <typename Arg_, typename... Args_>
inline void NetStateRule::add_not_stage(Arg_&& value, Args_... args) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  ::google::protobuf::internal::AddToRepeatedPtrField(
      ::google::protobuf::MessageLite::internal_visibility(), GetArena(),
      *_internal_mutable_not_stage(), ::std::forward<Arg_>(value),
      args... );
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  // @@protoc_insertion_point(field_add:caffe.NetStateRule.not_stage)
}
inline const ::google::protobuf::RepeatedPtrField<::std::string>& NetStateRule::not_stage()
    const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_list:caffe.NetStateRule.not_stage)
  return _internal_not_stage();
}
inline ::google::protobuf::RepeatedPtrField<::std::string>* PROTOBUF_NONNULL
NetStateRule::mutable_not_stage() ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  // @@protoc_insertion_point(field_mutable_list:caffe.NetStateRule.not_stage)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _internal_mutable_not_stage();
}
inline const ::google::protobuf::RepeatedPtrField<::std::string>&
NetStateRule::_internal_not_stage() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.not_stage_;
}
inline ::google::protobuf::RepeatedPtrField<::std::string>* PROTOBUF_NONNULL
NetStateRule::_internal_mutable_not_stage() {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return &_impl_.not_stage_;
}

// -------------------------------------------------------------------

// ParamSpec

// optional string name = 1;
inline bool ParamSpec::has_name() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000001U);
  return value;
}
inline void ParamSpec::clear_name() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.name_.ClearToEmpty();
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
}
inline const ::std::string& ParamSpec::name() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.ParamSpec.name)
  return _internal_name();
}
template <typename Arg_, typename... Args_>
PROTOBUF_ALWAYS_INLINE void ParamSpec::set_name(Arg_&& arg, Args_... args) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  _impl_.name_.Set(static_cast<Arg_&&>(arg), args..., GetArena());
  // @@protoc_insertion_point(field_set:caffe.ParamSpec.name)
}
inline ::std::string* PROTOBUF_NONNULL ParamSpec::mutable_name()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  ::std::string* _s = _internal_mutable_name();
  // @@protoc_insertion_point(field_mutable:caffe.ParamSpec.name)
  return _s;
}
inline const ::std::string& ParamSpec::_internal_name() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.name_.Get();
}
inline void ParamSpec::_internal_set_name(const ::std::string& value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.name_.Set(value, GetArena());
}
inline ::std::string* PROTOBUF_NONNULL ParamSpec::_internal_mutable_name() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _impl_.name_.Mutable( GetArena());
}
inline ::std::string* PROTOBUF_NULLABLE ParamSpec::release_name() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.ParamSpec.name)
  if (!CheckHasBit(_impl_._has_bits_[0], 0x00000001U)) {
    return nullptr;
  }
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
  auto* released = _impl_.name_.Release();
  if (::google::protobuf::internal::DebugHardenForceCopyDefaultString()) {
    _impl_.name_.Set("", GetArena());
  }
  return released;
}
inline void ParamSpec::set_allocated_name(::std::string* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
  }
  _impl_.name_.SetAllocated(value, GetArena());
  if (::google::protobuf::internal::DebugHardenForceCopyDefaultString() && _impl_.name_.IsDefault()) {
    _impl_.name_.Set("", GetArena());
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.ParamSpec.name)
}

// optional .caffe.ParamSpec.DimCheckMode share_mode = 2;
inline bool ParamSpec::has_share_mode() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000002U);
  return value;
}
inline void ParamSpec::clear_share_mode() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.share_mode_ = 0;
  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
}
inline ::caffe::ParamSpec_DimCheckMode ParamSpec::share_mode() const {
  // @@protoc_insertion_point(field_get:caffe.ParamSpec.share_mode)
  return _internal_share_mode();
}
inline void ParamSpec::set_share_mode(::caffe::ParamSpec_DimCheckMode value) {
  _internal_set_share_mode(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  // @@protoc_insertion_point(field_set:caffe.ParamSpec.share_mode)
}
inline ::caffe::ParamSpec_DimCheckMode ParamSpec::_internal_share_mode() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return static_cast<::caffe::ParamSpec_DimCheckMode>(_impl_.share_mode_);
}
inline void ParamSpec::_internal_set_share_mode(::caffe::ParamSpec_DimCheckMode value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);

                                          assert(::google::protobuf::internal::ValidateEnum(
                                              value, ::caffe::ParamSpec_DimCheckMode_internal_data_));
                                          _impl_.share_mode_ = value;
}

// optional float lr_mult = 3 [default = 1];
inline bool ParamSpec::has_lr_mult() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000004U);
  return value;
}
inline void ParamSpec::clear_lr_mult() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.lr_mult_ = 1;
  ClearHasBit(_impl_._has_bits_[0], 0x00000004U);
}
inline float ParamSpec::lr_mult() const {
  // @@protoc_insertion_point(field_get:caffe.ParamSpec.lr_mult)
  return _internal_lr_mult();
}
inline void ParamSpec::set_lr_mult(float value) {
  _internal_set_lr_mult(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000004U);
  // @@protoc_insertion_point(field_set:caffe.ParamSpec.lr_mult)
}
inline float ParamSpec::_internal_lr_mult() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.lr_mult_;
}
inline void ParamSpec::_internal_set_lr_mult(float value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.lr_mult_ = value;
}

// optional float decay_mult = 4 [default = 1];
inline bool ParamSpec::has_decay_mult() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000008U);
  return value;
}
inline void ParamSpec::clear_decay_mult() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.decay_mult_ = 1;
  ClearHasBit(_impl_._has_bits_[0], 0x00000008U);
}
inline float ParamSpec::decay_mult() const {
  // @@protoc_insertion_point(field_get:caffe.ParamSpec.decay_mult)
  return _internal_decay_mult();
}
inline void ParamSpec::set_decay_mult(float value) {
  _internal_set_decay_mult(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000008U);
  // @@protoc_insertion_point(field_set:caffe.ParamSpec.decay_mult)
}
inline float ParamSpec::_internal_decay_mult() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.decay_mult_;
}
inline void ParamSpec::_internal_set_decay_mult(float value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.decay_mult_ = value;
}

// -------------------------------------------------------------------

// LayerParameter

// optional string name = 1;
inline bool LayerParameter::has_name() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000100U);
  return value;
}
inline void LayerParameter::clear_name() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.name_.ClearToEmpty();
  ClearHasBit(_impl_._has_bits_[0], 0x00000100U);
}
inline const ::std::string& LayerParameter::name() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.name)
  return _internal_name();
}
template <typename Arg_, typename... Args_>
PROTOBUF_ALWAYS_INLINE void LayerParameter::set_name(Arg_&& arg, Args_... args) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  SetHasBit(_impl_._has_bits_[0], 0x00000100U);
  _impl_.name_.Set(static_cast<Arg_&&>(arg), args..., GetArena());
  // @@protoc_insertion_point(field_set:caffe.LayerParameter.name)
}
inline ::std::string* PROTOBUF_NONNULL LayerParameter::mutable_name()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000100U);
  ::std::string* _s = _internal_mutable_name();
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.name)
  return _s;
}
inline const ::std::string& LayerParameter::_internal_name() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.name_.Get();
}
inline void LayerParameter::_internal_set_name(const ::std::string& value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.name_.Set(value, GetArena());
}
inline ::std::string* PROTOBUF_NONNULL LayerParameter::_internal_mutable_name() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _impl_.name_.Mutable( GetArena());
}
inline ::std::string* PROTOBUF_NULLABLE LayerParameter::release_name() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.name)
  if (!CheckHasBit(_impl_._has_bits_[0], 0x00000100U)) {
    return nullptr;
  }
  ClearHasBit(_impl_._has_bits_[0], 0x00000100U);
  auto* released = _impl_.name_.Release();
  if (::google::protobuf::internal::DebugHardenForceCopyDefaultString()) {
    _impl_.name_.Set("", GetArena());
  }
  return released;
}
inline void LayerParameter::set_allocated_name(::std::string* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000100U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000100U);
  }
  _impl_.name_.SetAllocated(value, GetArena());
  if (::google::protobuf::internal::DebugHardenForceCopyDefaultString() && _impl_.name_.IsDefault()) {
    _impl_.name_.Set("", GetArena());
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.name)
}

// optional string type = 2;
inline bool LayerParameter::has_type() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000200U);
  return value;
}
inline void LayerParameter::clear_type() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.type_.ClearToEmpty();
  ClearHasBit(_impl_._has_bits_[0], 0x00000200U);
}
inline const ::std::string& LayerParameter::type() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.type)
  return _internal_type();
}
template <typename Arg_, typename... Args_>
PROTOBUF_ALWAYS_INLINE void LayerParameter::set_type(Arg_&& arg, Args_... args) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  SetHasBit(_impl_._has_bits_[0], 0x00000200U);
  _impl_.type_.Set(static_cast<Arg_&&>(arg), args..., GetArena());
  // @@protoc_insertion_point(field_set:caffe.LayerParameter.type)
}
inline ::std::string* PROTOBUF_NONNULL LayerParameter::mutable_type()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000200U);
  ::std::string* _s = _internal_mutable_type();
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.type)
  return _s;
}
inline const ::std::string& LayerParameter::_internal_type() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.type_.Get();
}
inline void LayerParameter::_internal_set_type(const ::std::string& value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.type_.Set(value, GetArena());
}
inline ::std::string* PROTOBUF_NONNULL LayerParameter::_internal_mutable_type() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _impl_.type_.Mutable( GetArena());
}
inline ::std::string* PROTOBUF_NULLABLE LayerParameter::release_type() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.type)
  if (!CheckHasBit(_impl_._has_bits_[0], 0x00000200U)) {
    return nullptr;
  }
  ClearHasBit(_impl_._has_bits_[0], 0x00000200U);
  auto* released = _impl_.type_.Release();
  if (::google::protobuf::internal::DebugHardenForceCopyDefaultString()) {
    _impl_.type_.Set("", GetArena());
  }
  return released;
}
inline void LayerParameter::set_allocated_type(::std::string* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000200U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000200U);
  }
  _impl_.type_.SetAllocated(value, GetArena());
  if (::google::protobuf::internal::DebugHardenForceCopyDefaultString() && _impl_.type_.IsDefault()) {
    _impl_.type_.Set("", GetArena());
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.type)
}

// repeated string bottom = 3;
inline int LayerParameter::_internal_bottom_size() const {
  return _internal_bottom().size();
}
inline int LayerParameter::bottom_size() const {
  return _internal_bottom_size();
}
inline void LayerParameter::clear_bottom() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.bottom_.Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
}
inline ::std::string* PROTOBUF_NONNULL LayerParameter::add_bottom()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  ::std::string* _s =
      _internal_mutable_bottom()->InternalAddWithArena(
          ::google::protobuf::MessageLite::internal_visibility(), GetArena());
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_add_mutable:caffe.LayerParameter.bottom)
  return _s;
}
inline const ::std::string& LayerParameter::bottom(int index) const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.bottom)
  return _internal_bottom().Get(index);
}
inline ::std::string* PROTOBUF_NONNULL LayerParameter::mutable_bottom(int index)
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.bottom)
  return _internal_mutable_bottom()->Mutable(index);
}
template <typename Arg_, typename... Args_>
inline void LayerParameter::set_bottom(int index, Arg_&& value, Args_... args) {
  ::google::protobuf::internal::AssignToString(
      *_internal_mutable_bottom()->Mutable(index),
      ::std::forward<Arg_>(value), args... );
  // @@protoc_insertion_point(field_set:caffe.LayerParameter.bottom)
}
template <typename Arg_, typename... Args_>
inline void LayerParameter::add_bottom(Arg_&& value, Args_... args) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  ::google::protobuf::internal::AddToRepeatedPtrField(
      ::google::protobuf::MessageLite::internal_visibility(), GetArena(),
      *_internal_mutable_bottom(), ::std::forward<Arg_>(value),
      args... );
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_add:caffe.LayerParameter.bottom)
}
inline const ::google::protobuf::RepeatedPtrField<::std::string>& LayerParameter::bottom()
    const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_list:caffe.LayerParameter.bottom)
  return _internal_bottom();
}
inline ::google::protobuf::RepeatedPtrField<::std::string>* PROTOBUF_NONNULL
LayerParameter::mutable_bottom() ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_mutable_list:caffe.LayerParameter.bottom)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _internal_mutable_bottom();
}
inline const ::google::protobuf::RepeatedPtrField<::std::string>&
LayerParameter::_internal_bottom() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.bottom_;
}
inline ::google::protobuf::RepeatedPtrField<::std::string>* PROTOBUF_NONNULL
LayerParameter::_internal_mutable_bottom() {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return &_impl_.bottom_;
}

// repeated string top = 4;
inline int LayerParameter::_internal_top_size() const {
  return _internal_top().size();
}
inline int LayerParameter::top_size() const {
  return _internal_top_size();
}
inline void LayerParameter::clear_top() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.top_.Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
}
inline ::std::string* PROTOBUF_NONNULL LayerParameter::add_top()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  ::std::string* _s =
      _internal_mutable_top()->InternalAddWithArena(
          ::google::protobuf::MessageLite::internal_visibility(), GetArena());
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  // @@protoc_insertion_point(field_add_mutable:caffe.LayerParameter.top)
  return _s;
}
inline const ::std::string& LayerParameter::top(int index) const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.top)
  return _internal_top().Get(index);
}
inline ::std::string* PROTOBUF_NONNULL LayerParameter::mutable_top(int index)
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.top)
  return _internal_mutable_top()->Mutable(index);
}
template <typename Arg_, typename... Args_>
inline void LayerParameter::set_top(int index, Arg_&& value, Args_... args) {
  ::google::protobuf::internal::AssignToString(
      *_internal_mutable_top()->Mutable(index),
      ::std::forward<Arg_>(value), args... );
  // @@protoc_insertion_point(field_set:caffe.LayerParameter.top)
}
template <typename Arg_, typename... Args_>
inline void LayerParameter::add_top(Arg_&& value, Args_... args) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  ::google::protobuf::internal::AddToRepeatedPtrField(
      ::google::protobuf::MessageLite::internal_visibility(), GetArena(),
      *_internal_mutable_top(), ::std::forward<Arg_>(value),
      args... );
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  // @@protoc_insertion_point(field_add:caffe.LayerParameter.top)
}
inline const ::google::protobuf::RepeatedPtrField<::std::string>& LayerParameter::top()
    const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_list:caffe.LayerParameter.top)
  return _internal_top();
}
inline ::google::protobuf::RepeatedPtrField<::std::string>* PROTOBUF_NONNULL
LayerParameter::mutable_top() ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  // @@protoc_insertion_point(field_mutable_list:caffe.LayerParameter.top)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _internal_mutable_top();
}
inline const ::google::protobuf::RepeatedPtrField<::std::string>&
LayerParameter::_internal_top() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.top_;
}
inline ::google::protobuf::RepeatedPtrField<::std::string>* PROTOBUF_NONNULL
LayerParameter::_internal_mutable_top() {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return &_impl_.top_;
}

// optional .caffe.Phase phase = 10;
inline bool LayerParameter::has_phase() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x04000000U);
  return value;
}
inline void LayerParameter::clear_phase() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.phase_ = 0;
  ClearHasBit(_impl_._has_bits_[0], 0x04000000U);
}
inline ::caffe::Phase LayerParameter::phase() const {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.phase)
  return _internal_phase();
}
inline void LayerParameter::set_phase(::caffe::Phase value) {
  _internal_set_phase(value);
  SetHasBit(_impl_._has_bits_[0], 0x04000000U);
  // @@protoc_insertion_point(field_set:caffe.LayerParameter.phase)
}
inline ::caffe::Phase LayerParameter::_internal_phase() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return static_cast<::caffe::Phase>(_impl_.phase_);
}
inline void LayerParameter::_internal_set_phase(::caffe::Phase value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);

                                          assert(::google::protobuf::internal::ValidateEnum(
                                              value, ::caffe::Phase_internal_data_));
                                          _impl_.phase_ = value;
}

// repeated float loss_weight = 5;
inline int LayerParameter::_internal_loss_weight_size() const {
  return _internal_loss_weight().size();
}
inline int LayerParameter::loss_weight_size() const {
  return _internal_loss_weight_size();
}
inline void LayerParameter::clear_loss_weight() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.loss_weight_.Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000004U);
}
inline float LayerParameter::loss_weight(int index) const {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.loss_weight)
  return _internal_loss_weight().Get(index);
}
inline void LayerParameter::set_loss_weight(int index, float value) {
  _internal_mutable_loss_weight()->Set(index, value);
  // @@protoc_insertion_point(field_set:caffe.LayerParameter.loss_weight)
}
inline void LayerParameter::add_loss_weight(float value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _internal_mutable_loss_weight()
      ->InternalAddWithArena<const ::google::protobuf::MessageLite*>(
          internal_visibility(), this, value);
  SetHasBit(_impl_._has_bits_[0], 0x00000004U);
  // @@protoc_insertion_point(field_add:caffe.LayerParameter.loss_weight)
}
inline const ::google::protobuf::RepeatedField<float>& LayerParameter::loss_weight() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_list:caffe.LayerParameter.loss_weight)
  return _internal_loss_weight();
}
inline ::google::protobuf::RepeatedField<float>* PROTOBUF_NONNULL LayerParameter::mutable_loss_weight()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000004U);
  // @@protoc_insertion_point(field_mutable_list:caffe.LayerParameter.loss_weight)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _internal_mutable_loss_weight();
}
inline const ::google::protobuf::RepeatedField<float>&
LayerParameter::_internal_loss_weight() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.loss_weight_;
}
inline ::google::protobuf::RepeatedField<float>* PROTOBUF_NONNULL
LayerParameter::_internal_mutable_loss_weight() {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return &_impl_.loss_weight_;
}

// repeated .caffe.ParamSpec param = 6;
inline int LayerParameter::_internal_param_size() const {
  return _internal_param().size();
}
inline int LayerParameter::param_size() const {
  return _internal_param_size();
}
inline void LayerParameter::clear_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.param_.Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000008U);
}
inline const ::caffe::ParamSpec& LayerParameter::param(int index) const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.param)
  return _internal_param().Get(index);
}
inline ::caffe::ParamSpec* PROTOBUF_NONNULL LayerParameter::mutable_param(int index)
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.param)
  return _internal_mutable_param()->Mutable(index);
}
inline ::caffe::ParamSpec* PROTOBUF_NONNULL LayerParameter::add_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  ::caffe::ParamSpec* _add =
      _internal_mutable_param()->InternalAddWithArena(
          ::google::protobuf::MessageLite::internal_visibility(), GetArena());
  SetHasBit(_impl_._has_bits_[0], 0x00000008U);
  // @@protoc_insertion_point(field_add:caffe.LayerParameter.param)
  return _add;
}
inline const ::google::protobuf::RepeatedPtrField<::caffe::ParamSpec>& LayerParameter::param() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_list:caffe.LayerParameter.param)
  return _internal_param();
}
inline ::google::protobuf::RepeatedPtrField<::caffe::ParamSpec>* PROTOBUF_NONNULL
LayerParameter::mutable_param() ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000008U);
  // @@protoc_insertion_point(field_mutable_list:caffe.LayerParameter.param)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _internal_mutable_param();
}
inline const ::google::protobuf::RepeatedPtrField<::caffe::ParamSpec>&
LayerParameter::_internal_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.param_;
}
inline ::google::protobuf::RepeatedPtrField<::caffe::ParamSpec>* PROTOBUF_NONNULL
LayerParameter::_internal_mutable_param() {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return &_impl_.param_;
}

// repeated .caffe.BlobProto blobs = 7;
inline int LayerParameter::_internal_blobs_size() const {
  return _internal_blobs().size();
}
inline int LayerParameter::blobs_size() const {
  return _internal_blobs_size();
}
inline void LayerParameter::clear_blobs() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.blobs_.Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000010U);
}
inline const ::caffe::BlobProto& LayerParameter::blobs(int index) const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.blobs)
  return _internal_blobs().Get(index);
}
inline ::caffe::BlobProto* PROTOBUF_NONNULL LayerParameter::mutable_blobs(int index)
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.blobs)
  return _internal_mutable_blobs()->Mutable(index);
}
inline ::caffe::BlobProto* PROTOBUF_NONNULL LayerParameter::add_blobs()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  ::caffe::BlobProto* _add =
      _internal_mutable_blobs()->InternalAddWithArena(
          ::google::protobuf::MessageLite::internal_visibility(), GetArena());
  SetHasBit(_impl_._has_bits_[0], 0x00000010U);
  // @@protoc_insertion_point(field_add:caffe.LayerParameter.blobs)
  return _add;
}
inline const ::google::protobuf::RepeatedPtrField<::caffe::BlobProto>& LayerParameter::blobs() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_list:caffe.LayerParameter.blobs)
  return _internal_blobs();
}
inline ::google::protobuf::RepeatedPtrField<::caffe::BlobProto>* PROTOBUF_NONNULL
LayerParameter::mutable_blobs() ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000010U);
  // @@protoc_insertion_point(field_mutable_list:caffe.LayerParameter.blobs)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _internal_mutable_blobs();
}
inline const ::google::protobuf::RepeatedPtrField<::caffe::BlobProto>&
LayerParameter::_internal_blobs() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.blobs_;
}
inline ::google::protobuf::RepeatedPtrField<::caffe::BlobProto>* PROTOBUF_NONNULL
LayerParameter::_internal_mutable_blobs() {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return &_impl_.blobs_;
}

// repeated bool propagate_down = 11;
inline int LayerParameter::_internal_propagate_down_size() const {
  return _internal_propagate_down().size();
}
inline int LayerParameter::propagate_down_size() const {
  return _internal_propagate_down_size();
}
inline void LayerParameter::clear_propagate_down() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.propagate_down_.Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000080U);
}
inline bool LayerParameter::propagate_down(int index) const {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.propagate_down)
  return _internal_propagate_down().Get(index);
}
inline void LayerParameter::set_propagate_down(int index, bool value) {
  _internal_mutable_propagate_down()->Set(index, value);
  // @@protoc_insertion_point(field_set:caffe.LayerParameter.propagate_down)
}
inline void LayerParameter::add_propagate_down(bool value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _internal_mutable_propagate_down()
      ->InternalAddWithArena<const ::google::protobuf::MessageLite*>(
          internal_visibility(), this, value);
  SetHasBit(_impl_._has_bits_[0], 0x00000080U);
  // @@protoc_insertion_point(field_add:caffe.LayerParameter.propagate_down)
}
inline const ::google::protobuf::RepeatedField<bool>& LayerParameter::propagate_down() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_list:caffe.LayerParameter.propagate_down)
  return _internal_propagate_down();
}
inline ::google::protobuf::RepeatedField<bool>* PROTOBUF_NONNULL LayerParameter::mutable_propagate_down()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000080U);
  // @@protoc_insertion_point(field_mutable_list:caffe.LayerParameter.propagate_down)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _internal_mutable_propagate_down();
}
inline const ::google::protobuf::RepeatedField<bool>&
LayerParameter::_internal_propagate_down() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.propagate_down_;
}
inline ::google::protobuf::RepeatedField<bool>* PROTOBUF_NONNULL
LayerParameter::_internal_mutable_propagate_down() {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return &_impl_.propagate_down_;
}

// repeated .caffe.NetStateRule include = 8;
inline int LayerParameter::_internal_include_size() const {
  return _internal_include().size();
}
inline int LayerParameter::include_size() const {
  return _internal_include_size();
}
inline void LayerParameter::clear_include() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.include_.Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000020U);
}
inline const ::caffe::NetStateRule& LayerParameter::include(int index) const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.include)
  return _internal_include().Get(index);
}
inline ::caffe::NetStateRule* PROTOBUF_NONNULL LayerParameter::mutable_include(int index)
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.include)
  return _internal_mutable_include()->Mutable(index);
}
inline ::caffe::NetStateRule* PROTOBUF_NONNULL LayerParameter::add_include()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  ::caffe::NetStateRule* _add =
      _internal_mutable_include()->InternalAddWithArena(
          ::google::protobuf::MessageLite::internal_visibility(), GetArena());
  SetHasBit(_impl_._has_bits_[0], 0x00000020U);
  // @@protoc_insertion_point(field_add:caffe.LayerParameter.include)
  return _add;
}
inline const ::google::protobuf::RepeatedPtrField<::caffe::NetStateRule>& LayerParameter::include() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_list:caffe.LayerParameter.include)
  return _internal_include();
}
inline ::google::protobuf::RepeatedPtrField<::caffe::NetStateRule>* PROTOBUF_NONNULL
LayerParameter::mutable_include() ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000020U);
  // @@protoc_insertion_point(field_mutable_list:caffe.LayerParameter.include)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _internal_mutable_include();
}
inline const ::google::protobuf::RepeatedPtrField<::caffe::NetStateRule>&
LayerParameter::_internal_include() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.include_;
}
inline ::google::protobuf::RepeatedPtrField<::caffe::NetStateRule>* PROTOBUF_NONNULL
LayerParameter::_internal_mutable_include() {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return &_impl_.include_;
}

// repeated .caffe.NetStateRule exclude = 9;
inline int LayerParameter::_internal_exclude_size() const {
  return _internal_exclude().size();
}
inline int LayerParameter::exclude_size() const {
  return _internal_exclude_size();
}
inline void LayerParameter::clear_exclude() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.exclude_.Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000040U);
}
inline const ::caffe::NetStateRule& LayerParameter::exclude(int index) const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.exclude)
  return _internal_exclude().Get(index);
}
inline ::caffe::NetStateRule* PROTOBUF_NONNULL LayerParameter::mutable_exclude(int index)
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.exclude)
  return _internal_mutable_exclude()->Mutable(index);
}
inline ::caffe::NetStateRule* PROTOBUF_NONNULL LayerParameter::add_exclude()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  ::caffe::NetStateRule* _add =
      _internal_mutable_exclude()->InternalAddWithArena(
          ::google::protobuf::MessageLite::internal_visibility(), GetArena());
  SetHasBit(_impl_._has_bits_[0], 0x00000040U);
  // @@protoc_insertion_point(field_add:caffe.LayerParameter.exclude)
  return _add;
}
inline const ::google::protobuf::RepeatedPtrField<::caffe::NetStateRule>& LayerParameter::exclude() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_list:caffe.LayerParameter.exclude)
  return _internal_exclude();
}
inline ::google::protobuf::RepeatedPtrField<::caffe::NetStateRule>* PROTOBUF_NONNULL
LayerParameter::mutable_exclude() ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000040U);
  // @@protoc_insertion_point(field_mutable_list:caffe.LayerParameter.exclude)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _internal_mutable_exclude();
}
inline const ::google::protobuf::RepeatedPtrField<::caffe::NetStateRule>&
LayerParameter::_internal_exclude() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.exclude_;
}
inline ::google::protobuf::RepeatedPtrField<::caffe::NetStateRule>* PROTOBUF_NONNULL
LayerParameter::_internal_mutable_exclude() {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return &_impl_.exclude_;
}

// optional .caffe.TransformationParameter transform_param = 100;
inline bool LayerParameter::has_transform_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000800U);
  PROTOBUF_ASSUME(!value || _impl_.transform_param_ != nullptr);
  return value;
}
inline void LayerParameter::clear_transform_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.transform_param_ != nullptr) _impl_.transform_param_->Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000800U);
}
inline const ::caffe::TransformationParameter& LayerParameter::_internal_transform_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::TransformationParameter* p = _impl_.transform_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::TransformationParameter>(&::caffe::TransformationParameter_globals_);
}
inline const ::caffe::TransformationParameter& LayerParameter::transform_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.transform_param)
  return _internal_transform_param();
}
inline void LayerParameter::unsafe_arena_set_allocated_transform_param(
    ::caffe::TransformationParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.transform_param_);
  }
  _impl_.transform_param_ = reinterpret_cast<::caffe::TransformationParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000800U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000800U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.LayerParameter.transform_param)
}
inline ::caffe::TransformationParameter* PROTOBUF_NULLABLE LayerParameter::release_transform_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[0], 0x00000800U);
  ::caffe::TransformationParameter* released = _impl_.transform_param_;
  _impl_.transform_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::TransformationParameter* PROTOBUF_NULLABLE LayerParameter::unsafe_arena_release_transform_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.transform_param)

  ClearHasBit(_impl_._has_bits_[0], 0x00000800U);
  ::caffe::TransformationParameter* temp = _impl_.transform_param_;
  _impl_.transform_param_ = nullptr;
  return temp;
}
inline ::caffe::TransformationParameter* PROTOBUF_NONNULL LayerParameter::_internal_mutable_transform_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.transform_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::TransformationParameter>(GetArena());
    _impl_.transform_param_ = reinterpret_cast<::caffe::TransformationParameter*>(p);
  }
  return _impl_.transform_param_;
}
inline ::caffe::TransformationParameter* PROTOBUF_NONNULL LayerParameter::mutable_transform_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000800U);
  ::caffe::TransformationParameter* _msg = _internal_mutable_transform_param();
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.transform_param)
  return _msg;
}
inline void LayerParameter::set_allocated_transform_param(::caffe::TransformationParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.transform_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[0], 0x00000800U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000800U);
  }

  _impl_.transform_param_ = reinterpret_cast<::caffe::TransformationParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.transform_param)
}

// optional .caffe.LossParameter loss_param = 101;
inline bool LayerParameter::has_loss_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00001000U);
  PROTOBUF_ASSUME(!value || _impl_.loss_param_ != nullptr);
  return value;
}
inline void LayerParameter::clear_loss_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.loss_param_ != nullptr) _impl_.loss_param_->Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00001000U);
}
inline const ::caffe::LossParameter& LayerParameter::_internal_loss_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::LossParameter* p = _impl_.loss_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::LossParameter>(&::caffe::LossParameter_globals_);
}
inline const ::caffe::LossParameter& LayerParameter::loss_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.loss_param)
  return _internal_loss_param();
}
inline void LayerParameter::unsafe_arena_set_allocated_loss_param(
    ::caffe::LossParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.loss_param_);
  }
  _impl_.loss_param_ = reinterpret_cast<::caffe::LossParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00001000U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00001000U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.LayerParameter.loss_param)
}
inline ::caffe::LossParameter* PROTOBUF_NULLABLE LayerParameter::release_loss_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[0], 0x00001000U);
  ::caffe::LossParameter* released = _impl_.loss_param_;
  _impl_.loss_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::LossParameter* PROTOBUF_NULLABLE LayerParameter::unsafe_arena_release_loss_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.loss_param)

  ClearHasBit(_impl_._has_bits_[0], 0x00001000U);
  ::caffe::LossParameter* temp = _impl_.loss_param_;
  _impl_.loss_param_ = nullptr;
  return temp;
}
inline ::caffe::LossParameter* PROTOBUF_NONNULL LayerParameter::_internal_mutable_loss_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.loss_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::LossParameter>(GetArena());
    _impl_.loss_param_ = reinterpret_cast<::caffe::LossParameter*>(p);
  }
  return _impl_.loss_param_;
}
inline ::caffe::LossParameter* PROTOBUF_NONNULL LayerParameter::mutable_loss_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00001000U);
  ::caffe::LossParameter* _msg = _internal_mutable_loss_param();
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.loss_param)
  return _msg;
}
inline void LayerParameter::set_allocated_loss_param(::caffe::LossParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.loss_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[0], 0x00001000U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00001000U);
  }

  _impl_.loss_param_ = reinterpret_cast<::caffe::LossParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.loss_param)
}

// optional .caffe.AccuracyParameter accuracy_param = 102;
inline bool LayerParameter::has_accuracy_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00002000U);
  PROTOBUF_ASSUME(!value || _impl_.accuracy_param_ != nullptr);
  return value;
}
inline void LayerParameter::clear_accuracy_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.accuracy_param_ != nullptr) _impl_.accuracy_param_->Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00002000U);
}
inline const ::caffe::AccuracyParameter& LayerParameter::_internal_accuracy_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::AccuracyParameter* p = _impl_.accuracy_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::AccuracyParameter>(&::caffe::AccuracyParameter_globals_);
}
inline const ::caffe::AccuracyParameter& LayerParameter::accuracy_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.accuracy_param)
  return _internal_accuracy_param();
}
inline void LayerParameter::unsafe_arena_set_allocated_accuracy_param(
    ::caffe::AccuracyParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.accuracy_param_);
  }
  _impl_.accuracy_param_ = reinterpret_cast<::caffe::AccuracyParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00002000U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00002000U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.LayerParameter.accuracy_param)
}
inline ::caffe::AccuracyParameter* PROTOBUF_NULLABLE LayerParameter::release_accuracy_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[0], 0x00002000U);
  ::caffe::AccuracyParameter* released = _impl_.accuracy_param_;
  _impl_.accuracy_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::AccuracyParameter* PROTOBUF_NULLABLE LayerParameter::unsafe_arena_release_accuracy_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.accuracy_param)

  ClearHasBit(_impl_._has_bits_[0], 0x00002000U);
  ::caffe::AccuracyParameter* temp = _impl_.accuracy_param_;
  _impl_.accuracy_param_ = nullptr;
  return temp;
}
inline ::caffe::AccuracyParameter* PROTOBUF_NONNULL LayerParameter::_internal_mutable_accuracy_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.accuracy_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::AccuracyParameter>(GetArena());
    _impl_.accuracy_param_ = reinterpret_cast<::caffe::AccuracyParameter*>(p);
  }
  return _impl_.accuracy_param_;
}
inline ::caffe::AccuracyParameter* PROTOBUF_NONNULL LayerParameter::mutable_accuracy_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00002000U);
  ::caffe::AccuracyParameter* _msg = _internal_mutable_accuracy_param();
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.accuracy_param)
  return _msg;
}
inline void LayerParameter::set_allocated_accuracy_param(::caffe::AccuracyParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.accuracy_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[0], 0x00002000U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00002000U);
  }

  _impl_.accuracy_param_ = reinterpret_cast<::caffe::AccuracyParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.accuracy_param)
}

// optional .caffe.ArgMaxParameter argmax_param = 103;
inline bool LayerParameter::has_argmax_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00004000U);
  PROTOBUF_ASSUME(!value || _impl_.argmax_param_ != nullptr);
  return value;
}
inline void LayerParameter::clear_argmax_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.argmax_param_ != nullptr) _impl_.argmax_param_->Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00004000U);
}
inline const ::caffe::ArgMaxParameter& LayerParameter::_internal_argmax_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::ArgMaxParameter* p = _impl_.argmax_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::ArgMaxParameter>(&::caffe::ArgMaxParameter_globals_);
}
inline const ::caffe::ArgMaxParameter& LayerParameter::argmax_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.argmax_param)
  return _internal_argmax_param();
}
inline void LayerParameter::unsafe_arena_set_allocated_argmax_param(
    ::caffe::ArgMaxParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.argmax_param_);
  }
  _impl_.argmax_param_ = reinterpret_cast<::caffe::ArgMaxParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00004000U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00004000U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.LayerParameter.argmax_param)
}
inline ::caffe::ArgMaxParameter* PROTOBUF_NULLABLE LayerParameter::release_argmax_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[0], 0x00004000U);
  ::caffe::ArgMaxParameter* released = _impl_.argmax_param_;
  _impl_.argmax_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::ArgMaxParameter* PROTOBUF_NULLABLE LayerParameter::unsafe_arena_release_argmax_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.argmax_param)

  ClearHasBit(_impl_._has_bits_[0], 0x00004000U);
  ::caffe::ArgMaxParameter* temp = _impl_.argmax_param_;
  _impl_.argmax_param_ = nullptr;
  return temp;
}
inline ::caffe::ArgMaxParameter* PROTOBUF_NONNULL LayerParameter::_internal_mutable_argmax_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.argmax_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::ArgMaxParameter>(GetArena());
    _impl_.argmax_param_ = reinterpret_cast<::caffe::ArgMaxParameter*>(p);
  }
  return _impl_.argmax_param_;
}
inline ::caffe::ArgMaxParameter* PROTOBUF_NONNULL LayerParameter::mutable_argmax_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00004000U);
  ::caffe::ArgMaxParameter* _msg = _internal_mutable_argmax_param();
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.argmax_param)
  return _msg;
}
inline void LayerParameter::set_allocated_argmax_param(::caffe::ArgMaxParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.argmax_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[0], 0x00004000U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00004000U);
  }

  _impl_.argmax_param_ = reinterpret_cast<::caffe::ArgMaxParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.argmax_param)
}

// optional .caffe.BatchNormParameter batch_norm_param = 139;
inline bool LayerParameter::has_batch_norm_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[1], 0x00080000U);
  PROTOBUF_ASSUME(!value || _impl_.batch_norm_param_ != nullptr);
  return value;
}
inline void LayerParameter::clear_batch_norm_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.batch_norm_param_ != nullptr) _impl_.batch_norm_param_->Clear();
  ClearHasBit(_impl_._has_bits_[1], 0x00080000U);
}
inline const ::caffe::BatchNormParameter& LayerParameter::_internal_batch_norm_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::BatchNormParameter* p = _impl_.batch_norm_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::BatchNormParameter>(&::caffe::BatchNormParameter_globals_);
}
inline const ::caffe::BatchNormParameter& LayerParameter::batch_norm_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.batch_norm_param)
  return _internal_batch_norm_param();
}
inline void LayerParameter::unsafe_arena_set_allocated_batch_norm_param(
    ::caffe::BatchNormParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.batch_norm_param_);
  }
  _impl_.batch_norm_param_ = reinterpret_cast<::caffe::BatchNormParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[1], 0x00080000U);
  } else {
    ClearHasBit(_impl_._has_bits_[1], 0x00080000U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.LayerParameter.batch_norm_param)
}
inline ::caffe::BatchNormParameter* PROTOBUF_NULLABLE LayerParameter::release_batch_norm_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[1], 0x00080000U);
  ::caffe::BatchNormParameter* released = _impl_.batch_norm_param_;
  _impl_.batch_norm_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::BatchNormParameter* PROTOBUF_NULLABLE LayerParameter::unsafe_arena_release_batch_norm_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.batch_norm_param)

  ClearHasBit(_impl_._has_bits_[1], 0x00080000U);
  ::caffe::BatchNormParameter* temp = _impl_.batch_norm_param_;
  _impl_.batch_norm_param_ = nullptr;
  return temp;
}
inline ::caffe::BatchNormParameter* PROTOBUF_NONNULL LayerParameter::_internal_mutable_batch_norm_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.batch_norm_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::BatchNormParameter>(GetArena());
    _impl_.batch_norm_param_ = reinterpret_cast<::caffe::BatchNormParameter*>(p);
  }
  return _impl_.batch_norm_param_;
}
inline ::caffe::BatchNormParameter* PROTOBUF_NONNULL LayerParameter::mutable_batch_norm_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[1], 0x00080000U);
  ::caffe::BatchNormParameter* _msg = _internal_mutable_batch_norm_param();
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.batch_norm_param)
  return _msg;
}
inline void LayerParameter::set_allocated_batch_norm_param(::caffe::BatchNormParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.batch_norm_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[1], 0x00080000U);
  } else {
    ClearHasBit(_impl_._has_bits_[1], 0x00080000U);
  }

  _impl_.batch_norm_param_ = reinterpret_cast<::caffe::BatchNormParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.batch_norm_param)
}

// optional .caffe.BiasParameter bias_param = 141;
inline bool LayerParameter::has_bias_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[1], 0x00200000U);
  PROTOBUF_ASSUME(!value || _impl_.bias_param_ != nullptr);
  return value;
}
inline void LayerParameter::clear_bias_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.bias_param_ != nullptr) _impl_.bias_param_->Clear();
  ClearHasBit(_impl_._has_bits_[1], 0x00200000U);
}
inline const ::caffe::BiasParameter& LayerParameter::_internal_bias_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::BiasParameter* p = _impl_.bias_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::BiasParameter>(&::caffe::BiasParameter_globals_);
}
inline const ::caffe::BiasParameter& LayerParameter::bias_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.bias_param)
  return _internal_bias_param();
}
inline void LayerParameter::unsafe_arena_set_allocated_bias_param(
    ::caffe::BiasParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.bias_param_);
  }
  _impl_.bias_param_ = reinterpret_cast<::caffe::BiasParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[1], 0x00200000U);
  } else {
    ClearHasBit(_impl_._has_bits_[1], 0x00200000U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.LayerParameter.bias_param)
}
inline ::caffe::BiasParameter* PROTOBUF_NULLABLE LayerParameter::release_bias_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[1], 0x00200000U);
  ::caffe::BiasParameter* released = _impl_.bias_param_;
  _impl_.bias_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::BiasParameter* PROTOBUF_NULLABLE LayerParameter::unsafe_arena_release_bias_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.bias_param)

  ClearHasBit(_impl_._has_bits_[1], 0x00200000U);
  ::caffe::BiasParameter* temp = _impl_.bias_param_;
  _impl_.bias_param_ = nullptr;
  return temp;
}
inline ::caffe::BiasParameter* PROTOBUF_NONNULL LayerParameter::_internal_mutable_bias_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.bias_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::BiasParameter>(GetArena());
    _impl_.bias_param_ = reinterpret_cast<::caffe::BiasParameter*>(p);
  }
  return _impl_.bias_param_;
}
inline ::caffe::BiasParameter* PROTOBUF_NONNULL LayerParameter::mutable_bias_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[1], 0x00200000U);
  ::caffe::BiasParameter* _msg = _internal_mutable_bias_param();
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.bias_param)
  return _msg;
}
inline void LayerParameter::set_allocated_bias_param(::caffe::BiasParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.bias_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[1], 0x00200000U);
  } else {
    ClearHasBit(_impl_._has_bits_[1], 0x00200000U);
  }

  _impl_.bias_param_ = reinterpret_cast<::caffe::BiasParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.bias_param)
}

// optional .caffe.BNParameter bn_param = 45;
inline bool LayerParameter::has_bn_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000400U);
  PROTOBUF_ASSUME(!value || _impl_.bn_param_ != nullptr);
  return value;
}
inline void LayerParameter::clear_bn_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.bn_param_ != nullptr) _impl_.bn_param_->Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000400U);
}
inline const ::caffe::BNParameter& LayerParameter::_internal_bn_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::BNParameter* p = _impl_.bn_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::BNParameter>(&::caffe::BNParameter_globals_);
}
inline const ::caffe::BNParameter& LayerParameter::bn_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.bn_param)
  return _internal_bn_param();
}
inline void LayerParameter::unsafe_arena_set_allocated_bn_param(
    ::caffe::BNParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.bn_param_);
  }
  _impl_.bn_param_ = reinterpret_cast<::caffe::BNParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000400U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000400U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.LayerParameter.bn_param)
}
inline ::caffe::BNParameter* PROTOBUF_NULLABLE LayerParameter::release_bn_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[0], 0x00000400U);
  ::caffe::BNParameter* released = _impl_.bn_param_;
  _impl_.bn_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::BNParameter* PROTOBUF_NULLABLE LayerParameter::unsafe_arena_release_bn_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.bn_param)

  ClearHasBit(_impl_._has_bits_[0], 0x00000400U);
  ::caffe::BNParameter* temp = _impl_.bn_param_;
  _impl_.bn_param_ = nullptr;
  return temp;
}
inline ::caffe::BNParameter* PROTOBUF_NONNULL LayerParameter::_internal_mutable_bn_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.bn_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::BNParameter>(GetArena());
    _impl_.bn_param_ = reinterpret_cast<::caffe::BNParameter*>(p);
  }
  return _impl_.bn_param_;
}
inline ::caffe::BNParameter* PROTOBUF_NONNULL LayerParameter::mutable_bn_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000400U);
  ::caffe::BNParameter* _msg = _internal_mutable_bn_param();
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.bn_param)
  return _msg;
}
inline void LayerParameter::set_allocated_bn_param(::caffe::BNParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.bn_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[0], 0x00000400U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000400U);
  }

  _impl_.bn_param_ = reinterpret_cast<::caffe::BNParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.bn_param)
}

// optional .caffe.ConcatParameter concat_param = 104;
inline bool LayerParameter::has_concat_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00008000U);
  PROTOBUF_ASSUME(!value || _impl_.concat_param_ != nullptr);
  return value;
}
inline void LayerParameter::clear_concat_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.concat_param_ != nullptr) _impl_.concat_param_->Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00008000U);
}
inline const ::caffe::ConcatParameter& LayerParameter::_internal_concat_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::ConcatParameter* p = _impl_.concat_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::ConcatParameter>(&::caffe::ConcatParameter_globals_);
}
inline const ::caffe::ConcatParameter& LayerParameter::concat_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.concat_param)
  return _internal_concat_param();
}
inline void LayerParameter::unsafe_arena_set_allocated_concat_param(
    ::caffe::ConcatParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.concat_param_);
  }
  _impl_.concat_param_ = reinterpret_cast<::caffe::ConcatParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00008000U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00008000U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.LayerParameter.concat_param)
}
inline ::caffe::ConcatParameter* PROTOBUF_NULLABLE LayerParameter::release_concat_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[0], 0x00008000U);
  ::caffe::ConcatParameter* released = _impl_.concat_param_;
  _impl_.concat_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::ConcatParameter* PROTOBUF_NULLABLE LayerParameter::unsafe_arena_release_concat_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.concat_param)

  ClearHasBit(_impl_._has_bits_[0], 0x00008000U);
  ::caffe::ConcatParameter* temp = _impl_.concat_param_;
  _impl_.concat_param_ = nullptr;
  return temp;
}
inline ::caffe::ConcatParameter* PROTOBUF_NONNULL LayerParameter::_internal_mutable_concat_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.concat_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::ConcatParameter>(GetArena());
    _impl_.concat_param_ = reinterpret_cast<::caffe::ConcatParameter*>(p);
  }
  return _impl_.concat_param_;
}
inline ::caffe::ConcatParameter* PROTOBUF_NONNULL LayerParameter::mutable_concat_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00008000U);
  ::caffe::ConcatParameter* _msg = _internal_mutable_concat_param();
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.concat_param)
  return _msg;
}
inline void LayerParameter::set_allocated_concat_param(::caffe::ConcatParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.concat_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[0], 0x00008000U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00008000U);
  }

  _impl_.concat_param_ = reinterpret_cast<::caffe::ConcatParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.concat_param)
}

// optional .caffe.ContrastiveLossParameter contrastive_loss_param = 105;
inline bool LayerParameter::has_contrastive_loss_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00010000U);
  PROTOBUF_ASSUME(!value || _impl_.contrastive_loss_param_ != nullptr);
  return value;
}
inline void LayerParameter::clear_contrastive_loss_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.contrastive_loss_param_ != nullptr) _impl_.contrastive_loss_param_->Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00010000U);
}
inline const ::caffe::ContrastiveLossParameter& LayerParameter::_internal_contrastive_loss_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::ContrastiveLossParameter* p = _impl_.contrastive_loss_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::ContrastiveLossParameter>(&::caffe::ContrastiveLossParameter_globals_);
}
inline const ::caffe::ContrastiveLossParameter& LayerParameter::contrastive_loss_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.contrastive_loss_param)
  return _internal_contrastive_loss_param();
}
inline void LayerParameter::unsafe_arena_set_allocated_contrastive_loss_param(
    ::caffe::ContrastiveLossParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.contrastive_loss_param_);
  }
  _impl_.contrastive_loss_param_ = reinterpret_cast<::caffe::ContrastiveLossParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00010000U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00010000U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.LayerParameter.contrastive_loss_param)
}
inline ::caffe::ContrastiveLossParameter* PROTOBUF_NULLABLE LayerParameter::release_contrastive_loss_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[0], 0x00010000U);
  ::caffe::ContrastiveLossParameter* released = _impl_.contrastive_loss_param_;
  _impl_.contrastive_loss_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::ContrastiveLossParameter* PROTOBUF_NULLABLE LayerParameter::unsafe_arena_release_contrastive_loss_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.contrastive_loss_param)

  ClearHasBit(_impl_._has_bits_[0], 0x00010000U);
  ::caffe::ContrastiveLossParameter* temp = _impl_.contrastive_loss_param_;
  _impl_.contrastive_loss_param_ = nullptr;
  return temp;
}
inline ::caffe::ContrastiveLossParameter* PROTOBUF_NONNULL LayerParameter::_internal_mutable_contrastive_loss_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.contrastive_loss_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::ContrastiveLossParameter>(GetArena());
    _impl_.contrastive_loss_param_ = reinterpret_cast<::caffe::ContrastiveLossParameter*>(p);
  }
  return _impl_.contrastive_loss_param_;
}
inline ::caffe::ContrastiveLossParameter* PROTOBUF_NONNULL LayerParameter::mutable_contrastive_loss_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00010000U);
  ::caffe::ContrastiveLossParameter* _msg = _internal_mutable_contrastive_loss_param();
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.contrastive_loss_param)
  return _msg;
}
inline void LayerParameter::set_allocated_contrastive_loss_param(::caffe::ContrastiveLossParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.contrastive_loss_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[0], 0x00010000U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00010000U);
  }

  _impl_.contrastive_loss_param_ = reinterpret_cast<::caffe::ContrastiveLossParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.contrastive_loss_param)
}

// optional .caffe.ConvolutionParameter convolution_param = 106;
inline bool LayerParameter::has_convolution_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00020000U);
  PROTOBUF_ASSUME(!value || _impl_.convolution_param_ != nullptr);
  return value;
}
inline void LayerParameter::clear_convolution_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.convolution_param_ != nullptr) _impl_.convolution_param_->Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00020000U);
}
inline const ::caffe::ConvolutionParameter& LayerParameter::_internal_convolution_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::ConvolutionParameter* p = _impl_.convolution_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::ConvolutionParameter>(&::caffe::ConvolutionParameter_globals_);
}
inline const ::caffe::ConvolutionParameter& LayerParameter::convolution_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.convolution_param)
  return _internal_convolution_param();
}
inline void LayerParameter::unsafe_arena_set_allocated_convolution_param(
    ::caffe::ConvolutionParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.convolution_param_);
  }
  _impl_.convolution_param_ = reinterpret_cast<::caffe::ConvolutionParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00020000U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00020000U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.LayerParameter.convolution_param)
}
inline ::caffe::ConvolutionParameter* PROTOBUF_NULLABLE LayerParameter::release_convolution_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[0], 0x00020000U);
  ::caffe::ConvolutionParameter* released = _impl_.convolution_param_;
  _impl_.convolution_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::ConvolutionParameter* PROTOBUF_NULLABLE LayerParameter::unsafe_arena_release_convolution_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.convolution_param)

  ClearHasBit(_impl_._has_bits_[0], 0x00020000U);
  ::caffe::ConvolutionParameter* temp = _impl_.convolution_param_;
  _impl_.convolution_param_ = nullptr;
  return temp;
}
inline ::caffe::ConvolutionParameter* PROTOBUF_NONNULL LayerParameter::_internal_mutable_convolution_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.convolution_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::ConvolutionParameter>(GetArena());
    _impl_.convolution_param_ = reinterpret_cast<::caffe::ConvolutionParameter*>(p);
  }
  return _impl_.convolution_param_;
}
inline ::caffe::ConvolutionParameter* PROTOBUF_NONNULL LayerParameter::mutable_convolution_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00020000U);
  ::caffe::ConvolutionParameter* _msg = _internal_mutable_convolution_param();
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.convolution_param)
  return _msg;
}
inline void LayerParameter::set_allocated_convolution_param(::caffe::ConvolutionParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.convolution_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[0], 0x00020000U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00020000U);
  }

  _impl_.convolution_param_ = reinterpret_cast<::caffe::ConvolutionParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.convolution_param)
}

// optional .caffe.CropParameter crop_param = 144;
inline bool LayerParameter::has_crop_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[1], 0x01000000U);
  PROTOBUF_ASSUME(!value || _impl_.crop_param_ != nullptr);
  return value;
}
inline void LayerParameter::clear_crop_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.crop_param_ != nullptr) _impl_.crop_param_->Clear();
  ClearHasBit(_impl_._has_bits_[1], 0x01000000U);
}
inline const ::caffe::CropParameter& LayerParameter::_internal_crop_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::CropParameter* p = _impl_.crop_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::CropParameter>(&::caffe::CropParameter_globals_);
}
inline const ::caffe::CropParameter& LayerParameter::crop_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.crop_param)
  return _internal_crop_param();
}
inline void LayerParameter::unsafe_arena_set_allocated_crop_param(
    ::caffe::CropParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.crop_param_);
  }
  _impl_.crop_param_ = reinterpret_cast<::caffe::CropParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[1], 0x01000000U);
  } else {
    ClearHasBit(_impl_._has_bits_[1], 0x01000000U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.LayerParameter.crop_param)
}
inline ::caffe::CropParameter* PROTOBUF_NULLABLE LayerParameter::release_crop_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[1], 0x01000000U);
  ::caffe::CropParameter* released = _impl_.crop_param_;
  _impl_.crop_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::CropParameter* PROTOBUF_NULLABLE LayerParameter::unsafe_arena_release_crop_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.crop_param)

  ClearHasBit(_impl_._has_bits_[1], 0x01000000U);
  ::caffe::CropParameter* temp = _impl_.crop_param_;
  _impl_.crop_param_ = nullptr;
  return temp;
}
inline ::caffe::CropParameter* PROTOBUF_NONNULL LayerParameter::_internal_mutable_crop_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.crop_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::CropParameter>(GetArena());
    _impl_.crop_param_ = reinterpret_cast<::caffe::CropParameter*>(p);
  }
  return _impl_.crop_param_;
}
inline ::caffe::CropParameter* PROTOBUF_NONNULL LayerParameter::mutable_crop_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[1], 0x01000000U);
  ::caffe::CropParameter* _msg = _internal_mutable_crop_param();
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.crop_param)
  return _msg;
}
inline void LayerParameter::set_allocated_crop_param(::caffe::CropParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.crop_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[1], 0x01000000U);
  } else {
    ClearHasBit(_impl_._has_bits_[1], 0x01000000U);
  }

  _impl_.crop_param_ = reinterpret_cast<::caffe::CropParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.crop_param)
}

// optional .caffe.DataParameter data_param = 107;
inline bool LayerParameter::has_data_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00040000U);
  PROTOBUF_ASSUME(!value || _impl_.data_param_ != nullptr);
  return value;
}
inline void LayerParameter::clear_data_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.data_param_ != nullptr) _impl_.data_param_->Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00040000U);
}
inline const ::caffe::DataParameter& LayerParameter::_internal_data_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::DataParameter* p = _impl_.data_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::DataParameter>(&::caffe::DataParameter_globals_);
}
inline const ::caffe::DataParameter& LayerParameter::data_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.data_param)
  return _internal_data_param();
}
inline void LayerParameter::unsafe_arena_set_allocated_data_param(
    ::caffe::DataParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.data_param_);
  }
  _impl_.data_param_ = reinterpret_cast<::caffe::DataParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00040000U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00040000U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.LayerParameter.data_param)
}
inline ::caffe::DataParameter* PROTOBUF_NULLABLE LayerParameter::release_data_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[0], 0x00040000U);
  ::caffe::DataParameter* released = _impl_.data_param_;
  _impl_.data_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::DataParameter* PROTOBUF_NULLABLE LayerParameter::unsafe_arena_release_data_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.data_param)

  ClearHasBit(_impl_._has_bits_[0], 0x00040000U);
  ::caffe::DataParameter* temp = _impl_.data_param_;
  _impl_.data_param_ = nullptr;
  return temp;
}
inline ::caffe::DataParameter* PROTOBUF_NONNULL LayerParameter::_internal_mutable_data_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.data_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::DataParameter>(GetArena());
    _impl_.data_param_ = reinterpret_cast<::caffe::DataParameter*>(p);
  }
  return _impl_.data_param_;
}
inline ::caffe::DataParameter* PROTOBUF_NONNULL LayerParameter::mutable_data_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00040000U);
  ::caffe::DataParameter* _msg = _internal_mutable_data_param();
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.data_param)
  return _msg;
}
inline void LayerParameter::set_allocated_data_param(::caffe::DataParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.data_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[0], 0x00040000U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00040000U);
  }

  _impl_.data_param_ = reinterpret_cast<::caffe::DataParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.data_param)
}

// optional .caffe.DetectionOutputParameter detection_output_param = 204;
inline bool LayerParameter::has_detection_output_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[2], 0x00000001U);
  PROTOBUF_ASSUME(!value || _impl_.detection_output_param_ != nullptr);
  return value;
}
inline void LayerParameter::clear_detection_output_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.detection_output_param_ != nullptr) _impl_.detection_output_param_->Clear();
  ClearHasBit(_impl_._has_bits_[2], 0x00000001U);
}
inline const ::caffe::DetectionOutputParameter& LayerParameter::_internal_detection_output_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::DetectionOutputParameter* p = _impl_.detection_output_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::DetectionOutputParameter>(&::caffe::DetectionOutputParameter_globals_);
}
inline const ::caffe::DetectionOutputParameter& LayerParameter::detection_output_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.detection_output_param)
  return _internal_detection_output_param();
}
inline void LayerParameter::unsafe_arena_set_allocated_detection_output_param(
    ::caffe::DetectionOutputParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.detection_output_param_);
  }
  _impl_.detection_output_param_ = reinterpret_cast<::caffe::DetectionOutputParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[2], 0x00000001U);
  } else {
    ClearHasBit(_impl_._has_bits_[2], 0x00000001U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.LayerParameter.detection_output_param)
}
inline ::caffe::DetectionOutputParameter* PROTOBUF_NULLABLE LayerParameter::release_detection_output_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[2], 0x00000001U);
  ::caffe::DetectionOutputParameter* released = _impl_.detection_output_param_;
  _impl_.detection_output_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::DetectionOutputParameter* PROTOBUF_NULLABLE LayerParameter::unsafe_arena_release_detection_output_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.detection_output_param)

  ClearHasBit(_impl_._has_bits_[2], 0x00000001U);
  ::caffe::DetectionOutputParameter* temp = _impl_.detection_output_param_;
  _impl_.detection_output_param_ = nullptr;
  return temp;
}
inline ::caffe::DetectionOutputParameter* PROTOBUF_NONNULL LayerParameter::_internal_mutable_detection_output_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.detection_output_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::DetectionOutputParameter>(GetArena());
    _impl_.detection_output_param_ = reinterpret_cast<::caffe::DetectionOutputParameter*>(p);
  }
  return _impl_.detection_output_param_;
}
inline ::caffe::DetectionOutputParameter* PROTOBUF_NONNULL LayerParameter::mutable_detection_output_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[2], 0x00000001U);
  ::caffe::DetectionOutputParameter* _msg = _internal_mutable_detection_output_param();
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.detection_output_param)
  return _msg;
}
inline void LayerParameter::set_allocated_detection_output_param(::caffe::DetectionOutputParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.detection_output_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[2], 0x00000001U);
  } else {
    ClearHasBit(_impl_._has_bits_[2], 0x00000001U);
  }

  _impl_.detection_output_param_ = reinterpret_cast<::caffe::DetectionOutputParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.detection_output_param)
}

// optional .caffe.YoloDetectionOutputParameter yolo_detection_output_param = 601;
inline bool LayerParameter::has_yolo_detection_output_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[2], 0x00000008U);
  PROTOBUF_ASSUME(!value || _impl_.yolo_detection_output_param_ != nullptr);
  return value;
}
inline void LayerParameter::clear_yolo_detection_output_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.yolo_detection_output_param_ != nullptr) _impl_.yolo_detection_output_param_->Clear();
  ClearHasBit(_impl_._has_bits_[2], 0x00000008U);
}
inline const ::caffe::YoloDetectionOutputParameter& LayerParameter::_internal_yolo_detection_output_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::YoloDetectionOutputParameter* p = _impl_.yolo_detection_output_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::YoloDetectionOutputParameter>(&::caffe::YoloDetectionOutputParameter_globals_);
}
inline const ::caffe::YoloDetectionOutputParameter& LayerParameter::yolo_detection_output_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.yolo_detection_output_param)
  return _internal_yolo_detection_output_param();
}
inline void LayerParameter::unsafe_arena_set_allocated_yolo_detection_output_param(
    ::caffe::YoloDetectionOutputParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.yolo_detection_output_param_);
  }
  _impl_.yolo_detection_output_param_ = reinterpret_cast<::caffe::YoloDetectionOutputParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[2], 0x00000008U);
  } else {
    ClearHasBit(_impl_._has_bits_[2], 0x00000008U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.LayerParameter.yolo_detection_output_param)
}
inline ::caffe::YoloDetectionOutputParameter* PROTOBUF_NULLABLE LayerParameter::release_yolo_detection_output_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[2], 0x00000008U);
  ::caffe::YoloDetectionOutputParameter* released = _impl_.yolo_detection_output_param_;
  _impl_.yolo_detection_output_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::YoloDetectionOutputParameter* PROTOBUF_NULLABLE LayerParameter::unsafe_arena_release_yolo_detection_output_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.yolo_detection_output_param)

  ClearHasBit(_impl_._has_bits_[2], 0x00000008U);
  ::caffe::YoloDetectionOutputParameter* temp = _impl_.yolo_detection_output_param_;
  _impl_.yolo_detection_output_param_ = nullptr;
  return temp;
}
inline ::caffe::YoloDetectionOutputParameter* PROTOBUF_NONNULL LayerParameter::_internal_mutable_yolo_detection_output_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.yolo_detection_output_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::YoloDetectionOutputParameter>(GetArena());
    _impl_.yolo_detection_output_param_ = reinterpret_cast<::caffe::YoloDetectionOutputParameter*>(p);
  }
  return _impl_.yolo_detection_output_param_;
}
inline ::caffe::YoloDetectionOutputParameter* PROTOBUF_NONNULL LayerParameter::mutable_yolo_detection_output_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[2], 0x00000008U);
  ::caffe::YoloDetectionOutputParameter* _msg = _internal_mutable_yolo_detection_output_param();
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.yolo_detection_output_param)
  return _msg;
}
inline void LayerParameter::set_allocated_yolo_detection_output_param(::caffe::YoloDetectionOutputParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.yolo_detection_output_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[2], 0x00000008U);
  } else {
    ClearHasBit(_impl_._has_bits_[2], 0x00000008U);
  }

  _impl_.yolo_detection_output_param_ = reinterpret_cast<::caffe::YoloDetectionOutputParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.yolo_detection_output_param)
}

// optional .caffe.Yolov3DetectionOutputParameter yolov3_detection_output_param = 603;
inline bool LayerParameter::has_yolov3_detection_output_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[2], 0x00000010U);
  PROTOBUF_ASSUME(!value || _impl_.yolov3_detection_output_param_ != nullptr);
  return value;
}
inline void LayerParameter::clear_yolov3_detection_output_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.yolov3_detection_output_param_ != nullptr) _impl_.yolov3_detection_output_param_->Clear();
  ClearHasBit(_impl_._has_bits_[2], 0x00000010U);
}
inline const ::caffe::Yolov3DetectionOutputParameter& LayerParameter::_internal_yolov3_detection_output_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::Yolov3DetectionOutputParameter* p = _impl_.yolov3_detection_output_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::Yolov3DetectionOutputParameter>(&::caffe::Yolov3DetectionOutputParameter_globals_);
}
inline const ::caffe::Yolov3DetectionOutputParameter& LayerParameter::yolov3_detection_output_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.yolov3_detection_output_param)
  return _internal_yolov3_detection_output_param();
}
inline void LayerParameter::unsafe_arena_set_allocated_yolov3_detection_output_param(
    ::caffe::Yolov3DetectionOutputParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.yolov3_detection_output_param_);
  }
  _impl_.yolov3_detection_output_param_ = reinterpret_cast<::caffe::Yolov3DetectionOutputParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[2], 0x00000010U);
  } else {
    ClearHasBit(_impl_._has_bits_[2], 0x00000010U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.LayerParameter.yolov3_detection_output_param)
}
inline ::caffe::Yolov3DetectionOutputParameter* PROTOBUF_NULLABLE LayerParameter::release_yolov3_detection_output_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[2], 0x00000010U);
  ::caffe::Yolov3DetectionOutputParameter* released = _impl_.yolov3_detection_output_param_;
  _impl_.yolov3_detection_output_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::Yolov3DetectionOutputParameter* PROTOBUF_NULLABLE LayerParameter::unsafe_arena_release_yolov3_detection_output_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.yolov3_detection_output_param)

  ClearHasBit(_impl_._has_bits_[2], 0x00000010U);
  ::caffe::Yolov3DetectionOutputParameter* temp = _impl_.yolov3_detection_output_param_;
  _impl_.yolov3_detection_output_param_ = nullptr;
  return temp;
}
inline ::caffe::Yolov3DetectionOutputParameter* PROTOBUF_NONNULL LayerParameter::_internal_mutable_yolov3_detection_output_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.yolov3_detection_output_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::Yolov3DetectionOutputParameter>(GetArena());
    _impl_.yolov3_detection_output_param_ = reinterpret_cast<::caffe::Yolov3DetectionOutputParameter*>(p);
  }
  return _impl_.yolov3_detection_output_param_;
}
inline ::caffe::Yolov3DetectionOutputParameter* PROTOBUF_NONNULL LayerParameter::mutable_yolov3_detection_output_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[2], 0x00000010U);
  ::caffe::Yolov3DetectionOutputParameter* _msg = _internal_mutable_yolov3_detection_output_param();
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.yolov3_detection_output_param)
  return _msg;
}
inline void LayerParameter::set_allocated_yolov3_detection_output_param(::caffe::Yolov3DetectionOutputParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.yolov3_detection_output_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[2], 0x00000010U);
  } else {
    ClearHasBit(_impl_._has_bits_[2], 0x00000010U);
  }

  _impl_.yolov3_detection_output_param_ = reinterpret_cast<::caffe::Yolov3DetectionOutputParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.yolov3_detection_output_param)
}

// optional .caffe.DropoutParameter dropout_param = 108;
inline bool LayerParameter::has_dropout_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00080000U);
  PROTOBUF_ASSUME(!value || _impl_.dropout_param_ != nullptr);
  return value;
}
inline void LayerParameter::clear_dropout_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.dropout_param_ != nullptr) _impl_.dropout_param_->Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00080000U);
}
inline const ::caffe::DropoutParameter& LayerParameter::_internal_dropout_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::DropoutParameter* p = _impl_.dropout_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::DropoutParameter>(&::caffe::DropoutParameter_globals_);
}
inline const ::caffe::DropoutParameter& LayerParameter::dropout_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.dropout_param)
  return _internal_dropout_param();
}
inline void LayerParameter::unsafe_arena_set_allocated_dropout_param(
    ::caffe::DropoutParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.dropout_param_);
  }
  _impl_.dropout_param_ = reinterpret_cast<::caffe::DropoutParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00080000U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00080000U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.LayerParameter.dropout_param)
}
inline ::caffe::DropoutParameter* PROTOBUF_NULLABLE LayerParameter::release_dropout_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[0], 0x00080000U);
  ::caffe::DropoutParameter* released = _impl_.dropout_param_;
  _impl_.dropout_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::DropoutParameter* PROTOBUF_NULLABLE LayerParameter::unsafe_arena_release_dropout_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.dropout_param)

  ClearHasBit(_impl_._has_bits_[0], 0x00080000U);
  ::caffe::DropoutParameter* temp = _impl_.dropout_param_;
  _impl_.dropout_param_ = nullptr;
  return temp;
}
inline ::caffe::DropoutParameter* PROTOBUF_NONNULL LayerParameter::_internal_mutable_dropout_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.dropout_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::DropoutParameter>(GetArena());
    _impl_.dropout_param_ = reinterpret_cast<::caffe::DropoutParameter*>(p);
  }
  return _impl_.dropout_param_;
}
inline ::caffe::DropoutParameter* PROTOBUF_NONNULL LayerParameter::mutable_dropout_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00080000U);
  ::caffe::DropoutParameter* _msg = _internal_mutable_dropout_param();
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.dropout_param)
  return _msg;
}
inline void LayerParameter::set_allocated_dropout_param(::caffe::DropoutParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.dropout_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[0], 0x00080000U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00080000U);
  }

  _impl_.dropout_param_ = reinterpret_cast<::caffe::DropoutParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.dropout_param)
}

// optional .caffe.DummyDataParameter dummy_data_param = 109;
inline bool LayerParameter::has_dummy_data_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x08000000U);
  PROTOBUF_ASSUME(!value || _impl_.dummy_data_param_ != nullptr);
  return value;
}
inline void LayerParameter::clear_dummy_data_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.dummy_data_param_ != nullptr) _impl_.dummy_data_param_->Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x08000000U);
}
inline const ::caffe::DummyDataParameter& LayerParameter::_internal_dummy_data_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::DummyDataParameter* p = _impl_.dummy_data_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::DummyDataParameter>(&::caffe::DummyDataParameter_globals_);
}
inline const ::caffe::DummyDataParameter& LayerParameter::dummy_data_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.dummy_data_param)
  return _internal_dummy_data_param();
}
inline void LayerParameter::unsafe_arena_set_allocated_dummy_data_param(
    ::caffe::DummyDataParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.dummy_data_param_);
  }
  _impl_.dummy_data_param_ = reinterpret_cast<::caffe::DummyDataParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x08000000U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x08000000U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.LayerParameter.dummy_data_param)
}
inline ::caffe::DummyDataParameter* PROTOBUF_NULLABLE LayerParameter::release_dummy_data_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[0], 0x08000000U);
  ::caffe::DummyDataParameter* released = _impl_.dummy_data_param_;
  _impl_.dummy_data_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::DummyDataParameter* PROTOBUF_NULLABLE LayerParameter::unsafe_arena_release_dummy_data_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.dummy_data_param)

  ClearHasBit(_impl_._has_bits_[0], 0x08000000U);
  ::caffe::DummyDataParameter* temp = _impl_.dummy_data_param_;
  _impl_.dummy_data_param_ = nullptr;
  return temp;
}
inline ::caffe::DummyDataParameter* PROTOBUF_NONNULL LayerParameter::_internal_mutable_dummy_data_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.dummy_data_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::DummyDataParameter>(GetArena());
    _impl_.dummy_data_param_ = reinterpret_cast<::caffe::DummyDataParameter*>(p);
  }
  return _impl_.dummy_data_param_;
}
inline ::caffe::DummyDataParameter* PROTOBUF_NONNULL LayerParameter::mutable_dummy_data_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x08000000U);
  ::caffe::DummyDataParameter* _msg = _internal_mutable_dummy_data_param();
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.dummy_data_param)
  return _msg;
}
inline void LayerParameter::set_allocated_dummy_data_param(::caffe::DummyDataParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.dummy_data_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[0], 0x08000000U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x08000000U);
  }

  _impl_.dummy_data_param_ = reinterpret_cast<::caffe::DummyDataParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.dummy_data_param)
}

// optional .caffe.EltwiseParameter eltwise_param = 110;
inline bool LayerParameter::has_eltwise_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00100000U);
  PROTOBUF_ASSUME(!value || _impl_.eltwise_param_ != nullptr);
  return value;
}
inline void LayerParameter::clear_eltwise_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.eltwise_param_ != nullptr) _impl_.eltwise_param_->Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00100000U);
}
inline const ::caffe::EltwiseParameter& LayerParameter::_internal_eltwise_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::EltwiseParameter* p = _impl_.eltwise_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::EltwiseParameter>(&::caffe::EltwiseParameter_globals_);
}
inline const ::caffe::EltwiseParameter& LayerParameter::eltwise_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.eltwise_param)
  return _internal_eltwise_param();
}
inline void LayerParameter::unsafe_arena_set_allocated_eltwise_param(
    ::caffe::EltwiseParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.eltwise_param_);
  }
  _impl_.eltwise_param_ = reinterpret_cast<::caffe::EltwiseParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00100000U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00100000U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.LayerParameter.eltwise_param)
}
inline ::caffe::EltwiseParameter* PROTOBUF_NULLABLE LayerParameter::release_eltwise_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[0], 0x00100000U);
  ::caffe::EltwiseParameter* released = _impl_.eltwise_param_;
  _impl_.eltwise_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::EltwiseParameter* PROTOBUF_NULLABLE LayerParameter::unsafe_arena_release_eltwise_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.eltwise_param)

  ClearHasBit(_impl_._has_bits_[0], 0x00100000U);
  ::caffe::EltwiseParameter* temp = _impl_.eltwise_param_;
  _impl_.eltwise_param_ = nullptr;
  return temp;
}
inline ::caffe::EltwiseParameter* PROTOBUF_NONNULL LayerParameter::_internal_mutable_eltwise_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.eltwise_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::EltwiseParameter>(GetArena());
    _impl_.eltwise_param_ = reinterpret_cast<::caffe::EltwiseParameter*>(p);
  }
  return _impl_.eltwise_param_;
}
inline ::caffe::EltwiseParameter* PROTOBUF_NONNULL LayerParameter::mutable_eltwise_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00100000U);
  ::caffe::EltwiseParameter* _msg = _internal_mutable_eltwise_param();
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.eltwise_param)
  return _msg;
}
inline void LayerParameter::set_allocated_eltwise_param(::caffe::EltwiseParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.eltwise_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[0], 0x00100000U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00100000U);
  }

  _impl_.eltwise_param_ = reinterpret_cast<::caffe::EltwiseParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.eltwise_param)
}

// optional .caffe.ELUParameter elu_param = 140;
inline bool LayerParameter::has_elu_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[1], 0x00100000U);
  PROTOBUF_ASSUME(!value || _impl_.elu_param_ != nullptr);
  return value;
}
inline void LayerParameter::clear_elu_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.elu_param_ != nullptr) _impl_.elu_param_->Clear();
  ClearHasBit(_impl_._has_bits_[1], 0x00100000U);
}
inline const ::caffe::ELUParameter& LayerParameter::_internal_elu_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::ELUParameter* p = _impl_.elu_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::ELUParameter>(&::caffe::ELUParameter_globals_);
}
inline const ::caffe::ELUParameter& LayerParameter::elu_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.elu_param)
  return _internal_elu_param();
}
inline void LayerParameter::unsafe_arena_set_allocated_elu_param(
    ::caffe::ELUParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.elu_param_);
  }
  _impl_.elu_param_ = reinterpret_cast<::caffe::ELUParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[1], 0x00100000U);
  } else {
    ClearHasBit(_impl_._has_bits_[1], 0x00100000U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.LayerParameter.elu_param)
}
inline ::caffe::ELUParameter* PROTOBUF_NULLABLE LayerParameter::release_elu_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[1], 0x00100000U);
  ::caffe::ELUParameter* released = _impl_.elu_param_;
  _impl_.elu_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::ELUParameter* PROTOBUF_NULLABLE LayerParameter::unsafe_arena_release_elu_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.elu_param)

  ClearHasBit(_impl_._has_bits_[1], 0x00100000U);
  ::caffe::ELUParameter* temp = _impl_.elu_param_;
  _impl_.elu_param_ = nullptr;
  return temp;
}
inline ::caffe::ELUParameter* PROTOBUF_NONNULL LayerParameter::_internal_mutable_elu_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.elu_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::ELUParameter>(GetArena());
    _impl_.elu_param_ = reinterpret_cast<::caffe::ELUParameter*>(p);
  }
  return _impl_.elu_param_;
}
inline ::caffe::ELUParameter* PROTOBUF_NONNULL LayerParameter::mutable_elu_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[1], 0x00100000U);
  ::caffe::ELUParameter* _msg = _internal_mutable_elu_param();
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.elu_param)
  return _msg;
}
inline void LayerParameter::set_allocated_elu_param(::caffe::ELUParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.elu_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[1], 0x00100000U);
  } else {
    ClearHasBit(_impl_._has_bits_[1], 0x00100000U);
  }

  _impl_.elu_param_ = reinterpret_cast<::caffe::ELUParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.elu_param)
}

// optional .caffe.EmbedParameter embed_param = 137;
inline bool LayerParameter::has_embed_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[1], 0x00020000U);
  PROTOBUF_ASSUME(!value || _impl_.embed_param_ != nullptr);
  return value;
}
inline void LayerParameter::clear_embed_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.embed_param_ != nullptr) _impl_.embed_param_->Clear();
  ClearHasBit(_impl_._has_bits_[1], 0x00020000U);
}
inline const ::caffe::EmbedParameter& LayerParameter::_internal_embed_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::EmbedParameter* p = _impl_.embed_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::EmbedParameter>(&::caffe::EmbedParameter_globals_);
}
inline const ::caffe::EmbedParameter& LayerParameter::embed_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.embed_param)
  return _internal_embed_param();
}
inline void LayerParameter::unsafe_arena_set_allocated_embed_param(
    ::caffe::EmbedParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.embed_param_);
  }
  _impl_.embed_param_ = reinterpret_cast<::caffe::EmbedParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[1], 0x00020000U);
  } else {
    ClearHasBit(_impl_._has_bits_[1], 0x00020000U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.LayerParameter.embed_param)
}
inline ::caffe::EmbedParameter* PROTOBUF_NULLABLE LayerParameter::release_embed_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[1], 0x00020000U);
  ::caffe::EmbedParameter* released = _impl_.embed_param_;
  _impl_.embed_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::EmbedParameter* PROTOBUF_NULLABLE LayerParameter::unsafe_arena_release_embed_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.embed_param)

  ClearHasBit(_impl_._has_bits_[1], 0x00020000U);
  ::caffe::EmbedParameter* temp = _impl_.embed_param_;
  _impl_.embed_param_ = nullptr;
  return temp;
}
inline ::caffe::EmbedParameter* PROTOBUF_NONNULL LayerParameter::_internal_mutable_embed_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.embed_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::EmbedParameter>(GetArena());
    _impl_.embed_param_ = reinterpret_cast<::caffe::EmbedParameter*>(p);
  }
  return _impl_.embed_param_;
}
inline ::caffe::EmbedParameter* PROTOBUF_NONNULL LayerParameter::mutable_embed_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[1], 0x00020000U);
  ::caffe::EmbedParameter* _msg = _internal_mutable_embed_param();
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.embed_param)
  return _msg;
}
inline void LayerParameter::set_allocated_embed_param(::caffe::EmbedParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.embed_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[1], 0x00020000U);
  } else {
    ClearHasBit(_impl_._has_bits_[1], 0x00020000U);
  }

  _impl_.embed_param_ = reinterpret_cast<::caffe::EmbedParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.embed_param)
}

// optional .caffe.ExpParameter exp_param = 111;
inline bool LayerParameter::has_exp_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00200000U);
  PROTOBUF_ASSUME(!value || _impl_.exp_param_ != nullptr);
  return value;
}
inline void LayerParameter::clear_exp_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.exp_param_ != nullptr) _impl_.exp_param_->Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00200000U);
}
inline const ::caffe::ExpParameter& LayerParameter::_internal_exp_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::ExpParameter* p = _impl_.exp_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::ExpParameter>(&::caffe::ExpParameter_globals_);
}
inline const ::caffe::ExpParameter& LayerParameter::exp_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.exp_param)
  return _internal_exp_param();
}
inline void LayerParameter::unsafe_arena_set_allocated_exp_param(
    ::caffe::ExpParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.exp_param_);
  }
  _impl_.exp_param_ = reinterpret_cast<::caffe::ExpParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00200000U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00200000U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.LayerParameter.exp_param)
}
inline ::caffe::ExpParameter* PROTOBUF_NULLABLE LayerParameter::release_exp_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[0], 0x00200000U);
  ::caffe::ExpParameter* released = _impl_.exp_param_;
  _impl_.exp_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::ExpParameter* PROTOBUF_NULLABLE LayerParameter::unsafe_arena_release_exp_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.exp_param)

  ClearHasBit(_impl_._has_bits_[0], 0x00200000U);
  ::caffe::ExpParameter* temp = _impl_.exp_param_;
  _impl_.exp_param_ = nullptr;
  return temp;
}
inline ::caffe::ExpParameter* PROTOBUF_NONNULL LayerParameter::_internal_mutable_exp_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.exp_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::ExpParameter>(GetArena());
    _impl_.exp_param_ = reinterpret_cast<::caffe::ExpParameter*>(p);
  }
  return _impl_.exp_param_;
}
inline ::caffe::ExpParameter* PROTOBUF_NONNULL LayerParameter::mutable_exp_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00200000U);
  ::caffe::ExpParameter* _msg = _internal_mutable_exp_param();
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.exp_param)
  return _msg;
}
inline void LayerParameter::set_allocated_exp_param(::caffe::ExpParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.exp_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[0], 0x00200000U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00200000U);
  }

  _impl_.exp_param_ = reinterpret_cast<::caffe::ExpParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.exp_param)
}

// optional .caffe.FlattenParameter flatten_param = 135;
inline bool LayerParameter::has_flatten_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[1], 0x00008000U);
  PROTOBUF_ASSUME(!value || _impl_.flatten_param_ != nullptr);
  return value;
}
inline void LayerParameter::clear_flatten_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.flatten_param_ != nullptr) _impl_.flatten_param_->Clear();
  ClearHasBit(_impl_._has_bits_[1], 0x00008000U);
}
inline const ::caffe::FlattenParameter& LayerParameter::_internal_flatten_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::FlattenParameter* p = _impl_.flatten_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::FlattenParameter>(&::caffe::FlattenParameter_globals_);
}
inline const ::caffe::FlattenParameter& LayerParameter::flatten_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.flatten_param)
  return _internal_flatten_param();
}
inline void LayerParameter::unsafe_arena_set_allocated_flatten_param(
    ::caffe::FlattenParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.flatten_param_);
  }
  _impl_.flatten_param_ = reinterpret_cast<::caffe::FlattenParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[1], 0x00008000U);
  } else {
    ClearHasBit(_impl_._has_bits_[1], 0x00008000U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.LayerParameter.flatten_param)
}
inline ::caffe::FlattenParameter* PROTOBUF_NULLABLE LayerParameter::release_flatten_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[1], 0x00008000U);
  ::caffe::FlattenParameter* released = _impl_.flatten_param_;
  _impl_.flatten_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::FlattenParameter* PROTOBUF_NULLABLE LayerParameter::unsafe_arena_release_flatten_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.flatten_param)

  ClearHasBit(_impl_._has_bits_[1], 0x00008000U);
  ::caffe::FlattenParameter* temp = _impl_.flatten_param_;
  _impl_.flatten_param_ = nullptr;
  return temp;
}
inline ::caffe::FlattenParameter* PROTOBUF_NONNULL LayerParameter::_internal_mutable_flatten_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.flatten_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::FlattenParameter>(GetArena());
    _impl_.flatten_param_ = reinterpret_cast<::caffe::FlattenParameter*>(p);
  }
  return _impl_.flatten_param_;
}
inline ::caffe::FlattenParameter* PROTOBUF_NONNULL LayerParameter::mutable_flatten_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[1], 0x00008000U);
  ::caffe::FlattenParameter* _msg = _internal_mutable_flatten_param();
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.flatten_param)
  return _msg;
}
inline void LayerParameter::set_allocated_flatten_param(::caffe::FlattenParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.flatten_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[1], 0x00008000U);
  } else {
    ClearHasBit(_impl_._has_bits_[1], 0x00008000U);
  }

  _impl_.flatten_param_ = reinterpret_cast<::caffe::FlattenParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.flatten_param)
}

// optional .caffe.HDF5DataParameter hdf5_data_param = 112;
inline bool LayerParameter::has_hdf5_data_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00400000U);
  PROTOBUF_ASSUME(!value || _impl_.hdf5_data_param_ != nullptr);
  return value;
}
inline void LayerParameter::clear_hdf5_data_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.hdf5_data_param_ != nullptr) _impl_.hdf5_data_param_->Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00400000U);
}
inline const ::caffe::HDF5DataParameter& LayerParameter::_internal_hdf5_data_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::HDF5DataParameter* p = _impl_.hdf5_data_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::HDF5DataParameter>(&::caffe::HDF5DataParameter_globals_);
}
inline const ::caffe::HDF5DataParameter& LayerParameter::hdf5_data_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.hdf5_data_param)
  return _internal_hdf5_data_param();
}
inline void LayerParameter::unsafe_arena_set_allocated_hdf5_data_param(
    ::caffe::HDF5DataParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.hdf5_data_param_);
  }
  _impl_.hdf5_data_param_ = reinterpret_cast<::caffe::HDF5DataParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00400000U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00400000U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.LayerParameter.hdf5_data_param)
}
inline ::caffe::HDF5DataParameter* PROTOBUF_NULLABLE LayerParameter::release_hdf5_data_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[0], 0x00400000U);
  ::caffe::HDF5DataParameter* released = _impl_.hdf5_data_param_;
  _impl_.hdf5_data_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::HDF5DataParameter* PROTOBUF_NULLABLE LayerParameter::unsafe_arena_release_hdf5_data_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.hdf5_data_param)

  ClearHasBit(_impl_._has_bits_[0], 0x00400000U);
  ::caffe::HDF5DataParameter* temp = _impl_.hdf5_data_param_;
  _impl_.hdf5_data_param_ = nullptr;
  return temp;
}
inline ::caffe::HDF5DataParameter* PROTOBUF_NONNULL LayerParameter::_internal_mutable_hdf5_data_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.hdf5_data_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::HDF5DataParameter>(GetArena());
    _impl_.hdf5_data_param_ = reinterpret_cast<::caffe::HDF5DataParameter*>(p);
  }
  return _impl_.hdf5_data_param_;
}
inline ::caffe::HDF5DataParameter* PROTOBUF_NONNULL LayerParameter::mutable_hdf5_data_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00400000U);
  ::caffe::HDF5DataParameter* _msg = _internal_mutable_hdf5_data_param();
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.hdf5_data_param)
  return _msg;
}
inline void LayerParameter::set_allocated_hdf5_data_param(::caffe::HDF5DataParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.hdf5_data_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[0], 0x00400000U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00400000U);
  }

  _impl_.hdf5_data_param_ = reinterpret_cast<::caffe::HDF5DataParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.hdf5_data_param)
}

// optional .caffe.HDF5OutputParameter hdf5_output_param = 113;
inline bool LayerParameter::has_hdf5_output_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00800000U);
  PROTOBUF_ASSUME(!value || _impl_.hdf5_output_param_ != nullptr);
  return value;
}
inline void LayerParameter::clear_hdf5_output_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.hdf5_output_param_ != nullptr) _impl_.hdf5_output_param_->Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00800000U);
}
inline const ::caffe::HDF5OutputParameter& LayerParameter::_internal_hdf5_output_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::HDF5OutputParameter* p = _impl_.hdf5_output_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::HDF5OutputParameter>(&::caffe::HDF5OutputParameter_globals_);
}
inline const ::caffe::HDF5OutputParameter& LayerParameter::hdf5_output_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.hdf5_output_param)
  return _internal_hdf5_output_param();
}
inline void LayerParameter::unsafe_arena_set_allocated_hdf5_output_param(
    ::caffe::HDF5OutputParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.hdf5_output_param_);
  }
  _impl_.hdf5_output_param_ = reinterpret_cast<::caffe::HDF5OutputParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00800000U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00800000U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.LayerParameter.hdf5_output_param)
}
inline ::caffe::HDF5OutputParameter* PROTOBUF_NULLABLE LayerParameter::release_hdf5_output_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[0], 0x00800000U);
  ::caffe::HDF5OutputParameter* released = _impl_.hdf5_output_param_;
  _impl_.hdf5_output_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::HDF5OutputParameter* PROTOBUF_NULLABLE LayerParameter::unsafe_arena_release_hdf5_output_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.hdf5_output_param)

  ClearHasBit(_impl_._has_bits_[0], 0x00800000U);
  ::caffe::HDF5OutputParameter* temp = _impl_.hdf5_output_param_;
  _impl_.hdf5_output_param_ = nullptr;
  return temp;
}
inline ::caffe::HDF5OutputParameter* PROTOBUF_NONNULL LayerParameter::_internal_mutable_hdf5_output_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.hdf5_output_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::HDF5OutputParameter>(GetArena());
    _impl_.hdf5_output_param_ = reinterpret_cast<::caffe::HDF5OutputParameter*>(p);
  }
  return _impl_.hdf5_output_param_;
}
inline ::caffe::HDF5OutputParameter* PROTOBUF_NONNULL LayerParameter::mutable_hdf5_output_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00800000U);
  ::caffe::HDF5OutputParameter* _msg = _internal_mutable_hdf5_output_param();
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.hdf5_output_param)
  return _msg;
}
inline void LayerParameter::set_allocated_hdf5_output_param(::caffe::HDF5OutputParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.hdf5_output_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[0], 0x00800000U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00800000U);
  }

  _impl_.hdf5_output_param_ = reinterpret_cast<::caffe::HDF5OutputParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.hdf5_output_param)
}

// optional .caffe.HingeLossParameter hinge_loss_param = 114;
inline bool LayerParameter::has_hinge_loss_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x01000000U);
  PROTOBUF_ASSUME(!value || _impl_.hinge_loss_param_ != nullptr);
  return value;
}
inline void LayerParameter::clear_hinge_loss_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.hinge_loss_param_ != nullptr) _impl_.hinge_loss_param_->Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x01000000U);
}
inline const ::caffe::HingeLossParameter& LayerParameter::_internal_hinge_loss_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::HingeLossParameter* p = _impl_.hinge_loss_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::HingeLossParameter>(&::caffe::HingeLossParameter_globals_);
}
inline const ::caffe::HingeLossParameter& LayerParameter::hinge_loss_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.hinge_loss_param)
  return _internal_hinge_loss_param();
}
inline void LayerParameter::unsafe_arena_set_allocated_hinge_loss_param(
    ::caffe::HingeLossParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.hinge_loss_param_);
  }
  _impl_.hinge_loss_param_ = reinterpret_cast<::caffe::HingeLossParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x01000000U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x01000000U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.LayerParameter.hinge_loss_param)
}
inline ::caffe::HingeLossParameter* PROTOBUF_NULLABLE LayerParameter::release_hinge_loss_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[0], 0x01000000U);
  ::caffe::HingeLossParameter* released = _impl_.hinge_loss_param_;
  _impl_.hinge_loss_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::HingeLossParameter* PROTOBUF_NULLABLE LayerParameter::unsafe_arena_release_hinge_loss_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.hinge_loss_param)

  ClearHasBit(_impl_._has_bits_[0], 0x01000000U);
  ::caffe::HingeLossParameter* temp = _impl_.hinge_loss_param_;
  _impl_.hinge_loss_param_ = nullptr;
  return temp;
}
inline ::caffe::HingeLossParameter* PROTOBUF_NONNULL LayerParameter::_internal_mutable_hinge_loss_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.hinge_loss_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::HingeLossParameter>(GetArena());
    _impl_.hinge_loss_param_ = reinterpret_cast<::caffe::HingeLossParameter*>(p);
  }
  return _impl_.hinge_loss_param_;
}
inline ::caffe::HingeLossParameter* PROTOBUF_NONNULL LayerParameter::mutable_hinge_loss_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x01000000U);
  ::caffe::HingeLossParameter* _msg = _internal_mutable_hinge_loss_param();
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.hinge_loss_param)
  return _msg;
}
inline void LayerParameter::set_allocated_hinge_loss_param(::caffe::HingeLossParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.hinge_loss_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[0], 0x01000000U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x01000000U);
  }

  _impl_.hinge_loss_param_ = reinterpret_cast<::caffe::HingeLossParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.hinge_loss_param)
}

// optional .caffe.ImageDataParameter image_data_param = 115;
inline bool LayerParameter::has_image_data_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x02000000U);
  PROTOBUF_ASSUME(!value || _impl_.image_data_param_ != nullptr);
  return value;
}
inline void LayerParameter::clear_image_data_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.image_data_param_ != nullptr) _impl_.image_data_param_->Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x02000000U);
}
inline const ::caffe::ImageDataParameter& LayerParameter::_internal_image_data_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::ImageDataParameter* p = _impl_.image_data_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::ImageDataParameter>(&::caffe::ImageDataParameter_globals_);
}
inline const ::caffe::ImageDataParameter& LayerParameter::image_data_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.image_data_param)
  return _internal_image_data_param();
}
inline void LayerParameter::unsafe_arena_set_allocated_image_data_param(
    ::caffe::ImageDataParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.image_data_param_);
  }
  _impl_.image_data_param_ = reinterpret_cast<::caffe::ImageDataParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x02000000U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x02000000U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.LayerParameter.image_data_param)
}
inline ::caffe::ImageDataParameter* PROTOBUF_NULLABLE LayerParameter::release_image_data_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[0], 0x02000000U);
  ::caffe::ImageDataParameter* released = _impl_.image_data_param_;
  _impl_.image_data_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::ImageDataParameter* PROTOBUF_NULLABLE LayerParameter::unsafe_arena_release_image_data_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.image_data_param)

  ClearHasBit(_impl_._has_bits_[0], 0x02000000U);
  ::caffe::ImageDataParameter* temp = _impl_.image_data_param_;
  _impl_.image_data_param_ = nullptr;
  return temp;
}
inline ::caffe::ImageDataParameter* PROTOBUF_NONNULL LayerParameter::_internal_mutable_image_data_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.image_data_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::ImageDataParameter>(GetArena());
    _impl_.image_data_param_ = reinterpret_cast<::caffe::ImageDataParameter*>(p);
  }
  return _impl_.image_data_param_;
}
inline ::caffe::ImageDataParameter* PROTOBUF_NONNULL LayerParameter::mutable_image_data_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x02000000U);
  ::caffe::ImageDataParameter* _msg = _internal_mutable_image_data_param();
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.image_data_param)
  return _msg;
}
inline void LayerParameter::set_allocated_image_data_param(::caffe::ImageDataParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.image_data_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[0], 0x02000000U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x02000000U);
  }

  _impl_.image_data_param_ = reinterpret_cast<::caffe::ImageDataParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.image_data_param)
}

// optional .caffe.InfogainLossParameter infogain_loss_param = 116;
inline bool LayerParameter::has_infogain_loss_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x10000000U);
  PROTOBUF_ASSUME(!value || _impl_.infogain_loss_param_ != nullptr);
  return value;
}
inline void LayerParameter::clear_infogain_loss_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.infogain_loss_param_ != nullptr) _impl_.infogain_loss_param_->Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x10000000U);
}
inline const ::caffe::InfogainLossParameter& LayerParameter::_internal_infogain_loss_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::InfogainLossParameter* p = _impl_.infogain_loss_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::InfogainLossParameter>(&::caffe::InfogainLossParameter_globals_);
}
inline const ::caffe::InfogainLossParameter& LayerParameter::infogain_loss_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.infogain_loss_param)
  return _internal_infogain_loss_param();
}
inline void LayerParameter::unsafe_arena_set_allocated_infogain_loss_param(
    ::caffe::InfogainLossParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.infogain_loss_param_);
  }
  _impl_.infogain_loss_param_ = reinterpret_cast<::caffe::InfogainLossParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x10000000U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x10000000U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.LayerParameter.infogain_loss_param)
}
inline ::caffe::InfogainLossParameter* PROTOBUF_NULLABLE LayerParameter::release_infogain_loss_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[0], 0x10000000U);
  ::caffe::InfogainLossParameter* released = _impl_.infogain_loss_param_;
  _impl_.infogain_loss_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::InfogainLossParameter* PROTOBUF_NULLABLE LayerParameter::unsafe_arena_release_infogain_loss_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.infogain_loss_param)

  ClearHasBit(_impl_._has_bits_[0], 0x10000000U);
  ::caffe::InfogainLossParameter* temp = _impl_.infogain_loss_param_;
  _impl_.infogain_loss_param_ = nullptr;
  return temp;
}
inline ::caffe::InfogainLossParameter* PROTOBUF_NONNULL LayerParameter::_internal_mutable_infogain_loss_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.infogain_loss_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::InfogainLossParameter>(GetArena());
    _impl_.infogain_loss_param_ = reinterpret_cast<::caffe::InfogainLossParameter*>(p);
  }
  return _impl_.infogain_loss_param_;
}
inline ::caffe::InfogainLossParameter* PROTOBUF_NONNULL LayerParameter::mutable_infogain_loss_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x10000000U);
  ::caffe::InfogainLossParameter* _msg = _internal_mutable_infogain_loss_param();
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.infogain_loss_param)
  return _msg;
}
inline void LayerParameter::set_allocated_infogain_loss_param(::caffe::InfogainLossParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.infogain_loss_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[0], 0x10000000U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x10000000U);
  }

  _impl_.infogain_loss_param_ = reinterpret_cast<::caffe::InfogainLossParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.infogain_loss_param)
}

// optional .caffe.InnerProductParameter inner_product_param = 117;
inline bool LayerParameter::has_inner_product_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x20000000U);
  PROTOBUF_ASSUME(!value || _impl_.inner_product_param_ != nullptr);
  return value;
}
inline void LayerParameter::clear_inner_product_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.inner_product_param_ != nullptr) _impl_.inner_product_param_->Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x20000000U);
}
inline const ::caffe::InnerProductParameter& LayerParameter::_internal_inner_product_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::InnerProductParameter* p = _impl_.inner_product_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::InnerProductParameter>(&::caffe::InnerProductParameter_globals_);
}
inline const ::caffe::InnerProductParameter& LayerParameter::inner_product_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.inner_product_param)
  return _internal_inner_product_param();
}
inline void LayerParameter::unsafe_arena_set_allocated_inner_product_param(
    ::caffe::InnerProductParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.inner_product_param_);
  }
  _impl_.inner_product_param_ = reinterpret_cast<::caffe::InnerProductParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x20000000U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x20000000U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.LayerParameter.inner_product_param)
}
inline ::caffe::InnerProductParameter* PROTOBUF_NULLABLE LayerParameter::release_inner_product_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[0], 0x20000000U);
  ::caffe::InnerProductParameter* released = _impl_.inner_product_param_;
  _impl_.inner_product_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::InnerProductParameter* PROTOBUF_NULLABLE LayerParameter::unsafe_arena_release_inner_product_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.inner_product_param)

  ClearHasBit(_impl_._has_bits_[0], 0x20000000U);
  ::caffe::InnerProductParameter* temp = _impl_.inner_product_param_;
  _impl_.inner_product_param_ = nullptr;
  return temp;
}
inline ::caffe::InnerProductParameter* PROTOBUF_NONNULL LayerParameter::_internal_mutable_inner_product_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.inner_product_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::InnerProductParameter>(GetArena());
    _impl_.inner_product_param_ = reinterpret_cast<::caffe::InnerProductParameter*>(p);
  }
  return _impl_.inner_product_param_;
}
inline ::caffe::InnerProductParameter* PROTOBUF_NONNULL LayerParameter::mutable_inner_product_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x20000000U);
  ::caffe::InnerProductParameter* _msg = _internal_mutable_inner_product_param();
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.inner_product_param)
  return _msg;
}
inline void LayerParameter::set_allocated_inner_product_param(::caffe::InnerProductParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.inner_product_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[0], 0x20000000U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x20000000U);
  }

  _impl_.inner_product_param_ = reinterpret_cast<::caffe::InnerProductParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.inner_product_param)
}

// optional .caffe.InputParameter input_param = 143;
inline bool LayerParameter::has_input_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[1], 0x00800000U);
  PROTOBUF_ASSUME(!value || _impl_.input_param_ != nullptr);
  return value;
}
inline void LayerParameter::clear_input_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.input_param_ != nullptr) _impl_.input_param_->Clear();
  ClearHasBit(_impl_._has_bits_[1], 0x00800000U);
}
inline const ::caffe::InputParameter& LayerParameter::_internal_input_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::InputParameter* p = _impl_.input_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::InputParameter>(&::caffe::InputParameter_globals_);
}
inline const ::caffe::InputParameter& LayerParameter::input_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.input_param)
  return _internal_input_param();
}
inline void LayerParameter::unsafe_arena_set_allocated_input_param(
    ::caffe::InputParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.input_param_);
  }
  _impl_.input_param_ = reinterpret_cast<::caffe::InputParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[1], 0x00800000U);
  } else {
    ClearHasBit(_impl_._has_bits_[1], 0x00800000U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.LayerParameter.input_param)
}
inline ::caffe::InputParameter* PROTOBUF_NULLABLE LayerParameter::release_input_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[1], 0x00800000U);
  ::caffe::InputParameter* released = _impl_.input_param_;
  _impl_.input_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::InputParameter* PROTOBUF_NULLABLE LayerParameter::unsafe_arena_release_input_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.input_param)

  ClearHasBit(_impl_._has_bits_[1], 0x00800000U);
  ::caffe::InputParameter* temp = _impl_.input_param_;
  _impl_.input_param_ = nullptr;
  return temp;
}
inline ::caffe::InputParameter* PROTOBUF_NONNULL LayerParameter::_internal_mutable_input_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.input_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::InputParameter>(GetArena());
    _impl_.input_param_ = reinterpret_cast<::caffe::InputParameter*>(p);
  }
  return _impl_.input_param_;
}
inline ::caffe::InputParameter* PROTOBUF_NONNULL LayerParameter::mutable_input_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[1], 0x00800000U);
  ::caffe::InputParameter* _msg = _internal_mutable_input_param();
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.input_param)
  return _msg;
}
inline void LayerParameter::set_allocated_input_param(::caffe::InputParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.input_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[1], 0x00800000U);
  } else {
    ClearHasBit(_impl_._has_bits_[1], 0x00800000U);
  }

  _impl_.input_param_ = reinterpret_cast<::caffe::InputParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.input_param)
}

// optional .caffe.InterpParameter interp_param = 205;
inline bool LayerParameter::has_interp_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[2], 0x00000002U);
  PROTOBUF_ASSUME(!value || _impl_.interp_param_ != nullptr);
  return value;
}
inline void LayerParameter::clear_interp_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.interp_param_ != nullptr) _impl_.interp_param_->Clear();
  ClearHasBit(_impl_._has_bits_[2], 0x00000002U);
}
inline const ::caffe::InterpParameter& LayerParameter::_internal_interp_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::InterpParameter* p = _impl_.interp_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::InterpParameter>(&::caffe::InterpParameter_globals_);
}
inline const ::caffe::InterpParameter& LayerParameter::interp_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.interp_param)
  return _internal_interp_param();
}
inline void LayerParameter::unsafe_arena_set_allocated_interp_param(
    ::caffe::InterpParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.interp_param_);
  }
  _impl_.interp_param_ = reinterpret_cast<::caffe::InterpParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[2], 0x00000002U);
  } else {
    ClearHasBit(_impl_._has_bits_[2], 0x00000002U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.LayerParameter.interp_param)
}
inline ::caffe::InterpParameter* PROTOBUF_NULLABLE LayerParameter::release_interp_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[2], 0x00000002U);
  ::caffe::InterpParameter* released = _impl_.interp_param_;
  _impl_.interp_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::InterpParameter* PROTOBUF_NULLABLE LayerParameter::unsafe_arena_release_interp_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.interp_param)

  ClearHasBit(_impl_._has_bits_[2], 0x00000002U);
  ::caffe::InterpParameter* temp = _impl_.interp_param_;
  _impl_.interp_param_ = nullptr;
  return temp;
}
inline ::caffe::InterpParameter* PROTOBUF_NONNULL LayerParameter::_internal_mutable_interp_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.interp_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::InterpParameter>(GetArena());
    _impl_.interp_param_ = reinterpret_cast<::caffe::InterpParameter*>(p);
  }
  return _impl_.interp_param_;
}
inline ::caffe::InterpParameter* PROTOBUF_NONNULL LayerParameter::mutable_interp_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[2], 0x00000002U);
  ::caffe::InterpParameter* _msg = _internal_mutable_interp_param();
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.interp_param)
  return _msg;
}
inline void LayerParameter::set_allocated_interp_param(::caffe::InterpParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.interp_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[2], 0x00000002U);
  } else {
    ClearHasBit(_impl_._has_bits_[2], 0x00000002U);
  }

  _impl_.interp_param_ = reinterpret_cast<::caffe::InterpParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.interp_param)
}

// optional .caffe.LogParameter log_param = 134;
inline bool LayerParameter::has_log_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[1], 0x00004000U);
  PROTOBUF_ASSUME(!value || _impl_.log_param_ != nullptr);
  return value;
}
inline void LayerParameter::clear_log_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.log_param_ != nullptr) _impl_.log_param_->Clear();
  ClearHasBit(_impl_._has_bits_[1], 0x00004000U);
}
inline const ::caffe::LogParameter& LayerParameter::_internal_log_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::LogParameter* p = _impl_.log_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::LogParameter>(&::caffe::LogParameter_globals_);
}
inline const ::caffe::LogParameter& LayerParameter::log_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.log_param)
  return _internal_log_param();
}
inline void LayerParameter::unsafe_arena_set_allocated_log_param(
    ::caffe::LogParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.log_param_);
  }
  _impl_.log_param_ = reinterpret_cast<::caffe::LogParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[1], 0x00004000U);
  } else {
    ClearHasBit(_impl_._has_bits_[1], 0x00004000U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.LayerParameter.log_param)
}
inline ::caffe::LogParameter* PROTOBUF_NULLABLE LayerParameter::release_log_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[1], 0x00004000U);
  ::caffe::LogParameter* released = _impl_.log_param_;
  _impl_.log_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::LogParameter* PROTOBUF_NULLABLE LayerParameter::unsafe_arena_release_log_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.log_param)

  ClearHasBit(_impl_._has_bits_[1], 0x00004000U);
  ::caffe::LogParameter* temp = _impl_.log_param_;
  _impl_.log_param_ = nullptr;
  return temp;
}
inline ::caffe::LogParameter* PROTOBUF_NONNULL LayerParameter::_internal_mutable_log_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.log_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::LogParameter>(GetArena());
    _impl_.log_param_ = reinterpret_cast<::caffe::LogParameter*>(p);
  }
  return _impl_.log_param_;
}
inline ::caffe::LogParameter* PROTOBUF_NONNULL LayerParameter::mutable_log_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[1], 0x00004000U);
  ::caffe::LogParameter* _msg = _internal_mutable_log_param();
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.log_param)
  return _msg;
}
inline void LayerParameter::set_allocated_log_param(::caffe::LogParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.log_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[1], 0x00004000U);
  } else {
    ClearHasBit(_impl_._has_bits_[1], 0x00004000U);
  }

  _impl_.log_param_ = reinterpret_cast<::caffe::LogParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.log_param)
}

// optional .caffe.LRNParameter lrn_param = 118;
inline bool LayerParameter::has_lrn_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x40000000U);
  PROTOBUF_ASSUME(!value || _impl_.lrn_param_ != nullptr);
  return value;
}
inline void LayerParameter::clear_lrn_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.lrn_param_ != nullptr) _impl_.lrn_param_->Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x40000000U);
}
inline const ::caffe::LRNParameter& LayerParameter::_internal_lrn_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::LRNParameter* p = _impl_.lrn_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::LRNParameter>(&::caffe::LRNParameter_globals_);
}
inline const ::caffe::LRNParameter& LayerParameter::lrn_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.lrn_param)
  return _internal_lrn_param();
}
inline void LayerParameter::unsafe_arena_set_allocated_lrn_param(
    ::caffe::LRNParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.lrn_param_);
  }
  _impl_.lrn_param_ = reinterpret_cast<::caffe::LRNParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x40000000U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x40000000U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.LayerParameter.lrn_param)
}
inline ::caffe::LRNParameter* PROTOBUF_NULLABLE LayerParameter::release_lrn_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[0], 0x40000000U);
  ::caffe::LRNParameter* released = _impl_.lrn_param_;
  _impl_.lrn_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::LRNParameter* PROTOBUF_NULLABLE LayerParameter::unsafe_arena_release_lrn_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.lrn_param)

  ClearHasBit(_impl_._has_bits_[0], 0x40000000U);
  ::caffe::LRNParameter* temp = _impl_.lrn_param_;
  _impl_.lrn_param_ = nullptr;
  return temp;
}
inline ::caffe::LRNParameter* PROTOBUF_NONNULL LayerParameter::_internal_mutable_lrn_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.lrn_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::LRNParameter>(GetArena());
    _impl_.lrn_param_ = reinterpret_cast<::caffe::LRNParameter*>(p);
  }
  return _impl_.lrn_param_;
}
inline ::caffe::LRNParameter* PROTOBUF_NONNULL LayerParameter::mutable_lrn_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x40000000U);
  ::caffe::LRNParameter* _msg = _internal_mutable_lrn_param();
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.lrn_param)
  return _msg;
}
inline void LayerParameter::set_allocated_lrn_param(::caffe::LRNParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.lrn_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[0], 0x40000000U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x40000000U);
  }

  _impl_.lrn_param_ = reinterpret_cast<::caffe::LRNParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.lrn_param)
}

// optional .caffe.MemoryDataParameter memory_data_param = 119;
inline bool LayerParameter::has_memory_data_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x80000000U);
  PROTOBUF_ASSUME(!value || _impl_.memory_data_param_ != nullptr);
  return value;
}
inline void LayerParameter::clear_memory_data_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.memory_data_param_ != nullptr) _impl_.memory_data_param_->Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x80000000U);
}
inline const ::caffe::MemoryDataParameter& LayerParameter::_internal_memory_data_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::MemoryDataParameter* p = _impl_.memory_data_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::MemoryDataParameter>(&::caffe::MemoryDataParameter_globals_);
}
inline const ::caffe::MemoryDataParameter& LayerParameter::memory_data_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.memory_data_param)
  return _internal_memory_data_param();
}
inline void LayerParameter::unsafe_arena_set_allocated_memory_data_param(
    ::caffe::MemoryDataParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.memory_data_param_);
  }
  _impl_.memory_data_param_ = reinterpret_cast<::caffe::MemoryDataParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x80000000U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x80000000U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.LayerParameter.memory_data_param)
}
inline ::caffe::MemoryDataParameter* PROTOBUF_NULLABLE LayerParameter::release_memory_data_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[0], 0x80000000U);
  ::caffe::MemoryDataParameter* released = _impl_.memory_data_param_;
  _impl_.memory_data_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::MemoryDataParameter* PROTOBUF_NULLABLE LayerParameter::unsafe_arena_release_memory_data_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.memory_data_param)

  ClearHasBit(_impl_._has_bits_[0], 0x80000000U);
  ::caffe::MemoryDataParameter* temp = _impl_.memory_data_param_;
  _impl_.memory_data_param_ = nullptr;
  return temp;
}
inline ::caffe::MemoryDataParameter* PROTOBUF_NONNULL LayerParameter::_internal_mutable_memory_data_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.memory_data_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::MemoryDataParameter>(GetArena());
    _impl_.memory_data_param_ = reinterpret_cast<::caffe::MemoryDataParameter*>(p);
  }
  return _impl_.memory_data_param_;
}
inline ::caffe::MemoryDataParameter* PROTOBUF_NONNULL LayerParameter::mutable_memory_data_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x80000000U);
  ::caffe::MemoryDataParameter* _msg = _internal_mutable_memory_data_param();
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.memory_data_param)
  return _msg;
}
inline void LayerParameter::set_allocated_memory_data_param(::caffe::MemoryDataParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.memory_data_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[0], 0x80000000U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x80000000U);
  }

  _impl_.memory_data_param_ = reinterpret_cast<::caffe::MemoryDataParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.memory_data_param)
}

// optional .caffe.MVNParameter mvn_param = 120;
inline bool LayerParameter::has_mvn_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[1], 0x00000001U);
  PROTOBUF_ASSUME(!value || _impl_.mvn_param_ != nullptr);
  return value;
}
inline void LayerParameter::clear_mvn_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.mvn_param_ != nullptr) _impl_.mvn_param_->Clear();
  ClearHasBit(_impl_._has_bits_[1], 0x00000001U);
}
inline const ::caffe::MVNParameter& LayerParameter::_internal_mvn_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::MVNParameter* p = _impl_.mvn_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::MVNParameter>(&::caffe::MVNParameter_globals_);
}
inline const ::caffe::MVNParameter& LayerParameter::mvn_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.mvn_param)
  return _internal_mvn_param();
}
inline void LayerParameter::unsafe_arena_set_allocated_mvn_param(
    ::caffe::MVNParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.mvn_param_);
  }
  _impl_.mvn_param_ = reinterpret_cast<::caffe::MVNParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[1], 0x00000001U);
  } else {
    ClearHasBit(_impl_._has_bits_[1], 0x00000001U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.LayerParameter.mvn_param)
}
inline ::caffe::MVNParameter* PROTOBUF_NULLABLE LayerParameter::release_mvn_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[1], 0x00000001U);
  ::caffe::MVNParameter* released = _impl_.mvn_param_;
  _impl_.mvn_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::MVNParameter* PROTOBUF_NULLABLE LayerParameter::unsafe_arena_release_mvn_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.mvn_param)

  ClearHasBit(_impl_._has_bits_[1], 0x00000001U);
  ::caffe::MVNParameter* temp = _impl_.mvn_param_;
  _impl_.mvn_param_ = nullptr;
  return temp;
}
inline ::caffe::MVNParameter* PROTOBUF_NONNULL LayerParameter::_internal_mutable_mvn_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.mvn_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::MVNParameter>(GetArena());
    _impl_.mvn_param_ = reinterpret_cast<::caffe::MVNParameter*>(p);
  }
  return _impl_.mvn_param_;
}
inline ::caffe::MVNParameter* PROTOBUF_NONNULL LayerParameter::mutable_mvn_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[1], 0x00000001U);
  ::caffe::MVNParameter* _msg = _internal_mutable_mvn_param();
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.mvn_param)
  return _msg;
}
inline void LayerParameter::set_allocated_mvn_param(::caffe::MVNParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.mvn_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[1], 0x00000001U);
  } else {
    ClearHasBit(_impl_._has_bits_[1], 0x00000001U);
  }

  _impl_.mvn_param_ = reinterpret_cast<::caffe::MVNParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.mvn_param)
}

// optional .caffe.NormalizeParameter norm_param = 206;
inline bool LayerParameter::has_norm_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[2], 0x00000004U);
  PROTOBUF_ASSUME(!value || _impl_.norm_param_ != nullptr);
  return value;
}
inline void LayerParameter::clear_norm_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.norm_param_ != nullptr) _impl_.norm_param_->Clear();
  ClearHasBit(_impl_._has_bits_[2], 0x00000004U);
}
inline const ::caffe::NormalizeParameter& LayerParameter::_internal_norm_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::NormalizeParameter* p = _impl_.norm_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::NormalizeParameter>(&::caffe::NormalizeParameter_globals_);
}
inline const ::caffe::NormalizeParameter& LayerParameter::norm_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.norm_param)
  return _internal_norm_param();
}
inline void LayerParameter::unsafe_arena_set_allocated_norm_param(
    ::caffe::NormalizeParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.norm_param_);
  }
  _impl_.norm_param_ = reinterpret_cast<::caffe::NormalizeParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[2], 0x00000004U);
  } else {
    ClearHasBit(_impl_._has_bits_[2], 0x00000004U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.LayerParameter.norm_param)
}
inline ::caffe::NormalizeParameter* PROTOBUF_NULLABLE LayerParameter::release_norm_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[2], 0x00000004U);
  ::caffe::NormalizeParameter* released = _impl_.norm_param_;
  _impl_.norm_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::NormalizeParameter* PROTOBUF_NULLABLE LayerParameter::unsafe_arena_release_norm_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.norm_param)

  ClearHasBit(_impl_._has_bits_[2], 0x00000004U);
  ::caffe::NormalizeParameter* temp = _impl_.norm_param_;
  _impl_.norm_param_ = nullptr;
  return temp;
}
inline ::caffe::NormalizeParameter* PROTOBUF_NONNULL LayerParameter::_internal_mutable_norm_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.norm_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::NormalizeParameter>(GetArena());
    _impl_.norm_param_ = reinterpret_cast<::caffe::NormalizeParameter*>(p);
  }
  return _impl_.norm_param_;
}
inline ::caffe::NormalizeParameter* PROTOBUF_NONNULL LayerParameter::mutable_norm_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[2], 0x00000004U);
  ::caffe::NormalizeParameter* _msg = _internal_mutable_norm_param();
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.norm_param)
  return _msg;
}
inline void LayerParameter::set_allocated_norm_param(::caffe::NormalizeParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.norm_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[2], 0x00000004U);
  } else {
    ClearHasBit(_impl_._has_bits_[2], 0x00000004U);
  }

  _impl_.norm_param_ = reinterpret_cast<::caffe::NormalizeParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.norm_param)
}

// optional .caffe.PoolingParameter pooling_param = 121;
inline bool LayerParameter::has_pooling_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[1], 0x00000002U);
  PROTOBUF_ASSUME(!value || _impl_.pooling_param_ != nullptr);
  return value;
}
inline void LayerParameter::clear_pooling_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.pooling_param_ != nullptr) _impl_.pooling_param_->Clear();
  ClearHasBit(_impl_._has_bits_[1], 0x00000002U);
}
inline const ::caffe::PoolingParameter& LayerParameter::_internal_pooling_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::PoolingParameter* p = _impl_.pooling_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::PoolingParameter>(&::caffe::PoolingParameter_globals_);
}
inline const ::caffe::PoolingParameter& LayerParameter::pooling_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.pooling_param)
  return _internal_pooling_param();
}
inline void LayerParameter::unsafe_arena_set_allocated_pooling_param(
    ::caffe::PoolingParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.pooling_param_);
  }
  _impl_.pooling_param_ = reinterpret_cast<::caffe::PoolingParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[1], 0x00000002U);
  } else {
    ClearHasBit(_impl_._has_bits_[1], 0x00000002U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.LayerParameter.pooling_param)
}
inline ::caffe::PoolingParameter* PROTOBUF_NULLABLE LayerParameter::release_pooling_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[1], 0x00000002U);
  ::caffe::PoolingParameter* released = _impl_.pooling_param_;
  _impl_.pooling_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::PoolingParameter* PROTOBUF_NULLABLE LayerParameter::unsafe_arena_release_pooling_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.pooling_param)

  ClearHasBit(_impl_._has_bits_[1], 0x00000002U);
  ::caffe::PoolingParameter* temp = _impl_.pooling_param_;
  _impl_.pooling_param_ = nullptr;
  return temp;
}
inline ::caffe::PoolingParameter* PROTOBUF_NONNULL LayerParameter::_internal_mutable_pooling_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.pooling_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::PoolingParameter>(GetArena());
    _impl_.pooling_param_ = reinterpret_cast<::caffe::PoolingParameter*>(p);
  }
  return _impl_.pooling_param_;
}
inline ::caffe::PoolingParameter* PROTOBUF_NONNULL LayerParameter::mutable_pooling_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[1], 0x00000002U);
  ::caffe::PoolingParameter* _msg = _internal_mutable_pooling_param();
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.pooling_param)
  return _msg;
}
inline void LayerParameter::set_allocated_pooling_param(::caffe::PoolingParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.pooling_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[1], 0x00000002U);
  } else {
    ClearHasBit(_impl_._has_bits_[1], 0x00000002U);
  }

  _impl_.pooling_param_ = reinterpret_cast<::caffe::PoolingParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.pooling_param)
}

// optional .caffe.PermuteParameter permute_param = 202;
inline bool LayerParameter::has_permute_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[1], 0x40000000U);
  PROTOBUF_ASSUME(!value || _impl_.permute_param_ != nullptr);
  return value;
}
inline void LayerParameter::clear_permute_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.permute_param_ != nullptr) _impl_.permute_param_->Clear();
  ClearHasBit(_impl_._has_bits_[1], 0x40000000U);
}
inline const ::caffe::PermuteParameter& LayerParameter::_internal_permute_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::PermuteParameter* p = _impl_.permute_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::PermuteParameter>(&::caffe::PermuteParameter_globals_);
}
inline const ::caffe::PermuteParameter& LayerParameter::permute_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.permute_param)
  return _internal_permute_param();
}
inline void LayerParameter::unsafe_arena_set_allocated_permute_param(
    ::caffe::PermuteParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.permute_param_);
  }
  _impl_.permute_param_ = reinterpret_cast<::caffe::PermuteParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[1], 0x40000000U);
  } else {
    ClearHasBit(_impl_._has_bits_[1], 0x40000000U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.LayerParameter.permute_param)
}
inline ::caffe::PermuteParameter* PROTOBUF_NULLABLE LayerParameter::release_permute_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[1], 0x40000000U);
  ::caffe::PermuteParameter* released = _impl_.permute_param_;
  _impl_.permute_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::PermuteParameter* PROTOBUF_NULLABLE LayerParameter::unsafe_arena_release_permute_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.permute_param)

  ClearHasBit(_impl_._has_bits_[1], 0x40000000U);
  ::caffe::PermuteParameter* temp = _impl_.permute_param_;
  _impl_.permute_param_ = nullptr;
  return temp;
}
inline ::caffe::PermuteParameter* PROTOBUF_NONNULL LayerParameter::_internal_mutable_permute_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.permute_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::PermuteParameter>(GetArena());
    _impl_.permute_param_ = reinterpret_cast<::caffe::PermuteParameter*>(p);
  }
  return _impl_.permute_param_;
}
inline ::caffe::PermuteParameter* PROTOBUF_NONNULL LayerParameter::mutable_permute_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[1], 0x40000000U);
  ::caffe::PermuteParameter* _msg = _internal_mutable_permute_param();
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.permute_param)
  return _msg;
}
inline void LayerParameter::set_allocated_permute_param(::caffe::PermuteParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.permute_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[1], 0x40000000U);
  } else {
    ClearHasBit(_impl_._has_bits_[1], 0x40000000U);
  }

  _impl_.permute_param_ = reinterpret_cast<::caffe::PermuteParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.permute_param)
}

// optional .caffe.PowerParameter power_param = 122;
inline bool LayerParameter::has_power_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[1], 0x00000004U);
  PROTOBUF_ASSUME(!value || _impl_.power_param_ != nullptr);
  return value;
}
inline void LayerParameter::clear_power_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.power_param_ != nullptr) _impl_.power_param_->Clear();
  ClearHasBit(_impl_._has_bits_[1], 0x00000004U);
}
inline const ::caffe::PowerParameter& LayerParameter::_internal_power_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::PowerParameter* p = _impl_.power_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::PowerParameter>(&::caffe::PowerParameter_globals_);
}
inline const ::caffe::PowerParameter& LayerParameter::power_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.power_param)
  return _internal_power_param();
}
inline void LayerParameter::unsafe_arena_set_allocated_power_param(
    ::caffe::PowerParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.power_param_);
  }
  _impl_.power_param_ = reinterpret_cast<::caffe::PowerParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[1], 0x00000004U);
  } else {
    ClearHasBit(_impl_._has_bits_[1], 0x00000004U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.LayerParameter.power_param)
}
inline ::caffe::PowerParameter* PROTOBUF_NULLABLE LayerParameter::release_power_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[1], 0x00000004U);
  ::caffe::PowerParameter* released = _impl_.power_param_;
  _impl_.power_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::PowerParameter* PROTOBUF_NULLABLE LayerParameter::unsafe_arena_release_power_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.power_param)

  ClearHasBit(_impl_._has_bits_[1], 0x00000004U);
  ::caffe::PowerParameter* temp = _impl_.power_param_;
  _impl_.power_param_ = nullptr;
  return temp;
}
inline ::caffe::PowerParameter* PROTOBUF_NONNULL LayerParameter::_internal_mutable_power_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.power_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::PowerParameter>(GetArena());
    _impl_.power_param_ = reinterpret_cast<::caffe::PowerParameter*>(p);
  }
  return _impl_.power_param_;
}
inline ::caffe::PowerParameter* PROTOBUF_NONNULL LayerParameter::mutable_power_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[1], 0x00000004U);
  ::caffe::PowerParameter* _msg = _internal_mutable_power_param();
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.power_param)
  return _msg;
}
inline void LayerParameter::set_allocated_power_param(::caffe::PowerParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.power_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[1], 0x00000004U);
  } else {
    ClearHasBit(_impl_._has_bits_[1], 0x00000004U);
  }

  _impl_.power_param_ = reinterpret_cast<::caffe::PowerParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.power_param)
}

// optional .caffe.PReLUParameter prelu_param = 131;
inline bool LayerParameter::has_prelu_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[1], 0x00000800U);
  PROTOBUF_ASSUME(!value || _impl_.prelu_param_ != nullptr);
  return value;
}
inline void LayerParameter::clear_prelu_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.prelu_param_ != nullptr) _impl_.prelu_param_->Clear();
  ClearHasBit(_impl_._has_bits_[1], 0x00000800U);
}
inline const ::caffe::PReLUParameter& LayerParameter::_internal_prelu_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::PReLUParameter* p = _impl_.prelu_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::PReLUParameter>(&::caffe::PReLUParameter_globals_);
}
inline const ::caffe::PReLUParameter& LayerParameter::prelu_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.prelu_param)
  return _internal_prelu_param();
}
inline void LayerParameter::unsafe_arena_set_allocated_prelu_param(
    ::caffe::PReLUParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.prelu_param_);
  }
  _impl_.prelu_param_ = reinterpret_cast<::caffe::PReLUParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[1], 0x00000800U);
  } else {
    ClearHasBit(_impl_._has_bits_[1], 0x00000800U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.LayerParameter.prelu_param)
}
inline ::caffe::PReLUParameter* PROTOBUF_NULLABLE LayerParameter::release_prelu_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[1], 0x00000800U);
  ::caffe::PReLUParameter* released = _impl_.prelu_param_;
  _impl_.prelu_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::PReLUParameter* PROTOBUF_NULLABLE LayerParameter::unsafe_arena_release_prelu_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.prelu_param)

  ClearHasBit(_impl_._has_bits_[1], 0x00000800U);
  ::caffe::PReLUParameter* temp = _impl_.prelu_param_;
  _impl_.prelu_param_ = nullptr;
  return temp;
}
inline ::caffe::PReLUParameter* PROTOBUF_NONNULL LayerParameter::_internal_mutable_prelu_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.prelu_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::PReLUParameter>(GetArena());
    _impl_.prelu_param_ = reinterpret_cast<::caffe::PReLUParameter*>(p);
  }
  return _impl_.prelu_param_;
}
inline ::caffe::PReLUParameter* PROTOBUF_NONNULL LayerParameter::mutable_prelu_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[1], 0x00000800U);
  ::caffe::PReLUParameter* _msg = _internal_mutable_prelu_param();
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.prelu_param)
  return _msg;
}
inline void LayerParameter::set_allocated_prelu_param(::caffe::PReLUParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.prelu_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[1], 0x00000800U);
  } else {
    ClearHasBit(_impl_._has_bits_[1], 0x00000800U);
  }

  _impl_.prelu_param_ = reinterpret_cast<::caffe::PReLUParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.prelu_param)
}

// optional .caffe.PriorBoxParameter prior_box_param = 203;
inline bool LayerParameter::has_prior_box_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[1], 0x80000000U);
  PROTOBUF_ASSUME(!value || _impl_.prior_box_param_ != nullptr);
  return value;
}
inline void LayerParameter::clear_prior_box_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.prior_box_param_ != nullptr) _impl_.prior_box_param_->Clear();
  ClearHasBit(_impl_._has_bits_[1], 0x80000000U);
}
inline const ::caffe::PriorBoxParameter& LayerParameter::_internal_prior_box_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::PriorBoxParameter* p = _impl_.prior_box_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::PriorBoxParameter>(&::caffe::PriorBoxParameter_globals_);
}
inline const ::caffe::PriorBoxParameter& LayerParameter::prior_box_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.prior_box_param)
  return _internal_prior_box_param();
}
inline void LayerParameter::unsafe_arena_set_allocated_prior_box_param(
    ::caffe::PriorBoxParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.prior_box_param_);
  }
  _impl_.prior_box_param_ = reinterpret_cast<::caffe::PriorBoxParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[1], 0x80000000U);
  } else {
    ClearHasBit(_impl_._has_bits_[1], 0x80000000U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.LayerParameter.prior_box_param)
}
inline ::caffe::PriorBoxParameter* PROTOBUF_NULLABLE LayerParameter::release_prior_box_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[1], 0x80000000U);
  ::caffe::PriorBoxParameter* released = _impl_.prior_box_param_;
  _impl_.prior_box_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::PriorBoxParameter* PROTOBUF_NULLABLE LayerParameter::unsafe_arena_release_prior_box_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.prior_box_param)

  ClearHasBit(_impl_._has_bits_[1], 0x80000000U);
  ::caffe::PriorBoxParameter* temp = _impl_.prior_box_param_;
  _impl_.prior_box_param_ = nullptr;
  return temp;
}
inline ::caffe::PriorBoxParameter* PROTOBUF_NONNULL LayerParameter::_internal_mutable_prior_box_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.prior_box_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::PriorBoxParameter>(GetArena());
    _impl_.prior_box_param_ = reinterpret_cast<::caffe::PriorBoxParameter*>(p);
  }
  return _impl_.prior_box_param_;
}
inline ::caffe::PriorBoxParameter* PROTOBUF_NONNULL LayerParameter::mutable_prior_box_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[1], 0x80000000U);
  ::caffe::PriorBoxParameter* _msg = _internal_mutable_prior_box_param();
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.prior_box_param)
  return _msg;
}
inline void LayerParameter::set_allocated_prior_box_param(::caffe::PriorBoxParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.prior_box_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[1], 0x80000000U);
  } else {
    ClearHasBit(_impl_._has_bits_[1], 0x80000000U);
  }

  _impl_.prior_box_param_ = reinterpret_cast<::caffe::PriorBoxParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.prior_box_param)
}

// optional .caffe.PSROIPoolingParameter psroi_pooling_param = 149;
inline bool LayerParameter::has_psroi_pooling_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[1], 0x20000000U);
  PROTOBUF_ASSUME(!value || _impl_.psroi_pooling_param_ != nullptr);
  return value;
}
inline void LayerParameter::clear_psroi_pooling_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.psroi_pooling_param_ != nullptr) _impl_.psroi_pooling_param_->Clear();
  ClearHasBit(_impl_._has_bits_[1], 0x20000000U);
}
inline const ::caffe::PSROIPoolingParameter& LayerParameter::_internal_psroi_pooling_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::PSROIPoolingParameter* p = _impl_.psroi_pooling_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::PSROIPoolingParameter>(&::caffe::PSROIPoolingParameter_globals_);
}
inline const ::caffe::PSROIPoolingParameter& LayerParameter::psroi_pooling_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.psroi_pooling_param)
  return _internal_psroi_pooling_param();
}
inline void LayerParameter::unsafe_arena_set_allocated_psroi_pooling_param(
    ::caffe::PSROIPoolingParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.psroi_pooling_param_);
  }
  _impl_.psroi_pooling_param_ = reinterpret_cast<::caffe::PSROIPoolingParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[1], 0x20000000U);
  } else {
    ClearHasBit(_impl_._has_bits_[1], 0x20000000U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.LayerParameter.psroi_pooling_param)
}
inline ::caffe::PSROIPoolingParameter* PROTOBUF_NULLABLE LayerParameter::release_psroi_pooling_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[1], 0x20000000U);
  ::caffe::PSROIPoolingParameter* released = _impl_.psroi_pooling_param_;
  _impl_.psroi_pooling_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::PSROIPoolingParameter* PROTOBUF_NULLABLE LayerParameter::unsafe_arena_release_psroi_pooling_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.psroi_pooling_param)

  ClearHasBit(_impl_._has_bits_[1], 0x20000000U);
  ::caffe::PSROIPoolingParameter* temp = _impl_.psroi_pooling_param_;
  _impl_.psroi_pooling_param_ = nullptr;
  return temp;
}
inline ::caffe::PSROIPoolingParameter* PROTOBUF_NONNULL LayerParameter::_internal_mutable_psroi_pooling_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.psroi_pooling_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::PSROIPoolingParameter>(GetArena());
    _impl_.psroi_pooling_param_ = reinterpret_cast<::caffe::PSROIPoolingParameter*>(p);
  }
  return _impl_.psroi_pooling_param_;
}
inline ::caffe::PSROIPoolingParameter* PROTOBUF_NONNULL LayerParameter::mutable_psroi_pooling_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[1], 0x20000000U);
  ::caffe::PSROIPoolingParameter* _msg = _internal_mutable_psroi_pooling_param();
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.psroi_pooling_param)
  return _msg;
}
inline void LayerParameter::set_allocated_psroi_pooling_param(::caffe::PSROIPoolingParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.psroi_pooling_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[1], 0x20000000U);
  } else {
    ClearHasBit(_impl_._has_bits_[1], 0x20000000U);
  }

  _impl_.psroi_pooling_param_ = reinterpret_cast<::caffe::PSROIPoolingParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.psroi_pooling_param)
}

// optional .caffe.PythonParameter python_param = 130;
inline bool LayerParameter::has_python_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[1], 0x00000400U);
  PROTOBUF_ASSUME(!value || _impl_.python_param_ != nullptr);
  return value;
}
inline void LayerParameter::clear_python_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.python_param_ != nullptr) _impl_.python_param_->Clear();
  ClearHasBit(_impl_._has_bits_[1], 0x00000400U);
}
inline const ::caffe::PythonParameter& LayerParameter::_internal_python_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::PythonParameter* p = _impl_.python_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::PythonParameter>(&::caffe::PythonParameter_globals_);
}
inline const ::caffe::PythonParameter& LayerParameter::python_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.python_param)
  return _internal_python_param();
}
inline void LayerParameter::unsafe_arena_set_allocated_python_param(
    ::caffe::PythonParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.python_param_);
  }
  _impl_.python_param_ = reinterpret_cast<::caffe::PythonParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[1], 0x00000400U);
  } else {
    ClearHasBit(_impl_._has_bits_[1], 0x00000400U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.LayerParameter.python_param)
}
inline ::caffe::PythonParameter* PROTOBUF_NULLABLE LayerParameter::release_python_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[1], 0x00000400U);
  ::caffe::PythonParameter* released = _impl_.python_param_;
  _impl_.python_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::PythonParameter* PROTOBUF_NULLABLE LayerParameter::unsafe_arena_release_python_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.python_param)

  ClearHasBit(_impl_._has_bits_[1], 0x00000400U);
  ::caffe::PythonParameter* temp = _impl_.python_param_;
  _impl_.python_param_ = nullptr;
  return temp;
}
inline ::caffe::PythonParameter* PROTOBUF_NONNULL LayerParameter::_internal_mutable_python_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.python_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::PythonParameter>(GetArena());
    _impl_.python_param_ = reinterpret_cast<::caffe::PythonParameter*>(p);
  }
  return _impl_.python_param_;
}
inline ::caffe::PythonParameter* PROTOBUF_NONNULL LayerParameter::mutable_python_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[1], 0x00000400U);
  ::caffe::PythonParameter* _msg = _internal_mutable_python_param();
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.python_param)
  return _msg;
}
inline void LayerParameter::set_allocated_python_param(::caffe::PythonParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.python_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[1], 0x00000400U);
  } else {
    ClearHasBit(_impl_._has_bits_[1], 0x00000400U);
  }

  _impl_.python_param_ = reinterpret_cast<::caffe::PythonParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.python_param)
}

// optional .caffe.RecurrentParameter recurrent_param = 146;
inline bool LayerParameter::has_recurrent_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[1], 0x04000000U);
  PROTOBUF_ASSUME(!value || _impl_.recurrent_param_ != nullptr);
  return value;
}
inline void LayerParameter::clear_recurrent_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.recurrent_param_ != nullptr) _impl_.recurrent_param_->Clear();
  ClearHasBit(_impl_._has_bits_[1], 0x04000000U);
}
inline const ::caffe::RecurrentParameter& LayerParameter::_internal_recurrent_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::RecurrentParameter* p = _impl_.recurrent_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::RecurrentParameter>(&::caffe::RecurrentParameter_globals_);
}
inline const ::caffe::RecurrentParameter& LayerParameter::recurrent_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.recurrent_param)
  return _internal_recurrent_param();
}
inline void LayerParameter::unsafe_arena_set_allocated_recurrent_param(
    ::caffe::RecurrentParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.recurrent_param_);
  }
  _impl_.recurrent_param_ = reinterpret_cast<::caffe::RecurrentParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[1], 0x04000000U);
  } else {
    ClearHasBit(_impl_._has_bits_[1], 0x04000000U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.LayerParameter.recurrent_param)
}
inline ::caffe::RecurrentParameter* PROTOBUF_NULLABLE LayerParameter::release_recurrent_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[1], 0x04000000U);
  ::caffe::RecurrentParameter* released = _impl_.recurrent_param_;
  _impl_.recurrent_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::RecurrentParameter* PROTOBUF_NULLABLE LayerParameter::unsafe_arena_release_recurrent_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.recurrent_param)

  ClearHasBit(_impl_._has_bits_[1], 0x04000000U);
  ::caffe::RecurrentParameter* temp = _impl_.recurrent_param_;
  _impl_.recurrent_param_ = nullptr;
  return temp;
}
inline ::caffe::RecurrentParameter* PROTOBUF_NONNULL LayerParameter::_internal_mutable_recurrent_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.recurrent_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::RecurrentParameter>(GetArena());
    _impl_.recurrent_param_ = reinterpret_cast<::caffe::RecurrentParameter*>(p);
  }
  return _impl_.recurrent_param_;
}
inline ::caffe::RecurrentParameter* PROTOBUF_NONNULL LayerParameter::mutable_recurrent_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[1], 0x04000000U);
  ::caffe::RecurrentParameter* _msg = _internal_mutable_recurrent_param();
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.recurrent_param)
  return _msg;
}
inline void LayerParameter::set_allocated_recurrent_param(::caffe::RecurrentParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.recurrent_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[1], 0x04000000U);
  } else {
    ClearHasBit(_impl_._has_bits_[1], 0x04000000U);
  }

  _impl_.recurrent_param_ = reinterpret_cast<::caffe::RecurrentParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.recurrent_param)
}

// optional .caffe.ReductionParameter reduction_param = 136;
inline bool LayerParameter::has_reduction_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[1], 0x00010000U);
  PROTOBUF_ASSUME(!value || _impl_.reduction_param_ != nullptr);
  return value;
}
inline void LayerParameter::clear_reduction_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.reduction_param_ != nullptr) _impl_.reduction_param_->Clear();
  ClearHasBit(_impl_._has_bits_[1], 0x00010000U);
}
inline const ::caffe::ReductionParameter& LayerParameter::_internal_reduction_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::ReductionParameter* p = _impl_.reduction_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::ReductionParameter>(&::caffe::ReductionParameter_globals_);
}
inline const ::caffe::ReductionParameter& LayerParameter::reduction_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.reduction_param)
  return _internal_reduction_param();
}
inline void LayerParameter::unsafe_arena_set_allocated_reduction_param(
    ::caffe::ReductionParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.reduction_param_);
  }
  _impl_.reduction_param_ = reinterpret_cast<::caffe::ReductionParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[1], 0x00010000U);
  } else {
    ClearHasBit(_impl_._has_bits_[1], 0x00010000U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.LayerParameter.reduction_param)
}
inline ::caffe::ReductionParameter* PROTOBUF_NULLABLE LayerParameter::release_reduction_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[1], 0x00010000U);
  ::caffe::ReductionParameter* released = _impl_.reduction_param_;
  _impl_.reduction_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::ReductionParameter* PROTOBUF_NULLABLE LayerParameter::unsafe_arena_release_reduction_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.reduction_param)

  ClearHasBit(_impl_._has_bits_[1], 0x00010000U);
  ::caffe::ReductionParameter* temp = _impl_.reduction_param_;
  _impl_.reduction_param_ = nullptr;
  return temp;
}
inline ::caffe::ReductionParameter* PROTOBUF_NONNULL LayerParameter::_internal_mutable_reduction_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.reduction_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::ReductionParameter>(GetArena());
    _impl_.reduction_param_ = reinterpret_cast<::caffe::ReductionParameter*>(p);
  }
  return _impl_.reduction_param_;
}
inline ::caffe::ReductionParameter* PROTOBUF_NONNULL LayerParameter::mutable_reduction_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[1], 0x00010000U);
  ::caffe::ReductionParameter* _msg = _internal_mutable_reduction_param();
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.reduction_param)
  return _msg;
}
inline void LayerParameter::set_allocated_reduction_param(::caffe::ReductionParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.reduction_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[1], 0x00010000U);
  } else {
    ClearHasBit(_impl_._has_bits_[1], 0x00010000U);
  }

  _impl_.reduction_param_ = reinterpret_cast<::caffe::ReductionParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.reduction_param)
}

// optional .caffe.ReLUParameter relu_param = 123;
inline bool LayerParameter::has_relu_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[1], 0x00000008U);
  PROTOBUF_ASSUME(!value || _impl_.relu_param_ != nullptr);
  return value;
}
inline void LayerParameter::clear_relu_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.relu_param_ != nullptr) _impl_.relu_param_->Clear();
  ClearHasBit(_impl_._has_bits_[1], 0x00000008U);
}
inline const ::caffe::ReLUParameter& LayerParameter::_internal_relu_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::ReLUParameter* p = _impl_.relu_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::ReLUParameter>(&::caffe::ReLUParameter_globals_);
}
inline const ::caffe::ReLUParameter& LayerParameter::relu_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.relu_param)
  return _internal_relu_param();
}
inline void LayerParameter::unsafe_arena_set_allocated_relu_param(
    ::caffe::ReLUParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.relu_param_);
  }
  _impl_.relu_param_ = reinterpret_cast<::caffe::ReLUParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[1], 0x00000008U);
  } else {
    ClearHasBit(_impl_._has_bits_[1], 0x00000008U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.LayerParameter.relu_param)
}
inline ::caffe::ReLUParameter* PROTOBUF_NULLABLE LayerParameter::release_relu_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[1], 0x00000008U);
  ::caffe::ReLUParameter* released = _impl_.relu_param_;
  _impl_.relu_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::ReLUParameter* PROTOBUF_NULLABLE LayerParameter::unsafe_arena_release_relu_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.relu_param)

  ClearHasBit(_impl_._has_bits_[1], 0x00000008U);
  ::caffe::ReLUParameter* temp = _impl_.relu_param_;
  _impl_.relu_param_ = nullptr;
  return temp;
}
inline ::caffe::ReLUParameter* PROTOBUF_NONNULL LayerParameter::_internal_mutable_relu_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.relu_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::ReLUParameter>(GetArena());
    _impl_.relu_param_ = reinterpret_cast<::caffe::ReLUParameter*>(p);
  }
  return _impl_.relu_param_;
}
inline ::caffe::ReLUParameter* PROTOBUF_NONNULL LayerParameter::mutable_relu_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[1], 0x00000008U);
  ::caffe::ReLUParameter* _msg = _internal_mutable_relu_param();
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.relu_param)
  return _msg;
}
inline void LayerParameter::set_allocated_relu_param(::caffe::ReLUParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.relu_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[1], 0x00000008U);
  } else {
    ClearHasBit(_impl_._has_bits_[1], 0x00000008U);
  }

  _impl_.relu_param_ = reinterpret_cast<::caffe::ReLUParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.relu_param)
}

// optional .caffe.ReorgParameter reorg_param = 147;
inline bool LayerParameter::has_reorg_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[1], 0x08000000U);
  PROTOBUF_ASSUME(!value || _impl_.reorg_param_ != nullptr);
  return value;
}
inline void LayerParameter::clear_reorg_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.reorg_param_ != nullptr) _impl_.reorg_param_->Clear();
  ClearHasBit(_impl_._has_bits_[1], 0x08000000U);
}
inline const ::caffe::ReorgParameter& LayerParameter::_internal_reorg_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::ReorgParameter* p = _impl_.reorg_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::ReorgParameter>(&::caffe::ReorgParameter_globals_);
}
inline const ::caffe::ReorgParameter& LayerParameter::reorg_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.reorg_param)
  return _internal_reorg_param();
}
inline void LayerParameter::unsafe_arena_set_allocated_reorg_param(
    ::caffe::ReorgParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.reorg_param_);
  }
  _impl_.reorg_param_ = reinterpret_cast<::caffe::ReorgParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[1], 0x08000000U);
  } else {
    ClearHasBit(_impl_._has_bits_[1], 0x08000000U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.LayerParameter.reorg_param)
}
inline ::caffe::ReorgParameter* PROTOBUF_NULLABLE LayerParameter::release_reorg_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[1], 0x08000000U);
  ::caffe::ReorgParameter* released = _impl_.reorg_param_;
  _impl_.reorg_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::ReorgParameter* PROTOBUF_NULLABLE LayerParameter::unsafe_arena_release_reorg_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.reorg_param)

  ClearHasBit(_impl_._has_bits_[1], 0x08000000U);
  ::caffe::ReorgParameter* temp = _impl_.reorg_param_;
  _impl_.reorg_param_ = nullptr;
  return temp;
}
inline ::caffe::ReorgParameter* PROTOBUF_NONNULL LayerParameter::_internal_mutable_reorg_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.reorg_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::ReorgParameter>(GetArena());
    _impl_.reorg_param_ = reinterpret_cast<::caffe::ReorgParameter*>(p);
  }
  return _impl_.reorg_param_;
}
inline ::caffe::ReorgParameter* PROTOBUF_NONNULL LayerParameter::mutable_reorg_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[1], 0x08000000U);
  ::caffe::ReorgParameter* _msg = _internal_mutable_reorg_param();
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.reorg_param)
  return _msg;
}
inline void LayerParameter::set_allocated_reorg_param(::caffe::ReorgParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.reorg_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[1], 0x08000000U);
  } else {
    ClearHasBit(_impl_._has_bits_[1], 0x08000000U);
  }

  _impl_.reorg_param_ = reinterpret_cast<::caffe::ReorgParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.reorg_param)
}

// optional .caffe.ReshapeParameter reshape_param = 133;
inline bool LayerParameter::has_reshape_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[1], 0x00002000U);
  PROTOBUF_ASSUME(!value || _impl_.reshape_param_ != nullptr);
  return value;
}
inline void LayerParameter::clear_reshape_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.reshape_param_ != nullptr) _impl_.reshape_param_->Clear();
  ClearHasBit(_impl_._has_bits_[1], 0x00002000U);
}
inline const ::caffe::ReshapeParameter& LayerParameter::_internal_reshape_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::ReshapeParameter* p = _impl_.reshape_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::ReshapeParameter>(&::caffe::ReshapeParameter_globals_);
}
inline const ::caffe::ReshapeParameter& LayerParameter::reshape_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.reshape_param)
  return _internal_reshape_param();
}
inline void LayerParameter::unsafe_arena_set_allocated_reshape_param(
    ::caffe::ReshapeParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.reshape_param_);
  }
  _impl_.reshape_param_ = reinterpret_cast<::caffe::ReshapeParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[1], 0x00002000U);
  } else {
    ClearHasBit(_impl_._has_bits_[1], 0x00002000U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.LayerParameter.reshape_param)
}
inline ::caffe::ReshapeParameter* PROTOBUF_NULLABLE LayerParameter::release_reshape_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[1], 0x00002000U);
  ::caffe::ReshapeParameter* released = _impl_.reshape_param_;
  _impl_.reshape_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::ReshapeParameter* PROTOBUF_NULLABLE LayerParameter::unsafe_arena_release_reshape_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.reshape_param)

  ClearHasBit(_impl_._has_bits_[1], 0x00002000U);
  ::caffe::ReshapeParameter* temp = _impl_.reshape_param_;
  _impl_.reshape_param_ = nullptr;
  return temp;
}
inline ::caffe::ReshapeParameter* PROTOBUF_NONNULL LayerParameter::_internal_mutable_reshape_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.reshape_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::ReshapeParameter>(GetArena());
    _impl_.reshape_param_ = reinterpret_cast<::caffe::ReshapeParameter*>(p);
  }
  return _impl_.reshape_param_;
}
inline ::caffe::ReshapeParameter* PROTOBUF_NONNULL LayerParameter::mutable_reshape_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[1], 0x00002000U);
  ::caffe::ReshapeParameter* _msg = _internal_mutable_reshape_param();
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.reshape_param)
  return _msg;
}
inline void LayerParameter::set_allocated_reshape_param(::caffe::ReshapeParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.reshape_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[1], 0x00002000U);
  } else {
    ClearHasBit(_impl_._has_bits_[1], 0x00002000U);
  }

  _impl_.reshape_param_ = reinterpret_cast<::caffe::ReshapeParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.reshape_param)
}

// optional .caffe.ROIAlignParameter roi_align_param = 148;
inline bool LayerParameter::has_roi_align_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[1], 0x10000000U);
  PROTOBUF_ASSUME(!value || _impl_.roi_align_param_ != nullptr);
  return value;
}
inline void LayerParameter::clear_roi_align_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.roi_align_param_ != nullptr) _impl_.roi_align_param_->Clear();
  ClearHasBit(_impl_._has_bits_[1], 0x10000000U);
}
inline const ::caffe::ROIAlignParameter& LayerParameter::_internal_roi_align_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::ROIAlignParameter* p = _impl_.roi_align_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::ROIAlignParameter>(&::caffe::ROIAlignParameter_globals_);
}
inline const ::caffe::ROIAlignParameter& LayerParameter::roi_align_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.roi_align_param)
  return _internal_roi_align_param();
}
inline void LayerParameter::unsafe_arena_set_allocated_roi_align_param(
    ::caffe::ROIAlignParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.roi_align_param_);
  }
  _impl_.roi_align_param_ = reinterpret_cast<::caffe::ROIAlignParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[1], 0x10000000U);
  } else {
    ClearHasBit(_impl_._has_bits_[1], 0x10000000U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.LayerParameter.roi_align_param)
}
inline ::caffe::ROIAlignParameter* PROTOBUF_NULLABLE LayerParameter::release_roi_align_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[1], 0x10000000U);
  ::caffe::ROIAlignParameter* released = _impl_.roi_align_param_;
  _impl_.roi_align_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::ROIAlignParameter* PROTOBUF_NULLABLE LayerParameter::unsafe_arena_release_roi_align_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.roi_align_param)

  ClearHasBit(_impl_._has_bits_[1], 0x10000000U);
  ::caffe::ROIAlignParameter* temp = _impl_.roi_align_param_;
  _impl_.roi_align_param_ = nullptr;
  return temp;
}
inline ::caffe::ROIAlignParameter* PROTOBUF_NONNULL LayerParameter::_internal_mutable_roi_align_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.roi_align_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::ROIAlignParameter>(GetArena());
    _impl_.roi_align_param_ = reinterpret_cast<::caffe::ROIAlignParameter*>(p);
  }
  return _impl_.roi_align_param_;
}
inline ::caffe::ROIAlignParameter* PROTOBUF_NONNULL LayerParameter::mutable_roi_align_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[1], 0x10000000U);
  ::caffe::ROIAlignParameter* _msg = _internal_mutable_roi_align_param();
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.roi_align_param)
  return _msg;
}
inline void LayerParameter::set_allocated_roi_align_param(::caffe::ROIAlignParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.roi_align_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[1], 0x10000000U);
  } else {
    ClearHasBit(_impl_._has_bits_[1], 0x10000000U);
  }

  _impl_.roi_align_param_ = reinterpret_cast<::caffe::ROIAlignParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.roi_align_param)
}

// optional .caffe.ROIPoolingParameter roi_pooling_param = 8266711;
inline bool LayerParameter::has_roi_pooling_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[2], 0x00000020U);
  PROTOBUF_ASSUME(!value || _impl_.roi_pooling_param_ != nullptr);
  return value;
}
inline void LayerParameter::clear_roi_pooling_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.roi_pooling_param_ != nullptr) _impl_.roi_pooling_param_->Clear();
  ClearHasBit(_impl_._has_bits_[2], 0x00000020U);
}
inline const ::caffe::ROIPoolingParameter& LayerParameter::_internal_roi_pooling_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::ROIPoolingParameter* p = _impl_.roi_pooling_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::ROIPoolingParameter>(&::caffe::ROIPoolingParameter_globals_);
}
inline const ::caffe::ROIPoolingParameter& LayerParameter::roi_pooling_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.roi_pooling_param)
  return _internal_roi_pooling_param();
}
inline void LayerParameter::unsafe_arena_set_allocated_roi_pooling_param(
    ::caffe::ROIPoolingParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.roi_pooling_param_);
  }
  _impl_.roi_pooling_param_ = reinterpret_cast<::caffe::ROIPoolingParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[2], 0x00000020U);
  } else {
    ClearHasBit(_impl_._has_bits_[2], 0x00000020U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.LayerParameter.roi_pooling_param)
}
inline ::caffe::ROIPoolingParameter* PROTOBUF_NULLABLE LayerParameter::release_roi_pooling_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[2], 0x00000020U);
  ::caffe::ROIPoolingParameter* released = _impl_.roi_pooling_param_;
  _impl_.roi_pooling_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::ROIPoolingParameter* PROTOBUF_NULLABLE LayerParameter::unsafe_arena_release_roi_pooling_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.roi_pooling_param)

  ClearHasBit(_impl_._has_bits_[2], 0x00000020U);
  ::caffe::ROIPoolingParameter* temp = _impl_.roi_pooling_param_;
  _impl_.roi_pooling_param_ = nullptr;
  return temp;
}
inline ::caffe::ROIPoolingParameter* PROTOBUF_NONNULL LayerParameter::_internal_mutable_roi_pooling_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.roi_pooling_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::ROIPoolingParameter>(GetArena());
    _impl_.roi_pooling_param_ = reinterpret_cast<::caffe::ROIPoolingParameter*>(p);
  }
  return _impl_.roi_pooling_param_;
}
inline ::caffe::ROIPoolingParameter* PROTOBUF_NONNULL LayerParameter::mutable_roi_pooling_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[2], 0x00000020U);
  ::caffe::ROIPoolingParameter* _msg = _internal_mutable_roi_pooling_param();
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.roi_pooling_param)
  return _msg;
}
inline void LayerParameter::set_allocated_roi_pooling_param(::caffe::ROIPoolingParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.roi_pooling_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[2], 0x00000020U);
  } else {
    ClearHasBit(_impl_._has_bits_[2], 0x00000020U);
  }

  _impl_.roi_pooling_param_ = reinterpret_cast<::caffe::ROIPoolingParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.roi_pooling_param)
}

// optional .caffe.ScaleParameter scale_param = 142;
inline bool LayerParameter::has_scale_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[1], 0x00400000U);
  PROTOBUF_ASSUME(!value || _impl_.scale_param_ != nullptr);
  return value;
}
inline void LayerParameter::clear_scale_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.scale_param_ != nullptr) _impl_.scale_param_->Clear();
  ClearHasBit(_impl_._has_bits_[1], 0x00400000U);
}
inline const ::caffe::ScaleParameter& LayerParameter::_internal_scale_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::ScaleParameter* p = _impl_.scale_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::ScaleParameter>(&::caffe::ScaleParameter_globals_);
}
inline const ::caffe::ScaleParameter& LayerParameter::scale_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.scale_param)
  return _internal_scale_param();
}
inline void LayerParameter::unsafe_arena_set_allocated_scale_param(
    ::caffe::ScaleParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.scale_param_);
  }
  _impl_.scale_param_ = reinterpret_cast<::caffe::ScaleParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[1], 0x00400000U);
  } else {
    ClearHasBit(_impl_._has_bits_[1], 0x00400000U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.LayerParameter.scale_param)
}
inline ::caffe::ScaleParameter* PROTOBUF_NULLABLE LayerParameter::release_scale_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[1], 0x00400000U);
  ::caffe::ScaleParameter* released = _impl_.scale_param_;
  _impl_.scale_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::ScaleParameter* PROTOBUF_NULLABLE LayerParameter::unsafe_arena_release_scale_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.scale_param)

  ClearHasBit(_impl_._has_bits_[1], 0x00400000U);
  ::caffe::ScaleParameter* temp = _impl_.scale_param_;
  _impl_.scale_param_ = nullptr;
  return temp;
}
inline ::caffe::ScaleParameter* PROTOBUF_NONNULL LayerParameter::_internal_mutable_scale_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.scale_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::ScaleParameter>(GetArena());
    _impl_.scale_param_ = reinterpret_cast<::caffe::ScaleParameter*>(p);
  }
  return _impl_.scale_param_;
}
inline ::caffe::ScaleParameter* PROTOBUF_NONNULL LayerParameter::mutable_scale_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[1], 0x00400000U);
  ::caffe::ScaleParameter* _msg = _internal_mutable_scale_param();
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.scale_param)
  return _msg;
}
inline void LayerParameter::set_allocated_scale_param(::caffe::ScaleParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.scale_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[1], 0x00400000U);
  } else {
    ClearHasBit(_impl_._has_bits_[1], 0x00400000U);
  }

  _impl_.scale_param_ = reinterpret_cast<::caffe::ScaleParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.scale_param)
}

// optional .caffe.ShuffleChannelParameter shuffle_channel_param = 145;
inline bool LayerParameter::has_shuffle_channel_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[1], 0x02000000U);
  PROTOBUF_ASSUME(!value || _impl_.shuffle_channel_param_ != nullptr);
  return value;
}
inline void LayerParameter::clear_shuffle_channel_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.shuffle_channel_param_ != nullptr) _impl_.shuffle_channel_param_->Clear();
  ClearHasBit(_impl_._has_bits_[1], 0x02000000U);
}
inline const ::caffe::ShuffleChannelParameter& LayerParameter::_internal_shuffle_channel_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::ShuffleChannelParameter* p = _impl_.shuffle_channel_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::ShuffleChannelParameter>(&::caffe::ShuffleChannelParameter_globals_);
}
inline const ::caffe::ShuffleChannelParameter& LayerParameter::shuffle_channel_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.shuffle_channel_param)
  return _internal_shuffle_channel_param();
}
inline void LayerParameter::unsafe_arena_set_allocated_shuffle_channel_param(
    ::caffe::ShuffleChannelParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.shuffle_channel_param_);
  }
  _impl_.shuffle_channel_param_ = reinterpret_cast<::caffe::ShuffleChannelParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[1], 0x02000000U);
  } else {
    ClearHasBit(_impl_._has_bits_[1], 0x02000000U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.LayerParameter.shuffle_channel_param)
}
inline ::caffe::ShuffleChannelParameter* PROTOBUF_NULLABLE LayerParameter::release_shuffle_channel_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[1], 0x02000000U);
  ::caffe::ShuffleChannelParameter* released = _impl_.shuffle_channel_param_;
  _impl_.shuffle_channel_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::ShuffleChannelParameter* PROTOBUF_NULLABLE LayerParameter::unsafe_arena_release_shuffle_channel_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.shuffle_channel_param)

  ClearHasBit(_impl_._has_bits_[1], 0x02000000U);
  ::caffe::ShuffleChannelParameter* temp = _impl_.shuffle_channel_param_;
  _impl_.shuffle_channel_param_ = nullptr;
  return temp;
}
inline ::caffe::ShuffleChannelParameter* PROTOBUF_NONNULL LayerParameter::_internal_mutable_shuffle_channel_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.shuffle_channel_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::ShuffleChannelParameter>(GetArena());
    _impl_.shuffle_channel_param_ = reinterpret_cast<::caffe::ShuffleChannelParameter*>(p);
  }
  return _impl_.shuffle_channel_param_;
}
inline ::caffe::ShuffleChannelParameter* PROTOBUF_NONNULL LayerParameter::mutable_shuffle_channel_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[1], 0x02000000U);
  ::caffe::ShuffleChannelParameter* _msg = _internal_mutable_shuffle_channel_param();
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.shuffle_channel_param)
  return _msg;
}
inline void LayerParameter::set_allocated_shuffle_channel_param(::caffe::ShuffleChannelParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.shuffle_channel_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[1], 0x02000000U);
  } else {
    ClearHasBit(_impl_._has_bits_[1], 0x02000000U);
  }

  _impl_.shuffle_channel_param_ = reinterpret_cast<::caffe::ShuffleChannelParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.shuffle_channel_param)
}

// optional .caffe.SigmoidParameter sigmoid_param = 124;
inline bool LayerParameter::has_sigmoid_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[1], 0x00000010U);
  PROTOBUF_ASSUME(!value || _impl_.sigmoid_param_ != nullptr);
  return value;
}
inline void LayerParameter::clear_sigmoid_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.sigmoid_param_ != nullptr) _impl_.sigmoid_param_->Clear();
  ClearHasBit(_impl_._has_bits_[1], 0x00000010U);
}
inline const ::caffe::SigmoidParameter& LayerParameter::_internal_sigmoid_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::SigmoidParameter* p = _impl_.sigmoid_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::SigmoidParameter>(&::caffe::SigmoidParameter_globals_);
}
inline const ::caffe::SigmoidParameter& LayerParameter::sigmoid_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.sigmoid_param)
  return _internal_sigmoid_param();
}
inline void LayerParameter::unsafe_arena_set_allocated_sigmoid_param(
    ::caffe::SigmoidParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.sigmoid_param_);
  }
  _impl_.sigmoid_param_ = reinterpret_cast<::caffe::SigmoidParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[1], 0x00000010U);
  } else {
    ClearHasBit(_impl_._has_bits_[1], 0x00000010U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.LayerParameter.sigmoid_param)
}
inline ::caffe::SigmoidParameter* PROTOBUF_NULLABLE LayerParameter::release_sigmoid_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[1], 0x00000010U);
  ::caffe::SigmoidParameter* released = _impl_.sigmoid_param_;
  _impl_.sigmoid_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::SigmoidParameter* PROTOBUF_NULLABLE LayerParameter::unsafe_arena_release_sigmoid_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.sigmoid_param)

  ClearHasBit(_impl_._has_bits_[1], 0x00000010U);
  ::caffe::SigmoidParameter* temp = _impl_.sigmoid_param_;
  _impl_.sigmoid_param_ = nullptr;
  return temp;
}
inline ::caffe::SigmoidParameter* PROTOBUF_NONNULL LayerParameter::_internal_mutable_sigmoid_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.sigmoid_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::SigmoidParameter>(GetArena());
    _impl_.sigmoid_param_ = reinterpret_cast<::caffe::SigmoidParameter*>(p);
  }
  return _impl_.sigmoid_param_;
}
inline ::caffe::SigmoidParameter* PROTOBUF_NONNULL LayerParameter::mutable_sigmoid_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[1], 0x00000010U);
  ::caffe::SigmoidParameter* _msg = _internal_mutable_sigmoid_param();
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.sigmoid_param)
  return _msg;
}
inline void LayerParameter::set_allocated_sigmoid_param(::caffe::SigmoidParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.sigmoid_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[1], 0x00000010U);
  } else {
    ClearHasBit(_impl_._has_bits_[1], 0x00000010U);
  }

  _impl_.sigmoid_param_ = reinterpret_cast<::caffe::SigmoidParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.sigmoid_param)
}

// optional .caffe.SmoothL1LossParameter smooth_l1_loss_param = 8266712;
inline bool LayerParameter::has_smooth_l1_loss_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[2], 0x00000040U);
  PROTOBUF_ASSUME(!value || _impl_.smooth_l1_loss_param_ != nullptr);
  return value;
}
inline void LayerParameter::clear_smooth_l1_loss_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.smooth_l1_loss_param_ != nullptr) _impl_.smooth_l1_loss_param_->Clear();
  ClearHasBit(_impl_._has_bits_[2], 0x00000040U);
}
inline const ::caffe::SmoothL1LossParameter& LayerParameter::_internal_smooth_l1_loss_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::SmoothL1LossParameter* p = _impl_.smooth_l1_loss_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::SmoothL1LossParameter>(&::caffe::SmoothL1LossParameter_globals_);
}
inline const ::caffe::SmoothL1LossParameter& LayerParameter::smooth_l1_loss_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.smooth_l1_loss_param)
  return _internal_smooth_l1_loss_param();
}
inline void LayerParameter::unsafe_arena_set_allocated_smooth_l1_loss_param(
    ::caffe::SmoothL1LossParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.smooth_l1_loss_param_);
  }
  _impl_.smooth_l1_loss_param_ = reinterpret_cast<::caffe::SmoothL1LossParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[2], 0x00000040U);
  } else {
    ClearHasBit(_impl_._has_bits_[2], 0x00000040U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.LayerParameter.smooth_l1_loss_param)
}
inline ::caffe::SmoothL1LossParameter* PROTOBUF_NULLABLE LayerParameter::release_smooth_l1_loss_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[2], 0x00000040U);
  ::caffe::SmoothL1LossParameter* released = _impl_.smooth_l1_loss_param_;
  _impl_.smooth_l1_loss_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::SmoothL1LossParameter* PROTOBUF_NULLABLE LayerParameter::unsafe_arena_release_smooth_l1_loss_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.smooth_l1_loss_param)

  ClearHasBit(_impl_._has_bits_[2], 0x00000040U);
  ::caffe::SmoothL1LossParameter* temp = _impl_.smooth_l1_loss_param_;
  _impl_.smooth_l1_loss_param_ = nullptr;
  return temp;
}
inline ::caffe::SmoothL1LossParameter* PROTOBUF_NONNULL LayerParameter::_internal_mutable_smooth_l1_loss_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.smooth_l1_loss_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::SmoothL1LossParameter>(GetArena());
    _impl_.smooth_l1_loss_param_ = reinterpret_cast<::caffe::SmoothL1LossParameter*>(p);
  }
  return _impl_.smooth_l1_loss_param_;
}
inline ::caffe::SmoothL1LossParameter* PROTOBUF_NONNULL LayerParameter::mutable_smooth_l1_loss_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[2], 0x00000040U);
  ::caffe::SmoothL1LossParameter* _msg = _internal_mutable_smooth_l1_loss_param();
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.smooth_l1_loss_param)
  return _msg;
}
inline void LayerParameter::set_allocated_smooth_l1_loss_param(::caffe::SmoothL1LossParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.smooth_l1_loss_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[2], 0x00000040U);
  } else {
    ClearHasBit(_impl_._has_bits_[2], 0x00000040U);
  }

  _impl_.smooth_l1_loss_param_ = reinterpret_cast<::caffe::SmoothL1LossParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.smooth_l1_loss_param)
}

// optional .caffe.SoftmaxParameter softmax_param = 125;
inline bool LayerParameter::has_softmax_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[1], 0x00000020U);
  PROTOBUF_ASSUME(!value || _impl_.softmax_param_ != nullptr);
  return value;
}
inline void LayerParameter::clear_softmax_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.softmax_param_ != nullptr) _impl_.softmax_param_->Clear();
  ClearHasBit(_impl_._has_bits_[1], 0x00000020U);
}
inline const ::caffe::SoftmaxParameter& LayerParameter::_internal_softmax_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::SoftmaxParameter* p = _impl_.softmax_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::SoftmaxParameter>(&::caffe::SoftmaxParameter_globals_);
}
inline const ::caffe::SoftmaxParameter& LayerParameter::softmax_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.softmax_param)
  return _internal_softmax_param();
}
inline void LayerParameter::unsafe_arena_set_allocated_softmax_param(
    ::caffe::SoftmaxParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.softmax_param_);
  }
  _impl_.softmax_param_ = reinterpret_cast<::caffe::SoftmaxParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[1], 0x00000020U);
  } else {
    ClearHasBit(_impl_._has_bits_[1], 0x00000020U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.LayerParameter.softmax_param)
}
inline ::caffe::SoftmaxParameter* PROTOBUF_NULLABLE LayerParameter::release_softmax_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[1], 0x00000020U);
  ::caffe::SoftmaxParameter* released = _impl_.softmax_param_;
  _impl_.softmax_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::SoftmaxParameter* PROTOBUF_NULLABLE LayerParameter::unsafe_arena_release_softmax_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.softmax_param)

  ClearHasBit(_impl_._has_bits_[1], 0x00000020U);
  ::caffe::SoftmaxParameter* temp = _impl_.softmax_param_;
  _impl_.softmax_param_ = nullptr;
  return temp;
}
inline ::caffe::SoftmaxParameter* PROTOBUF_NONNULL LayerParameter::_internal_mutable_softmax_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.softmax_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::SoftmaxParameter>(GetArena());
    _impl_.softmax_param_ = reinterpret_cast<::caffe::SoftmaxParameter*>(p);
  }
  return _impl_.softmax_param_;
}
inline ::caffe::SoftmaxParameter* PROTOBUF_NONNULL LayerParameter::mutable_softmax_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[1], 0x00000020U);
  ::caffe::SoftmaxParameter* _msg = _internal_mutable_softmax_param();
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.softmax_param)
  return _msg;
}
inline void LayerParameter::set_allocated_softmax_param(::caffe::SoftmaxParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.softmax_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[1], 0x00000020U);
  } else {
    ClearHasBit(_impl_._has_bits_[1], 0x00000020U);
  }

  _impl_.softmax_param_ = reinterpret_cast<::caffe::SoftmaxParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.softmax_param)
}

// optional .caffe.SPPParameter spp_param = 132;
inline bool LayerParameter::has_spp_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[1], 0x00001000U);
  PROTOBUF_ASSUME(!value || _impl_.spp_param_ != nullptr);
  return value;
}
inline void LayerParameter::clear_spp_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.spp_param_ != nullptr) _impl_.spp_param_->Clear();
  ClearHasBit(_impl_._has_bits_[1], 0x00001000U);
}
inline const ::caffe::SPPParameter& LayerParameter::_internal_spp_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::SPPParameter* p = _impl_.spp_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::SPPParameter>(&::caffe::SPPParameter_globals_);
}
inline const ::caffe::SPPParameter& LayerParameter::spp_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.spp_param)
  return _internal_spp_param();
}
inline void LayerParameter::unsafe_arena_set_allocated_spp_param(
    ::caffe::SPPParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.spp_param_);
  }
  _impl_.spp_param_ = reinterpret_cast<::caffe::SPPParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[1], 0x00001000U);
  } else {
    ClearHasBit(_impl_._has_bits_[1], 0x00001000U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.LayerParameter.spp_param)
}
inline ::caffe::SPPParameter* PROTOBUF_NULLABLE LayerParameter::release_spp_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[1], 0x00001000U);
  ::caffe::SPPParameter* released = _impl_.spp_param_;
  _impl_.spp_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::SPPParameter* PROTOBUF_NULLABLE LayerParameter::unsafe_arena_release_spp_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.spp_param)

  ClearHasBit(_impl_._has_bits_[1], 0x00001000U);
  ::caffe::SPPParameter* temp = _impl_.spp_param_;
  _impl_.spp_param_ = nullptr;
  return temp;
}
inline ::caffe::SPPParameter* PROTOBUF_NONNULL LayerParameter::_internal_mutable_spp_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.spp_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::SPPParameter>(GetArena());
    _impl_.spp_param_ = reinterpret_cast<::caffe::SPPParameter*>(p);
  }
  return _impl_.spp_param_;
}
inline ::caffe::SPPParameter* PROTOBUF_NONNULL LayerParameter::mutable_spp_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[1], 0x00001000U);
  ::caffe::SPPParameter* _msg = _internal_mutable_spp_param();
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.spp_param)
  return _msg;
}
inline void LayerParameter::set_allocated_spp_param(::caffe::SPPParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.spp_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[1], 0x00001000U);
  } else {
    ClearHasBit(_impl_._has_bits_[1], 0x00001000U);
  }

  _impl_.spp_param_ = reinterpret_cast<::caffe::SPPParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.spp_param)
}

// optional .caffe.SliceParameter slice_param = 126;
inline bool LayerParameter::has_slice_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[1], 0x00000040U);
  PROTOBUF_ASSUME(!value || _impl_.slice_param_ != nullptr);
  return value;
}
inline void LayerParameter::clear_slice_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.slice_param_ != nullptr) _impl_.slice_param_->Clear();
  ClearHasBit(_impl_._has_bits_[1], 0x00000040U);
}
inline const ::caffe::SliceParameter& LayerParameter::_internal_slice_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::SliceParameter* p = _impl_.slice_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::SliceParameter>(&::caffe::SliceParameter_globals_);
}
inline const ::caffe::SliceParameter& LayerParameter::slice_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.slice_param)
  return _internal_slice_param();
}
inline void LayerParameter::unsafe_arena_set_allocated_slice_param(
    ::caffe::SliceParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.slice_param_);
  }
  _impl_.slice_param_ = reinterpret_cast<::caffe::SliceParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[1], 0x00000040U);
  } else {
    ClearHasBit(_impl_._has_bits_[1], 0x00000040U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.LayerParameter.slice_param)
}
inline ::caffe::SliceParameter* PROTOBUF_NULLABLE LayerParameter::release_slice_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[1], 0x00000040U);
  ::caffe::SliceParameter* released = _impl_.slice_param_;
  _impl_.slice_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::SliceParameter* PROTOBUF_NULLABLE LayerParameter::unsafe_arena_release_slice_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.slice_param)

  ClearHasBit(_impl_._has_bits_[1], 0x00000040U);
  ::caffe::SliceParameter* temp = _impl_.slice_param_;
  _impl_.slice_param_ = nullptr;
  return temp;
}
inline ::caffe::SliceParameter* PROTOBUF_NONNULL LayerParameter::_internal_mutable_slice_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.slice_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::SliceParameter>(GetArena());
    _impl_.slice_param_ = reinterpret_cast<::caffe::SliceParameter*>(p);
  }
  return _impl_.slice_param_;
}
inline ::caffe::SliceParameter* PROTOBUF_NONNULL LayerParameter::mutable_slice_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[1], 0x00000040U);
  ::caffe::SliceParameter* _msg = _internal_mutable_slice_param();
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.slice_param)
  return _msg;
}
inline void LayerParameter::set_allocated_slice_param(::caffe::SliceParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.slice_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[1], 0x00000040U);
  } else {
    ClearHasBit(_impl_._has_bits_[1], 0x00000040U);
  }

  _impl_.slice_param_ = reinterpret_cast<::caffe::SliceParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.slice_param)
}

// optional .caffe.TanHParameter tanh_param = 127;
inline bool LayerParameter::has_tanh_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[1], 0x00000080U);
  PROTOBUF_ASSUME(!value || _impl_.tanh_param_ != nullptr);
  return value;
}
inline void LayerParameter::clear_tanh_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.tanh_param_ != nullptr) _impl_.tanh_param_->Clear();
  ClearHasBit(_impl_._has_bits_[1], 0x00000080U);
}
inline const ::caffe::TanHParameter& LayerParameter::_internal_tanh_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::TanHParameter* p = _impl_.tanh_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::TanHParameter>(&::caffe::TanHParameter_globals_);
}
inline const ::caffe::TanHParameter& LayerParameter::tanh_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.tanh_param)
  return _internal_tanh_param();
}
inline void LayerParameter::unsafe_arena_set_allocated_tanh_param(
    ::caffe::TanHParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.tanh_param_);
  }
  _impl_.tanh_param_ = reinterpret_cast<::caffe::TanHParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[1], 0x00000080U);
  } else {
    ClearHasBit(_impl_._has_bits_[1], 0x00000080U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.LayerParameter.tanh_param)
}
inline ::caffe::TanHParameter* PROTOBUF_NULLABLE LayerParameter::release_tanh_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[1], 0x00000080U);
  ::caffe::TanHParameter* released = _impl_.tanh_param_;
  _impl_.tanh_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::TanHParameter* PROTOBUF_NULLABLE LayerParameter::unsafe_arena_release_tanh_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.tanh_param)

  ClearHasBit(_impl_._has_bits_[1], 0x00000080U);
  ::caffe::TanHParameter* temp = _impl_.tanh_param_;
  _impl_.tanh_param_ = nullptr;
  return temp;
}
inline ::caffe::TanHParameter* PROTOBUF_NONNULL LayerParameter::_internal_mutable_tanh_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.tanh_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::TanHParameter>(GetArena());
    _impl_.tanh_param_ = reinterpret_cast<::caffe::TanHParameter*>(p);
  }
  return _impl_.tanh_param_;
}
inline ::caffe::TanHParameter* PROTOBUF_NONNULL LayerParameter::mutable_tanh_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[1], 0x00000080U);
  ::caffe::TanHParameter* _msg = _internal_mutable_tanh_param();
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.tanh_param)
  return _msg;
}
inline void LayerParameter::set_allocated_tanh_param(::caffe::TanHParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.tanh_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[1], 0x00000080U);
  } else {
    ClearHasBit(_impl_._has_bits_[1], 0x00000080U);
  }

  _impl_.tanh_param_ = reinterpret_cast<::caffe::TanHParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.tanh_param)
}

// optional .caffe.ThresholdParameter threshold_param = 128;
inline bool LayerParameter::has_threshold_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[1], 0x00000100U);
  PROTOBUF_ASSUME(!value || _impl_.threshold_param_ != nullptr);
  return value;
}
inline void LayerParameter::clear_threshold_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.threshold_param_ != nullptr) _impl_.threshold_param_->Clear();
  ClearHasBit(_impl_._has_bits_[1], 0x00000100U);
}
inline const ::caffe::ThresholdParameter& LayerParameter::_internal_threshold_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::ThresholdParameter* p = _impl_.threshold_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::ThresholdParameter>(&::caffe::ThresholdParameter_globals_);
}
inline const ::caffe::ThresholdParameter& LayerParameter::threshold_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.threshold_param)
  return _internal_threshold_param();
}
inline void LayerParameter::unsafe_arena_set_allocated_threshold_param(
    ::caffe::ThresholdParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.threshold_param_);
  }
  _impl_.threshold_param_ = reinterpret_cast<::caffe::ThresholdParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[1], 0x00000100U);
  } else {
    ClearHasBit(_impl_._has_bits_[1], 0x00000100U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.LayerParameter.threshold_param)
}
inline ::caffe::ThresholdParameter* PROTOBUF_NULLABLE LayerParameter::release_threshold_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[1], 0x00000100U);
  ::caffe::ThresholdParameter* released = _impl_.threshold_param_;
  _impl_.threshold_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::ThresholdParameter* PROTOBUF_NULLABLE LayerParameter::unsafe_arena_release_threshold_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.threshold_param)

  ClearHasBit(_impl_._has_bits_[1], 0x00000100U);
  ::caffe::ThresholdParameter* temp = _impl_.threshold_param_;
  _impl_.threshold_param_ = nullptr;
  return temp;
}
inline ::caffe::ThresholdParameter* PROTOBUF_NONNULL LayerParameter::_internal_mutable_threshold_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.threshold_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::ThresholdParameter>(GetArena());
    _impl_.threshold_param_ = reinterpret_cast<::caffe::ThresholdParameter*>(p);
  }
  return _impl_.threshold_param_;
}
inline ::caffe::ThresholdParameter* PROTOBUF_NONNULL LayerParameter::mutable_threshold_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[1], 0x00000100U);
  ::caffe::ThresholdParameter* _msg = _internal_mutable_threshold_param();
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.threshold_param)
  return _msg;
}
inline void LayerParameter::set_allocated_threshold_param(::caffe::ThresholdParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.threshold_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[1], 0x00000100U);
  } else {
    ClearHasBit(_impl_._has_bits_[1], 0x00000100U);
  }

  _impl_.threshold_param_ = reinterpret_cast<::caffe::ThresholdParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.threshold_param)
}

// optional .caffe.TileParameter tile_param = 138;
inline bool LayerParameter::has_tile_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[1], 0x00040000U);
  PROTOBUF_ASSUME(!value || _impl_.tile_param_ != nullptr);
  return value;
}
inline void LayerParameter::clear_tile_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.tile_param_ != nullptr) _impl_.tile_param_->Clear();
  ClearHasBit(_impl_._has_bits_[1], 0x00040000U);
}
inline const ::caffe::TileParameter& LayerParameter::_internal_tile_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::TileParameter* p = _impl_.tile_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::TileParameter>(&::caffe::TileParameter_globals_);
}
inline const ::caffe::TileParameter& LayerParameter::tile_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.tile_param)
  return _internal_tile_param();
}
inline void LayerParameter::unsafe_arena_set_allocated_tile_param(
    ::caffe::TileParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.tile_param_);
  }
  _impl_.tile_param_ = reinterpret_cast<::caffe::TileParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[1], 0x00040000U);
  } else {
    ClearHasBit(_impl_._has_bits_[1], 0x00040000U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.LayerParameter.tile_param)
}
inline ::caffe::TileParameter* PROTOBUF_NULLABLE LayerParameter::release_tile_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[1], 0x00040000U);
  ::caffe::TileParameter* released = _impl_.tile_param_;
  _impl_.tile_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::TileParameter* PROTOBUF_NULLABLE LayerParameter::unsafe_arena_release_tile_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.tile_param)

  ClearHasBit(_impl_._has_bits_[1], 0x00040000U);
  ::caffe::TileParameter* temp = _impl_.tile_param_;
  _impl_.tile_param_ = nullptr;
  return temp;
}
inline ::caffe::TileParameter* PROTOBUF_NONNULL LayerParameter::_internal_mutable_tile_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.tile_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::TileParameter>(GetArena());
    _impl_.tile_param_ = reinterpret_cast<::caffe::TileParameter*>(p);
  }
  return _impl_.tile_param_;
}
inline ::caffe::TileParameter* PROTOBUF_NONNULL LayerParameter::mutable_tile_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[1], 0x00040000U);
  ::caffe::TileParameter* _msg = _internal_mutable_tile_param();
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.tile_param)
  return _msg;
}
inline void LayerParameter::set_allocated_tile_param(::caffe::TileParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.tile_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[1], 0x00040000U);
  } else {
    ClearHasBit(_impl_._has_bits_[1], 0x00040000U);
  }

  _impl_.tile_param_ = reinterpret_cast<::caffe::TileParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.tile_param)
}

// optional .caffe.WindowDataParameter window_data_param = 129;
inline bool LayerParameter::has_window_data_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[1], 0x00000200U);
  PROTOBUF_ASSUME(!value || _impl_.window_data_param_ != nullptr);
  return value;
}
inline void LayerParameter::clear_window_data_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.window_data_param_ != nullptr) _impl_.window_data_param_->Clear();
  ClearHasBit(_impl_._has_bits_[1], 0x00000200U);
}
inline const ::caffe::WindowDataParameter& LayerParameter::_internal_window_data_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::WindowDataParameter* p = _impl_.window_data_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::WindowDataParameter>(&::caffe::WindowDataParameter_globals_);
}
inline const ::caffe::WindowDataParameter& LayerParameter::window_data_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.LayerParameter.window_data_param)
  return _internal_window_data_param();
}
inline void LayerParameter::unsafe_arena_set_allocated_window_data_param(
    ::caffe::WindowDataParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.window_data_param_);
  }
  _impl_.window_data_param_ = reinterpret_cast<::caffe::WindowDataParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[1], 0x00000200U);
  } else {
    ClearHasBit(_impl_._has_bits_[1], 0x00000200U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.LayerParameter.window_data_param)
}
inline ::caffe::WindowDataParameter* PROTOBUF_NULLABLE LayerParameter::release_window_data_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[1], 0x00000200U);
  ::caffe::WindowDataParameter* released = _impl_.window_data_param_;
  _impl_.window_data_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::WindowDataParameter* PROTOBUF_NULLABLE LayerParameter::unsafe_arena_release_window_data_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.LayerParameter.window_data_param)

  ClearHasBit(_impl_._has_bits_[1], 0x00000200U);
  ::caffe::WindowDataParameter* temp = _impl_.window_data_param_;
  _impl_.window_data_param_ = nullptr;
  return temp;
}
inline ::caffe::WindowDataParameter* PROTOBUF_NONNULL LayerParameter::_internal_mutable_window_data_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.window_data_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::WindowDataParameter>(GetArena());
    _impl_.window_data_param_ = reinterpret_cast<::caffe::WindowDataParameter*>(p);
  }
  return _impl_.window_data_param_;
}
inline ::caffe::WindowDataParameter* PROTOBUF_NONNULL LayerParameter::mutable_window_data_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[1], 0x00000200U);
  ::caffe::WindowDataParameter* _msg = _internal_mutable_window_data_param();
  // @@protoc_insertion_point(field_mutable:caffe.LayerParameter.window_data_param)
  return _msg;
}
inline void LayerParameter::set_allocated_window_data_param(::caffe::WindowDataParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.window_data_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[1], 0x00000200U);
  } else {
    ClearHasBit(_impl_._has_bits_[1], 0x00000200U);
  }

  _impl_.window_data_param_ = reinterpret_cast<::caffe::WindowDataParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.LayerParameter.window_data_param)
}

// -------------------------------------------------------------------

// TransformationParameter

// optional float scale = 1 [default = 1];
inline bool TransformationParameter::has_scale() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000040U);
  return value;
}
inline void TransformationParameter::clear_scale() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.scale_ = 1;
  ClearHasBit(_impl_._has_bits_[0], 0x00000040U);
}
inline float TransformationParameter::scale() const {
  // @@protoc_insertion_point(field_get:caffe.TransformationParameter.scale)
  return _internal_scale();
}
inline void TransformationParameter::set_scale(float value) {
  _internal_set_scale(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000040U);
  // @@protoc_insertion_point(field_set:caffe.TransformationParameter.scale)
}
inline float TransformationParameter::_internal_scale() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.scale_;
}
inline void TransformationParameter::_internal_set_scale(float value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.scale_ = value;
}

// optional bool mirror = 2 [default = false];
inline bool TransformationParameter::has_mirror() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000008U);
  return value;
}
inline void TransformationParameter::clear_mirror() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.mirror_ = false;
  ClearHasBit(_impl_._has_bits_[0], 0x00000008U);
}
inline bool TransformationParameter::mirror() const {
  // @@protoc_insertion_point(field_get:caffe.TransformationParameter.mirror)
  return _internal_mirror();
}
inline void TransformationParameter::set_mirror(bool value) {
  _internal_set_mirror(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000008U);
  // @@protoc_insertion_point(field_set:caffe.TransformationParameter.mirror)
}
inline bool TransformationParameter::_internal_mirror() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.mirror_;
}
inline void TransformationParameter::_internal_set_mirror(bool value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.mirror_ = value;
}

// optional uint32 crop_size = 3 [default = 0];
inline bool TransformationParameter::has_crop_size() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000004U);
  return value;
}
inline void TransformationParameter::clear_crop_size() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.crop_size_ = 0u;
  ClearHasBit(_impl_._has_bits_[0], 0x00000004U);
}
inline ::uint32_t TransformationParameter::crop_size() const {
  // @@protoc_insertion_point(field_get:caffe.TransformationParameter.crop_size)
  return _internal_crop_size();
}
inline void TransformationParameter::set_crop_size(::uint32_t value) {
  _internal_set_crop_size(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000004U);
  // @@protoc_insertion_point(field_set:caffe.TransformationParameter.crop_size)
}
inline ::uint32_t TransformationParameter::_internal_crop_size() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.crop_size_;
}
inline void TransformationParameter::_internal_set_crop_size(::uint32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.crop_size_ = value;
}

// optional string mean_file = 4;
inline bool TransformationParameter::has_mean_file() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000002U);
  return value;
}
inline void TransformationParameter::clear_mean_file() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.mean_file_.ClearToEmpty();
  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
}
inline const ::std::string& TransformationParameter::mean_file() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.TransformationParameter.mean_file)
  return _internal_mean_file();
}
template <typename Arg_, typename... Args_>
PROTOBUF_ALWAYS_INLINE void TransformationParameter::set_mean_file(Arg_&& arg, Args_... args) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  _impl_.mean_file_.Set(static_cast<Arg_&&>(arg), args..., GetArena());
  // @@protoc_insertion_point(field_set:caffe.TransformationParameter.mean_file)
}
inline ::std::string* PROTOBUF_NONNULL TransformationParameter::mutable_mean_file()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  ::std::string* _s = _internal_mutable_mean_file();
  // @@protoc_insertion_point(field_mutable:caffe.TransformationParameter.mean_file)
  return _s;
}
inline const ::std::string& TransformationParameter::_internal_mean_file() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.mean_file_.Get();
}
inline void TransformationParameter::_internal_set_mean_file(const ::std::string& value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.mean_file_.Set(value, GetArena());
}
inline ::std::string* PROTOBUF_NONNULL TransformationParameter::_internal_mutable_mean_file() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _impl_.mean_file_.Mutable( GetArena());
}
inline ::std::string* PROTOBUF_NULLABLE TransformationParameter::release_mean_file() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.TransformationParameter.mean_file)
  if (!CheckHasBit(_impl_._has_bits_[0], 0x00000002U)) {
    return nullptr;
  }
  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
  auto* released = _impl_.mean_file_.Release();
  if (::google::protobuf::internal::DebugHardenForceCopyDefaultString()) {
    _impl_.mean_file_.Set("", GetArena());
  }
  return released;
}
inline void TransformationParameter::set_allocated_mean_file(::std::string* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
  }
  _impl_.mean_file_.SetAllocated(value, GetArena());
  if (::google::protobuf::internal::DebugHardenForceCopyDefaultString() && _impl_.mean_file_.IsDefault()) {
    _impl_.mean_file_.Set("", GetArena());
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.TransformationParameter.mean_file)
}

// repeated float mean_value = 5;
inline int TransformationParameter::_internal_mean_value_size() const {
  return _internal_mean_value().size();
}
inline int TransformationParameter::mean_value_size() const {
  return _internal_mean_value_size();
}
inline void TransformationParameter::clear_mean_value() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.mean_value_.Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
}
inline float TransformationParameter::mean_value(int index) const {
  // @@protoc_insertion_point(field_get:caffe.TransformationParameter.mean_value)
  return _internal_mean_value().Get(index);
}
inline void TransformationParameter::set_mean_value(int index, float value) {
  _internal_mutable_mean_value()->Set(index, value);
  // @@protoc_insertion_point(field_set:caffe.TransformationParameter.mean_value)
}
inline void TransformationParameter::add_mean_value(float value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _internal_mutable_mean_value()
      ->InternalAddWithArena<const ::google::protobuf::MessageLite*>(
          internal_visibility(), this, value);
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_add:caffe.TransformationParameter.mean_value)
}
inline const ::google::protobuf::RepeatedField<float>& TransformationParameter::mean_value() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_list:caffe.TransformationParameter.mean_value)
  return _internal_mean_value();
}
inline ::google::protobuf::RepeatedField<float>* PROTOBUF_NONNULL TransformationParameter::mutable_mean_value()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_mutable_list:caffe.TransformationParameter.mean_value)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _internal_mutable_mean_value();
}
inline const ::google::protobuf::RepeatedField<float>&
TransformationParameter::_internal_mean_value() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.mean_value_;
}
inline ::google::protobuf::RepeatedField<float>* PROTOBUF_NONNULL
TransformationParameter::_internal_mutable_mean_value() {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return &_impl_.mean_value_;
}

// optional bool force_color = 6 [default = false];
inline bool TransformationParameter::has_force_color() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000010U);
  return value;
}
inline void TransformationParameter::clear_force_color() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.force_color_ = false;
  ClearHasBit(_impl_._has_bits_[0], 0x00000010U);
}
inline bool TransformationParameter::force_color() const {
  // @@protoc_insertion_point(field_get:caffe.TransformationParameter.force_color)
  return _internal_force_color();
}
inline void TransformationParameter::set_force_color(bool value) {
  _internal_set_force_color(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000010U);
  // @@protoc_insertion_point(field_set:caffe.TransformationParameter.force_color)
}
inline bool TransformationParameter::_internal_force_color() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.force_color_;
}
inline void TransformationParameter::_internal_set_force_color(bool value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.force_color_ = value;
}

// optional bool force_gray = 7 [default = false];
inline bool TransformationParameter::has_force_gray() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000020U);
  return value;
}
inline void TransformationParameter::clear_force_gray() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.force_gray_ = false;
  ClearHasBit(_impl_._has_bits_[0], 0x00000020U);
}
inline bool TransformationParameter::force_gray() const {
  // @@protoc_insertion_point(field_get:caffe.TransformationParameter.force_gray)
  return _internal_force_gray();
}
inline void TransformationParameter::set_force_gray(bool value) {
  _internal_set_force_gray(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000020U);
  // @@protoc_insertion_point(field_set:caffe.TransformationParameter.force_gray)
}
inline bool TransformationParameter::_internal_force_gray() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.force_gray_;
}
inline void TransformationParameter::_internal_set_force_gray(bool value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.force_gray_ = value;
}

// -------------------------------------------------------------------

// ResizeParameter

// optional float prob = 1 [default = 1];
inline bool ResizeParameter::has_prob() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000040U);
  return value;
}
inline void ResizeParameter::clear_prob() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.prob_ = 1;
  ClearHasBit(_impl_._has_bits_[0], 0x00000040U);
}
inline float ResizeParameter::prob() const {
  // @@protoc_insertion_point(field_get:caffe.ResizeParameter.prob)
  return _internal_prob();
}
inline void ResizeParameter::set_prob(float value) {
  _internal_set_prob(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000040U);
  // @@protoc_insertion_point(field_set:caffe.ResizeParameter.prob)
}
inline float ResizeParameter::_internal_prob() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.prob_;
}
inline void ResizeParameter::_internal_set_prob(float value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.prob_ = value;
}

// optional .caffe.ResizeParameter.Resize_mode resize_mode = 2 [default = WARP];
inline bool ResizeParameter::has_resize_mode() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000080U);
  return value;
}
inline void ResizeParameter::clear_resize_mode() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.resize_mode_ = 1;
  ClearHasBit(_impl_._has_bits_[0], 0x00000080U);
}
inline ::caffe::ResizeParameter_Resize_mode ResizeParameter::resize_mode() const {
  // @@protoc_insertion_point(field_get:caffe.ResizeParameter.resize_mode)
  return _internal_resize_mode();
}
inline void ResizeParameter::set_resize_mode(::caffe::ResizeParameter_Resize_mode value) {
  _internal_set_resize_mode(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000080U);
  // @@protoc_insertion_point(field_set:caffe.ResizeParameter.resize_mode)
}
inline ::caffe::ResizeParameter_Resize_mode ResizeParameter::_internal_resize_mode() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return static_cast<::caffe::ResizeParameter_Resize_mode>(_impl_.resize_mode_);
}
inline void ResizeParameter::_internal_set_resize_mode(::caffe::ResizeParameter_Resize_mode value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);

                                          assert(::google::protobuf::internal::ValidateEnum(
                                              value, ::caffe::ResizeParameter_Resize_mode_internal_data_));
                                          _impl_.resize_mode_ = value;
}

// optional uint32 height = 3 [default = 0];
inline bool ResizeParameter::has_height() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000004U);
  return value;
}
inline void ResizeParameter::clear_height() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.height_ = 0u;
  ClearHasBit(_impl_._has_bits_[0], 0x00000004U);
}
inline ::uint32_t ResizeParameter::height() const {
  // @@protoc_insertion_point(field_get:caffe.ResizeParameter.height)
  return _internal_height();
}
inline void ResizeParameter::set_height(::uint32_t value) {
  _internal_set_height(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000004U);
  // @@protoc_insertion_point(field_set:caffe.ResizeParameter.height)
}
inline ::uint32_t ResizeParameter::_internal_height() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.height_;
}
inline void ResizeParameter::_internal_set_height(::uint32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.height_ = value;
}

// optional uint32 width = 4 [default = 0];
inline bool ResizeParameter::has_width() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000008U);
  return value;
}
inline void ResizeParameter::clear_width() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.width_ = 0u;
  ClearHasBit(_impl_._has_bits_[0], 0x00000008U);
}
inline ::uint32_t ResizeParameter::width() const {
  // @@protoc_insertion_point(field_get:caffe.ResizeParameter.width)
  return _internal_width();
}
inline void ResizeParameter::set_width(::uint32_t value) {
  _internal_set_width(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000008U);
  // @@protoc_insertion_point(field_set:caffe.ResizeParameter.width)
}
inline ::uint32_t ResizeParameter::_internal_width() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.width_;
}
inline void ResizeParameter::_internal_set_width(::uint32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.width_ = value;
}

// optional uint32 height_scale = 8 [default = 0];
inline bool ResizeParameter::has_height_scale() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000010U);
  return value;
}
inline void ResizeParameter::clear_height_scale() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.height_scale_ = 0u;
  ClearHasBit(_impl_._has_bits_[0], 0x00000010U);
}
inline ::uint32_t ResizeParameter::height_scale() const {
  // @@protoc_insertion_point(field_get:caffe.ResizeParameter.height_scale)
  return _internal_height_scale();
}
inline void ResizeParameter::set_height_scale(::uint32_t value) {
  _internal_set_height_scale(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000010U);
  // @@protoc_insertion_point(field_set:caffe.ResizeParameter.height_scale)
}
inline ::uint32_t ResizeParameter::_internal_height_scale() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.height_scale_;
}
inline void ResizeParameter::_internal_set_height_scale(::uint32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.height_scale_ = value;
}

// optional uint32 width_scale = 9 [default = 0];
inline bool ResizeParameter::has_width_scale() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000020U);
  return value;
}
inline void ResizeParameter::clear_width_scale() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.width_scale_ = 0u;
  ClearHasBit(_impl_._has_bits_[0], 0x00000020U);
}
inline ::uint32_t ResizeParameter::width_scale() const {
  // @@protoc_insertion_point(field_get:caffe.ResizeParameter.width_scale)
  return _internal_width_scale();
}
inline void ResizeParameter::set_width_scale(::uint32_t value) {
  _internal_set_width_scale(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000020U);
  // @@protoc_insertion_point(field_set:caffe.ResizeParameter.width_scale)
}
inline ::uint32_t ResizeParameter::_internal_width_scale() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.width_scale_;
}
inline void ResizeParameter::_internal_set_width_scale(::uint32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.width_scale_ = value;
}

// optional .caffe.ResizeParameter.Pad_mode pad_mode = 5 [default = CONSTANT];
inline bool ResizeParameter::has_pad_mode() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000100U);
  return value;
}
inline void ResizeParameter::clear_pad_mode() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.pad_mode_ = 1;
  ClearHasBit(_impl_._has_bits_[0], 0x00000100U);
}
inline ::caffe::ResizeParameter_Pad_mode ResizeParameter::pad_mode() const {
  // @@protoc_insertion_point(field_get:caffe.ResizeParameter.pad_mode)
  return _internal_pad_mode();
}
inline void ResizeParameter::set_pad_mode(::caffe::ResizeParameter_Pad_mode value) {
  _internal_set_pad_mode(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000100U);
  // @@protoc_insertion_point(field_set:caffe.ResizeParameter.pad_mode)
}
inline ::caffe::ResizeParameter_Pad_mode ResizeParameter::_internal_pad_mode() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return static_cast<::caffe::ResizeParameter_Pad_mode>(_impl_.pad_mode_);
}
inline void ResizeParameter::_internal_set_pad_mode(::caffe::ResizeParameter_Pad_mode value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);

                                          assert(::google::protobuf::internal::ValidateEnum(
                                              value, ::caffe::ResizeParameter_Pad_mode_internal_data_));
                                          _impl_.pad_mode_ = value;
}

// repeated float pad_value = 6;
inline int ResizeParameter::_internal_pad_value_size() const {
  return _internal_pad_value().size();
}
inline int ResizeParameter::pad_value_size() const {
  return _internal_pad_value_size();
}
inline void ResizeParameter::clear_pad_value() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.pad_value_.Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
}
inline float ResizeParameter::pad_value(int index) const {
  // @@protoc_insertion_point(field_get:caffe.ResizeParameter.pad_value)
  return _internal_pad_value().Get(index);
}
inline void ResizeParameter::set_pad_value(int index, float value) {
  _internal_mutable_pad_value()->Set(index, value);
  // @@protoc_insertion_point(field_set:caffe.ResizeParameter.pad_value)
}
inline void ResizeParameter::add_pad_value(float value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _internal_mutable_pad_value()
      ->InternalAddWithArena<const ::google::protobuf::MessageLite*>(
          internal_visibility(), this, value);
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_add:caffe.ResizeParameter.pad_value)
}
inline const ::google::protobuf::RepeatedField<float>& ResizeParameter::pad_value() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_list:caffe.ResizeParameter.pad_value)
  return _internal_pad_value();
}
inline ::google::protobuf::RepeatedField<float>* PROTOBUF_NONNULL ResizeParameter::mutable_pad_value()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_mutable_list:caffe.ResizeParameter.pad_value)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _internal_mutable_pad_value();
}
inline const ::google::protobuf::RepeatedField<float>&
ResizeParameter::_internal_pad_value() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.pad_value_;
}
inline ::google::protobuf::RepeatedField<float>* PROTOBUF_NONNULL
ResizeParameter::_internal_mutable_pad_value() {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return &_impl_.pad_value_;
}

// repeated .caffe.ResizeParameter.Interp_mode interp_mode = 7;
inline int ResizeParameter::_internal_interp_mode_size() const {
  return _internal_interp_mode().size();
}
inline int ResizeParameter::interp_mode_size() const {
  return _internal_interp_mode_size();
}
inline void ResizeParameter::clear_interp_mode() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.interp_mode_.Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
}
inline ::caffe::ResizeParameter_Interp_mode ResizeParameter::interp_mode(int index) const {
  // @@protoc_insertion_point(field_get:caffe.ResizeParameter.interp_mode)
  return static_cast<::caffe::ResizeParameter_Interp_mode>(_internal_interp_mode().Get(index));
}
inline void ResizeParameter::set_interp_mode(int index, ::caffe::ResizeParameter_Interp_mode value) {

                                          assert(::google::protobuf::internal::ValidateEnum(
                                              value, ::caffe::ResizeParameter_Interp_mode_internal_data_));
                                          _internal_mutable_interp_mode()->Set(index, value);
  // @@protoc_insertion_point(field_set:caffe.ResizeParameter.interp_mode)
}
inline void ResizeParameter::add_interp_mode(::caffe::ResizeParameter_Interp_mode value) {

                                          assert(::google::protobuf::internal::ValidateEnum(
                                              value, ::caffe::ResizeParameter_Interp_mode_internal_data_));
                                          ::google::protobuf::internal::TSanWrite(&_impl_);
  _internal_mutable_interp_mode()
      ->InternalAddWithArena<const ::google::protobuf::MessageLite*>(
          internal_visibility(), this, value);
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  // @@protoc_insertion_point(field_add:caffe.ResizeParameter.interp_mode)
}
inline const ::google::protobuf::RepeatedField<int>& ResizeParameter::interp_mode() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_list:caffe.ResizeParameter.interp_mode)
  return _internal_interp_mode();
}
inline ::google::protobuf::RepeatedField<int>* PROTOBUF_NONNULL ResizeParameter::mutable_interp_mode()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  // @@protoc_insertion_point(field_mutable_list:caffe.ResizeParameter.interp_mode)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _internal_mutable_interp_mode();
}
inline const ::google::protobuf::RepeatedField<int>& ResizeParameter::_internal_interp_mode()
    const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.interp_mode_;
}
inline ::google::protobuf::RepeatedField<int>* PROTOBUF_NONNULL
ResizeParameter::_internal_mutable_interp_mode() {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return &_impl_.interp_mode_;
}

// -------------------------------------------------------------------

// LossParameter

// optional int32 ignore_label = 1;
inline bool LossParameter::has_ignore_label() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000001U);
  return value;
}
inline void LossParameter::clear_ignore_label() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.ignore_label_ = 0;
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
}
inline ::int32_t LossParameter::ignore_label() const {
  // @@protoc_insertion_point(field_get:caffe.LossParameter.ignore_label)
  return _internal_ignore_label();
}
inline void LossParameter::set_ignore_label(::int32_t value) {
  _internal_set_ignore_label(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_set:caffe.LossParameter.ignore_label)
}
inline ::int32_t LossParameter::_internal_ignore_label() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.ignore_label_;
}
inline void LossParameter::_internal_set_ignore_label(::int32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.ignore_label_ = value;
}

// optional .caffe.LossParameter.NormalizationMode normalization = 3 [default = VALID];
inline bool LossParameter::has_normalization() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000004U);
  return value;
}
inline void LossParameter::clear_normalization() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.normalization_ = 1;
  ClearHasBit(_impl_._has_bits_[0], 0x00000004U);
}
inline ::caffe::LossParameter_NormalizationMode LossParameter::normalization() const {
  // @@protoc_insertion_point(field_get:caffe.LossParameter.normalization)
  return _internal_normalization();
}
inline void LossParameter::set_normalization(::caffe::LossParameter_NormalizationMode value) {
  _internal_set_normalization(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000004U);
  // @@protoc_insertion_point(field_set:caffe.LossParameter.normalization)
}
inline ::caffe::LossParameter_NormalizationMode LossParameter::_internal_normalization() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return static_cast<::caffe::LossParameter_NormalizationMode>(_impl_.normalization_);
}
inline void LossParameter::_internal_set_normalization(::caffe::LossParameter_NormalizationMode value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);

                                          assert(::google::protobuf::internal::ValidateEnum(
                                              value, ::caffe::LossParameter_NormalizationMode_internal_data_));
                                          _impl_.normalization_ = value;
}

// optional bool normalize = 2;
inline bool LossParameter::has_normalize() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000002U);
  return value;
}
inline void LossParameter::clear_normalize() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.normalize_ = false;
  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
}
inline bool LossParameter::normalize() const {
  // @@protoc_insertion_point(field_get:caffe.LossParameter.normalize)
  return _internal_normalize();
}
inline void LossParameter::set_normalize(bool value) {
  _internal_set_normalize(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  // @@protoc_insertion_point(field_set:caffe.LossParameter.normalize)
}
inline bool LossParameter::_internal_normalize() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.normalize_;
}
inline void LossParameter::_internal_set_normalize(bool value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.normalize_ = value;
}

// -------------------------------------------------------------------

// AccuracyParameter

// optional uint32 top_k = 1 [default = 1];
inline bool AccuracyParameter::has_top_k() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000002U);
  return value;
}
inline void AccuracyParameter::clear_top_k() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.top_k_ = 1u;
  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
}
inline ::uint32_t AccuracyParameter::top_k() const {
  // @@protoc_insertion_point(field_get:caffe.AccuracyParameter.top_k)
  return _internal_top_k();
}
inline void AccuracyParameter::set_top_k(::uint32_t value) {
  _internal_set_top_k(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  // @@protoc_insertion_point(field_set:caffe.AccuracyParameter.top_k)
}
inline ::uint32_t AccuracyParameter::_internal_top_k() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.top_k_;
}
inline void AccuracyParameter::_internal_set_top_k(::uint32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.top_k_ = value;
}

// optional int32 axis = 2 [default = 1];
inline bool AccuracyParameter::has_axis() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000004U);
  return value;
}
inline void AccuracyParameter::clear_axis() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.axis_ = 1;
  ClearHasBit(_impl_._has_bits_[0], 0x00000004U);
}
inline ::int32_t AccuracyParameter::axis() const {
  // @@protoc_insertion_point(field_get:caffe.AccuracyParameter.axis)
  return _internal_axis();
}
inline void AccuracyParameter::set_axis(::int32_t value) {
  _internal_set_axis(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000004U);
  // @@protoc_insertion_point(field_set:caffe.AccuracyParameter.axis)
}
inline ::int32_t AccuracyParameter::_internal_axis() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.axis_;
}
inline void AccuracyParameter::_internal_set_axis(::int32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.axis_ = value;
}

// optional int32 ignore_label = 3;
inline bool AccuracyParameter::has_ignore_label() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000001U);
  return value;
}
inline void AccuracyParameter::clear_ignore_label() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.ignore_label_ = 0;
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
}
inline ::int32_t AccuracyParameter::ignore_label() const {
  // @@protoc_insertion_point(field_get:caffe.AccuracyParameter.ignore_label)
  return _internal_ignore_label();
}
inline void AccuracyParameter::set_ignore_label(::int32_t value) {
  _internal_set_ignore_label(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_set:caffe.AccuracyParameter.ignore_label)
}
inline ::int32_t AccuracyParameter::_internal_ignore_label() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.ignore_label_;
}
inline void AccuracyParameter::_internal_set_ignore_label(::int32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.ignore_label_ = value;
}

// -------------------------------------------------------------------

// ArgMaxParameter

// optional bool out_max_val = 1 [default = false];
inline bool ArgMaxParameter::has_out_max_val() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000001U);
  return value;
}
inline void ArgMaxParameter::clear_out_max_val() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.out_max_val_ = false;
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
}
inline bool ArgMaxParameter::out_max_val() const {
  // @@protoc_insertion_point(field_get:caffe.ArgMaxParameter.out_max_val)
  return _internal_out_max_val();
}
inline void ArgMaxParameter::set_out_max_val(bool value) {
  _internal_set_out_max_val(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_set:caffe.ArgMaxParameter.out_max_val)
}
inline bool ArgMaxParameter::_internal_out_max_val() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.out_max_val_;
}
inline void ArgMaxParameter::_internal_set_out_max_val(bool value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.out_max_val_ = value;
}

// optional uint32 top_k = 2 [default = 1];
inline bool ArgMaxParameter::has_top_k() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000004U);
  return value;
}
inline void ArgMaxParameter::clear_top_k() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.top_k_ = 1u;
  ClearHasBit(_impl_._has_bits_[0], 0x00000004U);
}
inline ::uint32_t ArgMaxParameter::top_k() const {
  // @@protoc_insertion_point(field_get:caffe.ArgMaxParameter.top_k)
  return _internal_top_k();
}
inline void ArgMaxParameter::set_top_k(::uint32_t value) {
  _internal_set_top_k(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000004U);
  // @@protoc_insertion_point(field_set:caffe.ArgMaxParameter.top_k)
}
inline ::uint32_t ArgMaxParameter::_internal_top_k() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.top_k_;
}
inline void ArgMaxParameter::_internal_set_top_k(::uint32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.top_k_ = value;
}

// optional int32 axis = 3;
inline bool ArgMaxParameter::has_axis() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000002U);
  return value;
}
inline void ArgMaxParameter::clear_axis() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.axis_ = 0;
  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
}
inline ::int32_t ArgMaxParameter::axis() const {
  // @@protoc_insertion_point(field_get:caffe.ArgMaxParameter.axis)
  return _internal_axis();
}
inline void ArgMaxParameter::set_axis(::int32_t value) {
  _internal_set_axis(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  // @@protoc_insertion_point(field_set:caffe.ArgMaxParameter.axis)
}
inline ::int32_t ArgMaxParameter::_internal_axis() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.axis_;
}
inline void ArgMaxParameter::_internal_set_axis(::int32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.axis_ = value;
}

// -------------------------------------------------------------------

// ConcatParameter

// optional int32 axis = 2 [default = 1];
inline bool ConcatParameter::has_axis() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000002U);
  return value;
}
inline void ConcatParameter::clear_axis() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.axis_ = 1;
  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
}
inline ::int32_t ConcatParameter::axis() const {
  // @@protoc_insertion_point(field_get:caffe.ConcatParameter.axis)
  return _internal_axis();
}
inline void ConcatParameter::set_axis(::int32_t value) {
  _internal_set_axis(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  // @@protoc_insertion_point(field_set:caffe.ConcatParameter.axis)
}
inline ::int32_t ConcatParameter::_internal_axis() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.axis_;
}
inline void ConcatParameter::_internal_set_axis(::int32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.axis_ = value;
}

// optional uint32 concat_dim = 1 [default = 1];
inline bool ConcatParameter::has_concat_dim() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000001U);
  return value;
}
inline void ConcatParameter::clear_concat_dim() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.concat_dim_ = 1u;
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
}
inline ::uint32_t ConcatParameter::concat_dim() const {
  // @@protoc_insertion_point(field_get:caffe.ConcatParameter.concat_dim)
  return _internal_concat_dim();
}
inline void ConcatParameter::set_concat_dim(::uint32_t value) {
  _internal_set_concat_dim(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_set:caffe.ConcatParameter.concat_dim)
}
inline ::uint32_t ConcatParameter::_internal_concat_dim() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.concat_dim_;
}
inline void ConcatParameter::_internal_set_concat_dim(::uint32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.concat_dim_ = value;
}

// -------------------------------------------------------------------

// BatchNormParameter

// optional bool use_global_stats = 1;
inline bool BatchNormParameter::has_use_global_stats() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000001U);
  return value;
}
inline void BatchNormParameter::clear_use_global_stats() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.use_global_stats_ = false;
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
}
inline bool BatchNormParameter::use_global_stats() const {
  // @@protoc_insertion_point(field_get:caffe.BatchNormParameter.use_global_stats)
  return _internal_use_global_stats();
}
inline void BatchNormParameter::set_use_global_stats(bool value) {
  _internal_set_use_global_stats(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_set:caffe.BatchNormParameter.use_global_stats)
}
inline bool BatchNormParameter::_internal_use_global_stats() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.use_global_stats_;
}
inline void BatchNormParameter::_internal_set_use_global_stats(bool value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.use_global_stats_ = value;
}

// optional float moving_average_fraction = 2 [default = 0.999];
inline bool BatchNormParameter::has_moving_average_fraction() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000002U);
  return value;
}
inline void BatchNormParameter::clear_moving_average_fraction() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.moving_average_fraction_ = 0.999f;
  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
}
inline float BatchNormParameter::moving_average_fraction() const {
  // @@protoc_insertion_point(field_get:caffe.BatchNormParameter.moving_average_fraction)
  return _internal_moving_average_fraction();
}
inline void BatchNormParameter::set_moving_average_fraction(float value) {
  _internal_set_moving_average_fraction(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  // @@protoc_insertion_point(field_set:caffe.BatchNormParameter.moving_average_fraction)
}
inline float BatchNormParameter::_internal_moving_average_fraction() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.moving_average_fraction_;
}
inline void BatchNormParameter::_internal_set_moving_average_fraction(float value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.moving_average_fraction_ = value;
}

// optional float eps = 3 [default = 1e-05];
inline bool BatchNormParameter::has_eps() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000004U);
  return value;
}
inline void BatchNormParameter::clear_eps() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.eps_ = 1e-05f;
  ClearHasBit(_impl_._has_bits_[0], 0x00000004U);
}
inline float BatchNormParameter::eps() const {
  // @@protoc_insertion_point(field_get:caffe.BatchNormParameter.eps)
  return _internal_eps();
}
inline void BatchNormParameter::set_eps(float value) {
  _internal_set_eps(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000004U);
  // @@protoc_insertion_point(field_set:caffe.BatchNormParameter.eps)
}
inline float BatchNormParameter::_internal_eps() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.eps_;
}
inline void BatchNormParameter::_internal_set_eps(float value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.eps_ = value;
}

// -------------------------------------------------------------------

// BiasParameter

// optional int32 axis = 1 [default = 1];
inline bool BiasParameter::has_axis() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000002U);
  return value;
}
inline void BiasParameter::clear_axis() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.axis_ = 1;
  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
}
inline ::int32_t BiasParameter::axis() const {
  // @@protoc_insertion_point(field_get:caffe.BiasParameter.axis)
  return _internal_axis();
}
inline void BiasParameter::set_axis(::int32_t value) {
  _internal_set_axis(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  // @@protoc_insertion_point(field_set:caffe.BiasParameter.axis)
}
inline ::int32_t BiasParameter::_internal_axis() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.axis_;
}
inline void BiasParameter::_internal_set_axis(::int32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.axis_ = value;
}

// optional int32 num_axes = 2 [default = 1];
inline bool BiasParameter::has_num_axes() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000004U);
  return value;
}
inline void BiasParameter::clear_num_axes() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.num_axes_ = 1;
  ClearHasBit(_impl_._has_bits_[0], 0x00000004U);
}
inline ::int32_t BiasParameter::num_axes() const {
  // @@protoc_insertion_point(field_get:caffe.BiasParameter.num_axes)
  return _internal_num_axes();
}
inline void BiasParameter::set_num_axes(::int32_t value) {
  _internal_set_num_axes(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000004U);
  // @@protoc_insertion_point(field_set:caffe.BiasParameter.num_axes)
}
inline ::int32_t BiasParameter::_internal_num_axes() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.num_axes_;
}
inline void BiasParameter::_internal_set_num_axes(::int32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.num_axes_ = value;
}

// optional .caffe.FillerParameter filler = 3;
inline bool BiasParameter::has_filler() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000001U);
  PROTOBUF_ASSUME(!value || _impl_.filler_ != nullptr);
  return value;
}
inline void BiasParameter::clear_filler() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.filler_ != nullptr) _impl_.filler_->Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
}
inline const ::caffe::FillerParameter& BiasParameter::_internal_filler() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::FillerParameter* p = _impl_.filler_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::FillerParameter>(&::caffe::FillerParameter_globals_);
}
inline const ::caffe::FillerParameter& BiasParameter::filler() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.BiasParameter.filler)
  return _internal_filler();
}
inline void BiasParameter::unsafe_arena_set_allocated_filler(
    ::caffe::FillerParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.filler_);
  }
  _impl_.filler_ = reinterpret_cast<::caffe::FillerParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.BiasParameter.filler)
}
inline ::caffe::FillerParameter* PROTOBUF_NULLABLE BiasParameter::release_filler() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
  ::caffe::FillerParameter* released = _impl_.filler_;
  _impl_.filler_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::FillerParameter* PROTOBUF_NULLABLE BiasParameter::unsafe_arena_release_filler() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.BiasParameter.filler)

  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
  ::caffe::FillerParameter* temp = _impl_.filler_;
  _impl_.filler_ = nullptr;
  return temp;
}
inline ::caffe::FillerParameter* PROTOBUF_NONNULL BiasParameter::_internal_mutable_filler() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.filler_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::FillerParameter>(GetArena());
    _impl_.filler_ = reinterpret_cast<::caffe::FillerParameter*>(p);
  }
  return _impl_.filler_;
}
inline ::caffe::FillerParameter* PROTOBUF_NONNULL BiasParameter::mutable_filler()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  ::caffe::FillerParameter* _msg = _internal_mutable_filler();
  // @@protoc_insertion_point(field_mutable:caffe.BiasParameter.filler)
  return _msg;
}
inline void BiasParameter::set_allocated_filler(::caffe::FillerParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.filler_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
  }

  _impl_.filler_ = reinterpret_cast<::caffe::FillerParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.BiasParameter.filler)
}

// -------------------------------------------------------------------

// BNParameter

// optional .caffe.BNParameter.BNMode bn_mode = 3 [default = LEARN];
inline bool BNParameter::has_bn_mode() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000004U);
  return value;
}
inline void BNParameter::clear_bn_mode() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.bn_mode_ = 0;
  ClearHasBit(_impl_._has_bits_[0], 0x00000004U);
}
inline ::caffe::BNParameter_BNMode BNParameter::bn_mode() const {
  // @@protoc_insertion_point(field_get:caffe.BNParameter.bn_mode)
  return _internal_bn_mode();
}
inline void BNParameter::set_bn_mode(::caffe::BNParameter_BNMode value) {
  _internal_set_bn_mode(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000004U);
  // @@protoc_insertion_point(field_set:caffe.BNParameter.bn_mode)
}
inline ::caffe::BNParameter_BNMode BNParameter::_internal_bn_mode() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return static_cast<::caffe::BNParameter_BNMode>(_impl_.bn_mode_);
}
inline void BNParameter::_internal_set_bn_mode(::caffe::BNParameter_BNMode value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);

                                          assert(::google::protobuf::internal::ValidateEnum(
                                              value, ::caffe::BNParameter_BNMode_internal_data_));
                                          _impl_.bn_mode_ = value;
}

// optional .caffe.FillerParameter scale_filler = 1;
inline bool BNParameter::has_scale_filler() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000001U);
  PROTOBUF_ASSUME(!value || _impl_.scale_filler_ != nullptr);
  return value;
}
inline void BNParameter::clear_scale_filler() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.scale_filler_ != nullptr) _impl_.scale_filler_->Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
}
inline const ::caffe::FillerParameter& BNParameter::_internal_scale_filler() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::FillerParameter* p = _impl_.scale_filler_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::FillerParameter>(&::caffe::FillerParameter_globals_);
}
inline const ::caffe::FillerParameter& BNParameter::scale_filler() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.BNParameter.scale_filler)
  return _internal_scale_filler();
}
inline void BNParameter::unsafe_arena_set_allocated_scale_filler(
    ::caffe::FillerParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.scale_filler_);
  }
  _impl_.scale_filler_ = reinterpret_cast<::caffe::FillerParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.BNParameter.scale_filler)
}
inline ::caffe::FillerParameter* PROTOBUF_NULLABLE BNParameter::release_scale_filler() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
  ::caffe::FillerParameter* released = _impl_.scale_filler_;
  _impl_.scale_filler_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::FillerParameter* PROTOBUF_NULLABLE BNParameter::unsafe_arena_release_scale_filler() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.BNParameter.scale_filler)

  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
  ::caffe::FillerParameter* temp = _impl_.scale_filler_;
  _impl_.scale_filler_ = nullptr;
  return temp;
}
inline ::caffe::FillerParameter* PROTOBUF_NONNULL BNParameter::_internal_mutable_scale_filler() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.scale_filler_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::FillerParameter>(GetArena());
    _impl_.scale_filler_ = reinterpret_cast<::caffe::FillerParameter*>(p);
  }
  return _impl_.scale_filler_;
}
inline ::caffe::FillerParameter* PROTOBUF_NONNULL BNParameter::mutable_scale_filler()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  ::caffe::FillerParameter* _msg = _internal_mutable_scale_filler();
  // @@protoc_insertion_point(field_mutable:caffe.BNParameter.scale_filler)
  return _msg;
}
inline void BNParameter::set_allocated_scale_filler(::caffe::FillerParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.scale_filler_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
  }

  _impl_.scale_filler_ = reinterpret_cast<::caffe::FillerParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.BNParameter.scale_filler)
}

// optional .caffe.FillerParameter shift_filler = 2;
inline bool BNParameter::has_shift_filler() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000002U);
  PROTOBUF_ASSUME(!value || _impl_.shift_filler_ != nullptr);
  return value;
}
inline void BNParameter::clear_shift_filler() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.shift_filler_ != nullptr) _impl_.shift_filler_->Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
}
inline const ::caffe::FillerParameter& BNParameter::_internal_shift_filler() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::FillerParameter* p = _impl_.shift_filler_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::FillerParameter>(&::caffe::FillerParameter_globals_);
}
inline const ::caffe::FillerParameter& BNParameter::shift_filler() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.BNParameter.shift_filler)
  return _internal_shift_filler();
}
inline void BNParameter::unsafe_arena_set_allocated_shift_filler(
    ::caffe::FillerParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.shift_filler_);
  }
  _impl_.shift_filler_ = reinterpret_cast<::caffe::FillerParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.BNParameter.shift_filler)
}
inline ::caffe::FillerParameter* PROTOBUF_NULLABLE BNParameter::release_shift_filler() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
  ::caffe::FillerParameter* released = _impl_.shift_filler_;
  _impl_.shift_filler_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::FillerParameter* PROTOBUF_NULLABLE BNParameter::unsafe_arena_release_shift_filler() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.BNParameter.shift_filler)

  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
  ::caffe::FillerParameter* temp = _impl_.shift_filler_;
  _impl_.shift_filler_ = nullptr;
  return temp;
}
inline ::caffe::FillerParameter* PROTOBUF_NONNULL BNParameter::_internal_mutable_shift_filler() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.shift_filler_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::FillerParameter>(GetArena());
    _impl_.shift_filler_ = reinterpret_cast<::caffe::FillerParameter*>(p);
  }
  return _impl_.shift_filler_;
}
inline ::caffe::FillerParameter* PROTOBUF_NONNULL BNParameter::mutable_shift_filler()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  ::caffe::FillerParameter* _msg = _internal_mutable_shift_filler();
  // @@protoc_insertion_point(field_mutable:caffe.BNParameter.shift_filler)
  return _msg;
}
inline void BNParameter::set_allocated_shift_filler(::caffe::FillerParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.shift_filler_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
  }

  _impl_.shift_filler_ = reinterpret_cast<::caffe::FillerParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.BNParameter.shift_filler)
}

// -------------------------------------------------------------------

// ContrastiveLossParameter

// optional float margin = 1 [default = 1];
inline bool ContrastiveLossParameter::has_margin() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000002U);
  return value;
}
inline void ContrastiveLossParameter::clear_margin() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.margin_ = 1;
  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
}
inline float ContrastiveLossParameter::margin() const {
  // @@protoc_insertion_point(field_get:caffe.ContrastiveLossParameter.margin)
  return _internal_margin();
}
inline void ContrastiveLossParameter::set_margin(float value) {
  _internal_set_margin(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  // @@protoc_insertion_point(field_set:caffe.ContrastiveLossParameter.margin)
}
inline float ContrastiveLossParameter::_internal_margin() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.margin_;
}
inline void ContrastiveLossParameter::_internal_set_margin(float value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.margin_ = value;
}

// optional bool legacy_version = 2 [default = false];
inline bool ContrastiveLossParameter::has_legacy_version() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000001U);
  return value;
}
inline void ContrastiveLossParameter::clear_legacy_version() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.legacy_version_ = false;
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
}
inline bool ContrastiveLossParameter::legacy_version() const {
  // @@protoc_insertion_point(field_get:caffe.ContrastiveLossParameter.legacy_version)
  return _internal_legacy_version();
}
inline void ContrastiveLossParameter::set_legacy_version(bool value) {
  _internal_set_legacy_version(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_set:caffe.ContrastiveLossParameter.legacy_version)
}
inline bool ContrastiveLossParameter::_internal_legacy_version() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.legacy_version_;
}
inline void ContrastiveLossParameter::_internal_set_legacy_version(bool value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.legacy_version_ = value;
}

// -------------------------------------------------------------------

// ConvolutionParameter

// optional uint32 num_output = 1;
inline bool ConvolutionParameter::has_num_output() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000040U);
  return value;
}
inline void ConvolutionParameter::clear_num_output() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.num_output_ = 0u;
  ClearHasBit(_impl_._has_bits_[0], 0x00000040U);
}
inline ::uint32_t ConvolutionParameter::num_output() const {
  // @@protoc_insertion_point(field_get:caffe.ConvolutionParameter.num_output)
  return _internal_num_output();
}
inline void ConvolutionParameter::set_num_output(::uint32_t value) {
  _internal_set_num_output(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000040U);
  // @@protoc_insertion_point(field_set:caffe.ConvolutionParameter.num_output)
}
inline ::uint32_t ConvolutionParameter::_internal_num_output() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.num_output_;
}
inline void ConvolutionParameter::_internal_set_num_output(::uint32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.num_output_ = value;
}

// optional bool bias_term = 2 [default = true];
inline bool ConvolutionParameter::has_bias_term() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00010000U);
  return value;
}
inline void ConvolutionParameter::clear_bias_term() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.bias_term_ = true;
  ClearHasBit(_impl_._has_bits_[0], 0x00010000U);
}
inline bool ConvolutionParameter::bias_term() const {
  // @@protoc_insertion_point(field_get:caffe.ConvolutionParameter.bias_term)
  return _internal_bias_term();
}
inline void ConvolutionParameter::set_bias_term(bool value) {
  _internal_set_bias_term(value);
  SetHasBit(_impl_._has_bits_[0], 0x00010000U);
  // @@protoc_insertion_point(field_set:caffe.ConvolutionParameter.bias_term)
}
inline bool ConvolutionParameter::_internal_bias_term() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.bias_term_;
}
inline void ConvolutionParameter::_internal_set_bias_term(bool value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.bias_term_ = value;
}

// repeated uint32 pad = 3;
inline int ConvolutionParameter::_internal_pad_size() const {
  return _internal_pad().size();
}
inline int ConvolutionParameter::pad_size() const {
  return _internal_pad_size();
}
inline void ConvolutionParameter::clear_pad() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.pad_.Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
}
inline ::uint32_t ConvolutionParameter::pad(int index) const {
  // @@protoc_insertion_point(field_get:caffe.ConvolutionParameter.pad)
  return _internal_pad().Get(index);
}
inline void ConvolutionParameter::set_pad(int index, ::uint32_t value) {
  _internal_mutable_pad()->Set(index, value);
  // @@protoc_insertion_point(field_set:caffe.ConvolutionParameter.pad)
}
inline void ConvolutionParameter::add_pad(::uint32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _internal_mutable_pad()
      ->InternalAddWithArena<const ::google::protobuf::MessageLite*>(
          internal_visibility(), this, value);
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_add:caffe.ConvolutionParameter.pad)
}
inline const ::google::protobuf::RepeatedField<::uint32_t>& ConvolutionParameter::pad() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_list:caffe.ConvolutionParameter.pad)
  return _internal_pad();
}
inline ::google::protobuf::RepeatedField<::uint32_t>* PROTOBUF_NONNULL ConvolutionParameter::mutable_pad()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_mutable_list:caffe.ConvolutionParameter.pad)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _internal_mutable_pad();
}
inline const ::google::protobuf::RepeatedField<::uint32_t>&
ConvolutionParameter::_internal_pad() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.pad_;
}
inline ::google::protobuf::RepeatedField<::uint32_t>* PROTOBUF_NONNULL
ConvolutionParameter::_internal_mutable_pad() {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return &_impl_.pad_;
}

// repeated uint32 kernel_size = 4;
inline int ConvolutionParameter::_internal_kernel_size_size() const {
  return _internal_kernel_size().size();
}
inline int ConvolutionParameter::kernel_size_size() const {
  return _internal_kernel_size_size();
}
inline void ConvolutionParameter::clear_kernel_size() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.kernel_size_.Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
}
inline ::uint32_t ConvolutionParameter::kernel_size(int index) const {
  // @@protoc_insertion_point(field_get:caffe.ConvolutionParameter.kernel_size)
  return _internal_kernel_size().Get(index);
}
inline void ConvolutionParameter::set_kernel_size(int index, ::uint32_t value) {
  _internal_mutable_kernel_size()->Set(index, value);
  // @@protoc_insertion_point(field_set:caffe.ConvolutionParameter.kernel_size)
}
inline void ConvolutionParameter::add_kernel_size(::uint32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _internal_mutable_kernel_size()
      ->InternalAddWithArena<const ::google::protobuf::MessageLite*>(
          internal_visibility(), this, value);
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  // @@protoc_insertion_point(field_add:caffe.ConvolutionParameter.kernel_size)
}
inline const ::google::protobuf::RepeatedField<::uint32_t>& ConvolutionParameter::kernel_size() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_list:caffe.ConvolutionParameter.kernel_size)
  return _internal_kernel_size();
}
inline ::google::protobuf::RepeatedField<::uint32_t>* PROTOBUF_NONNULL ConvolutionParameter::mutable_kernel_size()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  // @@protoc_insertion_point(field_mutable_list:caffe.ConvolutionParameter.kernel_size)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _internal_mutable_kernel_size();
}
inline const ::google::protobuf::RepeatedField<::uint32_t>&
ConvolutionParameter::_internal_kernel_size() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.kernel_size_;
}
inline ::google::protobuf::RepeatedField<::uint32_t>* PROTOBUF_NONNULL
ConvolutionParameter::_internal_mutable_kernel_size() {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return &_impl_.kernel_size_;
}

// repeated uint32 stride = 6;
inline int ConvolutionParameter::_internal_stride_size() const {
  return _internal_stride().size();
}
inline int ConvolutionParameter::stride_size() const {
  return _internal_stride_size();
}
inline void ConvolutionParameter::clear_stride() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.stride_.Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000004U);
}
inline ::uint32_t ConvolutionParameter::stride(int index) const {
  // @@protoc_insertion_point(field_get:caffe.ConvolutionParameter.stride)
  return _internal_stride().Get(index);
}
inline void ConvolutionParameter::set_stride(int index, ::uint32_t value) {
  _internal_mutable_stride()->Set(index, value);
  // @@protoc_insertion_point(field_set:caffe.ConvolutionParameter.stride)
}
inline void ConvolutionParameter::add_stride(::uint32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _internal_mutable_stride()
      ->InternalAddWithArena<const ::google::protobuf::MessageLite*>(
          internal_visibility(), this, value);
  SetHasBit(_impl_._has_bits_[0], 0x00000004U);
  // @@protoc_insertion_point(field_add:caffe.ConvolutionParameter.stride)
}
inline const ::google::protobuf::RepeatedField<::uint32_t>& ConvolutionParameter::stride() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_list:caffe.ConvolutionParameter.stride)
  return _internal_stride();
}
inline ::google::protobuf::RepeatedField<::uint32_t>* PROTOBUF_NONNULL ConvolutionParameter::mutable_stride()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000004U);
  // @@protoc_insertion_point(field_mutable_list:caffe.ConvolutionParameter.stride)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _internal_mutable_stride();
}
inline const ::google::protobuf::RepeatedField<::uint32_t>&
ConvolutionParameter::_internal_stride() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.stride_;
}
inline ::google::protobuf::RepeatedField<::uint32_t>* PROTOBUF_NONNULL
ConvolutionParameter::_internal_mutable_stride() {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return &_impl_.stride_;
}

// repeated uint32 dilation = 18;
inline int ConvolutionParameter::_internal_dilation_size() const {
  return _internal_dilation().size();
}
inline int ConvolutionParameter::dilation_size() const {
  return _internal_dilation_size();
}
inline void ConvolutionParameter::clear_dilation() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.dilation_.Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000008U);
}
inline ::uint32_t ConvolutionParameter::dilation(int index) const {
  // @@protoc_insertion_point(field_get:caffe.ConvolutionParameter.dilation)
  return _internal_dilation().Get(index);
}
inline void ConvolutionParameter::set_dilation(int index, ::uint32_t value) {
  _internal_mutable_dilation()->Set(index, value);
  // @@protoc_insertion_point(field_set:caffe.ConvolutionParameter.dilation)
}
inline void ConvolutionParameter::add_dilation(::uint32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _internal_mutable_dilation()
      ->InternalAddWithArena<const ::google::protobuf::MessageLite*>(
          internal_visibility(), this, value);
  SetHasBit(_impl_._has_bits_[0], 0x00000008U);
  // @@protoc_insertion_point(field_add:caffe.ConvolutionParameter.dilation)
}
inline const ::google::protobuf::RepeatedField<::uint32_t>& ConvolutionParameter::dilation() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_list:caffe.ConvolutionParameter.dilation)
  return _internal_dilation();
}
inline ::google::protobuf::RepeatedField<::uint32_t>* PROTOBUF_NONNULL ConvolutionParameter::mutable_dilation()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000008U);
  // @@protoc_insertion_point(field_mutable_list:caffe.ConvolutionParameter.dilation)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _internal_mutable_dilation();
}
inline const ::google::protobuf::RepeatedField<::uint32_t>&
ConvolutionParameter::_internal_dilation() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.dilation_;
}
inline ::google::protobuf::RepeatedField<::uint32_t>* PROTOBUF_NONNULL
ConvolutionParameter::_internal_mutable_dilation() {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return &_impl_.dilation_;
}

// optional uint32 pad_h = 9 [default = 0];
inline bool ConvolutionParameter::has_pad_h() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000080U);
  return value;
}
inline void ConvolutionParameter::clear_pad_h() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.pad_h_ = 0u;
  ClearHasBit(_impl_._has_bits_[0], 0x00000080U);
}
inline ::uint32_t ConvolutionParameter::pad_h() const {
  // @@protoc_insertion_point(field_get:caffe.ConvolutionParameter.pad_h)
  return _internal_pad_h();
}
inline void ConvolutionParameter::set_pad_h(::uint32_t value) {
  _internal_set_pad_h(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000080U);
  // @@protoc_insertion_point(field_set:caffe.ConvolutionParameter.pad_h)
}
inline ::uint32_t ConvolutionParameter::_internal_pad_h() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.pad_h_;
}
inline void ConvolutionParameter::_internal_set_pad_h(::uint32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.pad_h_ = value;
}

// optional uint32 pad_w = 10 [default = 0];
inline bool ConvolutionParameter::has_pad_w() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000100U);
  return value;
}
inline void ConvolutionParameter::clear_pad_w() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.pad_w_ = 0u;
  ClearHasBit(_impl_._has_bits_[0], 0x00000100U);
}
inline ::uint32_t ConvolutionParameter::pad_w() const {
  // @@protoc_insertion_point(field_get:caffe.ConvolutionParameter.pad_w)
  return _internal_pad_w();
}
inline void ConvolutionParameter::set_pad_w(::uint32_t value) {
  _internal_set_pad_w(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000100U);
  // @@protoc_insertion_point(field_set:caffe.ConvolutionParameter.pad_w)
}
inline ::uint32_t ConvolutionParameter::_internal_pad_w() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.pad_w_;
}
inline void ConvolutionParameter::_internal_set_pad_w(::uint32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.pad_w_ = value;
}

// optional uint32 kernel_h = 11;
inline bool ConvolutionParameter::has_kernel_h() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000200U);
  return value;
}
inline void ConvolutionParameter::clear_kernel_h() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.kernel_h_ = 0u;
  ClearHasBit(_impl_._has_bits_[0], 0x00000200U);
}
inline ::uint32_t ConvolutionParameter::kernel_h() const {
  // @@protoc_insertion_point(field_get:caffe.ConvolutionParameter.kernel_h)
  return _internal_kernel_h();
}
inline void ConvolutionParameter::set_kernel_h(::uint32_t value) {
  _internal_set_kernel_h(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000200U);
  // @@protoc_insertion_point(field_set:caffe.ConvolutionParameter.kernel_h)
}
inline ::uint32_t ConvolutionParameter::_internal_kernel_h() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.kernel_h_;
}
inline void ConvolutionParameter::_internal_set_kernel_h(::uint32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.kernel_h_ = value;
}

// optional uint32 kernel_w = 12;
inline bool ConvolutionParameter::has_kernel_w() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000400U);
  return value;
}
inline void ConvolutionParameter::clear_kernel_w() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.kernel_w_ = 0u;
  ClearHasBit(_impl_._has_bits_[0], 0x00000400U);
}
inline ::uint32_t ConvolutionParameter::kernel_w() const {
  // @@protoc_insertion_point(field_get:caffe.ConvolutionParameter.kernel_w)
  return _internal_kernel_w();
}
inline void ConvolutionParameter::set_kernel_w(::uint32_t value) {
  _internal_set_kernel_w(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000400U);
  // @@protoc_insertion_point(field_set:caffe.ConvolutionParameter.kernel_w)
}
inline ::uint32_t ConvolutionParameter::_internal_kernel_w() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.kernel_w_;
}
inline void ConvolutionParameter::_internal_set_kernel_w(::uint32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.kernel_w_ = value;
}

// optional uint32 stride_h = 13;
inline bool ConvolutionParameter::has_stride_h() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000800U);
  return value;
}
inline void ConvolutionParameter::clear_stride_h() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.stride_h_ = 0u;
  ClearHasBit(_impl_._has_bits_[0], 0x00000800U);
}
inline ::uint32_t ConvolutionParameter::stride_h() const {
  // @@protoc_insertion_point(field_get:caffe.ConvolutionParameter.stride_h)
  return _internal_stride_h();
}
inline void ConvolutionParameter::set_stride_h(::uint32_t value) {
  _internal_set_stride_h(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000800U);
  // @@protoc_insertion_point(field_set:caffe.ConvolutionParameter.stride_h)
}
inline ::uint32_t ConvolutionParameter::_internal_stride_h() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.stride_h_;
}
inline void ConvolutionParameter::_internal_set_stride_h(::uint32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.stride_h_ = value;
}

// optional uint32 stride_w = 14;
inline bool ConvolutionParameter::has_stride_w() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00001000U);
  return value;
}
inline void ConvolutionParameter::clear_stride_w() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.stride_w_ = 0u;
  ClearHasBit(_impl_._has_bits_[0], 0x00001000U);
}
inline ::uint32_t ConvolutionParameter::stride_w() const {
  // @@protoc_insertion_point(field_get:caffe.ConvolutionParameter.stride_w)
  return _internal_stride_w();
}
inline void ConvolutionParameter::set_stride_w(::uint32_t value) {
  _internal_set_stride_w(value);
  SetHasBit(_impl_._has_bits_[0], 0x00001000U);
  // @@protoc_insertion_point(field_set:caffe.ConvolutionParameter.stride_w)
}
inline ::uint32_t ConvolutionParameter::_internal_stride_w() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.stride_w_;
}
inline void ConvolutionParameter::_internal_set_stride_w(::uint32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.stride_w_ = value;
}

// optional uint32 group = 5 [default = 1];
inline bool ConvolutionParameter::has_group() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00020000U);
  return value;
}
inline void ConvolutionParameter::clear_group() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.group_ = 1u;
  ClearHasBit(_impl_._has_bits_[0], 0x00020000U);
}
inline ::uint32_t ConvolutionParameter::group() const {
  // @@protoc_insertion_point(field_get:caffe.ConvolutionParameter.group)
  return _internal_group();
}
inline void ConvolutionParameter::set_group(::uint32_t value) {
  _internal_set_group(value);
  SetHasBit(_impl_._has_bits_[0], 0x00020000U);
  // @@protoc_insertion_point(field_set:caffe.ConvolutionParameter.group)
}
inline ::uint32_t ConvolutionParameter::_internal_group() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.group_;
}
inline void ConvolutionParameter::_internal_set_group(::uint32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.group_ = value;
}

// optional .caffe.FillerParameter weight_filler = 7;
inline bool ConvolutionParameter::has_weight_filler() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000010U);
  PROTOBUF_ASSUME(!value || _impl_.weight_filler_ != nullptr);
  return value;
}
inline void ConvolutionParameter::clear_weight_filler() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.weight_filler_ != nullptr) _impl_.weight_filler_->Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000010U);
}
inline const ::caffe::FillerParameter& ConvolutionParameter::_internal_weight_filler() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::FillerParameter* p = _impl_.weight_filler_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::FillerParameter>(&::caffe::FillerParameter_globals_);
}
inline const ::caffe::FillerParameter& ConvolutionParameter::weight_filler() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.ConvolutionParameter.weight_filler)
  return _internal_weight_filler();
}
inline void ConvolutionParameter::unsafe_arena_set_allocated_weight_filler(
    ::caffe::FillerParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.weight_filler_);
  }
  _impl_.weight_filler_ = reinterpret_cast<::caffe::FillerParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000010U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000010U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.ConvolutionParameter.weight_filler)
}
inline ::caffe::FillerParameter* PROTOBUF_NULLABLE ConvolutionParameter::release_weight_filler() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[0], 0x00000010U);
  ::caffe::FillerParameter* released = _impl_.weight_filler_;
  _impl_.weight_filler_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::FillerParameter* PROTOBUF_NULLABLE ConvolutionParameter::unsafe_arena_release_weight_filler() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.ConvolutionParameter.weight_filler)

  ClearHasBit(_impl_._has_bits_[0], 0x00000010U);
  ::caffe::FillerParameter* temp = _impl_.weight_filler_;
  _impl_.weight_filler_ = nullptr;
  return temp;
}
inline ::caffe::FillerParameter* PROTOBUF_NONNULL ConvolutionParameter::_internal_mutable_weight_filler() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.weight_filler_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::FillerParameter>(GetArena());
    _impl_.weight_filler_ = reinterpret_cast<::caffe::FillerParameter*>(p);
  }
  return _impl_.weight_filler_;
}
inline ::caffe::FillerParameter* PROTOBUF_NONNULL ConvolutionParameter::mutable_weight_filler()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000010U);
  ::caffe::FillerParameter* _msg = _internal_mutable_weight_filler();
  // @@protoc_insertion_point(field_mutable:caffe.ConvolutionParameter.weight_filler)
  return _msg;
}
inline void ConvolutionParameter::set_allocated_weight_filler(::caffe::FillerParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.weight_filler_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[0], 0x00000010U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000010U);
  }

  _impl_.weight_filler_ = reinterpret_cast<::caffe::FillerParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.ConvolutionParameter.weight_filler)
}

// optional .caffe.FillerParameter bias_filler = 8;
inline bool ConvolutionParameter::has_bias_filler() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000020U);
  PROTOBUF_ASSUME(!value || _impl_.bias_filler_ != nullptr);
  return value;
}
inline void ConvolutionParameter::clear_bias_filler() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.bias_filler_ != nullptr) _impl_.bias_filler_->Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000020U);
}
inline const ::caffe::FillerParameter& ConvolutionParameter::_internal_bias_filler() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::FillerParameter* p = _impl_.bias_filler_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::FillerParameter>(&::caffe::FillerParameter_globals_);
}
inline const ::caffe::FillerParameter& ConvolutionParameter::bias_filler() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.ConvolutionParameter.bias_filler)
  return _internal_bias_filler();
}
inline void ConvolutionParameter::unsafe_arena_set_allocated_bias_filler(
    ::caffe::FillerParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.bias_filler_);
  }
  _impl_.bias_filler_ = reinterpret_cast<::caffe::FillerParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000020U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000020U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.ConvolutionParameter.bias_filler)
}
inline ::caffe::FillerParameter* PROTOBUF_NULLABLE ConvolutionParameter::release_bias_filler() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[0], 0x00000020U);
  ::caffe::FillerParameter* released = _impl_.bias_filler_;
  _impl_.bias_filler_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::FillerParameter* PROTOBUF_NULLABLE ConvolutionParameter::unsafe_arena_release_bias_filler() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.ConvolutionParameter.bias_filler)

  ClearHasBit(_impl_._has_bits_[0], 0x00000020U);
  ::caffe::FillerParameter* temp = _impl_.bias_filler_;
  _impl_.bias_filler_ = nullptr;
  return temp;
}
inline ::caffe::FillerParameter* PROTOBUF_NONNULL ConvolutionParameter::_internal_mutable_bias_filler() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.bias_filler_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::FillerParameter>(GetArena());
    _impl_.bias_filler_ = reinterpret_cast<::caffe::FillerParameter*>(p);
  }
  return _impl_.bias_filler_;
}
inline ::caffe::FillerParameter* PROTOBUF_NONNULL ConvolutionParameter::mutable_bias_filler()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000020U);
  ::caffe::FillerParameter* _msg = _internal_mutable_bias_filler();
  // @@protoc_insertion_point(field_mutable:caffe.ConvolutionParameter.bias_filler)
  return _msg;
}
inline void ConvolutionParameter::set_allocated_bias_filler(::caffe::FillerParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.bias_filler_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[0], 0x00000020U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000020U);
  }

  _impl_.bias_filler_ = reinterpret_cast<::caffe::FillerParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.ConvolutionParameter.bias_filler)
}

// optional .caffe.ConvolutionParameter.Engine engine = 15 [default = DEFAULT];
inline bool ConvolutionParameter::has_engine() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00002000U);
  return value;
}
inline void ConvolutionParameter::clear_engine() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.engine_ = 0;
  ClearHasBit(_impl_._has_bits_[0], 0x00002000U);
}
inline ::caffe::ConvolutionParameter_Engine ConvolutionParameter::engine() const {
  // @@protoc_insertion_point(field_get:caffe.ConvolutionParameter.engine)
  return _internal_engine();
}
inline void ConvolutionParameter::set_engine(::caffe::ConvolutionParameter_Engine value) {
  _internal_set_engine(value);
  SetHasBit(_impl_._has_bits_[0], 0x00002000U);
  // @@protoc_insertion_point(field_set:caffe.ConvolutionParameter.engine)
}
inline ::caffe::ConvolutionParameter_Engine ConvolutionParameter::_internal_engine() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return static_cast<::caffe::ConvolutionParameter_Engine>(_impl_.engine_);
}
inline void ConvolutionParameter::_internal_set_engine(::caffe::ConvolutionParameter_Engine value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);

                                          assert(::google::protobuf::internal::ValidateEnum(
                                              value, ::caffe::ConvolutionParameter_Engine_internal_data_));
                                          _impl_.engine_ = value;
}

// optional int32 axis = 16 [default = 1];
inline bool ConvolutionParameter::has_axis() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00008000U);
  return value;
}
inline void ConvolutionParameter::clear_axis() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.axis_ = 1;
  ClearHasBit(_impl_._has_bits_[0], 0x00008000U);
}
inline ::int32_t ConvolutionParameter::axis() const {
  // @@protoc_insertion_point(field_get:caffe.ConvolutionParameter.axis)
  return _internal_axis();
}
inline void ConvolutionParameter::set_axis(::int32_t value) {
  _internal_set_axis(value);
  SetHasBit(_impl_._has_bits_[0], 0x00008000U);
  // @@protoc_insertion_point(field_set:caffe.ConvolutionParameter.axis)
}
inline ::int32_t ConvolutionParameter::_internal_axis() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.axis_;
}
inline void ConvolutionParameter::_internal_set_axis(::int32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.axis_ = value;
}

// optional bool force_nd_im2col = 17 [default = false];
inline bool ConvolutionParameter::has_force_nd_im2col() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00004000U);
  return value;
}
inline void ConvolutionParameter::clear_force_nd_im2col() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.force_nd_im2col_ = false;
  ClearHasBit(_impl_._has_bits_[0], 0x00004000U);
}
inline bool ConvolutionParameter::force_nd_im2col() const {
  // @@protoc_insertion_point(field_get:caffe.ConvolutionParameter.force_nd_im2col)
  return _internal_force_nd_im2col();
}
inline void ConvolutionParameter::set_force_nd_im2col(bool value) {
  _internal_set_force_nd_im2col(value);
  SetHasBit(_impl_._has_bits_[0], 0x00004000U);
  // @@protoc_insertion_point(field_set:caffe.ConvolutionParameter.force_nd_im2col)
}
inline bool ConvolutionParameter::_internal_force_nd_im2col() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.force_nd_im2col_;
}
inline void ConvolutionParameter::_internal_set_force_nd_im2col(bool value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.force_nd_im2col_ = value;
}

// -------------------------------------------------------------------

// CropParameter

// optional int32 axis = 1 [default = 2];
inline bool CropParameter::has_axis() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000002U);
  return value;
}
inline void CropParameter::clear_axis() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.axis_ = 2;
  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
}
inline ::int32_t CropParameter::axis() const {
  // @@protoc_insertion_point(field_get:caffe.CropParameter.axis)
  return _internal_axis();
}
inline void CropParameter::set_axis(::int32_t value) {
  _internal_set_axis(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  // @@protoc_insertion_point(field_set:caffe.CropParameter.axis)
}
inline ::int32_t CropParameter::_internal_axis() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.axis_;
}
inline void CropParameter::_internal_set_axis(::int32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.axis_ = value;
}

// repeated uint32 offset = 2;
inline int CropParameter::_internal_offset_size() const {
  return _internal_offset().size();
}
inline int CropParameter::offset_size() const {
  return _internal_offset_size();
}
inline void CropParameter::clear_offset() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.offset_.Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
}
inline ::uint32_t CropParameter::offset(int index) const {
  // @@protoc_insertion_point(field_get:caffe.CropParameter.offset)
  return _internal_offset().Get(index);
}
inline void CropParameter::set_offset(int index, ::uint32_t value) {
  _internal_mutable_offset()->Set(index, value);
  // @@protoc_insertion_point(field_set:caffe.CropParameter.offset)
}
inline void CropParameter::add_offset(::uint32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _internal_mutable_offset()
      ->InternalAddWithArena<const ::google::protobuf::MessageLite*>(
          internal_visibility(), this, value);
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_add:caffe.CropParameter.offset)
}
inline const ::google::protobuf::RepeatedField<::uint32_t>& CropParameter::offset() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_list:caffe.CropParameter.offset)
  return _internal_offset();
}
inline ::google::protobuf::RepeatedField<::uint32_t>* PROTOBUF_NONNULL CropParameter::mutable_offset()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_mutable_list:caffe.CropParameter.offset)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _internal_mutable_offset();
}
inline const ::google::protobuf::RepeatedField<::uint32_t>&
CropParameter::_internal_offset() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.offset_;
}
inline ::google::protobuf::RepeatedField<::uint32_t>* PROTOBUF_NONNULL
CropParameter::_internal_mutable_offset() {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return &_impl_.offset_;
}

// -------------------------------------------------------------------

// DataParameter

// optional string source = 1;
inline bool DataParameter::has_source() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000001U);
  return value;
}
inline void DataParameter::clear_source() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.source_.ClearToEmpty();
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
}
inline const ::std::string& DataParameter::source() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.DataParameter.source)
  return _internal_source();
}
template <typename Arg_, typename... Args_>
PROTOBUF_ALWAYS_INLINE void DataParameter::set_source(Arg_&& arg, Args_... args) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  _impl_.source_.Set(static_cast<Arg_&&>(arg), args..., GetArena());
  // @@protoc_insertion_point(field_set:caffe.DataParameter.source)
}
inline ::std::string* PROTOBUF_NONNULL DataParameter::mutable_source()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  ::std::string* _s = _internal_mutable_source();
  // @@protoc_insertion_point(field_mutable:caffe.DataParameter.source)
  return _s;
}
inline const ::std::string& DataParameter::_internal_source() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.source_.Get();
}
inline void DataParameter::_internal_set_source(const ::std::string& value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.source_.Set(value, GetArena());
}
inline ::std::string* PROTOBUF_NONNULL DataParameter::_internal_mutable_source() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _impl_.source_.Mutable( GetArena());
}
inline ::std::string* PROTOBUF_NULLABLE DataParameter::release_source() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.DataParameter.source)
  if (!CheckHasBit(_impl_._has_bits_[0], 0x00000001U)) {
    return nullptr;
  }
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
  auto* released = _impl_.source_.Release();
  if (::google::protobuf::internal::DebugHardenForceCopyDefaultString()) {
    _impl_.source_.Set("", GetArena());
  }
  return released;
}
inline void DataParameter::set_allocated_source(::std::string* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
  }
  _impl_.source_.SetAllocated(value, GetArena());
  if (::google::protobuf::internal::DebugHardenForceCopyDefaultString() && _impl_.source_.IsDefault()) {
    _impl_.source_.Set("", GetArena());
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.DataParameter.source)
}

// optional uint32 batch_size = 4;
inline bool DataParameter::has_batch_size() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000004U);
  return value;
}
inline void DataParameter::clear_batch_size() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.batch_size_ = 0u;
  ClearHasBit(_impl_._has_bits_[0], 0x00000004U);
}
inline ::uint32_t DataParameter::batch_size() const {
  // @@protoc_insertion_point(field_get:caffe.DataParameter.batch_size)
  return _internal_batch_size();
}
inline void DataParameter::set_batch_size(::uint32_t value) {
  _internal_set_batch_size(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000004U);
  // @@protoc_insertion_point(field_set:caffe.DataParameter.batch_size)
}
inline ::uint32_t DataParameter::_internal_batch_size() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.batch_size_;
}
inline void DataParameter::_internal_set_batch_size(::uint32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.batch_size_ = value;
}

// optional uint32 rand_skip = 7 [default = 0];
inline bool DataParameter::has_rand_skip() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000010U);
  return value;
}
inline void DataParameter::clear_rand_skip() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.rand_skip_ = 0u;
  ClearHasBit(_impl_._has_bits_[0], 0x00000010U);
}
inline ::uint32_t DataParameter::rand_skip() const {
  // @@protoc_insertion_point(field_get:caffe.DataParameter.rand_skip)
  return _internal_rand_skip();
}
inline void DataParameter::set_rand_skip(::uint32_t value) {
  _internal_set_rand_skip(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000010U);
  // @@protoc_insertion_point(field_set:caffe.DataParameter.rand_skip)
}
inline ::uint32_t DataParameter::_internal_rand_skip() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.rand_skip_;
}
inline void DataParameter::_internal_set_rand_skip(::uint32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.rand_skip_ = value;
}

// optional .caffe.DataParameter.DB backend = 8 [default = LEVELDB];
inline bool DataParameter::has_backend() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000080U);
  return value;
}
inline void DataParameter::clear_backend() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.backend_ = 0;
  ClearHasBit(_impl_._has_bits_[0], 0x00000080U);
}
inline ::caffe::DataParameter_DB DataParameter::backend() const {
  // @@protoc_insertion_point(field_get:caffe.DataParameter.backend)
  return _internal_backend();
}
inline void DataParameter::set_backend(::caffe::DataParameter_DB value) {
  _internal_set_backend(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000080U);
  // @@protoc_insertion_point(field_set:caffe.DataParameter.backend)
}
inline ::caffe::DataParameter_DB DataParameter::_internal_backend() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return static_cast<::caffe::DataParameter_DB>(_impl_.backend_);
}
inline void DataParameter::_internal_set_backend(::caffe::DataParameter_DB value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);

                                          assert(::google::protobuf::internal::ValidateEnum(
                                              value, ::caffe::DataParameter_DB_internal_data_));
                                          _impl_.backend_ = value;
}

// optional float scale = 2 [default = 1];
inline bool DataParameter::has_scale() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000100U);
  return value;
}
inline void DataParameter::clear_scale() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.scale_ = 1;
  ClearHasBit(_impl_._has_bits_[0], 0x00000100U);
}
inline float DataParameter::scale() const {
  // @@protoc_insertion_point(field_get:caffe.DataParameter.scale)
  return _internal_scale();
}
inline void DataParameter::set_scale(float value) {
  _internal_set_scale(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000100U);
  // @@protoc_insertion_point(field_set:caffe.DataParameter.scale)
}
inline float DataParameter::_internal_scale() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.scale_;
}
inline void DataParameter::_internal_set_scale(float value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.scale_ = value;
}

// optional string mean_file = 3;
inline bool DataParameter::has_mean_file() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000002U);
  return value;
}
inline void DataParameter::clear_mean_file() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.mean_file_.ClearToEmpty();
  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
}
inline const ::std::string& DataParameter::mean_file() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.DataParameter.mean_file)
  return _internal_mean_file();
}
template <typename Arg_, typename... Args_>
PROTOBUF_ALWAYS_INLINE void DataParameter::set_mean_file(Arg_&& arg, Args_... args) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  _impl_.mean_file_.Set(static_cast<Arg_&&>(arg), args..., GetArena());
  // @@protoc_insertion_point(field_set:caffe.DataParameter.mean_file)
}
inline ::std::string* PROTOBUF_NONNULL DataParameter::mutable_mean_file()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  ::std::string* _s = _internal_mutable_mean_file();
  // @@protoc_insertion_point(field_mutable:caffe.DataParameter.mean_file)
  return _s;
}
inline const ::std::string& DataParameter::_internal_mean_file() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.mean_file_.Get();
}
inline void DataParameter::_internal_set_mean_file(const ::std::string& value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.mean_file_.Set(value, GetArena());
}
inline ::std::string* PROTOBUF_NONNULL DataParameter::_internal_mutable_mean_file() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _impl_.mean_file_.Mutable( GetArena());
}
inline ::std::string* PROTOBUF_NULLABLE DataParameter::release_mean_file() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.DataParameter.mean_file)
  if (!CheckHasBit(_impl_._has_bits_[0], 0x00000002U)) {
    return nullptr;
  }
  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
  auto* released = _impl_.mean_file_.Release();
  if (::google::protobuf::internal::DebugHardenForceCopyDefaultString()) {
    _impl_.mean_file_.Set("", GetArena());
  }
  return released;
}
inline void DataParameter::set_allocated_mean_file(::std::string* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
  }
  _impl_.mean_file_.SetAllocated(value, GetArena());
  if (::google::protobuf::internal::DebugHardenForceCopyDefaultString() && _impl_.mean_file_.IsDefault()) {
    _impl_.mean_file_.Set("", GetArena());
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.DataParameter.mean_file)
}

// optional uint32 crop_size = 5 [default = 0];
inline bool DataParameter::has_crop_size() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000008U);
  return value;
}
inline void DataParameter::clear_crop_size() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.crop_size_ = 0u;
  ClearHasBit(_impl_._has_bits_[0], 0x00000008U);
}
inline ::uint32_t DataParameter::crop_size() const {
  // @@protoc_insertion_point(field_get:caffe.DataParameter.crop_size)
  return _internal_crop_size();
}
inline void DataParameter::set_crop_size(::uint32_t value) {
  _internal_set_crop_size(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000008U);
  // @@protoc_insertion_point(field_set:caffe.DataParameter.crop_size)
}
inline ::uint32_t DataParameter::_internal_crop_size() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.crop_size_;
}
inline void DataParameter::_internal_set_crop_size(::uint32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.crop_size_ = value;
}

// optional bool mirror = 6 [default = false];
inline bool DataParameter::has_mirror() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000020U);
  return value;
}
inline void DataParameter::clear_mirror() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.mirror_ = false;
  ClearHasBit(_impl_._has_bits_[0], 0x00000020U);
}
inline bool DataParameter::mirror() const {
  // @@protoc_insertion_point(field_get:caffe.DataParameter.mirror)
  return _internal_mirror();
}
inline void DataParameter::set_mirror(bool value) {
  _internal_set_mirror(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000020U);
  // @@protoc_insertion_point(field_set:caffe.DataParameter.mirror)
}
inline bool DataParameter::_internal_mirror() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.mirror_;
}
inline void DataParameter::_internal_set_mirror(bool value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.mirror_ = value;
}

// optional bool force_encoded_color = 9 [default = false];
inline bool DataParameter::has_force_encoded_color() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000040U);
  return value;
}
inline void DataParameter::clear_force_encoded_color() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.force_encoded_color_ = false;
  ClearHasBit(_impl_._has_bits_[0], 0x00000040U);
}
inline bool DataParameter::force_encoded_color() const {
  // @@protoc_insertion_point(field_get:caffe.DataParameter.force_encoded_color)
  return _internal_force_encoded_color();
}
inline void DataParameter::set_force_encoded_color(bool value) {
  _internal_set_force_encoded_color(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000040U);
  // @@protoc_insertion_point(field_set:caffe.DataParameter.force_encoded_color)
}
inline bool DataParameter::_internal_force_encoded_color() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.force_encoded_color_;
}
inline void DataParameter::_internal_set_force_encoded_color(bool value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.force_encoded_color_ = value;
}

// optional uint32 prefetch = 10 [default = 4];
inline bool DataParameter::has_prefetch() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000200U);
  return value;
}
inline void DataParameter::clear_prefetch() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.prefetch_ = 4u;
  ClearHasBit(_impl_._has_bits_[0], 0x00000200U);
}
inline ::uint32_t DataParameter::prefetch() const {
  // @@protoc_insertion_point(field_get:caffe.DataParameter.prefetch)
  return _internal_prefetch();
}
inline void DataParameter::set_prefetch(::uint32_t value) {
  _internal_set_prefetch(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000200U);
  // @@protoc_insertion_point(field_set:caffe.DataParameter.prefetch)
}
inline ::uint32_t DataParameter::_internal_prefetch() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.prefetch_;
}
inline void DataParameter::_internal_set_prefetch(::uint32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.prefetch_ = value;
}

// -------------------------------------------------------------------

// NonMaximumSuppressionParameter

// optional float nms_threshold = 1 [default = 0.3];
inline bool NonMaximumSuppressionParameter::has_nms_threshold() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000002U);
  return value;
}
inline void NonMaximumSuppressionParameter::clear_nms_threshold() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.nms_threshold_ = 0.3f;
  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
}
inline float NonMaximumSuppressionParameter::nms_threshold() const {
  // @@protoc_insertion_point(field_get:caffe.NonMaximumSuppressionParameter.nms_threshold)
  return _internal_nms_threshold();
}
inline void NonMaximumSuppressionParameter::set_nms_threshold(float value) {
  _internal_set_nms_threshold(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  // @@protoc_insertion_point(field_set:caffe.NonMaximumSuppressionParameter.nms_threshold)
}
inline float NonMaximumSuppressionParameter::_internal_nms_threshold() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.nms_threshold_;
}
inline void NonMaximumSuppressionParameter::_internal_set_nms_threshold(float value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.nms_threshold_ = value;
}

// optional int32 top_k = 2;
inline bool NonMaximumSuppressionParameter::has_top_k() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000001U);
  return value;
}
inline void NonMaximumSuppressionParameter::clear_top_k() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.top_k_ = 0;
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
}
inline ::int32_t NonMaximumSuppressionParameter::top_k() const {
  // @@protoc_insertion_point(field_get:caffe.NonMaximumSuppressionParameter.top_k)
  return _internal_top_k();
}
inline void NonMaximumSuppressionParameter::set_top_k(::int32_t value) {
  _internal_set_top_k(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_set:caffe.NonMaximumSuppressionParameter.top_k)
}
inline ::int32_t NonMaximumSuppressionParameter::_internal_top_k() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.top_k_;
}
inline void NonMaximumSuppressionParameter::_internal_set_top_k(::int32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.top_k_ = value;
}

// optional float eta = 3 [default = 1];
inline bool NonMaximumSuppressionParameter::has_eta() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000004U);
  return value;
}
inline void NonMaximumSuppressionParameter::clear_eta() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.eta_ = 1;
  ClearHasBit(_impl_._has_bits_[0], 0x00000004U);
}
inline float NonMaximumSuppressionParameter::eta() const {
  // @@protoc_insertion_point(field_get:caffe.NonMaximumSuppressionParameter.eta)
  return _internal_eta();
}
inline void NonMaximumSuppressionParameter::set_eta(float value) {
  _internal_set_eta(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000004U);
  // @@protoc_insertion_point(field_set:caffe.NonMaximumSuppressionParameter.eta)
}
inline float NonMaximumSuppressionParameter::_internal_eta() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.eta_;
}
inline void NonMaximumSuppressionParameter::_internal_set_eta(float value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.eta_ = value;
}

// -------------------------------------------------------------------

// SaveOutputParameter

// optional string output_directory = 1;
inline bool SaveOutputParameter::has_output_directory() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000001U);
  return value;
}
inline void SaveOutputParameter::clear_output_directory() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.output_directory_.ClearToEmpty();
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
}
inline const ::std::string& SaveOutputParameter::output_directory() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.SaveOutputParameter.output_directory)
  return _internal_output_directory();
}
template <typename Arg_, typename... Args_>
PROTOBUF_ALWAYS_INLINE void SaveOutputParameter::set_output_directory(Arg_&& arg, Args_... args) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  _impl_.output_directory_.Set(static_cast<Arg_&&>(arg), args..., GetArena());
  // @@protoc_insertion_point(field_set:caffe.SaveOutputParameter.output_directory)
}
inline ::std::string* PROTOBUF_NONNULL SaveOutputParameter::mutable_output_directory()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  ::std::string* _s = _internal_mutable_output_directory();
  // @@protoc_insertion_point(field_mutable:caffe.SaveOutputParameter.output_directory)
  return _s;
}
inline const ::std::string& SaveOutputParameter::_internal_output_directory() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.output_directory_.Get();
}
inline void SaveOutputParameter::_internal_set_output_directory(const ::std::string& value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.output_directory_.Set(value, GetArena());
}
inline ::std::string* PROTOBUF_NONNULL SaveOutputParameter::_internal_mutable_output_directory() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _impl_.output_directory_.Mutable( GetArena());
}
inline ::std::string* PROTOBUF_NULLABLE SaveOutputParameter::release_output_directory() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.SaveOutputParameter.output_directory)
  if (!CheckHasBit(_impl_._has_bits_[0], 0x00000001U)) {
    return nullptr;
  }
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
  auto* released = _impl_.output_directory_.Release();
  if (::google::protobuf::internal::DebugHardenForceCopyDefaultString()) {
    _impl_.output_directory_.Set("", GetArena());
  }
  return released;
}
inline void SaveOutputParameter::set_allocated_output_directory(::std::string* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
  }
  _impl_.output_directory_.SetAllocated(value, GetArena());
  if (::google::protobuf::internal::DebugHardenForceCopyDefaultString() && _impl_.output_directory_.IsDefault()) {
    _impl_.output_directory_.Set("", GetArena());
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.SaveOutputParameter.output_directory)
}

// optional string output_name_prefix = 2;
inline bool SaveOutputParameter::has_output_name_prefix() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000002U);
  return value;
}
inline void SaveOutputParameter::clear_output_name_prefix() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.output_name_prefix_.ClearToEmpty();
  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
}
inline const ::std::string& SaveOutputParameter::output_name_prefix() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.SaveOutputParameter.output_name_prefix)
  return _internal_output_name_prefix();
}
template <typename Arg_, typename... Args_>
PROTOBUF_ALWAYS_INLINE void SaveOutputParameter::set_output_name_prefix(Arg_&& arg, Args_... args) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  _impl_.output_name_prefix_.Set(static_cast<Arg_&&>(arg), args..., GetArena());
  // @@protoc_insertion_point(field_set:caffe.SaveOutputParameter.output_name_prefix)
}
inline ::std::string* PROTOBUF_NONNULL SaveOutputParameter::mutable_output_name_prefix()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  ::std::string* _s = _internal_mutable_output_name_prefix();
  // @@protoc_insertion_point(field_mutable:caffe.SaveOutputParameter.output_name_prefix)
  return _s;
}
inline const ::std::string& SaveOutputParameter::_internal_output_name_prefix() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.output_name_prefix_.Get();
}
inline void SaveOutputParameter::_internal_set_output_name_prefix(const ::std::string& value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.output_name_prefix_.Set(value, GetArena());
}
inline ::std::string* PROTOBUF_NONNULL SaveOutputParameter::_internal_mutable_output_name_prefix() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _impl_.output_name_prefix_.Mutable( GetArena());
}
inline ::std::string* PROTOBUF_NULLABLE SaveOutputParameter::release_output_name_prefix() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.SaveOutputParameter.output_name_prefix)
  if (!CheckHasBit(_impl_._has_bits_[0], 0x00000002U)) {
    return nullptr;
  }
  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
  auto* released = _impl_.output_name_prefix_.Release();
  if (::google::protobuf::internal::DebugHardenForceCopyDefaultString()) {
    _impl_.output_name_prefix_.Set("", GetArena());
  }
  return released;
}
inline void SaveOutputParameter::set_allocated_output_name_prefix(::std::string* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
  }
  _impl_.output_name_prefix_.SetAllocated(value, GetArena());
  if (::google::protobuf::internal::DebugHardenForceCopyDefaultString() && _impl_.output_name_prefix_.IsDefault()) {
    _impl_.output_name_prefix_.Set("", GetArena());
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.SaveOutputParameter.output_name_prefix)
}

// optional string output_format = 3;
inline bool SaveOutputParameter::has_output_format() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000004U);
  return value;
}
inline void SaveOutputParameter::clear_output_format() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.output_format_.ClearToEmpty();
  ClearHasBit(_impl_._has_bits_[0], 0x00000004U);
}
inline const ::std::string& SaveOutputParameter::output_format() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.SaveOutputParameter.output_format)
  return _internal_output_format();
}
template <typename Arg_, typename... Args_>
PROTOBUF_ALWAYS_INLINE void SaveOutputParameter::set_output_format(Arg_&& arg, Args_... args) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  SetHasBit(_impl_._has_bits_[0], 0x00000004U);
  _impl_.output_format_.Set(static_cast<Arg_&&>(arg), args..., GetArena());
  // @@protoc_insertion_point(field_set:caffe.SaveOutputParameter.output_format)
}
inline ::std::string* PROTOBUF_NONNULL SaveOutputParameter::mutable_output_format()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000004U);
  ::std::string* _s = _internal_mutable_output_format();
  // @@protoc_insertion_point(field_mutable:caffe.SaveOutputParameter.output_format)
  return _s;
}
inline const ::std::string& SaveOutputParameter::_internal_output_format() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.output_format_.Get();
}
inline void SaveOutputParameter::_internal_set_output_format(const ::std::string& value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.output_format_.Set(value, GetArena());
}
inline ::std::string* PROTOBUF_NONNULL SaveOutputParameter::_internal_mutable_output_format() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _impl_.output_format_.Mutable( GetArena());
}
inline ::std::string* PROTOBUF_NULLABLE SaveOutputParameter::release_output_format() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.SaveOutputParameter.output_format)
  if (!CheckHasBit(_impl_._has_bits_[0], 0x00000004U)) {
    return nullptr;
  }
  ClearHasBit(_impl_._has_bits_[0], 0x00000004U);
  auto* released = _impl_.output_format_.Release();
  if (::google::protobuf::internal::DebugHardenForceCopyDefaultString()) {
    _impl_.output_format_.Set("", GetArena());
  }
  return released;
}
inline void SaveOutputParameter::set_allocated_output_format(::std::string* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000004U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000004U);
  }
  _impl_.output_format_.SetAllocated(value, GetArena());
  if (::google::protobuf::internal::DebugHardenForceCopyDefaultString() && _impl_.output_format_.IsDefault()) {
    _impl_.output_format_.Set("", GetArena());
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.SaveOutputParameter.output_format)
}

// optional string label_map_file = 4;
inline bool SaveOutputParameter::has_label_map_file() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000008U);
  return value;
}
inline void SaveOutputParameter::clear_label_map_file() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.label_map_file_.ClearToEmpty();
  ClearHasBit(_impl_._has_bits_[0], 0x00000008U);
}
inline const ::std::string& SaveOutputParameter::label_map_file() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.SaveOutputParameter.label_map_file)
  return _internal_label_map_file();
}
template <typename Arg_, typename... Args_>
PROTOBUF_ALWAYS_INLINE void SaveOutputParameter::set_label_map_file(Arg_&& arg, Args_... args) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  SetHasBit(_impl_._has_bits_[0], 0x00000008U);
  _impl_.label_map_file_.Set(static_cast<Arg_&&>(arg), args..., GetArena());
  // @@protoc_insertion_point(field_set:caffe.SaveOutputParameter.label_map_file)
}
inline ::std::string* PROTOBUF_NONNULL SaveOutputParameter::mutable_label_map_file()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000008U);
  ::std::string* _s = _internal_mutable_label_map_file();
  // @@protoc_insertion_point(field_mutable:caffe.SaveOutputParameter.label_map_file)
  return _s;
}
inline const ::std::string& SaveOutputParameter::_internal_label_map_file() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.label_map_file_.Get();
}
inline void SaveOutputParameter::_internal_set_label_map_file(const ::std::string& value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.label_map_file_.Set(value, GetArena());
}
inline ::std::string* PROTOBUF_NONNULL SaveOutputParameter::_internal_mutable_label_map_file() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _impl_.label_map_file_.Mutable( GetArena());
}
inline ::std::string* PROTOBUF_NULLABLE SaveOutputParameter::release_label_map_file() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.SaveOutputParameter.label_map_file)
  if (!CheckHasBit(_impl_._has_bits_[0], 0x00000008U)) {
    return nullptr;
  }
  ClearHasBit(_impl_._has_bits_[0], 0x00000008U);
  auto* released = _impl_.label_map_file_.Release();
  if (::google::protobuf::internal::DebugHardenForceCopyDefaultString()) {
    _impl_.label_map_file_.Set("", GetArena());
  }
  return released;
}
inline void SaveOutputParameter::set_allocated_label_map_file(::std::string* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000008U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000008U);
  }
  _impl_.label_map_file_.SetAllocated(value, GetArena());
  if (::google::protobuf::internal::DebugHardenForceCopyDefaultString() && _impl_.label_map_file_.IsDefault()) {
    _impl_.label_map_file_.Set("", GetArena());
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.SaveOutputParameter.label_map_file)
}

// optional string name_size_file = 5;
inline bool SaveOutputParameter::has_name_size_file() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000010U);
  return value;
}
inline void SaveOutputParameter::clear_name_size_file() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.name_size_file_.ClearToEmpty();
  ClearHasBit(_impl_._has_bits_[0], 0x00000010U);
}
inline const ::std::string& SaveOutputParameter::name_size_file() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.SaveOutputParameter.name_size_file)
  return _internal_name_size_file();
}
template <typename Arg_, typename... Args_>
PROTOBUF_ALWAYS_INLINE void SaveOutputParameter::set_name_size_file(Arg_&& arg, Args_... args) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  SetHasBit(_impl_._has_bits_[0], 0x00000010U);
  _impl_.name_size_file_.Set(static_cast<Arg_&&>(arg), args..., GetArena());
  // @@protoc_insertion_point(field_set:caffe.SaveOutputParameter.name_size_file)
}
inline ::std::string* PROTOBUF_NONNULL SaveOutputParameter::mutable_name_size_file()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000010U);
  ::std::string* _s = _internal_mutable_name_size_file();
  // @@protoc_insertion_point(field_mutable:caffe.SaveOutputParameter.name_size_file)
  return _s;
}
inline const ::std::string& SaveOutputParameter::_internal_name_size_file() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.name_size_file_.Get();
}
inline void SaveOutputParameter::_internal_set_name_size_file(const ::std::string& value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.name_size_file_.Set(value, GetArena());
}
inline ::std::string* PROTOBUF_NONNULL SaveOutputParameter::_internal_mutable_name_size_file() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _impl_.name_size_file_.Mutable( GetArena());
}
inline ::std::string* PROTOBUF_NULLABLE SaveOutputParameter::release_name_size_file() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.SaveOutputParameter.name_size_file)
  if (!CheckHasBit(_impl_._has_bits_[0], 0x00000010U)) {
    return nullptr;
  }
  ClearHasBit(_impl_._has_bits_[0], 0x00000010U);
  auto* released = _impl_.name_size_file_.Release();
  if (::google::protobuf::internal::DebugHardenForceCopyDefaultString()) {
    _impl_.name_size_file_.Set("", GetArena());
  }
  return released;
}
inline void SaveOutputParameter::set_allocated_name_size_file(::std::string* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000010U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000010U);
  }
  _impl_.name_size_file_.SetAllocated(value, GetArena());
  if (::google::protobuf::internal::DebugHardenForceCopyDefaultString() && _impl_.name_size_file_.IsDefault()) {
    _impl_.name_size_file_.Set("", GetArena());
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.SaveOutputParameter.name_size_file)
}

// optional uint32 num_test_image = 6;
inline bool SaveOutputParameter::has_num_test_image() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000040U);
  return value;
}
inline void SaveOutputParameter::clear_num_test_image() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.num_test_image_ = 0u;
  ClearHasBit(_impl_._has_bits_[0], 0x00000040U);
}
inline ::uint32_t SaveOutputParameter::num_test_image() const {
  // @@protoc_insertion_point(field_get:caffe.SaveOutputParameter.num_test_image)
  return _internal_num_test_image();
}
inline void SaveOutputParameter::set_num_test_image(::uint32_t value) {
  _internal_set_num_test_image(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000040U);
  // @@protoc_insertion_point(field_set:caffe.SaveOutputParameter.num_test_image)
}
inline ::uint32_t SaveOutputParameter::_internal_num_test_image() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.num_test_image_;
}
inline void SaveOutputParameter::_internal_set_num_test_image(::uint32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.num_test_image_ = value;
}

// optional .caffe.ResizeParameter resize_param = 7;
inline bool SaveOutputParameter::has_resize_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000020U);
  PROTOBUF_ASSUME(!value || _impl_.resize_param_ != nullptr);
  return value;
}
inline void SaveOutputParameter::clear_resize_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.resize_param_ != nullptr) _impl_.resize_param_->Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000020U);
}
inline const ::caffe::ResizeParameter& SaveOutputParameter::_internal_resize_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::ResizeParameter* p = _impl_.resize_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::ResizeParameter>(&::caffe::ResizeParameter_globals_);
}
inline const ::caffe::ResizeParameter& SaveOutputParameter::resize_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.SaveOutputParameter.resize_param)
  return _internal_resize_param();
}
inline void SaveOutputParameter::unsafe_arena_set_allocated_resize_param(
    ::caffe::ResizeParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.resize_param_);
  }
  _impl_.resize_param_ = reinterpret_cast<::caffe::ResizeParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000020U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000020U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.SaveOutputParameter.resize_param)
}
inline ::caffe::ResizeParameter* PROTOBUF_NULLABLE SaveOutputParameter::release_resize_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[0], 0x00000020U);
  ::caffe::ResizeParameter* released = _impl_.resize_param_;
  _impl_.resize_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::ResizeParameter* PROTOBUF_NULLABLE SaveOutputParameter::unsafe_arena_release_resize_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.SaveOutputParameter.resize_param)

  ClearHasBit(_impl_._has_bits_[0], 0x00000020U);
  ::caffe::ResizeParameter* temp = _impl_.resize_param_;
  _impl_.resize_param_ = nullptr;
  return temp;
}
inline ::caffe::ResizeParameter* PROTOBUF_NONNULL SaveOutputParameter::_internal_mutable_resize_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.resize_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::ResizeParameter>(GetArena());
    _impl_.resize_param_ = reinterpret_cast<::caffe::ResizeParameter*>(p);
  }
  return _impl_.resize_param_;
}
inline ::caffe::ResizeParameter* PROTOBUF_NONNULL SaveOutputParameter::mutable_resize_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000020U);
  ::caffe::ResizeParameter* _msg = _internal_mutable_resize_param();
  // @@protoc_insertion_point(field_mutable:caffe.SaveOutputParameter.resize_param)
  return _msg;
}
inline void SaveOutputParameter::set_allocated_resize_param(::caffe::ResizeParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.resize_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[0], 0x00000020U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000020U);
  }

  _impl_.resize_param_ = reinterpret_cast<::caffe::ResizeParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.SaveOutputParameter.resize_param)
}

// -------------------------------------------------------------------

// DetectionOutputParameter

// optional uint32 num_classes = 1;
inline bool DetectionOutputParameter::has_num_classes() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000008U);
  return value;
}
inline void DetectionOutputParameter::clear_num_classes() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.num_classes_ = 0u;
  ClearHasBit(_impl_._has_bits_[0], 0x00000008U);
}
inline ::uint32_t DetectionOutputParameter::num_classes() const {
  // @@protoc_insertion_point(field_get:caffe.DetectionOutputParameter.num_classes)
  return _internal_num_classes();
}
inline void DetectionOutputParameter::set_num_classes(::uint32_t value) {
  _internal_set_num_classes(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000008U);
  // @@protoc_insertion_point(field_set:caffe.DetectionOutputParameter.num_classes)
}
inline ::uint32_t DetectionOutputParameter::_internal_num_classes() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.num_classes_;
}
inline void DetectionOutputParameter::_internal_set_num_classes(::uint32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.num_classes_ = value;
}

// optional bool share_location = 2 [default = true];
inline bool DetectionOutputParameter::has_share_location() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000400U);
  return value;
}
inline void DetectionOutputParameter::clear_share_location() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.share_location_ = true;
  ClearHasBit(_impl_._has_bits_[0], 0x00000400U);
}
inline bool DetectionOutputParameter::share_location() const {
  // @@protoc_insertion_point(field_get:caffe.DetectionOutputParameter.share_location)
  return _internal_share_location();
}
inline void DetectionOutputParameter::set_share_location(bool value) {
  _internal_set_share_location(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000400U);
  // @@protoc_insertion_point(field_set:caffe.DetectionOutputParameter.share_location)
}
inline bool DetectionOutputParameter::_internal_share_location() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.share_location_;
}
inline void DetectionOutputParameter::_internal_set_share_location(bool value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.share_location_ = value;
}

// optional int32 background_label_id = 3 [default = 0];
inline bool DetectionOutputParameter::has_background_label_id() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000010U);
  return value;
}
inline void DetectionOutputParameter::clear_background_label_id() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.background_label_id_ = 0;
  ClearHasBit(_impl_._has_bits_[0], 0x00000010U);
}
inline ::int32_t DetectionOutputParameter::background_label_id() const {
  // @@protoc_insertion_point(field_get:caffe.DetectionOutputParameter.background_label_id)
  return _internal_background_label_id();
}
inline void DetectionOutputParameter::set_background_label_id(::int32_t value) {
  _internal_set_background_label_id(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000010U);
  // @@protoc_insertion_point(field_set:caffe.DetectionOutputParameter.background_label_id)
}
inline ::int32_t DetectionOutputParameter::_internal_background_label_id() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.background_label_id_;
}
inline void DetectionOutputParameter::_internal_set_background_label_id(::int32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.background_label_id_ = value;
}

// optional .caffe.NonMaximumSuppressionParameter nms_param = 4;
inline bool DetectionOutputParameter::has_nms_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000002U);
  PROTOBUF_ASSUME(!value || _impl_.nms_param_ != nullptr);
  return value;
}
inline void DetectionOutputParameter::clear_nms_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.nms_param_ != nullptr) _impl_.nms_param_->Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
}
inline const ::caffe::NonMaximumSuppressionParameter& DetectionOutputParameter::_internal_nms_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::NonMaximumSuppressionParameter* p = _impl_.nms_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::NonMaximumSuppressionParameter>(&::caffe::NonMaximumSuppressionParameter_globals_);
}
inline const ::caffe::NonMaximumSuppressionParameter& DetectionOutputParameter::nms_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.DetectionOutputParameter.nms_param)
  return _internal_nms_param();
}
inline void DetectionOutputParameter::unsafe_arena_set_allocated_nms_param(
    ::caffe::NonMaximumSuppressionParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.nms_param_);
  }
  _impl_.nms_param_ = reinterpret_cast<::caffe::NonMaximumSuppressionParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.DetectionOutputParameter.nms_param)
}
inline ::caffe::NonMaximumSuppressionParameter* PROTOBUF_NULLABLE DetectionOutputParameter::release_nms_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
  ::caffe::NonMaximumSuppressionParameter* released = _impl_.nms_param_;
  _impl_.nms_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::NonMaximumSuppressionParameter* PROTOBUF_NULLABLE DetectionOutputParameter::unsafe_arena_release_nms_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.DetectionOutputParameter.nms_param)

  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
  ::caffe::NonMaximumSuppressionParameter* temp = _impl_.nms_param_;
  _impl_.nms_param_ = nullptr;
  return temp;
}
inline ::caffe::NonMaximumSuppressionParameter* PROTOBUF_NONNULL DetectionOutputParameter::_internal_mutable_nms_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.nms_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::NonMaximumSuppressionParameter>(GetArena());
    _impl_.nms_param_ = reinterpret_cast<::caffe::NonMaximumSuppressionParameter*>(p);
  }
  return _impl_.nms_param_;
}
inline ::caffe::NonMaximumSuppressionParameter* PROTOBUF_NONNULL DetectionOutputParameter::mutable_nms_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  ::caffe::NonMaximumSuppressionParameter* _msg = _internal_mutable_nms_param();
  // @@protoc_insertion_point(field_mutable:caffe.DetectionOutputParameter.nms_param)
  return _msg;
}
inline void DetectionOutputParameter::set_allocated_nms_param(::caffe::NonMaximumSuppressionParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.nms_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
  }

  _impl_.nms_param_ = reinterpret_cast<::caffe::NonMaximumSuppressionParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.DetectionOutputParameter.nms_param)
}

// optional .caffe.SaveOutputParameter save_output_param = 5;
inline bool DetectionOutputParameter::has_save_output_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000004U);
  PROTOBUF_ASSUME(!value || _impl_.save_output_param_ != nullptr);
  return value;
}
inline void DetectionOutputParameter::clear_save_output_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.save_output_param_ != nullptr) _impl_.save_output_param_->Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000004U);
}
inline const ::caffe::SaveOutputParameter& DetectionOutputParameter::_internal_save_output_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::SaveOutputParameter* p = _impl_.save_output_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::SaveOutputParameter>(&::caffe::SaveOutputParameter_globals_);
}
inline const ::caffe::SaveOutputParameter& DetectionOutputParameter::save_output_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.DetectionOutputParameter.save_output_param)
  return _internal_save_output_param();
}
inline void DetectionOutputParameter::unsafe_arena_set_allocated_save_output_param(
    ::caffe::SaveOutputParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.save_output_param_);
  }
  _impl_.save_output_param_ = reinterpret_cast<::caffe::SaveOutputParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000004U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000004U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.DetectionOutputParameter.save_output_param)
}
inline ::caffe::SaveOutputParameter* PROTOBUF_NULLABLE DetectionOutputParameter::release_save_output_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[0], 0x00000004U);
  ::caffe::SaveOutputParameter* released = _impl_.save_output_param_;
  _impl_.save_output_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::SaveOutputParameter* PROTOBUF_NULLABLE DetectionOutputParameter::unsafe_arena_release_save_output_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.DetectionOutputParameter.save_output_param)

  ClearHasBit(_impl_._has_bits_[0], 0x00000004U);
  ::caffe::SaveOutputParameter* temp = _impl_.save_output_param_;
  _impl_.save_output_param_ = nullptr;
  return temp;
}
inline ::caffe::SaveOutputParameter* PROTOBUF_NONNULL DetectionOutputParameter::_internal_mutable_save_output_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.save_output_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::SaveOutputParameter>(GetArena());
    _impl_.save_output_param_ = reinterpret_cast<::caffe::SaveOutputParameter*>(p);
  }
  return _impl_.save_output_param_;
}
inline ::caffe::SaveOutputParameter* PROTOBUF_NONNULL DetectionOutputParameter::mutable_save_output_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000004U);
  ::caffe::SaveOutputParameter* _msg = _internal_mutable_save_output_param();
  // @@protoc_insertion_point(field_mutable:caffe.DetectionOutputParameter.save_output_param)
  return _msg;
}
inline void DetectionOutputParameter::set_allocated_save_output_param(::caffe::SaveOutputParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.save_output_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[0], 0x00000004U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000004U);
  }

  _impl_.save_output_param_ = reinterpret_cast<::caffe::SaveOutputParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.DetectionOutputParameter.save_output_param)
}

// optional .caffe.PriorBoxParameter.CodeType code_type = 6 [default = CORNER];
inline bool DetectionOutputParameter::has_code_type() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000800U);
  return value;
}
inline void DetectionOutputParameter::clear_code_type() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.code_type_ = 1;
  ClearHasBit(_impl_._has_bits_[0], 0x00000800U);
}
inline ::caffe::PriorBoxParameter_CodeType DetectionOutputParameter::code_type() const {
  // @@protoc_insertion_point(field_get:caffe.DetectionOutputParameter.code_type)
  return _internal_code_type();
}
inline void DetectionOutputParameter::set_code_type(::caffe::PriorBoxParameter_CodeType value) {
  _internal_set_code_type(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000800U);
  // @@protoc_insertion_point(field_set:caffe.DetectionOutputParameter.code_type)
}
inline ::caffe::PriorBoxParameter_CodeType DetectionOutputParameter::_internal_code_type() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return static_cast<::caffe::PriorBoxParameter_CodeType>(_impl_.code_type_);
}
inline void DetectionOutputParameter::_internal_set_code_type(::caffe::PriorBoxParameter_CodeType value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);

                                          assert(::google::protobuf::internal::ValidateEnum(
                                              value, ::caffe::PriorBoxParameter_CodeType_internal_data_));
                                          _impl_.code_type_ = value;
}

// optional bool variance_encoded_in_target = 8 [default = false];
inline bool DetectionOutputParameter::has_variance_encoded_in_target() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000040U);
  return value;
}
inline void DetectionOutputParameter::clear_variance_encoded_in_target() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.variance_encoded_in_target_ = false;
  ClearHasBit(_impl_._has_bits_[0], 0x00000040U);
}
inline bool DetectionOutputParameter::variance_encoded_in_target() const {
  // @@protoc_insertion_point(field_get:caffe.DetectionOutputParameter.variance_encoded_in_target)
  return _internal_variance_encoded_in_target();
}
inline void DetectionOutputParameter::set_variance_encoded_in_target(bool value) {
  _internal_set_variance_encoded_in_target(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000040U);
  // @@protoc_insertion_point(field_set:caffe.DetectionOutputParameter.variance_encoded_in_target)
}
inline bool DetectionOutputParameter::_internal_variance_encoded_in_target() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.variance_encoded_in_target_;
}
inline void DetectionOutputParameter::_internal_set_variance_encoded_in_target(bool value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.variance_encoded_in_target_ = value;
}

// optional int32 keep_top_k = 7 [default = -1];
inline bool DetectionOutputParameter::has_keep_top_k() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000200U);
  return value;
}
inline void DetectionOutputParameter::clear_keep_top_k() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.keep_top_k_ = -1;
  ClearHasBit(_impl_._has_bits_[0], 0x00000200U);
}
inline ::int32_t DetectionOutputParameter::keep_top_k() const {
  // @@protoc_insertion_point(field_get:caffe.DetectionOutputParameter.keep_top_k)
  return _internal_keep_top_k();
}
inline void DetectionOutputParameter::set_keep_top_k(::int32_t value) {
  _internal_set_keep_top_k(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000200U);
  // @@protoc_insertion_point(field_set:caffe.DetectionOutputParameter.keep_top_k)
}
inline ::int32_t DetectionOutputParameter::_internal_keep_top_k() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.keep_top_k_;
}
inline void DetectionOutputParameter::_internal_set_keep_top_k(::int32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.keep_top_k_ = value;
}

// optional float confidence_threshold = 9;
inline bool DetectionOutputParameter::has_confidence_threshold() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000020U);
  return value;
}
inline void DetectionOutputParameter::clear_confidence_threshold() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.confidence_threshold_ = 0;
  ClearHasBit(_impl_._has_bits_[0], 0x00000020U);
}
inline float DetectionOutputParameter::confidence_threshold() const {
  // @@protoc_insertion_point(field_get:caffe.DetectionOutputParameter.confidence_threshold)
  return _internal_confidence_threshold();
}
inline void DetectionOutputParameter::set_confidence_threshold(float value) {
  _internal_set_confidence_threshold(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000020U);
  // @@protoc_insertion_point(field_set:caffe.DetectionOutputParameter.confidence_threshold)
}
inline float DetectionOutputParameter::_internal_confidence_threshold() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.confidence_threshold_;
}
inline void DetectionOutputParameter::_internal_set_confidence_threshold(float value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.confidence_threshold_ = value;
}

// optional bool visualize = 10 [default = false];
inline bool DetectionOutputParameter::has_visualize() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000080U);
  return value;
}
inline void DetectionOutputParameter::clear_visualize() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.visualize_ = false;
  ClearHasBit(_impl_._has_bits_[0], 0x00000080U);
}
inline bool DetectionOutputParameter::visualize() const {
  // @@protoc_insertion_point(field_get:caffe.DetectionOutputParameter.visualize)
  return _internal_visualize();
}
inline void DetectionOutputParameter::set_visualize(bool value) {
  _internal_set_visualize(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000080U);
  // @@protoc_insertion_point(field_set:caffe.DetectionOutputParameter.visualize)
}
inline bool DetectionOutputParameter::_internal_visualize() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.visualize_;
}
inline void DetectionOutputParameter::_internal_set_visualize(bool value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.visualize_ = value;
}

// optional float visualize_threshold = 11;
inline bool DetectionOutputParameter::has_visualize_threshold() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000100U);
  return value;
}
inline void DetectionOutputParameter::clear_visualize_threshold() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.visualize_threshold_ = 0;
  ClearHasBit(_impl_._has_bits_[0], 0x00000100U);
}
inline float DetectionOutputParameter::visualize_threshold() const {
  // @@protoc_insertion_point(field_get:caffe.DetectionOutputParameter.visualize_threshold)
  return _internal_visualize_threshold();
}
inline void DetectionOutputParameter::set_visualize_threshold(float value) {
  _internal_set_visualize_threshold(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000100U);
  // @@protoc_insertion_point(field_set:caffe.DetectionOutputParameter.visualize_threshold)
}
inline float DetectionOutputParameter::_internal_visualize_threshold() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.visualize_threshold_;
}
inline void DetectionOutputParameter::_internal_set_visualize_threshold(float value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.visualize_threshold_ = value;
}

// optional string save_file = 12;
inline bool DetectionOutputParameter::has_save_file() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000001U);
  return value;
}
inline void DetectionOutputParameter::clear_save_file() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.save_file_.ClearToEmpty();
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
}
inline const ::std::string& DetectionOutputParameter::save_file() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.DetectionOutputParameter.save_file)
  return _internal_save_file();
}
template <typename Arg_, typename... Args_>
PROTOBUF_ALWAYS_INLINE void DetectionOutputParameter::set_save_file(Arg_&& arg, Args_... args) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  _impl_.save_file_.Set(static_cast<Arg_&&>(arg), args..., GetArena());
  // @@protoc_insertion_point(field_set:caffe.DetectionOutputParameter.save_file)
}
inline ::std::string* PROTOBUF_NONNULL DetectionOutputParameter::mutable_save_file()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  ::std::string* _s = _internal_mutable_save_file();
  // @@protoc_insertion_point(field_mutable:caffe.DetectionOutputParameter.save_file)
  return _s;
}
inline const ::std::string& DetectionOutputParameter::_internal_save_file() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.save_file_.Get();
}
inline void DetectionOutputParameter::_internal_set_save_file(const ::std::string& value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.save_file_.Set(value, GetArena());
}
inline ::std::string* PROTOBUF_NONNULL DetectionOutputParameter::_internal_mutable_save_file() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _impl_.save_file_.Mutable( GetArena());
}
inline ::std::string* PROTOBUF_NULLABLE DetectionOutputParameter::release_save_file() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.DetectionOutputParameter.save_file)
  if (!CheckHasBit(_impl_._has_bits_[0], 0x00000001U)) {
    return nullptr;
  }
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
  auto* released = _impl_.save_file_.Release();
  if (::google::protobuf::internal::DebugHardenForceCopyDefaultString()) {
    _impl_.save_file_.Set("", GetArena());
  }
  return released;
}
inline void DetectionOutputParameter::set_allocated_save_file(::std::string* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
  }
  _impl_.save_file_.SetAllocated(value, GetArena());
  if (::google::protobuf::internal::DebugHardenForceCopyDefaultString() && _impl_.save_file_.IsDefault()) {
    _impl_.save_file_.Set("", GetArena());
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.DetectionOutputParameter.save_file)
}

// -------------------------------------------------------------------

// YoloDetectionOutputParameter

// optional uint32 side = 1 [default = 13];
inline bool YoloDetectionOutputParameter::has_side() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000004U);
  return value;
}
inline void YoloDetectionOutputParameter::clear_side() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.side_ = 13u;
  ClearHasBit(_impl_._has_bits_[0], 0x00000004U);
}
inline ::uint32_t YoloDetectionOutputParameter::side() const {
  // @@protoc_insertion_point(field_get:caffe.YoloDetectionOutputParameter.side)
  return _internal_side();
}
inline void YoloDetectionOutputParameter::set_side(::uint32_t value) {
  _internal_set_side(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000004U);
  // @@protoc_insertion_point(field_set:caffe.YoloDetectionOutputParameter.side)
}
inline ::uint32_t YoloDetectionOutputParameter::_internal_side() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.side_;
}
inline void YoloDetectionOutputParameter::_internal_set_side(::uint32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.side_ = value;
}

// optional uint32 num_classes = 2 [default = 20];
inline bool YoloDetectionOutputParameter::has_num_classes() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000008U);
  return value;
}
inline void YoloDetectionOutputParameter::clear_num_classes() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.num_classes_ = 20u;
  ClearHasBit(_impl_._has_bits_[0], 0x00000008U);
}
inline ::uint32_t YoloDetectionOutputParameter::num_classes() const {
  // @@protoc_insertion_point(field_get:caffe.YoloDetectionOutputParameter.num_classes)
  return _internal_num_classes();
}
inline void YoloDetectionOutputParameter::set_num_classes(::uint32_t value) {
  _internal_set_num_classes(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000008U);
  // @@protoc_insertion_point(field_set:caffe.YoloDetectionOutputParameter.num_classes)
}
inline ::uint32_t YoloDetectionOutputParameter::_internal_num_classes() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.num_classes_;
}
inline void YoloDetectionOutputParameter::_internal_set_num_classes(::uint32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.num_classes_ = value;
}

// optional uint32 num_box = 3 [default = 5];
inline bool YoloDetectionOutputParameter::has_num_box() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000010U);
  return value;
}
inline void YoloDetectionOutputParameter::clear_num_box() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.num_box_ = 5u;
  ClearHasBit(_impl_._has_bits_[0], 0x00000010U);
}
inline ::uint32_t YoloDetectionOutputParameter::num_box() const {
  // @@protoc_insertion_point(field_get:caffe.YoloDetectionOutputParameter.num_box)
  return _internal_num_box();
}
inline void YoloDetectionOutputParameter::set_num_box(::uint32_t value) {
  _internal_set_num_box(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000010U);
  // @@protoc_insertion_point(field_set:caffe.YoloDetectionOutputParameter.num_box)
}
inline ::uint32_t YoloDetectionOutputParameter::_internal_num_box() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.num_box_;
}
inline void YoloDetectionOutputParameter::_internal_set_num_box(::uint32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.num_box_ = value;
}

// optional uint32 coords = 4 [default = 4];
inline bool YoloDetectionOutputParameter::has_coords() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000020U);
  return value;
}
inline void YoloDetectionOutputParameter::clear_coords() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.coords_ = 4u;
  ClearHasBit(_impl_._has_bits_[0], 0x00000020U);
}
inline ::uint32_t YoloDetectionOutputParameter::coords() const {
  // @@protoc_insertion_point(field_get:caffe.YoloDetectionOutputParameter.coords)
  return _internal_coords();
}
inline void YoloDetectionOutputParameter::set_coords(::uint32_t value) {
  _internal_set_coords(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000020U);
  // @@protoc_insertion_point(field_set:caffe.YoloDetectionOutputParameter.coords)
}
inline ::uint32_t YoloDetectionOutputParameter::_internal_coords() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.coords_;
}
inline void YoloDetectionOutputParameter::_internal_set_coords(::uint32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.coords_ = value;
}

// optional float confidence_threshold = 5 [default = 0.01];
inline bool YoloDetectionOutputParameter::has_confidence_threshold() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000040U);
  return value;
}
inline void YoloDetectionOutputParameter::clear_confidence_threshold() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.confidence_threshold_ = 0.01f;
  ClearHasBit(_impl_._has_bits_[0], 0x00000040U);
}
inline float YoloDetectionOutputParameter::confidence_threshold() const {
  // @@protoc_insertion_point(field_get:caffe.YoloDetectionOutputParameter.confidence_threshold)
  return _internal_confidence_threshold();
}
inline void YoloDetectionOutputParameter::set_confidence_threshold(float value) {
  _internal_set_confidence_threshold(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000040U);
  // @@protoc_insertion_point(field_set:caffe.YoloDetectionOutputParameter.confidence_threshold)
}
inline float YoloDetectionOutputParameter::_internal_confidence_threshold() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.confidence_threshold_;
}
inline void YoloDetectionOutputParameter::_internal_set_confidence_threshold(float value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.confidence_threshold_ = value;
}

// optional float nms_threshold = 6 [default = 0.45];
inline bool YoloDetectionOutputParameter::has_nms_threshold() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000080U);
  return value;
}
inline void YoloDetectionOutputParameter::clear_nms_threshold() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.nms_threshold_ = 0.45f;
  ClearHasBit(_impl_._has_bits_[0], 0x00000080U);
}
inline float YoloDetectionOutputParameter::nms_threshold() const {
  // @@protoc_insertion_point(field_get:caffe.YoloDetectionOutputParameter.nms_threshold)
  return _internal_nms_threshold();
}
inline void YoloDetectionOutputParameter::set_nms_threshold(float value) {
  _internal_set_nms_threshold(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000080U);
  // @@protoc_insertion_point(field_set:caffe.YoloDetectionOutputParameter.nms_threshold)
}
inline float YoloDetectionOutputParameter::_internal_nms_threshold() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.nms_threshold_;
}
inline void YoloDetectionOutputParameter::_internal_set_nms_threshold(float value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.nms_threshold_ = value;
}

// repeated float biases = 7;
inline int YoloDetectionOutputParameter::_internal_biases_size() const {
  return _internal_biases().size();
}
inline int YoloDetectionOutputParameter::biases_size() const {
  return _internal_biases_size();
}
inline void YoloDetectionOutputParameter::clear_biases() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.biases_.Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
}
inline float YoloDetectionOutputParameter::biases(int index) const {
  // @@protoc_insertion_point(field_get:caffe.YoloDetectionOutputParameter.biases)
  return _internal_biases().Get(index);
}
inline void YoloDetectionOutputParameter::set_biases(int index, float value) {
  _internal_mutable_biases()->Set(index, value);
  // @@protoc_insertion_point(field_set:caffe.YoloDetectionOutputParameter.biases)
}
inline void YoloDetectionOutputParameter::add_biases(float value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _internal_mutable_biases()
      ->InternalAddWithArena<const ::google::protobuf::MessageLite*>(
          internal_visibility(), this, value);
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_add:caffe.YoloDetectionOutputParameter.biases)
}
inline const ::google::protobuf::RepeatedField<float>& YoloDetectionOutputParameter::biases() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_list:caffe.YoloDetectionOutputParameter.biases)
  return _internal_biases();
}
inline ::google::protobuf::RepeatedField<float>* PROTOBUF_NONNULL YoloDetectionOutputParameter::mutable_biases()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_mutable_list:caffe.YoloDetectionOutputParameter.biases)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _internal_mutable_biases();
}
inline const ::google::protobuf::RepeatedField<float>&
YoloDetectionOutputParameter::_internal_biases() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.biases_;
}
inline ::google::protobuf::RepeatedField<float>* PROTOBUF_NONNULL
YoloDetectionOutputParameter::_internal_mutable_biases() {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return &_impl_.biases_;
}

// optional string label_map_file = 8;
inline bool YoloDetectionOutputParameter::has_label_map_file() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000002U);
  return value;
}
inline void YoloDetectionOutputParameter::clear_label_map_file() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.label_map_file_.ClearToEmpty();
  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
}
inline const ::std::string& YoloDetectionOutputParameter::label_map_file() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.YoloDetectionOutputParameter.label_map_file)
  return _internal_label_map_file();
}
template <typename Arg_, typename... Args_>
PROTOBUF_ALWAYS_INLINE void YoloDetectionOutputParameter::set_label_map_file(Arg_&& arg, Args_... args) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  _impl_.label_map_file_.Set(static_cast<Arg_&&>(arg), args..., GetArena());
  // @@protoc_insertion_point(field_set:caffe.YoloDetectionOutputParameter.label_map_file)
}
inline ::std::string* PROTOBUF_NONNULL YoloDetectionOutputParameter::mutable_label_map_file()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  ::std::string* _s = _internal_mutable_label_map_file();
  // @@protoc_insertion_point(field_mutable:caffe.YoloDetectionOutputParameter.label_map_file)
  return _s;
}
inline const ::std::string& YoloDetectionOutputParameter::_internal_label_map_file() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.label_map_file_.Get();
}
inline void YoloDetectionOutputParameter::_internal_set_label_map_file(const ::std::string& value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.label_map_file_.Set(value, GetArena());
}
inline ::std::string* PROTOBUF_NONNULL YoloDetectionOutputParameter::_internal_mutable_label_map_file() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _impl_.label_map_file_.Mutable( GetArena());
}
inline ::std::string* PROTOBUF_NULLABLE YoloDetectionOutputParameter::release_label_map_file() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.YoloDetectionOutputParameter.label_map_file)
  if (!CheckHasBit(_impl_._has_bits_[0], 0x00000002U)) {
    return nullptr;
  }
  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
  auto* released = _impl_.label_map_file_.Release();
  if (::google::protobuf::internal::DebugHardenForceCopyDefaultString()) {
    _impl_.label_map_file_.Set("", GetArena());
  }
  return released;
}
inline void YoloDetectionOutputParameter::set_allocated_label_map_file(::std::string* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
  }
  _impl_.label_map_file_.SetAllocated(value, GetArena());
  if (::google::protobuf::internal::DebugHardenForceCopyDefaultString() && _impl_.label_map_file_.IsDefault()) {
    _impl_.label_map_file_.Set("", GetArena());
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.YoloDetectionOutputParameter.label_map_file)
}

// -------------------------------------------------------------------

// Yolov3DetectionOutputParameter

// optional uint32 num_classes = 1 [default = 20];
inline bool Yolov3DetectionOutputParameter::has_num_classes() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000008U);
  return value;
}
inline void Yolov3DetectionOutputParameter::clear_num_classes() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.num_classes_ = 20u;
  ClearHasBit(_impl_._has_bits_[0], 0x00000008U);
}
inline ::uint32_t Yolov3DetectionOutputParameter::num_classes() const {
  // @@protoc_insertion_point(field_get:caffe.Yolov3DetectionOutputParameter.num_classes)
  return _internal_num_classes();
}
inline void Yolov3DetectionOutputParameter::set_num_classes(::uint32_t value) {
  _internal_set_num_classes(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000008U);
  // @@protoc_insertion_point(field_set:caffe.Yolov3DetectionOutputParameter.num_classes)
}
inline ::uint32_t Yolov3DetectionOutputParameter::_internal_num_classes() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.num_classes_;
}
inline void Yolov3DetectionOutputParameter::_internal_set_num_classes(::uint32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.num_classes_ = value;
}

// optional uint32 num_box = 2 [default = 3];
inline bool Yolov3DetectionOutputParameter::has_num_box() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000010U);
  return value;
}
inline void Yolov3DetectionOutputParameter::clear_num_box() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.num_box_ = 3u;
  ClearHasBit(_impl_._has_bits_[0], 0x00000010U);
}
inline ::uint32_t Yolov3DetectionOutputParameter::num_box() const {
  // @@protoc_insertion_point(field_get:caffe.Yolov3DetectionOutputParameter.num_box)
  return _internal_num_box();
}
inline void Yolov3DetectionOutputParameter::set_num_box(::uint32_t value) {
  _internal_set_num_box(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000010U);
  // @@protoc_insertion_point(field_set:caffe.Yolov3DetectionOutputParameter.num_box)
}
inline ::uint32_t Yolov3DetectionOutputParameter::_internal_num_box() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.num_box_;
}
inline void Yolov3DetectionOutputParameter::_internal_set_num_box(::uint32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.num_box_ = value;
}

// optional float confidence_threshold = 3 [default = 0.01];
inline bool Yolov3DetectionOutputParameter::has_confidence_threshold() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000020U);
  return value;
}
inline void Yolov3DetectionOutputParameter::clear_confidence_threshold() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.confidence_threshold_ = 0.01f;
  ClearHasBit(_impl_._has_bits_[0], 0x00000020U);
}
inline float Yolov3DetectionOutputParameter::confidence_threshold() const {
  // @@protoc_insertion_point(field_get:caffe.Yolov3DetectionOutputParameter.confidence_threshold)
  return _internal_confidence_threshold();
}
inline void Yolov3DetectionOutputParameter::set_confidence_threshold(float value) {
  _internal_set_confidence_threshold(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000020U);
  // @@protoc_insertion_point(field_set:caffe.Yolov3DetectionOutputParameter.confidence_threshold)
}
inline float Yolov3DetectionOutputParameter::_internal_confidence_threshold() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.confidence_threshold_;
}
inline void Yolov3DetectionOutputParameter::_internal_set_confidence_threshold(float value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.confidence_threshold_ = value;
}

// optional float nms_threshold = 4 [default = 0.45];
inline bool Yolov3DetectionOutputParameter::has_nms_threshold() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000040U);
  return value;
}
inline void Yolov3DetectionOutputParameter::clear_nms_threshold() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.nms_threshold_ = 0.45f;
  ClearHasBit(_impl_._has_bits_[0], 0x00000040U);
}
inline float Yolov3DetectionOutputParameter::nms_threshold() const {
  // @@protoc_insertion_point(field_get:caffe.Yolov3DetectionOutputParameter.nms_threshold)
  return _internal_nms_threshold();
}
inline void Yolov3DetectionOutputParameter::set_nms_threshold(float value) {
  _internal_set_nms_threshold(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000040U);
  // @@protoc_insertion_point(field_set:caffe.Yolov3DetectionOutputParameter.nms_threshold)
}
inline float Yolov3DetectionOutputParameter::_internal_nms_threshold() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.nms_threshold_;
}
inline void Yolov3DetectionOutputParameter::_internal_set_nms_threshold(float value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.nms_threshold_ = value;
}

// repeated float biases = 5;
inline int Yolov3DetectionOutputParameter::_internal_biases_size() const {
  return _internal_biases().size();
}
inline int Yolov3DetectionOutputParameter::biases_size() const {
  return _internal_biases_size();
}
inline void Yolov3DetectionOutputParameter::clear_biases() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.biases_.Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
}
inline float Yolov3DetectionOutputParameter::biases(int index) const {
  // @@protoc_insertion_point(field_get:caffe.Yolov3DetectionOutputParameter.biases)
  return _internal_biases().Get(index);
}
inline void Yolov3DetectionOutputParameter::set_biases(int index, float value) {
  _internal_mutable_biases()->Set(index, value);
  // @@protoc_insertion_point(field_set:caffe.Yolov3DetectionOutputParameter.biases)
}
inline void Yolov3DetectionOutputParameter::add_biases(float value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _internal_mutable_biases()
      ->InternalAddWithArena<const ::google::protobuf::MessageLite*>(
          internal_visibility(), this, value);
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_add:caffe.Yolov3DetectionOutputParameter.biases)
}
inline const ::google::protobuf::RepeatedField<float>& Yolov3DetectionOutputParameter::biases() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_list:caffe.Yolov3DetectionOutputParameter.biases)
  return _internal_biases();
}
inline ::google::protobuf::RepeatedField<float>* PROTOBUF_NONNULL Yolov3DetectionOutputParameter::mutable_biases()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_mutable_list:caffe.Yolov3DetectionOutputParameter.biases)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _internal_mutable_biases();
}
inline const ::google::protobuf::RepeatedField<float>&
Yolov3DetectionOutputParameter::_internal_biases() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.biases_;
}
inline ::google::protobuf::RepeatedField<float>* PROTOBUF_NONNULL
Yolov3DetectionOutputParameter::_internal_mutable_biases() {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return &_impl_.biases_;
}

// repeated uint32 anchors_scale = 6;
inline int Yolov3DetectionOutputParameter::_internal_anchors_scale_size() const {
  return _internal_anchors_scale().size();
}
inline int Yolov3DetectionOutputParameter::anchors_scale_size() const {
  return _internal_anchors_scale_size();
}
inline void Yolov3DetectionOutputParameter::clear_anchors_scale() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.anchors_scale_.Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
}
inline ::uint32_t Yolov3DetectionOutputParameter::anchors_scale(int index) const {
  // @@protoc_insertion_point(field_get:caffe.Yolov3DetectionOutputParameter.anchors_scale)
  return _internal_anchors_scale().Get(index);
}
inline void Yolov3DetectionOutputParameter::set_anchors_scale(int index, ::uint32_t value) {
  _internal_mutable_anchors_scale()->Set(index, value);
  // @@protoc_insertion_point(field_set:caffe.Yolov3DetectionOutputParameter.anchors_scale)
}
inline void Yolov3DetectionOutputParameter::add_anchors_scale(::uint32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _internal_mutable_anchors_scale()
      ->InternalAddWithArena<const ::google::protobuf::MessageLite*>(
          internal_visibility(), this, value);
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  // @@protoc_insertion_point(field_add:caffe.Yolov3DetectionOutputParameter.anchors_scale)
}
inline const ::google::protobuf::RepeatedField<::uint32_t>& Yolov3DetectionOutputParameter::anchors_scale() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_list:caffe.Yolov3DetectionOutputParameter.anchors_scale)
  return _internal_anchors_scale();
}
inline ::google::protobuf::RepeatedField<::uint32_t>* PROTOBUF_NONNULL Yolov3DetectionOutputParameter::mutable_anchors_scale()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  // @@protoc_insertion_point(field_mutable_list:caffe.Yolov3DetectionOutputParameter.anchors_scale)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _internal_mutable_anchors_scale();
}
inline const ::google::protobuf::RepeatedField<::uint32_t>&
Yolov3DetectionOutputParameter::_internal_anchors_scale() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.anchors_scale_;
}
inline ::google::protobuf::RepeatedField<::uint32_t>* PROTOBUF_NONNULL
Yolov3DetectionOutputParameter::_internal_mutable_anchors_scale() {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return &_impl_.anchors_scale_;
}

// optional uint32 mask_group_num = 7 [default = 2];
inline bool Yolov3DetectionOutputParameter::has_mask_group_num() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000080U);
  return value;
}
inline void Yolov3DetectionOutputParameter::clear_mask_group_num() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.mask_group_num_ = 2u;
  ClearHasBit(_impl_._has_bits_[0], 0x00000080U);
}
inline ::uint32_t Yolov3DetectionOutputParameter::mask_group_num() const {
  // @@protoc_insertion_point(field_get:caffe.Yolov3DetectionOutputParameter.mask_group_num)
  return _internal_mask_group_num();
}
inline void Yolov3DetectionOutputParameter::set_mask_group_num(::uint32_t value) {
  _internal_set_mask_group_num(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000080U);
  // @@protoc_insertion_point(field_set:caffe.Yolov3DetectionOutputParameter.mask_group_num)
}
inline ::uint32_t Yolov3DetectionOutputParameter::_internal_mask_group_num() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.mask_group_num_;
}
inline void Yolov3DetectionOutputParameter::_internal_set_mask_group_num(::uint32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.mask_group_num_ = value;
}

// repeated uint32 mask = 8;
inline int Yolov3DetectionOutputParameter::_internal_mask_size() const {
  return _internal_mask().size();
}
inline int Yolov3DetectionOutputParameter::mask_size() const {
  return _internal_mask_size();
}
inline void Yolov3DetectionOutputParameter::clear_mask() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.mask_.Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000004U);
}
inline ::uint32_t Yolov3DetectionOutputParameter::mask(int index) const {
  // @@protoc_insertion_point(field_get:caffe.Yolov3DetectionOutputParameter.mask)
  return _internal_mask().Get(index);
}
inline void Yolov3DetectionOutputParameter::set_mask(int index, ::uint32_t value) {
  _internal_mutable_mask()->Set(index, value);
  // @@protoc_insertion_point(field_set:caffe.Yolov3DetectionOutputParameter.mask)
}
inline void Yolov3DetectionOutputParameter::add_mask(::uint32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _internal_mutable_mask()
      ->InternalAddWithArena<const ::google::protobuf::MessageLite*>(
          internal_visibility(), this, value);
  SetHasBit(_impl_._has_bits_[0], 0x00000004U);
  // @@protoc_insertion_point(field_add:caffe.Yolov3DetectionOutputParameter.mask)
}
inline const ::google::protobuf::RepeatedField<::uint32_t>& Yolov3DetectionOutputParameter::mask() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_list:caffe.Yolov3DetectionOutputParameter.mask)
  return _internal_mask();
}
inline ::google::protobuf::RepeatedField<::uint32_t>* PROTOBUF_NONNULL Yolov3DetectionOutputParameter::mutable_mask()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000004U);
  // @@protoc_insertion_point(field_mutable_list:caffe.Yolov3DetectionOutputParameter.mask)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _internal_mutable_mask();
}
inline const ::google::protobuf::RepeatedField<::uint32_t>&
Yolov3DetectionOutputParameter::_internal_mask() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.mask_;
}
inline ::google::protobuf::RepeatedField<::uint32_t>* PROTOBUF_NONNULL
Yolov3DetectionOutputParameter::_internal_mutable_mask() {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return &_impl_.mask_;
}

// -------------------------------------------------------------------

// DropoutParameter

// optional float dropout_ratio = 1 [default = 0.5];
inline bool DropoutParameter::has_dropout_ratio() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000001U);
  return value;
}
inline void DropoutParameter::clear_dropout_ratio() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.dropout_ratio_ = 0.5f;
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
}
inline float DropoutParameter::dropout_ratio() const {
  // @@protoc_insertion_point(field_get:caffe.DropoutParameter.dropout_ratio)
  return _internal_dropout_ratio();
}
inline void DropoutParameter::set_dropout_ratio(float value) {
  _internal_set_dropout_ratio(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_set:caffe.DropoutParameter.dropout_ratio)
}
inline float DropoutParameter::_internal_dropout_ratio() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.dropout_ratio_;
}
inline void DropoutParameter::_internal_set_dropout_ratio(float value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.dropout_ratio_ = value;
}

// optional bool scale_train = 2 [default = true];
inline bool DropoutParameter::has_scale_train() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000002U);
  return value;
}
inline void DropoutParameter::clear_scale_train() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.scale_train_ = true;
  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
}
inline bool DropoutParameter::scale_train() const {
  // @@protoc_insertion_point(field_get:caffe.DropoutParameter.scale_train)
  return _internal_scale_train();
}
inline void DropoutParameter::set_scale_train(bool value) {
  _internal_set_scale_train(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  // @@protoc_insertion_point(field_set:caffe.DropoutParameter.scale_train)
}
inline bool DropoutParameter::_internal_scale_train() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.scale_train_;
}
inline void DropoutParameter::_internal_set_scale_train(bool value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.scale_train_ = value;
}

// -------------------------------------------------------------------

// DummyDataParameter

// repeated .caffe.FillerParameter data_filler = 1;
inline int DummyDataParameter::_internal_data_filler_size() const {
  return _internal_data_filler().size();
}
inline int DummyDataParameter::data_filler_size() const {
  return _internal_data_filler_size();
}
inline void DummyDataParameter::clear_data_filler() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.data_filler_.Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
}
inline const ::caffe::FillerParameter& DummyDataParameter::data_filler(int index) const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.DummyDataParameter.data_filler)
  return _internal_data_filler().Get(index);
}
inline ::caffe::FillerParameter* PROTOBUF_NONNULL DummyDataParameter::mutable_data_filler(int index)
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_mutable:caffe.DummyDataParameter.data_filler)
  return _internal_mutable_data_filler()->Mutable(index);
}
inline ::caffe::FillerParameter* PROTOBUF_NONNULL DummyDataParameter::add_data_filler()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  ::caffe::FillerParameter* _add =
      _internal_mutable_data_filler()->InternalAddWithArena(
          ::google::protobuf::MessageLite::internal_visibility(), GetArena());
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_add:caffe.DummyDataParameter.data_filler)
  return _add;
}
inline const ::google::protobuf::RepeatedPtrField<::caffe::FillerParameter>& DummyDataParameter::data_filler() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_list:caffe.DummyDataParameter.data_filler)
  return _internal_data_filler();
}
inline ::google::protobuf::RepeatedPtrField<::caffe::FillerParameter>* PROTOBUF_NONNULL
DummyDataParameter::mutable_data_filler() ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_mutable_list:caffe.DummyDataParameter.data_filler)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _internal_mutable_data_filler();
}
inline const ::google::protobuf::RepeatedPtrField<::caffe::FillerParameter>&
DummyDataParameter::_internal_data_filler() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.data_filler_;
}
inline ::google::protobuf::RepeatedPtrField<::caffe::FillerParameter>* PROTOBUF_NONNULL
DummyDataParameter::_internal_mutable_data_filler() {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return &_impl_.data_filler_;
}

// repeated .caffe.BlobShape shape = 6;
inline int DummyDataParameter::_internal_shape_size() const {
  return _internal_shape().size();
}
inline int DummyDataParameter::shape_size() const {
  return _internal_shape_size();
}
inline void DummyDataParameter::clear_shape() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.shape_.Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000020U);
}
inline const ::caffe::BlobShape& DummyDataParameter::shape(int index) const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.DummyDataParameter.shape)
  return _internal_shape().Get(index);
}
inline ::caffe::BlobShape* PROTOBUF_NONNULL DummyDataParameter::mutable_shape(int index)
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_mutable:caffe.DummyDataParameter.shape)
  return _internal_mutable_shape()->Mutable(index);
}
inline ::caffe::BlobShape* PROTOBUF_NONNULL DummyDataParameter::add_shape()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  ::caffe::BlobShape* _add =
      _internal_mutable_shape()->InternalAddWithArena(
          ::google::protobuf::MessageLite::internal_visibility(), GetArena());
  SetHasBit(_impl_._has_bits_[0], 0x00000020U);
  // @@protoc_insertion_point(field_add:caffe.DummyDataParameter.shape)
  return _add;
}
inline const ::google::protobuf::RepeatedPtrField<::caffe::BlobShape>& DummyDataParameter::shape() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_list:caffe.DummyDataParameter.shape)
  return _internal_shape();
}
inline ::google::protobuf::RepeatedPtrField<::caffe::BlobShape>* PROTOBUF_NONNULL
DummyDataParameter::mutable_shape() ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000020U);
  // @@protoc_insertion_point(field_mutable_list:caffe.DummyDataParameter.shape)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _internal_mutable_shape();
}
inline const ::google::protobuf::RepeatedPtrField<::caffe::BlobShape>&
DummyDataParameter::_internal_shape() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.shape_;
}
inline ::google::protobuf::RepeatedPtrField<::caffe::BlobShape>* PROTOBUF_NONNULL
DummyDataParameter::_internal_mutable_shape() {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return &_impl_.shape_;
}

// repeated uint32 num = 2;
inline int DummyDataParameter::_internal_num_size() const {
  return _internal_num().size();
}
inline int DummyDataParameter::num_size() const {
  return _internal_num_size();
}
inline void DummyDataParameter::clear_num() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.num_.Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
}
inline ::uint32_t DummyDataParameter::num(int index) const {
  // @@protoc_insertion_point(field_get:caffe.DummyDataParameter.num)
  return _internal_num().Get(index);
}
inline void DummyDataParameter::set_num(int index, ::uint32_t value) {
  _internal_mutable_num()->Set(index, value);
  // @@protoc_insertion_point(field_set:caffe.DummyDataParameter.num)
}
inline void DummyDataParameter::add_num(::uint32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _internal_mutable_num()
      ->InternalAddWithArena<const ::google::protobuf::MessageLite*>(
          internal_visibility(), this, value);
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  // @@protoc_insertion_point(field_add:caffe.DummyDataParameter.num)
}
inline const ::google::protobuf::RepeatedField<::uint32_t>& DummyDataParameter::num() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_list:caffe.DummyDataParameter.num)
  return _internal_num();
}
inline ::google::protobuf::RepeatedField<::uint32_t>* PROTOBUF_NONNULL DummyDataParameter::mutable_num()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  // @@protoc_insertion_point(field_mutable_list:caffe.DummyDataParameter.num)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _internal_mutable_num();
}
inline const ::google::protobuf::RepeatedField<::uint32_t>&
DummyDataParameter::_internal_num() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.num_;
}
inline ::google::protobuf::RepeatedField<::uint32_t>* PROTOBUF_NONNULL
DummyDataParameter::_internal_mutable_num() {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return &_impl_.num_;
}

// repeated uint32 channels = 3;
inline int DummyDataParameter::_internal_channels_size() const {
  return _internal_channels().size();
}
inline int DummyDataParameter::channels_size() const {
  return _internal_channels_size();
}
inline void DummyDataParameter::clear_channels() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.channels_.Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000004U);
}
inline ::uint32_t DummyDataParameter::channels(int index) const {
  // @@protoc_insertion_point(field_get:caffe.DummyDataParameter.channels)
  return _internal_channels().Get(index);
}
inline void DummyDataParameter::set_channels(int index, ::uint32_t value) {
  _internal_mutable_channels()->Set(index, value);
  // @@protoc_insertion_point(field_set:caffe.DummyDataParameter.channels)
}
inline void DummyDataParameter::add_channels(::uint32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _internal_mutable_channels()
      ->InternalAddWithArena<const ::google::protobuf::MessageLite*>(
          internal_visibility(), this, value);
  SetHasBit(_impl_._has_bits_[0], 0x00000004U);
  // @@protoc_insertion_point(field_add:caffe.DummyDataParameter.channels)
}
inline const ::google::protobuf::RepeatedField<::uint32_t>& DummyDataParameter::channels() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_list:caffe.DummyDataParameter.channels)
  return _internal_channels();
}
inline ::google::protobuf::RepeatedField<::uint32_t>* PROTOBUF_NONNULL DummyDataParameter::mutable_channels()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000004U);
  // @@protoc_insertion_point(field_mutable_list:caffe.DummyDataParameter.channels)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _internal_mutable_channels();
}
inline const ::google::protobuf::RepeatedField<::uint32_t>&
DummyDataParameter::_internal_channels() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.channels_;
}
inline ::google::protobuf::RepeatedField<::uint32_t>* PROTOBUF_NONNULL
DummyDataParameter::_internal_mutable_channels() {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return &_impl_.channels_;
}

// repeated uint32 height = 4;
inline int DummyDataParameter::_internal_height_size() const {
  return _internal_height().size();
}
inline int DummyDataParameter::height_size() const {
  return _internal_height_size();
}
inline void DummyDataParameter::clear_height() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.height_.Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000008U);
}
inline ::uint32_t DummyDataParameter::height(int index) const {
  // @@protoc_insertion_point(field_get:caffe.DummyDataParameter.height)
  return _internal_height().Get(index);
}
inline void DummyDataParameter::set_height(int index, ::uint32_t value) {
  _internal_mutable_height()->Set(index, value);
  // @@protoc_insertion_point(field_set:caffe.DummyDataParameter.height)
}
inline void DummyDataParameter::add_height(::uint32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _internal_mutable_height()
      ->InternalAddWithArena<const ::google::protobuf::MessageLite*>(
          internal_visibility(), this, value);
  SetHasBit(_impl_._has_bits_[0], 0x00000008U);
  // @@protoc_insertion_point(field_add:caffe.DummyDataParameter.height)
}
inline const ::google::protobuf::RepeatedField<::uint32_t>& DummyDataParameter::height() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_list:caffe.DummyDataParameter.height)
  return _internal_height();
}
inline ::google::protobuf::RepeatedField<::uint32_t>* PROTOBUF_NONNULL DummyDataParameter::mutable_height()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000008U);
  // @@protoc_insertion_point(field_mutable_list:caffe.DummyDataParameter.height)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _internal_mutable_height();
}
inline const ::google::protobuf::RepeatedField<::uint32_t>&
DummyDataParameter::_internal_height() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.height_;
}
inline ::google::protobuf::RepeatedField<::uint32_t>* PROTOBUF_NONNULL
DummyDataParameter::_internal_mutable_height() {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return &_impl_.height_;
}

// repeated uint32 width = 5;
inline int DummyDataParameter::_internal_width_size() const {
  return _internal_width().size();
}
inline int DummyDataParameter::width_size() const {
  return _internal_width_size();
}
inline void DummyDataParameter::clear_width() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.width_.Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000010U);
}
inline ::uint32_t DummyDataParameter::width(int index) const {
  // @@protoc_insertion_point(field_get:caffe.DummyDataParameter.width)
  return _internal_width().Get(index);
}
inline void DummyDataParameter::set_width(int index, ::uint32_t value) {
  _internal_mutable_width()->Set(index, value);
  // @@protoc_insertion_point(field_set:caffe.DummyDataParameter.width)
}
inline void DummyDataParameter::add_width(::uint32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _internal_mutable_width()
      ->InternalAddWithArena<const ::google::protobuf::MessageLite*>(
          internal_visibility(), this, value);
  SetHasBit(_impl_._has_bits_[0], 0x00000010U);
  // @@protoc_insertion_point(field_add:caffe.DummyDataParameter.width)
}
inline const ::google::protobuf::RepeatedField<::uint32_t>& DummyDataParameter::width() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_list:caffe.DummyDataParameter.width)
  return _internal_width();
}
inline ::google::protobuf::RepeatedField<::uint32_t>* PROTOBUF_NONNULL DummyDataParameter::mutable_width()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000010U);
  // @@protoc_insertion_point(field_mutable_list:caffe.DummyDataParameter.width)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _internal_mutable_width();
}
inline const ::google::protobuf::RepeatedField<::uint32_t>&
DummyDataParameter::_internal_width() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.width_;
}
inline ::google::protobuf::RepeatedField<::uint32_t>* PROTOBUF_NONNULL
DummyDataParameter::_internal_mutable_width() {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return &_impl_.width_;
}

// -------------------------------------------------------------------

// EltwiseParameter

// optional .caffe.EltwiseParameter.EltwiseOp operation = 1 [default = SUM];
inline bool EltwiseParameter::has_operation() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000002U);
  return value;
}
inline void EltwiseParameter::clear_operation() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.operation_ = 1;
  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
}
inline ::caffe::EltwiseParameter_EltwiseOp EltwiseParameter::operation() const {
  // @@protoc_insertion_point(field_get:caffe.EltwiseParameter.operation)
  return _internal_operation();
}
inline void EltwiseParameter::set_operation(::caffe::EltwiseParameter_EltwiseOp value) {
  _internal_set_operation(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  // @@protoc_insertion_point(field_set:caffe.EltwiseParameter.operation)
}
inline ::caffe::EltwiseParameter_EltwiseOp EltwiseParameter::_internal_operation() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return static_cast<::caffe::EltwiseParameter_EltwiseOp>(_impl_.operation_);
}
inline void EltwiseParameter::_internal_set_operation(::caffe::EltwiseParameter_EltwiseOp value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);

                                          assert(::google::protobuf::internal::ValidateEnum(
                                              value, ::caffe::EltwiseParameter_EltwiseOp_internal_data_));
                                          _impl_.operation_ = value;
}

// repeated float coeff = 2;
inline int EltwiseParameter::_internal_coeff_size() const {
  return _internal_coeff().size();
}
inline int EltwiseParameter::coeff_size() const {
  return _internal_coeff_size();
}
inline void EltwiseParameter::clear_coeff() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.coeff_.Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
}
inline float EltwiseParameter::coeff(int index) const {
  // @@protoc_insertion_point(field_get:caffe.EltwiseParameter.coeff)
  return _internal_coeff().Get(index);
}
inline void EltwiseParameter::set_coeff(int index, float value) {
  _internal_mutable_coeff()->Set(index, value);
  // @@protoc_insertion_point(field_set:caffe.EltwiseParameter.coeff)
}
inline void EltwiseParameter::add_coeff(float value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _internal_mutable_coeff()
      ->InternalAddWithArena<const ::google::protobuf::MessageLite*>(
          internal_visibility(), this, value);
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_add:caffe.EltwiseParameter.coeff)
}
inline const ::google::protobuf::RepeatedField<float>& EltwiseParameter::coeff() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_list:caffe.EltwiseParameter.coeff)
  return _internal_coeff();
}
inline ::google::protobuf::RepeatedField<float>* PROTOBUF_NONNULL EltwiseParameter::mutable_coeff()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_mutable_list:caffe.EltwiseParameter.coeff)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _internal_mutable_coeff();
}
inline const ::google::protobuf::RepeatedField<float>&
EltwiseParameter::_internal_coeff() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.coeff_;
}
inline ::google::protobuf::RepeatedField<float>* PROTOBUF_NONNULL
EltwiseParameter::_internal_mutable_coeff() {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return &_impl_.coeff_;
}

// optional bool stable_prod_grad = 3 [default = true];
inline bool EltwiseParameter::has_stable_prod_grad() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000004U);
  return value;
}
inline void EltwiseParameter::clear_stable_prod_grad() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.stable_prod_grad_ = true;
  ClearHasBit(_impl_._has_bits_[0], 0x00000004U);
}
inline bool EltwiseParameter::stable_prod_grad() const {
  // @@protoc_insertion_point(field_get:caffe.EltwiseParameter.stable_prod_grad)
  return _internal_stable_prod_grad();
}
inline void EltwiseParameter::set_stable_prod_grad(bool value) {
  _internal_set_stable_prod_grad(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000004U);
  // @@protoc_insertion_point(field_set:caffe.EltwiseParameter.stable_prod_grad)
}
inline bool EltwiseParameter::_internal_stable_prod_grad() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.stable_prod_grad_;
}
inline void EltwiseParameter::_internal_set_stable_prod_grad(bool value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.stable_prod_grad_ = value;
}

// -------------------------------------------------------------------

// ELUParameter

// optional float alpha = 1 [default = 1];
inline bool ELUParameter::has_alpha() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000001U);
  return value;
}
inline void ELUParameter::clear_alpha() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.alpha_ = 1;
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
}
inline float ELUParameter::alpha() const {
  // @@protoc_insertion_point(field_get:caffe.ELUParameter.alpha)
  return _internal_alpha();
}
inline void ELUParameter::set_alpha(float value) {
  _internal_set_alpha(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_set:caffe.ELUParameter.alpha)
}
inline float ELUParameter::_internal_alpha() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.alpha_;
}
inline void ELUParameter::_internal_set_alpha(float value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.alpha_ = value;
}

// -------------------------------------------------------------------

// EmbedParameter

// optional uint32 num_output = 1;
inline bool EmbedParameter::has_num_output() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000004U);
  return value;
}
inline void EmbedParameter::clear_num_output() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.num_output_ = 0u;
  ClearHasBit(_impl_._has_bits_[0], 0x00000004U);
}
inline ::uint32_t EmbedParameter::num_output() const {
  // @@protoc_insertion_point(field_get:caffe.EmbedParameter.num_output)
  return _internal_num_output();
}
inline void EmbedParameter::set_num_output(::uint32_t value) {
  _internal_set_num_output(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000004U);
  // @@protoc_insertion_point(field_set:caffe.EmbedParameter.num_output)
}
inline ::uint32_t EmbedParameter::_internal_num_output() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.num_output_;
}
inline void EmbedParameter::_internal_set_num_output(::uint32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.num_output_ = value;
}

// optional uint32 input_dim = 2;
inline bool EmbedParameter::has_input_dim() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000008U);
  return value;
}
inline void EmbedParameter::clear_input_dim() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.input_dim_ = 0u;
  ClearHasBit(_impl_._has_bits_[0], 0x00000008U);
}
inline ::uint32_t EmbedParameter::input_dim() const {
  // @@protoc_insertion_point(field_get:caffe.EmbedParameter.input_dim)
  return _internal_input_dim();
}
inline void EmbedParameter::set_input_dim(::uint32_t value) {
  _internal_set_input_dim(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000008U);
  // @@protoc_insertion_point(field_set:caffe.EmbedParameter.input_dim)
}
inline ::uint32_t EmbedParameter::_internal_input_dim() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.input_dim_;
}
inline void EmbedParameter::_internal_set_input_dim(::uint32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.input_dim_ = value;
}

// optional bool bias_term = 3 [default = true];
inline bool EmbedParameter::has_bias_term() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000010U);
  return value;
}
inline void EmbedParameter::clear_bias_term() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.bias_term_ = true;
  ClearHasBit(_impl_._has_bits_[0], 0x00000010U);
}
inline bool EmbedParameter::bias_term() const {
  // @@protoc_insertion_point(field_get:caffe.EmbedParameter.bias_term)
  return _internal_bias_term();
}
inline void EmbedParameter::set_bias_term(bool value) {
  _internal_set_bias_term(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000010U);
  // @@protoc_insertion_point(field_set:caffe.EmbedParameter.bias_term)
}
inline bool EmbedParameter::_internal_bias_term() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.bias_term_;
}
inline void EmbedParameter::_internal_set_bias_term(bool value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.bias_term_ = value;
}

// optional .caffe.FillerParameter weight_filler = 4;
inline bool EmbedParameter::has_weight_filler() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000001U);
  PROTOBUF_ASSUME(!value || _impl_.weight_filler_ != nullptr);
  return value;
}
inline void EmbedParameter::clear_weight_filler() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.weight_filler_ != nullptr) _impl_.weight_filler_->Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
}
inline const ::caffe::FillerParameter& EmbedParameter::_internal_weight_filler() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::FillerParameter* p = _impl_.weight_filler_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::FillerParameter>(&::caffe::FillerParameter_globals_);
}
inline const ::caffe::FillerParameter& EmbedParameter::weight_filler() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.EmbedParameter.weight_filler)
  return _internal_weight_filler();
}
inline void EmbedParameter::unsafe_arena_set_allocated_weight_filler(
    ::caffe::FillerParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.weight_filler_);
  }
  _impl_.weight_filler_ = reinterpret_cast<::caffe::FillerParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.EmbedParameter.weight_filler)
}
inline ::caffe::FillerParameter* PROTOBUF_NULLABLE EmbedParameter::release_weight_filler() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
  ::caffe::FillerParameter* released = _impl_.weight_filler_;
  _impl_.weight_filler_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::FillerParameter* PROTOBUF_NULLABLE EmbedParameter::unsafe_arena_release_weight_filler() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.EmbedParameter.weight_filler)

  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
  ::caffe::FillerParameter* temp = _impl_.weight_filler_;
  _impl_.weight_filler_ = nullptr;
  return temp;
}
inline ::caffe::FillerParameter* PROTOBUF_NONNULL EmbedParameter::_internal_mutable_weight_filler() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.weight_filler_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::FillerParameter>(GetArena());
    _impl_.weight_filler_ = reinterpret_cast<::caffe::FillerParameter*>(p);
  }
  return _impl_.weight_filler_;
}
inline ::caffe::FillerParameter* PROTOBUF_NONNULL EmbedParameter::mutable_weight_filler()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  ::caffe::FillerParameter* _msg = _internal_mutable_weight_filler();
  // @@protoc_insertion_point(field_mutable:caffe.EmbedParameter.weight_filler)
  return _msg;
}
inline void EmbedParameter::set_allocated_weight_filler(::caffe::FillerParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.weight_filler_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
  }

  _impl_.weight_filler_ = reinterpret_cast<::caffe::FillerParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.EmbedParameter.weight_filler)
}

// optional .caffe.FillerParameter bias_filler = 5;
inline bool EmbedParameter::has_bias_filler() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000002U);
  PROTOBUF_ASSUME(!value || _impl_.bias_filler_ != nullptr);
  return value;
}
inline void EmbedParameter::clear_bias_filler() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.bias_filler_ != nullptr) _impl_.bias_filler_->Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
}
inline const ::caffe::FillerParameter& EmbedParameter::_internal_bias_filler() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::FillerParameter* p = _impl_.bias_filler_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::FillerParameter>(&::caffe::FillerParameter_globals_);
}
inline const ::caffe::FillerParameter& EmbedParameter::bias_filler() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.EmbedParameter.bias_filler)
  return _internal_bias_filler();
}
inline void EmbedParameter::unsafe_arena_set_allocated_bias_filler(
    ::caffe::FillerParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.bias_filler_);
  }
  _impl_.bias_filler_ = reinterpret_cast<::caffe::FillerParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.EmbedParameter.bias_filler)
}
inline ::caffe::FillerParameter* PROTOBUF_NULLABLE EmbedParameter::release_bias_filler() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
  ::caffe::FillerParameter* released = _impl_.bias_filler_;
  _impl_.bias_filler_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::FillerParameter* PROTOBUF_NULLABLE EmbedParameter::unsafe_arena_release_bias_filler() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.EmbedParameter.bias_filler)

  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
  ::caffe::FillerParameter* temp = _impl_.bias_filler_;
  _impl_.bias_filler_ = nullptr;
  return temp;
}
inline ::caffe::FillerParameter* PROTOBUF_NONNULL EmbedParameter::_internal_mutable_bias_filler() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.bias_filler_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::FillerParameter>(GetArena());
    _impl_.bias_filler_ = reinterpret_cast<::caffe::FillerParameter*>(p);
  }
  return _impl_.bias_filler_;
}
inline ::caffe::FillerParameter* PROTOBUF_NONNULL EmbedParameter::mutable_bias_filler()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  ::caffe::FillerParameter* _msg = _internal_mutable_bias_filler();
  // @@protoc_insertion_point(field_mutable:caffe.EmbedParameter.bias_filler)
  return _msg;
}
inline void EmbedParameter::set_allocated_bias_filler(::caffe::FillerParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.bias_filler_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
  }

  _impl_.bias_filler_ = reinterpret_cast<::caffe::FillerParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.EmbedParameter.bias_filler)
}

// -------------------------------------------------------------------

// ExpParameter

// optional float base = 1 [default = -1];
inline bool ExpParameter::has_base() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000002U);
  return value;
}
inline void ExpParameter::clear_base() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.base_ = -1;
  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
}
inline float ExpParameter::base() const {
  // @@protoc_insertion_point(field_get:caffe.ExpParameter.base)
  return _internal_base();
}
inline void ExpParameter::set_base(float value) {
  _internal_set_base(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  // @@protoc_insertion_point(field_set:caffe.ExpParameter.base)
}
inline float ExpParameter::_internal_base() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.base_;
}
inline void ExpParameter::_internal_set_base(float value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.base_ = value;
}

// optional float scale = 2 [default = 1];
inline bool ExpParameter::has_scale() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000004U);
  return value;
}
inline void ExpParameter::clear_scale() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.scale_ = 1;
  ClearHasBit(_impl_._has_bits_[0], 0x00000004U);
}
inline float ExpParameter::scale() const {
  // @@protoc_insertion_point(field_get:caffe.ExpParameter.scale)
  return _internal_scale();
}
inline void ExpParameter::set_scale(float value) {
  _internal_set_scale(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000004U);
  // @@protoc_insertion_point(field_set:caffe.ExpParameter.scale)
}
inline float ExpParameter::_internal_scale() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.scale_;
}
inline void ExpParameter::_internal_set_scale(float value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.scale_ = value;
}

// optional float shift = 3 [default = 0];
inline bool ExpParameter::has_shift() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000001U);
  return value;
}
inline void ExpParameter::clear_shift() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.shift_ = 0;
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
}
inline float ExpParameter::shift() const {
  // @@protoc_insertion_point(field_get:caffe.ExpParameter.shift)
  return _internal_shift();
}
inline void ExpParameter::set_shift(float value) {
  _internal_set_shift(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_set:caffe.ExpParameter.shift)
}
inline float ExpParameter::_internal_shift() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.shift_;
}
inline void ExpParameter::_internal_set_shift(float value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.shift_ = value;
}

// -------------------------------------------------------------------

// FlattenParameter

// optional int32 axis = 1 [default = 1];
inline bool FlattenParameter::has_axis() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000001U);
  return value;
}
inline void FlattenParameter::clear_axis() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.axis_ = 1;
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
}
inline ::int32_t FlattenParameter::axis() const {
  // @@protoc_insertion_point(field_get:caffe.FlattenParameter.axis)
  return _internal_axis();
}
inline void FlattenParameter::set_axis(::int32_t value) {
  _internal_set_axis(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_set:caffe.FlattenParameter.axis)
}
inline ::int32_t FlattenParameter::_internal_axis() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.axis_;
}
inline void FlattenParameter::_internal_set_axis(::int32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.axis_ = value;
}

// optional int32 end_axis = 2 [default = -1];
inline bool FlattenParameter::has_end_axis() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000002U);
  return value;
}
inline void FlattenParameter::clear_end_axis() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.end_axis_ = -1;
  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
}
inline ::int32_t FlattenParameter::end_axis() const {
  // @@protoc_insertion_point(field_get:caffe.FlattenParameter.end_axis)
  return _internal_end_axis();
}
inline void FlattenParameter::set_end_axis(::int32_t value) {
  _internal_set_end_axis(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  // @@protoc_insertion_point(field_set:caffe.FlattenParameter.end_axis)
}
inline ::int32_t FlattenParameter::_internal_end_axis() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.end_axis_;
}
inline void FlattenParameter::_internal_set_end_axis(::int32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.end_axis_ = value;
}

// -------------------------------------------------------------------

// HDF5DataParameter

// optional string source = 1;
inline bool HDF5DataParameter::has_source() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000001U);
  return value;
}
inline void HDF5DataParameter::clear_source() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.source_.ClearToEmpty();
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
}
inline const ::std::string& HDF5DataParameter::source() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.HDF5DataParameter.source)
  return _internal_source();
}
template <typename Arg_, typename... Args_>
PROTOBUF_ALWAYS_INLINE void HDF5DataParameter::set_source(Arg_&& arg, Args_... args) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  _impl_.source_.Set(static_cast<Arg_&&>(arg), args..., GetArena());
  // @@protoc_insertion_point(field_set:caffe.HDF5DataParameter.source)
}
inline ::std::string* PROTOBUF_NONNULL HDF5DataParameter::mutable_source()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  ::std::string* _s = _internal_mutable_source();
  // @@protoc_insertion_point(field_mutable:caffe.HDF5DataParameter.source)
  return _s;
}
inline const ::std::string& HDF5DataParameter::_internal_source() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.source_.Get();
}
inline void HDF5DataParameter::_internal_set_source(const ::std::string& value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.source_.Set(value, GetArena());
}
inline ::std::string* PROTOBUF_NONNULL HDF5DataParameter::_internal_mutable_source() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _impl_.source_.Mutable( GetArena());
}
inline ::std::string* PROTOBUF_NULLABLE HDF5DataParameter::release_source() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.HDF5DataParameter.source)
  if (!CheckHasBit(_impl_._has_bits_[0], 0x00000001U)) {
    return nullptr;
  }
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
  auto* released = _impl_.source_.Release();
  if (::google::protobuf::internal::DebugHardenForceCopyDefaultString()) {
    _impl_.source_.Set("", GetArena());
  }
  return released;
}
inline void HDF5DataParameter::set_allocated_source(::std::string* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
  }
  _impl_.source_.SetAllocated(value, GetArena());
  if (::google::protobuf::internal::DebugHardenForceCopyDefaultString() && _impl_.source_.IsDefault()) {
    _impl_.source_.Set("", GetArena());
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.HDF5DataParameter.source)
}

// optional uint32 batch_size = 2;
inline bool HDF5DataParameter::has_batch_size() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000002U);
  return value;
}
inline void HDF5DataParameter::clear_batch_size() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.batch_size_ = 0u;
  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
}
inline ::uint32_t HDF5DataParameter::batch_size() const {
  // @@protoc_insertion_point(field_get:caffe.HDF5DataParameter.batch_size)
  return _internal_batch_size();
}
inline void HDF5DataParameter::set_batch_size(::uint32_t value) {
  _internal_set_batch_size(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  // @@protoc_insertion_point(field_set:caffe.HDF5DataParameter.batch_size)
}
inline ::uint32_t HDF5DataParameter::_internal_batch_size() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.batch_size_;
}
inline void HDF5DataParameter::_internal_set_batch_size(::uint32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.batch_size_ = value;
}

// optional bool shuffle = 3 [default = false];
inline bool HDF5DataParameter::has_shuffle() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000004U);
  return value;
}
inline void HDF5DataParameter::clear_shuffle() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.shuffle_ = false;
  ClearHasBit(_impl_._has_bits_[0], 0x00000004U);
}
inline bool HDF5DataParameter::shuffle() const {
  // @@protoc_insertion_point(field_get:caffe.HDF5DataParameter.shuffle)
  return _internal_shuffle();
}
inline void HDF5DataParameter::set_shuffle(bool value) {
  _internal_set_shuffle(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000004U);
  // @@protoc_insertion_point(field_set:caffe.HDF5DataParameter.shuffle)
}
inline bool HDF5DataParameter::_internal_shuffle() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.shuffle_;
}
inline void HDF5DataParameter::_internal_set_shuffle(bool value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.shuffle_ = value;
}

// -------------------------------------------------------------------

// HDF5OutputParameter

// optional string file_name = 1;
inline bool HDF5OutputParameter::has_file_name() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000001U);
  return value;
}
inline void HDF5OutputParameter::clear_file_name() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.file_name_.ClearToEmpty();
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
}
inline const ::std::string& HDF5OutputParameter::file_name() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.HDF5OutputParameter.file_name)
  return _internal_file_name();
}
template <typename Arg_, typename... Args_>
PROTOBUF_ALWAYS_INLINE void HDF5OutputParameter::set_file_name(Arg_&& arg, Args_... args) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  _impl_.file_name_.Set(static_cast<Arg_&&>(arg), args..., GetArena());
  // @@protoc_insertion_point(field_set:caffe.HDF5OutputParameter.file_name)
}
inline ::std::string* PROTOBUF_NONNULL HDF5OutputParameter::mutable_file_name()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  ::std::string* _s = _internal_mutable_file_name();
  // @@protoc_insertion_point(field_mutable:caffe.HDF5OutputParameter.file_name)
  return _s;
}
inline const ::std::string& HDF5OutputParameter::_internal_file_name() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.file_name_.Get();
}
inline void HDF5OutputParameter::_internal_set_file_name(const ::std::string& value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.file_name_.Set(value, GetArena());
}
inline ::std::string* PROTOBUF_NONNULL HDF5OutputParameter::_internal_mutable_file_name() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _impl_.file_name_.Mutable( GetArena());
}
inline ::std::string* PROTOBUF_NULLABLE HDF5OutputParameter::release_file_name() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.HDF5OutputParameter.file_name)
  if (!CheckHasBit(_impl_._has_bits_[0], 0x00000001U)) {
    return nullptr;
  }
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
  auto* released = _impl_.file_name_.Release();
  if (::google::protobuf::internal::DebugHardenForceCopyDefaultString()) {
    _impl_.file_name_.Set("", GetArena());
  }
  return released;
}
inline void HDF5OutputParameter::set_allocated_file_name(::std::string* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
  }
  _impl_.file_name_.SetAllocated(value, GetArena());
  if (::google::protobuf::internal::DebugHardenForceCopyDefaultString() && _impl_.file_name_.IsDefault()) {
    _impl_.file_name_.Set("", GetArena());
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.HDF5OutputParameter.file_name)
}

// -------------------------------------------------------------------

// HingeLossParameter

// optional .caffe.HingeLossParameter.Norm norm = 1 [default = L1];
inline bool HingeLossParameter::has_norm() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000001U);
  return value;
}
inline void HingeLossParameter::clear_norm() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.norm_ = 1;
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
}
inline ::caffe::HingeLossParameter_Norm HingeLossParameter::norm() const {
  // @@protoc_insertion_point(field_get:caffe.HingeLossParameter.norm)
  return _internal_norm();
}
inline void HingeLossParameter::set_norm(::caffe::HingeLossParameter_Norm value) {
  _internal_set_norm(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_set:caffe.HingeLossParameter.norm)
}
inline ::caffe::HingeLossParameter_Norm HingeLossParameter::_internal_norm() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return static_cast<::caffe::HingeLossParameter_Norm>(_impl_.norm_);
}
inline void HingeLossParameter::_internal_set_norm(::caffe::HingeLossParameter_Norm value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);

                                          assert(::google::protobuf::internal::ValidateEnum(
                                              value, ::caffe::HingeLossParameter_Norm_internal_data_));
                                          _impl_.norm_ = value;
}

// -------------------------------------------------------------------

// ImageDataParameter

// optional string source = 1;
inline bool ImageDataParameter::has_source() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000001U);
  return value;
}
inline void ImageDataParameter::clear_source() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.source_.ClearToEmpty();
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
}
inline const ::std::string& ImageDataParameter::source() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.ImageDataParameter.source)
  return _internal_source();
}
template <typename Arg_, typename... Args_>
PROTOBUF_ALWAYS_INLINE void ImageDataParameter::set_source(Arg_&& arg, Args_... args) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  _impl_.source_.Set(static_cast<Arg_&&>(arg), args..., GetArena());
  // @@protoc_insertion_point(field_set:caffe.ImageDataParameter.source)
}
inline ::std::string* PROTOBUF_NONNULL ImageDataParameter::mutable_source()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  ::std::string* _s = _internal_mutable_source();
  // @@protoc_insertion_point(field_mutable:caffe.ImageDataParameter.source)
  return _s;
}
inline const ::std::string& ImageDataParameter::_internal_source() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.source_.Get();
}
inline void ImageDataParameter::_internal_set_source(const ::std::string& value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.source_.Set(value, GetArena());
}
inline ::std::string* PROTOBUF_NONNULL ImageDataParameter::_internal_mutable_source() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _impl_.source_.Mutable( GetArena());
}
inline ::std::string* PROTOBUF_NULLABLE ImageDataParameter::release_source() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.ImageDataParameter.source)
  if (!CheckHasBit(_impl_._has_bits_[0], 0x00000001U)) {
    return nullptr;
  }
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
  auto* released = _impl_.source_.Release();
  if (::google::protobuf::internal::DebugHardenForceCopyDefaultString()) {
    _impl_.source_.Set("", GetArena());
  }
  return released;
}
inline void ImageDataParameter::set_allocated_source(::std::string* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
  }
  _impl_.source_.SetAllocated(value, GetArena());
  if (::google::protobuf::internal::DebugHardenForceCopyDefaultString() && _impl_.source_.IsDefault()) {
    _impl_.source_.Set("", GetArena());
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.ImageDataParameter.source)
}

// optional uint32 batch_size = 4 [default = 1];
inline bool ImageDataParameter::has_batch_size() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000800U);
  return value;
}
inline void ImageDataParameter::clear_batch_size() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.batch_size_ = 1u;
  ClearHasBit(_impl_._has_bits_[0], 0x00000800U);
}
inline ::uint32_t ImageDataParameter::batch_size() const {
  // @@protoc_insertion_point(field_get:caffe.ImageDataParameter.batch_size)
  return _internal_batch_size();
}
inline void ImageDataParameter::set_batch_size(::uint32_t value) {
  _internal_set_batch_size(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000800U);
  // @@protoc_insertion_point(field_set:caffe.ImageDataParameter.batch_size)
}
inline ::uint32_t ImageDataParameter::_internal_batch_size() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.batch_size_;
}
inline void ImageDataParameter::_internal_set_batch_size(::uint32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.batch_size_ = value;
}

// optional uint32 rand_skip = 7 [default = 0];
inline bool ImageDataParameter::has_rand_skip() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000010U);
  return value;
}
inline void ImageDataParameter::clear_rand_skip() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.rand_skip_ = 0u;
  ClearHasBit(_impl_._has_bits_[0], 0x00000010U);
}
inline ::uint32_t ImageDataParameter::rand_skip() const {
  // @@protoc_insertion_point(field_get:caffe.ImageDataParameter.rand_skip)
  return _internal_rand_skip();
}
inline void ImageDataParameter::set_rand_skip(::uint32_t value) {
  _internal_set_rand_skip(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000010U);
  // @@protoc_insertion_point(field_set:caffe.ImageDataParameter.rand_skip)
}
inline ::uint32_t ImageDataParameter::_internal_rand_skip() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.rand_skip_;
}
inline void ImageDataParameter::_internal_set_rand_skip(::uint32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.rand_skip_ = value;
}

// optional bool shuffle = 8 [default = false];
inline bool ImageDataParameter::has_shuffle() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000040U);
  return value;
}
inline void ImageDataParameter::clear_shuffle() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.shuffle_ = false;
  ClearHasBit(_impl_._has_bits_[0], 0x00000040U);
}
inline bool ImageDataParameter::shuffle() const {
  // @@protoc_insertion_point(field_get:caffe.ImageDataParameter.shuffle)
  return _internal_shuffle();
}
inline void ImageDataParameter::set_shuffle(bool value) {
  _internal_set_shuffle(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000040U);
  // @@protoc_insertion_point(field_set:caffe.ImageDataParameter.shuffle)
}
inline bool ImageDataParameter::_internal_shuffle() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.shuffle_;
}
inline void ImageDataParameter::_internal_set_shuffle(bool value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.shuffle_ = value;
}

// optional uint32 new_height = 9 [default = 0];
inline bool ImageDataParameter::has_new_height() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000080U);
  return value;
}
inline void ImageDataParameter::clear_new_height() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.new_height_ = 0u;
  ClearHasBit(_impl_._has_bits_[0], 0x00000080U);
}
inline ::uint32_t ImageDataParameter::new_height() const {
  // @@protoc_insertion_point(field_get:caffe.ImageDataParameter.new_height)
  return _internal_new_height();
}
inline void ImageDataParameter::set_new_height(::uint32_t value) {
  _internal_set_new_height(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000080U);
  // @@protoc_insertion_point(field_set:caffe.ImageDataParameter.new_height)
}
inline ::uint32_t ImageDataParameter::_internal_new_height() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.new_height_;
}
inline void ImageDataParameter::_internal_set_new_height(::uint32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.new_height_ = value;
}

// optional uint32 new_width = 10 [default = 0];
inline bool ImageDataParameter::has_new_width() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000100U);
  return value;
}
inline void ImageDataParameter::clear_new_width() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.new_width_ = 0u;
  ClearHasBit(_impl_._has_bits_[0], 0x00000100U);
}
inline ::uint32_t ImageDataParameter::new_width() const {
  // @@protoc_insertion_point(field_get:caffe.ImageDataParameter.new_width)
  return _internal_new_width();
}
inline void ImageDataParameter::set_new_width(::uint32_t value) {
  _internal_set_new_width(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000100U);
  // @@protoc_insertion_point(field_set:caffe.ImageDataParameter.new_width)
}
inline ::uint32_t ImageDataParameter::_internal_new_width() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.new_width_;
}
inline void ImageDataParameter::_internal_set_new_width(::uint32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.new_width_ = value;
}

// optional bool is_color = 11 [default = true];
inline bool ImageDataParameter::has_is_color() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000200U);
  return value;
}
inline void ImageDataParameter::clear_is_color() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.is_color_ = true;
  ClearHasBit(_impl_._has_bits_[0], 0x00000200U);
}
inline bool ImageDataParameter::is_color() const {
  // @@protoc_insertion_point(field_get:caffe.ImageDataParameter.is_color)
  return _internal_is_color();
}
inline void ImageDataParameter::set_is_color(bool value) {
  _internal_set_is_color(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000200U);
  // @@protoc_insertion_point(field_set:caffe.ImageDataParameter.is_color)
}
inline bool ImageDataParameter::_internal_is_color() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.is_color_;
}
inline void ImageDataParameter::_internal_set_is_color(bool value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.is_color_ = value;
}

// optional float scale = 2 [default = 1];
inline bool ImageDataParameter::has_scale() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000400U);
  return value;
}
inline void ImageDataParameter::clear_scale() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.scale_ = 1;
  ClearHasBit(_impl_._has_bits_[0], 0x00000400U);
}
inline float ImageDataParameter::scale() const {
  // @@protoc_insertion_point(field_get:caffe.ImageDataParameter.scale)
  return _internal_scale();
}
inline void ImageDataParameter::set_scale(float value) {
  _internal_set_scale(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000400U);
  // @@protoc_insertion_point(field_set:caffe.ImageDataParameter.scale)
}
inline float ImageDataParameter::_internal_scale() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.scale_;
}
inline void ImageDataParameter::_internal_set_scale(float value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.scale_ = value;
}

// optional string mean_file = 3;
inline bool ImageDataParameter::has_mean_file() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000002U);
  return value;
}
inline void ImageDataParameter::clear_mean_file() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.mean_file_.ClearToEmpty();
  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
}
inline const ::std::string& ImageDataParameter::mean_file() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.ImageDataParameter.mean_file)
  return _internal_mean_file();
}
template <typename Arg_, typename... Args_>
PROTOBUF_ALWAYS_INLINE void ImageDataParameter::set_mean_file(Arg_&& arg, Args_... args) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  _impl_.mean_file_.Set(static_cast<Arg_&&>(arg), args..., GetArena());
  // @@protoc_insertion_point(field_set:caffe.ImageDataParameter.mean_file)
}
inline ::std::string* PROTOBUF_NONNULL ImageDataParameter::mutable_mean_file()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  ::std::string* _s = _internal_mutable_mean_file();
  // @@protoc_insertion_point(field_mutable:caffe.ImageDataParameter.mean_file)
  return _s;
}
inline const ::std::string& ImageDataParameter::_internal_mean_file() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.mean_file_.Get();
}
inline void ImageDataParameter::_internal_set_mean_file(const ::std::string& value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.mean_file_.Set(value, GetArena());
}
inline ::std::string* PROTOBUF_NONNULL ImageDataParameter::_internal_mutable_mean_file() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _impl_.mean_file_.Mutable( GetArena());
}
inline ::std::string* PROTOBUF_NULLABLE ImageDataParameter::release_mean_file() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.ImageDataParameter.mean_file)
  if (!CheckHasBit(_impl_._has_bits_[0], 0x00000002U)) {
    return nullptr;
  }
  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
  auto* released = _impl_.mean_file_.Release();
  if (::google::protobuf::internal::DebugHardenForceCopyDefaultString()) {
    _impl_.mean_file_.Set("", GetArena());
  }
  return released;
}
inline void ImageDataParameter::set_allocated_mean_file(::std::string* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
  }
  _impl_.mean_file_.SetAllocated(value, GetArena());
  if (::google::protobuf::internal::DebugHardenForceCopyDefaultString() && _impl_.mean_file_.IsDefault()) {
    _impl_.mean_file_.Set("", GetArena());
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.ImageDataParameter.mean_file)
}

// optional uint32 crop_size = 5 [default = 0];
inline bool ImageDataParameter::has_crop_size() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000008U);
  return value;
}
inline void ImageDataParameter::clear_crop_size() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.crop_size_ = 0u;
  ClearHasBit(_impl_._has_bits_[0], 0x00000008U);
}
inline ::uint32_t ImageDataParameter::crop_size() const {
  // @@protoc_insertion_point(field_get:caffe.ImageDataParameter.crop_size)
  return _internal_crop_size();
}
inline void ImageDataParameter::set_crop_size(::uint32_t value) {
  _internal_set_crop_size(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000008U);
  // @@protoc_insertion_point(field_set:caffe.ImageDataParameter.crop_size)
}
inline ::uint32_t ImageDataParameter::_internal_crop_size() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.crop_size_;
}
inline void ImageDataParameter::_internal_set_crop_size(::uint32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.crop_size_ = value;
}

// optional bool mirror = 6 [default = false];
inline bool ImageDataParameter::has_mirror() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000020U);
  return value;
}
inline void ImageDataParameter::clear_mirror() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.mirror_ = false;
  ClearHasBit(_impl_._has_bits_[0], 0x00000020U);
}
inline bool ImageDataParameter::mirror() const {
  // @@protoc_insertion_point(field_get:caffe.ImageDataParameter.mirror)
  return _internal_mirror();
}
inline void ImageDataParameter::set_mirror(bool value) {
  _internal_set_mirror(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000020U);
  // @@protoc_insertion_point(field_set:caffe.ImageDataParameter.mirror)
}
inline bool ImageDataParameter::_internal_mirror() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.mirror_;
}
inline void ImageDataParameter::_internal_set_mirror(bool value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.mirror_ = value;
}

// optional string root_folder = 12 [default = ""];
inline bool ImageDataParameter::has_root_folder() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000004U);
  return value;
}
inline void ImageDataParameter::clear_root_folder() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.root_folder_.ClearToEmpty();
  ClearHasBit(_impl_._has_bits_[0], 0x00000004U);
}
inline const ::std::string& ImageDataParameter::root_folder() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.ImageDataParameter.root_folder)
  return _internal_root_folder();
}
template <typename Arg_, typename... Args_>
PROTOBUF_ALWAYS_INLINE void ImageDataParameter::set_root_folder(Arg_&& arg, Args_... args) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  SetHasBit(_impl_._has_bits_[0], 0x00000004U);
  _impl_.root_folder_.Set(static_cast<Arg_&&>(arg), args..., GetArena());
  // @@protoc_insertion_point(field_set:caffe.ImageDataParameter.root_folder)
}
inline ::std::string* PROTOBUF_NONNULL ImageDataParameter::mutable_root_folder()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000004U);
  ::std::string* _s = _internal_mutable_root_folder();
  // @@protoc_insertion_point(field_mutable:caffe.ImageDataParameter.root_folder)
  return _s;
}
inline const ::std::string& ImageDataParameter::_internal_root_folder() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.root_folder_.Get();
}
inline void ImageDataParameter::_internal_set_root_folder(const ::std::string& value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.root_folder_.Set(value, GetArena());
}
inline ::std::string* PROTOBUF_NONNULL ImageDataParameter::_internal_mutable_root_folder() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _impl_.root_folder_.Mutable( GetArena());
}
inline ::std::string* PROTOBUF_NULLABLE ImageDataParameter::release_root_folder() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.ImageDataParameter.root_folder)
  if (!CheckHasBit(_impl_._has_bits_[0], 0x00000004U)) {
    return nullptr;
  }
  ClearHasBit(_impl_._has_bits_[0], 0x00000004U);
  auto* released = _impl_.root_folder_.Release();
  if (::google::protobuf::internal::DebugHardenForceCopyDefaultString()) {
    _impl_.root_folder_.Set("", GetArena());
  }
  return released;
}
inline void ImageDataParameter::set_allocated_root_folder(::std::string* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000004U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000004U);
  }
  _impl_.root_folder_.SetAllocated(value, GetArena());
  if (::google::protobuf::internal::DebugHardenForceCopyDefaultString() && _impl_.root_folder_.IsDefault()) {
    _impl_.root_folder_.Set("", GetArena());
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.ImageDataParameter.root_folder)
}

// -------------------------------------------------------------------

// InfogainLossParameter

// optional string source = 1;
inline bool InfogainLossParameter::has_source() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000001U);
  return value;
}
inline void InfogainLossParameter::clear_source() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.source_.ClearToEmpty();
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
}
inline const ::std::string& InfogainLossParameter::source() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.InfogainLossParameter.source)
  return _internal_source();
}
template <typename Arg_, typename... Args_>
PROTOBUF_ALWAYS_INLINE void InfogainLossParameter::set_source(Arg_&& arg, Args_... args) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  _impl_.source_.Set(static_cast<Arg_&&>(arg), args..., GetArena());
  // @@protoc_insertion_point(field_set:caffe.InfogainLossParameter.source)
}
inline ::std::string* PROTOBUF_NONNULL InfogainLossParameter::mutable_source()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  ::std::string* _s = _internal_mutable_source();
  // @@protoc_insertion_point(field_mutable:caffe.InfogainLossParameter.source)
  return _s;
}
inline const ::std::string& InfogainLossParameter::_internal_source() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.source_.Get();
}
inline void InfogainLossParameter::_internal_set_source(const ::std::string& value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.source_.Set(value, GetArena());
}
inline ::std::string* PROTOBUF_NONNULL InfogainLossParameter::_internal_mutable_source() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _impl_.source_.Mutable( GetArena());
}
inline ::std::string* PROTOBUF_NULLABLE InfogainLossParameter::release_source() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.InfogainLossParameter.source)
  if (!CheckHasBit(_impl_._has_bits_[0], 0x00000001U)) {
    return nullptr;
  }
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
  auto* released = _impl_.source_.Release();
  if (::google::protobuf::internal::DebugHardenForceCopyDefaultString()) {
    _impl_.source_.Set("", GetArena());
  }
  return released;
}
inline void InfogainLossParameter::set_allocated_source(::std::string* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
  }
  _impl_.source_.SetAllocated(value, GetArena());
  if (::google::protobuf::internal::DebugHardenForceCopyDefaultString() && _impl_.source_.IsDefault()) {
    _impl_.source_.Set("", GetArena());
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.InfogainLossParameter.source)
}

// -------------------------------------------------------------------

// InnerProductParameter

// optional uint32 num_output = 1;
inline bool InnerProductParameter::has_num_output() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000004U);
  return value;
}
inline void InnerProductParameter::clear_num_output() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.num_output_ = 0u;
  ClearHasBit(_impl_._has_bits_[0], 0x00000004U);
}
inline ::uint32_t InnerProductParameter::num_output() const {
  // @@protoc_insertion_point(field_get:caffe.InnerProductParameter.num_output)
  return _internal_num_output();
}
inline void InnerProductParameter::set_num_output(::uint32_t value) {
  _internal_set_num_output(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000004U);
  // @@protoc_insertion_point(field_set:caffe.InnerProductParameter.num_output)
}
inline ::uint32_t InnerProductParameter::_internal_num_output() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.num_output_;
}
inline void InnerProductParameter::_internal_set_num_output(::uint32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.num_output_ = value;
}

// optional bool bias_term = 2 [default = true];
inline bool InnerProductParameter::has_bias_term() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000010U);
  return value;
}
inline void InnerProductParameter::clear_bias_term() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.bias_term_ = true;
  ClearHasBit(_impl_._has_bits_[0], 0x00000010U);
}
inline bool InnerProductParameter::bias_term() const {
  // @@protoc_insertion_point(field_get:caffe.InnerProductParameter.bias_term)
  return _internal_bias_term();
}
inline void InnerProductParameter::set_bias_term(bool value) {
  _internal_set_bias_term(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000010U);
  // @@protoc_insertion_point(field_set:caffe.InnerProductParameter.bias_term)
}
inline bool InnerProductParameter::_internal_bias_term() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.bias_term_;
}
inline void InnerProductParameter::_internal_set_bias_term(bool value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.bias_term_ = value;
}

// optional .caffe.FillerParameter weight_filler = 3;
inline bool InnerProductParameter::has_weight_filler() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000001U);
  PROTOBUF_ASSUME(!value || _impl_.weight_filler_ != nullptr);
  return value;
}
inline void InnerProductParameter::clear_weight_filler() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.weight_filler_ != nullptr) _impl_.weight_filler_->Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
}
inline const ::caffe::FillerParameter& InnerProductParameter::_internal_weight_filler() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::FillerParameter* p = _impl_.weight_filler_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::FillerParameter>(&::caffe::FillerParameter_globals_);
}
inline const ::caffe::FillerParameter& InnerProductParameter::weight_filler() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.InnerProductParameter.weight_filler)
  return _internal_weight_filler();
}
inline void InnerProductParameter::unsafe_arena_set_allocated_weight_filler(
    ::caffe::FillerParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.weight_filler_);
  }
  _impl_.weight_filler_ = reinterpret_cast<::caffe::FillerParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.InnerProductParameter.weight_filler)
}
inline ::caffe::FillerParameter* PROTOBUF_NULLABLE InnerProductParameter::release_weight_filler() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
  ::caffe::FillerParameter* released = _impl_.weight_filler_;
  _impl_.weight_filler_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::FillerParameter* PROTOBUF_NULLABLE InnerProductParameter::unsafe_arena_release_weight_filler() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.InnerProductParameter.weight_filler)

  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
  ::caffe::FillerParameter* temp = _impl_.weight_filler_;
  _impl_.weight_filler_ = nullptr;
  return temp;
}
inline ::caffe::FillerParameter* PROTOBUF_NONNULL InnerProductParameter::_internal_mutable_weight_filler() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.weight_filler_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::FillerParameter>(GetArena());
    _impl_.weight_filler_ = reinterpret_cast<::caffe::FillerParameter*>(p);
  }
  return _impl_.weight_filler_;
}
inline ::caffe::FillerParameter* PROTOBUF_NONNULL InnerProductParameter::mutable_weight_filler()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  ::caffe::FillerParameter* _msg = _internal_mutable_weight_filler();
  // @@protoc_insertion_point(field_mutable:caffe.InnerProductParameter.weight_filler)
  return _msg;
}
inline void InnerProductParameter::set_allocated_weight_filler(::caffe::FillerParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.weight_filler_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
  }

  _impl_.weight_filler_ = reinterpret_cast<::caffe::FillerParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.InnerProductParameter.weight_filler)
}

// optional .caffe.FillerParameter bias_filler = 4;
inline bool InnerProductParameter::has_bias_filler() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000002U);
  PROTOBUF_ASSUME(!value || _impl_.bias_filler_ != nullptr);
  return value;
}
inline void InnerProductParameter::clear_bias_filler() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.bias_filler_ != nullptr) _impl_.bias_filler_->Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
}
inline const ::caffe::FillerParameter& InnerProductParameter::_internal_bias_filler() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::FillerParameter* p = _impl_.bias_filler_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::FillerParameter>(&::caffe::FillerParameter_globals_);
}
inline const ::caffe::FillerParameter& InnerProductParameter::bias_filler() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.InnerProductParameter.bias_filler)
  return _internal_bias_filler();
}
inline void InnerProductParameter::unsafe_arena_set_allocated_bias_filler(
    ::caffe::FillerParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.bias_filler_);
  }
  _impl_.bias_filler_ = reinterpret_cast<::caffe::FillerParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.InnerProductParameter.bias_filler)
}
inline ::caffe::FillerParameter* PROTOBUF_NULLABLE InnerProductParameter::release_bias_filler() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
  ::caffe::FillerParameter* released = _impl_.bias_filler_;
  _impl_.bias_filler_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::FillerParameter* PROTOBUF_NULLABLE InnerProductParameter::unsafe_arena_release_bias_filler() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.InnerProductParameter.bias_filler)

  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
  ::caffe::FillerParameter* temp = _impl_.bias_filler_;
  _impl_.bias_filler_ = nullptr;
  return temp;
}
inline ::caffe::FillerParameter* PROTOBUF_NONNULL InnerProductParameter::_internal_mutable_bias_filler() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.bias_filler_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::FillerParameter>(GetArena());
    _impl_.bias_filler_ = reinterpret_cast<::caffe::FillerParameter*>(p);
  }
  return _impl_.bias_filler_;
}
inline ::caffe::FillerParameter* PROTOBUF_NONNULL InnerProductParameter::mutable_bias_filler()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  ::caffe::FillerParameter* _msg = _internal_mutable_bias_filler();
  // @@protoc_insertion_point(field_mutable:caffe.InnerProductParameter.bias_filler)
  return _msg;
}
inline void InnerProductParameter::set_allocated_bias_filler(::caffe::FillerParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.bias_filler_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
  }

  _impl_.bias_filler_ = reinterpret_cast<::caffe::FillerParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.InnerProductParameter.bias_filler)
}

// optional int32 axis = 5 [default = 1];
inline bool InnerProductParameter::has_axis() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000020U);
  return value;
}
inline void InnerProductParameter::clear_axis() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.axis_ = 1;
  ClearHasBit(_impl_._has_bits_[0], 0x00000020U);
}
inline ::int32_t InnerProductParameter::axis() const {
  // @@protoc_insertion_point(field_get:caffe.InnerProductParameter.axis)
  return _internal_axis();
}
inline void InnerProductParameter::set_axis(::int32_t value) {
  _internal_set_axis(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000020U);
  // @@protoc_insertion_point(field_set:caffe.InnerProductParameter.axis)
}
inline ::int32_t InnerProductParameter::_internal_axis() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.axis_;
}
inline void InnerProductParameter::_internal_set_axis(::int32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.axis_ = value;
}

// optional bool transpose = 6 [default = false];
inline bool InnerProductParameter::has_transpose() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000008U);
  return value;
}
inline void InnerProductParameter::clear_transpose() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.transpose_ = false;
  ClearHasBit(_impl_._has_bits_[0], 0x00000008U);
}
inline bool InnerProductParameter::transpose() const {
  // @@protoc_insertion_point(field_get:caffe.InnerProductParameter.transpose)
  return _internal_transpose();
}
inline void InnerProductParameter::set_transpose(bool value) {
  _internal_set_transpose(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000008U);
  // @@protoc_insertion_point(field_set:caffe.InnerProductParameter.transpose)
}
inline bool InnerProductParameter::_internal_transpose() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.transpose_;
}
inline void InnerProductParameter::_internal_set_transpose(bool value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.transpose_ = value;
}

// -------------------------------------------------------------------

// InputParameter

// repeated .caffe.BlobShape shape = 1;
inline int InputParameter::_internal_shape_size() const {
  return _internal_shape().size();
}
inline int InputParameter::shape_size() const {
  return _internal_shape_size();
}
inline void InputParameter::clear_shape() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.shape_.Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
}
inline const ::caffe::BlobShape& InputParameter::shape(int index) const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.InputParameter.shape)
  return _internal_shape().Get(index);
}
inline ::caffe::BlobShape* PROTOBUF_NONNULL InputParameter::mutable_shape(int index)
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_mutable:caffe.InputParameter.shape)
  return _internal_mutable_shape()->Mutable(index);
}
inline ::caffe::BlobShape* PROTOBUF_NONNULL InputParameter::add_shape()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  ::caffe::BlobShape* _add =
      _internal_mutable_shape()->InternalAddWithArena(
          ::google::protobuf::MessageLite::internal_visibility(), GetArena());
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_add:caffe.InputParameter.shape)
  return _add;
}
inline const ::google::protobuf::RepeatedPtrField<::caffe::BlobShape>& InputParameter::shape() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_list:caffe.InputParameter.shape)
  return _internal_shape();
}
inline ::google::protobuf::RepeatedPtrField<::caffe::BlobShape>* PROTOBUF_NONNULL
InputParameter::mutable_shape() ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_mutable_list:caffe.InputParameter.shape)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _internal_mutable_shape();
}
inline const ::google::protobuf::RepeatedPtrField<::caffe::BlobShape>&
InputParameter::_internal_shape() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.shape_;
}
inline ::google::protobuf::RepeatedPtrField<::caffe::BlobShape>* PROTOBUF_NONNULL
InputParameter::_internal_mutable_shape() {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return &_impl_.shape_;
}

// -------------------------------------------------------------------

// InterpParameter

// optional int32 height = 1 [default = 0];
inline bool InterpParameter::has_height() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000001U);
  return value;
}
inline void InterpParameter::clear_height() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.height_ = 0;
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
}
inline ::int32_t InterpParameter::height() const {
  // @@protoc_insertion_point(field_get:caffe.InterpParameter.height)
  return _internal_height();
}
inline void InterpParameter::set_height(::int32_t value) {
  _internal_set_height(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_set:caffe.InterpParameter.height)
}
inline ::int32_t InterpParameter::_internal_height() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.height_;
}
inline void InterpParameter::_internal_set_height(::int32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.height_ = value;
}

// optional int32 width = 2 [default = 0];
inline bool InterpParameter::has_width() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000002U);
  return value;
}
inline void InterpParameter::clear_width() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.width_ = 0;
  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
}
inline ::int32_t InterpParameter::width() const {
  // @@protoc_insertion_point(field_get:caffe.InterpParameter.width)
  return _internal_width();
}
inline void InterpParameter::set_width(::int32_t value) {
  _internal_set_width(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  // @@protoc_insertion_point(field_set:caffe.InterpParameter.width)
}
inline ::int32_t InterpParameter::_internal_width() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.width_;
}
inline void InterpParameter::_internal_set_width(::int32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.width_ = value;
}

// optional int32 zoom_factor = 3 [default = 1];
inline bool InterpParameter::has_zoom_factor() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000010U);
  return value;
}
inline void InterpParameter::clear_zoom_factor() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.zoom_factor_ = 1;
  ClearHasBit(_impl_._has_bits_[0], 0x00000010U);
}
inline ::int32_t InterpParameter::zoom_factor() const {
  // @@protoc_insertion_point(field_get:caffe.InterpParameter.zoom_factor)
  return _internal_zoom_factor();
}
inline void InterpParameter::set_zoom_factor(::int32_t value) {
  _internal_set_zoom_factor(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000010U);
  // @@protoc_insertion_point(field_set:caffe.InterpParameter.zoom_factor)
}
inline ::int32_t InterpParameter::_internal_zoom_factor() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.zoom_factor_;
}
inline void InterpParameter::_internal_set_zoom_factor(::int32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.zoom_factor_ = value;
}

// optional int32 shrink_factor = 4 [default = 1];
inline bool InterpParameter::has_shrink_factor() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000020U);
  return value;
}
inline void InterpParameter::clear_shrink_factor() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.shrink_factor_ = 1;
  ClearHasBit(_impl_._has_bits_[0], 0x00000020U);
}
inline ::int32_t InterpParameter::shrink_factor() const {
  // @@protoc_insertion_point(field_get:caffe.InterpParameter.shrink_factor)
  return _internal_shrink_factor();
}
inline void InterpParameter::set_shrink_factor(::int32_t value) {
  _internal_set_shrink_factor(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000020U);
  // @@protoc_insertion_point(field_set:caffe.InterpParameter.shrink_factor)
}
inline ::int32_t InterpParameter::_internal_shrink_factor() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.shrink_factor_;
}
inline void InterpParameter::_internal_set_shrink_factor(::int32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.shrink_factor_ = value;
}

// optional int32 pad_beg = 5 [default = 0];
inline bool InterpParameter::has_pad_beg() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000004U);
  return value;
}
inline void InterpParameter::clear_pad_beg() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.pad_beg_ = 0;
  ClearHasBit(_impl_._has_bits_[0], 0x00000004U);
}
inline ::int32_t InterpParameter::pad_beg() const {
  // @@protoc_insertion_point(field_get:caffe.InterpParameter.pad_beg)
  return _internal_pad_beg();
}
inline void InterpParameter::set_pad_beg(::int32_t value) {
  _internal_set_pad_beg(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000004U);
  // @@protoc_insertion_point(field_set:caffe.InterpParameter.pad_beg)
}
inline ::int32_t InterpParameter::_internal_pad_beg() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.pad_beg_;
}
inline void InterpParameter::_internal_set_pad_beg(::int32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.pad_beg_ = value;
}

// optional int32 pad_end = 6 [default = 0];
inline bool InterpParameter::has_pad_end() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000008U);
  return value;
}
inline void InterpParameter::clear_pad_end() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.pad_end_ = 0;
  ClearHasBit(_impl_._has_bits_[0], 0x00000008U);
}
inline ::int32_t InterpParameter::pad_end() const {
  // @@protoc_insertion_point(field_get:caffe.InterpParameter.pad_end)
  return _internal_pad_end();
}
inline void InterpParameter::set_pad_end(::int32_t value) {
  _internal_set_pad_end(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000008U);
  // @@protoc_insertion_point(field_set:caffe.InterpParameter.pad_end)
}
inline ::int32_t InterpParameter::_internal_pad_end() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.pad_end_;
}
inline void InterpParameter::_internal_set_pad_end(::int32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.pad_end_ = value;
}

// -------------------------------------------------------------------

// LogParameter

// optional float base = 1 [default = -1];
inline bool LogParameter::has_base() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000002U);
  return value;
}
inline void LogParameter::clear_base() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.base_ = -1;
  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
}
inline float LogParameter::base() const {
  // @@protoc_insertion_point(field_get:caffe.LogParameter.base)
  return _internal_base();
}
inline void LogParameter::set_base(float value) {
  _internal_set_base(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  // @@protoc_insertion_point(field_set:caffe.LogParameter.base)
}
inline float LogParameter::_internal_base() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.base_;
}
inline void LogParameter::_internal_set_base(float value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.base_ = value;
}

// optional float scale = 2 [default = 1];
inline bool LogParameter::has_scale() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000004U);
  return value;
}
inline void LogParameter::clear_scale() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.scale_ = 1;
  ClearHasBit(_impl_._has_bits_[0], 0x00000004U);
}
inline float LogParameter::scale() const {
  // @@protoc_insertion_point(field_get:caffe.LogParameter.scale)
  return _internal_scale();
}
inline void LogParameter::set_scale(float value) {
  _internal_set_scale(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000004U);
  // @@protoc_insertion_point(field_set:caffe.LogParameter.scale)
}
inline float LogParameter::_internal_scale() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.scale_;
}
inline void LogParameter::_internal_set_scale(float value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.scale_ = value;
}

// optional float shift = 3 [default = 0];
inline bool LogParameter::has_shift() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000001U);
  return value;
}
inline void LogParameter::clear_shift() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.shift_ = 0;
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
}
inline float LogParameter::shift() const {
  // @@protoc_insertion_point(field_get:caffe.LogParameter.shift)
  return _internal_shift();
}
inline void LogParameter::set_shift(float value) {
  _internal_set_shift(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_set:caffe.LogParameter.shift)
}
inline float LogParameter::_internal_shift() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.shift_;
}
inline void LogParameter::_internal_set_shift(float value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.shift_ = value;
}

// -------------------------------------------------------------------

// LRNParameter

// optional uint32 local_size = 1 [default = 5];
inline bool LRNParameter::has_local_size() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000004U);
  return value;
}
inline void LRNParameter::clear_local_size() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.local_size_ = 5u;
  ClearHasBit(_impl_._has_bits_[0], 0x00000004U);
}
inline ::uint32_t LRNParameter::local_size() const {
  // @@protoc_insertion_point(field_get:caffe.LRNParameter.local_size)
  return _internal_local_size();
}
inline void LRNParameter::set_local_size(::uint32_t value) {
  _internal_set_local_size(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000004U);
  // @@protoc_insertion_point(field_set:caffe.LRNParameter.local_size)
}
inline ::uint32_t LRNParameter::_internal_local_size() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.local_size_;
}
inline void LRNParameter::_internal_set_local_size(::uint32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.local_size_ = value;
}

// optional float alpha = 2 [default = 1];
inline bool LRNParameter::has_alpha() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000008U);
  return value;
}
inline void LRNParameter::clear_alpha() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.alpha_ = 1;
  ClearHasBit(_impl_._has_bits_[0], 0x00000008U);
}
inline float LRNParameter::alpha() const {
  // @@protoc_insertion_point(field_get:caffe.LRNParameter.alpha)
  return _internal_alpha();
}
inline void LRNParameter::set_alpha(float value) {
  _internal_set_alpha(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000008U);
  // @@protoc_insertion_point(field_set:caffe.LRNParameter.alpha)
}
inline float LRNParameter::_internal_alpha() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.alpha_;
}
inline void LRNParameter::_internal_set_alpha(float value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.alpha_ = value;
}

// optional float beta = 3 [default = 0.75];
inline bool LRNParameter::has_beta() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000010U);
  return value;
}
inline void LRNParameter::clear_beta() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.beta_ = 0.75f;
  ClearHasBit(_impl_._has_bits_[0], 0x00000010U);
}
inline float LRNParameter::beta() const {
  // @@protoc_insertion_point(field_get:caffe.LRNParameter.beta)
  return _internal_beta();
}
inline void LRNParameter::set_beta(float value) {
  _internal_set_beta(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000010U);
  // @@protoc_insertion_point(field_set:caffe.LRNParameter.beta)
}
inline float LRNParameter::_internal_beta() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.beta_;
}
inline void LRNParameter::_internal_set_beta(float value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.beta_ = value;
}

// optional .caffe.LRNParameter.NormRegion norm_region = 4 [default = ACROSS_CHANNELS];
inline bool LRNParameter::has_norm_region() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000001U);
  return value;
}
inline void LRNParameter::clear_norm_region() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.norm_region_ = 0;
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
}
inline ::caffe::LRNParameter_NormRegion LRNParameter::norm_region() const {
  // @@protoc_insertion_point(field_get:caffe.LRNParameter.norm_region)
  return _internal_norm_region();
}
inline void LRNParameter::set_norm_region(::caffe::LRNParameter_NormRegion value) {
  _internal_set_norm_region(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_set:caffe.LRNParameter.norm_region)
}
inline ::caffe::LRNParameter_NormRegion LRNParameter::_internal_norm_region() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return static_cast<::caffe::LRNParameter_NormRegion>(_impl_.norm_region_);
}
inline void LRNParameter::_internal_set_norm_region(::caffe::LRNParameter_NormRegion value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);

                                          assert(::google::protobuf::internal::ValidateEnum(
                                              value, ::caffe::LRNParameter_NormRegion_internal_data_));
                                          _impl_.norm_region_ = value;
}

// optional float k = 5 [default = 1];
inline bool LRNParameter::has_k() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000020U);
  return value;
}
inline void LRNParameter::clear_k() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.k_ = 1;
  ClearHasBit(_impl_._has_bits_[0], 0x00000020U);
}
inline float LRNParameter::k() const {
  // @@protoc_insertion_point(field_get:caffe.LRNParameter.k)
  return _internal_k();
}
inline void LRNParameter::set_k(float value) {
  _internal_set_k(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000020U);
  // @@protoc_insertion_point(field_set:caffe.LRNParameter.k)
}
inline float LRNParameter::_internal_k() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.k_;
}
inline void LRNParameter::_internal_set_k(float value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.k_ = value;
}

// optional .caffe.LRNParameter.Engine engine = 6 [default = DEFAULT];
inline bool LRNParameter::has_engine() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000002U);
  return value;
}
inline void LRNParameter::clear_engine() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.engine_ = 0;
  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
}
inline ::caffe::LRNParameter_Engine LRNParameter::engine() const {
  // @@protoc_insertion_point(field_get:caffe.LRNParameter.engine)
  return _internal_engine();
}
inline void LRNParameter::set_engine(::caffe::LRNParameter_Engine value) {
  _internal_set_engine(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  // @@protoc_insertion_point(field_set:caffe.LRNParameter.engine)
}
inline ::caffe::LRNParameter_Engine LRNParameter::_internal_engine() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return static_cast<::caffe::LRNParameter_Engine>(_impl_.engine_);
}
inline void LRNParameter::_internal_set_engine(::caffe::LRNParameter_Engine value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);

                                          assert(::google::protobuf::internal::ValidateEnum(
                                              value, ::caffe::LRNParameter_Engine_internal_data_));
                                          _impl_.engine_ = value;
}

// -------------------------------------------------------------------

// MemoryDataParameter

// optional uint32 batch_size = 1;
inline bool MemoryDataParameter::has_batch_size() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000001U);
  return value;
}
inline void MemoryDataParameter::clear_batch_size() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.batch_size_ = 0u;
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
}
inline ::uint32_t MemoryDataParameter::batch_size() const {
  // @@protoc_insertion_point(field_get:caffe.MemoryDataParameter.batch_size)
  return _internal_batch_size();
}
inline void MemoryDataParameter::set_batch_size(::uint32_t value) {
  _internal_set_batch_size(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_set:caffe.MemoryDataParameter.batch_size)
}
inline ::uint32_t MemoryDataParameter::_internal_batch_size() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.batch_size_;
}
inline void MemoryDataParameter::_internal_set_batch_size(::uint32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.batch_size_ = value;
}

// optional uint32 channels = 2;
inline bool MemoryDataParameter::has_channels() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000002U);
  return value;
}
inline void MemoryDataParameter::clear_channels() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.channels_ = 0u;
  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
}
inline ::uint32_t MemoryDataParameter::channels() const {
  // @@protoc_insertion_point(field_get:caffe.MemoryDataParameter.channels)
  return _internal_channels();
}
inline void MemoryDataParameter::set_channels(::uint32_t value) {
  _internal_set_channels(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  // @@protoc_insertion_point(field_set:caffe.MemoryDataParameter.channels)
}
inline ::uint32_t MemoryDataParameter::_internal_channels() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.channels_;
}
inline void MemoryDataParameter::_internal_set_channels(::uint32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.channels_ = value;
}

// optional uint32 height = 3;
inline bool MemoryDataParameter::has_height() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000004U);
  return value;
}
inline void MemoryDataParameter::clear_height() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.height_ = 0u;
  ClearHasBit(_impl_._has_bits_[0], 0x00000004U);
}
inline ::uint32_t MemoryDataParameter::height() const {
  // @@protoc_insertion_point(field_get:caffe.MemoryDataParameter.height)
  return _internal_height();
}
inline void MemoryDataParameter::set_height(::uint32_t value) {
  _internal_set_height(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000004U);
  // @@protoc_insertion_point(field_set:caffe.MemoryDataParameter.height)
}
inline ::uint32_t MemoryDataParameter::_internal_height() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.height_;
}
inline void MemoryDataParameter::_internal_set_height(::uint32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.height_ = value;
}

// optional uint32 width = 4;
inline bool MemoryDataParameter::has_width() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000008U);
  return value;
}
inline void MemoryDataParameter::clear_width() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.width_ = 0u;
  ClearHasBit(_impl_._has_bits_[0], 0x00000008U);
}
inline ::uint32_t MemoryDataParameter::width() const {
  // @@protoc_insertion_point(field_get:caffe.MemoryDataParameter.width)
  return _internal_width();
}
inline void MemoryDataParameter::set_width(::uint32_t value) {
  _internal_set_width(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000008U);
  // @@protoc_insertion_point(field_set:caffe.MemoryDataParameter.width)
}
inline ::uint32_t MemoryDataParameter::_internal_width() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.width_;
}
inline void MemoryDataParameter::_internal_set_width(::uint32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.width_ = value;
}

// -------------------------------------------------------------------

// MVNParameter

// optional bool normalize_variance = 1 [default = true];
inline bool MVNParameter::has_normalize_variance() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000002U);
  return value;
}
inline void MVNParameter::clear_normalize_variance() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.normalize_variance_ = true;
  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
}
inline bool MVNParameter::normalize_variance() const {
  // @@protoc_insertion_point(field_get:caffe.MVNParameter.normalize_variance)
  return _internal_normalize_variance();
}
inline void MVNParameter::set_normalize_variance(bool value) {
  _internal_set_normalize_variance(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  // @@protoc_insertion_point(field_set:caffe.MVNParameter.normalize_variance)
}
inline bool MVNParameter::_internal_normalize_variance() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.normalize_variance_;
}
inline void MVNParameter::_internal_set_normalize_variance(bool value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.normalize_variance_ = value;
}

// optional bool across_channels = 2 [default = false];
inline bool MVNParameter::has_across_channels() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000001U);
  return value;
}
inline void MVNParameter::clear_across_channels() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.across_channels_ = false;
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
}
inline bool MVNParameter::across_channels() const {
  // @@protoc_insertion_point(field_get:caffe.MVNParameter.across_channels)
  return _internal_across_channels();
}
inline void MVNParameter::set_across_channels(bool value) {
  _internal_set_across_channels(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_set:caffe.MVNParameter.across_channels)
}
inline bool MVNParameter::_internal_across_channels() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.across_channels_;
}
inline void MVNParameter::_internal_set_across_channels(bool value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.across_channels_ = value;
}

// optional float eps = 3 [default = 1e-09];
inline bool MVNParameter::has_eps() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000004U);
  return value;
}
inline void MVNParameter::clear_eps() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.eps_ = 1e-09f;
  ClearHasBit(_impl_._has_bits_[0], 0x00000004U);
}
inline float MVNParameter::eps() const {
  // @@protoc_insertion_point(field_get:caffe.MVNParameter.eps)
  return _internal_eps();
}
inline void MVNParameter::set_eps(float value) {
  _internal_set_eps(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000004U);
  // @@protoc_insertion_point(field_set:caffe.MVNParameter.eps)
}
inline float MVNParameter::_internal_eps() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.eps_;
}
inline void MVNParameter::_internal_set_eps(float value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.eps_ = value;
}

// -------------------------------------------------------------------

// NormalizeParameter

// optional bool across_spatial = 1 [default = true];
inline bool NormalizeParameter::has_across_spatial() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000002U);
  return value;
}
inline void NormalizeParameter::clear_across_spatial() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.across_spatial_ = true;
  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
}
inline bool NormalizeParameter::across_spatial() const {
  // @@protoc_insertion_point(field_get:caffe.NormalizeParameter.across_spatial)
  return _internal_across_spatial();
}
inline void NormalizeParameter::set_across_spatial(bool value) {
  _internal_set_across_spatial(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  // @@protoc_insertion_point(field_set:caffe.NormalizeParameter.across_spatial)
}
inline bool NormalizeParameter::_internal_across_spatial() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.across_spatial_;
}
inline void NormalizeParameter::_internal_set_across_spatial(bool value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.across_spatial_ = value;
}

// optional .caffe.FillerParameter scale_filler = 2;
inline bool NormalizeParameter::has_scale_filler() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000001U);
  PROTOBUF_ASSUME(!value || _impl_.scale_filler_ != nullptr);
  return value;
}
inline void NormalizeParameter::clear_scale_filler() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.scale_filler_ != nullptr) _impl_.scale_filler_->Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
}
inline const ::caffe::FillerParameter& NormalizeParameter::_internal_scale_filler() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::FillerParameter* p = _impl_.scale_filler_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::FillerParameter>(&::caffe::FillerParameter_globals_);
}
inline const ::caffe::FillerParameter& NormalizeParameter::scale_filler() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.NormalizeParameter.scale_filler)
  return _internal_scale_filler();
}
inline void NormalizeParameter::unsafe_arena_set_allocated_scale_filler(
    ::caffe::FillerParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.scale_filler_);
  }
  _impl_.scale_filler_ = reinterpret_cast<::caffe::FillerParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.NormalizeParameter.scale_filler)
}
inline ::caffe::FillerParameter* PROTOBUF_NULLABLE NormalizeParameter::release_scale_filler() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
  ::caffe::FillerParameter* released = _impl_.scale_filler_;
  _impl_.scale_filler_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::FillerParameter* PROTOBUF_NULLABLE NormalizeParameter::unsafe_arena_release_scale_filler() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.NormalizeParameter.scale_filler)

  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
  ::caffe::FillerParameter* temp = _impl_.scale_filler_;
  _impl_.scale_filler_ = nullptr;
  return temp;
}
inline ::caffe::FillerParameter* PROTOBUF_NONNULL NormalizeParameter::_internal_mutable_scale_filler() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.scale_filler_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::FillerParameter>(GetArena());
    _impl_.scale_filler_ = reinterpret_cast<::caffe::FillerParameter*>(p);
  }
  return _impl_.scale_filler_;
}
inline ::caffe::FillerParameter* PROTOBUF_NONNULL NormalizeParameter::mutable_scale_filler()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  ::caffe::FillerParameter* _msg = _internal_mutable_scale_filler();
  // @@protoc_insertion_point(field_mutable:caffe.NormalizeParameter.scale_filler)
  return _msg;
}
inline void NormalizeParameter::set_allocated_scale_filler(::caffe::FillerParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.scale_filler_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
  }

  _impl_.scale_filler_ = reinterpret_cast<::caffe::FillerParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.NormalizeParameter.scale_filler)
}

// optional bool channel_shared = 3 [default = true];
inline bool NormalizeParameter::has_channel_shared() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000004U);
  return value;
}
inline void NormalizeParameter::clear_channel_shared() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.channel_shared_ = true;
  ClearHasBit(_impl_._has_bits_[0], 0x00000004U);
}
inline bool NormalizeParameter::channel_shared() const {
  // @@protoc_insertion_point(field_get:caffe.NormalizeParameter.channel_shared)
  return _internal_channel_shared();
}
inline void NormalizeParameter::set_channel_shared(bool value) {
  _internal_set_channel_shared(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000004U);
  // @@protoc_insertion_point(field_set:caffe.NormalizeParameter.channel_shared)
}
inline bool NormalizeParameter::_internal_channel_shared() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.channel_shared_;
}
inline void NormalizeParameter::_internal_set_channel_shared(bool value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.channel_shared_ = value;
}

// optional float eps = 4 [default = 1e-10];
inline bool NormalizeParameter::has_eps() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000008U);
  return value;
}
inline void NormalizeParameter::clear_eps() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.eps_ = 1e-10f;
  ClearHasBit(_impl_._has_bits_[0], 0x00000008U);
}
inline float NormalizeParameter::eps() const {
  // @@protoc_insertion_point(field_get:caffe.NormalizeParameter.eps)
  return _internal_eps();
}
inline void NormalizeParameter::set_eps(float value) {
  _internal_set_eps(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000008U);
  // @@protoc_insertion_point(field_set:caffe.NormalizeParameter.eps)
}
inline float NormalizeParameter::_internal_eps() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.eps_;
}
inline void NormalizeParameter::_internal_set_eps(float value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.eps_ = value;
}

// -------------------------------------------------------------------

// PermuteParameter

// repeated uint32 order = 1;
inline int PermuteParameter::_internal_order_size() const {
  return _internal_order().size();
}
inline int PermuteParameter::order_size() const {
  return _internal_order_size();
}
inline void PermuteParameter::clear_order() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.order_.Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
}
inline ::uint32_t PermuteParameter::order(int index) const {
  // @@protoc_insertion_point(field_get:caffe.PermuteParameter.order)
  return _internal_order().Get(index);
}
inline void PermuteParameter::set_order(int index, ::uint32_t value) {
  _internal_mutable_order()->Set(index, value);
  // @@protoc_insertion_point(field_set:caffe.PermuteParameter.order)
}
inline void PermuteParameter::add_order(::uint32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _internal_mutable_order()
      ->InternalAddWithArena<const ::google::protobuf::MessageLite*>(
          internal_visibility(), this, value);
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_add:caffe.PermuteParameter.order)
}
inline const ::google::protobuf::RepeatedField<::uint32_t>& PermuteParameter::order() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_list:caffe.PermuteParameter.order)
  return _internal_order();
}
inline ::google::protobuf::RepeatedField<::uint32_t>* PROTOBUF_NONNULL PermuteParameter::mutable_order()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_mutable_list:caffe.PermuteParameter.order)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _internal_mutable_order();
}
inline const ::google::protobuf::RepeatedField<::uint32_t>&
PermuteParameter::_internal_order() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.order_;
}
inline ::google::protobuf::RepeatedField<::uint32_t>* PROTOBUF_NONNULL
PermuteParameter::_internal_mutable_order() {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return &_impl_.order_;
}

// -------------------------------------------------------------------

// PoolingParameter

// optional .caffe.PoolingParameter.PoolMethod pool = 1 [default = MAX];
inline bool PoolingParameter::has_pool() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000001U);
  return value;
}
inline void PoolingParameter::clear_pool() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.pool_ = 0;
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
}
inline ::caffe::PoolingParameter_PoolMethod PoolingParameter::pool() const {
  // @@protoc_insertion_point(field_get:caffe.PoolingParameter.pool)
  return _internal_pool();
}
inline void PoolingParameter::set_pool(::caffe::PoolingParameter_PoolMethod value) {
  _internal_set_pool(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_set:caffe.PoolingParameter.pool)
}
inline ::caffe::PoolingParameter_PoolMethod PoolingParameter::_internal_pool() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return static_cast<::caffe::PoolingParameter_PoolMethod>(_impl_.pool_);
}
inline void PoolingParameter::_internal_set_pool(::caffe::PoolingParameter_PoolMethod value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);

                                          assert(::google::protobuf::internal::ValidateEnum(
                                              value, ::caffe::PoolingParameter_PoolMethod_internal_data_));
                                          _impl_.pool_ = value;
}

// optional uint32 pad = 4 [default = 0];
inline bool PoolingParameter::has_pad() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000004U);
  return value;
}
inline void PoolingParameter::clear_pad() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.pad_ = 0u;
  ClearHasBit(_impl_._has_bits_[0], 0x00000004U);
}
inline ::uint32_t PoolingParameter::pad() const {
  // @@protoc_insertion_point(field_get:caffe.PoolingParameter.pad)
  return _internal_pad();
}
inline void PoolingParameter::set_pad(::uint32_t value) {
  _internal_set_pad(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000004U);
  // @@protoc_insertion_point(field_set:caffe.PoolingParameter.pad)
}
inline ::uint32_t PoolingParameter::_internal_pad() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.pad_;
}
inline void PoolingParameter::_internal_set_pad(::uint32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.pad_ = value;
}

// optional uint32 pad_h = 9 [default = 0];
inline bool PoolingParameter::has_pad_h() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000080U);
  return value;
}
inline void PoolingParameter::clear_pad_h() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.pad_h_ = 0u;
  ClearHasBit(_impl_._has_bits_[0], 0x00000080U);
}
inline ::uint32_t PoolingParameter::pad_h() const {
  // @@protoc_insertion_point(field_get:caffe.PoolingParameter.pad_h)
  return _internal_pad_h();
}
inline void PoolingParameter::set_pad_h(::uint32_t value) {
  _internal_set_pad_h(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000080U);
  // @@protoc_insertion_point(field_set:caffe.PoolingParameter.pad_h)
}
inline ::uint32_t PoolingParameter::_internal_pad_h() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.pad_h_;
}
inline void PoolingParameter::_internal_set_pad_h(::uint32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.pad_h_ = value;
}

// optional uint32 pad_w = 10 [default = 0];
inline bool PoolingParameter::has_pad_w() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000100U);
  return value;
}
inline void PoolingParameter::clear_pad_w() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.pad_w_ = 0u;
  ClearHasBit(_impl_._has_bits_[0], 0x00000100U);
}
inline ::uint32_t PoolingParameter::pad_w() const {
  // @@protoc_insertion_point(field_get:caffe.PoolingParameter.pad_w)
  return _internal_pad_w();
}
inline void PoolingParameter::set_pad_w(::uint32_t value) {
  _internal_set_pad_w(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000100U);
  // @@protoc_insertion_point(field_set:caffe.PoolingParameter.pad_w)
}
inline ::uint32_t PoolingParameter::_internal_pad_w() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.pad_w_;
}
inline void PoolingParameter::_internal_set_pad_w(::uint32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.pad_w_ = value;
}

// optional uint32 kernel_size = 2;
inline bool PoolingParameter::has_kernel_size() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000002U);
  return value;
}
inline void PoolingParameter::clear_kernel_size() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.kernel_size_ = 0u;
  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
}
inline ::uint32_t PoolingParameter::kernel_size() const {
  // @@protoc_insertion_point(field_get:caffe.PoolingParameter.kernel_size)
  return _internal_kernel_size();
}
inline void PoolingParameter::set_kernel_size(::uint32_t value) {
  _internal_set_kernel_size(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  // @@protoc_insertion_point(field_set:caffe.PoolingParameter.kernel_size)
}
inline ::uint32_t PoolingParameter::_internal_kernel_size() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.kernel_size_;
}
inline void PoolingParameter::_internal_set_kernel_size(::uint32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.kernel_size_ = value;
}

// optional uint32 kernel_h = 5;
inline bool PoolingParameter::has_kernel_h() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000008U);
  return value;
}
inline void PoolingParameter::clear_kernel_h() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.kernel_h_ = 0u;
  ClearHasBit(_impl_._has_bits_[0], 0x00000008U);
}
inline ::uint32_t PoolingParameter::kernel_h() const {
  // @@protoc_insertion_point(field_get:caffe.PoolingParameter.kernel_h)
  return _internal_kernel_h();
}
inline void PoolingParameter::set_kernel_h(::uint32_t value) {
  _internal_set_kernel_h(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000008U);
  // @@protoc_insertion_point(field_set:caffe.PoolingParameter.kernel_h)
}
inline ::uint32_t PoolingParameter::_internal_kernel_h() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.kernel_h_;
}
inline void PoolingParameter::_internal_set_kernel_h(::uint32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.kernel_h_ = value;
}

// optional uint32 kernel_w = 6;
inline bool PoolingParameter::has_kernel_w() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000010U);
  return value;
}
inline void PoolingParameter::clear_kernel_w() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.kernel_w_ = 0u;
  ClearHasBit(_impl_._has_bits_[0], 0x00000010U);
}
inline ::uint32_t PoolingParameter::kernel_w() const {
  // @@protoc_insertion_point(field_get:caffe.PoolingParameter.kernel_w)
  return _internal_kernel_w();
}
inline void PoolingParameter::set_kernel_w(::uint32_t value) {
  _internal_set_kernel_w(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000010U);
  // @@protoc_insertion_point(field_set:caffe.PoolingParameter.kernel_w)
}
inline ::uint32_t PoolingParameter::_internal_kernel_w() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.kernel_w_;
}
inline void PoolingParameter::_internal_set_kernel_w(::uint32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.kernel_w_ = value;
}

// optional uint32 stride = 3 [default = 1];
inline bool PoolingParameter::has_stride() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000800U);
  return value;
}
inline void PoolingParameter::clear_stride() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.stride_ = 1u;
  ClearHasBit(_impl_._has_bits_[0], 0x00000800U);
}
inline ::uint32_t PoolingParameter::stride() const {
  // @@protoc_insertion_point(field_get:caffe.PoolingParameter.stride)
  return _internal_stride();
}
inline void PoolingParameter::set_stride(::uint32_t value) {
  _internal_set_stride(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000800U);
  // @@protoc_insertion_point(field_set:caffe.PoolingParameter.stride)
}
inline ::uint32_t PoolingParameter::_internal_stride() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.stride_;
}
inline void PoolingParameter::_internal_set_stride(::uint32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.stride_ = value;
}

// optional uint32 stride_h = 7;
inline bool PoolingParameter::has_stride_h() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000020U);
  return value;
}
inline void PoolingParameter::clear_stride_h() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.stride_h_ = 0u;
  ClearHasBit(_impl_._has_bits_[0], 0x00000020U);
}
inline ::uint32_t PoolingParameter::stride_h() const {
  // @@protoc_insertion_point(field_get:caffe.PoolingParameter.stride_h)
  return _internal_stride_h();
}
inline void PoolingParameter::set_stride_h(::uint32_t value) {
  _internal_set_stride_h(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000020U);
  // @@protoc_insertion_point(field_set:caffe.PoolingParameter.stride_h)
}
inline ::uint32_t PoolingParameter::_internal_stride_h() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.stride_h_;
}
inline void PoolingParameter::_internal_set_stride_h(::uint32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.stride_h_ = value;
}

// optional uint32 stride_w = 8;
inline bool PoolingParameter::has_stride_w() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000040U);
  return value;
}
inline void PoolingParameter::clear_stride_w() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.stride_w_ = 0u;
  ClearHasBit(_impl_._has_bits_[0], 0x00000040U);
}
inline ::uint32_t PoolingParameter::stride_w() const {
  // @@protoc_insertion_point(field_get:caffe.PoolingParameter.stride_w)
  return _internal_stride_w();
}
inline void PoolingParameter::set_stride_w(::uint32_t value) {
  _internal_set_stride_w(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000040U);
  // @@protoc_insertion_point(field_set:caffe.PoolingParameter.stride_w)
}
inline ::uint32_t PoolingParameter::_internal_stride_w() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.stride_w_;
}
inline void PoolingParameter::_internal_set_stride_w(::uint32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.stride_w_ = value;
}

// optional .caffe.PoolingParameter.Engine engine = 11 [default = DEFAULT];
inline bool PoolingParameter::has_engine() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000200U);
  return value;
}
inline void PoolingParameter::clear_engine() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.engine_ = 0;
  ClearHasBit(_impl_._has_bits_[0], 0x00000200U);
}
inline ::caffe::PoolingParameter_Engine PoolingParameter::engine() const {
  // @@protoc_insertion_point(field_get:caffe.PoolingParameter.engine)
  return _internal_engine();
}
inline void PoolingParameter::set_engine(::caffe::PoolingParameter_Engine value) {
  _internal_set_engine(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000200U);
  // @@protoc_insertion_point(field_set:caffe.PoolingParameter.engine)
}
inline ::caffe::PoolingParameter_Engine PoolingParameter::_internal_engine() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return static_cast<::caffe::PoolingParameter_Engine>(_impl_.engine_);
}
inline void PoolingParameter::_internal_set_engine(::caffe::PoolingParameter_Engine value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);

                                          assert(::google::protobuf::internal::ValidateEnum(
                                              value, ::caffe::PoolingParameter_Engine_internal_data_));
                                          _impl_.engine_ = value;
}

// optional bool global_pooling = 12 [default = false];
inline bool PoolingParameter::has_global_pooling() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000400U);
  return value;
}
inline void PoolingParameter::clear_global_pooling() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.global_pooling_ = false;
  ClearHasBit(_impl_._has_bits_[0], 0x00000400U);
}
inline bool PoolingParameter::global_pooling() const {
  // @@protoc_insertion_point(field_get:caffe.PoolingParameter.global_pooling)
  return _internal_global_pooling();
}
inline void PoolingParameter::set_global_pooling(bool value) {
  _internal_set_global_pooling(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000400U);
  // @@protoc_insertion_point(field_set:caffe.PoolingParameter.global_pooling)
}
inline bool PoolingParameter::_internal_global_pooling() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.global_pooling_;
}
inline void PoolingParameter::_internal_set_global_pooling(bool value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.global_pooling_ = value;
}

// -------------------------------------------------------------------

// PowerParameter

// optional float power = 1 [default = 1];
inline bool PowerParameter::has_power() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000002U);
  return value;
}
inline void PowerParameter::clear_power() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.power_ = 1;
  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
}
inline float PowerParameter::power() const {
  // @@protoc_insertion_point(field_get:caffe.PowerParameter.power)
  return _internal_power();
}
inline void PowerParameter::set_power(float value) {
  _internal_set_power(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  // @@protoc_insertion_point(field_set:caffe.PowerParameter.power)
}
inline float PowerParameter::_internal_power() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.power_;
}
inline void PowerParameter::_internal_set_power(float value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.power_ = value;
}

// optional float scale = 2 [default = 1];
inline bool PowerParameter::has_scale() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000004U);
  return value;
}
inline void PowerParameter::clear_scale() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.scale_ = 1;
  ClearHasBit(_impl_._has_bits_[0], 0x00000004U);
}
inline float PowerParameter::scale() const {
  // @@protoc_insertion_point(field_get:caffe.PowerParameter.scale)
  return _internal_scale();
}
inline void PowerParameter::set_scale(float value) {
  _internal_set_scale(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000004U);
  // @@protoc_insertion_point(field_set:caffe.PowerParameter.scale)
}
inline float PowerParameter::_internal_scale() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.scale_;
}
inline void PowerParameter::_internal_set_scale(float value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.scale_ = value;
}

// optional float shift = 3 [default = 0];
inline bool PowerParameter::has_shift() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000001U);
  return value;
}
inline void PowerParameter::clear_shift() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.shift_ = 0;
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
}
inline float PowerParameter::shift() const {
  // @@protoc_insertion_point(field_get:caffe.PowerParameter.shift)
  return _internal_shift();
}
inline void PowerParameter::set_shift(float value) {
  _internal_set_shift(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_set:caffe.PowerParameter.shift)
}
inline float PowerParameter::_internal_shift() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.shift_;
}
inline void PowerParameter::_internal_set_shift(float value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.shift_ = value;
}

// -------------------------------------------------------------------

// PriorBoxParameter

// repeated float min_size = 1;
inline int PriorBoxParameter::_internal_min_size_size() const {
  return _internal_min_size().size();
}
inline int PriorBoxParameter::min_size_size() const {
  return _internal_min_size_size();
}
inline void PriorBoxParameter::clear_min_size() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.min_size_.Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
}
inline float PriorBoxParameter::min_size(int index) const {
  // @@protoc_insertion_point(field_get:caffe.PriorBoxParameter.min_size)
  return _internal_min_size().Get(index);
}
inline void PriorBoxParameter::set_min_size(int index, float value) {
  _internal_mutable_min_size()->Set(index, value);
  // @@protoc_insertion_point(field_set:caffe.PriorBoxParameter.min_size)
}
inline void PriorBoxParameter::add_min_size(float value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _internal_mutable_min_size()
      ->InternalAddWithArena<const ::google::protobuf::MessageLite*>(
          internal_visibility(), this, value);
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_add:caffe.PriorBoxParameter.min_size)
}
inline const ::google::protobuf::RepeatedField<float>& PriorBoxParameter::min_size() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_list:caffe.PriorBoxParameter.min_size)
  return _internal_min_size();
}
inline ::google::protobuf::RepeatedField<float>* PROTOBUF_NONNULL PriorBoxParameter::mutable_min_size()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_mutable_list:caffe.PriorBoxParameter.min_size)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _internal_mutable_min_size();
}
inline const ::google::protobuf::RepeatedField<float>&
PriorBoxParameter::_internal_min_size() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.min_size_;
}
inline ::google::protobuf::RepeatedField<float>* PROTOBUF_NONNULL
PriorBoxParameter::_internal_mutable_min_size() {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return &_impl_.min_size_;
}

// repeated float max_size = 2;
inline int PriorBoxParameter::_internal_max_size_size() const {
  return _internal_max_size().size();
}
inline int PriorBoxParameter::max_size_size() const {
  return _internal_max_size_size();
}
inline void PriorBoxParameter::clear_max_size() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.max_size_.Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
}
inline float PriorBoxParameter::max_size(int index) const {
  // @@protoc_insertion_point(field_get:caffe.PriorBoxParameter.max_size)
  return _internal_max_size().Get(index);
}
inline void PriorBoxParameter::set_max_size(int index, float value) {
  _internal_mutable_max_size()->Set(index, value);
  // @@protoc_insertion_point(field_set:caffe.PriorBoxParameter.max_size)
}
inline void PriorBoxParameter::add_max_size(float value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _internal_mutable_max_size()
      ->InternalAddWithArena<const ::google::protobuf::MessageLite*>(
          internal_visibility(), this, value);
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  // @@protoc_insertion_point(field_add:caffe.PriorBoxParameter.max_size)
}
inline const ::google::protobuf::RepeatedField<float>& PriorBoxParameter::max_size() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_list:caffe.PriorBoxParameter.max_size)
  return _internal_max_size();
}
inline ::google::protobuf::RepeatedField<float>* PROTOBUF_NONNULL PriorBoxParameter::mutable_max_size()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  // @@protoc_insertion_point(field_mutable_list:caffe.PriorBoxParameter.max_size)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _internal_mutable_max_size();
}
inline const ::google::protobuf::RepeatedField<float>&
PriorBoxParameter::_internal_max_size() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.max_size_;
}
inline ::google::protobuf::RepeatedField<float>* PROTOBUF_NONNULL
PriorBoxParameter::_internal_mutable_max_size() {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return &_impl_.max_size_;
}

// repeated float aspect_ratio = 3;
inline int PriorBoxParameter::_internal_aspect_ratio_size() const {
  return _internal_aspect_ratio().size();
}
inline int PriorBoxParameter::aspect_ratio_size() const {
  return _internal_aspect_ratio_size();
}
inline void PriorBoxParameter::clear_aspect_ratio() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.aspect_ratio_.Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000004U);
}
inline float PriorBoxParameter::aspect_ratio(int index) const {
  // @@protoc_insertion_point(field_get:caffe.PriorBoxParameter.aspect_ratio)
  return _internal_aspect_ratio().Get(index);
}
inline void PriorBoxParameter::set_aspect_ratio(int index, float value) {
  _internal_mutable_aspect_ratio()->Set(index, value);
  // @@protoc_insertion_point(field_set:caffe.PriorBoxParameter.aspect_ratio)
}
inline void PriorBoxParameter::add_aspect_ratio(float value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _internal_mutable_aspect_ratio()
      ->InternalAddWithArena<const ::google::protobuf::MessageLite*>(
          internal_visibility(), this, value);
  SetHasBit(_impl_._has_bits_[0], 0x00000004U);
  // @@protoc_insertion_point(field_add:caffe.PriorBoxParameter.aspect_ratio)
}
inline const ::google::protobuf::RepeatedField<float>& PriorBoxParameter::aspect_ratio() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_list:caffe.PriorBoxParameter.aspect_ratio)
  return _internal_aspect_ratio();
}
inline ::google::protobuf::RepeatedField<float>* PROTOBUF_NONNULL PriorBoxParameter::mutable_aspect_ratio()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000004U);
  // @@protoc_insertion_point(field_mutable_list:caffe.PriorBoxParameter.aspect_ratio)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _internal_mutable_aspect_ratio();
}
inline const ::google::protobuf::RepeatedField<float>&
PriorBoxParameter::_internal_aspect_ratio() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.aspect_ratio_;
}
inline ::google::protobuf::RepeatedField<float>* PROTOBUF_NONNULL
PriorBoxParameter::_internal_mutable_aspect_ratio() {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return &_impl_.aspect_ratio_;
}

// optional bool flip = 4 [default = true];
inline bool PriorBoxParameter::has_flip() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000800U);
  return value;
}
inline void PriorBoxParameter::clear_flip() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.flip_ = true;
  ClearHasBit(_impl_._has_bits_[0], 0x00000800U);
}
inline bool PriorBoxParameter::flip() const {
  // @@protoc_insertion_point(field_get:caffe.PriorBoxParameter.flip)
  return _internal_flip();
}
inline void PriorBoxParameter::set_flip(bool value) {
  _internal_set_flip(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000800U);
  // @@protoc_insertion_point(field_set:caffe.PriorBoxParameter.flip)
}
inline bool PriorBoxParameter::_internal_flip() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.flip_;
}
inline void PriorBoxParameter::_internal_set_flip(bool value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.flip_ = value;
}

// optional bool clip = 5 [default = false];
inline bool PriorBoxParameter::has_clip() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000010U);
  return value;
}
inline void PriorBoxParameter::clear_clip() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.clip_ = false;
  ClearHasBit(_impl_._has_bits_[0], 0x00000010U);
}
inline bool PriorBoxParameter::clip() const {
  // @@protoc_insertion_point(field_get:caffe.PriorBoxParameter.clip)
  return _internal_clip();
}
inline void PriorBoxParameter::set_clip(bool value) {
  _internal_set_clip(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000010U);
  // @@protoc_insertion_point(field_set:caffe.PriorBoxParameter.clip)
}
inline bool PriorBoxParameter::_internal_clip() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.clip_;
}
inline void PriorBoxParameter::_internal_set_clip(bool value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.clip_ = value;
}

// repeated float variance = 6;
inline int PriorBoxParameter::_internal_variance_size() const {
  return _internal_variance().size();
}
inline int PriorBoxParameter::variance_size() const {
  return _internal_variance_size();
}
inline void PriorBoxParameter::clear_variance() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.variance_.Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000008U);
}
inline float PriorBoxParameter::variance(int index) const {
  // @@protoc_insertion_point(field_get:caffe.PriorBoxParameter.variance)
  return _internal_variance().Get(index);
}
inline void PriorBoxParameter::set_variance(int index, float value) {
  _internal_mutable_variance()->Set(index, value);
  // @@protoc_insertion_point(field_set:caffe.PriorBoxParameter.variance)
}
inline void PriorBoxParameter::add_variance(float value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _internal_mutable_variance()
      ->InternalAddWithArena<const ::google::protobuf::MessageLite*>(
          internal_visibility(), this, value);
  SetHasBit(_impl_._has_bits_[0], 0x00000008U);
  // @@protoc_insertion_point(field_add:caffe.PriorBoxParameter.variance)
}
inline const ::google::protobuf::RepeatedField<float>& PriorBoxParameter::variance() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_list:caffe.PriorBoxParameter.variance)
  return _internal_variance();
}
inline ::google::protobuf::RepeatedField<float>* PROTOBUF_NONNULL PriorBoxParameter::mutable_variance()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000008U);
  // @@protoc_insertion_point(field_mutable_list:caffe.PriorBoxParameter.variance)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _internal_mutable_variance();
}
inline const ::google::protobuf::RepeatedField<float>&
PriorBoxParameter::_internal_variance() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.variance_;
}
inline ::google::protobuf::RepeatedField<float>* PROTOBUF_NONNULL
PriorBoxParameter::_internal_mutable_variance() {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return &_impl_.variance_;
}

// optional uint32 img_size = 7;
inline bool PriorBoxParameter::has_img_size() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000020U);
  return value;
}
inline void PriorBoxParameter::clear_img_size() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.img_size_ = 0u;
  ClearHasBit(_impl_._has_bits_[0], 0x00000020U);
}
inline ::uint32_t PriorBoxParameter::img_size() const {
  // @@protoc_insertion_point(field_get:caffe.PriorBoxParameter.img_size)
  return _internal_img_size();
}
inline void PriorBoxParameter::set_img_size(::uint32_t value) {
  _internal_set_img_size(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000020U);
  // @@protoc_insertion_point(field_set:caffe.PriorBoxParameter.img_size)
}
inline ::uint32_t PriorBoxParameter::_internal_img_size() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.img_size_;
}
inline void PriorBoxParameter::_internal_set_img_size(::uint32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.img_size_ = value;
}

// optional uint32 img_h = 8;
inline bool PriorBoxParameter::has_img_h() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000040U);
  return value;
}
inline void PriorBoxParameter::clear_img_h() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.img_h_ = 0u;
  ClearHasBit(_impl_._has_bits_[0], 0x00000040U);
}
inline ::uint32_t PriorBoxParameter::img_h() const {
  // @@protoc_insertion_point(field_get:caffe.PriorBoxParameter.img_h)
  return _internal_img_h();
}
inline void PriorBoxParameter::set_img_h(::uint32_t value) {
  _internal_set_img_h(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000040U);
  // @@protoc_insertion_point(field_set:caffe.PriorBoxParameter.img_h)
}
inline ::uint32_t PriorBoxParameter::_internal_img_h() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.img_h_;
}
inline void PriorBoxParameter::_internal_set_img_h(::uint32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.img_h_ = value;
}

// optional uint32 img_w = 9;
inline bool PriorBoxParameter::has_img_w() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000080U);
  return value;
}
inline void PriorBoxParameter::clear_img_w() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.img_w_ = 0u;
  ClearHasBit(_impl_._has_bits_[0], 0x00000080U);
}
inline ::uint32_t PriorBoxParameter::img_w() const {
  // @@protoc_insertion_point(field_get:caffe.PriorBoxParameter.img_w)
  return _internal_img_w();
}
inline void PriorBoxParameter::set_img_w(::uint32_t value) {
  _internal_set_img_w(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000080U);
  // @@protoc_insertion_point(field_set:caffe.PriorBoxParameter.img_w)
}
inline ::uint32_t PriorBoxParameter::_internal_img_w() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.img_w_;
}
inline void PriorBoxParameter::_internal_set_img_w(::uint32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.img_w_ = value;
}

// optional float step = 10;
inline bool PriorBoxParameter::has_step() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000100U);
  return value;
}
inline void PriorBoxParameter::clear_step() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.step_ = 0;
  ClearHasBit(_impl_._has_bits_[0], 0x00000100U);
}
inline float PriorBoxParameter::step() const {
  // @@protoc_insertion_point(field_get:caffe.PriorBoxParameter.step)
  return _internal_step();
}
inline void PriorBoxParameter::set_step(float value) {
  _internal_set_step(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000100U);
  // @@protoc_insertion_point(field_set:caffe.PriorBoxParameter.step)
}
inline float PriorBoxParameter::_internal_step() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.step_;
}
inline void PriorBoxParameter::_internal_set_step(float value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.step_ = value;
}

// optional float step_h = 11;
inline bool PriorBoxParameter::has_step_h() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000200U);
  return value;
}
inline void PriorBoxParameter::clear_step_h() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.step_h_ = 0;
  ClearHasBit(_impl_._has_bits_[0], 0x00000200U);
}
inline float PriorBoxParameter::step_h() const {
  // @@protoc_insertion_point(field_get:caffe.PriorBoxParameter.step_h)
  return _internal_step_h();
}
inline void PriorBoxParameter::set_step_h(float value) {
  _internal_set_step_h(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000200U);
  // @@protoc_insertion_point(field_set:caffe.PriorBoxParameter.step_h)
}
inline float PriorBoxParameter::_internal_step_h() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.step_h_;
}
inline void PriorBoxParameter::_internal_set_step_h(float value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.step_h_ = value;
}

// optional float step_w = 12;
inline bool PriorBoxParameter::has_step_w() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000400U);
  return value;
}
inline void PriorBoxParameter::clear_step_w() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.step_w_ = 0;
  ClearHasBit(_impl_._has_bits_[0], 0x00000400U);
}
inline float PriorBoxParameter::step_w() const {
  // @@protoc_insertion_point(field_get:caffe.PriorBoxParameter.step_w)
  return _internal_step_w();
}
inline void PriorBoxParameter::set_step_w(float value) {
  _internal_set_step_w(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000400U);
  // @@protoc_insertion_point(field_set:caffe.PriorBoxParameter.step_w)
}
inline float PriorBoxParameter::_internal_step_w() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.step_w_;
}
inline void PriorBoxParameter::_internal_set_step_w(float value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.step_w_ = value;
}

// optional float offset = 13 [default = 0.5];
inline bool PriorBoxParameter::has_offset() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00001000U);
  return value;
}
inline void PriorBoxParameter::clear_offset() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.offset_ = 0.5f;
  ClearHasBit(_impl_._has_bits_[0], 0x00001000U);
}
inline float PriorBoxParameter::offset() const {
  // @@protoc_insertion_point(field_get:caffe.PriorBoxParameter.offset)
  return _internal_offset();
}
inline void PriorBoxParameter::set_offset(float value) {
  _internal_set_offset(value);
  SetHasBit(_impl_._has_bits_[0], 0x00001000U);
  // @@protoc_insertion_point(field_set:caffe.PriorBoxParameter.offset)
}
inline float PriorBoxParameter::_internal_offset() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.offset_;
}
inline void PriorBoxParameter::_internal_set_offset(float value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.offset_ = value;
}

// -------------------------------------------------------------------

// PSROIPoolingParameter

// required float spatial_scale = 1;
inline bool PSROIPoolingParameter::has_spatial_scale() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000001U);
  return value;
}
inline void PSROIPoolingParameter::clear_spatial_scale() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.spatial_scale_ = 0;
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
}
inline float PSROIPoolingParameter::spatial_scale() const {
  // @@protoc_insertion_point(field_get:caffe.PSROIPoolingParameter.spatial_scale)
  return _internal_spatial_scale();
}
inline void PSROIPoolingParameter::set_spatial_scale(float value) {
  _internal_set_spatial_scale(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_set:caffe.PSROIPoolingParameter.spatial_scale)
}
inline float PSROIPoolingParameter::_internal_spatial_scale() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.spatial_scale_;
}
inline void PSROIPoolingParameter::_internal_set_spatial_scale(float value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.spatial_scale_ = value;
}

// required int32 output_dim = 2;
inline bool PSROIPoolingParameter::has_output_dim() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000002U);
  return value;
}
inline void PSROIPoolingParameter::clear_output_dim() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.output_dim_ = 0;
  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
}
inline ::int32_t PSROIPoolingParameter::output_dim() const {
  // @@protoc_insertion_point(field_get:caffe.PSROIPoolingParameter.output_dim)
  return _internal_output_dim();
}
inline void PSROIPoolingParameter::set_output_dim(::int32_t value) {
  _internal_set_output_dim(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  // @@protoc_insertion_point(field_set:caffe.PSROIPoolingParameter.output_dim)
}
inline ::int32_t PSROIPoolingParameter::_internal_output_dim() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.output_dim_;
}
inline void PSROIPoolingParameter::_internal_set_output_dim(::int32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.output_dim_ = value;
}

// required int32 group_size = 3;
inline bool PSROIPoolingParameter::has_group_size() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000004U);
  return value;
}
inline void PSROIPoolingParameter::clear_group_size() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.group_size_ = 0;
  ClearHasBit(_impl_._has_bits_[0], 0x00000004U);
}
inline ::int32_t PSROIPoolingParameter::group_size() const {
  // @@protoc_insertion_point(field_get:caffe.PSROIPoolingParameter.group_size)
  return _internal_group_size();
}
inline void PSROIPoolingParameter::set_group_size(::int32_t value) {
  _internal_set_group_size(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000004U);
  // @@protoc_insertion_point(field_set:caffe.PSROIPoolingParameter.group_size)
}
inline ::int32_t PSROIPoolingParameter::_internal_group_size() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.group_size_;
}
inline void PSROIPoolingParameter::_internal_set_group_size(::int32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.group_size_ = value;
}

// -------------------------------------------------------------------

// PythonParameter

// optional string module = 1;
inline bool PythonParameter::has_module() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000001U);
  return value;
}
inline void PythonParameter::clear_module() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.module_.ClearToEmpty();
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
}
inline const ::std::string& PythonParameter::module() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.PythonParameter.module)
  return _internal_module();
}
template <typename Arg_, typename... Args_>
PROTOBUF_ALWAYS_INLINE void PythonParameter::set_module(Arg_&& arg, Args_... args) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  _impl_.module_.Set(static_cast<Arg_&&>(arg), args..., GetArena());
  // @@protoc_insertion_point(field_set:caffe.PythonParameter.module)
}
inline ::std::string* PROTOBUF_NONNULL PythonParameter::mutable_module()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  ::std::string* _s = _internal_mutable_module();
  // @@protoc_insertion_point(field_mutable:caffe.PythonParameter.module)
  return _s;
}
inline const ::std::string& PythonParameter::_internal_module() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.module_.Get();
}
inline void PythonParameter::_internal_set_module(const ::std::string& value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.module_.Set(value, GetArena());
}
inline ::std::string* PROTOBUF_NONNULL PythonParameter::_internal_mutable_module() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _impl_.module_.Mutable( GetArena());
}
inline ::std::string* PROTOBUF_NULLABLE PythonParameter::release_module() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.PythonParameter.module)
  if (!CheckHasBit(_impl_._has_bits_[0], 0x00000001U)) {
    return nullptr;
  }
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
  auto* released = _impl_.module_.Release();
  if (::google::protobuf::internal::DebugHardenForceCopyDefaultString()) {
    _impl_.module_.Set("", GetArena());
  }
  return released;
}
inline void PythonParameter::set_allocated_module(::std::string* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
  }
  _impl_.module_.SetAllocated(value, GetArena());
  if (::google::protobuf::internal::DebugHardenForceCopyDefaultString() && _impl_.module_.IsDefault()) {
    _impl_.module_.Set("", GetArena());
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.PythonParameter.module)
}

// optional string layer = 2;
inline bool PythonParameter::has_layer() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000002U);
  return value;
}
inline void PythonParameter::clear_layer() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.layer_.ClearToEmpty();
  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
}
inline const ::std::string& PythonParameter::layer() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.PythonParameter.layer)
  return _internal_layer();
}
template <typename Arg_, typename... Args_>
PROTOBUF_ALWAYS_INLINE void PythonParameter::set_layer(Arg_&& arg, Args_... args) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  _impl_.layer_.Set(static_cast<Arg_&&>(arg), args..., GetArena());
  // @@protoc_insertion_point(field_set:caffe.PythonParameter.layer)
}
inline ::std::string* PROTOBUF_NONNULL PythonParameter::mutable_layer()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  ::std::string* _s = _internal_mutable_layer();
  // @@protoc_insertion_point(field_mutable:caffe.PythonParameter.layer)
  return _s;
}
inline const ::std::string& PythonParameter::_internal_layer() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.layer_.Get();
}
inline void PythonParameter::_internal_set_layer(const ::std::string& value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.layer_.Set(value, GetArena());
}
inline ::std::string* PROTOBUF_NONNULL PythonParameter::_internal_mutable_layer() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _impl_.layer_.Mutable( GetArena());
}
inline ::std::string* PROTOBUF_NULLABLE PythonParameter::release_layer() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.PythonParameter.layer)
  if (!CheckHasBit(_impl_._has_bits_[0], 0x00000002U)) {
    return nullptr;
  }
  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
  auto* released = _impl_.layer_.Release();
  if (::google::protobuf::internal::DebugHardenForceCopyDefaultString()) {
    _impl_.layer_.Set("", GetArena());
  }
  return released;
}
inline void PythonParameter::set_allocated_layer(::std::string* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
  }
  _impl_.layer_.SetAllocated(value, GetArena());
  if (::google::protobuf::internal::DebugHardenForceCopyDefaultString() && _impl_.layer_.IsDefault()) {
    _impl_.layer_.Set("", GetArena());
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.PythonParameter.layer)
}

// optional string param_str = 3 [default = ""];
inline bool PythonParameter::has_param_str() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000004U);
  return value;
}
inline void PythonParameter::clear_param_str() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.param_str_.ClearToEmpty();
  ClearHasBit(_impl_._has_bits_[0], 0x00000004U);
}
inline const ::std::string& PythonParameter::param_str() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.PythonParameter.param_str)
  return _internal_param_str();
}
template <typename Arg_, typename... Args_>
PROTOBUF_ALWAYS_INLINE void PythonParameter::set_param_str(Arg_&& arg, Args_... args) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  SetHasBit(_impl_._has_bits_[0], 0x00000004U);
  _impl_.param_str_.Set(static_cast<Arg_&&>(arg), args..., GetArena());
  // @@protoc_insertion_point(field_set:caffe.PythonParameter.param_str)
}
inline ::std::string* PROTOBUF_NONNULL PythonParameter::mutable_param_str()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000004U);
  ::std::string* _s = _internal_mutable_param_str();
  // @@protoc_insertion_point(field_mutable:caffe.PythonParameter.param_str)
  return _s;
}
inline const ::std::string& PythonParameter::_internal_param_str() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.param_str_.Get();
}
inline void PythonParameter::_internal_set_param_str(const ::std::string& value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.param_str_.Set(value, GetArena());
}
inline ::std::string* PROTOBUF_NONNULL PythonParameter::_internal_mutable_param_str() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _impl_.param_str_.Mutable( GetArena());
}
inline ::std::string* PROTOBUF_NULLABLE PythonParameter::release_param_str() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.PythonParameter.param_str)
  if (!CheckHasBit(_impl_._has_bits_[0], 0x00000004U)) {
    return nullptr;
  }
  ClearHasBit(_impl_._has_bits_[0], 0x00000004U);
  auto* released = _impl_.param_str_.Release();
  if (::google::protobuf::internal::DebugHardenForceCopyDefaultString()) {
    _impl_.param_str_.Set("", GetArena());
  }
  return released;
}
inline void PythonParameter::set_allocated_param_str(::std::string* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000004U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000004U);
  }
  _impl_.param_str_.SetAllocated(value, GetArena());
  if (::google::protobuf::internal::DebugHardenForceCopyDefaultString() && _impl_.param_str_.IsDefault()) {
    _impl_.param_str_.Set("", GetArena());
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.PythonParameter.param_str)
}

// optional bool share_in_parallel = 4 [default = false];
inline bool PythonParameter::has_share_in_parallel() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000008U);
  return value;
}
inline void PythonParameter::clear_share_in_parallel() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.share_in_parallel_ = false;
  ClearHasBit(_impl_._has_bits_[0], 0x00000008U);
}
inline bool PythonParameter::share_in_parallel() const {
  // @@protoc_insertion_point(field_get:caffe.PythonParameter.share_in_parallel)
  return _internal_share_in_parallel();
}
inline void PythonParameter::set_share_in_parallel(bool value) {
  _internal_set_share_in_parallel(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000008U);
  // @@protoc_insertion_point(field_set:caffe.PythonParameter.share_in_parallel)
}
inline bool PythonParameter::_internal_share_in_parallel() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.share_in_parallel_;
}
inline void PythonParameter::_internal_set_share_in_parallel(bool value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.share_in_parallel_ = value;
}

// -------------------------------------------------------------------

// RecurrentParameter

// optional uint32 num_output = 1 [default = 0];
inline bool RecurrentParameter::has_num_output() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000004U);
  return value;
}
inline void RecurrentParameter::clear_num_output() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.num_output_ = 0u;
  ClearHasBit(_impl_._has_bits_[0], 0x00000004U);
}
inline ::uint32_t RecurrentParameter::num_output() const {
  // @@protoc_insertion_point(field_get:caffe.RecurrentParameter.num_output)
  return _internal_num_output();
}
inline void RecurrentParameter::set_num_output(::uint32_t value) {
  _internal_set_num_output(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000004U);
  // @@protoc_insertion_point(field_set:caffe.RecurrentParameter.num_output)
}
inline ::uint32_t RecurrentParameter::_internal_num_output() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.num_output_;
}
inline void RecurrentParameter::_internal_set_num_output(::uint32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.num_output_ = value;
}

// optional .caffe.FillerParameter weight_filler = 2;
inline bool RecurrentParameter::has_weight_filler() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000001U);
  PROTOBUF_ASSUME(!value || _impl_.weight_filler_ != nullptr);
  return value;
}
inline void RecurrentParameter::clear_weight_filler() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.weight_filler_ != nullptr) _impl_.weight_filler_->Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
}
inline const ::caffe::FillerParameter& RecurrentParameter::_internal_weight_filler() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::FillerParameter* p = _impl_.weight_filler_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::FillerParameter>(&::caffe::FillerParameter_globals_);
}
inline const ::caffe::FillerParameter& RecurrentParameter::weight_filler() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.RecurrentParameter.weight_filler)
  return _internal_weight_filler();
}
inline void RecurrentParameter::unsafe_arena_set_allocated_weight_filler(
    ::caffe::FillerParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.weight_filler_);
  }
  _impl_.weight_filler_ = reinterpret_cast<::caffe::FillerParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.RecurrentParameter.weight_filler)
}
inline ::caffe::FillerParameter* PROTOBUF_NULLABLE RecurrentParameter::release_weight_filler() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
  ::caffe::FillerParameter* released = _impl_.weight_filler_;
  _impl_.weight_filler_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::FillerParameter* PROTOBUF_NULLABLE RecurrentParameter::unsafe_arena_release_weight_filler() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.RecurrentParameter.weight_filler)

  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
  ::caffe::FillerParameter* temp = _impl_.weight_filler_;
  _impl_.weight_filler_ = nullptr;
  return temp;
}
inline ::caffe::FillerParameter* PROTOBUF_NONNULL RecurrentParameter::_internal_mutable_weight_filler() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.weight_filler_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::FillerParameter>(GetArena());
    _impl_.weight_filler_ = reinterpret_cast<::caffe::FillerParameter*>(p);
  }
  return _impl_.weight_filler_;
}
inline ::caffe::FillerParameter* PROTOBUF_NONNULL RecurrentParameter::mutable_weight_filler()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  ::caffe::FillerParameter* _msg = _internal_mutable_weight_filler();
  // @@protoc_insertion_point(field_mutable:caffe.RecurrentParameter.weight_filler)
  return _msg;
}
inline void RecurrentParameter::set_allocated_weight_filler(::caffe::FillerParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.weight_filler_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
  }

  _impl_.weight_filler_ = reinterpret_cast<::caffe::FillerParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.RecurrentParameter.weight_filler)
}

// optional .caffe.FillerParameter bias_filler = 3;
inline bool RecurrentParameter::has_bias_filler() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000002U);
  PROTOBUF_ASSUME(!value || _impl_.bias_filler_ != nullptr);
  return value;
}
inline void RecurrentParameter::clear_bias_filler() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.bias_filler_ != nullptr) _impl_.bias_filler_->Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
}
inline const ::caffe::FillerParameter& RecurrentParameter::_internal_bias_filler() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::FillerParameter* p = _impl_.bias_filler_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::FillerParameter>(&::caffe::FillerParameter_globals_);
}
inline const ::caffe::FillerParameter& RecurrentParameter::bias_filler() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.RecurrentParameter.bias_filler)
  return _internal_bias_filler();
}
inline void RecurrentParameter::unsafe_arena_set_allocated_bias_filler(
    ::caffe::FillerParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.bias_filler_);
  }
  _impl_.bias_filler_ = reinterpret_cast<::caffe::FillerParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.RecurrentParameter.bias_filler)
}
inline ::caffe::FillerParameter* PROTOBUF_NULLABLE RecurrentParameter::release_bias_filler() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
  ::caffe::FillerParameter* released = _impl_.bias_filler_;
  _impl_.bias_filler_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::FillerParameter* PROTOBUF_NULLABLE RecurrentParameter::unsafe_arena_release_bias_filler() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.RecurrentParameter.bias_filler)

  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
  ::caffe::FillerParameter* temp = _impl_.bias_filler_;
  _impl_.bias_filler_ = nullptr;
  return temp;
}
inline ::caffe::FillerParameter* PROTOBUF_NONNULL RecurrentParameter::_internal_mutable_bias_filler() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.bias_filler_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::FillerParameter>(GetArena());
    _impl_.bias_filler_ = reinterpret_cast<::caffe::FillerParameter*>(p);
  }
  return _impl_.bias_filler_;
}
inline ::caffe::FillerParameter* PROTOBUF_NONNULL RecurrentParameter::mutable_bias_filler()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  ::caffe::FillerParameter* _msg = _internal_mutable_bias_filler();
  // @@protoc_insertion_point(field_mutable:caffe.RecurrentParameter.bias_filler)
  return _msg;
}
inline void RecurrentParameter::set_allocated_bias_filler(::caffe::FillerParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.bias_filler_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
  }

  _impl_.bias_filler_ = reinterpret_cast<::caffe::FillerParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.RecurrentParameter.bias_filler)
}

// optional bool debug_info = 4 [default = false];
inline bool RecurrentParameter::has_debug_info() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000008U);
  return value;
}
inline void RecurrentParameter::clear_debug_info() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.debug_info_ = false;
  ClearHasBit(_impl_._has_bits_[0], 0x00000008U);
}
inline bool RecurrentParameter::debug_info() const {
  // @@protoc_insertion_point(field_get:caffe.RecurrentParameter.debug_info)
  return _internal_debug_info();
}
inline void RecurrentParameter::set_debug_info(bool value) {
  _internal_set_debug_info(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000008U);
  // @@protoc_insertion_point(field_set:caffe.RecurrentParameter.debug_info)
}
inline bool RecurrentParameter::_internal_debug_info() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.debug_info_;
}
inline void RecurrentParameter::_internal_set_debug_info(bool value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.debug_info_ = value;
}

// optional bool expose_hidden = 5 [default = false];
inline bool RecurrentParameter::has_expose_hidden() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000010U);
  return value;
}
inline void RecurrentParameter::clear_expose_hidden() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.expose_hidden_ = false;
  ClearHasBit(_impl_._has_bits_[0], 0x00000010U);
}
inline bool RecurrentParameter::expose_hidden() const {
  // @@protoc_insertion_point(field_get:caffe.RecurrentParameter.expose_hidden)
  return _internal_expose_hidden();
}
inline void RecurrentParameter::set_expose_hidden(bool value) {
  _internal_set_expose_hidden(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000010U);
  // @@protoc_insertion_point(field_set:caffe.RecurrentParameter.expose_hidden)
}
inline bool RecurrentParameter::_internal_expose_hidden() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.expose_hidden_;
}
inline void RecurrentParameter::_internal_set_expose_hidden(bool value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.expose_hidden_ = value;
}

// -------------------------------------------------------------------

// ReductionParameter

// optional .caffe.ReductionParameter.ReductionOp operation = 1 [default = SUM];
inline bool ReductionParameter::has_operation() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000002U);
  return value;
}
inline void ReductionParameter::clear_operation() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.operation_ = 1;
  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
}
inline ::caffe::ReductionParameter_ReductionOp ReductionParameter::operation() const {
  // @@protoc_insertion_point(field_get:caffe.ReductionParameter.operation)
  return _internal_operation();
}
inline void ReductionParameter::set_operation(::caffe::ReductionParameter_ReductionOp value) {
  _internal_set_operation(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  // @@protoc_insertion_point(field_set:caffe.ReductionParameter.operation)
}
inline ::caffe::ReductionParameter_ReductionOp ReductionParameter::_internal_operation() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return static_cast<::caffe::ReductionParameter_ReductionOp>(_impl_.operation_);
}
inline void ReductionParameter::_internal_set_operation(::caffe::ReductionParameter_ReductionOp value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);

                                          assert(::google::protobuf::internal::ValidateEnum(
                                              value, ::caffe::ReductionParameter_ReductionOp_internal_data_));
                                          _impl_.operation_ = value;
}

// optional int32 axis = 2 [default = 0];
inline bool ReductionParameter::has_axis() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000001U);
  return value;
}
inline void ReductionParameter::clear_axis() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.axis_ = 0;
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
}
inline ::int32_t ReductionParameter::axis() const {
  // @@protoc_insertion_point(field_get:caffe.ReductionParameter.axis)
  return _internal_axis();
}
inline void ReductionParameter::set_axis(::int32_t value) {
  _internal_set_axis(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_set:caffe.ReductionParameter.axis)
}
inline ::int32_t ReductionParameter::_internal_axis() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.axis_;
}
inline void ReductionParameter::_internal_set_axis(::int32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.axis_ = value;
}

// optional float coeff = 3 [default = 1];
inline bool ReductionParameter::has_coeff() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000004U);
  return value;
}
inline void ReductionParameter::clear_coeff() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.coeff_ = 1;
  ClearHasBit(_impl_._has_bits_[0], 0x00000004U);
}
inline float ReductionParameter::coeff() const {
  // @@protoc_insertion_point(field_get:caffe.ReductionParameter.coeff)
  return _internal_coeff();
}
inline void ReductionParameter::set_coeff(float value) {
  _internal_set_coeff(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000004U);
  // @@protoc_insertion_point(field_set:caffe.ReductionParameter.coeff)
}
inline float ReductionParameter::_internal_coeff() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.coeff_;
}
inline void ReductionParameter::_internal_set_coeff(float value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.coeff_ = value;
}

// -------------------------------------------------------------------

// ReLUParameter

// optional float negative_slope = 1 [default = 0];
inline bool ReLUParameter::has_negative_slope() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000001U);
  return value;
}
inline void ReLUParameter::clear_negative_slope() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.negative_slope_ = 0;
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
}
inline float ReLUParameter::negative_slope() const {
  // @@protoc_insertion_point(field_get:caffe.ReLUParameter.negative_slope)
  return _internal_negative_slope();
}
inline void ReLUParameter::set_negative_slope(float value) {
  _internal_set_negative_slope(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_set:caffe.ReLUParameter.negative_slope)
}
inline float ReLUParameter::_internal_negative_slope() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.negative_slope_;
}
inline void ReLUParameter::_internal_set_negative_slope(float value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.negative_slope_ = value;
}

// optional .caffe.ReLUParameter.Engine engine = 2 [default = DEFAULT];
inline bool ReLUParameter::has_engine() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000002U);
  return value;
}
inline void ReLUParameter::clear_engine() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.engine_ = 0;
  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
}
inline ::caffe::ReLUParameter_Engine ReLUParameter::engine() const {
  // @@protoc_insertion_point(field_get:caffe.ReLUParameter.engine)
  return _internal_engine();
}
inline void ReLUParameter::set_engine(::caffe::ReLUParameter_Engine value) {
  _internal_set_engine(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  // @@protoc_insertion_point(field_set:caffe.ReLUParameter.engine)
}
inline ::caffe::ReLUParameter_Engine ReLUParameter::_internal_engine() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return static_cast<::caffe::ReLUParameter_Engine>(_impl_.engine_);
}
inline void ReLUParameter::_internal_set_engine(::caffe::ReLUParameter_Engine value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);

                                          assert(::google::protobuf::internal::ValidateEnum(
                                              value, ::caffe::ReLUParameter_Engine_internal_data_));
                                          _impl_.engine_ = value;
}

// -------------------------------------------------------------------

// ReorgParameter

// optional uint32 stride = 1;
inline bool ReorgParameter::has_stride() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000001U);
  return value;
}
inline void ReorgParameter::clear_stride() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.stride_ = 0u;
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
}
inline ::uint32_t ReorgParameter::stride() const {
  // @@protoc_insertion_point(field_get:caffe.ReorgParameter.stride)
  return _internal_stride();
}
inline void ReorgParameter::set_stride(::uint32_t value) {
  _internal_set_stride(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_set:caffe.ReorgParameter.stride)
}
inline ::uint32_t ReorgParameter::_internal_stride() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.stride_;
}
inline void ReorgParameter::_internal_set_stride(::uint32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.stride_ = value;
}

// optional bool reverse = 2 [default = false];
inline bool ReorgParameter::has_reverse() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000002U);
  return value;
}
inline void ReorgParameter::clear_reverse() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.reverse_ = false;
  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
}
inline bool ReorgParameter::reverse() const {
  // @@protoc_insertion_point(field_get:caffe.ReorgParameter.reverse)
  return _internal_reverse();
}
inline void ReorgParameter::set_reverse(bool value) {
  _internal_set_reverse(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  // @@protoc_insertion_point(field_set:caffe.ReorgParameter.reverse)
}
inline bool ReorgParameter::_internal_reverse() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.reverse_;
}
inline void ReorgParameter::_internal_set_reverse(bool value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.reverse_ = value;
}

// -------------------------------------------------------------------

// ReshapeParameter

// optional .caffe.BlobShape shape = 1;
inline bool ReshapeParameter::has_shape() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000001U);
  PROTOBUF_ASSUME(!value || _impl_.shape_ != nullptr);
  return value;
}
inline void ReshapeParameter::clear_shape() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.shape_ != nullptr) _impl_.shape_->Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
}
inline const ::caffe::BlobShape& ReshapeParameter::_internal_shape() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::BlobShape* p = _impl_.shape_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::BlobShape>(&::caffe::BlobShape_globals_);
}
inline const ::caffe::BlobShape& ReshapeParameter::shape() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.ReshapeParameter.shape)
  return _internal_shape();
}
inline void ReshapeParameter::unsafe_arena_set_allocated_shape(
    ::caffe::BlobShape* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.shape_);
  }
  _impl_.shape_ = reinterpret_cast<::caffe::BlobShape*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.ReshapeParameter.shape)
}
inline ::caffe::BlobShape* PROTOBUF_NULLABLE ReshapeParameter::release_shape() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
  ::caffe::BlobShape* released = _impl_.shape_;
  _impl_.shape_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::BlobShape* PROTOBUF_NULLABLE ReshapeParameter::unsafe_arena_release_shape() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.ReshapeParameter.shape)

  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
  ::caffe::BlobShape* temp = _impl_.shape_;
  _impl_.shape_ = nullptr;
  return temp;
}
inline ::caffe::BlobShape* PROTOBUF_NONNULL ReshapeParameter::_internal_mutable_shape() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.shape_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::BlobShape>(GetArena());
    _impl_.shape_ = reinterpret_cast<::caffe::BlobShape*>(p);
  }
  return _impl_.shape_;
}
inline ::caffe::BlobShape* PROTOBUF_NONNULL ReshapeParameter::mutable_shape()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  ::caffe::BlobShape* _msg = _internal_mutable_shape();
  // @@protoc_insertion_point(field_mutable:caffe.ReshapeParameter.shape)
  return _msg;
}
inline void ReshapeParameter::set_allocated_shape(::caffe::BlobShape* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.shape_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
  }

  _impl_.shape_ = reinterpret_cast<::caffe::BlobShape*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.ReshapeParameter.shape)
}

// optional int32 axis = 2 [default = 0];
inline bool ReshapeParameter::has_axis() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000002U);
  return value;
}
inline void ReshapeParameter::clear_axis() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.axis_ = 0;
  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
}
inline ::int32_t ReshapeParameter::axis() const {
  // @@protoc_insertion_point(field_get:caffe.ReshapeParameter.axis)
  return _internal_axis();
}
inline void ReshapeParameter::set_axis(::int32_t value) {
  _internal_set_axis(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  // @@protoc_insertion_point(field_set:caffe.ReshapeParameter.axis)
}
inline ::int32_t ReshapeParameter::_internal_axis() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.axis_;
}
inline void ReshapeParameter::_internal_set_axis(::int32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.axis_ = value;
}

// optional int32 num_axes = 3 [default = -1];
inline bool ReshapeParameter::has_num_axes() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000004U);
  return value;
}
inline void ReshapeParameter::clear_num_axes() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.num_axes_ = -1;
  ClearHasBit(_impl_._has_bits_[0], 0x00000004U);
}
inline ::int32_t ReshapeParameter::num_axes() const {
  // @@protoc_insertion_point(field_get:caffe.ReshapeParameter.num_axes)
  return _internal_num_axes();
}
inline void ReshapeParameter::set_num_axes(::int32_t value) {
  _internal_set_num_axes(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000004U);
  // @@protoc_insertion_point(field_set:caffe.ReshapeParameter.num_axes)
}
inline ::int32_t ReshapeParameter::_internal_num_axes() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.num_axes_;
}
inline void ReshapeParameter::_internal_set_num_axes(::int32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.num_axes_ = value;
}

// -------------------------------------------------------------------

// ROIAlignParameter

// optional uint32 pooled_h = 1 [default = 0];
inline bool ROIAlignParameter::has_pooled_h() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000001U);
  return value;
}
inline void ROIAlignParameter::clear_pooled_h() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.pooled_h_ = 0u;
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
}
inline ::uint32_t ROIAlignParameter::pooled_h() const {
  // @@protoc_insertion_point(field_get:caffe.ROIAlignParameter.pooled_h)
  return _internal_pooled_h();
}
inline void ROIAlignParameter::set_pooled_h(::uint32_t value) {
  _internal_set_pooled_h(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_set:caffe.ROIAlignParameter.pooled_h)
}
inline ::uint32_t ROIAlignParameter::_internal_pooled_h() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.pooled_h_;
}
inline void ROIAlignParameter::_internal_set_pooled_h(::uint32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.pooled_h_ = value;
}

// optional uint32 pooled_w = 2 [default = 0];
inline bool ROIAlignParameter::has_pooled_w() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000002U);
  return value;
}
inline void ROIAlignParameter::clear_pooled_w() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.pooled_w_ = 0u;
  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
}
inline ::uint32_t ROIAlignParameter::pooled_w() const {
  // @@protoc_insertion_point(field_get:caffe.ROIAlignParameter.pooled_w)
  return _internal_pooled_w();
}
inline void ROIAlignParameter::set_pooled_w(::uint32_t value) {
  _internal_set_pooled_w(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  // @@protoc_insertion_point(field_set:caffe.ROIAlignParameter.pooled_w)
}
inline ::uint32_t ROIAlignParameter::_internal_pooled_w() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.pooled_w_;
}
inline void ROIAlignParameter::_internal_set_pooled_w(::uint32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.pooled_w_ = value;
}

// optional float spatial_scale = 3 [default = 1];
inline bool ROIAlignParameter::has_spatial_scale() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000004U);
  return value;
}
inline void ROIAlignParameter::clear_spatial_scale() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.spatial_scale_ = 1;
  ClearHasBit(_impl_._has_bits_[0], 0x00000004U);
}
inline float ROIAlignParameter::spatial_scale() const {
  // @@protoc_insertion_point(field_get:caffe.ROIAlignParameter.spatial_scale)
  return _internal_spatial_scale();
}
inline void ROIAlignParameter::set_spatial_scale(float value) {
  _internal_set_spatial_scale(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000004U);
  // @@protoc_insertion_point(field_set:caffe.ROIAlignParameter.spatial_scale)
}
inline float ROIAlignParameter::_internal_spatial_scale() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.spatial_scale_;
}
inline void ROIAlignParameter::_internal_set_spatial_scale(float value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.spatial_scale_ = value;
}

// -------------------------------------------------------------------

// ROIPoolingParameter

// optional uint32 pooled_h = 1 [default = 0];
inline bool ROIPoolingParameter::has_pooled_h() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000001U);
  return value;
}
inline void ROIPoolingParameter::clear_pooled_h() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.pooled_h_ = 0u;
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
}
inline ::uint32_t ROIPoolingParameter::pooled_h() const {
  // @@protoc_insertion_point(field_get:caffe.ROIPoolingParameter.pooled_h)
  return _internal_pooled_h();
}
inline void ROIPoolingParameter::set_pooled_h(::uint32_t value) {
  _internal_set_pooled_h(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_set:caffe.ROIPoolingParameter.pooled_h)
}
inline ::uint32_t ROIPoolingParameter::_internal_pooled_h() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.pooled_h_;
}
inline void ROIPoolingParameter::_internal_set_pooled_h(::uint32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.pooled_h_ = value;
}

// optional uint32 pooled_w = 2 [default = 0];
inline bool ROIPoolingParameter::has_pooled_w() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000002U);
  return value;
}
inline void ROIPoolingParameter::clear_pooled_w() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.pooled_w_ = 0u;
  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
}
inline ::uint32_t ROIPoolingParameter::pooled_w() const {
  // @@protoc_insertion_point(field_get:caffe.ROIPoolingParameter.pooled_w)
  return _internal_pooled_w();
}
inline void ROIPoolingParameter::set_pooled_w(::uint32_t value) {
  _internal_set_pooled_w(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  // @@protoc_insertion_point(field_set:caffe.ROIPoolingParameter.pooled_w)
}
inline ::uint32_t ROIPoolingParameter::_internal_pooled_w() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.pooled_w_;
}
inline void ROIPoolingParameter::_internal_set_pooled_w(::uint32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.pooled_w_ = value;
}

// optional float spatial_scale = 3 [default = 1];
inline bool ROIPoolingParameter::has_spatial_scale() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000004U);
  return value;
}
inline void ROIPoolingParameter::clear_spatial_scale() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.spatial_scale_ = 1;
  ClearHasBit(_impl_._has_bits_[0], 0x00000004U);
}
inline float ROIPoolingParameter::spatial_scale() const {
  // @@protoc_insertion_point(field_get:caffe.ROIPoolingParameter.spatial_scale)
  return _internal_spatial_scale();
}
inline void ROIPoolingParameter::set_spatial_scale(float value) {
  _internal_set_spatial_scale(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000004U);
  // @@protoc_insertion_point(field_set:caffe.ROIPoolingParameter.spatial_scale)
}
inline float ROIPoolingParameter::_internal_spatial_scale() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.spatial_scale_;
}
inline void ROIPoolingParameter::_internal_set_spatial_scale(float value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.spatial_scale_ = value;
}

// -------------------------------------------------------------------

// ScaleParameter

// optional int32 axis = 1 [default = 1];
inline bool ScaleParameter::has_axis() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000008U);
  return value;
}
inline void ScaleParameter::clear_axis() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.axis_ = 1;
  ClearHasBit(_impl_._has_bits_[0], 0x00000008U);
}
inline ::int32_t ScaleParameter::axis() const {
  // @@protoc_insertion_point(field_get:caffe.ScaleParameter.axis)
  return _internal_axis();
}
inline void ScaleParameter::set_axis(::int32_t value) {
  _internal_set_axis(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000008U);
  // @@protoc_insertion_point(field_set:caffe.ScaleParameter.axis)
}
inline ::int32_t ScaleParameter::_internal_axis() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.axis_;
}
inline void ScaleParameter::_internal_set_axis(::int32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.axis_ = value;
}

// optional int32 num_axes = 2 [default = 1];
inline bool ScaleParameter::has_num_axes() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000010U);
  return value;
}
inline void ScaleParameter::clear_num_axes() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.num_axes_ = 1;
  ClearHasBit(_impl_._has_bits_[0], 0x00000010U);
}
inline ::int32_t ScaleParameter::num_axes() const {
  // @@protoc_insertion_point(field_get:caffe.ScaleParameter.num_axes)
  return _internal_num_axes();
}
inline void ScaleParameter::set_num_axes(::int32_t value) {
  _internal_set_num_axes(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000010U);
  // @@protoc_insertion_point(field_set:caffe.ScaleParameter.num_axes)
}
inline ::int32_t ScaleParameter::_internal_num_axes() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.num_axes_;
}
inline void ScaleParameter::_internal_set_num_axes(::int32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.num_axes_ = value;
}

// optional .caffe.FillerParameter filler = 3;
inline bool ScaleParameter::has_filler() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000001U);
  PROTOBUF_ASSUME(!value || _impl_.filler_ != nullptr);
  return value;
}
inline void ScaleParameter::clear_filler() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.filler_ != nullptr) _impl_.filler_->Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
}
inline const ::caffe::FillerParameter& ScaleParameter::_internal_filler() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::FillerParameter* p = _impl_.filler_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::FillerParameter>(&::caffe::FillerParameter_globals_);
}
inline const ::caffe::FillerParameter& ScaleParameter::filler() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.ScaleParameter.filler)
  return _internal_filler();
}
inline void ScaleParameter::unsafe_arena_set_allocated_filler(
    ::caffe::FillerParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.filler_);
  }
  _impl_.filler_ = reinterpret_cast<::caffe::FillerParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.ScaleParameter.filler)
}
inline ::caffe::FillerParameter* PROTOBUF_NULLABLE ScaleParameter::release_filler() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
  ::caffe::FillerParameter* released = _impl_.filler_;
  _impl_.filler_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::FillerParameter* PROTOBUF_NULLABLE ScaleParameter::unsafe_arena_release_filler() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.ScaleParameter.filler)

  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
  ::caffe::FillerParameter* temp = _impl_.filler_;
  _impl_.filler_ = nullptr;
  return temp;
}
inline ::caffe::FillerParameter* PROTOBUF_NONNULL ScaleParameter::_internal_mutable_filler() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.filler_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::FillerParameter>(GetArena());
    _impl_.filler_ = reinterpret_cast<::caffe::FillerParameter*>(p);
  }
  return _impl_.filler_;
}
inline ::caffe::FillerParameter* PROTOBUF_NONNULL ScaleParameter::mutable_filler()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  ::caffe::FillerParameter* _msg = _internal_mutable_filler();
  // @@protoc_insertion_point(field_mutable:caffe.ScaleParameter.filler)
  return _msg;
}
inline void ScaleParameter::set_allocated_filler(::caffe::FillerParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.filler_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
  }

  _impl_.filler_ = reinterpret_cast<::caffe::FillerParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.ScaleParameter.filler)
}

// optional bool bias_term = 4 [default = false];
inline bool ScaleParameter::has_bias_term() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000004U);
  return value;
}
inline void ScaleParameter::clear_bias_term() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.bias_term_ = false;
  ClearHasBit(_impl_._has_bits_[0], 0x00000004U);
}
inline bool ScaleParameter::bias_term() const {
  // @@protoc_insertion_point(field_get:caffe.ScaleParameter.bias_term)
  return _internal_bias_term();
}
inline void ScaleParameter::set_bias_term(bool value) {
  _internal_set_bias_term(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000004U);
  // @@protoc_insertion_point(field_set:caffe.ScaleParameter.bias_term)
}
inline bool ScaleParameter::_internal_bias_term() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.bias_term_;
}
inline void ScaleParameter::_internal_set_bias_term(bool value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.bias_term_ = value;
}

// optional .caffe.FillerParameter bias_filler = 5;
inline bool ScaleParameter::has_bias_filler() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000002U);
  PROTOBUF_ASSUME(!value || _impl_.bias_filler_ != nullptr);
  return value;
}
inline void ScaleParameter::clear_bias_filler() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.bias_filler_ != nullptr) _impl_.bias_filler_->Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
}
inline const ::caffe::FillerParameter& ScaleParameter::_internal_bias_filler() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::FillerParameter* p = _impl_.bias_filler_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::FillerParameter>(&::caffe::FillerParameter_globals_);
}
inline const ::caffe::FillerParameter& ScaleParameter::bias_filler() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.ScaleParameter.bias_filler)
  return _internal_bias_filler();
}
inline void ScaleParameter::unsafe_arena_set_allocated_bias_filler(
    ::caffe::FillerParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.bias_filler_);
  }
  _impl_.bias_filler_ = reinterpret_cast<::caffe::FillerParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.ScaleParameter.bias_filler)
}
inline ::caffe::FillerParameter* PROTOBUF_NULLABLE ScaleParameter::release_bias_filler() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
  ::caffe::FillerParameter* released = _impl_.bias_filler_;
  _impl_.bias_filler_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::FillerParameter* PROTOBUF_NULLABLE ScaleParameter::unsafe_arena_release_bias_filler() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.ScaleParameter.bias_filler)

  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
  ::caffe::FillerParameter* temp = _impl_.bias_filler_;
  _impl_.bias_filler_ = nullptr;
  return temp;
}
inline ::caffe::FillerParameter* PROTOBUF_NONNULL ScaleParameter::_internal_mutable_bias_filler() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.bias_filler_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::FillerParameter>(GetArena());
    _impl_.bias_filler_ = reinterpret_cast<::caffe::FillerParameter*>(p);
  }
  return _impl_.bias_filler_;
}
inline ::caffe::FillerParameter* PROTOBUF_NONNULL ScaleParameter::mutable_bias_filler()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  ::caffe::FillerParameter* _msg = _internal_mutable_bias_filler();
  // @@protoc_insertion_point(field_mutable:caffe.ScaleParameter.bias_filler)
  return _msg;
}
inline void ScaleParameter::set_allocated_bias_filler(::caffe::FillerParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.bias_filler_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
  }

  _impl_.bias_filler_ = reinterpret_cast<::caffe::FillerParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.ScaleParameter.bias_filler)
}

// -------------------------------------------------------------------

// ShuffleChannelParameter

// optional uint32 group = 1 [default = 1];
inline bool ShuffleChannelParameter::has_group() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000001U);
  return value;
}
inline void ShuffleChannelParameter::clear_group() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.group_ = 1u;
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
}
inline ::uint32_t ShuffleChannelParameter::group() const {
  // @@protoc_insertion_point(field_get:caffe.ShuffleChannelParameter.group)
  return _internal_group();
}
inline void ShuffleChannelParameter::set_group(::uint32_t value) {
  _internal_set_group(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_set:caffe.ShuffleChannelParameter.group)
}
inline ::uint32_t ShuffleChannelParameter::_internal_group() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.group_;
}
inline void ShuffleChannelParameter::_internal_set_group(::uint32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.group_ = value;
}

// -------------------------------------------------------------------

// SigmoidParameter

// optional .caffe.SigmoidParameter.Engine engine = 1 [default = DEFAULT];
inline bool SigmoidParameter::has_engine() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000001U);
  return value;
}
inline void SigmoidParameter::clear_engine() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.engine_ = 0;
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
}
inline ::caffe::SigmoidParameter_Engine SigmoidParameter::engine() const {
  // @@protoc_insertion_point(field_get:caffe.SigmoidParameter.engine)
  return _internal_engine();
}
inline void SigmoidParameter::set_engine(::caffe::SigmoidParameter_Engine value) {
  _internal_set_engine(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_set:caffe.SigmoidParameter.engine)
}
inline ::caffe::SigmoidParameter_Engine SigmoidParameter::_internal_engine() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return static_cast<::caffe::SigmoidParameter_Engine>(_impl_.engine_);
}
inline void SigmoidParameter::_internal_set_engine(::caffe::SigmoidParameter_Engine value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);

                                          assert(::google::protobuf::internal::ValidateEnum(
                                              value, ::caffe::SigmoidParameter_Engine_internal_data_));
                                          _impl_.engine_ = value;
}

// -------------------------------------------------------------------

// SmoothL1LossParameter

// optional float sigma = 1 [default = 1];
inline bool SmoothL1LossParameter::has_sigma() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000001U);
  return value;
}
inline void SmoothL1LossParameter::clear_sigma() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.sigma_ = 1;
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
}
inline float SmoothL1LossParameter::sigma() const {
  // @@protoc_insertion_point(field_get:caffe.SmoothL1LossParameter.sigma)
  return _internal_sigma();
}
inline void SmoothL1LossParameter::set_sigma(float value) {
  _internal_set_sigma(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_set:caffe.SmoothL1LossParameter.sigma)
}
inline float SmoothL1LossParameter::_internal_sigma() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.sigma_;
}
inline void SmoothL1LossParameter::_internal_set_sigma(float value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.sigma_ = value;
}

// -------------------------------------------------------------------

// SliceParameter

// optional int32 axis = 3 [default = 1];
inline bool SliceParameter::has_axis() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000004U);
  return value;
}
inline void SliceParameter::clear_axis() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.axis_ = 1;
  ClearHasBit(_impl_._has_bits_[0], 0x00000004U);
}
inline ::int32_t SliceParameter::axis() const {
  // @@protoc_insertion_point(field_get:caffe.SliceParameter.axis)
  return _internal_axis();
}
inline void SliceParameter::set_axis(::int32_t value) {
  _internal_set_axis(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000004U);
  // @@protoc_insertion_point(field_set:caffe.SliceParameter.axis)
}
inline ::int32_t SliceParameter::_internal_axis() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.axis_;
}
inline void SliceParameter::_internal_set_axis(::int32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.axis_ = value;
}

// repeated uint32 slice_point = 2;
inline int SliceParameter::_internal_slice_point_size() const {
  return _internal_slice_point().size();
}
inline int SliceParameter::slice_point_size() const {
  return _internal_slice_point_size();
}
inline void SliceParameter::clear_slice_point() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.slice_point_.Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
}
inline ::uint32_t SliceParameter::slice_point(int index) const {
  // @@protoc_insertion_point(field_get:caffe.SliceParameter.slice_point)
  return _internal_slice_point().Get(index);
}
inline void SliceParameter::set_slice_point(int index, ::uint32_t value) {
  _internal_mutable_slice_point()->Set(index, value);
  // @@protoc_insertion_point(field_set:caffe.SliceParameter.slice_point)
}
inline void SliceParameter::add_slice_point(::uint32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _internal_mutable_slice_point()
      ->InternalAddWithArena<const ::google::protobuf::MessageLite*>(
          internal_visibility(), this, value);
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_add:caffe.SliceParameter.slice_point)
}
inline const ::google::protobuf::RepeatedField<::uint32_t>& SliceParameter::slice_point() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_list:caffe.SliceParameter.slice_point)
  return _internal_slice_point();
}
inline ::google::protobuf::RepeatedField<::uint32_t>* PROTOBUF_NONNULL SliceParameter::mutable_slice_point()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_mutable_list:caffe.SliceParameter.slice_point)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _internal_mutable_slice_point();
}
inline const ::google::protobuf::RepeatedField<::uint32_t>&
SliceParameter::_internal_slice_point() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.slice_point_;
}
inline ::google::protobuf::RepeatedField<::uint32_t>* PROTOBUF_NONNULL
SliceParameter::_internal_mutable_slice_point() {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return &_impl_.slice_point_;
}

// optional uint32 slice_dim = 1 [default = 1];
inline bool SliceParameter::has_slice_dim() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000002U);
  return value;
}
inline void SliceParameter::clear_slice_dim() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.slice_dim_ = 1u;
  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
}
inline ::uint32_t SliceParameter::slice_dim() const {
  // @@protoc_insertion_point(field_get:caffe.SliceParameter.slice_dim)
  return _internal_slice_dim();
}
inline void SliceParameter::set_slice_dim(::uint32_t value) {
  _internal_set_slice_dim(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  // @@protoc_insertion_point(field_set:caffe.SliceParameter.slice_dim)
}
inline ::uint32_t SliceParameter::_internal_slice_dim() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.slice_dim_;
}
inline void SliceParameter::_internal_set_slice_dim(::uint32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.slice_dim_ = value;
}

// -------------------------------------------------------------------

// SoftmaxParameter

// optional .caffe.SoftmaxParameter.Engine engine = 1 [default = DEFAULT];
inline bool SoftmaxParameter::has_engine() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000001U);
  return value;
}
inline void SoftmaxParameter::clear_engine() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.engine_ = 0;
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
}
inline ::caffe::SoftmaxParameter_Engine SoftmaxParameter::engine() const {
  // @@protoc_insertion_point(field_get:caffe.SoftmaxParameter.engine)
  return _internal_engine();
}
inline void SoftmaxParameter::set_engine(::caffe::SoftmaxParameter_Engine value) {
  _internal_set_engine(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_set:caffe.SoftmaxParameter.engine)
}
inline ::caffe::SoftmaxParameter_Engine SoftmaxParameter::_internal_engine() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return static_cast<::caffe::SoftmaxParameter_Engine>(_impl_.engine_);
}
inline void SoftmaxParameter::_internal_set_engine(::caffe::SoftmaxParameter_Engine value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);

                                          assert(::google::protobuf::internal::ValidateEnum(
                                              value, ::caffe::SoftmaxParameter_Engine_internal_data_));
                                          _impl_.engine_ = value;
}

// optional int32 axis = 2 [default = 1];
inline bool SoftmaxParameter::has_axis() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000002U);
  return value;
}
inline void SoftmaxParameter::clear_axis() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.axis_ = 1;
  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
}
inline ::int32_t SoftmaxParameter::axis() const {
  // @@protoc_insertion_point(field_get:caffe.SoftmaxParameter.axis)
  return _internal_axis();
}
inline void SoftmaxParameter::set_axis(::int32_t value) {
  _internal_set_axis(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  // @@protoc_insertion_point(field_set:caffe.SoftmaxParameter.axis)
}
inline ::int32_t SoftmaxParameter::_internal_axis() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.axis_;
}
inline void SoftmaxParameter::_internal_set_axis(::int32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.axis_ = value;
}

// -------------------------------------------------------------------

// TanHParameter

// optional .caffe.TanHParameter.Engine engine = 1 [default = DEFAULT];
inline bool TanHParameter::has_engine() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000001U);
  return value;
}
inline void TanHParameter::clear_engine() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.engine_ = 0;
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
}
inline ::caffe::TanHParameter_Engine TanHParameter::engine() const {
  // @@protoc_insertion_point(field_get:caffe.TanHParameter.engine)
  return _internal_engine();
}
inline void TanHParameter::set_engine(::caffe::TanHParameter_Engine value) {
  _internal_set_engine(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_set:caffe.TanHParameter.engine)
}
inline ::caffe::TanHParameter_Engine TanHParameter::_internal_engine() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return static_cast<::caffe::TanHParameter_Engine>(_impl_.engine_);
}
inline void TanHParameter::_internal_set_engine(::caffe::TanHParameter_Engine value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);

                                          assert(::google::protobuf::internal::ValidateEnum(
                                              value, ::caffe::TanHParameter_Engine_internal_data_));
                                          _impl_.engine_ = value;
}

// -------------------------------------------------------------------

// TileParameter

// optional int32 axis = 1 [default = 1];
inline bool TileParameter::has_axis() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000002U);
  return value;
}
inline void TileParameter::clear_axis() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.axis_ = 1;
  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
}
inline ::int32_t TileParameter::axis() const {
  // @@protoc_insertion_point(field_get:caffe.TileParameter.axis)
  return _internal_axis();
}
inline void TileParameter::set_axis(::int32_t value) {
  _internal_set_axis(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  // @@protoc_insertion_point(field_set:caffe.TileParameter.axis)
}
inline ::int32_t TileParameter::_internal_axis() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.axis_;
}
inline void TileParameter::_internal_set_axis(::int32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.axis_ = value;
}

// optional int32 tiles = 2;
inline bool TileParameter::has_tiles() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000001U);
  return value;
}
inline void TileParameter::clear_tiles() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.tiles_ = 0;
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
}
inline ::int32_t TileParameter::tiles() const {
  // @@protoc_insertion_point(field_get:caffe.TileParameter.tiles)
  return _internal_tiles();
}
inline void TileParameter::set_tiles(::int32_t value) {
  _internal_set_tiles(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_set:caffe.TileParameter.tiles)
}
inline ::int32_t TileParameter::_internal_tiles() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.tiles_;
}
inline void TileParameter::_internal_set_tiles(::int32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.tiles_ = value;
}

// -------------------------------------------------------------------

// ThresholdParameter

// optional float threshold = 1 [default = 0];
inline bool ThresholdParameter::has_threshold() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000001U);
  return value;
}
inline void ThresholdParameter::clear_threshold() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.threshold_ = 0;
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
}
inline float ThresholdParameter::threshold() const {
  // @@protoc_insertion_point(field_get:caffe.ThresholdParameter.threshold)
  return _internal_threshold();
}
inline void ThresholdParameter::set_threshold(float value) {
  _internal_set_threshold(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_set:caffe.ThresholdParameter.threshold)
}
inline float ThresholdParameter::_internal_threshold() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.threshold_;
}
inline void ThresholdParameter::_internal_set_threshold(float value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.threshold_ = value;
}

// -------------------------------------------------------------------

// WindowDataParameter

// optional string source = 1;
inline bool WindowDataParameter::has_source() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000001U);
  return value;
}
inline void WindowDataParameter::clear_source() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.source_.ClearToEmpty();
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
}
inline const ::std::string& WindowDataParameter::source() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.WindowDataParameter.source)
  return _internal_source();
}
template <typename Arg_, typename... Args_>
PROTOBUF_ALWAYS_INLINE void WindowDataParameter::set_source(Arg_&& arg, Args_... args) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  _impl_.source_.Set(static_cast<Arg_&&>(arg), args..., GetArena());
  // @@protoc_insertion_point(field_set:caffe.WindowDataParameter.source)
}
inline ::std::string* PROTOBUF_NONNULL WindowDataParameter::mutable_source()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  ::std::string* _s = _internal_mutable_source();
  // @@protoc_insertion_point(field_mutable:caffe.WindowDataParameter.source)
  return _s;
}
inline const ::std::string& WindowDataParameter::_internal_source() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.source_.Get();
}
inline void WindowDataParameter::_internal_set_source(const ::std::string& value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.source_.Set(value, GetArena());
}
inline ::std::string* PROTOBUF_NONNULL WindowDataParameter::_internal_mutable_source() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _impl_.source_.Mutable( GetArena());
}
inline ::std::string* PROTOBUF_NULLABLE WindowDataParameter::release_source() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.WindowDataParameter.source)
  if (!CheckHasBit(_impl_._has_bits_[0], 0x00000001U)) {
    return nullptr;
  }
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
  auto* released = _impl_.source_.Release();
  if (::google::protobuf::internal::DebugHardenForceCopyDefaultString()) {
    _impl_.source_.Set("", GetArena());
  }
  return released;
}
inline void WindowDataParameter::set_allocated_source(::std::string* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
  }
  _impl_.source_.SetAllocated(value, GetArena());
  if (::google::protobuf::internal::DebugHardenForceCopyDefaultString() && _impl_.source_.IsDefault()) {
    _impl_.source_.Set("", GetArena());
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.WindowDataParameter.source)
}

// optional float scale = 2 [default = 1];
inline bool WindowDataParameter::has_scale() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000200U);
  return value;
}
inline void WindowDataParameter::clear_scale() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.scale_ = 1;
  ClearHasBit(_impl_._has_bits_[0], 0x00000200U);
}
inline float WindowDataParameter::scale() const {
  // @@protoc_insertion_point(field_get:caffe.WindowDataParameter.scale)
  return _internal_scale();
}
inline void WindowDataParameter::set_scale(float value) {
  _internal_set_scale(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000200U);
  // @@protoc_insertion_point(field_set:caffe.WindowDataParameter.scale)
}
inline float WindowDataParameter::_internal_scale() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.scale_;
}
inline void WindowDataParameter::_internal_set_scale(float value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.scale_ = value;
}

// optional string mean_file = 3;
inline bool WindowDataParameter::has_mean_file() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000002U);
  return value;
}
inline void WindowDataParameter::clear_mean_file() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.mean_file_.ClearToEmpty();
  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
}
inline const ::std::string& WindowDataParameter::mean_file() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.WindowDataParameter.mean_file)
  return _internal_mean_file();
}
template <typename Arg_, typename... Args_>
PROTOBUF_ALWAYS_INLINE void WindowDataParameter::set_mean_file(Arg_&& arg, Args_... args) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  _impl_.mean_file_.Set(static_cast<Arg_&&>(arg), args..., GetArena());
  // @@protoc_insertion_point(field_set:caffe.WindowDataParameter.mean_file)
}
inline ::std::string* PROTOBUF_NONNULL WindowDataParameter::mutable_mean_file()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  ::std::string* _s = _internal_mutable_mean_file();
  // @@protoc_insertion_point(field_mutable:caffe.WindowDataParameter.mean_file)
  return _s;
}
inline const ::std::string& WindowDataParameter::_internal_mean_file() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.mean_file_.Get();
}
inline void WindowDataParameter::_internal_set_mean_file(const ::std::string& value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.mean_file_.Set(value, GetArena());
}
inline ::std::string* PROTOBUF_NONNULL WindowDataParameter::_internal_mutable_mean_file() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _impl_.mean_file_.Mutable( GetArena());
}
inline ::std::string* PROTOBUF_NULLABLE WindowDataParameter::release_mean_file() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.WindowDataParameter.mean_file)
  if (!CheckHasBit(_impl_._has_bits_[0], 0x00000002U)) {
    return nullptr;
  }
  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
  auto* released = _impl_.mean_file_.Release();
  if (::google::protobuf::internal::DebugHardenForceCopyDefaultString()) {
    _impl_.mean_file_.Set("", GetArena());
  }
  return released;
}
inline void WindowDataParameter::set_allocated_mean_file(::std::string* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
  }
  _impl_.mean_file_.SetAllocated(value, GetArena());
  if (::google::protobuf::internal::DebugHardenForceCopyDefaultString() && _impl_.mean_file_.IsDefault()) {
    _impl_.mean_file_.Set("", GetArena());
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.WindowDataParameter.mean_file)
}

// optional uint32 batch_size = 4;
inline bool WindowDataParameter::has_batch_size() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000010U);
  return value;
}
inline void WindowDataParameter::clear_batch_size() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.batch_size_ = 0u;
  ClearHasBit(_impl_._has_bits_[0], 0x00000010U);
}
inline ::uint32_t WindowDataParameter::batch_size() const {
  // @@protoc_insertion_point(field_get:caffe.WindowDataParameter.batch_size)
  return _internal_batch_size();
}
inline void WindowDataParameter::set_batch_size(::uint32_t value) {
  _internal_set_batch_size(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000010U);
  // @@protoc_insertion_point(field_set:caffe.WindowDataParameter.batch_size)
}
inline ::uint32_t WindowDataParameter::_internal_batch_size() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.batch_size_;
}
inline void WindowDataParameter::_internal_set_batch_size(::uint32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.batch_size_ = value;
}

// optional uint32 crop_size = 5 [default = 0];
inline bool WindowDataParameter::has_crop_size() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000020U);
  return value;
}
inline void WindowDataParameter::clear_crop_size() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.crop_size_ = 0u;
  ClearHasBit(_impl_._has_bits_[0], 0x00000020U);
}
inline ::uint32_t WindowDataParameter::crop_size() const {
  // @@protoc_insertion_point(field_get:caffe.WindowDataParameter.crop_size)
  return _internal_crop_size();
}
inline void WindowDataParameter::set_crop_size(::uint32_t value) {
  _internal_set_crop_size(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000020U);
  // @@protoc_insertion_point(field_set:caffe.WindowDataParameter.crop_size)
}
inline ::uint32_t WindowDataParameter::_internal_crop_size() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.crop_size_;
}
inline void WindowDataParameter::_internal_set_crop_size(::uint32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.crop_size_ = value;
}

// optional bool mirror = 6 [default = false];
inline bool WindowDataParameter::has_mirror() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000040U);
  return value;
}
inline void WindowDataParameter::clear_mirror() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.mirror_ = false;
  ClearHasBit(_impl_._has_bits_[0], 0x00000040U);
}
inline bool WindowDataParameter::mirror() const {
  // @@protoc_insertion_point(field_get:caffe.WindowDataParameter.mirror)
  return _internal_mirror();
}
inline void WindowDataParameter::set_mirror(bool value) {
  _internal_set_mirror(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000040U);
  // @@protoc_insertion_point(field_set:caffe.WindowDataParameter.mirror)
}
inline bool WindowDataParameter::_internal_mirror() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.mirror_;
}
inline void WindowDataParameter::_internal_set_mirror(bool value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.mirror_ = value;
}

// optional float fg_threshold = 7 [default = 0.5];
inline bool WindowDataParameter::has_fg_threshold() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000400U);
  return value;
}
inline void WindowDataParameter::clear_fg_threshold() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.fg_threshold_ = 0.5f;
  ClearHasBit(_impl_._has_bits_[0], 0x00000400U);
}
inline float WindowDataParameter::fg_threshold() const {
  // @@protoc_insertion_point(field_get:caffe.WindowDataParameter.fg_threshold)
  return _internal_fg_threshold();
}
inline void WindowDataParameter::set_fg_threshold(float value) {
  _internal_set_fg_threshold(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000400U);
  // @@protoc_insertion_point(field_set:caffe.WindowDataParameter.fg_threshold)
}
inline float WindowDataParameter::_internal_fg_threshold() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.fg_threshold_;
}
inline void WindowDataParameter::_internal_set_fg_threshold(float value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.fg_threshold_ = value;
}

// optional float bg_threshold = 8 [default = 0.5];
inline bool WindowDataParameter::has_bg_threshold() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000800U);
  return value;
}
inline void WindowDataParameter::clear_bg_threshold() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.bg_threshold_ = 0.5f;
  ClearHasBit(_impl_._has_bits_[0], 0x00000800U);
}
inline float WindowDataParameter::bg_threshold() const {
  // @@protoc_insertion_point(field_get:caffe.WindowDataParameter.bg_threshold)
  return _internal_bg_threshold();
}
inline void WindowDataParameter::set_bg_threshold(float value) {
  _internal_set_bg_threshold(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000800U);
  // @@protoc_insertion_point(field_set:caffe.WindowDataParameter.bg_threshold)
}
inline float WindowDataParameter::_internal_bg_threshold() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.bg_threshold_;
}
inline void WindowDataParameter::_internal_set_bg_threshold(float value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.bg_threshold_ = value;
}

// optional float fg_fraction = 9 [default = 0.25];
inline bool WindowDataParameter::has_fg_fraction() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00001000U);
  return value;
}
inline void WindowDataParameter::clear_fg_fraction() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.fg_fraction_ = 0.25f;
  ClearHasBit(_impl_._has_bits_[0], 0x00001000U);
}
inline float WindowDataParameter::fg_fraction() const {
  // @@protoc_insertion_point(field_get:caffe.WindowDataParameter.fg_fraction)
  return _internal_fg_fraction();
}
inline void WindowDataParameter::set_fg_fraction(float value) {
  _internal_set_fg_fraction(value);
  SetHasBit(_impl_._has_bits_[0], 0x00001000U);
  // @@protoc_insertion_point(field_set:caffe.WindowDataParameter.fg_fraction)
}
inline float WindowDataParameter::_internal_fg_fraction() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.fg_fraction_;
}
inline void WindowDataParameter::_internal_set_fg_fraction(float value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.fg_fraction_ = value;
}

// optional uint32 context_pad = 10 [default = 0];
inline bool WindowDataParameter::has_context_pad() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000100U);
  return value;
}
inline void WindowDataParameter::clear_context_pad() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.context_pad_ = 0u;
  ClearHasBit(_impl_._has_bits_[0], 0x00000100U);
}
inline ::uint32_t WindowDataParameter::context_pad() const {
  // @@protoc_insertion_point(field_get:caffe.WindowDataParameter.context_pad)
  return _internal_context_pad();
}
inline void WindowDataParameter::set_context_pad(::uint32_t value) {
  _internal_set_context_pad(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000100U);
  // @@protoc_insertion_point(field_set:caffe.WindowDataParameter.context_pad)
}
inline ::uint32_t WindowDataParameter::_internal_context_pad() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.context_pad_;
}
inline void WindowDataParameter::_internal_set_context_pad(::uint32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.context_pad_ = value;
}

// optional string crop_mode = 11 [default = "warp"];
inline bool WindowDataParameter::has_crop_mode() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000004U);
  return value;
}
inline void WindowDataParameter::clear_crop_mode() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.crop_mode_.ClearToDefault(::caffe::WindowDataParameter::Impl_::_i_give_permission_to_break_this_code_default_crop_mode_, GetArena());
  ClearHasBit(_impl_._has_bits_[0], 0x00000004U);
}
inline const ::std::string& WindowDataParameter::crop_mode() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.WindowDataParameter.crop_mode)
  if (_impl_.crop_mode_.IsDefault()) {
    return Impl_::_i_give_permission_to_break_this_code_default_crop_mode_.get();
  }
  return _internal_crop_mode();
}
template <typename Arg_, typename... Args_>
PROTOBUF_ALWAYS_INLINE void WindowDataParameter::set_crop_mode(Arg_&& arg, Args_... args) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  SetHasBit(_impl_._has_bits_[0], 0x00000004U);
  _impl_.crop_mode_.Set(static_cast<Arg_&&>(arg), args..., GetArena());
  // @@protoc_insertion_point(field_set:caffe.WindowDataParameter.crop_mode)
}
inline ::std::string* PROTOBUF_NONNULL WindowDataParameter::mutable_crop_mode()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000004U);
  ::std::string* _s = _internal_mutable_crop_mode();
  // @@protoc_insertion_point(field_mutable:caffe.WindowDataParameter.crop_mode)
  return _s;
}
inline const ::std::string& WindowDataParameter::_internal_crop_mode() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.crop_mode_.Get();
}
inline void WindowDataParameter::_internal_set_crop_mode(const ::std::string& value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.crop_mode_.Set(value, GetArena());
}
inline ::std::string* PROTOBUF_NONNULL WindowDataParameter::_internal_mutable_crop_mode() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _impl_.crop_mode_.Mutable(::caffe::WindowDataParameter::Impl_::_i_give_permission_to_break_this_code_default_crop_mode_, GetArena());
}
inline ::std::string* PROTOBUF_NULLABLE WindowDataParameter::release_crop_mode() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.WindowDataParameter.crop_mode)
  if (!CheckHasBit(_impl_._has_bits_[0], 0x00000004U)) {
    return nullptr;
  }
  ClearHasBit(_impl_._has_bits_[0], 0x00000004U);
  return _impl_.crop_mode_.Release();
}
inline void WindowDataParameter::set_allocated_crop_mode(::std::string* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000004U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000004U);
  }
  _impl_.crop_mode_.SetAllocated(value, GetArena());
  // @@protoc_insertion_point(field_set_allocated:caffe.WindowDataParameter.crop_mode)
}

// optional bool cache_images = 12 [default = false];
inline bool WindowDataParameter::has_cache_images() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000080U);
  return value;
}
inline void WindowDataParameter::clear_cache_images() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.cache_images_ = false;
  ClearHasBit(_impl_._has_bits_[0], 0x00000080U);
}
inline bool WindowDataParameter::cache_images() const {
  // @@protoc_insertion_point(field_get:caffe.WindowDataParameter.cache_images)
  return _internal_cache_images();
}
inline void WindowDataParameter::set_cache_images(bool value) {
  _internal_set_cache_images(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000080U);
  // @@protoc_insertion_point(field_set:caffe.WindowDataParameter.cache_images)
}
inline bool WindowDataParameter::_internal_cache_images() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.cache_images_;
}
inline void WindowDataParameter::_internal_set_cache_images(bool value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.cache_images_ = value;
}

// optional string root_folder = 13 [default = ""];
inline bool WindowDataParameter::has_root_folder() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000008U);
  return value;
}
inline void WindowDataParameter::clear_root_folder() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.root_folder_.ClearToEmpty();
  ClearHasBit(_impl_._has_bits_[0], 0x00000008U);
}
inline const ::std::string& WindowDataParameter::root_folder() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.WindowDataParameter.root_folder)
  return _internal_root_folder();
}
template <typename Arg_, typename... Args_>
PROTOBUF_ALWAYS_INLINE void WindowDataParameter::set_root_folder(Arg_&& arg, Args_... args) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  SetHasBit(_impl_._has_bits_[0], 0x00000008U);
  _impl_.root_folder_.Set(static_cast<Arg_&&>(arg), args..., GetArena());
  // @@protoc_insertion_point(field_set:caffe.WindowDataParameter.root_folder)
}
inline ::std::string* PROTOBUF_NONNULL WindowDataParameter::mutable_root_folder()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000008U);
  ::std::string* _s = _internal_mutable_root_folder();
  // @@protoc_insertion_point(field_mutable:caffe.WindowDataParameter.root_folder)
  return _s;
}
inline const ::std::string& WindowDataParameter::_internal_root_folder() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.root_folder_.Get();
}
inline void WindowDataParameter::_internal_set_root_folder(const ::std::string& value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.root_folder_.Set(value, GetArena());
}
inline ::std::string* PROTOBUF_NONNULL WindowDataParameter::_internal_mutable_root_folder() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _impl_.root_folder_.Mutable( GetArena());
}
inline ::std::string* PROTOBUF_NULLABLE WindowDataParameter::release_root_folder() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.WindowDataParameter.root_folder)
  if (!CheckHasBit(_impl_._has_bits_[0], 0x00000008U)) {
    return nullptr;
  }
  ClearHasBit(_impl_._has_bits_[0], 0x00000008U);
  auto* released = _impl_.root_folder_.Release();
  if (::google::protobuf::internal::DebugHardenForceCopyDefaultString()) {
    _impl_.root_folder_.Set("", GetArena());
  }
  return released;
}
inline void WindowDataParameter::set_allocated_root_folder(::std::string* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000008U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000008U);
  }
  _impl_.root_folder_.SetAllocated(value, GetArena());
  if (::google::protobuf::internal::DebugHardenForceCopyDefaultString() && _impl_.root_folder_.IsDefault()) {
    _impl_.root_folder_.Set("", GetArena());
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.WindowDataParameter.root_folder)
}

// -------------------------------------------------------------------

// SPPParameter

// optional uint32 pyramid_height = 1;
inline bool SPPParameter::has_pyramid_height() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000001U);
  return value;
}
inline void SPPParameter::clear_pyramid_height() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.pyramid_height_ = 0u;
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
}
inline ::uint32_t SPPParameter::pyramid_height() const {
  // @@protoc_insertion_point(field_get:caffe.SPPParameter.pyramid_height)
  return _internal_pyramid_height();
}
inline void SPPParameter::set_pyramid_height(::uint32_t value) {
  _internal_set_pyramid_height(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_set:caffe.SPPParameter.pyramid_height)
}
inline ::uint32_t SPPParameter::_internal_pyramid_height() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.pyramid_height_;
}
inline void SPPParameter::_internal_set_pyramid_height(::uint32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.pyramid_height_ = value;
}

// optional .caffe.SPPParameter.PoolMethod pool = 2 [default = MAX];
inline bool SPPParameter::has_pool() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000002U);
  return value;
}
inline void SPPParameter::clear_pool() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.pool_ = 0;
  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
}
inline ::caffe::SPPParameter_PoolMethod SPPParameter::pool() const {
  // @@protoc_insertion_point(field_get:caffe.SPPParameter.pool)
  return _internal_pool();
}
inline void SPPParameter::set_pool(::caffe::SPPParameter_PoolMethod value) {
  _internal_set_pool(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  // @@protoc_insertion_point(field_set:caffe.SPPParameter.pool)
}
inline ::caffe::SPPParameter_PoolMethod SPPParameter::_internal_pool() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return static_cast<::caffe::SPPParameter_PoolMethod>(_impl_.pool_);
}
inline void SPPParameter::_internal_set_pool(::caffe::SPPParameter_PoolMethod value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);

                                          assert(::google::protobuf::internal::ValidateEnum(
                                              value, ::caffe::SPPParameter_PoolMethod_internal_data_));
                                          _impl_.pool_ = value;
}

// optional .caffe.SPPParameter.Engine engine = 6 [default = DEFAULT];
inline bool SPPParameter::has_engine() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000004U);
  return value;
}
inline void SPPParameter::clear_engine() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.engine_ = 0;
  ClearHasBit(_impl_._has_bits_[0], 0x00000004U);
}
inline ::caffe::SPPParameter_Engine SPPParameter::engine() const {
  // @@protoc_insertion_point(field_get:caffe.SPPParameter.engine)
  return _internal_engine();
}
inline void SPPParameter::set_engine(::caffe::SPPParameter_Engine value) {
  _internal_set_engine(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000004U);
  // @@protoc_insertion_point(field_set:caffe.SPPParameter.engine)
}
inline ::caffe::SPPParameter_Engine SPPParameter::_internal_engine() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return static_cast<::caffe::SPPParameter_Engine>(_impl_.engine_);
}
inline void SPPParameter::_internal_set_engine(::caffe::SPPParameter_Engine value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);

                                          assert(::google::protobuf::internal::ValidateEnum(
                                              value, ::caffe::SPPParameter_Engine_internal_data_));
                                          _impl_.engine_ = value;
}

// -------------------------------------------------------------------

// V1LayerParameter

// repeated string bottom = 2;
inline int V1LayerParameter::_internal_bottom_size() const {
  return _internal_bottom().size();
}
inline int V1LayerParameter::bottom_size() const {
  return _internal_bottom_size();
}
inline void V1LayerParameter::clear_bottom() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.bottom_.Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
}
inline ::std::string* PROTOBUF_NONNULL V1LayerParameter::add_bottom()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  ::std::string* _s =
      _internal_mutable_bottom()->InternalAddWithArena(
          ::google::protobuf::MessageLite::internal_visibility(), GetArena());
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_add_mutable:caffe.V1LayerParameter.bottom)
  return _s;
}
inline const ::std::string& V1LayerParameter::bottom(int index) const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.V1LayerParameter.bottom)
  return _internal_bottom().Get(index);
}
inline ::std::string* PROTOBUF_NONNULL V1LayerParameter::mutable_bottom(int index)
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_mutable:caffe.V1LayerParameter.bottom)
  return _internal_mutable_bottom()->Mutable(index);
}
template <typename Arg_, typename... Args_>
inline void V1LayerParameter::set_bottom(int index, Arg_&& value, Args_... args) {
  ::google::protobuf::internal::AssignToString(
      *_internal_mutable_bottom()->Mutable(index),
      ::std::forward<Arg_>(value), args... );
  // @@protoc_insertion_point(field_set:caffe.V1LayerParameter.bottom)
}
template <typename Arg_, typename... Args_>
inline void V1LayerParameter::add_bottom(Arg_&& value, Args_... args) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  ::google::protobuf::internal::AddToRepeatedPtrField(
      ::google::protobuf::MessageLite::internal_visibility(), GetArena(),
      *_internal_mutable_bottom(), ::std::forward<Arg_>(value),
      args... );
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_add:caffe.V1LayerParameter.bottom)
}
inline const ::google::protobuf::RepeatedPtrField<::std::string>& V1LayerParameter::bottom()
    const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_list:caffe.V1LayerParameter.bottom)
  return _internal_bottom();
}
inline ::google::protobuf::RepeatedPtrField<::std::string>* PROTOBUF_NONNULL
V1LayerParameter::mutable_bottom() ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  // @@protoc_insertion_point(field_mutable_list:caffe.V1LayerParameter.bottom)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _internal_mutable_bottom();
}
inline const ::google::protobuf::RepeatedPtrField<::std::string>&
V1LayerParameter::_internal_bottom() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.bottom_;
}
inline ::google::protobuf::RepeatedPtrField<::std::string>* PROTOBUF_NONNULL
V1LayerParameter::_internal_mutable_bottom() {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return &_impl_.bottom_;
}

// repeated string top = 3;
inline int V1LayerParameter::_internal_top_size() const {
  return _internal_top().size();
}
inline int V1LayerParameter::top_size() const {
  return _internal_top_size();
}
inline void V1LayerParameter::clear_top() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.top_.Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
}
inline ::std::string* PROTOBUF_NONNULL V1LayerParameter::add_top()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  ::std::string* _s =
      _internal_mutable_top()->InternalAddWithArena(
          ::google::protobuf::MessageLite::internal_visibility(), GetArena());
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  // @@protoc_insertion_point(field_add_mutable:caffe.V1LayerParameter.top)
  return _s;
}
inline const ::std::string& V1LayerParameter::top(int index) const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.V1LayerParameter.top)
  return _internal_top().Get(index);
}
inline ::std::string* PROTOBUF_NONNULL V1LayerParameter::mutable_top(int index)
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_mutable:caffe.V1LayerParameter.top)
  return _internal_mutable_top()->Mutable(index);
}
template <typename Arg_, typename... Args_>
inline void V1LayerParameter::set_top(int index, Arg_&& value, Args_... args) {
  ::google::protobuf::internal::AssignToString(
      *_internal_mutable_top()->Mutable(index),
      ::std::forward<Arg_>(value), args... );
  // @@protoc_insertion_point(field_set:caffe.V1LayerParameter.top)
}
template <typename Arg_, typename... Args_>
inline void V1LayerParameter::add_top(Arg_&& value, Args_... args) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  ::google::protobuf::internal::AddToRepeatedPtrField(
      ::google::protobuf::MessageLite::internal_visibility(), GetArena(),
      *_internal_mutable_top(), ::std::forward<Arg_>(value),
      args... );
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  // @@protoc_insertion_point(field_add:caffe.V1LayerParameter.top)
}
inline const ::google::protobuf::RepeatedPtrField<::std::string>& V1LayerParameter::top()
    const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_list:caffe.V1LayerParameter.top)
  return _internal_top();
}
inline ::google::protobuf::RepeatedPtrField<::std::string>* PROTOBUF_NONNULL
V1LayerParameter::mutable_top() ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  // @@protoc_insertion_point(field_mutable_list:caffe.V1LayerParameter.top)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _internal_mutable_top();
}
inline const ::google::protobuf::RepeatedPtrField<::std::string>&
V1LayerParameter::_internal_top() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.top_;
}
inline ::google::protobuf::RepeatedPtrField<::std::string>* PROTOBUF_NONNULL
V1LayerParameter::_internal_mutable_top() {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return &_impl_.top_;
}

// optional string name = 4;
inline bool V1LayerParameter::has_name() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000020U);
  return value;
}
inline void V1LayerParameter::clear_name() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.name_.ClearToEmpty();
  ClearHasBit(_impl_._has_bits_[0], 0x00000020U);
}
inline const ::std::string& V1LayerParameter::name() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.V1LayerParameter.name)
  return _internal_name();
}
template <typename Arg_, typename... Args_>
PROTOBUF_ALWAYS_INLINE void V1LayerParameter::set_name(Arg_&& arg, Args_... args) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  SetHasBit(_impl_._has_bits_[0], 0x00000020U);
  _impl_.name_.Set(static_cast<Arg_&&>(arg), args..., GetArena());
  // @@protoc_insertion_point(field_set:caffe.V1LayerParameter.name)
}
inline ::std::string* PROTOBUF_NONNULL V1LayerParameter::mutable_name()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000020U);
  ::std::string* _s = _internal_mutable_name();
  // @@protoc_insertion_point(field_mutable:caffe.V1LayerParameter.name)
  return _s;
}
inline const ::std::string& V1LayerParameter::_internal_name() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.name_.Get();
}
inline void V1LayerParameter::_internal_set_name(const ::std::string& value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.name_.Set(value, GetArena());
}
inline ::std::string* PROTOBUF_NONNULL V1LayerParameter::_internal_mutable_name() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _impl_.name_.Mutable( GetArena());
}
inline ::std::string* PROTOBUF_NULLABLE V1LayerParameter::release_name() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.V1LayerParameter.name)
  if (!CheckHasBit(_impl_._has_bits_[0], 0x00000020U)) {
    return nullptr;
  }
  ClearHasBit(_impl_._has_bits_[0], 0x00000020U);
  auto* released = _impl_.name_.Release();
  if (::google::protobuf::internal::DebugHardenForceCopyDefaultString()) {
    _impl_.name_.Set("", GetArena());
  }
  return released;
}
inline void V1LayerParameter::set_allocated_name(::std::string* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000020U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000020U);
  }
  _impl_.name_.SetAllocated(value, GetArena());
  if (::google::protobuf::internal::DebugHardenForceCopyDefaultString() && _impl_.name_.IsDefault()) {
    _impl_.name_.Set("", GetArena());
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.V1LayerParameter.name)
}

// repeated .caffe.NetStateRule include = 32;
inline int V1LayerParameter::_internal_include_size() const {
  return _internal_include().size();
}
inline int V1LayerParameter::include_size() const {
  return _internal_include_size();
}
inline void V1LayerParameter::clear_include() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.include_.Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x40000000U);
}
inline const ::caffe::NetStateRule& V1LayerParameter::include(int index) const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.V1LayerParameter.include)
  return _internal_include().Get(index);
}
inline ::caffe::NetStateRule* PROTOBUF_NONNULL V1LayerParameter::mutable_include(int index)
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_mutable:caffe.V1LayerParameter.include)
  return _internal_mutable_include()->Mutable(index);
}
inline ::caffe::NetStateRule* PROTOBUF_NONNULL V1LayerParameter::add_include()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  ::caffe::NetStateRule* _add =
      _internal_mutable_include()->InternalAddWithArena(
          ::google::protobuf::MessageLite::internal_visibility(), GetArena());
  SetHasBit(_impl_._has_bits_[0], 0x40000000U);
  // @@protoc_insertion_point(field_add:caffe.V1LayerParameter.include)
  return _add;
}
inline const ::google::protobuf::RepeatedPtrField<::caffe::NetStateRule>& V1LayerParameter::include() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_list:caffe.V1LayerParameter.include)
  return _internal_include();
}
inline ::google::protobuf::RepeatedPtrField<::caffe::NetStateRule>* PROTOBUF_NONNULL
V1LayerParameter::mutable_include() ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x40000000U);
  // @@protoc_insertion_point(field_mutable_list:caffe.V1LayerParameter.include)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _internal_mutable_include();
}
inline const ::google::protobuf::RepeatedPtrField<::caffe::NetStateRule>&
V1LayerParameter::_internal_include() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.include_;
}
inline ::google::protobuf::RepeatedPtrField<::caffe::NetStateRule>* PROTOBUF_NONNULL
V1LayerParameter::_internal_mutable_include() {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return &_impl_.include_;
}

// repeated .caffe.NetStateRule exclude = 33;
inline int V1LayerParameter::_internal_exclude_size() const {
  return _internal_exclude().size();
}
inline int V1LayerParameter::exclude_size() const {
  return _internal_exclude_size();
}
inline void V1LayerParameter::clear_exclude() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.exclude_.Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x80000000U);
}
inline const ::caffe::NetStateRule& V1LayerParameter::exclude(int index) const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.V1LayerParameter.exclude)
  return _internal_exclude().Get(index);
}
inline ::caffe::NetStateRule* PROTOBUF_NONNULL V1LayerParameter::mutable_exclude(int index)
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_mutable:caffe.V1LayerParameter.exclude)
  return _internal_mutable_exclude()->Mutable(index);
}
inline ::caffe::NetStateRule* PROTOBUF_NONNULL V1LayerParameter::add_exclude()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  ::caffe::NetStateRule* _add =
      _internal_mutable_exclude()->InternalAddWithArena(
          ::google::protobuf::MessageLite::internal_visibility(), GetArena());
  SetHasBit(_impl_._has_bits_[0], 0x80000000U);
  // @@protoc_insertion_point(field_add:caffe.V1LayerParameter.exclude)
  return _add;
}
inline const ::google::protobuf::RepeatedPtrField<::caffe::NetStateRule>& V1LayerParameter::exclude() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_list:caffe.V1LayerParameter.exclude)
  return _internal_exclude();
}
inline ::google::protobuf::RepeatedPtrField<::caffe::NetStateRule>* PROTOBUF_NONNULL
V1LayerParameter::mutable_exclude() ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x80000000U);
  // @@protoc_insertion_point(field_mutable_list:caffe.V1LayerParameter.exclude)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _internal_mutable_exclude();
}
inline const ::google::protobuf::RepeatedPtrField<::caffe::NetStateRule>&
V1LayerParameter::_internal_exclude() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.exclude_;
}
inline ::google::protobuf::RepeatedPtrField<::caffe::NetStateRule>* PROTOBUF_NONNULL
V1LayerParameter::_internal_mutable_exclude() {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return &_impl_.exclude_;
}

// optional .caffe.V1LayerParameter.LayerType type = 5;
inline bool V1LayerParameter::has_type() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x20000000U);
  return value;
}
inline void V1LayerParameter::clear_type() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.type_ = 0;
  ClearHasBit(_impl_._has_bits_[0], 0x20000000U);
}
inline ::caffe::V1LayerParameter_LayerType V1LayerParameter::type() const {
  // @@protoc_insertion_point(field_get:caffe.V1LayerParameter.type)
  return _internal_type();
}
inline void V1LayerParameter::set_type(::caffe::V1LayerParameter_LayerType value) {
  _internal_set_type(value);
  SetHasBit(_impl_._has_bits_[0], 0x20000000U);
  // @@protoc_insertion_point(field_set:caffe.V1LayerParameter.type)
}
inline ::caffe::V1LayerParameter_LayerType V1LayerParameter::_internal_type() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return static_cast<::caffe::V1LayerParameter_LayerType>(_impl_.type_);
}
inline void V1LayerParameter::_internal_set_type(::caffe::V1LayerParameter_LayerType value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);

                                          assert(::google::protobuf::internal::ValidateEnum(
                                              value, ::caffe::V1LayerParameter_LayerType_internal_data_));
                                          _impl_.type_ = value;
}

// repeated .caffe.BlobProto blobs = 6;
inline int V1LayerParameter::_internal_blobs_size() const {
  return _internal_blobs().size();
}
inline int V1LayerParameter::blobs_size() const {
  return _internal_blobs_size();
}
inline void V1LayerParameter::clear_blobs() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.blobs_.Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000004U);
}
inline const ::caffe::BlobProto& V1LayerParameter::blobs(int index) const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.V1LayerParameter.blobs)
  return _internal_blobs().Get(index);
}
inline ::caffe::BlobProto* PROTOBUF_NONNULL V1LayerParameter::mutable_blobs(int index)
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_mutable:caffe.V1LayerParameter.blobs)
  return _internal_mutable_blobs()->Mutable(index);
}
inline ::caffe::BlobProto* PROTOBUF_NONNULL V1LayerParameter::add_blobs()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  ::caffe::BlobProto* _add =
      _internal_mutable_blobs()->InternalAddWithArena(
          ::google::protobuf::MessageLite::internal_visibility(), GetArena());
  SetHasBit(_impl_._has_bits_[0], 0x00000004U);
  // @@protoc_insertion_point(field_add:caffe.V1LayerParameter.blobs)
  return _add;
}
inline const ::google::protobuf::RepeatedPtrField<::caffe::BlobProto>& V1LayerParameter::blobs() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_list:caffe.V1LayerParameter.blobs)
  return _internal_blobs();
}
inline ::google::protobuf::RepeatedPtrField<::caffe::BlobProto>* PROTOBUF_NONNULL
V1LayerParameter::mutable_blobs() ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000004U);
  // @@protoc_insertion_point(field_mutable_list:caffe.V1LayerParameter.blobs)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _internal_mutable_blobs();
}
inline const ::google::protobuf::RepeatedPtrField<::caffe::BlobProto>&
V1LayerParameter::_internal_blobs() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.blobs_;
}
inline ::google::protobuf::RepeatedPtrField<::caffe::BlobProto>* PROTOBUF_NONNULL
V1LayerParameter::_internal_mutable_blobs() {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return &_impl_.blobs_;
}

// repeated string param = 1001;
inline int V1LayerParameter::_internal_param_size() const {
  return _internal_param().size();
}
inline int V1LayerParameter::param_size() const {
  return _internal_param_size();
}
inline void V1LayerParameter::clear_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.param_.Clear();
  ClearHasBit(_impl_._has_bits_[1], 0x00000002U);
}
inline ::std::string* PROTOBUF_NONNULL V1LayerParameter::add_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  ::std::string* _s =
      _internal_mutable_param()->InternalAddWithArena(
          ::google::protobuf::MessageLite::internal_visibility(), GetArena());
  SetHasBit(_impl_._has_bits_[1], 0x00000002U);
  // @@protoc_insertion_point(field_add_mutable:caffe.V1LayerParameter.param)
  return _s;
}
inline const ::std::string& V1LayerParameter::param(int index) const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.V1LayerParameter.param)
  return _internal_param().Get(index);
}
inline ::std::string* PROTOBUF_NONNULL V1LayerParameter::mutable_param(int index)
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_mutable:caffe.V1LayerParameter.param)
  return _internal_mutable_param()->Mutable(index);
}
template <typename Arg_, typename... Args_>
inline void V1LayerParameter::set_param(int index, Arg_&& value, Args_... args) {
  ::google::protobuf::internal::AssignToString(
      *_internal_mutable_param()->Mutable(index),
      ::std::forward<Arg_>(value), args... );
  // @@protoc_insertion_point(field_set:caffe.V1LayerParameter.param)
}
template <typename Arg_, typename... Args_>
inline void V1LayerParameter::add_param(Arg_&& value, Args_... args) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  ::google::protobuf::internal::AddToRepeatedPtrField(
      ::google::protobuf::MessageLite::internal_visibility(), GetArena(),
      *_internal_mutable_param(), ::std::forward<Arg_>(value),
      args... );
  SetHasBit(_impl_._has_bits_[1], 0x00000002U);
  // @@protoc_insertion_point(field_add:caffe.V1LayerParameter.param)
}
inline const ::google::protobuf::RepeatedPtrField<::std::string>& V1LayerParameter::param()
    const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_list:caffe.V1LayerParameter.param)
  return _internal_param();
}
inline ::google::protobuf::RepeatedPtrField<::std::string>* PROTOBUF_NONNULL
V1LayerParameter::mutable_param() ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[1], 0x00000002U);
  // @@protoc_insertion_point(field_mutable_list:caffe.V1LayerParameter.param)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _internal_mutable_param();
}
inline const ::google::protobuf::RepeatedPtrField<::std::string>&
V1LayerParameter::_internal_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.param_;
}
inline ::google::protobuf::RepeatedPtrField<::std::string>* PROTOBUF_NONNULL
V1LayerParameter::_internal_mutable_param() {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return &_impl_.param_;
}

// repeated .caffe.V1LayerParameter.DimCheckMode blob_share_mode = 1002;
inline int V1LayerParameter::_internal_blob_share_mode_size() const {
  return _internal_blob_share_mode().size();
}
inline int V1LayerParameter::blob_share_mode_size() const {
  return _internal_blob_share_mode_size();
}
inline void V1LayerParameter::clear_blob_share_mode() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.blob_share_mode_.Clear();
  ClearHasBit(_impl_._has_bits_[1], 0x00000004U);
}
inline ::caffe::V1LayerParameter_DimCheckMode V1LayerParameter::blob_share_mode(int index) const {
  // @@protoc_insertion_point(field_get:caffe.V1LayerParameter.blob_share_mode)
  return static_cast<::caffe::V1LayerParameter_DimCheckMode>(_internal_blob_share_mode().Get(index));
}
inline void V1LayerParameter::set_blob_share_mode(int index, ::caffe::V1LayerParameter_DimCheckMode value) {

                                          assert(::google::protobuf::internal::ValidateEnum(
                                              value, ::caffe::V1LayerParameter_DimCheckMode_internal_data_));
                                          _internal_mutable_blob_share_mode()->Set(index, value);
  // @@protoc_insertion_point(field_set:caffe.V1LayerParameter.blob_share_mode)
}
inline void V1LayerParameter::add_blob_share_mode(::caffe::V1LayerParameter_DimCheckMode value) {

                                          assert(::google::protobuf::internal::ValidateEnum(
                                              value, ::caffe::V1LayerParameter_DimCheckMode_internal_data_));
                                          ::google::protobuf::internal::TSanWrite(&_impl_);
  _internal_mutable_blob_share_mode()
      ->InternalAddWithArena<const ::google::protobuf::MessageLite*>(
          internal_visibility(), this, value);
  SetHasBit(_impl_._has_bits_[1], 0x00000004U);
  // @@protoc_insertion_point(field_add:caffe.V1LayerParameter.blob_share_mode)
}
inline const ::google::protobuf::RepeatedField<int>& V1LayerParameter::blob_share_mode() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_list:caffe.V1LayerParameter.blob_share_mode)
  return _internal_blob_share_mode();
}
inline ::google::protobuf::RepeatedField<int>* PROTOBUF_NONNULL V1LayerParameter::mutable_blob_share_mode()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[1], 0x00000004U);
  // @@protoc_insertion_point(field_mutable_list:caffe.V1LayerParameter.blob_share_mode)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _internal_mutable_blob_share_mode();
}
inline const ::google::protobuf::RepeatedField<int>& V1LayerParameter::_internal_blob_share_mode()
    const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.blob_share_mode_;
}
inline ::google::protobuf::RepeatedField<int>* PROTOBUF_NONNULL
V1LayerParameter::_internal_mutable_blob_share_mode() {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return &_impl_.blob_share_mode_;
}

// repeated float blobs_lr = 7;
inline int V1LayerParameter::_internal_blobs_lr_size() const {
  return _internal_blobs_lr().size();
}
inline int V1LayerParameter::blobs_lr_size() const {
  return _internal_blobs_lr_size();
}
inline void V1LayerParameter::clear_blobs_lr() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.blobs_lr_.Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000008U);
}
inline float V1LayerParameter::blobs_lr(int index) const {
  // @@protoc_insertion_point(field_get:caffe.V1LayerParameter.blobs_lr)
  return _internal_blobs_lr().Get(index);
}
inline void V1LayerParameter::set_blobs_lr(int index, float value) {
  _internal_mutable_blobs_lr()->Set(index, value);
  // @@protoc_insertion_point(field_set:caffe.V1LayerParameter.blobs_lr)
}
inline void V1LayerParameter::add_blobs_lr(float value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _internal_mutable_blobs_lr()
      ->InternalAddWithArena<const ::google::protobuf::MessageLite*>(
          internal_visibility(), this, value);
  SetHasBit(_impl_._has_bits_[0], 0x00000008U);
  // @@protoc_insertion_point(field_add:caffe.V1LayerParameter.blobs_lr)
}
inline const ::google::protobuf::RepeatedField<float>& V1LayerParameter::blobs_lr() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_list:caffe.V1LayerParameter.blobs_lr)
  return _internal_blobs_lr();
}
inline ::google::protobuf::RepeatedField<float>* PROTOBUF_NONNULL V1LayerParameter::mutable_blobs_lr()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000008U);
  // @@protoc_insertion_point(field_mutable_list:caffe.V1LayerParameter.blobs_lr)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _internal_mutable_blobs_lr();
}
inline const ::google::protobuf::RepeatedField<float>&
V1LayerParameter::_internal_blobs_lr() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.blobs_lr_;
}
inline ::google::protobuf::RepeatedField<float>* PROTOBUF_NONNULL
V1LayerParameter::_internal_mutable_blobs_lr() {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return &_impl_.blobs_lr_;
}

// repeated float weight_decay = 8;
inline int V1LayerParameter::_internal_weight_decay_size() const {
  return _internal_weight_decay().size();
}
inline int V1LayerParameter::weight_decay_size() const {
  return _internal_weight_decay_size();
}
inline void V1LayerParameter::clear_weight_decay() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.weight_decay_.Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000010U);
}
inline float V1LayerParameter::weight_decay(int index) const {
  // @@protoc_insertion_point(field_get:caffe.V1LayerParameter.weight_decay)
  return _internal_weight_decay().Get(index);
}
inline void V1LayerParameter::set_weight_decay(int index, float value) {
  _internal_mutable_weight_decay()->Set(index, value);
  // @@protoc_insertion_point(field_set:caffe.V1LayerParameter.weight_decay)
}
inline void V1LayerParameter::add_weight_decay(float value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _internal_mutable_weight_decay()
      ->InternalAddWithArena<const ::google::protobuf::MessageLite*>(
          internal_visibility(), this, value);
  SetHasBit(_impl_._has_bits_[0], 0x00000010U);
  // @@protoc_insertion_point(field_add:caffe.V1LayerParameter.weight_decay)
}
inline const ::google::protobuf::RepeatedField<float>& V1LayerParameter::weight_decay() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_list:caffe.V1LayerParameter.weight_decay)
  return _internal_weight_decay();
}
inline ::google::protobuf::RepeatedField<float>* PROTOBUF_NONNULL V1LayerParameter::mutable_weight_decay()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000010U);
  // @@protoc_insertion_point(field_mutable_list:caffe.V1LayerParameter.weight_decay)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _internal_mutable_weight_decay();
}
inline const ::google::protobuf::RepeatedField<float>&
V1LayerParameter::_internal_weight_decay() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.weight_decay_;
}
inline ::google::protobuf::RepeatedField<float>* PROTOBUF_NONNULL
V1LayerParameter::_internal_mutable_weight_decay() {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return &_impl_.weight_decay_;
}

// repeated float loss_weight = 35;
inline int V1LayerParameter::_internal_loss_weight_size() const {
  return _internal_loss_weight().size();
}
inline int V1LayerParameter::loss_weight_size() const {
  return _internal_loss_weight_size();
}
inline void V1LayerParameter::clear_loss_weight() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.loss_weight_.Clear();
  ClearHasBit(_impl_._has_bits_[1], 0x00000001U);
}
inline float V1LayerParameter::loss_weight(int index) const {
  // @@protoc_insertion_point(field_get:caffe.V1LayerParameter.loss_weight)
  return _internal_loss_weight().Get(index);
}
inline void V1LayerParameter::set_loss_weight(int index, float value) {
  _internal_mutable_loss_weight()->Set(index, value);
  // @@protoc_insertion_point(field_set:caffe.V1LayerParameter.loss_weight)
}
inline void V1LayerParameter::add_loss_weight(float value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _internal_mutable_loss_weight()
      ->InternalAddWithArena<const ::google::protobuf::MessageLite*>(
          internal_visibility(), this, value);
  SetHasBit(_impl_._has_bits_[1], 0x00000001U);
  // @@protoc_insertion_point(field_add:caffe.V1LayerParameter.loss_weight)
}
inline const ::google::protobuf::RepeatedField<float>& V1LayerParameter::loss_weight() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_list:caffe.V1LayerParameter.loss_weight)
  return _internal_loss_weight();
}
inline ::google::protobuf::RepeatedField<float>* PROTOBUF_NONNULL V1LayerParameter::mutable_loss_weight()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[1], 0x00000001U);
  // @@protoc_insertion_point(field_mutable_list:caffe.V1LayerParameter.loss_weight)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _internal_mutable_loss_weight();
}
inline const ::google::protobuf::RepeatedField<float>&
V1LayerParameter::_internal_loss_weight() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.loss_weight_;
}
inline ::google::protobuf::RepeatedField<float>* PROTOBUF_NONNULL
V1LayerParameter::_internal_mutable_loss_weight() {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return &_impl_.loss_weight_;
}

// optional .caffe.AccuracyParameter accuracy_param = 27;
inline bool V1LayerParameter::has_accuracy_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x02000000U);
  PROTOBUF_ASSUME(!value || _impl_.accuracy_param_ != nullptr);
  return value;
}
inline void V1LayerParameter::clear_accuracy_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.accuracy_param_ != nullptr) _impl_.accuracy_param_->Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x02000000U);
}
inline const ::caffe::AccuracyParameter& V1LayerParameter::_internal_accuracy_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::AccuracyParameter* p = _impl_.accuracy_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::AccuracyParameter>(&::caffe::AccuracyParameter_globals_);
}
inline const ::caffe::AccuracyParameter& V1LayerParameter::accuracy_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.V1LayerParameter.accuracy_param)
  return _internal_accuracy_param();
}
inline void V1LayerParameter::unsafe_arena_set_allocated_accuracy_param(
    ::caffe::AccuracyParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.accuracy_param_);
  }
  _impl_.accuracy_param_ = reinterpret_cast<::caffe::AccuracyParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x02000000U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x02000000U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.V1LayerParameter.accuracy_param)
}
inline ::caffe::AccuracyParameter* PROTOBUF_NULLABLE V1LayerParameter::release_accuracy_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[0], 0x02000000U);
  ::caffe::AccuracyParameter* released = _impl_.accuracy_param_;
  _impl_.accuracy_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::AccuracyParameter* PROTOBUF_NULLABLE V1LayerParameter::unsafe_arena_release_accuracy_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.V1LayerParameter.accuracy_param)

  ClearHasBit(_impl_._has_bits_[0], 0x02000000U);
  ::caffe::AccuracyParameter* temp = _impl_.accuracy_param_;
  _impl_.accuracy_param_ = nullptr;
  return temp;
}
inline ::caffe::AccuracyParameter* PROTOBUF_NONNULL V1LayerParameter::_internal_mutable_accuracy_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.accuracy_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::AccuracyParameter>(GetArena());
    _impl_.accuracy_param_ = reinterpret_cast<::caffe::AccuracyParameter*>(p);
  }
  return _impl_.accuracy_param_;
}
inline ::caffe::AccuracyParameter* PROTOBUF_NONNULL V1LayerParameter::mutable_accuracy_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x02000000U);
  ::caffe::AccuracyParameter* _msg = _internal_mutable_accuracy_param();
  // @@protoc_insertion_point(field_mutable:caffe.V1LayerParameter.accuracy_param)
  return _msg;
}
inline void V1LayerParameter::set_allocated_accuracy_param(::caffe::AccuracyParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.accuracy_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[0], 0x02000000U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x02000000U);
  }

  _impl_.accuracy_param_ = reinterpret_cast<::caffe::AccuracyParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.V1LayerParameter.accuracy_param)
}

// optional .caffe.ArgMaxParameter argmax_param = 23;
inline bool V1LayerParameter::has_argmax_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00200000U);
  PROTOBUF_ASSUME(!value || _impl_.argmax_param_ != nullptr);
  return value;
}
inline void V1LayerParameter::clear_argmax_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.argmax_param_ != nullptr) _impl_.argmax_param_->Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00200000U);
}
inline const ::caffe::ArgMaxParameter& V1LayerParameter::_internal_argmax_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::ArgMaxParameter* p = _impl_.argmax_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::ArgMaxParameter>(&::caffe::ArgMaxParameter_globals_);
}
inline const ::caffe::ArgMaxParameter& V1LayerParameter::argmax_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.V1LayerParameter.argmax_param)
  return _internal_argmax_param();
}
inline void V1LayerParameter::unsafe_arena_set_allocated_argmax_param(
    ::caffe::ArgMaxParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.argmax_param_);
  }
  _impl_.argmax_param_ = reinterpret_cast<::caffe::ArgMaxParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00200000U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00200000U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.V1LayerParameter.argmax_param)
}
inline ::caffe::ArgMaxParameter* PROTOBUF_NULLABLE V1LayerParameter::release_argmax_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[0], 0x00200000U);
  ::caffe::ArgMaxParameter* released = _impl_.argmax_param_;
  _impl_.argmax_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::ArgMaxParameter* PROTOBUF_NULLABLE V1LayerParameter::unsafe_arena_release_argmax_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.V1LayerParameter.argmax_param)

  ClearHasBit(_impl_._has_bits_[0], 0x00200000U);
  ::caffe::ArgMaxParameter* temp = _impl_.argmax_param_;
  _impl_.argmax_param_ = nullptr;
  return temp;
}
inline ::caffe::ArgMaxParameter* PROTOBUF_NONNULL V1LayerParameter::_internal_mutable_argmax_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.argmax_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::ArgMaxParameter>(GetArena());
    _impl_.argmax_param_ = reinterpret_cast<::caffe::ArgMaxParameter*>(p);
  }
  return _impl_.argmax_param_;
}
inline ::caffe::ArgMaxParameter* PROTOBUF_NONNULL V1LayerParameter::mutable_argmax_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00200000U);
  ::caffe::ArgMaxParameter* _msg = _internal_mutable_argmax_param();
  // @@protoc_insertion_point(field_mutable:caffe.V1LayerParameter.argmax_param)
  return _msg;
}
inline void V1LayerParameter::set_allocated_argmax_param(::caffe::ArgMaxParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.argmax_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[0], 0x00200000U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00200000U);
  }

  _impl_.argmax_param_ = reinterpret_cast<::caffe::ArgMaxParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.V1LayerParameter.argmax_param)
}

// optional .caffe.ConcatParameter concat_param = 9;
inline bool V1LayerParameter::has_concat_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000080U);
  PROTOBUF_ASSUME(!value || _impl_.concat_param_ != nullptr);
  return value;
}
inline void V1LayerParameter::clear_concat_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.concat_param_ != nullptr) _impl_.concat_param_->Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000080U);
}
inline const ::caffe::ConcatParameter& V1LayerParameter::_internal_concat_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::ConcatParameter* p = _impl_.concat_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::ConcatParameter>(&::caffe::ConcatParameter_globals_);
}
inline const ::caffe::ConcatParameter& V1LayerParameter::concat_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.V1LayerParameter.concat_param)
  return _internal_concat_param();
}
inline void V1LayerParameter::unsafe_arena_set_allocated_concat_param(
    ::caffe::ConcatParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.concat_param_);
  }
  _impl_.concat_param_ = reinterpret_cast<::caffe::ConcatParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000080U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000080U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.V1LayerParameter.concat_param)
}
inline ::caffe::ConcatParameter* PROTOBUF_NULLABLE V1LayerParameter::release_concat_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[0], 0x00000080U);
  ::caffe::ConcatParameter* released = _impl_.concat_param_;
  _impl_.concat_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::ConcatParameter* PROTOBUF_NULLABLE V1LayerParameter::unsafe_arena_release_concat_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.V1LayerParameter.concat_param)

  ClearHasBit(_impl_._has_bits_[0], 0x00000080U);
  ::caffe::ConcatParameter* temp = _impl_.concat_param_;
  _impl_.concat_param_ = nullptr;
  return temp;
}
inline ::caffe::ConcatParameter* PROTOBUF_NONNULL V1LayerParameter::_internal_mutable_concat_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.concat_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::ConcatParameter>(GetArena());
    _impl_.concat_param_ = reinterpret_cast<::caffe::ConcatParameter*>(p);
  }
  return _impl_.concat_param_;
}
inline ::caffe::ConcatParameter* PROTOBUF_NONNULL V1LayerParameter::mutable_concat_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000080U);
  ::caffe::ConcatParameter* _msg = _internal_mutable_concat_param();
  // @@protoc_insertion_point(field_mutable:caffe.V1LayerParameter.concat_param)
  return _msg;
}
inline void V1LayerParameter::set_allocated_concat_param(::caffe::ConcatParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.concat_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[0], 0x00000080U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000080U);
  }

  _impl_.concat_param_ = reinterpret_cast<::caffe::ConcatParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.V1LayerParameter.concat_param)
}

// optional .caffe.ContrastiveLossParameter contrastive_loss_param = 40;
inline bool V1LayerParameter::has_contrastive_loss_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[1], 0x00000100U);
  PROTOBUF_ASSUME(!value || _impl_.contrastive_loss_param_ != nullptr);
  return value;
}
inline void V1LayerParameter::clear_contrastive_loss_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.contrastive_loss_param_ != nullptr) _impl_.contrastive_loss_param_->Clear();
  ClearHasBit(_impl_._has_bits_[1], 0x00000100U);
}
inline const ::caffe::ContrastiveLossParameter& V1LayerParameter::_internal_contrastive_loss_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::ContrastiveLossParameter* p = _impl_.contrastive_loss_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::ContrastiveLossParameter>(&::caffe::ContrastiveLossParameter_globals_);
}
inline const ::caffe::ContrastiveLossParameter& V1LayerParameter::contrastive_loss_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.V1LayerParameter.contrastive_loss_param)
  return _internal_contrastive_loss_param();
}
inline void V1LayerParameter::unsafe_arena_set_allocated_contrastive_loss_param(
    ::caffe::ContrastiveLossParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.contrastive_loss_param_);
  }
  _impl_.contrastive_loss_param_ = reinterpret_cast<::caffe::ContrastiveLossParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[1], 0x00000100U);
  } else {
    ClearHasBit(_impl_._has_bits_[1], 0x00000100U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.V1LayerParameter.contrastive_loss_param)
}
inline ::caffe::ContrastiveLossParameter* PROTOBUF_NULLABLE V1LayerParameter::release_contrastive_loss_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[1], 0x00000100U);
  ::caffe::ContrastiveLossParameter* released = _impl_.contrastive_loss_param_;
  _impl_.contrastive_loss_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::ContrastiveLossParameter* PROTOBUF_NULLABLE V1LayerParameter::unsafe_arena_release_contrastive_loss_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.V1LayerParameter.contrastive_loss_param)

  ClearHasBit(_impl_._has_bits_[1], 0x00000100U);
  ::caffe::ContrastiveLossParameter* temp = _impl_.contrastive_loss_param_;
  _impl_.contrastive_loss_param_ = nullptr;
  return temp;
}
inline ::caffe::ContrastiveLossParameter* PROTOBUF_NONNULL V1LayerParameter::_internal_mutable_contrastive_loss_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.contrastive_loss_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::ContrastiveLossParameter>(GetArena());
    _impl_.contrastive_loss_param_ = reinterpret_cast<::caffe::ContrastiveLossParameter*>(p);
  }
  return _impl_.contrastive_loss_param_;
}
inline ::caffe::ContrastiveLossParameter* PROTOBUF_NONNULL V1LayerParameter::mutable_contrastive_loss_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[1], 0x00000100U);
  ::caffe::ContrastiveLossParameter* _msg = _internal_mutable_contrastive_loss_param();
  // @@protoc_insertion_point(field_mutable:caffe.V1LayerParameter.contrastive_loss_param)
  return _msg;
}
inline void V1LayerParameter::set_allocated_contrastive_loss_param(::caffe::ContrastiveLossParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.contrastive_loss_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[1], 0x00000100U);
  } else {
    ClearHasBit(_impl_._has_bits_[1], 0x00000100U);
  }

  _impl_.contrastive_loss_param_ = reinterpret_cast<::caffe::ContrastiveLossParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.V1LayerParameter.contrastive_loss_param)
}

// optional .caffe.ConvolutionParameter convolution_param = 10;
inline bool V1LayerParameter::has_convolution_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000100U);
  PROTOBUF_ASSUME(!value || _impl_.convolution_param_ != nullptr);
  return value;
}
inline void V1LayerParameter::clear_convolution_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.convolution_param_ != nullptr) _impl_.convolution_param_->Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000100U);
}
inline const ::caffe::ConvolutionParameter& V1LayerParameter::_internal_convolution_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::ConvolutionParameter* p = _impl_.convolution_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::ConvolutionParameter>(&::caffe::ConvolutionParameter_globals_);
}
inline const ::caffe::ConvolutionParameter& V1LayerParameter::convolution_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.V1LayerParameter.convolution_param)
  return _internal_convolution_param();
}
inline void V1LayerParameter::unsafe_arena_set_allocated_convolution_param(
    ::caffe::ConvolutionParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.convolution_param_);
  }
  _impl_.convolution_param_ = reinterpret_cast<::caffe::ConvolutionParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000100U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000100U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.V1LayerParameter.convolution_param)
}
inline ::caffe::ConvolutionParameter* PROTOBUF_NULLABLE V1LayerParameter::release_convolution_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[0], 0x00000100U);
  ::caffe::ConvolutionParameter* released = _impl_.convolution_param_;
  _impl_.convolution_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::ConvolutionParameter* PROTOBUF_NULLABLE V1LayerParameter::unsafe_arena_release_convolution_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.V1LayerParameter.convolution_param)

  ClearHasBit(_impl_._has_bits_[0], 0x00000100U);
  ::caffe::ConvolutionParameter* temp = _impl_.convolution_param_;
  _impl_.convolution_param_ = nullptr;
  return temp;
}
inline ::caffe::ConvolutionParameter* PROTOBUF_NONNULL V1LayerParameter::_internal_mutable_convolution_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.convolution_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::ConvolutionParameter>(GetArena());
    _impl_.convolution_param_ = reinterpret_cast<::caffe::ConvolutionParameter*>(p);
  }
  return _impl_.convolution_param_;
}
inline ::caffe::ConvolutionParameter* PROTOBUF_NONNULL V1LayerParameter::mutable_convolution_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000100U);
  ::caffe::ConvolutionParameter* _msg = _internal_mutable_convolution_param();
  // @@protoc_insertion_point(field_mutable:caffe.V1LayerParameter.convolution_param)
  return _msg;
}
inline void V1LayerParameter::set_allocated_convolution_param(::caffe::ConvolutionParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.convolution_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[0], 0x00000100U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000100U);
  }

  _impl_.convolution_param_ = reinterpret_cast<::caffe::ConvolutionParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.V1LayerParameter.convolution_param)
}

// optional .caffe.DataParameter data_param = 11;
inline bool V1LayerParameter::has_data_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000200U);
  PROTOBUF_ASSUME(!value || _impl_.data_param_ != nullptr);
  return value;
}
inline void V1LayerParameter::clear_data_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.data_param_ != nullptr) _impl_.data_param_->Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000200U);
}
inline const ::caffe::DataParameter& V1LayerParameter::_internal_data_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::DataParameter* p = _impl_.data_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::DataParameter>(&::caffe::DataParameter_globals_);
}
inline const ::caffe::DataParameter& V1LayerParameter::data_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.V1LayerParameter.data_param)
  return _internal_data_param();
}
inline void V1LayerParameter::unsafe_arena_set_allocated_data_param(
    ::caffe::DataParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.data_param_);
  }
  _impl_.data_param_ = reinterpret_cast<::caffe::DataParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000200U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000200U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.V1LayerParameter.data_param)
}
inline ::caffe::DataParameter* PROTOBUF_NULLABLE V1LayerParameter::release_data_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[0], 0x00000200U);
  ::caffe::DataParameter* released = _impl_.data_param_;
  _impl_.data_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::DataParameter* PROTOBUF_NULLABLE V1LayerParameter::unsafe_arena_release_data_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.V1LayerParameter.data_param)

  ClearHasBit(_impl_._has_bits_[0], 0x00000200U);
  ::caffe::DataParameter* temp = _impl_.data_param_;
  _impl_.data_param_ = nullptr;
  return temp;
}
inline ::caffe::DataParameter* PROTOBUF_NONNULL V1LayerParameter::_internal_mutable_data_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.data_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::DataParameter>(GetArena());
    _impl_.data_param_ = reinterpret_cast<::caffe::DataParameter*>(p);
  }
  return _impl_.data_param_;
}
inline ::caffe::DataParameter* PROTOBUF_NONNULL V1LayerParameter::mutable_data_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000200U);
  ::caffe::DataParameter* _msg = _internal_mutable_data_param();
  // @@protoc_insertion_point(field_mutable:caffe.V1LayerParameter.data_param)
  return _msg;
}
inline void V1LayerParameter::set_allocated_data_param(::caffe::DataParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.data_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[0], 0x00000200U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000200U);
  }

  _impl_.data_param_ = reinterpret_cast<::caffe::DataParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.V1LayerParameter.data_param)
}

// optional .caffe.DropoutParameter dropout_param = 12;
inline bool V1LayerParameter::has_dropout_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000400U);
  PROTOBUF_ASSUME(!value || _impl_.dropout_param_ != nullptr);
  return value;
}
inline void V1LayerParameter::clear_dropout_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.dropout_param_ != nullptr) _impl_.dropout_param_->Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000400U);
}
inline const ::caffe::DropoutParameter& V1LayerParameter::_internal_dropout_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::DropoutParameter* p = _impl_.dropout_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::DropoutParameter>(&::caffe::DropoutParameter_globals_);
}
inline const ::caffe::DropoutParameter& V1LayerParameter::dropout_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.V1LayerParameter.dropout_param)
  return _internal_dropout_param();
}
inline void V1LayerParameter::unsafe_arena_set_allocated_dropout_param(
    ::caffe::DropoutParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.dropout_param_);
  }
  _impl_.dropout_param_ = reinterpret_cast<::caffe::DropoutParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000400U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000400U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.V1LayerParameter.dropout_param)
}
inline ::caffe::DropoutParameter* PROTOBUF_NULLABLE V1LayerParameter::release_dropout_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[0], 0x00000400U);
  ::caffe::DropoutParameter* released = _impl_.dropout_param_;
  _impl_.dropout_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::DropoutParameter* PROTOBUF_NULLABLE V1LayerParameter::unsafe_arena_release_dropout_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.V1LayerParameter.dropout_param)

  ClearHasBit(_impl_._has_bits_[0], 0x00000400U);
  ::caffe::DropoutParameter* temp = _impl_.dropout_param_;
  _impl_.dropout_param_ = nullptr;
  return temp;
}
inline ::caffe::DropoutParameter* PROTOBUF_NONNULL V1LayerParameter::_internal_mutable_dropout_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.dropout_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::DropoutParameter>(GetArena());
    _impl_.dropout_param_ = reinterpret_cast<::caffe::DropoutParameter*>(p);
  }
  return _impl_.dropout_param_;
}
inline ::caffe::DropoutParameter* PROTOBUF_NONNULL V1LayerParameter::mutable_dropout_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000400U);
  ::caffe::DropoutParameter* _msg = _internal_mutable_dropout_param();
  // @@protoc_insertion_point(field_mutable:caffe.V1LayerParameter.dropout_param)
  return _msg;
}
inline void V1LayerParameter::set_allocated_dropout_param(::caffe::DropoutParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.dropout_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[0], 0x00000400U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000400U);
  }

  _impl_.dropout_param_ = reinterpret_cast<::caffe::DropoutParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.V1LayerParameter.dropout_param)
}

// optional .caffe.DummyDataParameter dummy_data_param = 26;
inline bool V1LayerParameter::has_dummy_data_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x01000000U);
  PROTOBUF_ASSUME(!value || _impl_.dummy_data_param_ != nullptr);
  return value;
}
inline void V1LayerParameter::clear_dummy_data_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.dummy_data_param_ != nullptr) _impl_.dummy_data_param_->Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x01000000U);
}
inline const ::caffe::DummyDataParameter& V1LayerParameter::_internal_dummy_data_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::DummyDataParameter* p = _impl_.dummy_data_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::DummyDataParameter>(&::caffe::DummyDataParameter_globals_);
}
inline const ::caffe::DummyDataParameter& V1LayerParameter::dummy_data_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.V1LayerParameter.dummy_data_param)
  return _internal_dummy_data_param();
}
inline void V1LayerParameter::unsafe_arena_set_allocated_dummy_data_param(
    ::caffe::DummyDataParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.dummy_data_param_);
  }
  _impl_.dummy_data_param_ = reinterpret_cast<::caffe::DummyDataParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x01000000U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x01000000U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.V1LayerParameter.dummy_data_param)
}
inline ::caffe::DummyDataParameter* PROTOBUF_NULLABLE V1LayerParameter::release_dummy_data_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[0], 0x01000000U);
  ::caffe::DummyDataParameter* released = _impl_.dummy_data_param_;
  _impl_.dummy_data_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::DummyDataParameter* PROTOBUF_NULLABLE V1LayerParameter::unsafe_arena_release_dummy_data_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.V1LayerParameter.dummy_data_param)

  ClearHasBit(_impl_._has_bits_[0], 0x01000000U);
  ::caffe::DummyDataParameter* temp = _impl_.dummy_data_param_;
  _impl_.dummy_data_param_ = nullptr;
  return temp;
}
inline ::caffe::DummyDataParameter* PROTOBUF_NONNULL V1LayerParameter::_internal_mutable_dummy_data_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.dummy_data_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::DummyDataParameter>(GetArena());
    _impl_.dummy_data_param_ = reinterpret_cast<::caffe::DummyDataParameter*>(p);
  }
  return _impl_.dummy_data_param_;
}
inline ::caffe::DummyDataParameter* PROTOBUF_NONNULL V1LayerParameter::mutable_dummy_data_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x01000000U);
  ::caffe::DummyDataParameter* _msg = _internal_mutable_dummy_data_param();
  // @@protoc_insertion_point(field_mutable:caffe.V1LayerParameter.dummy_data_param)
  return _msg;
}
inline void V1LayerParameter::set_allocated_dummy_data_param(::caffe::DummyDataParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.dummy_data_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[0], 0x01000000U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x01000000U);
  }

  _impl_.dummy_data_param_ = reinterpret_cast<::caffe::DummyDataParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.V1LayerParameter.dummy_data_param)
}

// optional .caffe.EltwiseParameter eltwise_param = 24;
inline bool V1LayerParameter::has_eltwise_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00400000U);
  PROTOBUF_ASSUME(!value || _impl_.eltwise_param_ != nullptr);
  return value;
}
inline void V1LayerParameter::clear_eltwise_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.eltwise_param_ != nullptr) _impl_.eltwise_param_->Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00400000U);
}
inline const ::caffe::EltwiseParameter& V1LayerParameter::_internal_eltwise_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::EltwiseParameter* p = _impl_.eltwise_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::EltwiseParameter>(&::caffe::EltwiseParameter_globals_);
}
inline const ::caffe::EltwiseParameter& V1LayerParameter::eltwise_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.V1LayerParameter.eltwise_param)
  return _internal_eltwise_param();
}
inline void V1LayerParameter::unsafe_arena_set_allocated_eltwise_param(
    ::caffe::EltwiseParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.eltwise_param_);
  }
  _impl_.eltwise_param_ = reinterpret_cast<::caffe::EltwiseParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00400000U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00400000U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.V1LayerParameter.eltwise_param)
}
inline ::caffe::EltwiseParameter* PROTOBUF_NULLABLE V1LayerParameter::release_eltwise_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[0], 0x00400000U);
  ::caffe::EltwiseParameter* released = _impl_.eltwise_param_;
  _impl_.eltwise_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::EltwiseParameter* PROTOBUF_NULLABLE V1LayerParameter::unsafe_arena_release_eltwise_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.V1LayerParameter.eltwise_param)

  ClearHasBit(_impl_._has_bits_[0], 0x00400000U);
  ::caffe::EltwiseParameter* temp = _impl_.eltwise_param_;
  _impl_.eltwise_param_ = nullptr;
  return temp;
}
inline ::caffe::EltwiseParameter* PROTOBUF_NONNULL V1LayerParameter::_internal_mutable_eltwise_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.eltwise_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::EltwiseParameter>(GetArena());
    _impl_.eltwise_param_ = reinterpret_cast<::caffe::EltwiseParameter*>(p);
  }
  return _impl_.eltwise_param_;
}
inline ::caffe::EltwiseParameter* PROTOBUF_NONNULL V1LayerParameter::mutable_eltwise_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00400000U);
  ::caffe::EltwiseParameter* _msg = _internal_mutable_eltwise_param();
  // @@protoc_insertion_point(field_mutable:caffe.V1LayerParameter.eltwise_param)
  return _msg;
}
inline void V1LayerParameter::set_allocated_eltwise_param(::caffe::EltwiseParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.eltwise_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[0], 0x00400000U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00400000U);
  }

  _impl_.eltwise_param_ = reinterpret_cast<::caffe::EltwiseParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.V1LayerParameter.eltwise_param)
}

// optional .caffe.ExpParameter exp_param = 41;
inline bool V1LayerParameter::has_exp_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[1], 0x00000200U);
  PROTOBUF_ASSUME(!value || _impl_.exp_param_ != nullptr);
  return value;
}
inline void V1LayerParameter::clear_exp_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.exp_param_ != nullptr) _impl_.exp_param_->Clear();
  ClearHasBit(_impl_._has_bits_[1], 0x00000200U);
}
inline const ::caffe::ExpParameter& V1LayerParameter::_internal_exp_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::ExpParameter* p = _impl_.exp_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::ExpParameter>(&::caffe::ExpParameter_globals_);
}
inline const ::caffe::ExpParameter& V1LayerParameter::exp_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.V1LayerParameter.exp_param)
  return _internal_exp_param();
}
inline void V1LayerParameter::unsafe_arena_set_allocated_exp_param(
    ::caffe::ExpParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.exp_param_);
  }
  _impl_.exp_param_ = reinterpret_cast<::caffe::ExpParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[1], 0x00000200U);
  } else {
    ClearHasBit(_impl_._has_bits_[1], 0x00000200U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.V1LayerParameter.exp_param)
}
inline ::caffe::ExpParameter* PROTOBUF_NULLABLE V1LayerParameter::release_exp_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[1], 0x00000200U);
  ::caffe::ExpParameter* released = _impl_.exp_param_;
  _impl_.exp_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::ExpParameter* PROTOBUF_NULLABLE V1LayerParameter::unsafe_arena_release_exp_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.V1LayerParameter.exp_param)

  ClearHasBit(_impl_._has_bits_[1], 0x00000200U);
  ::caffe::ExpParameter* temp = _impl_.exp_param_;
  _impl_.exp_param_ = nullptr;
  return temp;
}
inline ::caffe::ExpParameter* PROTOBUF_NONNULL V1LayerParameter::_internal_mutable_exp_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.exp_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::ExpParameter>(GetArena());
    _impl_.exp_param_ = reinterpret_cast<::caffe::ExpParameter*>(p);
  }
  return _impl_.exp_param_;
}
inline ::caffe::ExpParameter* PROTOBUF_NONNULL V1LayerParameter::mutable_exp_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[1], 0x00000200U);
  ::caffe::ExpParameter* _msg = _internal_mutable_exp_param();
  // @@protoc_insertion_point(field_mutable:caffe.V1LayerParameter.exp_param)
  return _msg;
}
inline void V1LayerParameter::set_allocated_exp_param(::caffe::ExpParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.exp_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[1], 0x00000200U);
  } else {
    ClearHasBit(_impl_._has_bits_[1], 0x00000200U);
  }

  _impl_.exp_param_ = reinterpret_cast<::caffe::ExpParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.V1LayerParameter.exp_param)
}

// optional .caffe.HDF5DataParameter hdf5_data_param = 13;
inline bool V1LayerParameter::has_hdf5_data_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000800U);
  PROTOBUF_ASSUME(!value || _impl_.hdf5_data_param_ != nullptr);
  return value;
}
inline void V1LayerParameter::clear_hdf5_data_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.hdf5_data_param_ != nullptr) _impl_.hdf5_data_param_->Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000800U);
}
inline const ::caffe::HDF5DataParameter& V1LayerParameter::_internal_hdf5_data_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::HDF5DataParameter* p = _impl_.hdf5_data_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::HDF5DataParameter>(&::caffe::HDF5DataParameter_globals_);
}
inline const ::caffe::HDF5DataParameter& V1LayerParameter::hdf5_data_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.V1LayerParameter.hdf5_data_param)
  return _internal_hdf5_data_param();
}
inline void V1LayerParameter::unsafe_arena_set_allocated_hdf5_data_param(
    ::caffe::HDF5DataParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.hdf5_data_param_);
  }
  _impl_.hdf5_data_param_ = reinterpret_cast<::caffe::HDF5DataParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000800U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000800U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.V1LayerParameter.hdf5_data_param)
}
inline ::caffe::HDF5DataParameter* PROTOBUF_NULLABLE V1LayerParameter::release_hdf5_data_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[0], 0x00000800U);
  ::caffe::HDF5DataParameter* released = _impl_.hdf5_data_param_;
  _impl_.hdf5_data_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::HDF5DataParameter* PROTOBUF_NULLABLE V1LayerParameter::unsafe_arena_release_hdf5_data_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.V1LayerParameter.hdf5_data_param)

  ClearHasBit(_impl_._has_bits_[0], 0x00000800U);
  ::caffe::HDF5DataParameter* temp = _impl_.hdf5_data_param_;
  _impl_.hdf5_data_param_ = nullptr;
  return temp;
}
inline ::caffe::HDF5DataParameter* PROTOBUF_NONNULL V1LayerParameter::_internal_mutable_hdf5_data_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.hdf5_data_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::HDF5DataParameter>(GetArena());
    _impl_.hdf5_data_param_ = reinterpret_cast<::caffe::HDF5DataParameter*>(p);
  }
  return _impl_.hdf5_data_param_;
}
inline ::caffe::HDF5DataParameter* PROTOBUF_NONNULL V1LayerParameter::mutable_hdf5_data_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000800U);
  ::caffe::HDF5DataParameter* _msg = _internal_mutable_hdf5_data_param();
  // @@protoc_insertion_point(field_mutable:caffe.V1LayerParameter.hdf5_data_param)
  return _msg;
}
inline void V1LayerParameter::set_allocated_hdf5_data_param(::caffe::HDF5DataParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.hdf5_data_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[0], 0x00000800U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000800U);
  }

  _impl_.hdf5_data_param_ = reinterpret_cast<::caffe::HDF5DataParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.V1LayerParameter.hdf5_data_param)
}

// optional .caffe.HDF5OutputParameter hdf5_output_param = 14;
inline bool V1LayerParameter::has_hdf5_output_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00001000U);
  PROTOBUF_ASSUME(!value || _impl_.hdf5_output_param_ != nullptr);
  return value;
}
inline void V1LayerParameter::clear_hdf5_output_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.hdf5_output_param_ != nullptr) _impl_.hdf5_output_param_->Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00001000U);
}
inline const ::caffe::HDF5OutputParameter& V1LayerParameter::_internal_hdf5_output_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::HDF5OutputParameter* p = _impl_.hdf5_output_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::HDF5OutputParameter>(&::caffe::HDF5OutputParameter_globals_);
}
inline const ::caffe::HDF5OutputParameter& V1LayerParameter::hdf5_output_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.V1LayerParameter.hdf5_output_param)
  return _internal_hdf5_output_param();
}
inline void V1LayerParameter::unsafe_arena_set_allocated_hdf5_output_param(
    ::caffe::HDF5OutputParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.hdf5_output_param_);
  }
  _impl_.hdf5_output_param_ = reinterpret_cast<::caffe::HDF5OutputParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00001000U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00001000U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.V1LayerParameter.hdf5_output_param)
}
inline ::caffe::HDF5OutputParameter* PROTOBUF_NULLABLE V1LayerParameter::release_hdf5_output_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[0], 0x00001000U);
  ::caffe::HDF5OutputParameter* released = _impl_.hdf5_output_param_;
  _impl_.hdf5_output_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::HDF5OutputParameter* PROTOBUF_NULLABLE V1LayerParameter::unsafe_arena_release_hdf5_output_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.V1LayerParameter.hdf5_output_param)

  ClearHasBit(_impl_._has_bits_[0], 0x00001000U);
  ::caffe::HDF5OutputParameter* temp = _impl_.hdf5_output_param_;
  _impl_.hdf5_output_param_ = nullptr;
  return temp;
}
inline ::caffe::HDF5OutputParameter* PROTOBUF_NONNULL V1LayerParameter::_internal_mutable_hdf5_output_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.hdf5_output_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::HDF5OutputParameter>(GetArena());
    _impl_.hdf5_output_param_ = reinterpret_cast<::caffe::HDF5OutputParameter*>(p);
  }
  return _impl_.hdf5_output_param_;
}
inline ::caffe::HDF5OutputParameter* PROTOBUF_NONNULL V1LayerParameter::mutable_hdf5_output_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00001000U);
  ::caffe::HDF5OutputParameter* _msg = _internal_mutable_hdf5_output_param();
  // @@protoc_insertion_point(field_mutable:caffe.V1LayerParameter.hdf5_output_param)
  return _msg;
}
inline void V1LayerParameter::set_allocated_hdf5_output_param(::caffe::HDF5OutputParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.hdf5_output_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[0], 0x00001000U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00001000U);
  }

  _impl_.hdf5_output_param_ = reinterpret_cast<::caffe::HDF5OutputParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.V1LayerParameter.hdf5_output_param)
}

// optional .caffe.HingeLossParameter hinge_loss_param = 29;
inline bool V1LayerParameter::has_hinge_loss_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x04000000U);
  PROTOBUF_ASSUME(!value || _impl_.hinge_loss_param_ != nullptr);
  return value;
}
inline void V1LayerParameter::clear_hinge_loss_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.hinge_loss_param_ != nullptr) _impl_.hinge_loss_param_->Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x04000000U);
}
inline const ::caffe::HingeLossParameter& V1LayerParameter::_internal_hinge_loss_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::HingeLossParameter* p = _impl_.hinge_loss_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::HingeLossParameter>(&::caffe::HingeLossParameter_globals_);
}
inline const ::caffe::HingeLossParameter& V1LayerParameter::hinge_loss_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.V1LayerParameter.hinge_loss_param)
  return _internal_hinge_loss_param();
}
inline void V1LayerParameter::unsafe_arena_set_allocated_hinge_loss_param(
    ::caffe::HingeLossParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.hinge_loss_param_);
  }
  _impl_.hinge_loss_param_ = reinterpret_cast<::caffe::HingeLossParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x04000000U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x04000000U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.V1LayerParameter.hinge_loss_param)
}
inline ::caffe::HingeLossParameter* PROTOBUF_NULLABLE V1LayerParameter::release_hinge_loss_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[0], 0x04000000U);
  ::caffe::HingeLossParameter* released = _impl_.hinge_loss_param_;
  _impl_.hinge_loss_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::HingeLossParameter* PROTOBUF_NULLABLE V1LayerParameter::unsafe_arena_release_hinge_loss_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.V1LayerParameter.hinge_loss_param)

  ClearHasBit(_impl_._has_bits_[0], 0x04000000U);
  ::caffe::HingeLossParameter* temp = _impl_.hinge_loss_param_;
  _impl_.hinge_loss_param_ = nullptr;
  return temp;
}
inline ::caffe::HingeLossParameter* PROTOBUF_NONNULL V1LayerParameter::_internal_mutable_hinge_loss_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.hinge_loss_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::HingeLossParameter>(GetArena());
    _impl_.hinge_loss_param_ = reinterpret_cast<::caffe::HingeLossParameter*>(p);
  }
  return _impl_.hinge_loss_param_;
}
inline ::caffe::HingeLossParameter* PROTOBUF_NONNULL V1LayerParameter::mutable_hinge_loss_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x04000000U);
  ::caffe::HingeLossParameter* _msg = _internal_mutable_hinge_loss_param();
  // @@protoc_insertion_point(field_mutable:caffe.V1LayerParameter.hinge_loss_param)
  return _msg;
}
inline void V1LayerParameter::set_allocated_hinge_loss_param(::caffe::HingeLossParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.hinge_loss_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[0], 0x04000000U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x04000000U);
  }

  _impl_.hinge_loss_param_ = reinterpret_cast<::caffe::HingeLossParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.V1LayerParameter.hinge_loss_param)
}

// optional .caffe.ImageDataParameter image_data_param = 15;
inline bool V1LayerParameter::has_image_data_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00002000U);
  PROTOBUF_ASSUME(!value || _impl_.image_data_param_ != nullptr);
  return value;
}
inline void V1LayerParameter::clear_image_data_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.image_data_param_ != nullptr) _impl_.image_data_param_->Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00002000U);
}
inline const ::caffe::ImageDataParameter& V1LayerParameter::_internal_image_data_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::ImageDataParameter* p = _impl_.image_data_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::ImageDataParameter>(&::caffe::ImageDataParameter_globals_);
}
inline const ::caffe::ImageDataParameter& V1LayerParameter::image_data_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.V1LayerParameter.image_data_param)
  return _internal_image_data_param();
}
inline void V1LayerParameter::unsafe_arena_set_allocated_image_data_param(
    ::caffe::ImageDataParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.image_data_param_);
  }
  _impl_.image_data_param_ = reinterpret_cast<::caffe::ImageDataParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00002000U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00002000U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.V1LayerParameter.image_data_param)
}
inline ::caffe::ImageDataParameter* PROTOBUF_NULLABLE V1LayerParameter::release_image_data_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[0], 0x00002000U);
  ::caffe::ImageDataParameter* released = _impl_.image_data_param_;
  _impl_.image_data_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::ImageDataParameter* PROTOBUF_NULLABLE V1LayerParameter::unsafe_arena_release_image_data_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.V1LayerParameter.image_data_param)

  ClearHasBit(_impl_._has_bits_[0], 0x00002000U);
  ::caffe::ImageDataParameter* temp = _impl_.image_data_param_;
  _impl_.image_data_param_ = nullptr;
  return temp;
}
inline ::caffe::ImageDataParameter* PROTOBUF_NONNULL V1LayerParameter::_internal_mutable_image_data_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.image_data_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::ImageDataParameter>(GetArena());
    _impl_.image_data_param_ = reinterpret_cast<::caffe::ImageDataParameter*>(p);
  }
  return _impl_.image_data_param_;
}
inline ::caffe::ImageDataParameter* PROTOBUF_NONNULL V1LayerParameter::mutable_image_data_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00002000U);
  ::caffe::ImageDataParameter* _msg = _internal_mutable_image_data_param();
  // @@protoc_insertion_point(field_mutable:caffe.V1LayerParameter.image_data_param)
  return _msg;
}
inline void V1LayerParameter::set_allocated_image_data_param(::caffe::ImageDataParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.image_data_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[0], 0x00002000U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00002000U);
  }

  _impl_.image_data_param_ = reinterpret_cast<::caffe::ImageDataParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.V1LayerParameter.image_data_param)
}

// optional .caffe.InfogainLossParameter infogain_loss_param = 16;
inline bool V1LayerParameter::has_infogain_loss_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00004000U);
  PROTOBUF_ASSUME(!value || _impl_.infogain_loss_param_ != nullptr);
  return value;
}
inline void V1LayerParameter::clear_infogain_loss_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.infogain_loss_param_ != nullptr) _impl_.infogain_loss_param_->Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00004000U);
}
inline const ::caffe::InfogainLossParameter& V1LayerParameter::_internal_infogain_loss_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::InfogainLossParameter* p = _impl_.infogain_loss_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::InfogainLossParameter>(&::caffe::InfogainLossParameter_globals_);
}
inline const ::caffe::InfogainLossParameter& V1LayerParameter::infogain_loss_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.V1LayerParameter.infogain_loss_param)
  return _internal_infogain_loss_param();
}
inline void V1LayerParameter::unsafe_arena_set_allocated_infogain_loss_param(
    ::caffe::InfogainLossParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.infogain_loss_param_);
  }
  _impl_.infogain_loss_param_ = reinterpret_cast<::caffe::InfogainLossParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00004000U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00004000U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.V1LayerParameter.infogain_loss_param)
}
inline ::caffe::InfogainLossParameter* PROTOBUF_NULLABLE V1LayerParameter::release_infogain_loss_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[0], 0x00004000U);
  ::caffe::InfogainLossParameter* released = _impl_.infogain_loss_param_;
  _impl_.infogain_loss_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::InfogainLossParameter* PROTOBUF_NULLABLE V1LayerParameter::unsafe_arena_release_infogain_loss_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.V1LayerParameter.infogain_loss_param)

  ClearHasBit(_impl_._has_bits_[0], 0x00004000U);
  ::caffe::InfogainLossParameter* temp = _impl_.infogain_loss_param_;
  _impl_.infogain_loss_param_ = nullptr;
  return temp;
}
inline ::caffe::InfogainLossParameter* PROTOBUF_NONNULL V1LayerParameter::_internal_mutable_infogain_loss_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.infogain_loss_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::InfogainLossParameter>(GetArena());
    _impl_.infogain_loss_param_ = reinterpret_cast<::caffe::InfogainLossParameter*>(p);
  }
  return _impl_.infogain_loss_param_;
}
inline ::caffe::InfogainLossParameter* PROTOBUF_NONNULL V1LayerParameter::mutable_infogain_loss_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00004000U);
  ::caffe::InfogainLossParameter* _msg = _internal_mutable_infogain_loss_param();
  // @@protoc_insertion_point(field_mutable:caffe.V1LayerParameter.infogain_loss_param)
  return _msg;
}
inline void V1LayerParameter::set_allocated_infogain_loss_param(::caffe::InfogainLossParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.infogain_loss_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[0], 0x00004000U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00004000U);
  }

  _impl_.infogain_loss_param_ = reinterpret_cast<::caffe::InfogainLossParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.V1LayerParameter.infogain_loss_param)
}

// optional .caffe.InnerProductParameter inner_product_param = 17;
inline bool V1LayerParameter::has_inner_product_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00008000U);
  PROTOBUF_ASSUME(!value || _impl_.inner_product_param_ != nullptr);
  return value;
}
inline void V1LayerParameter::clear_inner_product_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.inner_product_param_ != nullptr) _impl_.inner_product_param_->Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00008000U);
}
inline const ::caffe::InnerProductParameter& V1LayerParameter::_internal_inner_product_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::InnerProductParameter* p = _impl_.inner_product_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::InnerProductParameter>(&::caffe::InnerProductParameter_globals_);
}
inline const ::caffe::InnerProductParameter& V1LayerParameter::inner_product_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.V1LayerParameter.inner_product_param)
  return _internal_inner_product_param();
}
inline void V1LayerParameter::unsafe_arena_set_allocated_inner_product_param(
    ::caffe::InnerProductParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.inner_product_param_);
  }
  _impl_.inner_product_param_ = reinterpret_cast<::caffe::InnerProductParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00008000U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00008000U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.V1LayerParameter.inner_product_param)
}
inline ::caffe::InnerProductParameter* PROTOBUF_NULLABLE V1LayerParameter::release_inner_product_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[0], 0x00008000U);
  ::caffe::InnerProductParameter* released = _impl_.inner_product_param_;
  _impl_.inner_product_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::InnerProductParameter* PROTOBUF_NULLABLE V1LayerParameter::unsafe_arena_release_inner_product_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.V1LayerParameter.inner_product_param)

  ClearHasBit(_impl_._has_bits_[0], 0x00008000U);
  ::caffe::InnerProductParameter* temp = _impl_.inner_product_param_;
  _impl_.inner_product_param_ = nullptr;
  return temp;
}
inline ::caffe::InnerProductParameter* PROTOBUF_NONNULL V1LayerParameter::_internal_mutable_inner_product_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.inner_product_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::InnerProductParameter>(GetArena());
    _impl_.inner_product_param_ = reinterpret_cast<::caffe::InnerProductParameter*>(p);
  }
  return _impl_.inner_product_param_;
}
inline ::caffe::InnerProductParameter* PROTOBUF_NONNULL V1LayerParameter::mutable_inner_product_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00008000U);
  ::caffe::InnerProductParameter* _msg = _internal_mutable_inner_product_param();
  // @@protoc_insertion_point(field_mutable:caffe.V1LayerParameter.inner_product_param)
  return _msg;
}
inline void V1LayerParameter::set_allocated_inner_product_param(::caffe::InnerProductParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.inner_product_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[0], 0x00008000U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00008000U);
  }

  _impl_.inner_product_param_ = reinterpret_cast<::caffe::InnerProductParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.V1LayerParameter.inner_product_param)
}

// optional .caffe.LRNParameter lrn_param = 18;
inline bool V1LayerParameter::has_lrn_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00010000U);
  PROTOBUF_ASSUME(!value || _impl_.lrn_param_ != nullptr);
  return value;
}
inline void V1LayerParameter::clear_lrn_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.lrn_param_ != nullptr) _impl_.lrn_param_->Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00010000U);
}
inline const ::caffe::LRNParameter& V1LayerParameter::_internal_lrn_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::LRNParameter* p = _impl_.lrn_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::LRNParameter>(&::caffe::LRNParameter_globals_);
}
inline const ::caffe::LRNParameter& V1LayerParameter::lrn_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.V1LayerParameter.lrn_param)
  return _internal_lrn_param();
}
inline void V1LayerParameter::unsafe_arena_set_allocated_lrn_param(
    ::caffe::LRNParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.lrn_param_);
  }
  _impl_.lrn_param_ = reinterpret_cast<::caffe::LRNParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00010000U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00010000U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.V1LayerParameter.lrn_param)
}
inline ::caffe::LRNParameter* PROTOBUF_NULLABLE V1LayerParameter::release_lrn_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[0], 0x00010000U);
  ::caffe::LRNParameter* released = _impl_.lrn_param_;
  _impl_.lrn_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::LRNParameter* PROTOBUF_NULLABLE V1LayerParameter::unsafe_arena_release_lrn_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.V1LayerParameter.lrn_param)

  ClearHasBit(_impl_._has_bits_[0], 0x00010000U);
  ::caffe::LRNParameter* temp = _impl_.lrn_param_;
  _impl_.lrn_param_ = nullptr;
  return temp;
}
inline ::caffe::LRNParameter* PROTOBUF_NONNULL V1LayerParameter::_internal_mutable_lrn_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.lrn_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::LRNParameter>(GetArena());
    _impl_.lrn_param_ = reinterpret_cast<::caffe::LRNParameter*>(p);
  }
  return _impl_.lrn_param_;
}
inline ::caffe::LRNParameter* PROTOBUF_NONNULL V1LayerParameter::mutable_lrn_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00010000U);
  ::caffe::LRNParameter* _msg = _internal_mutable_lrn_param();
  // @@protoc_insertion_point(field_mutable:caffe.V1LayerParameter.lrn_param)
  return _msg;
}
inline void V1LayerParameter::set_allocated_lrn_param(::caffe::LRNParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.lrn_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[0], 0x00010000U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00010000U);
  }

  _impl_.lrn_param_ = reinterpret_cast<::caffe::LRNParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.V1LayerParameter.lrn_param)
}

// optional .caffe.MemoryDataParameter memory_data_param = 22;
inline bool V1LayerParameter::has_memory_data_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00100000U);
  PROTOBUF_ASSUME(!value || _impl_.memory_data_param_ != nullptr);
  return value;
}
inline void V1LayerParameter::clear_memory_data_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.memory_data_param_ != nullptr) _impl_.memory_data_param_->Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00100000U);
}
inline const ::caffe::MemoryDataParameter& V1LayerParameter::_internal_memory_data_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::MemoryDataParameter* p = _impl_.memory_data_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::MemoryDataParameter>(&::caffe::MemoryDataParameter_globals_);
}
inline const ::caffe::MemoryDataParameter& V1LayerParameter::memory_data_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.V1LayerParameter.memory_data_param)
  return _internal_memory_data_param();
}
inline void V1LayerParameter::unsafe_arena_set_allocated_memory_data_param(
    ::caffe::MemoryDataParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.memory_data_param_);
  }
  _impl_.memory_data_param_ = reinterpret_cast<::caffe::MemoryDataParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00100000U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00100000U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.V1LayerParameter.memory_data_param)
}
inline ::caffe::MemoryDataParameter* PROTOBUF_NULLABLE V1LayerParameter::release_memory_data_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[0], 0x00100000U);
  ::caffe::MemoryDataParameter* released = _impl_.memory_data_param_;
  _impl_.memory_data_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::MemoryDataParameter* PROTOBUF_NULLABLE V1LayerParameter::unsafe_arena_release_memory_data_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.V1LayerParameter.memory_data_param)

  ClearHasBit(_impl_._has_bits_[0], 0x00100000U);
  ::caffe::MemoryDataParameter* temp = _impl_.memory_data_param_;
  _impl_.memory_data_param_ = nullptr;
  return temp;
}
inline ::caffe::MemoryDataParameter* PROTOBUF_NONNULL V1LayerParameter::_internal_mutable_memory_data_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.memory_data_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::MemoryDataParameter>(GetArena());
    _impl_.memory_data_param_ = reinterpret_cast<::caffe::MemoryDataParameter*>(p);
  }
  return _impl_.memory_data_param_;
}
inline ::caffe::MemoryDataParameter* PROTOBUF_NONNULL V1LayerParameter::mutable_memory_data_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00100000U);
  ::caffe::MemoryDataParameter* _msg = _internal_mutable_memory_data_param();
  // @@protoc_insertion_point(field_mutable:caffe.V1LayerParameter.memory_data_param)
  return _msg;
}
inline void V1LayerParameter::set_allocated_memory_data_param(::caffe::MemoryDataParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.memory_data_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[0], 0x00100000U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00100000U);
  }

  _impl_.memory_data_param_ = reinterpret_cast<::caffe::MemoryDataParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.V1LayerParameter.memory_data_param)
}

// optional .caffe.MVNParameter mvn_param = 34;
inline bool V1LayerParameter::has_mvn_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[1], 0x00000008U);
  PROTOBUF_ASSUME(!value || _impl_.mvn_param_ != nullptr);
  return value;
}
inline void V1LayerParameter::clear_mvn_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.mvn_param_ != nullptr) _impl_.mvn_param_->Clear();
  ClearHasBit(_impl_._has_bits_[1], 0x00000008U);
}
inline const ::caffe::MVNParameter& V1LayerParameter::_internal_mvn_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::MVNParameter* p = _impl_.mvn_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::MVNParameter>(&::caffe::MVNParameter_globals_);
}
inline const ::caffe::MVNParameter& V1LayerParameter::mvn_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.V1LayerParameter.mvn_param)
  return _internal_mvn_param();
}
inline void V1LayerParameter::unsafe_arena_set_allocated_mvn_param(
    ::caffe::MVNParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.mvn_param_);
  }
  _impl_.mvn_param_ = reinterpret_cast<::caffe::MVNParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[1], 0x00000008U);
  } else {
    ClearHasBit(_impl_._has_bits_[1], 0x00000008U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.V1LayerParameter.mvn_param)
}
inline ::caffe::MVNParameter* PROTOBUF_NULLABLE V1LayerParameter::release_mvn_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[1], 0x00000008U);
  ::caffe::MVNParameter* released = _impl_.mvn_param_;
  _impl_.mvn_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::MVNParameter* PROTOBUF_NULLABLE V1LayerParameter::unsafe_arena_release_mvn_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.V1LayerParameter.mvn_param)

  ClearHasBit(_impl_._has_bits_[1], 0x00000008U);
  ::caffe::MVNParameter* temp = _impl_.mvn_param_;
  _impl_.mvn_param_ = nullptr;
  return temp;
}
inline ::caffe::MVNParameter* PROTOBUF_NONNULL V1LayerParameter::_internal_mutable_mvn_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.mvn_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::MVNParameter>(GetArena());
    _impl_.mvn_param_ = reinterpret_cast<::caffe::MVNParameter*>(p);
  }
  return _impl_.mvn_param_;
}
inline ::caffe::MVNParameter* PROTOBUF_NONNULL V1LayerParameter::mutable_mvn_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[1], 0x00000008U);
  ::caffe::MVNParameter* _msg = _internal_mutable_mvn_param();
  // @@protoc_insertion_point(field_mutable:caffe.V1LayerParameter.mvn_param)
  return _msg;
}
inline void V1LayerParameter::set_allocated_mvn_param(::caffe::MVNParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.mvn_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[1], 0x00000008U);
  } else {
    ClearHasBit(_impl_._has_bits_[1], 0x00000008U);
  }

  _impl_.mvn_param_ = reinterpret_cast<::caffe::MVNParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.V1LayerParameter.mvn_param)
}

// optional .caffe.PoolingParameter pooling_param = 19;
inline bool V1LayerParameter::has_pooling_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00020000U);
  PROTOBUF_ASSUME(!value || _impl_.pooling_param_ != nullptr);
  return value;
}
inline void V1LayerParameter::clear_pooling_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.pooling_param_ != nullptr) _impl_.pooling_param_->Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00020000U);
}
inline const ::caffe::PoolingParameter& V1LayerParameter::_internal_pooling_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::PoolingParameter* p = _impl_.pooling_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::PoolingParameter>(&::caffe::PoolingParameter_globals_);
}
inline const ::caffe::PoolingParameter& V1LayerParameter::pooling_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.V1LayerParameter.pooling_param)
  return _internal_pooling_param();
}
inline void V1LayerParameter::unsafe_arena_set_allocated_pooling_param(
    ::caffe::PoolingParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.pooling_param_);
  }
  _impl_.pooling_param_ = reinterpret_cast<::caffe::PoolingParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00020000U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00020000U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.V1LayerParameter.pooling_param)
}
inline ::caffe::PoolingParameter* PROTOBUF_NULLABLE V1LayerParameter::release_pooling_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[0], 0x00020000U);
  ::caffe::PoolingParameter* released = _impl_.pooling_param_;
  _impl_.pooling_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::PoolingParameter* PROTOBUF_NULLABLE V1LayerParameter::unsafe_arena_release_pooling_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.V1LayerParameter.pooling_param)

  ClearHasBit(_impl_._has_bits_[0], 0x00020000U);
  ::caffe::PoolingParameter* temp = _impl_.pooling_param_;
  _impl_.pooling_param_ = nullptr;
  return temp;
}
inline ::caffe::PoolingParameter* PROTOBUF_NONNULL V1LayerParameter::_internal_mutable_pooling_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.pooling_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::PoolingParameter>(GetArena());
    _impl_.pooling_param_ = reinterpret_cast<::caffe::PoolingParameter*>(p);
  }
  return _impl_.pooling_param_;
}
inline ::caffe::PoolingParameter* PROTOBUF_NONNULL V1LayerParameter::mutable_pooling_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00020000U);
  ::caffe::PoolingParameter* _msg = _internal_mutable_pooling_param();
  // @@protoc_insertion_point(field_mutable:caffe.V1LayerParameter.pooling_param)
  return _msg;
}
inline void V1LayerParameter::set_allocated_pooling_param(::caffe::PoolingParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.pooling_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[0], 0x00020000U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00020000U);
  }

  _impl_.pooling_param_ = reinterpret_cast<::caffe::PoolingParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.V1LayerParameter.pooling_param)
}

// optional .caffe.PowerParameter power_param = 21;
inline bool V1LayerParameter::has_power_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00080000U);
  PROTOBUF_ASSUME(!value || _impl_.power_param_ != nullptr);
  return value;
}
inline void V1LayerParameter::clear_power_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.power_param_ != nullptr) _impl_.power_param_->Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00080000U);
}
inline const ::caffe::PowerParameter& V1LayerParameter::_internal_power_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::PowerParameter* p = _impl_.power_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::PowerParameter>(&::caffe::PowerParameter_globals_);
}
inline const ::caffe::PowerParameter& V1LayerParameter::power_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.V1LayerParameter.power_param)
  return _internal_power_param();
}
inline void V1LayerParameter::unsafe_arena_set_allocated_power_param(
    ::caffe::PowerParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.power_param_);
  }
  _impl_.power_param_ = reinterpret_cast<::caffe::PowerParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00080000U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00080000U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.V1LayerParameter.power_param)
}
inline ::caffe::PowerParameter* PROTOBUF_NULLABLE V1LayerParameter::release_power_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[0], 0x00080000U);
  ::caffe::PowerParameter* released = _impl_.power_param_;
  _impl_.power_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::PowerParameter* PROTOBUF_NULLABLE V1LayerParameter::unsafe_arena_release_power_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.V1LayerParameter.power_param)

  ClearHasBit(_impl_._has_bits_[0], 0x00080000U);
  ::caffe::PowerParameter* temp = _impl_.power_param_;
  _impl_.power_param_ = nullptr;
  return temp;
}
inline ::caffe::PowerParameter* PROTOBUF_NONNULL V1LayerParameter::_internal_mutable_power_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.power_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::PowerParameter>(GetArena());
    _impl_.power_param_ = reinterpret_cast<::caffe::PowerParameter*>(p);
  }
  return _impl_.power_param_;
}
inline ::caffe::PowerParameter* PROTOBUF_NONNULL V1LayerParameter::mutable_power_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00080000U);
  ::caffe::PowerParameter* _msg = _internal_mutable_power_param();
  // @@protoc_insertion_point(field_mutable:caffe.V1LayerParameter.power_param)
  return _msg;
}
inline void V1LayerParameter::set_allocated_power_param(::caffe::PowerParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.power_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[0], 0x00080000U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00080000U);
  }

  _impl_.power_param_ = reinterpret_cast<::caffe::PowerParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.V1LayerParameter.power_param)
}

// optional .caffe.ReLUParameter relu_param = 30;
inline bool V1LayerParameter::has_relu_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x08000000U);
  PROTOBUF_ASSUME(!value || _impl_.relu_param_ != nullptr);
  return value;
}
inline void V1LayerParameter::clear_relu_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.relu_param_ != nullptr) _impl_.relu_param_->Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x08000000U);
}
inline const ::caffe::ReLUParameter& V1LayerParameter::_internal_relu_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::ReLUParameter* p = _impl_.relu_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::ReLUParameter>(&::caffe::ReLUParameter_globals_);
}
inline const ::caffe::ReLUParameter& V1LayerParameter::relu_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.V1LayerParameter.relu_param)
  return _internal_relu_param();
}
inline void V1LayerParameter::unsafe_arena_set_allocated_relu_param(
    ::caffe::ReLUParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.relu_param_);
  }
  _impl_.relu_param_ = reinterpret_cast<::caffe::ReLUParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x08000000U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x08000000U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.V1LayerParameter.relu_param)
}
inline ::caffe::ReLUParameter* PROTOBUF_NULLABLE V1LayerParameter::release_relu_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[0], 0x08000000U);
  ::caffe::ReLUParameter* released = _impl_.relu_param_;
  _impl_.relu_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::ReLUParameter* PROTOBUF_NULLABLE V1LayerParameter::unsafe_arena_release_relu_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.V1LayerParameter.relu_param)

  ClearHasBit(_impl_._has_bits_[0], 0x08000000U);
  ::caffe::ReLUParameter* temp = _impl_.relu_param_;
  _impl_.relu_param_ = nullptr;
  return temp;
}
inline ::caffe::ReLUParameter* PROTOBUF_NONNULL V1LayerParameter::_internal_mutable_relu_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.relu_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::ReLUParameter>(GetArena());
    _impl_.relu_param_ = reinterpret_cast<::caffe::ReLUParameter*>(p);
  }
  return _impl_.relu_param_;
}
inline ::caffe::ReLUParameter* PROTOBUF_NONNULL V1LayerParameter::mutable_relu_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x08000000U);
  ::caffe::ReLUParameter* _msg = _internal_mutable_relu_param();
  // @@protoc_insertion_point(field_mutable:caffe.V1LayerParameter.relu_param)
  return _msg;
}
inline void V1LayerParameter::set_allocated_relu_param(::caffe::ReLUParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.relu_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[0], 0x08000000U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x08000000U);
  }

  _impl_.relu_param_ = reinterpret_cast<::caffe::ReLUParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.V1LayerParameter.relu_param)
}

// optional .caffe.SigmoidParameter sigmoid_param = 38;
inline bool V1LayerParameter::has_sigmoid_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[1], 0x00000040U);
  PROTOBUF_ASSUME(!value || _impl_.sigmoid_param_ != nullptr);
  return value;
}
inline void V1LayerParameter::clear_sigmoid_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.sigmoid_param_ != nullptr) _impl_.sigmoid_param_->Clear();
  ClearHasBit(_impl_._has_bits_[1], 0x00000040U);
}
inline const ::caffe::SigmoidParameter& V1LayerParameter::_internal_sigmoid_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::SigmoidParameter* p = _impl_.sigmoid_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::SigmoidParameter>(&::caffe::SigmoidParameter_globals_);
}
inline const ::caffe::SigmoidParameter& V1LayerParameter::sigmoid_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.V1LayerParameter.sigmoid_param)
  return _internal_sigmoid_param();
}
inline void V1LayerParameter::unsafe_arena_set_allocated_sigmoid_param(
    ::caffe::SigmoidParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.sigmoid_param_);
  }
  _impl_.sigmoid_param_ = reinterpret_cast<::caffe::SigmoidParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[1], 0x00000040U);
  } else {
    ClearHasBit(_impl_._has_bits_[1], 0x00000040U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.V1LayerParameter.sigmoid_param)
}
inline ::caffe::SigmoidParameter* PROTOBUF_NULLABLE V1LayerParameter::release_sigmoid_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[1], 0x00000040U);
  ::caffe::SigmoidParameter* released = _impl_.sigmoid_param_;
  _impl_.sigmoid_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::SigmoidParameter* PROTOBUF_NULLABLE V1LayerParameter::unsafe_arena_release_sigmoid_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.V1LayerParameter.sigmoid_param)

  ClearHasBit(_impl_._has_bits_[1], 0x00000040U);
  ::caffe::SigmoidParameter* temp = _impl_.sigmoid_param_;
  _impl_.sigmoid_param_ = nullptr;
  return temp;
}
inline ::caffe::SigmoidParameter* PROTOBUF_NONNULL V1LayerParameter::_internal_mutable_sigmoid_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.sigmoid_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::SigmoidParameter>(GetArena());
    _impl_.sigmoid_param_ = reinterpret_cast<::caffe::SigmoidParameter*>(p);
  }
  return _impl_.sigmoid_param_;
}
inline ::caffe::SigmoidParameter* PROTOBUF_NONNULL V1LayerParameter::mutable_sigmoid_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[1], 0x00000040U);
  ::caffe::SigmoidParameter* _msg = _internal_mutable_sigmoid_param();
  // @@protoc_insertion_point(field_mutable:caffe.V1LayerParameter.sigmoid_param)
  return _msg;
}
inline void V1LayerParameter::set_allocated_sigmoid_param(::caffe::SigmoidParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.sigmoid_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[1], 0x00000040U);
  } else {
    ClearHasBit(_impl_._has_bits_[1], 0x00000040U);
  }

  _impl_.sigmoid_param_ = reinterpret_cast<::caffe::SigmoidParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.V1LayerParameter.sigmoid_param)
}

// optional .caffe.SoftmaxParameter softmax_param = 39;
inline bool V1LayerParameter::has_softmax_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[1], 0x00000080U);
  PROTOBUF_ASSUME(!value || _impl_.softmax_param_ != nullptr);
  return value;
}
inline void V1LayerParameter::clear_softmax_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.softmax_param_ != nullptr) _impl_.softmax_param_->Clear();
  ClearHasBit(_impl_._has_bits_[1], 0x00000080U);
}
inline const ::caffe::SoftmaxParameter& V1LayerParameter::_internal_softmax_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::SoftmaxParameter* p = _impl_.softmax_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::SoftmaxParameter>(&::caffe::SoftmaxParameter_globals_);
}
inline const ::caffe::SoftmaxParameter& V1LayerParameter::softmax_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.V1LayerParameter.softmax_param)
  return _internal_softmax_param();
}
inline void V1LayerParameter::unsafe_arena_set_allocated_softmax_param(
    ::caffe::SoftmaxParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.softmax_param_);
  }
  _impl_.softmax_param_ = reinterpret_cast<::caffe::SoftmaxParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[1], 0x00000080U);
  } else {
    ClearHasBit(_impl_._has_bits_[1], 0x00000080U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.V1LayerParameter.softmax_param)
}
inline ::caffe::SoftmaxParameter* PROTOBUF_NULLABLE V1LayerParameter::release_softmax_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[1], 0x00000080U);
  ::caffe::SoftmaxParameter* released = _impl_.softmax_param_;
  _impl_.softmax_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::SoftmaxParameter* PROTOBUF_NULLABLE V1LayerParameter::unsafe_arena_release_softmax_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.V1LayerParameter.softmax_param)

  ClearHasBit(_impl_._has_bits_[1], 0x00000080U);
  ::caffe::SoftmaxParameter* temp = _impl_.softmax_param_;
  _impl_.softmax_param_ = nullptr;
  return temp;
}
inline ::caffe::SoftmaxParameter* PROTOBUF_NONNULL V1LayerParameter::_internal_mutable_softmax_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.softmax_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::SoftmaxParameter>(GetArena());
    _impl_.softmax_param_ = reinterpret_cast<::caffe::SoftmaxParameter*>(p);
  }
  return _impl_.softmax_param_;
}
inline ::caffe::SoftmaxParameter* PROTOBUF_NONNULL V1LayerParameter::mutable_softmax_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[1], 0x00000080U);
  ::caffe::SoftmaxParameter* _msg = _internal_mutable_softmax_param();
  // @@protoc_insertion_point(field_mutable:caffe.V1LayerParameter.softmax_param)
  return _msg;
}
inline void V1LayerParameter::set_allocated_softmax_param(::caffe::SoftmaxParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.softmax_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[1], 0x00000080U);
  } else {
    ClearHasBit(_impl_._has_bits_[1], 0x00000080U);
  }

  _impl_.softmax_param_ = reinterpret_cast<::caffe::SoftmaxParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.V1LayerParameter.softmax_param)
}

// optional .caffe.SliceParameter slice_param = 31;
inline bool V1LayerParameter::has_slice_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x10000000U);
  PROTOBUF_ASSUME(!value || _impl_.slice_param_ != nullptr);
  return value;
}
inline void V1LayerParameter::clear_slice_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.slice_param_ != nullptr) _impl_.slice_param_->Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x10000000U);
}
inline const ::caffe::SliceParameter& V1LayerParameter::_internal_slice_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::SliceParameter* p = _impl_.slice_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::SliceParameter>(&::caffe::SliceParameter_globals_);
}
inline const ::caffe::SliceParameter& V1LayerParameter::slice_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.V1LayerParameter.slice_param)
  return _internal_slice_param();
}
inline void V1LayerParameter::unsafe_arena_set_allocated_slice_param(
    ::caffe::SliceParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.slice_param_);
  }
  _impl_.slice_param_ = reinterpret_cast<::caffe::SliceParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x10000000U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x10000000U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.V1LayerParameter.slice_param)
}
inline ::caffe::SliceParameter* PROTOBUF_NULLABLE V1LayerParameter::release_slice_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[0], 0x10000000U);
  ::caffe::SliceParameter* released = _impl_.slice_param_;
  _impl_.slice_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::SliceParameter* PROTOBUF_NULLABLE V1LayerParameter::unsafe_arena_release_slice_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.V1LayerParameter.slice_param)

  ClearHasBit(_impl_._has_bits_[0], 0x10000000U);
  ::caffe::SliceParameter* temp = _impl_.slice_param_;
  _impl_.slice_param_ = nullptr;
  return temp;
}
inline ::caffe::SliceParameter* PROTOBUF_NONNULL V1LayerParameter::_internal_mutable_slice_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.slice_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::SliceParameter>(GetArena());
    _impl_.slice_param_ = reinterpret_cast<::caffe::SliceParameter*>(p);
  }
  return _impl_.slice_param_;
}
inline ::caffe::SliceParameter* PROTOBUF_NONNULL V1LayerParameter::mutable_slice_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x10000000U);
  ::caffe::SliceParameter* _msg = _internal_mutable_slice_param();
  // @@protoc_insertion_point(field_mutable:caffe.V1LayerParameter.slice_param)
  return _msg;
}
inline void V1LayerParameter::set_allocated_slice_param(::caffe::SliceParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.slice_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[0], 0x10000000U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x10000000U);
  }

  _impl_.slice_param_ = reinterpret_cast<::caffe::SliceParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.V1LayerParameter.slice_param)
}

// optional .caffe.TanHParameter tanh_param = 37;
inline bool V1LayerParameter::has_tanh_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[1], 0x00000020U);
  PROTOBUF_ASSUME(!value || _impl_.tanh_param_ != nullptr);
  return value;
}
inline void V1LayerParameter::clear_tanh_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.tanh_param_ != nullptr) _impl_.tanh_param_->Clear();
  ClearHasBit(_impl_._has_bits_[1], 0x00000020U);
}
inline const ::caffe::TanHParameter& V1LayerParameter::_internal_tanh_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::TanHParameter* p = _impl_.tanh_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::TanHParameter>(&::caffe::TanHParameter_globals_);
}
inline const ::caffe::TanHParameter& V1LayerParameter::tanh_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.V1LayerParameter.tanh_param)
  return _internal_tanh_param();
}
inline void V1LayerParameter::unsafe_arena_set_allocated_tanh_param(
    ::caffe::TanHParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.tanh_param_);
  }
  _impl_.tanh_param_ = reinterpret_cast<::caffe::TanHParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[1], 0x00000020U);
  } else {
    ClearHasBit(_impl_._has_bits_[1], 0x00000020U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.V1LayerParameter.tanh_param)
}
inline ::caffe::TanHParameter* PROTOBUF_NULLABLE V1LayerParameter::release_tanh_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[1], 0x00000020U);
  ::caffe::TanHParameter* released = _impl_.tanh_param_;
  _impl_.tanh_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::TanHParameter* PROTOBUF_NULLABLE V1LayerParameter::unsafe_arena_release_tanh_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.V1LayerParameter.tanh_param)

  ClearHasBit(_impl_._has_bits_[1], 0x00000020U);
  ::caffe::TanHParameter* temp = _impl_.tanh_param_;
  _impl_.tanh_param_ = nullptr;
  return temp;
}
inline ::caffe::TanHParameter* PROTOBUF_NONNULL V1LayerParameter::_internal_mutable_tanh_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.tanh_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::TanHParameter>(GetArena());
    _impl_.tanh_param_ = reinterpret_cast<::caffe::TanHParameter*>(p);
  }
  return _impl_.tanh_param_;
}
inline ::caffe::TanHParameter* PROTOBUF_NONNULL V1LayerParameter::mutable_tanh_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[1], 0x00000020U);
  ::caffe::TanHParameter* _msg = _internal_mutable_tanh_param();
  // @@protoc_insertion_point(field_mutable:caffe.V1LayerParameter.tanh_param)
  return _msg;
}
inline void V1LayerParameter::set_allocated_tanh_param(::caffe::TanHParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.tanh_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[1], 0x00000020U);
  } else {
    ClearHasBit(_impl_._has_bits_[1], 0x00000020U);
  }

  _impl_.tanh_param_ = reinterpret_cast<::caffe::TanHParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.V1LayerParameter.tanh_param)
}

// optional .caffe.ThresholdParameter threshold_param = 25;
inline bool V1LayerParameter::has_threshold_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00800000U);
  PROTOBUF_ASSUME(!value || _impl_.threshold_param_ != nullptr);
  return value;
}
inline void V1LayerParameter::clear_threshold_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.threshold_param_ != nullptr) _impl_.threshold_param_->Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00800000U);
}
inline const ::caffe::ThresholdParameter& V1LayerParameter::_internal_threshold_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::ThresholdParameter* p = _impl_.threshold_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::ThresholdParameter>(&::caffe::ThresholdParameter_globals_);
}
inline const ::caffe::ThresholdParameter& V1LayerParameter::threshold_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.V1LayerParameter.threshold_param)
  return _internal_threshold_param();
}
inline void V1LayerParameter::unsafe_arena_set_allocated_threshold_param(
    ::caffe::ThresholdParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.threshold_param_);
  }
  _impl_.threshold_param_ = reinterpret_cast<::caffe::ThresholdParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00800000U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00800000U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.V1LayerParameter.threshold_param)
}
inline ::caffe::ThresholdParameter* PROTOBUF_NULLABLE V1LayerParameter::release_threshold_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[0], 0x00800000U);
  ::caffe::ThresholdParameter* released = _impl_.threshold_param_;
  _impl_.threshold_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::ThresholdParameter* PROTOBUF_NULLABLE V1LayerParameter::unsafe_arena_release_threshold_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.V1LayerParameter.threshold_param)

  ClearHasBit(_impl_._has_bits_[0], 0x00800000U);
  ::caffe::ThresholdParameter* temp = _impl_.threshold_param_;
  _impl_.threshold_param_ = nullptr;
  return temp;
}
inline ::caffe::ThresholdParameter* PROTOBUF_NONNULL V1LayerParameter::_internal_mutable_threshold_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.threshold_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::ThresholdParameter>(GetArena());
    _impl_.threshold_param_ = reinterpret_cast<::caffe::ThresholdParameter*>(p);
  }
  return _impl_.threshold_param_;
}
inline ::caffe::ThresholdParameter* PROTOBUF_NONNULL V1LayerParameter::mutable_threshold_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00800000U);
  ::caffe::ThresholdParameter* _msg = _internal_mutable_threshold_param();
  // @@protoc_insertion_point(field_mutable:caffe.V1LayerParameter.threshold_param)
  return _msg;
}
inline void V1LayerParameter::set_allocated_threshold_param(::caffe::ThresholdParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.threshold_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[0], 0x00800000U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00800000U);
  }

  _impl_.threshold_param_ = reinterpret_cast<::caffe::ThresholdParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.V1LayerParameter.threshold_param)
}

// optional .caffe.WindowDataParameter window_data_param = 20;
inline bool V1LayerParameter::has_window_data_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00040000U);
  PROTOBUF_ASSUME(!value || _impl_.window_data_param_ != nullptr);
  return value;
}
inline void V1LayerParameter::clear_window_data_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.window_data_param_ != nullptr) _impl_.window_data_param_->Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00040000U);
}
inline const ::caffe::WindowDataParameter& V1LayerParameter::_internal_window_data_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::WindowDataParameter* p = _impl_.window_data_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::WindowDataParameter>(&::caffe::WindowDataParameter_globals_);
}
inline const ::caffe::WindowDataParameter& V1LayerParameter::window_data_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.V1LayerParameter.window_data_param)
  return _internal_window_data_param();
}
inline void V1LayerParameter::unsafe_arena_set_allocated_window_data_param(
    ::caffe::WindowDataParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.window_data_param_);
  }
  _impl_.window_data_param_ = reinterpret_cast<::caffe::WindowDataParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00040000U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00040000U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.V1LayerParameter.window_data_param)
}
inline ::caffe::WindowDataParameter* PROTOBUF_NULLABLE V1LayerParameter::release_window_data_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[0], 0x00040000U);
  ::caffe::WindowDataParameter* released = _impl_.window_data_param_;
  _impl_.window_data_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::WindowDataParameter* PROTOBUF_NULLABLE V1LayerParameter::unsafe_arena_release_window_data_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.V1LayerParameter.window_data_param)

  ClearHasBit(_impl_._has_bits_[0], 0x00040000U);
  ::caffe::WindowDataParameter* temp = _impl_.window_data_param_;
  _impl_.window_data_param_ = nullptr;
  return temp;
}
inline ::caffe::WindowDataParameter* PROTOBUF_NONNULL V1LayerParameter::_internal_mutable_window_data_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.window_data_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::WindowDataParameter>(GetArena());
    _impl_.window_data_param_ = reinterpret_cast<::caffe::WindowDataParameter*>(p);
  }
  return _impl_.window_data_param_;
}
inline ::caffe::WindowDataParameter* PROTOBUF_NONNULL V1LayerParameter::mutable_window_data_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00040000U);
  ::caffe::WindowDataParameter* _msg = _internal_mutable_window_data_param();
  // @@protoc_insertion_point(field_mutable:caffe.V1LayerParameter.window_data_param)
  return _msg;
}
inline void V1LayerParameter::set_allocated_window_data_param(::caffe::WindowDataParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.window_data_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[0], 0x00040000U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00040000U);
  }

  _impl_.window_data_param_ = reinterpret_cast<::caffe::WindowDataParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.V1LayerParameter.window_data_param)
}

// optional .caffe.TransformationParameter transform_param = 36;
inline bool V1LayerParameter::has_transform_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[1], 0x00000010U);
  PROTOBUF_ASSUME(!value || _impl_.transform_param_ != nullptr);
  return value;
}
inline void V1LayerParameter::clear_transform_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.transform_param_ != nullptr) _impl_.transform_param_->Clear();
  ClearHasBit(_impl_._has_bits_[1], 0x00000010U);
}
inline const ::caffe::TransformationParameter& V1LayerParameter::_internal_transform_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::TransformationParameter* p = _impl_.transform_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::TransformationParameter>(&::caffe::TransformationParameter_globals_);
}
inline const ::caffe::TransformationParameter& V1LayerParameter::transform_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.V1LayerParameter.transform_param)
  return _internal_transform_param();
}
inline void V1LayerParameter::unsafe_arena_set_allocated_transform_param(
    ::caffe::TransformationParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.transform_param_);
  }
  _impl_.transform_param_ = reinterpret_cast<::caffe::TransformationParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[1], 0x00000010U);
  } else {
    ClearHasBit(_impl_._has_bits_[1], 0x00000010U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.V1LayerParameter.transform_param)
}
inline ::caffe::TransformationParameter* PROTOBUF_NULLABLE V1LayerParameter::release_transform_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[1], 0x00000010U);
  ::caffe::TransformationParameter* released = _impl_.transform_param_;
  _impl_.transform_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::TransformationParameter* PROTOBUF_NULLABLE V1LayerParameter::unsafe_arena_release_transform_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.V1LayerParameter.transform_param)

  ClearHasBit(_impl_._has_bits_[1], 0x00000010U);
  ::caffe::TransformationParameter* temp = _impl_.transform_param_;
  _impl_.transform_param_ = nullptr;
  return temp;
}
inline ::caffe::TransformationParameter* PROTOBUF_NONNULL V1LayerParameter::_internal_mutable_transform_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.transform_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::TransformationParameter>(GetArena());
    _impl_.transform_param_ = reinterpret_cast<::caffe::TransformationParameter*>(p);
  }
  return _impl_.transform_param_;
}
inline ::caffe::TransformationParameter* PROTOBUF_NONNULL V1LayerParameter::mutable_transform_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[1], 0x00000010U);
  ::caffe::TransformationParameter* _msg = _internal_mutable_transform_param();
  // @@protoc_insertion_point(field_mutable:caffe.V1LayerParameter.transform_param)
  return _msg;
}
inline void V1LayerParameter::set_allocated_transform_param(::caffe::TransformationParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.transform_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[1], 0x00000010U);
  } else {
    ClearHasBit(_impl_._has_bits_[1], 0x00000010U);
  }

  _impl_.transform_param_ = reinterpret_cast<::caffe::TransformationParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.V1LayerParameter.transform_param)
}

// optional .caffe.LossParameter loss_param = 42;
inline bool V1LayerParameter::has_loss_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[1], 0x00000400U);
  PROTOBUF_ASSUME(!value || _impl_.loss_param_ != nullptr);
  return value;
}
inline void V1LayerParameter::clear_loss_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.loss_param_ != nullptr) _impl_.loss_param_->Clear();
  ClearHasBit(_impl_._has_bits_[1], 0x00000400U);
}
inline const ::caffe::LossParameter& V1LayerParameter::_internal_loss_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::LossParameter* p = _impl_.loss_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::LossParameter>(&::caffe::LossParameter_globals_);
}
inline const ::caffe::LossParameter& V1LayerParameter::loss_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.V1LayerParameter.loss_param)
  return _internal_loss_param();
}
inline void V1LayerParameter::unsafe_arena_set_allocated_loss_param(
    ::caffe::LossParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.loss_param_);
  }
  _impl_.loss_param_ = reinterpret_cast<::caffe::LossParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[1], 0x00000400U);
  } else {
    ClearHasBit(_impl_._has_bits_[1], 0x00000400U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.V1LayerParameter.loss_param)
}
inline ::caffe::LossParameter* PROTOBUF_NULLABLE V1LayerParameter::release_loss_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[1], 0x00000400U);
  ::caffe::LossParameter* released = _impl_.loss_param_;
  _impl_.loss_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::LossParameter* PROTOBUF_NULLABLE V1LayerParameter::unsafe_arena_release_loss_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.V1LayerParameter.loss_param)

  ClearHasBit(_impl_._has_bits_[1], 0x00000400U);
  ::caffe::LossParameter* temp = _impl_.loss_param_;
  _impl_.loss_param_ = nullptr;
  return temp;
}
inline ::caffe::LossParameter* PROTOBUF_NONNULL V1LayerParameter::_internal_mutable_loss_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.loss_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::LossParameter>(GetArena());
    _impl_.loss_param_ = reinterpret_cast<::caffe::LossParameter*>(p);
  }
  return _impl_.loss_param_;
}
inline ::caffe::LossParameter* PROTOBUF_NONNULL V1LayerParameter::mutable_loss_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[1], 0x00000400U);
  ::caffe::LossParameter* _msg = _internal_mutable_loss_param();
  // @@protoc_insertion_point(field_mutable:caffe.V1LayerParameter.loss_param)
  return _msg;
}
inline void V1LayerParameter::set_allocated_loss_param(::caffe::LossParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.loss_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[1], 0x00000400U);
  } else {
    ClearHasBit(_impl_._has_bits_[1], 0x00000400U);
  }

  _impl_.loss_param_ = reinterpret_cast<::caffe::LossParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.V1LayerParameter.loss_param)
}

// optional .caffe.V0LayerParameter layer = 1;
inline bool V1LayerParameter::has_layer() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000040U);
  PROTOBUF_ASSUME(!value || _impl_.layer_ != nullptr);
  return value;
}
inline void V1LayerParameter::clear_layer() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.layer_ != nullptr) _impl_.layer_->Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000040U);
}
inline const ::caffe::V0LayerParameter& V1LayerParameter::_internal_layer() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::V0LayerParameter* p = _impl_.layer_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::V0LayerParameter>(&::caffe::V0LayerParameter_globals_);
}
inline const ::caffe::V0LayerParameter& V1LayerParameter::layer() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.V1LayerParameter.layer)
  return _internal_layer();
}
inline void V1LayerParameter::unsafe_arena_set_allocated_layer(
    ::caffe::V0LayerParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.layer_);
  }
  _impl_.layer_ = reinterpret_cast<::caffe::V0LayerParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000040U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000040U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.V1LayerParameter.layer)
}
inline ::caffe::V0LayerParameter* PROTOBUF_NULLABLE V1LayerParameter::release_layer() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[0], 0x00000040U);
  ::caffe::V0LayerParameter* released = _impl_.layer_;
  _impl_.layer_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::V0LayerParameter* PROTOBUF_NULLABLE V1LayerParameter::unsafe_arena_release_layer() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.V1LayerParameter.layer)

  ClearHasBit(_impl_._has_bits_[0], 0x00000040U);
  ::caffe::V0LayerParameter* temp = _impl_.layer_;
  _impl_.layer_ = nullptr;
  return temp;
}
inline ::caffe::V0LayerParameter* PROTOBUF_NONNULL V1LayerParameter::_internal_mutable_layer() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.layer_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::V0LayerParameter>(GetArena());
    _impl_.layer_ = reinterpret_cast<::caffe::V0LayerParameter*>(p);
  }
  return _impl_.layer_;
}
inline ::caffe::V0LayerParameter* PROTOBUF_NONNULL V1LayerParameter::mutable_layer()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000040U);
  ::caffe::V0LayerParameter* _msg = _internal_mutable_layer();
  // @@protoc_insertion_point(field_mutable:caffe.V1LayerParameter.layer)
  return _msg;
}
inline void V1LayerParameter::set_allocated_layer(::caffe::V0LayerParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.layer_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[0], 0x00000040U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000040U);
  }

  _impl_.layer_ = reinterpret_cast<::caffe::V0LayerParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.V1LayerParameter.layer)
}

// -------------------------------------------------------------------

// V0LayerParameter

// optional string name = 1;
inline bool V0LayerParameter::has_name() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000001U);
  return value;
}
inline void V0LayerParameter::clear_name() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.name_.ClearToEmpty();
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
}
inline const ::std::string& V0LayerParameter::name() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.V0LayerParameter.name)
  return _internal_name();
}
template <typename Arg_, typename... Args_>
PROTOBUF_ALWAYS_INLINE void V0LayerParameter::set_name(Arg_&& arg, Args_... args) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  _impl_.name_.Set(static_cast<Arg_&&>(arg), args..., GetArena());
  // @@protoc_insertion_point(field_set:caffe.V0LayerParameter.name)
}
inline ::std::string* PROTOBUF_NONNULL V0LayerParameter::mutable_name()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  ::std::string* _s = _internal_mutable_name();
  // @@protoc_insertion_point(field_mutable:caffe.V0LayerParameter.name)
  return _s;
}
inline const ::std::string& V0LayerParameter::_internal_name() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.name_.Get();
}
inline void V0LayerParameter::_internal_set_name(const ::std::string& value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.name_.Set(value, GetArena());
}
inline ::std::string* PROTOBUF_NONNULL V0LayerParameter::_internal_mutable_name() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _impl_.name_.Mutable( GetArena());
}
inline ::std::string* PROTOBUF_NULLABLE V0LayerParameter::release_name() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.V0LayerParameter.name)
  if (!CheckHasBit(_impl_._has_bits_[0], 0x00000001U)) {
    return nullptr;
  }
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
  auto* released = _impl_.name_.Release();
  if (::google::protobuf::internal::DebugHardenForceCopyDefaultString()) {
    _impl_.name_.Set("", GetArena());
  }
  return released;
}
inline void V0LayerParameter::set_allocated_name(::std::string* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
  }
  _impl_.name_.SetAllocated(value, GetArena());
  if (::google::protobuf::internal::DebugHardenForceCopyDefaultString() && _impl_.name_.IsDefault()) {
    _impl_.name_.Set("", GetArena());
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.V0LayerParameter.name)
}

// optional string type = 2;
inline bool V0LayerParameter::has_type() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000002U);
  return value;
}
inline void V0LayerParameter::clear_type() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.type_.ClearToEmpty();
  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
}
inline const ::std::string& V0LayerParameter::type() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.V0LayerParameter.type)
  return _internal_type();
}
template <typename Arg_, typename... Args_>
PROTOBUF_ALWAYS_INLINE void V0LayerParameter::set_type(Arg_&& arg, Args_... args) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  _impl_.type_.Set(static_cast<Arg_&&>(arg), args..., GetArena());
  // @@protoc_insertion_point(field_set:caffe.V0LayerParameter.type)
}
inline ::std::string* PROTOBUF_NONNULL V0LayerParameter::mutable_type()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  ::std::string* _s = _internal_mutable_type();
  // @@protoc_insertion_point(field_mutable:caffe.V0LayerParameter.type)
  return _s;
}
inline const ::std::string& V0LayerParameter::_internal_type() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.type_.Get();
}
inline void V0LayerParameter::_internal_set_type(const ::std::string& value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.type_.Set(value, GetArena());
}
inline ::std::string* PROTOBUF_NONNULL V0LayerParameter::_internal_mutable_type() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _impl_.type_.Mutable( GetArena());
}
inline ::std::string* PROTOBUF_NULLABLE V0LayerParameter::release_type() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.V0LayerParameter.type)
  if (!CheckHasBit(_impl_._has_bits_[0], 0x00000002U)) {
    return nullptr;
  }
  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
  auto* released = _impl_.type_.Release();
  if (::google::protobuf::internal::DebugHardenForceCopyDefaultString()) {
    _impl_.type_.Set("", GetArena());
  }
  return released;
}
inline void V0LayerParameter::set_allocated_type(::std::string* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
  }
  _impl_.type_.SetAllocated(value, GetArena());
  if (::google::protobuf::internal::DebugHardenForceCopyDefaultString() && _impl_.type_.IsDefault()) {
    _impl_.type_.Set("", GetArena());
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.V0LayerParameter.type)
}

// optional uint32 num_output = 3;
inline bool V0LayerParameter::has_num_output() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000100U);
  return value;
}
inline void V0LayerParameter::clear_num_output() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.num_output_ = 0u;
  ClearHasBit(_impl_._has_bits_[0], 0x00000100U);
}
inline ::uint32_t V0LayerParameter::num_output() const {
  // @@protoc_insertion_point(field_get:caffe.V0LayerParameter.num_output)
  return _internal_num_output();
}
inline void V0LayerParameter::set_num_output(::uint32_t value) {
  _internal_set_num_output(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000100U);
  // @@protoc_insertion_point(field_set:caffe.V0LayerParameter.num_output)
}
inline ::uint32_t V0LayerParameter::_internal_num_output() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.num_output_;
}
inline void V0LayerParameter::_internal_set_num_output(::uint32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.num_output_ = value;
}

// optional bool biasterm = 4 [default = true];
inline bool V0LayerParameter::has_biasterm() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00100000U);
  return value;
}
inline void V0LayerParameter::clear_biasterm() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.biasterm_ = true;
  ClearHasBit(_impl_._has_bits_[0], 0x00100000U);
}
inline bool V0LayerParameter::biasterm() const {
  // @@protoc_insertion_point(field_get:caffe.V0LayerParameter.biasterm)
  return _internal_biasterm();
}
inline void V0LayerParameter::set_biasterm(bool value) {
  _internal_set_biasterm(value);
  SetHasBit(_impl_._has_bits_[0], 0x00100000U);
  // @@protoc_insertion_point(field_set:caffe.V0LayerParameter.biasterm)
}
inline bool V0LayerParameter::_internal_biasterm() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.biasterm_;
}
inline void V0LayerParameter::_internal_set_biasterm(bool value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.biasterm_ = value;
}

// optional .caffe.FillerParameter weight_filler = 5;
inline bool V0LayerParameter::has_weight_filler() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000020U);
  PROTOBUF_ASSUME(!value || _impl_.weight_filler_ != nullptr);
  return value;
}
inline void V0LayerParameter::clear_weight_filler() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.weight_filler_ != nullptr) _impl_.weight_filler_->Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000020U);
}
inline const ::caffe::FillerParameter& V0LayerParameter::_internal_weight_filler() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::FillerParameter* p = _impl_.weight_filler_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::FillerParameter>(&::caffe::FillerParameter_globals_);
}
inline const ::caffe::FillerParameter& V0LayerParameter::weight_filler() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.V0LayerParameter.weight_filler)
  return _internal_weight_filler();
}
inline void V0LayerParameter::unsafe_arena_set_allocated_weight_filler(
    ::caffe::FillerParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.weight_filler_);
  }
  _impl_.weight_filler_ = reinterpret_cast<::caffe::FillerParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000020U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000020U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.V0LayerParameter.weight_filler)
}
inline ::caffe::FillerParameter* PROTOBUF_NULLABLE V0LayerParameter::release_weight_filler() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[0], 0x00000020U);
  ::caffe::FillerParameter* released = _impl_.weight_filler_;
  _impl_.weight_filler_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::FillerParameter* PROTOBUF_NULLABLE V0LayerParameter::unsafe_arena_release_weight_filler() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.V0LayerParameter.weight_filler)

  ClearHasBit(_impl_._has_bits_[0], 0x00000020U);
  ::caffe::FillerParameter* temp = _impl_.weight_filler_;
  _impl_.weight_filler_ = nullptr;
  return temp;
}
inline ::caffe::FillerParameter* PROTOBUF_NONNULL V0LayerParameter::_internal_mutable_weight_filler() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.weight_filler_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::FillerParameter>(GetArena());
    _impl_.weight_filler_ = reinterpret_cast<::caffe::FillerParameter*>(p);
  }
  return _impl_.weight_filler_;
}
inline ::caffe::FillerParameter* PROTOBUF_NONNULL V0LayerParameter::mutable_weight_filler()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000020U);
  ::caffe::FillerParameter* _msg = _internal_mutable_weight_filler();
  // @@protoc_insertion_point(field_mutable:caffe.V0LayerParameter.weight_filler)
  return _msg;
}
inline void V0LayerParameter::set_allocated_weight_filler(::caffe::FillerParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.weight_filler_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[0], 0x00000020U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000020U);
  }

  _impl_.weight_filler_ = reinterpret_cast<::caffe::FillerParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.V0LayerParameter.weight_filler)
}

// optional .caffe.FillerParameter bias_filler = 6;
inline bool V0LayerParameter::has_bias_filler() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000040U);
  PROTOBUF_ASSUME(!value || _impl_.bias_filler_ != nullptr);
  return value;
}
inline void V0LayerParameter::clear_bias_filler() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.bias_filler_ != nullptr) _impl_.bias_filler_->Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000040U);
}
inline const ::caffe::FillerParameter& V0LayerParameter::_internal_bias_filler() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::FillerParameter* p = _impl_.bias_filler_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::FillerParameter>(&::caffe::FillerParameter_globals_);
}
inline const ::caffe::FillerParameter& V0LayerParameter::bias_filler() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.V0LayerParameter.bias_filler)
  return _internal_bias_filler();
}
inline void V0LayerParameter::unsafe_arena_set_allocated_bias_filler(
    ::caffe::FillerParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.bias_filler_);
  }
  _impl_.bias_filler_ = reinterpret_cast<::caffe::FillerParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000040U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000040U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.V0LayerParameter.bias_filler)
}
inline ::caffe::FillerParameter* PROTOBUF_NULLABLE V0LayerParameter::release_bias_filler() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[0], 0x00000040U);
  ::caffe::FillerParameter* released = _impl_.bias_filler_;
  _impl_.bias_filler_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::FillerParameter* PROTOBUF_NULLABLE V0LayerParameter::unsafe_arena_release_bias_filler() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.V0LayerParameter.bias_filler)

  ClearHasBit(_impl_._has_bits_[0], 0x00000040U);
  ::caffe::FillerParameter* temp = _impl_.bias_filler_;
  _impl_.bias_filler_ = nullptr;
  return temp;
}
inline ::caffe::FillerParameter* PROTOBUF_NONNULL V0LayerParameter::_internal_mutable_bias_filler() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.bias_filler_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::FillerParameter>(GetArena());
    _impl_.bias_filler_ = reinterpret_cast<::caffe::FillerParameter*>(p);
  }
  return _impl_.bias_filler_;
}
inline ::caffe::FillerParameter* PROTOBUF_NONNULL V0LayerParameter::mutable_bias_filler()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000040U);
  ::caffe::FillerParameter* _msg = _internal_mutable_bias_filler();
  // @@protoc_insertion_point(field_mutable:caffe.V0LayerParameter.bias_filler)
  return _msg;
}
inline void V0LayerParameter::set_allocated_bias_filler(::caffe::FillerParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.bias_filler_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[0], 0x00000040U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000040U);
  }

  _impl_.bias_filler_ = reinterpret_cast<::caffe::FillerParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.V0LayerParameter.bias_filler)
}

// optional uint32 pad = 7 [default = 0];
inline bool V0LayerParameter::has_pad() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000200U);
  return value;
}
inline void V0LayerParameter::clear_pad() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.pad_ = 0u;
  ClearHasBit(_impl_._has_bits_[0], 0x00000200U);
}
inline ::uint32_t V0LayerParameter::pad() const {
  // @@protoc_insertion_point(field_get:caffe.V0LayerParameter.pad)
  return _internal_pad();
}
inline void V0LayerParameter::set_pad(::uint32_t value) {
  _internal_set_pad(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000200U);
  // @@protoc_insertion_point(field_set:caffe.V0LayerParameter.pad)
}
inline ::uint32_t V0LayerParameter::_internal_pad() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.pad_;
}
inline void V0LayerParameter::_internal_set_pad(::uint32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.pad_ = value;
}

// optional uint32 kernelsize = 8;
inline bool V0LayerParameter::has_kernelsize() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000400U);
  return value;
}
inline void V0LayerParameter::clear_kernelsize() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.kernelsize_ = 0u;
  ClearHasBit(_impl_._has_bits_[0], 0x00000400U);
}
inline ::uint32_t V0LayerParameter::kernelsize() const {
  // @@protoc_insertion_point(field_get:caffe.V0LayerParameter.kernelsize)
  return _internal_kernelsize();
}
inline void V0LayerParameter::set_kernelsize(::uint32_t value) {
  _internal_set_kernelsize(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000400U);
  // @@protoc_insertion_point(field_set:caffe.V0LayerParameter.kernelsize)
}
inline ::uint32_t V0LayerParameter::_internal_kernelsize() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.kernelsize_;
}
inline void V0LayerParameter::_internal_set_kernelsize(::uint32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.kernelsize_ = value;
}

// optional uint32 group = 9 [default = 1];
inline bool V0LayerParameter::has_group() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00200000U);
  return value;
}
inline void V0LayerParameter::clear_group() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.group_ = 1u;
  ClearHasBit(_impl_._has_bits_[0], 0x00200000U);
}
inline ::uint32_t V0LayerParameter::group() const {
  // @@protoc_insertion_point(field_get:caffe.V0LayerParameter.group)
  return _internal_group();
}
inline void V0LayerParameter::set_group(::uint32_t value) {
  _internal_set_group(value);
  SetHasBit(_impl_._has_bits_[0], 0x00200000U);
  // @@protoc_insertion_point(field_set:caffe.V0LayerParameter.group)
}
inline ::uint32_t V0LayerParameter::_internal_group() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.group_;
}
inline void V0LayerParameter::_internal_set_group(::uint32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.group_ = value;
}

// optional uint32 stride = 10 [default = 1];
inline bool V0LayerParameter::has_stride() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00400000U);
  return value;
}
inline void V0LayerParameter::clear_stride() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.stride_ = 1u;
  ClearHasBit(_impl_._has_bits_[0], 0x00400000U);
}
inline ::uint32_t V0LayerParameter::stride() const {
  // @@protoc_insertion_point(field_get:caffe.V0LayerParameter.stride)
  return _internal_stride();
}
inline void V0LayerParameter::set_stride(::uint32_t value) {
  _internal_set_stride(value);
  SetHasBit(_impl_._has_bits_[0], 0x00400000U);
  // @@protoc_insertion_point(field_set:caffe.V0LayerParameter.stride)
}
inline ::uint32_t V0LayerParameter::_internal_stride() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.stride_;
}
inline void V0LayerParameter::_internal_set_stride(::uint32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.stride_ = value;
}

// optional .caffe.V0LayerParameter.PoolMethod pool = 11 [default = MAX];
inline bool V0LayerParameter::has_pool() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000800U);
  return value;
}
inline void V0LayerParameter::clear_pool() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.pool_ = 0;
  ClearHasBit(_impl_._has_bits_[0], 0x00000800U);
}
inline ::caffe::V0LayerParameter_PoolMethod V0LayerParameter::pool() const {
  // @@protoc_insertion_point(field_get:caffe.V0LayerParameter.pool)
  return _internal_pool();
}
inline void V0LayerParameter::set_pool(::caffe::V0LayerParameter_PoolMethod value) {
  _internal_set_pool(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000800U);
  // @@protoc_insertion_point(field_set:caffe.V0LayerParameter.pool)
}
inline ::caffe::V0LayerParameter_PoolMethod V0LayerParameter::_internal_pool() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return static_cast<::caffe::V0LayerParameter_PoolMethod>(_impl_.pool_);
}
inline void V0LayerParameter::_internal_set_pool(::caffe::V0LayerParameter_PoolMethod value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);

                                          assert(::google::protobuf::internal::ValidateEnum(
                                              value, ::caffe::V0LayerParameter_PoolMethod_internal_data_));
                                          _impl_.pool_ = value;
}

// optional float dropout_ratio = 12 [default = 0.5];
inline bool V0LayerParameter::has_dropout_ratio() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00800000U);
  return value;
}
inline void V0LayerParameter::clear_dropout_ratio() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.dropout_ratio_ = 0.5f;
  ClearHasBit(_impl_._has_bits_[0], 0x00800000U);
}
inline float V0LayerParameter::dropout_ratio() const {
  // @@protoc_insertion_point(field_get:caffe.V0LayerParameter.dropout_ratio)
  return _internal_dropout_ratio();
}
inline void V0LayerParameter::set_dropout_ratio(float value) {
  _internal_set_dropout_ratio(value);
  SetHasBit(_impl_._has_bits_[0], 0x00800000U);
  // @@protoc_insertion_point(field_set:caffe.V0LayerParameter.dropout_ratio)
}
inline float V0LayerParameter::_internal_dropout_ratio() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.dropout_ratio_;
}
inline void V0LayerParameter::_internal_set_dropout_ratio(float value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.dropout_ratio_ = value;
}

// optional uint32 local_size = 13 [default = 5];
inline bool V0LayerParameter::has_local_size() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x01000000U);
  return value;
}
inline void V0LayerParameter::clear_local_size() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.local_size_ = 5u;
  ClearHasBit(_impl_._has_bits_[0], 0x01000000U);
}
inline ::uint32_t V0LayerParameter::local_size() const {
  // @@protoc_insertion_point(field_get:caffe.V0LayerParameter.local_size)
  return _internal_local_size();
}
inline void V0LayerParameter::set_local_size(::uint32_t value) {
  _internal_set_local_size(value);
  SetHasBit(_impl_._has_bits_[0], 0x01000000U);
  // @@protoc_insertion_point(field_set:caffe.V0LayerParameter.local_size)
}
inline ::uint32_t V0LayerParameter::_internal_local_size() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.local_size_;
}
inline void V0LayerParameter::_internal_set_local_size(::uint32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.local_size_ = value;
}

// optional float alpha = 14 [default = 1];
inline bool V0LayerParameter::has_alpha() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x02000000U);
  return value;
}
inline void V0LayerParameter::clear_alpha() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.alpha_ = 1;
  ClearHasBit(_impl_._has_bits_[0], 0x02000000U);
}
inline float V0LayerParameter::alpha() const {
  // @@protoc_insertion_point(field_get:caffe.V0LayerParameter.alpha)
  return _internal_alpha();
}
inline void V0LayerParameter::set_alpha(float value) {
  _internal_set_alpha(value);
  SetHasBit(_impl_._has_bits_[0], 0x02000000U);
  // @@protoc_insertion_point(field_set:caffe.V0LayerParameter.alpha)
}
inline float V0LayerParameter::_internal_alpha() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.alpha_;
}
inline void V0LayerParameter::_internal_set_alpha(float value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.alpha_ = value;
}

// optional float beta = 15 [default = 0.75];
inline bool V0LayerParameter::has_beta() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x04000000U);
  return value;
}
inline void V0LayerParameter::clear_beta() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.beta_ = 0.75f;
  ClearHasBit(_impl_._has_bits_[0], 0x04000000U);
}
inline float V0LayerParameter::beta() const {
  // @@protoc_insertion_point(field_get:caffe.V0LayerParameter.beta)
  return _internal_beta();
}
inline void V0LayerParameter::set_beta(float value) {
  _internal_set_beta(value);
  SetHasBit(_impl_._has_bits_[0], 0x04000000U);
  // @@protoc_insertion_point(field_set:caffe.V0LayerParameter.beta)
}
inline float V0LayerParameter::_internal_beta() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.beta_;
}
inline void V0LayerParameter::_internal_set_beta(float value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.beta_ = value;
}

// optional float k = 22 [default = 1];
inline bool V0LayerParameter::has_k() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x10000000U);
  return value;
}
inline void V0LayerParameter::clear_k() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.k_ = 1;
  ClearHasBit(_impl_._has_bits_[0], 0x10000000U);
}
inline float V0LayerParameter::k() const {
  // @@protoc_insertion_point(field_get:caffe.V0LayerParameter.k)
  return _internal_k();
}
inline void V0LayerParameter::set_k(float value) {
  _internal_set_k(value);
  SetHasBit(_impl_._has_bits_[0], 0x10000000U);
  // @@protoc_insertion_point(field_set:caffe.V0LayerParameter.k)
}
inline float V0LayerParameter::_internal_k() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.k_;
}
inline void V0LayerParameter::_internal_set_k(float value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.k_ = value;
}

// optional string source = 16;
inline bool V0LayerParameter::has_source() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000004U);
  return value;
}
inline void V0LayerParameter::clear_source() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.source_.ClearToEmpty();
  ClearHasBit(_impl_._has_bits_[0], 0x00000004U);
}
inline const ::std::string& V0LayerParameter::source() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.V0LayerParameter.source)
  return _internal_source();
}
template <typename Arg_, typename... Args_>
PROTOBUF_ALWAYS_INLINE void V0LayerParameter::set_source(Arg_&& arg, Args_... args) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  SetHasBit(_impl_._has_bits_[0], 0x00000004U);
  _impl_.source_.Set(static_cast<Arg_&&>(arg), args..., GetArena());
  // @@protoc_insertion_point(field_set:caffe.V0LayerParameter.source)
}
inline ::std::string* PROTOBUF_NONNULL V0LayerParameter::mutable_source()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000004U);
  ::std::string* _s = _internal_mutable_source();
  // @@protoc_insertion_point(field_mutable:caffe.V0LayerParameter.source)
  return _s;
}
inline const ::std::string& V0LayerParameter::_internal_source() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.source_.Get();
}
inline void V0LayerParameter::_internal_set_source(const ::std::string& value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.source_.Set(value, GetArena());
}
inline ::std::string* PROTOBUF_NONNULL V0LayerParameter::_internal_mutable_source() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _impl_.source_.Mutable( GetArena());
}
inline ::std::string* PROTOBUF_NULLABLE V0LayerParameter::release_source() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.V0LayerParameter.source)
  if (!CheckHasBit(_impl_._has_bits_[0], 0x00000004U)) {
    return nullptr;
  }
  ClearHasBit(_impl_._has_bits_[0], 0x00000004U);
  auto* released = _impl_.source_.Release();
  if (::google::protobuf::internal::DebugHardenForceCopyDefaultString()) {
    _impl_.source_.Set("", GetArena());
  }
  return released;
}
inline void V0LayerParameter::set_allocated_source(::std::string* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000004U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000004U);
  }
  _impl_.source_.SetAllocated(value, GetArena());
  if (::google::protobuf::internal::DebugHardenForceCopyDefaultString() && _impl_.source_.IsDefault()) {
    _impl_.source_.Set("", GetArena());
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.V0LayerParameter.source)
}

// optional float scale = 17 [default = 1];
inline bool V0LayerParameter::has_scale() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x08000000U);
  return value;
}
inline void V0LayerParameter::clear_scale() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.scale_ = 1;
  ClearHasBit(_impl_._has_bits_[0], 0x08000000U);
}
inline float V0LayerParameter::scale() const {
  // @@protoc_insertion_point(field_get:caffe.V0LayerParameter.scale)
  return _internal_scale();
}
inline void V0LayerParameter::set_scale(float value) {
  _internal_set_scale(value);
  SetHasBit(_impl_._has_bits_[0], 0x08000000U);
  // @@protoc_insertion_point(field_set:caffe.V0LayerParameter.scale)
}
inline float V0LayerParameter::_internal_scale() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.scale_;
}
inline void V0LayerParameter::_internal_set_scale(float value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.scale_ = value;
}

// optional string meanfile = 18;
inline bool V0LayerParameter::has_meanfile() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000008U);
  return value;
}
inline void V0LayerParameter::clear_meanfile() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.meanfile_.ClearToEmpty();
  ClearHasBit(_impl_._has_bits_[0], 0x00000008U);
}
inline const ::std::string& V0LayerParameter::meanfile() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.V0LayerParameter.meanfile)
  return _internal_meanfile();
}
template <typename Arg_, typename... Args_>
PROTOBUF_ALWAYS_INLINE void V0LayerParameter::set_meanfile(Arg_&& arg, Args_... args) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  SetHasBit(_impl_._has_bits_[0], 0x00000008U);
  _impl_.meanfile_.Set(static_cast<Arg_&&>(arg), args..., GetArena());
  // @@protoc_insertion_point(field_set:caffe.V0LayerParameter.meanfile)
}
inline ::std::string* PROTOBUF_NONNULL V0LayerParameter::mutable_meanfile()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000008U);
  ::std::string* _s = _internal_mutable_meanfile();
  // @@protoc_insertion_point(field_mutable:caffe.V0LayerParameter.meanfile)
  return _s;
}
inline const ::std::string& V0LayerParameter::_internal_meanfile() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.meanfile_.Get();
}
inline void V0LayerParameter::_internal_set_meanfile(const ::std::string& value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.meanfile_.Set(value, GetArena());
}
inline ::std::string* PROTOBUF_NONNULL V0LayerParameter::_internal_mutable_meanfile() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _impl_.meanfile_.Mutable( GetArena());
}
inline ::std::string* PROTOBUF_NULLABLE V0LayerParameter::release_meanfile() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.V0LayerParameter.meanfile)
  if (!CheckHasBit(_impl_._has_bits_[0], 0x00000008U)) {
    return nullptr;
  }
  ClearHasBit(_impl_._has_bits_[0], 0x00000008U);
  auto* released = _impl_.meanfile_.Release();
  if (::google::protobuf::internal::DebugHardenForceCopyDefaultString()) {
    _impl_.meanfile_.Set("", GetArena());
  }
  return released;
}
inline void V0LayerParameter::set_allocated_meanfile(::std::string* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000008U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000008U);
  }
  _impl_.meanfile_.SetAllocated(value, GetArena());
  if (::google::protobuf::internal::DebugHardenForceCopyDefaultString() && _impl_.meanfile_.IsDefault()) {
    _impl_.meanfile_.Set("", GetArena());
  }
  // @@protoc_insertion_point(field_set_allocated:caffe.V0LayerParameter.meanfile)
}

// optional uint32 batchsize = 19;
inline bool V0LayerParameter::has_batchsize() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00001000U);
  return value;
}
inline void V0LayerParameter::clear_batchsize() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.batchsize_ = 0u;
  ClearHasBit(_impl_._has_bits_[0], 0x00001000U);
}
inline ::uint32_t V0LayerParameter::batchsize() const {
  // @@protoc_insertion_point(field_get:caffe.V0LayerParameter.batchsize)
  return _internal_batchsize();
}
inline void V0LayerParameter::set_batchsize(::uint32_t value) {
  _internal_set_batchsize(value);
  SetHasBit(_impl_._has_bits_[0], 0x00001000U);
  // @@protoc_insertion_point(field_set:caffe.V0LayerParameter.batchsize)
}
inline ::uint32_t V0LayerParameter::_internal_batchsize() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.batchsize_;
}
inline void V0LayerParameter::_internal_set_batchsize(::uint32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.batchsize_ = value;
}

// optional uint32 cropsize = 20 [default = 0];
inline bool V0LayerParameter::has_cropsize() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00002000U);
  return value;
}
inline void V0LayerParameter::clear_cropsize() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.cropsize_ = 0u;
  ClearHasBit(_impl_._has_bits_[0], 0x00002000U);
}
inline ::uint32_t V0LayerParameter::cropsize() const {
  // @@protoc_insertion_point(field_get:caffe.V0LayerParameter.cropsize)
  return _internal_cropsize();
}
inline void V0LayerParameter::set_cropsize(::uint32_t value) {
  _internal_set_cropsize(value);
  SetHasBit(_impl_._has_bits_[0], 0x00002000U);
  // @@protoc_insertion_point(field_set:caffe.V0LayerParameter.cropsize)
}
inline ::uint32_t V0LayerParameter::_internal_cropsize() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.cropsize_;
}
inline void V0LayerParameter::_internal_set_cropsize(::uint32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.cropsize_ = value;
}

// optional bool mirror = 21 [default = false];
inline bool V0LayerParameter::has_mirror() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00004000U);
  return value;
}
inline void V0LayerParameter::clear_mirror() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.mirror_ = false;
  ClearHasBit(_impl_._has_bits_[0], 0x00004000U);
}
inline bool V0LayerParameter::mirror() const {
  // @@protoc_insertion_point(field_get:caffe.V0LayerParameter.mirror)
  return _internal_mirror();
}
inline void V0LayerParameter::set_mirror(bool value) {
  _internal_set_mirror(value);
  SetHasBit(_impl_._has_bits_[0], 0x00004000U);
  // @@protoc_insertion_point(field_set:caffe.V0LayerParameter.mirror)
}
inline bool V0LayerParameter::_internal_mirror() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.mirror_;
}
inline void V0LayerParameter::_internal_set_mirror(bool value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.mirror_ = value;
}

// repeated .caffe.BlobProto blobs = 50;
inline int V0LayerParameter::_internal_blobs_size() const {
  return _internal_blobs().size();
}
inline int V0LayerParameter::blobs_size() const {
  return _internal_blobs_size();
}
inline void V0LayerParameter::clear_blobs() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.blobs_.Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x80000000U);
}
inline const ::caffe::BlobProto& V0LayerParameter::blobs(int index) const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.V0LayerParameter.blobs)
  return _internal_blobs().Get(index);
}
inline ::caffe::BlobProto* PROTOBUF_NONNULL V0LayerParameter::mutable_blobs(int index)
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_mutable:caffe.V0LayerParameter.blobs)
  return _internal_mutable_blobs()->Mutable(index);
}
inline ::caffe::BlobProto* PROTOBUF_NONNULL V0LayerParameter::add_blobs()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  ::caffe::BlobProto* _add =
      _internal_mutable_blobs()->InternalAddWithArena(
          ::google::protobuf::MessageLite::internal_visibility(), GetArena());
  SetHasBit(_impl_._has_bits_[0], 0x80000000U);
  // @@protoc_insertion_point(field_add:caffe.V0LayerParameter.blobs)
  return _add;
}
inline const ::google::protobuf::RepeatedPtrField<::caffe::BlobProto>& V0LayerParameter::blobs() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_list:caffe.V0LayerParameter.blobs)
  return _internal_blobs();
}
inline ::google::protobuf::RepeatedPtrField<::caffe::BlobProto>* PROTOBUF_NONNULL
V0LayerParameter::mutable_blobs() ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x80000000U);
  // @@protoc_insertion_point(field_mutable_list:caffe.V0LayerParameter.blobs)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _internal_mutable_blobs();
}
inline const ::google::protobuf::RepeatedPtrField<::caffe::BlobProto>&
V0LayerParameter::_internal_blobs() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.blobs_;
}
inline ::google::protobuf::RepeatedPtrField<::caffe::BlobProto>* PROTOBUF_NONNULL
V0LayerParameter::_internal_mutable_blobs() {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return &_impl_.blobs_;
}

// repeated float blobs_lr = 51;
inline int V0LayerParameter::_internal_blobs_lr_size() const {
  return _internal_blobs_lr().size();
}
inline int V0LayerParameter::blobs_lr_size() const {
  return _internal_blobs_lr_size();
}
inline void V0LayerParameter::clear_blobs_lr() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.blobs_lr_.Clear();
  ClearHasBit(_impl_._has_bits_[1], 0x00000001U);
}
inline float V0LayerParameter::blobs_lr(int index) const {
  // @@protoc_insertion_point(field_get:caffe.V0LayerParameter.blobs_lr)
  return _internal_blobs_lr().Get(index);
}
inline void V0LayerParameter::set_blobs_lr(int index, float value) {
  _internal_mutable_blobs_lr()->Set(index, value);
  // @@protoc_insertion_point(field_set:caffe.V0LayerParameter.blobs_lr)
}
inline void V0LayerParameter::add_blobs_lr(float value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _internal_mutable_blobs_lr()
      ->InternalAddWithArena<const ::google::protobuf::MessageLite*>(
          internal_visibility(), this, value);
  SetHasBit(_impl_._has_bits_[1], 0x00000001U);
  // @@protoc_insertion_point(field_add:caffe.V0LayerParameter.blobs_lr)
}
inline const ::google::protobuf::RepeatedField<float>& V0LayerParameter::blobs_lr() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_list:caffe.V0LayerParameter.blobs_lr)
  return _internal_blobs_lr();
}
inline ::google::protobuf::RepeatedField<float>* PROTOBUF_NONNULL V0LayerParameter::mutable_blobs_lr()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[1], 0x00000001U);
  // @@protoc_insertion_point(field_mutable_list:caffe.V0LayerParameter.blobs_lr)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _internal_mutable_blobs_lr();
}
inline const ::google::protobuf::RepeatedField<float>&
V0LayerParameter::_internal_blobs_lr() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.blobs_lr_;
}
inline ::google::protobuf::RepeatedField<float>* PROTOBUF_NONNULL
V0LayerParameter::_internal_mutable_blobs_lr() {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return &_impl_.blobs_lr_;
}

// repeated float weight_decay = 52;
inline int V0LayerParameter::_internal_weight_decay_size() const {
  return _internal_weight_decay().size();
}
inline int V0LayerParameter::weight_decay_size() const {
  return _internal_weight_decay_size();
}
inline void V0LayerParameter::clear_weight_decay() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.weight_decay_.Clear();
  ClearHasBit(_impl_._has_bits_[1], 0x00000002U);
}
inline float V0LayerParameter::weight_decay(int index) const {
  // @@protoc_insertion_point(field_get:caffe.V0LayerParameter.weight_decay)
  return _internal_weight_decay().Get(index);
}
inline void V0LayerParameter::set_weight_decay(int index, float value) {
  _internal_mutable_weight_decay()->Set(index, value);
  // @@protoc_insertion_point(field_set:caffe.V0LayerParameter.weight_decay)
}
inline void V0LayerParameter::add_weight_decay(float value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _internal_mutable_weight_decay()
      ->InternalAddWithArena<const ::google::protobuf::MessageLite*>(
          internal_visibility(), this, value);
  SetHasBit(_impl_._has_bits_[1], 0x00000002U);
  // @@protoc_insertion_point(field_add:caffe.V0LayerParameter.weight_decay)
}
inline const ::google::protobuf::RepeatedField<float>& V0LayerParameter::weight_decay() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_list:caffe.V0LayerParameter.weight_decay)
  return _internal_weight_decay();
}
inline ::google::protobuf::RepeatedField<float>* PROTOBUF_NONNULL V0LayerParameter::mutable_weight_decay()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[1], 0x00000002U);
  // @@protoc_insertion_point(field_mutable_list:caffe.V0LayerParameter.weight_decay)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _internal_mutable_weight_decay();
}
inline const ::google::protobuf::RepeatedField<float>&
V0LayerParameter::_internal_weight_decay() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.weight_decay_;
}
inline ::google::protobuf::RepeatedField<float>* PROTOBUF_NONNULL
V0LayerParameter::_internal_mutable_weight_decay() {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return &_impl_.weight_decay_;
}

// optional uint32 rand_skip = 53 [default = 0];
inline bool V0LayerParameter::has_rand_skip() const {
  bool value = CheckHasBit(_impl_._has_bits_[1], 0x00000004U);
  return value;
}
inline void V0LayerParameter::clear_rand_skip() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.rand_skip_ = 0u;
  ClearHasBit(_impl_._has_bits_[1], 0x00000004U);
}
inline ::uint32_t V0LayerParameter::rand_skip() const {
  // @@protoc_insertion_point(field_get:caffe.V0LayerParameter.rand_skip)
  return _internal_rand_skip();
}
inline void V0LayerParameter::set_rand_skip(::uint32_t value) {
  _internal_set_rand_skip(value);
  SetHasBit(_impl_._has_bits_[1], 0x00000004U);
  // @@protoc_insertion_point(field_set:caffe.V0LayerParameter.rand_skip)
}
inline ::uint32_t V0LayerParameter::_internal_rand_skip() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.rand_skip_;
}
inline void V0LayerParameter::_internal_set_rand_skip(::uint32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.rand_skip_ = value;
}

// optional float det_fg_threshold = 54 [default = 0.5];
inline bool V0LayerParameter::has_det_fg_threshold() const {
  bool value = CheckHasBit(_impl_._has_bits_[1], 0x00000010U);
  return value;
}
inline void V0LayerParameter::clear_det_fg_threshold() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.det_fg_threshold_ = 0.5f;
  ClearHasBit(_impl_._has_bits_[1], 0x00000010U);
}
inline float V0LayerParameter::det_fg_threshold() const {
  // @@protoc_insertion_point(field_get:caffe.V0LayerParameter.det_fg_threshold)
  return _internal_det_fg_threshold();
}
inline void V0LayerParameter::set_det_fg_threshold(float value) {
  _internal_set_det_fg_threshold(value);
  SetHasBit(_impl_._has_bits_[1], 0x00000010U);
  // @@protoc_insertion_point(field_set:caffe.V0LayerParameter.det_fg_threshold)
}
inline float V0LayerParameter::_internal_det_fg_threshold() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.det_fg_threshold_;
}
inline void V0LayerParameter::_internal_set_det_fg_threshold(float value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.det_fg_threshold_ = value;
}

// optional float det_bg_threshold = 55 [default = 0.5];
inline bool V0LayerParameter::has_det_bg_threshold() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x20000000U);
  return value;
}
inline void V0LayerParameter::clear_det_bg_threshold() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.det_bg_threshold_ = 0.5f;
  ClearHasBit(_impl_._has_bits_[0], 0x20000000U);
}
inline float V0LayerParameter::det_bg_threshold() const {
  // @@protoc_insertion_point(field_get:caffe.V0LayerParameter.det_bg_threshold)
  return _internal_det_bg_threshold();
}
inline void V0LayerParameter::set_det_bg_threshold(float value) {
  _internal_set_det_bg_threshold(value);
  SetHasBit(_impl_._has_bits_[0], 0x20000000U);
  // @@protoc_insertion_point(field_set:caffe.V0LayerParameter.det_bg_threshold)
}
inline float V0LayerParameter::_internal_det_bg_threshold() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.det_bg_threshold_;
}
inline void V0LayerParameter::_internal_set_det_bg_threshold(float value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.det_bg_threshold_ = value;
}

// optional float det_fg_fraction = 56 [default = 0.25];
inline bool V0LayerParameter::has_det_fg_fraction() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x40000000U);
  return value;
}
inline void V0LayerParameter::clear_det_fg_fraction() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.det_fg_fraction_ = 0.25f;
  ClearHasBit(_impl_._has_bits_[0], 0x40000000U);
}
inline float V0LayerParameter::det_fg_fraction() const {
  // @@protoc_insertion_point(field_get:caffe.V0LayerParameter.det_fg_fraction)
  return _internal_det_fg_fraction();
}
inline void V0LayerParameter::set_det_fg_fraction(float value) {
  _internal_set_det_fg_fraction(value);
  SetHasBit(_impl_._has_bits_[0], 0x40000000U);
  // @@protoc_insertion_point(field_set:caffe.V0LayerParameter.det_fg_fraction)
}
inline float V0LayerParameter::_internal_det_fg_fraction() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.det_fg_fraction_;
}
inline void V0LayerParameter::_internal_set_det_fg_fraction(float value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.det_fg_fraction_ = value;
}

// optional uint32 det_context_pad = 58 [default = 0];
inline bool V0LayerParameter::has_det_context_pad() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00008000U);
  return value;
}
inline void V0LayerParameter::clear_det_context_pad() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.det_context_pad_ = 0u;
  ClearHasBit(_impl_._has_bits_[0], 0x00008000U);
}
inline ::uint32_t V0LayerParameter::det_context_pad() const {
  // @@protoc_insertion_point(field_get:caffe.V0LayerParameter.det_context_pad)
  return _internal_det_context_pad();
}
inline void V0LayerParameter::set_det_context_pad(::uint32_t value) {
  _internal_set_det_context_pad(value);
  SetHasBit(_impl_._has_bits_[0], 0x00008000U);
  // @@protoc_insertion_point(field_set:caffe.V0LayerParameter.det_context_pad)
}
inline ::uint32_t V0LayerParameter::_internal_det_context_pad() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.det_context_pad_;
}
inline void V0LayerParameter::_internal_set_det_context_pad(::uint32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.det_context_pad_ = value;
}

// optional string det_crop_mode = 59 [default = "warp"];
inline bool V0LayerParameter::has_det_crop_mode() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000010U);
  return value;
}
inline void V0LayerParameter::clear_det_crop_mode() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.det_crop_mode_.ClearToDefault(::caffe::V0LayerParameter::Impl_::_i_give_permission_to_break_this_code_default_det_crop_mode_, GetArena());
  ClearHasBit(_impl_._has_bits_[0], 0x00000010U);
}
inline const ::std::string& V0LayerParameter::det_crop_mode() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.V0LayerParameter.det_crop_mode)
  if (_impl_.det_crop_mode_.IsDefault()) {
    return Impl_::_i_give_permission_to_break_this_code_default_det_crop_mode_.get();
  }
  return _internal_det_crop_mode();
}
template <typename Arg_, typename... Args_>
PROTOBUF_ALWAYS_INLINE void V0LayerParameter::set_det_crop_mode(Arg_&& arg, Args_... args) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  SetHasBit(_impl_._has_bits_[0], 0x00000010U);
  _impl_.det_crop_mode_.Set(static_cast<Arg_&&>(arg), args..., GetArena());
  // @@protoc_insertion_point(field_set:caffe.V0LayerParameter.det_crop_mode)
}
inline ::std::string* PROTOBUF_NONNULL V0LayerParameter::mutable_det_crop_mode()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000010U);
  ::std::string* _s = _internal_mutable_det_crop_mode();
  // @@protoc_insertion_point(field_mutable:caffe.V0LayerParameter.det_crop_mode)
  return _s;
}
inline const ::std::string& V0LayerParameter::_internal_det_crop_mode() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.det_crop_mode_.Get();
}
inline void V0LayerParameter::_internal_set_det_crop_mode(const ::std::string& value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.det_crop_mode_.Set(value, GetArena());
}
inline ::std::string* PROTOBUF_NONNULL V0LayerParameter::_internal_mutable_det_crop_mode() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _impl_.det_crop_mode_.Mutable(::caffe::V0LayerParameter::Impl_::_i_give_permission_to_break_this_code_default_det_crop_mode_, GetArena());
}
inline ::std::string* PROTOBUF_NULLABLE V0LayerParameter::release_det_crop_mode() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.V0LayerParameter.det_crop_mode)
  if (!CheckHasBit(_impl_._has_bits_[0], 0x00000010U)) {
    return nullptr;
  }
  ClearHasBit(_impl_._has_bits_[0], 0x00000010U);
  return _impl_.det_crop_mode_.Release();
}
inline void V0LayerParameter::set_allocated_det_crop_mode(::std::string* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000010U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000010U);
  }
  _impl_.det_crop_mode_.SetAllocated(value, GetArena());
  // @@protoc_insertion_point(field_set_allocated:caffe.V0LayerParameter.det_crop_mode)
}

// optional int32 new_num = 60 [default = 0];
inline bool V0LayerParameter::has_new_num() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00010000U);
  return value;
}
inline void V0LayerParameter::clear_new_num() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.new_num_ = 0;
  ClearHasBit(_impl_._has_bits_[0], 0x00010000U);
}
inline ::int32_t V0LayerParameter::new_num() const {
  // @@protoc_insertion_point(field_get:caffe.V0LayerParameter.new_num)
  return _internal_new_num();
}
inline void V0LayerParameter::set_new_num(::int32_t value) {
  _internal_set_new_num(value);
  SetHasBit(_impl_._has_bits_[0], 0x00010000U);
  // @@protoc_insertion_point(field_set:caffe.V0LayerParameter.new_num)
}
inline ::int32_t V0LayerParameter::_internal_new_num() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.new_num_;
}
inline void V0LayerParameter::_internal_set_new_num(::int32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.new_num_ = value;
}

// optional int32 new_channels = 61 [default = 0];
inline bool V0LayerParameter::has_new_channels() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00020000U);
  return value;
}
inline void V0LayerParameter::clear_new_channels() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.new_channels_ = 0;
  ClearHasBit(_impl_._has_bits_[0], 0x00020000U);
}
inline ::int32_t V0LayerParameter::new_channels() const {
  // @@protoc_insertion_point(field_get:caffe.V0LayerParameter.new_channels)
  return _internal_new_channels();
}
inline void V0LayerParameter::set_new_channels(::int32_t value) {
  _internal_set_new_channels(value);
  SetHasBit(_impl_._has_bits_[0], 0x00020000U);
  // @@protoc_insertion_point(field_set:caffe.V0LayerParameter.new_channels)
}
inline ::int32_t V0LayerParameter::_internal_new_channels() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.new_channels_;
}
inline void V0LayerParameter::_internal_set_new_channels(::int32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.new_channels_ = value;
}

// optional int32 new_height = 62 [default = 0];
inline bool V0LayerParameter::has_new_height() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00040000U);
  return value;
}
inline void V0LayerParameter::clear_new_height() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.new_height_ = 0;
  ClearHasBit(_impl_._has_bits_[0], 0x00040000U);
}
inline ::int32_t V0LayerParameter::new_height() const {
  // @@protoc_insertion_point(field_get:caffe.V0LayerParameter.new_height)
  return _internal_new_height();
}
inline void V0LayerParameter::set_new_height(::int32_t value) {
  _internal_set_new_height(value);
  SetHasBit(_impl_._has_bits_[0], 0x00040000U);
  // @@protoc_insertion_point(field_set:caffe.V0LayerParameter.new_height)
}
inline ::int32_t V0LayerParameter::_internal_new_height() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.new_height_;
}
inline void V0LayerParameter::_internal_set_new_height(::int32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.new_height_ = value;
}

// optional int32 new_width = 63 [default = 0];
inline bool V0LayerParameter::has_new_width() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00080000U);
  return value;
}
inline void V0LayerParameter::clear_new_width() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.new_width_ = 0;
  ClearHasBit(_impl_._has_bits_[0], 0x00080000U);
}
inline ::int32_t V0LayerParameter::new_width() const {
  // @@protoc_insertion_point(field_get:caffe.V0LayerParameter.new_width)
  return _internal_new_width();
}
inline void V0LayerParameter::set_new_width(::int32_t value) {
  _internal_set_new_width(value);
  SetHasBit(_impl_._has_bits_[0], 0x00080000U);
  // @@protoc_insertion_point(field_set:caffe.V0LayerParameter.new_width)
}
inline ::int32_t V0LayerParameter::_internal_new_width() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.new_width_;
}
inline void V0LayerParameter::_internal_set_new_width(::int32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.new_width_ = value;
}

// optional bool shuffle_images = 64 [default = false];
inline bool V0LayerParameter::has_shuffle_images() const {
  bool value = CheckHasBit(_impl_._has_bits_[1], 0x00000008U);
  return value;
}
inline void V0LayerParameter::clear_shuffle_images() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.shuffle_images_ = false;
  ClearHasBit(_impl_._has_bits_[1], 0x00000008U);
}
inline bool V0LayerParameter::shuffle_images() const {
  // @@protoc_insertion_point(field_get:caffe.V0LayerParameter.shuffle_images)
  return _internal_shuffle_images();
}
inline void V0LayerParameter::set_shuffle_images(bool value) {
  _internal_set_shuffle_images(value);
  SetHasBit(_impl_._has_bits_[1], 0x00000008U);
  // @@protoc_insertion_point(field_set:caffe.V0LayerParameter.shuffle_images)
}
inline bool V0LayerParameter::_internal_shuffle_images() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.shuffle_images_;
}
inline void V0LayerParameter::_internal_set_shuffle_images(bool value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.shuffle_images_ = value;
}

// optional uint32 concat_dim = 65 [default = 1];
inline bool V0LayerParameter::has_concat_dim() const {
  bool value = CheckHasBit(_impl_._has_bits_[1], 0x00000020U);
  return value;
}
inline void V0LayerParameter::clear_concat_dim() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.concat_dim_ = 1u;
  ClearHasBit(_impl_._has_bits_[1], 0x00000020U);
}
inline ::uint32_t V0LayerParameter::concat_dim() const {
  // @@protoc_insertion_point(field_get:caffe.V0LayerParameter.concat_dim)
  return _internal_concat_dim();
}
inline void V0LayerParameter::set_concat_dim(::uint32_t value) {
  _internal_set_concat_dim(value);
  SetHasBit(_impl_._has_bits_[1], 0x00000020U);
  // @@protoc_insertion_point(field_set:caffe.V0LayerParameter.concat_dim)
}
inline ::uint32_t V0LayerParameter::_internal_concat_dim() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.concat_dim_;
}
inline void V0LayerParameter::_internal_set_concat_dim(::uint32_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.concat_dim_ = value;
}

// optional .caffe.HDF5OutputParameter hdf5_output_param = 1001;
inline bool V0LayerParameter::has_hdf5_output_param() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000080U);
  PROTOBUF_ASSUME(!value || _impl_.hdf5_output_param_ != nullptr);
  return value;
}
inline void V0LayerParameter::clear_hdf5_output_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.hdf5_output_param_ != nullptr) _impl_.hdf5_output_param_->Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000080U);
}
inline const ::caffe::HDF5OutputParameter& V0LayerParameter::_internal_hdf5_output_param() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::HDF5OutputParameter* p = _impl_.hdf5_output_param_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::HDF5OutputParameter>(&::caffe::HDF5OutputParameter_globals_);
}
inline const ::caffe::HDF5OutputParameter& V0LayerParameter::hdf5_output_param() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.V0LayerParameter.hdf5_output_param)
  return _internal_hdf5_output_param();
}
inline void V0LayerParameter::unsafe_arena_set_allocated_hdf5_output_param(
    ::caffe::HDF5OutputParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.hdf5_output_param_);
  }
  _impl_.hdf5_output_param_ = reinterpret_cast<::caffe::HDF5OutputParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000080U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000080U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.V0LayerParameter.hdf5_output_param)
}
inline ::caffe::HDF5OutputParameter* PROTOBUF_NULLABLE V0LayerParameter::release_hdf5_output_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[0], 0x00000080U);
  ::caffe::HDF5OutputParameter* released = _impl_.hdf5_output_param_;
  _impl_.hdf5_output_param_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::HDF5OutputParameter* PROTOBUF_NULLABLE V0LayerParameter::unsafe_arena_release_hdf5_output_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.V0LayerParameter.hdf5_output_param)

  ClearHasBit(_impl_._has_bits_[0], 0x00000080U);
  ::caffe::HDF5OutputParameter* temp = _impl_.hdf5_output_param_;
  _impl_.hdf5_output_param_ = nullptr;
  return temp;
}
inline ::caffe::HDF5OutputParameter* PROTOBUF_NONNULL V0LayerParameter::_internal_mutable_hdf5_output_param() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.hdf5_output_param_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::HDF5OutputParameter>(GetArena());
    _impl_.hdf5_output_param_ = reinterpret_cast<::caffe::HDF5OutputParameter*>(p);
  }
  return _impl_.hdf5_output_param_;
}
inline ::caffe::HDF5OutputParameter* PROTOBUF_NONNULL V0LayerParameter::mutable_hdf5_output_param()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000080U);
  ::caffe::HDF5OutputParameter* _msg = _internal_mutable_hdf5_output_param();
  // @@protoc_insertion_point(field_mutable:caffe.V0LayerParameter.hdf5_output_param)
  return _msg;
}
inline void V0LayerParameter::set_allocated_hdf5_output_param(::caffe::HDF5OutputParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.hdf5_output_param_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[0], 0x00000080U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000080U);
  }

  _impl_.hdf5_output_param_ = reinterpret_cast<::caffe::HDF5OutputParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.V0LayerParameter.hdf5_output_param)
}

// -------------------------------------------------------------------

// PReLUParameter

// optional .caffe.FillerParameter filler = 1;
inline bool PReLUParameter::has_filler() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000001U);
  PROTOBUF_ASSUME(!value || _impl_.filler_ != nullptr);
  return value;
}
inline void PReLUParameter::clear_filler() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.filler_ != nullptr) _impl_.filler_->Clear();
  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
}
inline const ::caffe::FillerParameter& PReLUParameter::_internal_filler() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  const ::caffe::FillerParameter* p = _impl_.filler_;
  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::caffe::FillerParameter>(&::caffe::FillerParameter_globals_);
}
inline const ::caffe::FillerParameter& PReLUParameter::filler() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:caffe.PReLUParameter.filler)
  return _internal_filler();
}
inline void PReLUParameter::unsafe_arena_set_allocated_filler(
    ::caffe::FillerParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.filler_);
  }
  _impl_.filler_ = reinterpret_cast<::caffe::FillerParameter*>(value);
  if (value != nullptr) {
    SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:caffe.PReLUParameter.filler)
}
inline ::caffe::FillerParameter* PROTOBUF_NULLABLE PReLUParameter::release_filler() {
  ::google::protobuf::internal::TSanWrite(&_impl_);

  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
  ::caffe::FillerParameter* released = _impl_.filler_;
  _impl_.filler_ = nullptr;
  if (::google::protobuf::internal::DebugHardenForceCopyInRelease()) {
    auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    if (GetArena() == nullptr) {
      delete old;
    }
  } else {
    if (GetArena() != nullptr) {
      released = ::google::protobuf::internal::DuplicateIfNonNull(released);
    }
  }
  return released;
}
inline ::caffe::FillerParameter* PROTOBUF_NULLABLE PReLUParameter::unsafe_arena_release_filler() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:caffe.PReLUParameter.filler)

  ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
  ::caffe::FillerParameter* temp = _impl_.filler_;
  _impl_.filler_ = nullptr;
  return temp;
}
inline ::caffe::FillerParameter* PROTOBUF_NONNULL PReLUParameter::_internal_mutable_filler() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (_impl_.filler_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::caffe::FillerParameter>(GetArena());
    _impl_.filler_ = reinterpret_cast<::caffe::FillerParameter*>(p);
  }
  return _impl_.filler_;
}
inline ::caffe::FillerParameter* PROTOBUF_NONNULL PReLUParameter::mutable_filler()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  ::caffe::FillerParameter* _msg = _internal_mutable_filler();
  // @@protoc_insertion_point(field_mutable:caffe.PReLUParameter.filler)
  return _msg;
}
inline void PReLUParameter::set_allocated_filler(::caffe::FillerParameter* PROTOBUF_NULLABLE value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.filler_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = value->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    SetHasBit(_impl_._has_bits_[0], 0x00000001U);
  } else {
    ClearHasBit(_impl_._has_bits_[0], 0x00000001U);
  }

  _impl_.filler_ = reinterpret_cast<::caffe::FillerParameter*>(value);
  // @@protoc_insertion_point(field_set_allocated:caffe.PReLUParameter.filler)
}

// optional bool channel_shared = 2 [default = false];
inline bool PReLUParameter::has_channel_shared() const {
  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000002U);
  return value;
}
inline void PReLUParameter::clear_channel_shared() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.channel_shared_ = false;
  ClearHasBit(_impl_._has_bits_[0], 0x00000002U);
}
inline bool PReLUParameter::channel_shared() const {
  // @@protoc_insertion_point(field_get:caffe.PReLUParameter.channel_shared)
  return _internal_channel_shared();
}
inline void PReLUParameter::set_channel_shared(bool value) {
  _internal_set_channel_shared(value);
  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
  // @@protoc_insertion_point(field_set:caffe.PReLUParameter.channel_shared)
}
inline bool PReLUParameter::_internal_channel_shared() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.channel_shared_;
}
inline void PReLUParameter::_internal_set_channel_shared(bool value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.channel_shared_ = value;
}

#ifdef __GNUC__
#pragma GCC diagnostic pop
#endif  // __GNUC__

// @@protoc_insertion_point(namespace_scope)
}  // namespace caffe


namespace google {
namespace protobuf {

template <>
struct is_proto_enum<::caffe::FillerParameter_VarianceNorm> : std::true_type {};
template <>
inline const EnumDescriptor* PROTOBUF_NONNULL GetEnumDescriptor<::caffe::FillerParameter_VarianceNorm>() {
  return ::caffe::FillerParameter_VarianceNorm_descriptor();
}
template <>
struct is_proto_enum<::caffe::SolverParameter_SnapshotFormat> : std::true_type {};
template <>
inline const EnumDescriptor* PROTOBUF_NONNULL GetEnumDescriptor<::caffe::SolverParameter_SnapshotFormat>() {
  return ::caffe::SolverParameter_SnapshotFormat_descriptor();
}
template <>
struct is_proto_enum<::caffe::SolverParameter_SolverMode> : std::true_type {};
template <>
inline const EnumDescriptor* PROTOBUF_NONNULL GetEnumDescriptor<::caffe::SolverParameter_SolverMode>() {
  return ::caffe::SolverParameter_SolverMode_descriptor();
}
template <>
struct is_proto_enum<::caffe::SolverParameter_SolverType> : std::true_type {};
template <>
inline const EnumDescriptor* PROTOBUF_NONNULL GetEnumDescriptor<::caffe::SolverParameter_SolverType>() {
  return ::caffe::SolverParameter_SolverType_descriptor();
}
template <>
struct is_proto_enum<::caffe::ParamSpec_DimCheckMode> : std::true_type {};
template <>
inline const EnumDescriptor* PROTOBUF_NONNULL GetEnumDescriptor<::caffe::ParamSpec_DimCheckMode>() {
  return ::caffe::ParamSpec_DimCheckMode_descriptor();
}
template <>
struct is_proto_enum<::caffe::ResizeParameter_Resize_mode> : std::true_type {};
template <>
inline const EnumDescriptor* PROTOBUF_NONNULL GetEnumDescriptor<::caffe::ResizeParameter_Resize_mode>() {
  return ::caffe::ResizeParameter_Resize_mode_descriptor();
}
template <>
struct is_proto_enum<::caffe::ResizeParameter_Pad_mode> : std::true_type {};
template <>
inline const EnumDescriptor* PROTOBUF_NONNULL GetEnumDescriptor<::caffe::ResizeParameter_Pad_mode>() {
  return ::caffe::ResizeParameter_Pad_mode_descriptor();
}
template <>
struct is_proto_enum<::caffe::ResizeParameter_Interp_mode> : std::true_type {};
template <>
inline const EnumDescriptor* PROTOBUF_NONNULL GetEnumDescriptor<::caffe::ResizeParameter_Interp_mode>() {
  return ::caffe::ResizeParameter_Interp_mode_descriptor();
}
template <>
struct is_proto_enum<::caffe::LossParameter_NormalizationMode> : std::true_type {};
template <>
inline const EnumDescriptor* PROTOBUF_NONNULL GetEnumDescriptor<::caffe::LossParameter_NormalizationMode>() {
  return ::caffe::LossParameter_NormalizationMode_descriptor();
}
template <>
struct is_proto_enum<::caffe::BNParameter_BNMode> : std::true_type {};
template <>
inline const EnumDescriptor* PROTOBUF_NONNULL GetEnumDescriptor<::caffe::BNParameter_BNMode>() {
  return ::caffe::BNParameter_BNMode_descriptor();
}
template <>
struct is_proto_enum<::caffe::ConvolutionParameter_Engine> : std::true_type {};
template <>
inline const EnumDescriptor* PROTOBUF_NONNULL GetEnumDescriptor<::caffe::ConvolutionParameter_Engine>() {
  return ::caffe::ConvolutionParameter_Engine_descriptor();
}
template <>
struct is_proto_enum<::caffe::DataParameter_DB> : std::true_type {};
template <>
inline const EnumDescriptor* PROTOBUF_NONNULL GetEnumDescriptor<::caffe::DataParameter_DB>() {
  return ::caffe::DataParameter_DB_descriptor();
}
template <>
struct is_proto_enum<::caffe::EltwiseParameter_EltwiseOp> : std::true_type {};
template <>
inline const EnumDescriptor* PROTOBUF_NONNULL GetEnumDescriptor<::caffe::EltwiseParameter_EltwiseOp>() {
  return ::caffe::EltwiseParameter_EltwiseOp_descriptor();
}
template <>
struct is_proto_enum<::caffe::HingeLossParameter_Norm> : std::true_type {};
template <>
inline const EnumDescriptor* PROTOBUF_NONNULL GetEnumDescriptor<::caffe::HingeLossParameter_Norm>() {
  return ::caffe::HingeLossParameter_Norm_descriptor();
}
template <>
struct is_proto_enum<::caffe::LRNParameter_NormRegion> : std::true_type {};
template <>
inline const EnumDescriptor* PROTOBUF_NONNULL GetEnumDescriptor<::caffe::LRNParameter_NormRegion>() {
  return ::caffe::LRNParameter_NormRegion_descriptor();
}
template <>
struct is_proto_enum<::caffe::LRNParameter_Engine> : std::true_type {};
template <>
inline const EnumDescriptor* PROTOBUF_NONNULL GetEnumDescriptor<::caffe::LRNParameter_Engine>() {
  return ::caffe::LRNParameter_Engine_descriptor();
}
template <>
struct is_proto_enum<::caffe::PoolingParameter_PoolMethod> : std::true_type {};
template <>
inline const EnumDescriptor* PROTOBUF_NONNULL GetEnumDescriptor<::caffe::PoolingParameter_PoolMethod>() {
  return ::caffe::PoolingParameter_PoolMethod_descriptor();
}
template <>
struct is_proto_enum<::caffe::PoolingParameter_Engine> : std::true_type {};
template <>
inline const EnumDescriptor* PROTOBUF_NONNULL GetEnumDescriptor<::caffe::PoolingParameter_Engine>() {
  return ::caffe::PoolingParameter_Engine_descriptor();
}
template <>
struct is_proto_enum<::caffe::PriorBoxParameter_CodeType> : std::true_type {};
template <>
inline const EnumDescriptor* PROTOBUF_NONNULL GetEnumDescriptor<::caffe::PriorBoxParameter_CodeType>() {
  return ::caffe::PriorBoxParameter_CodeType_descriptor();
}
template <>
struct is_proto_enum<::caffe::ReductionParameter_ReductionOp> : std::true_type {};
template <>
inline const EnumDescriptor* PROTOBUF_NONNULL GetEnumDescriptor<::caffe::ReductionParameter_ReductionOp>() {
  return ::caffe::ReductionParameter_ReductionOp_descriptor();
}
template <>
struct is_proto_enum<::caffe::ReLUParameter_Engine> : std::true_type {};
template <>
inline const EnumDescriptor* PROTOBUF_NONNULL GetEnumDescriptor<::caffe::ReLUParameter_Engine>() {
  return ::caffe::ReLUParameter_Engine_descriptor();
}
template <>
struct is_proto_enum<::caffe::SigmoidParameter_Engine> : std::true_type {};
template <>
inline const EnumDescriptor* PROTOBUF_NONNULL GetEnumDescriptor<::caffe::SigmoidParameter_Engine>() {
  return ::caffe::SigmoidParameter_Engine_descriptor();
}
template <>
struct is_proto_enum<::caffe::SoftmaxParameter_Engine> : std::true_type {};
template <>
inline const EnumDescriptor* PROTOBUF_NONNULL GetEnumDescriptor<::caffe::SoftmaxParameter_Engine>() {
  return ::caffe::SoftmaxParameter_Engine_descriptor();
}
template <>
struct is_proto_enum<::caffe::TanHParameter_Engine> : std::true_type {};
template <>
inline const EnumDescriptor* PROTOBUF_NONNULL GetEnumDescriptor<::caffe::TanHParameter_Engine>() {
  return ::caffe::TanHParameter_Engine_descriptor();
}
template <>
struct is_proto_enum<::caffe::SPPParameter_PoolMethod> : std::true_type {};
template <>
inline const EnumDescriptor* PROTOBUF_NONNULL GetEnumDescriptor<::caffe::SPPParameter_PoolMethod>() {
  return ::caffe::SPPParameter_PoolMethod_descriptor();
}
template <>
struct is_proto_enum<::caffe::SPPParameter_Engine> : std::true_type {};
template <>
inline const EnumDescriptor* PROTOBUF_NONNULL GetEnumDescriptor<::caffe::SPPParameter_Engine>() {
  return ::caffe::SPPParameter_Engine_descriptor();
}
template <>
struct is_proto_enum<::caffe::V1LayerParameter_LayerType> : std::true_type {};
template <>
inline const EnumDescriptor* PROTOBUF_NONNULL GetEnumDescriptor<::caffe::V1LayerParameter_LayerType>() {
  return ::caffe::V1LayerParameter_LayerType_descriptor();
}
template <>
struct is_proto_enum<::caffe::V1LayerParameter_DimCheckMode> : std::true_type {};
template <>
inline const EnumDescriptor* PROTOBUF_NONNULL GetEnumDescriptor<::caffe::V1LayerParameter_DimCheckMode>() {
  return ::caffe::V1LayerParameter_DimCheckMode_descriptor();
}
template <>
struct is_proto_enum<::caffe::V0LayerParameter_PoolMethod> : std::true_type {};
template <>
inline const EnumDescriptor* PROTOBUF_NONNULL GetEnumDescriptor<::caffe::V0LayerParameter_PoolMethod>() {
  return ::caffe::V0LayerParameter_PoolMethod_descriptor();
}
template <>
struct is_proto_enum<::caffe::Phase> : std::true_type {};
template <>
inline const EnumDescriptor* PROTOBUF_NONNULL GetEnumDescriptor<::caffe::Phase>() {
  return ::caffe::Phase_descriptor();
}

}  // namespace protobuf
}  // namespace google

// @@protoc_insertion_point(global_scope)

#include "google/protobuf/port_undef.inc"
// clang-format on

#endif  // caffe_2eproto_2epb_2eh
