// Generated by the protocol buffer compiler.  DO NOT EDIT!
// source: battery.proto

#include "battery.pb.h"

#include <algorithm>

#include <google/protobuf/io/coded_stream.h>
#include <google/protobuf/extension_set.h>
#include <google/protobuf/wire_format_lite.h>
#include <google/protobuf/descriptor.h>
#include <google/protobuf/generated_message_reflection.h>
#include <google/protobuf/reflection_ops.h>
#include <google/protobuf/wire_format.h>
// @@protoc_insertion_point(includes)
#include <google/protobuf/port_def.inc>

PROTOBUF_PRAGMA_INIT_SEG

namespace _pb = ::PROTOBUF_NAMESPACE_ID;
namespace _pbi = _pb::internal;

namespace BatteryConfig {
PROTOBUF_CONSTEXPR Item::Item(
    ::_pbi::ConstantInitialized): _impl_{
    /*decltype(_impl_.itemattr_)*/{}
  , /*decltype(_impl_.itemattr_balance_)*/{}
  , /*decltype(_impl_.itemattr_dido_)*/{}
  , /*decltype(_impl_.itemattr_sox_)*/{}
  , /*decltype(_impl_.itemattr_other_)*/{}
  , /*decltype(_impl_.itemattr_alert_value_)*/{}
  , /*decltype(_impl_.itemattr_alert_delay_)*/{}
  , /*decltype(_impl_.itemattr_alert_release_value_)*/{}
  , /*decltype(_impl_.itemattr_alert_release_delay_)*/{}
  , /*decltype(_impl_.itemattr_alert_dropcurr_rate_)*/{}
  , /*decltype(_impl_.itemattr_alert_solve_measure_)*/{}
  , /*decltype(_impl_._cached_size_)*/{}} {}
struct ItemDefaultTypeInternal {
  PROTOBUF_CONSTEXPR ItemDefaultTypeInternal()
      : _instance(::_pbi::ConstantInitialized{}) {}
  ~ItemDefaultTypeInternal() {}
  union {
    Item _instance;
  };
};
PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 ItemDefaultTypeInternal _Item_default_instance_;
PROTOBUF_CONSTEXPR Attributes::Attributes(
    ::_pbi::ConstantInitialized): _impl_{
    /*decltype(_impl_.name_)*/{&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{}}
  , /*decltype(_impl_.introduce_)*/{&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{}}
  , /*decltype(_impl_.addr_)*/0
  , /*decltype(_impl_.value_)*/0
  , /*decltype(_impl_.scale_)*/0
  , /*decltype(_impl_._cached_size_)*/{}} {}
struct AttributesDefaultTypeInternal {
  PROTOBUF_CONSTEXPR AttributesDefaultTypeInternal()
      : _instance(::_pbi::ConstantInitialized{}) {}
  ~AttributesDefaultTypeInternal() {}
  union {
    Attributes _instance;
  };
};
PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 AttributesDefaultTypeInternal _Attributes_default_instance_;
PROTOBUF_CONSTEXPR Attributes_balance::Attributes_balance(
    ::_pbi::ConstantInitialized): _impl_{
    /*decltype(_impl_.name_)*/{&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{}}
  , /*decltype(_impl_.introduce_)*/{&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{}}
  , /*decltype(_impl_.addr_)*/0
  , /*decltype(_impl_.value_)*/0
  , /*decltype(_impl_.scale_)*/0
  , /*decltype(_impl_._cached_size_)*/{}} {}
struct Attributes_balanceDefaultTypeInternal {
  PROTOBUF_CONSTEXPR Attributes_balanceDefaultTypeInternal()
      : _instance(::_pbi::ConstantInitialized{}) {}
  ~Attributes_balanceDefaultTypeInternal() {}
  union {
    Attributes_balance _instance;
  };
};
PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 Attributes_balanceDefaultTypeInternal _Attributes_balance_default_instance_;
PROTOBUF_CONSTEXPR Attributes_DIDO::Attributes_DIDO(
    ::_pbi::ConstantInitialized): _impl_{
    /*decltype(_impl_.name_)*/{&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{}}
  , /*decltype(_impl_.introduce_)*/{&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{}}
  , /*decltype(_impl_.addr_)*/0
  , /*decltype(_impl_.value_)*/0
  , /*decltype(_impl_.scale_)*/0
  , /*decltype(_impl_._cached_size_)*/{}} {}
struct Attributes_DIDODefaultTypeInternal {
  PROTOBUF_CONSTEXPR Attributes_DIDODefaultTypeInternal()
      : _instance(::_pbi::ConstantInitialized{}) {}
  ~Attributes_DIDODefaultTypeInternal() {}
  union {
    Attributes_DIDO _instance;
  };
};
PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 Attributes_DIDODefaultTypeInternal _Attributes_DIDO_default_instance_;
PROTOBUF_CONSTEXPR Attributes_SOX::Attributes_SOX(
    ::_pbi::ConstantInitialized): _impl_{
    /*decltype(_impl_.name_)*/{&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{}}
  , /*decltype(_impl_.introduce_)*/{&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{}}
  , /*decltype(_impl_.addr_)*/0
  , /*decltype(_impl_.value_)*/0
  , /*decltype(_impl_.scale_)*/0
  , /*decltype(_impl_._cached_size_)*/{}} {}
struct Attributes_SOXDefaultTypeInternal {
  PROTOBUF_CONSTEXPR Attributes_SOXDefaultTypeInternal()
      : _instance(::_pbi::ConstantInitialized{}) {}
  ~Attributes_SOXDefaultTypeInternal() {}
  union {
    Attributes_SOX _instance;
  };
};
PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 Attributes_SOXDefaultTypeInternal _Attributes_SOX_default_instance_;
PROTOBUF_CONSTEXPR Attributes_other::Attributes_other(
    ::_pbi::ConstantInitialized): _impl_{
    /*decltype(_impl_.name_)*/{&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{}}
  , /*decltype(_impl_.introduce_)*/{&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{}}
  , /*decltype(_impl_.addr_)*/0
  , /*decltype(_impl_.value_)*/0
  , /*decltype(_impl_.scale_)*/0
  , /*decltype(_impl_._cached_size_)*/{}} {}
struct Attributes_otherDefaultTypeInternal {
  PROTOBUF_CONSTEXPR Attributes_otherDefaultTypeInternal()
      : _instance(::_pbi::ConstantInitialized{}) {}
  ~Attributes_otherDefaultTypeInternal() {}
  union {
    Attributes_other _instance;
  };
};
PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 Attributes_otherDefaultTypeInternal _Attributes_other_default_instance_;
PROTOBUF_CONSTEXPR Attributes_alert_value::Attributes_alert_value(
    ::_pbi::ConstantInitialized): _impl_{
    /*decltype(_impl_.name_)*/{&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{}}
  , /*decltype(_impl_.introduce_)*/{&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{}}
  , /*decltype(_impl_.addr_)*/0
  , /*decltype(_impl_.value_)*/0
  , /*decltype(_impl_.scale_)*/0
  , /*decltype(_impl_._cached_size_)*/{}} {}
struct Attributes_alert_valueDefaultTypeInternal {
  PROTOBUF_CONSTEXPR Attributes_alert_valueDefaultTypeInternal()
      : _instance(::_pbi::ConstantInitialized{}) {}
  ~Attributes_alert_valueDefaultTypeInternal() {}
  union {
    Attributes_alert_value _instance;
  };
};
PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 Attributes_alert_valueDefaultTypeInternal _Attributes_alert_value_default_instance_;
PROTOBUF_CONSTEXPR Attributes_alert_delay::Attributes_alert_delay(
    ::_pbi::ConstantInitialized): _impl_{
    /*decltype(_impl_.name_)*/{&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{}}
  , /*decltype(_impl_.introduce_)*/{&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{}}
  , /*decltype(_impl_.addr_)*/0
  , /*decltype(_impl_.value_)*/0
  , /*decltype(_impl_.scale_)*/0
  , /*decltype(_impl_._cached_size_)*/{}} {}
struct Attributes_alert_delayDefaultTypeInternal {
  PROTOBUF_CONSTEXPR Attributes_alert_delayDefaultTypeInternal()
      : _instance(::_pbi::ConstantInitialized{}) {}
  ~Attributes_alert_delayDefaultTypeInternal() {}
  union {
    Attributes_alert_delay _instance;
  };
};
PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 Attributes_alert_delayDefaultTypeInternal _Attributes_alert_delay_default_instance_;
PROTOBUF_CONSTEXPR Attributes_alert_release_value::Attributes_alert_release_value(
    ::_pbi::ConstantInitialized): _impl_{
    /*decltype(_impl_.name_)*/{&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{}}
  , /*decltype(_impl_.introduce_)*/{&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{}}
  , /*decltype(_impl_.addr_)*/0
  , /*decltype(_impl_.value_)*/0
  , /*decltype(_impl_.scale_)*/0
  , /*decltype(_impl_._cached_size_)*/{}} {}
struct Attributes_alert_release_valueDefaultTypeInternal {
  PROTOBUF_CONSTEXPR Attributes_alert_release_valueDefaultTypeInternal()
      : _instance(::_pbi::ConstantInitialized{}) {}
  ~Attributes_alert_release_valueDefaultTypeInternal() {}
  union {
    Attributes_alert_release_value _instance;
  };
};
PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 Attributes_alert_release_valueDefaultTypeInternal _Attributes_alert_release_value_default_instance_;
PROTOBUF_CONSTEXPR Attributes_alert_release_delay::Attributes_alert_release_delay(
    ::_pbi::ConstantInitialized): _impl_{
    /*decltype(_impl_.name_)*/{&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{}}
  , /*decltype(_impl_.introduce_)*/{&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{}}
  , /*decltype(_impl_.addr_)*/0
  , /*decltype(_impl_.value_)*/0
  , /*decltype(_impl_.scale_)*/0
  , /*decltype(_impl_._cached_size_)*/{}} {}
struct Attributes_alert_release_delayDefaultTypeInternal {
  PROTOBUF_CONSTEXPR Attributes_alert_release_delayDefaultTypeInternal()
      : _instance(::_pbi::ConstantInitialized{}) {}
  ~Attributes_alert_release_delayDefaultTypeInternal() {}
  union {
    Attributes_alert_release_delay _instance;
  };
};
PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 Attributes_alert_release_delayDefaultTypeInternal _Attributes_alert_release_delay_default_instance_;
PROTOBUF_CONSTEXPR Attributes_alert_dropcurr_rate::Attributes_alert_dropcurr_rate(
    ::_pbi::ConstantInitialized): _impl_{
    /*decltype(_impl_.name_)*/{&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{}}
  , /*decltype(_impl_.introduce_)*/{&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{}}
  , /*decltype(_impl_.addr_)*/0
  , /*decltype(_impl_.value_)*/0
  , /*decltype(_impl_.scale_)*/0
  , /*decltype(_impl_._cached_size_)*/{}} {}
struct Attributes_alert_dropcurr_rateDefaultTypeInternal {
  PROTOBUF_CONSTEXPR Attributes_alert_dropcurr_rateDefaultTypeInternal()
      : _instance(::_pbi::ConstantInitialized{}) {}
  ~Attributes_alert_dropcurr_rateDefaultTypeInternal() {}
  union {
    Attributes_alert_dropcurr_rate _instance;
  };
};
PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 Attributes_alert_dropcurr_rateDefaultTypeInternal _Attributes_alert_dropcurr_rate_default_instance_;
PROTOBUF_CONSTEXPR Attributes_alert_solve_measure::Attributes_alert_solve_measure(
    ::_pbi::ConstantInitialized): _impl_{
    /*decltype(_impl_.name_)*/{&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{}}
  , /*decltype(_impl_.introduce_)*/{&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{}}
  , /*decltype(_impl_.addr_)*/0
  , /*decltype(_impl_.value_)*/0
  , /*decltype(_impl_.scale_)*/0
  , /*decltype(_impl_._cached_size_)*/{}} {}
struct Attributes_alert_solve_measureDefaultTypeInternal {
  PROTOBUF_CONSTEXPR Attributes_alert_solve_measureDefaultTypeInternal()
      : _instance(::_pbi::ConstantInitialized{}) {}
  ~Attributes_alert_solve_measureDefaultTypeInternal() {}
  union {
    Attributes_alert_solve_measure _instance;
  };
};
PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 Attributes_alert_solve_measureDefaultTypeInternal _Attributes_alert_solve_measure_default_instance_;
}  // namespace BatteryConfig
static ::_pb::Metadata file_level_metadata_battery_2eproto[12];
static constexpr ::_pb::EnumDescriptor const** file_level_enum_descriptors_battery_2eproto = nullptr;
static constexpr ::_pb::ServiceDescriptor const** file_level_service_descriptors_battery_2eproto = nullptr;

const uint32_t TableStruct_battery_2eproto::offsets[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = {
  ~0u,  // no _has_bits_
  PROTOBUF_FIELD_OFFSET(::BatteryConfig::Item, _internal_metadata_),
  ~0u,  // no _extensions_
  ~0u,  // no _oneof_case_
  ~0u,  // no _weak_field_map_
  ~0u,  // no _inlined_string_donated_
  PROTOBUF_FIELD_OFFSET(::BatteryConfig::Item, _impl_.itemattr_),
  PROTOBUF_FIELD_OFFSET(::BatteryConfig::Item, _impl_.itemattr_balance_),
  PROTOBUF_FIELD_OFFSET(::BatteryConfig::Item, _impl_.itemattr_dido_),
  PROTOBUF_FIELD_OFFSET(::BatteryConfig::Item, _impl_.itemattr_sox_),
  PROTOBUF_FIELD_OFFSET(::BatteryConfig::Item, _impl_.itemattr_other_),
  PROTOBUF_FIELD_OFFSET(::BatteryConfig::Item, _impl_.itemattr_alert_value_),
  PROTOBUF_FIELD_OFFSET(::BatteryConfig::Item, _impl_.itemattr_alert_delay_),
  PROTOBUF_FIELD_OFFSET(::BatteryConfig::Item, _impl_.itemattr_alert_release_value_),
  PROTOBUF_FIELD_OFFSET(::BatteryConfig::Item, _impl_.itemattr_alert_release_delay_),
  PROTOBUF_FIELD_OFFSET(::BatteryConfig::Item, _impl_.itemattr_alert_dropcurr_rate_),
  PROTOBUF_FIELD_OFFSET(::BatteryConfig::Item, _impl_.itemattr_alert_solve_measure_),
  ~0u,  // no _has_bits_
  PROTOBUF_FIELD_OFFSET(::BatteryConfig::Attributes, _internal_metadata_),
  ~0u,  // no _extensions_
  ~0u,  // no _oneof_case_
  ~0u,  // no _weak_field_map_
  ~0u,  // no _inlined_string_donated_
  PROTOBUF_FIELD_OFFSET(::BatteryConfig::Attributes, _impl_.name_),
  PROTOBUF_FIELD_OFFSET(::BatteryConfig::Attributes, _impl_.addr_),
  PROTOBUF_FIELD_OFFSET(::BatteryConfig::Attributes, _impl_.value_),
  PROTOBUF_FIELD_OFFSET(::BatteryConfig::Attributes, _impl_.scale_),
  PROTOBUF_FIELD_OFFSET(::BatteryConfig::Attributes, _impl_.introduce_),
  ~0u,  // no _has_bits_
  PROTOBUF_FIELD_OFFSET(::BatteryConfig::Attributes_balance, _internal_metadata_),
  ~0u,  // no _extensions_
  ~0u,  // no _oneof_case_
  ~0u,  // no _weak_field_map_
  ~0u,  // no _inlined_string_donated_
  PROTOBUF_FIELD_OFFSET(::BatteryConfig::Attributes_balance, _impl_.name_),
  PROTOBUF_FIELD_OFFSET(::BatteryConfig::Attributes_balance, _impl_.addr_),
  PROTOBUF_FIELD_OFFSET(::BatteryConfig::Attributes_balance, _impl_.value_),
  PROTOBUF_FIELD_OFFSET(::BatteryConfig::Attributes_balance, _impl_.scale_),
  PROTOBUF_FIELD_OFFSET(::BatteryConfig::Attributes_balance, _impl_.introduce_),
  ~0u,  // no _has_bits_
  PROTOBUF_FIELD_OFFSET(::BatteryConfig::Attributes_DIDO, _internal_metadata_),
  ~0u,  // no _extensions_
  ~0u,  // no _oneof_case_
  ~0u,  // no _weak_field_map_
  ~0u,  // no _inlined_string_donated_
  PROTOBUF_FIELD_OFFSET(::BatteryConfig::Attributes_DIDO, _impl_.name_),
  PROTOBUF_FIELD_OFFSET(::BatteryConfig::Attributes_DIDO, _impl_.addr_),
  PROTOBUF_FIELD_OFFSET(::BatteryConfig::Attributes_DIDO, _impl_.value_),
  PROTOBUF_FIELD_OFFSET(::BatteryConfig::Attributes_DIDO, _impl_.scale_),
  PROTOBUF_FIELD_OFFSET(::BatteryConfig::Attributes_DIDO, _impl_.introduce_),
  ~0u,  // no _has_bits_
  PROTOBUF_FIELD_OFFSET(::BatteryConfig::Attributes_SOX, _internal_metadata_),
  ~0u,  // no _extensions_
  ~0u,  // no _oneof_case_
  ~0u,  // no _weak_field_map_
  ~0u,  // no _inlined_string_donated_
  PROTOBUF_FIELD_OFFSET(::BatteryConfig::Attributes_SOX, _impl_.name_),
  PROTOBUF_FIELD_OFFSET(::BatteryConfig::Attributes_SOX, _impl_.addr_),
  PROTOBUF_FIELD_OFFSET(::BatteryConfig::Attributes_SOX, _impl_.value_),
  PROTOBUF_FIELD_OFFSET(::BatteryConfig::Attributes_SOX, _impl_.scale_),
  PROTOBUF_FIELD_OFFSET(::BatteryConfig::Attributes_SOX, _impl_.introduce_),
  ~0u,  // no _has_bits_
  PROTOBUF_FIELD_OFFSET(::BatteryConfig::Attributes_other, _internal_metadata_),
  ~0u,  // no _extensions_
  ~0u,  // no _oneof_case_
  ~0u,  // no _weak_field_map_
  ~0u,  // no _inlined_string_donated_
  PROTOBUF_FIELD_OFFSET(::BatteryConfig::Attributes_other, _impl_.name_),
  PROTOBUF_FIELD_OFFSET(::BatteryConfig::Attributes_other, _impl_.addr_),
  PROTOBUF_FIELD_OFFSET(::BatteryConfig::Attributes_other, _impl_.value_),
  PROTOBUF_FIELD_OFFSET(::BatteryConfig::Attributes_other, _impl_.scale_),
  PROTOBUF_FIELD_OFFSET(::BatteryConfig::Attributes_other, _impl_.introduce_),
  ~0u,  // no _has_bits_
  PROTOBUF_FIELD_OFFSET(::BatteryConfig::Attributes_alert_value, _internal_metadata_),
  ~0u,  // no _extensions_
  ~0u,  // no _oneof_case_
  ~0u,  // no _weak_field_map_
  ~0u,  // no _inlined_string_donated_
  PROTOBUF_FIELD_OFFSET(::BatteryConfig::Attributes_alert_value, _impl_.name_),
  PROTOBUF_FIELD_OFFSET(::BatteryConfig::Attributes_alert_value, _impl_.addr_),
  PROTOBUF_FIELD_OFFSET(::BatteryConfig::Attributes_alert_value, _impl_.value_),
  PROTOBUF_FIELD_OFFSET(::BatteryConfig::Attributes_alert_value, _impl_.scale_),
  PROTOBUF_FIELD_OFFSET(::BatteryConfig::Attributes_alert_value, _impl_.introduce_),
  ~0u,  // no _has_bits_
  PROTOBUF_FIELD_OFFSET(::BatteryConfig::Attributes_alert_delay, _internal_metadata_),
  ~0u,  // no _extensions_
  ~0u,  // no _oneof_case_
  ~0u,  // no _weak_field_map_
  ~0u,  // no _inlined_string_donated_
  PROTOBUF_FIELD_OFFSET(::BatteryConfig::Attributes_alert_delay, _impl_.name_),
  PROTOBUF_FIELD_OFFSET(::BatteryConfig::Attributes_alert_delay, _impl_.addr_),
  PROTOBUF_FIELD_OFFSET(::BatteryConfig::Attributes_alert_delay, _impl_.value_),
  PROTOBUF_FIELD_OFFSET(::BatteryConfig::Attributes_alert_delay, _impl_.scale_),
  PROTOBUF_FIELD_OFFSET(::BatteryConfig::Attributes_alert_delay, _impl_.introduce_),
  ~0u,  // no _has_bits_
  PROTOBUF_FIELD_OFFSET(::BatteryConfig::Attributes_alert_release_value, _internal_metadata_),
  ~0u,  // no _extensions_
  ~0u,  // no _oneof_case_
  ~0u,  // no _weak_field_map_
  ~0u,  // no _inlined_string_donated_
  PROTOBUF_FIELD_OFFSET(::BatteryConfig::Attributes_alert_release_value, _impl_.name_),
  PROTOBUF_FIELD_OFFSET(::BatteryConfig::Attributes_alert_release_value, _impl_.addr_),
  PROTOBUF_FIELD_OFFSET(::BatteryConfig::Attributes_alert_release_value, _impl_.value_),
  PROTOBUF_FIELD_OFFSET(::BatteryConfig::Attributes_alert_release_value, _impl_.scale_),
  PROTOBUF_FIELD_OFFSET(::BatteryConfig::Attributes_alert_release_value, _impl_.introduce_),
  ~0u,  // no _has_bits_
  PROTOBUF_FIELD_OFFSET(::BatteryConfig::Attributes_alert_release_delay, _internal_metadata_),
  ~0u,  // no _extensions_
  ~0u,  // no _oneof_case_
  ~0u,  // no _weak_field_map_
  ~0u,  // no _inlined_string_donated_
  PROTOBUF_FIELD_OFFSET(::BatteryConfig::Attributes_alert_release_delay, _impl_.name_),
  PROTOBUF_FIELD_OFFSET(::BatteryConfig::Attributes_alert_release_delay, _impl_.addr_),
  PROTOBUF_FIELD_OFFSET(::BatteryConfig::Attributes_alert_release_delay, _impl_.value_),
  PROTOBUF_FIELD_OFFSET(::BatteryConfig::Attributes_alert_release_delay, _impl_.scale_),
  PROTOBUF_FIELD_OFFSET(::BatteryConfig::Attributes_alert_release_delay, _impl_.introduce_),
  ~0u,  // no _has_bits_
  PROTOBUF_FIELD_OFFSET(::BatteryConfig::Attributes_alert_dropcurr_rate, _internal_metadata_),
  ~0u,  // no _extensions_
  ~0u,  // no _oneof_case_
  ~0u,  // no _weak_field_map_
  ~0u,  // no _inlined_string_donated_
  PROTOBUF_FIELD_OFFSET(::BatteryConfig::Attributes_alert_dropcurr_rate, _impl_.name_),
  PROTOBUF_FIELD_OFFSET(::BatteryConfig::Attributes_alert_dropcurr_rate, _impl_.addr_),
  PROTOBUF_FIELD_OFFSET(::BatteryConfig::Attributes_alert_dropcurr_rate, _impl_.value_),
  PROTOBUF_FIELD_OFFSET(::BatteryConfig::Attributes_alert_dropcurr_rate, _impl_.scale_),
  PROTOBUF_FIELD_OFFSET(::BatteryConfig::Attributes_alert_dropcurr_rate, _impl_.introduce_),
  ~0u,  // no _has_bits_
  PROTOBUF_FIELD_OFFSET(::BatteryConfig::Attributes_alert_solve_measure, _internal_metadata_),
  ~0u,  // no _extensions_
  ~0u,  // no _oneof_case_
  ~0u,  // no _weak_field_map_
  ~0u,  // no _inlined_string_donated_
  PROTOBUF_FIELD_OFFSET(::BatteryConfig::Attributes_alert_solve_measure, _impl_.name_),
  PROTOBUF_FIELD_OFFSET(::BatteryConfig::Attributes_alert_solve_measure, _impl_.addr_),
  PROTOBUF_FIELD_OFFSET(::BatteryConfig::Attributes_alert_solve_measure, _impl_.value_),
  PROTOBUF_FIELD_OFFSET(::BatteryConfig::Attributes_alert_solve_measure, _impl_.scale_),
  PROTOBUF_FIELD_OFFSET(::BatteryConfig::Attributes_alert_solve_measure, _impl_.introduce_),
};
static const ::_pbi::MigrationSchema schemas[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = {
  { 0, -1, -1, sizeof(::BatteryConfig::Item)},
  { 17, -1, -1, sizeof(::BatteryConfig::Attributes)},
  { 28, -1, -1, sizeof(::BatteryConfig::Attributes_balance)},
  { 39, -1, -1, sizeof(::BatteryConfig::Attributes_DIDO)},
  { 50, -1, -1, sizeof(::BatteryConfig::Attributes_SOX)},
  { 61, -1, -1, sizeof(::BatteryConfig::Attributes_other)},
  { 72, -1, -1, sizeof(::BatteryConfig::Attributes_alert_value)},
  { 83, -1, -1, sizeof(::BatteryConfig::Attributes_alert_delay)},
  { 94, -1, -1, sizeof(::BatteryConfig::Attributes_alert_release_value)},
  { 105, -1, -1, sizeof(::BatteryConfig::Attributes_alert_release_delay)},
  { 116, -1, -1, sizeof(::BatteryConfig::Attributes_alert_dropcurr_rate)},
  { 127, -1, -1, sizeof(::BatteryConfig::Attributes_alert_solve_measure)},
};

static const ::_pb::Message* const file_default_instances[] = {
  &::BatteryConfig::_Item_default_instance_._instance,
  &::BatteryConfig::_Attributes_default_instance_._instance,
  &::BatteryConfig::_Attributes_balance_default_instance_._instance,
  &::BatteryConfig::_Attributes_DIDO_default_instance_._instance,
  &::BatteryConfig::_Attributes_SOX_default_instance_._instance,
  &::BatteryConfig::_Attributes_other_default_instance_._instance,
  &::BatteryConfig::_Attributes_alert_value_default_instance_._instance,
  &::BatteryConfig::_Attributes_alert_delay_default_instance_._instance,
  &::BatteryConfig::_Attributes_alert_release_value_default_instance_._instance,
  &::BatteryConfig::_Attributes_alert_release_delay_default_instance_._instance,
  &::BatteryConfig::_Attributes_alert_dropcurr_rate_default_instance_._instance,
  &::BatteryConfig::_Attributes_alert_solve_measure_default_instance_._instance,
};

const char descriptor_table_protodef_battery_2eproto[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) =
  "\n\rbattery.proto\022\rBatteryConfig\"\363\005\n\004Item\022"
  "+\n\010ItemAttr\030\001 \003(\0132\031.BatteryConfig.Attrib"
  "utes\022;\n\020ItemAttr_balance\030\002 \003(\0132!.Battery"
  "Config.Attributes_balance\0225\n\rItemAttr_DI"
  "DO\030\003 \003(\0132\036.BatteryConfig.Attributes_DIDO"
  "\0223\n\014ItemAttr_SOX\030\004 \003(\0132\035.BatteryConfig.A"
  "ttributes_SOX\0227\n\016ItemAttr_other\030\005 \003(\0132\037."
  "BatteryConfig.Attributes_other\022C\n\024ItemAt"
  "tr_alert_value\030\006 \003(\0132%.BatteryConfig.Att"
  "ributes_alert_value\022C\n\024ItemAttr_alert_de"
  "lay\030\007 \003(\0132%.BatteryConfig.Attributes_ale"
  "rt_delay\022S\n\034ItemAttr_alert_release_value"
  "\030\010 \003(\0132-.BatteryConfig.Attributes_alert_"
  "release_value\022S\n\034ItemAttr_alert_release_"
  "delay\030\t \003(\0132-.BatteryConfig.Attributes_a"
  "lert_release_delay\022S\n\034ItemAttr_alert_dro"
  "pcurr_rate\030\n \003(\0132-.BatteryConfig.Attribu"
  "tes_alert_dropcurr_rate\022S\n\034ItemAttr_aler"
  "t_solve_measure\030\013 \003(\0132-.BatteryConfig.At"
  "tributes_alert_solve_measure\"Y\n\nAttribut"
  "es\022\014\n\004name\030\001 \001(\t\022\014\n\004addr\030\002 \001(\005\022\r\n\005value\030"
  "\003 \001(\005\022\r\n\005scale\030\004 \001(\002\022\021\n\tintroduce\030\005 \001(\t\""
  "a\n\022Attributes_balance\022\014\n\004name\030\001 \001(\t\022\014\n\004a"
  "ddr\030\002 \001(\005\022\r\n\005value\030\003 \001(\005\022\r\n\005scale\030\004 \001(\002\022"
  "\021\n\tintroduce\030\005 \001(\t\"^\n\017Attributes_DIDO\022\014\n"
  "\004name\030\001 \001(\t\022\014\n\004addr\030\002 \001(\005\022\r\n\005value\030\003 \001(\005"
  "\022\r\n\005scale\030\004 \001(\002\022\021\n\tintroduce\030\005 \001(\t\"]\n\016At"
  "tributes_SOX\022\014\n\004name\030\001 \001(\t\022\014\n\004addr\030\002 \001(\005"
  "\022\r\n\005value\030\003 \001(\005\022\r\n\005scale\030\004 \001(\002\022\021\n\tintrod"
  "uce\030\005 \001(\t\"_\n\020Attributes_other\022\014\n\004name\030\001 "
  "\001(\t\022\014\n\004addr\030\002 \001(\005\022\r\n\005value\030\003 \001(\005\022\r\n\005scal"
  "e\030\004 \001(\002\022\021\n\tintroduce\030\005 \001(\t\"e\n\026Attributes"
  "_alert_value\022\014\n\004name\030\001 \001(\t\022\014\n\004addr\030\002 \001(\005"
  "\022\r\n\005value\030\003 \001(\005\022\r\n\005scale\030\004 \001(\002\022\021\n\tintrod"
  "uce\030\005 \001(\t\"e\n\026Attributes_alert_delay\022\014\n\004n"
  "ame\030\001 \001(\t\022\014\n\004addr\030\002 \001(\005\022\r\n\005value\030\003 \001(\005\022\r"
  "\n\005scale\030\004 \001(\002\022\021\n\tintroduce\030\005 \001(\t\"m\n\036Attr"
  "ibutes_alert_release_value\022\014\n\004name\030\001 \001(\t"
  "\022\014\n\004addr\030\002 \001(\005\022\r\n\005value\030\003 \001(\005\022\r\n\005scale\030\004"
  " \001(\002\022\021\n\tintroduce\030\005 \001(\t\"m\n\036Attributes_al"
  "ert_release_delay\022\014\n\004name\030\001 \001(\t\022\014\n\004addr\030"
  "\002 \001(\005\022\r\n\005value\030\003 \001(\005\022\r\n\005scale\030\004 \001(\002\022\021\n\ti"
  "ntroduce\030\005 \001(\t\"m\n\036Attributes_alert_dropc"
  "urr_rate\022\014\n\004name\030\001 \001(\t\022\014\n\004addr\030\002 \001(\005\022\r\n\005"
  "value\030\003 \001(\005\022\r\n\005scale\030\004 \001(\002\022\021\n\tintroduce\030"
  "\005 \001(\t\"m\n\036Attributes_alert_solve_measure\022"
  "\014\n\004name\030\001 \001(\t\022\014\n\004addr\030\002 \001(\005\022\r\n\005value\030\003 \001"
  "(\005\022\r\n\005scale\030\004 \001(\002\022\021\n\tintroduce\030\005 \001(\tb\006pr"
  "oto3"
  ;
static ::_pbi::once_flag descriptor_table_battery_2eproto_once;
const ::_pbi::DescriptorTable descriptor_table_battery_2eproto = {
    false, false, 1924, descriptor_table_protodef_battery_2eproto,
    "battery.proto",
    &descriptor_table_battery_2eproto_once, nullptr, 0, 12,
    schemas, file_default_instances, TableStruct_battery_2eproto::offsets,
    file_level_metadata_battery_2eproto, file_level_enum_descriptors_battery_2eproto,
    file_level_service_descriptors_battery_2eproto,
};
PROTOBUF_ATTRIBUTE_WEAK const ::_pbi::DescriptorTable* descriptor_table_battery_2eproto_getter() {
  return &descriptor_table_battery_2eproto;
}

// Force running AddDescriptors() at dynamic initialization time.
PROTOBUF_ATTRIBUTE_INIT_PRIORITY2 static ::_pbi::AddDescriptorsRunner dynamic_init_dummy_battery_2eproto(&descriptor_table_battery_2eproto);
namespace BatteryConfig {

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

class Item::_Internal {
 public:
};

Item::Item(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                         bool is_message_owned)
  : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned) {
  SharedCtor(arena, is_message_owned);
  // @@protoc_insertion_point(arena_constructor:BatteryConfig.Item)
}
Item::Item(const Item& from)
  : ::PROTOBUF_NAMESPACE_ID::Message() {
  Item* const _this = this; (void)_this;
  new (&_impl_) Impl_{
      decltype(_impl_.itemattr_){from._impl_.itemattr_}
    , decltype(_impl_.itemattr_balance_){from._impl_.itemattr_balance_}
    , decltype(_impl_.itemattr_dido_){from._impl_.itemattr_dido_}
    , decltype(_impl_.itemattr_sox_){from._impl_.itemattr_sox_}
    , decltype(_impl_.itemattr_other_){from._impl_.itemattr_other_}
    , decltype(_impl_.itemattr_alert_value_){from._impl_.itemattr_alert_value_}
    , decltype(_impl_.itemattr_alert_delay_){from._impl_.itemattr_alert_delay_}
    , decltype(_impl_.itemattr_alert_release_value_){from._impl_.itemattr_alert_release_value_}
    , decltype(_impl_.itemattr_alert_release_delay_){from._impl_.itemattr_alert_release_delay_}
    , decltype(_impl_.itemattr_alert_dropcurr_rate_){from._impl_.itemattr_alert_dropcurr_rate_}
    , decltype(_impl_.itemattr_alert_solve_measure_){from._impl_.itemattr_alert_solve_measure_}
    , /*decltype(_impl_._cached_size_)*/{}};

  _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
  // @@protoc_insertion_point(copy_constructor:BatteryConfig.Item)
}

inline void Item::SharedCtor(
    ::_pb::Arena* arena, bool is_message_owned) {
  (void)arena;
  (void)is_message_owned;
  new (&_impl_) Impl_{
      decltype(_impl_.itemattr_){arena}
    , decltype(_impl_.itemattr_balance_){arena}
    , decltype(_impl_.itemattr_dido_){arena}
    , decltype(_impl_.itemattr_sox_){arena}
    , decltype(_impl_.itemattr_other_){arena}
    , decltype(_impl_.itemattr_alert_value_){arena}
    , decltype(_impl_.itemattr_alert_delay_){arena}
    , decltype(_impl_.itemattr_alert_release_value_){arena}
    , decltype(_impl_.itemattr_alert_release_delay_){arena}
    , decltype(_impl_.itemattr_alert_dropcurr_rate_){arena}
    , decltype(_impl_.itemattr_alert_solve_measure_){arena}
    , /*decltype(_impl_._cached_size_)*/{}
  };
}

Item::~Item() {
  // @@protoc_insertion_point(destructor:BatteryConfig.Item)
  if (auto *arena = _internal_metadata_.DeleteReturnArena<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>()) {
  (void)arena;
    return;
  }
  SharedDtor();
}

inline void Item::SharedDtor() {
  GOOGLE_DCHECK(GetArenaForAllocation() == nullptr);
  _impl_.itemattr_.~RepeatedPtrField();
  _impl_.itemattr_balance_.~RepeatedPtrField();
  _impl_.itemattr_dido_.~RepeatedPtrField();
  _impl_.itemattr_sox_.~RepeatedPtrField();
  _impl_.itemattr_other_.~RepeatedPtrField();
  _impl_.itemattr_alert_value_.~RepeatedPtrField();
  _impl_.itemattr_alert_delay_.~RepeatedPtrField();
  _impl_.itemattr_alert_release_value_.~RepeatedPtrField();
  _impl_.itemattr_alert_release_delay_.~RepeatedPtrField();
  _impl_.itemattr_alert_dropcurr_rate_.~RepeatedPtrField();
  _impl_.itemattr_alert_solve_measure_.~RepeatedPtrField();
}

void Item::SetCachedSize(int size) const {
  _impl_._cached_size_.Set(size);
}

void Item::Clear() {
// @@protoc_insertion_point(message_clear_start:BatteryConfig.Item)
  uint32_t cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  _impl_.itemattr_.Clear();
  _impl_.itemattr_balance_.Clear();
  _impl_.itemattr_dido_.Clear();
  _impl_.itemattr_sox_.Clear();
  _impl_.itemattr_other_.Clear();
  _impl_.itemattr_alert_value_.Clear();
  _impl_.itemattr_alert_delay_.Clear();
  _impl_.itemattr_alert_release_value_.Clear();
  _impl_.itemattr_alert_release_delay_.Clear();
  _impl_.itemattr_alert_dropcurr_rate_.Clear();
  _impl_.itemattr_alert_solve_measure_.Clear();
  _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
}

const char* Item::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) {
#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  while (!ctx->Done(&ptr)) {
    uint32_t tag;
    ptr = ::_pbi::ReadTag(ptr, &tag);
    switch (tag >> 3) {
      // repeated .BatteryConfig.Attributes ItemAttr = 1;
      case 1:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 10)) {
          ptr -= 1;
          do {
            ptr += 1;
            ptr = ctx->ParseMessage(_internal_add_itemattr(), ptr);
            CHK_(ptr);
            if (!ctx->DataAvailable(ptr)) break;
          } while (::PROTOBUF_NAMESPACE_ID::internal::ExpectTag<10>(ptr));
        } else
          goto handle_unusual;
        continue;
      // repeated .BatteryConfig.Attributes_balance ItemAttr_balance = 2;
      case 2:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 18)) {
          ptr -= 1;
          do {
            ptr += 1;
            ptr = ctx->ParseMessage(_internal_add_itemattr_balance(), ptr);
            CHK_(ptr);
            if (!ctx->DataAvailable(ptr)) break;
          } while (::PROTOBUF_NAMESPACE_ID::internal::ExpectTag<18>(ptr));
        } else
          goto handle_unusual;
        continue;
      // repeated .BatteryConfig.Attributes_DIDO ItemAttr_DIDO = 3;
      case 3:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 26)) {
          ptr -= 1;
          do {
            ptr += 1;
            ptr = ctx->ParseMessage(_internal_add_itemattr_dido(), ptr);
            CHK_(ptr);
            if (!ctx->DataAvailable(ptr)) break;
          } while (::PROTOBUF_NAMESPACE_ID::internal::ExpectTag<26>(ptr));
        } else
          goto handle_unusual;
        continue;
      // repeated .BatteryConfig.Attributes_SOX ItemAttr_SOX = 4;
      case 4:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 34)) {
          ptr -= 1;
          do {
            ptr += 1;
            ptr = ctx->ParseMessage(_internal_add_itemattr_sox(), ptr);
            CHK_(ptr);
            if (!ctx->DataAvailable(ptr)) break;
          } while (::PROTOBUF_NAMESPACE_ID::internal::ExpectTag<34>(ptr));
        } else
          goto handle_unusual;
        continue;
      // repeated .BatteryConfig.Attributes_other ItemAttr_other = 5;
      case 5:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 42)) {
          ptr -= 1;
          do {
            ptr += 1;
            ptr = ctx->ParseMessage(_internal_add_itemattr_other(), ptr);
            CHK_(ptr);
            if (!ctx->DataAvailable(ptr)) break;
          } while (::PROTOBUF_NAMESPACE_ID::internal::ExpectTag<42>(ptr));
        } else
          goto handle_unusual;
        continue;
      // repeated .BatteryConfig.Attributes_alert_value ItemAttr_alert_value = 6;
      case 6:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 50)) {
          ptr -= 1;
          do {
            ptr += 1;
            ptr = ctx->ParseMessage(_internal_add_itemattr_alert_value(), ptr);
            CHK_(ptr);
            if (!ctx->DataAvailable(ptr)) break;
          } while (::PROTOBUF_NAMESPACE_ID::internal::ExpectTag<50>(ptr));
        } else
          goto handle_unusual;
        continue;
      // repeated .BatteryConfig.Attributes_alert_delay ItemAttr_alert_delay = 7;
      case 7:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 58)) {
          ptr -= 1;
          do {
            ptr += 1;
            ptr = ctx->ParseMessage(_internal_add_itemattr_alert_delay(), ptr);
            CHK_(ptr);
            if (!ctx->DataAvailable(ptr)) break;
          } while (::PROTOBUF_NAMESPACE_ID::internal::ExpectTag<58>(ptr));
        } else
          goto handle_unusual;
        continue;
      // repeated .BatteryConfig.Attributes_alert_release_value ItemAttr_alert_release_value = 8;
      case 8:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 66)) {
          ptr -= 1;
          do {
            ptr += 1;
            ptr = ctx->ParseMessage(_internal_add_itemattr_alert_release_value(), ptr);
            CHK_(ptr);
            if (!ctx->DataAvailable(ptr)) break;
          } while (::PROTOBUF_NAMESPACE_ID::internal::ExpectTag<66>(ptr));
        } else
          goto handle_unusual;
        continue;
      // repeated .BatteryConfig.Attributes_alert_release_delay ItemAttr_alert_release_delay = 9;
      case 9:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 74)) {
          ptr -= 1;
          do {
            ptr += 1;
            ptr = ctx->ParseMessage(_internal_add_itemattr_alert_release_delay(), ptr);
            CHK_(ptr);
            if (!ctx->DataAvailable(ptr)) break;
          } while (::PROTOBUF_NAMESPACE_ID::internal::ExpectTag<74>(ptr));
        } else
          goto handle_unusual;
        continue;
      // repeated .BatteryConfig.Attributes_alert_dropcurr_rate ItemAttr_alert_dropcurr_rate = 10;
      case 10:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 82)) {
          ptr -= 1;
          do {
            ptr += 1;
            ptr = ctx->ParseMessage(_internal_add_itemattr_alert_dropcurr_rate(), ptr);
            CHK_(ptr);
            if (!ctx->DataAvailable(ptr)) break;
          } while (::PROTOBUF_NAMESPACE_ID::internal::ExpectTag<82>(ptr));
        } else
          goto handle_unusual;
        continue;
      // repeated .BatteryConfig.Attributes_alert_solve_measure ItemAttr_alert_solve_measure = 11;
      case 11:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 90)) {
          ptr -= 1;
          do {
            ptr += 1;
            ptr = ctx->ParseMessage(_internal_add_itemattr_alert_solve_measure(), ptr);
            CHK_(ptr);
            if (!ctx->DataAvailable(ptr)) break;
          } while (::PROTOBUF_NAMESPACE_ID::internal::ExpectTag<90>(ptr));
        } else
          goto handle_unusual;
        continue;
      default:
        goto handle_unusual;
    }  // switch
  handle_unusual:
    if ((tag == 0) || ((tag & 7) == 4)) {
      CHK_(ptr);
      ctx->SetLastTag(tag);
      goto message_done;
    }
    ptr = UnknownFieldParse(
        tag,
        _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(),
        ptr, ctx);
    CHK_(ptr != nullptr);
  }  // while
message_done:
  return ptr;
failure:
  ptr = nullptr;
  goto message_done;
#undef CHK_
}

uint8_t* Item::_InternalSerialize(
    uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const {
  // @@protoc_insertion_point(serialize_to_array_start:BatteryConfig.Item)
  uint32_t cached_has_bits = 0;
  (void) cached_has_bits;

  // repeated .BatteryConfig.Attributes ItemAttr = 1;
  for (unsigned i = 0,
      n = static_cast<unsigned>(this->_internal_itemattr_size()); i < n; i++) {
    const auto& repfield = this->_internal_itemattr(i);
    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
        InternalWriteMessage(1, repfield, repfield.GetCachedSize(), target, stream);
  }

  // repeated .BatteryConfig.Attributes_balance ItemAttr_balance = 2;
  for (unsigned i = 0,
      n = static_cast<unsigned>(this->_internal_itemattr_balance_size()); i < n; i++) {
    const auto& repfield = this->_internal_itemattr_balance(i);
    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
        InternalWriteMessage(2, repfield, repfield.GetCachedSize(), target, stream);
  }

  // repeated .BatteryConfig.Attributes_DIDO ItemAttr_DIDO = 3;
  for (unsigned i = 0,
      n = static_cast<unsigned>(this->_internal_itemattr_dido_size()); i < n; i++) {
    const auto& repfield = this->_internal_itemattr_dido(i);
    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
        InternalWriteMessage(3, repfield, repfield.GetCachedSize(), target, stream);
  }

  // repeated .BatteryConfig.Attributes_SOX ItemAttr_SOX = 4;
  for (unsigned i = 0,
      n = static_cast<unsigned>(this->_internal_itemattr_sox_size()); i < n; i++) {
    const auto& repfield = this->_internal_itemattr_sox(i);
    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
        InternalWriteMessage(4, repfield, repfield.GetCachedSize(), target, stream);
  }

  // repeated .BatteryConfig.Attributes_other ItemAttr_other = 5;
  for (unsigned i = 0,
      n = static_cast<unsigned>(this->_internal_itemattr_other_size()); i < n; i++) {
    const auto& repfield = this->_internal_itemattr_other(i);
    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
        InternalWriteMessage(5, repfield, repfield.GetCachedSize(), target, stream);
  }

  // repeated .BatteryConfig.Attributes_alert_value ItemAttr_alert_value = 6;
  for (unsigned i = 0,
      n = static_cast<unsigned>(this->_internal_itemattr_alert_value_size()); i < n; i++) {
    const auto& repfield = this->_internal_itemattr_alert_value(i);
    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
        InternalWriteMessage(6, repfield, repfield.GetCachedSize(), target, stream);
  }

  // repeated .BatteryConfig.Attributes_alert_delay ItemAttr_alert_delay = 7;
  for (unsigned i = 0,
      n = static_cast<unsigned>(this->_internal_itemattr_alert_delay_size()); i < n; i++) {
    const auto& repfield = this->_internal_itemattr_alert_delay(i);
    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
        InternalWriteMessage(7, repfield, repfield.GetCachedSize(), target, stream);
  }

  // repeated .BatteryConfig.Attributes_alert_release_value ItemAttr_alert_release_value = 8;
  for (unsigned i = 0,
      n = static_cast<unsigned>(this->_internal_itemattr_alert_release_value_size()); i < n; i++) {
    const auto& repfield = this->_internal_itemattr_alert_release_value(i);
    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
        InternalWriteMessage(8, repfield, repfield.GetCachedSize(), target, stream);
  }

  // repeated .BatteryConfig.Attributes_alert_release_delay ItemAttr_alert_release_delay = 9;
  for (unsigned i = 0,
      n = static_cast<unsigned>(this->_internal_itemattr_alert_release_delay_size()); i < n; i++) {
    const auto& repfield = this->_internal_itemattr_alert_release_delay(i);
    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
        InternalWriteMessage(9, repfield, repfield.GetCachedSize(), target, stream);
  }

  // repeated .BatteryConfig.Attributes_alert_dropcurr_rate ItemAttr_alert_dropcurr_rate = 10;
  for (unsigned i = 0,
      n = static_cast<unsigned>(this->_internal_itemattr_alert_dropcurr_rate_size()); i < n; i++) {
    const auto& repfield = this->_internal_itemattr_alert_dropcurr_rate(i);
    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
        InternalWriteMessage(10, repfield, repfield.GetCachedSize(), target, stream);
  }

  // repeated .BatteryConfig.Attributes_alert_solve_measure ItemAttr_alert_solve_measure = 11;
  for (unsigned i = 0,
      n = static_cast<unsigned>(this->_internal_itemattr_alert_solve_measure_size()); i < n; i++) {
    const auto& repfield = this->_internal_itemattr_alert_solve_measure(i);
    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
        InternalWriteMessage(11, repfield, repfield.GetCachedSize(), target, stream);
  }

  if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
    target = ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray(
        _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream);
  }
  // @@protoc_insertion_point(serialize_to_array_end:BatteryConfig.Item)
  return target;
}

size_t Item::ByteSizeLong() const {
// @@protoc_insertion_point(message_byte_size_start:BatteryConfig.Item)
  size_t total_size = 0;

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

  // repeated .BatteryConfig.Attributes ItemAttr = 1;
  total_size += 1UL * this->_internal_itemattr_size();
  for (const auto& msg : this->_impl_.itemattr_) {
    total_size +=
      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(msg);
  }

  // repeated .BatteryConfig.Attributes_balance ItemAttr_balance = 2;
  total_size += 1UL * this->_internal_itemattr_balance_size();
  for (const auto& msg : this->_impl_.itemattr_balance_) {
    total_size +=
      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(msg);
  }

  // repeated .BatteryConfig.Attributes_DIDO ItemAttr_DIDO = 3;
  total_size += 1UL * this->_internal_itemattr_dido_size();
  for (const auto& msg : this->_impl_.itemattr_dido_) {
    total_size +=
      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(msg);
  }

  // repeated .BatteryConfig.Attributes_SOX ItemAttr_SOX = 4;
  total_size += 1UL * this->_internal_itemattr_sox_size();
  for (const auto& msg : this->_impl_.itemattr_sox_) {
    total_size +=
      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(msg);
  }

  // repeated .BatteryConfig.Attributes_other ItemAttr_other = 5;
  total_size += 1UL * this->_internal_itemattr_other_size();
  for (const auto& msg : this->_impl_.itemattr_other_) {
    total_size +=
      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(msg);
  }

  // repeated .BatteryConfig.Attributes_alert_value ItemAttr_alert_value = 6;
  total_size += 1UL * this->_internal_itemattr_alert_value_size();
  for (const auto& msg : this->_impl_.itemattr_alert_value_) {
    total_size +=
      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(msg);
  }

  // repeated .BatteryConfig.Attributes_alert_delay ItemAttr_alert_delay = 7;
  total_size += 1UL * this->_internal_itemattr_alert_delay_size();
  for (const auto& msg : this->_impl_.itemattr_alert_delay_) {
    total_size +=
      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(msg);
  }

  // repeated .BatteryConfig.Attributes_alert_release_value ItemAttr_alert_release_value = 8;
  total_size += 1UL * this->_internal_itemattr_alert_release_value_size();
  for (const auto& msg : this->_impl_.itemattr_alert_release_value_) {
    total_size +=
      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(msg);
  }

  // repeated .BatteryConfig.Attributes_alert_release_delay ItemAttr_alert_release_delay = 9;
  total_size += 1UL * this->_internal_itemattr_alert_release_delay_size();
  for (const auto& msg : this->_impl_.itemattr_alert_release_delay_) {
    total_size +=
      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(msg);
  }

  // repeated .BatteryConfig.Attributes_alert_dropcurr_rate ItemAttr_alert_dropcurr_rate = 10;
  total_size += 1UL * this->_internal_itemattr_alert_dropcurr_rate_size();
  for (const auto& msg : this->_impl_.itemattr_alert_dropcurr_rate_) {
    total_size +=
      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(msg);
  }

  // repeated .BatteryConfig.Attributes_alert_solve_measure ItemAttr_alert_solve_measure = 11;
  total_size += 1UL * this->_internal_itemattr_alert_solve_measure_size();
  for (const auto& msg : this->_impl_.itemattr_alert_solve_measure_) {
    total_size +=
      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(msg);
  }

  return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_);
}

const ::PROTOBUF_NAMESPACE_ID::Message::ClassData Item::_class_data_ = {
    ::PROTOBUF_NAMESPACE_ID::Message::CopyWithSourceCheck,
    Item::MergeImpl
};
const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*Item::GetClassData() const { return &_class_data_; }


void Item::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg) {
  auto* const _this = static_cast<Item*>(&to_msg);
  auto& from = static_cast<const Item&>(from_msg);
  // @@protoc_insertion_point(class_specific_merge_from_start:BatteryConfig.Item)
  GOOGLE_DCHECK_NE(&from, _this);
  uint32_t cached_has_bits = 0;
  (void) cached_has_bits;

  _this->_impl_.itemattr_.MergeFrom(from._impl_.itemattr_);
  _this->_impl_.itemattr_balance_.MergeFrom(from._impl_.itemattr_balance_);
  _this->_impl_.itemattr_dido_.MergeFrom(from._impl_.itemattr_dido_);
  _this->_impl_.itemattr_sox_.MergeFrom(from._impl_.itemattr_sox_);
  _this->_impl_.itemattr_other_.MergeFrom(from._impl_.itemattr_other_);
  _this->_impl_.itemattr_alert_value_.MergeFrom(from._impl_.itemattr_alert_value_);
  _this->_impl_.itemattr_alert_delay_.MergeFrom(from._impl_.itemattr_alert_delay_);
  _this->_impl_.itemattr_alert_release_value_.MergeFrom(from._impl_.itemattr_alert_release_value_);
  _this->_impl_.itemattr_alert_release_delay_.MergeFrom(from._impl_.itemattr_alert_release_delay_);
  _this->_impl_.itemattr_alert_dropcurr_rate_.MergeFrom(from._impl_.itemattr_alert_dropcurr_rate_);
  _this->_impl_.itemattr_alert_solve_measure_.MergeFrom(from._impl_.itemattr_alert_solve_measure_);
  _this->_internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
}

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

bool Item::IsInitialized() const {
  return true;
}

void Item::InternalSwap(Item* other) {
  using std::swap;
  _internal_metadata_.InternalSwap(&other->_internal_metadata_);
  _impl_.itemattr_.InternalSwap(&other->_impl_.itemattr_);
  _impl_.itemattr_balance_.InternalSwap(&other->_impl_.itemattr_balance_);
  _impl_.itemattr_dido_.InternalSwap(&other->_impl_.itemattr_dido_);
  _impl_.itemattr_sox_.InternalSwap(&other->_impl_.itemattr_sox_);
  _impl_.itemattr_other_.InternalSwap(&other->_impl_.itemattr_other_);
  _impl_.itemattr_alert_value_.InternalSwap(&other->_impl_.itemattr_alert_value_);
  _impl_.itemattr_alert_delay_.InternalSwap(&other->_impl_.itemattr_alert_delay_);
  _impl_.itemattr_alert_release_value_.InternalSwap(&other->_impl_.itemattr_alert_release_value_);
  _impl_.itemattr_alert_release_delay_.InternalSwap(&other->_impl_.itemattr_alert_release_delay_);
  _impl_.itemattr_alert_dropcurr_rate_.InternalSwap(&other->_impl_.itemattr_alert_dropcurr_rate_);
  _impl_.itemattr_alert_solve_measure_.InternalSwap(&other->_impl_.itemattr_alert_solve_measure_);
}

::PROTOBUF_NAMESPACE_ID::Metadata Item::GetMetadata() const {
  return ::_pbi::AssignDescriptors(
      &descriptor_table_battery_2eproto_getter, &descriptor_table_battery_2eproto_once,
      file_level_metadata_battery_2eproto[0]);
}

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

class Attributes::_Internal {
 public:
};

Attributes::Attributes(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                         bool is_message_owned)
  : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned) {
  SharedCtor(arena, is_message_owned);
  // @@protoc_insertion_point(arena_constructor:BatteryConfig.Attributes)
}
Attributes::Attributes(const Attributes& from)
  : ::PROTOBUF_NAMESPACE_ID::Message() {
  Attributes* const _this = this; (void)_this;
  new (&_impl_) Impl_{
      decltype(_impl_.name_){}
    , decltype(_impl_.introduce_){}
    , decltype(_impl_.addr_){}
    , decltype(_impl_.value_){}
    , decltype(_impl_.scale_){}
    , /*decltype(_impl_._cached_size_)*/{}};

  _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
  _impl_.name_.InitDefault();
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
    _impl_.name_.Set("", GetArenaForAllocation());
  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
  if (!from._internal_name().empty()) {
    _this->_impl_.name_.Set(from._internal_name(), 
      _this->GetArenaForAllocation());
  }
  _impl_.introduce_.InitDefault();
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
    _impl_.introduce_.Set("", GetArenaForAllocation());
  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
  if (!from._internal_introduce().empty()) {
    _this->_impl_.introduce_.Set(from._internal_introduce(), 
      _this->GetArenaForAllocation());
  }
  ::memcpy(&_impl_.addr_, &from._impl_.addr_,
    static_cast<size_t>(reinterpret_cast<char*>(&_impl_.scale_) -
    reinterpret_cast<char*>(&_impl_.addr_)) + sizeof(_impl_.scale_));
  // @@protoc_insertion_point(copy_constructor:BatteryConfig.Attributes)
}

inline void Attributes::SharedCtor(
    ::_pb::Arena* arena, bool is_message_owned) {
  (void)arena;
  (void)is_message_owned;
  new (&_impl_) Impl_{
      decltype(_impl_.name_){}
    , decltype(_impl_.introduce_){}
    , decltype(_impl_.addr_){0}
    , decltype(_impl_.value_){0}
    , decltype(_impl_.scale_){0}
    , /*decltype(_impl_._cached_size_)*/{}
  };
  _impl_.name_.InitDefault();
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
    _impl_.name_.Set("", GetArenaForAllocation());
  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
  _impl_.introduce_.InitDefault();
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
    _impl_.introduce_.Set("", GetArenaForAllocation());
  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
}

Attributes::~Attributes() {
  // @@protoc_insertion_point(destructor:BatteryConfig.Attributes)
  if (auto *arena = _internal_metadata_.DeleteReturnArena<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>()) {
  (void)arena;
    return;
  }
  SharedDtor();
}

inline void Attributes::SharedDtor() {
  GOOGLE_DCHECK(GetArenaForAllocation() == nullptr);
  _impl_.name_.Destroy();
  _impl_.introduce_.Destroy();
}

void Attributes::SetCachedSize(int size) const {
  _impl_._cached_size_.Set(size);
}

void Attributes::Clear() {
// @@protoc_insertion_point(message_clear_start:BatteryConfig.Attributes)
  uint32_t cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  _impl_.name_.ClearToEmpty();
  _impl_.introduce_.ClearToEmpty();
  ::memset(&_impl_.addr_, 0, static_cast<size_t>(
      reinterpret_cast<char*>(&_impl_.scale_) -
      reinterpret_cast<char*>(&_impl_.addr_)) + sizeof(_impl_.scale_));
  _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
}

const char* Attributes::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) {
#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  while (!ctx->Done(&ptr)) {
    uint32_t tag;
    ptr = ::_pbi::ReadTag(ptr, &tag);
    switch (tag >> 3) {
      // string name = 1;
      case 1:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 10)) {
          auto str = _internal_mutable_name();
          ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
          CHK_(ptr);
          CHK_(::_pbi::VerifyUTF8(str, "BatteryConfig.Attributes.name"));
        } else
          goto handle_unusual;
        continue;
      // int32 addr = 2;
      case 2:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 16)) {
          _impl_.addr_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
          CHK_(ptr);
        } else
          goto handle_unusual;
        continue;
      // int32 value = 3;
      case 3:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 24)) {
          _impl_.value_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
          CHK_(ptr);
        } else
          goto handle_unusual;
        continue;
      // float scale = 4;
      case 4:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 37)) {
          _impl_.scale_ = ::PROTOBUF_NAMESPACE_ID::internal::UnalignedLoad<float>(ptr);
          ptr += sizeof(float);
        } else
          goto handle_unusual;
        continue;
      // string introduce = 5;
      case 5:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 42)) {
          auto str = _internal_mutable_introduce();
          ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
          CHK_(ptr);
          CHK_(::_pbi::VerifyUTF8(str, "BatteryConfig.Attributes.introduce"));
        } else
          goto handle_unusual;
        continue;
      default:
        goto handle_unusual;
    }  // switch
  handle_unusual:
    if ((tag == 0) || ((tag & 7) == 4)) {
      CHK_(ptr);
      ctx->SetLastTag(tag);
      goto message_done;
    }
    ptr = UnknownFieldParse(
        tag,
        _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(),
        ptr, ctx);
    CHK_(ptr != nullptr);
  }  // while
message_done:
  return ptr;
failure:
  ptr = nullptr;
  goto message_done;
#undef CHK_
}

uint8_t* Attributes::_InternalSerialize(
    uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const {
  // @@protoc_insertion_point(serialize_to_array_start:BatteryConfig.Attributes)
  uint32_t cached_has_bits = 0;
  (void) cached_has_bits;

  // string name = 1;
  if (!this->_internal_name().empty()) {
    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
      this->_internal_name().data(), static_cast<int>(this->_internal_name().length()),
      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
      "BatteryConfig.Attributes.name");
    target = stream->WriteStringMaybeAliased(
        1, this->_internal_name(), target);
  }

  // int32 addr = 2;
  if (this->_internal_addr() != 0) {
    target = stream->EnsureSpace(target);
    target = ::_pbi::WireFormatLite::WriteInt32ToArray(2, this->_internal_addr(), target);
  }

  // int32 value = 3;
  if (this->_internal_value() != 0) {
    target = stream->EnsureSpace(target);
    target = ::_pbi::WireFormatLite::WriteInt32ToArray(3, this->_internal_value(), target);
  }

  // float scale = 4;
  static_assert(sizeof(uint32_t) == sizeof(float), "Code assumes uint32_t and float are the same size.");
  float tmp_scale = this->_internal_scale();
  uint32_t raw_scale;
  memcpy(&raw_scale, &tmp_scale, sizeof(tmp_scale));
  if (raw_scale != 0) {
    target = stream->EnsureSpace(target);
    target = ::_pbi::WireFormatLite::WriteFloatToArray(4, this->_internal_scale(), target);
  }

  // string introduce = 5;
  if (!this->_internal_introduce().empty()) {
    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
      this->_internal_introduce().data(), static_cast<int>(this->_internal_introduce().length()),
      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
      "BatteryConfig.Attributes.introduce");
    target = stream->WriteStringMaybeAliased(
        5, this->_internal_introduce(), target);
  }

  if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
    target = ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray(
        _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream);
  }
  // @@protoc_insertion_point(serialize_to_array_end:BatteryConfig.Attributes)
  return target;
}

size_t Attributes::ByteSizeLong() const {
// @@protoc_insertion_point(message_byte_size_start:BatteryConfig.Attributes)
  size_t total_size = 0;

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

  // string name = 1;
  if (!this->_internal_name().empty()) {
    total_size += 1 +
      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
        this->_internal_name());
  }

  // string introduce = 5;
  if (!this->_internal_introduce().empty()) {
    total_size += 1 +
      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
        this->_internal_introduce());
  }

  // int32 addr = 2;
  if (this->_internal_addr() != 0) {
    total_size += ::_pbi::WireFormatLite::Int32SizePlusOne(this->_internal_addr());
  }

  // int32 value = 3;
  if (this->_internal_value() != 0) {
    total_size += ::_pbi::WireFormatLite::Int32SizePlusOne(this->_internal_value());
  }

  // float scale = 4;
  static_assert(sizeof(uint32_t) == sizeof(float), "Code assumes uint32_t and float are the same size.");
  float tmp_scale = this->_internal_scale();
  uint32_t raw_scale;
  memcpy(&raw_scale, &tmp_scale, sizeof(tmp_scale));
  if (raw_scale != 0) {
    total_size += 1 + 4;
  }

  return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_);
}

const ::PROTOBUF_NAMESPACE_ID::Message::ClassData Attributes::_class_data_ = {
    ::PROTOBUF_NAMESPACE_ID::Message::CopyWithSourceCheck,
    Attributes::MergeImpl
};
const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*Attributes::GetClassData() const { return &_class_data_; }


void Attributes::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg) {
  auto* const _this = static_cast<Attributes*>(&to_msg);
  auto& from = static_cast<const Attributes&>(from_msg);
  // @@protoc_insertion_point(class_specific_merge_from_start:BatteryConfig.Attributes)
  GOOGLE_DCHECK_NE(&from, _this);
  uint32_t cached_has_bits = 0;
  (void) cached_has_bits;

  if (!from._internal_name().empty()) {
    _this->_internal_set_name(from._internal_name());
  }
  if (!from._internal_introduce().empty()) {
    _this->_internal_set_introduce(from._internal_introduce());
  }
  if (from._internal_addr() != 0) {
    _this->_internal_set_addr(from._internal_addr());
  }
  if (from._internal_value() != 0) {
    _this->_internal_set_value(from._internal_value());
  }
  static_assert(sizeof(uint32_t) == sizeof(float), "Code assumes uint32_t and float are the same size.");
  float tmp_scale = from._internal_scale();
  uint32_t raw_scale;
  memcpy(&raw_scale, &tmp_scale, sizeof(tmp_scale));
  if (raw_scale != 0) {
    _this->_internal_set_scale(from._internal_scale());
  }
  _this->_internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
}

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

bool Attributes::IsInitialized() const {
  return true;
}

void Attributes::InternalSwap(Attributes* other) {
  using std::swap;
  auto* lhs_arena = GetArenaForAllocation();
  auto* rhs_arena = other->GetArenaForAllocation();
  _internal_metadata_.InternalSwap(&other->_internal_metadata_);
  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
      &_impl_.name_, lhs_arena,
      &other->_impl_.name_, rhs_arena
  );
  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
      &_impl_.introduce_, lhs_arena,
      &other->_impl_.introduce_, rhs_arena
  );
  ::PROTOBUF_NAMESPACE_ID::internal::memswap<
      PROTOBUF_FIELD_OFFSET(Attributes, _impl_.scale_)
      + sizeof(Attributes::_impl_.scale_)
      - PROTOBUF_FIELD_OFFSET(Attributes, _impl_.addr_)>(
          reinterpret_cast<char*>(&_impl_.addr_),
          reinterpret_cast<char*>(&other->_impl_.addr_));
}

::PROTOBUF_NAMESPACE_ID::Metadata Attributes::GetMetadata() const {
  return ::_pbi::AssignDescriptors(
      &descriptor_table_battery_2eproto_getter, &descriptor_table_battery_2eproto_once,
      file_level_metadata_battery_2eproto[1]);
}

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

class Attributes_balance::_Internal {
 public:
};

Attributes_balance::Attributes_balance(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                         bool is_message_owned)
  : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned) {
  SharedCtor(arena, is_message_owned);
  // @@protoc_insertion_point(arena_constructor:BatteryConfig.Attributes_balance)
}
Attributes_balance::Attributes_balance(const Attributes_balance& from)
  : ::PROTOBUF_NAMESPACE_ID::Message() {
  Attributes_balance* const _this = this; (void)_this;
  new (&_impl_) Impl_{
      decltype(_impl_.name_){}
    , decltype(_impl_.introduce_){}
    , decltype(_impl_.addr_){}
    , decltype(_impl_.value_){}
    , decltype(_impl_.scale_){}
    , /*decltype(_impl_._cached_size_)*/{}};

  _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
  _impl_.name_.InitDefault();
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
    _impl_.name_.Set("", GetArenaForAllocation());
  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
  if (!from._internal_name().empty()) {
    _this->_impl_.name_.Set(from._internal_name(), 
      _this->GetArenaForAllocation());
  }
  _impl_.introduce_.InitDefault();
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
    _impl_.introduce_.Set("", GetArenaForAllocation());
  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
  if (!from._internal_introduce().empty()) {
    _this->_impl_.introduce_.Set(from._internal_introduce(), 
      _this->GetArenaForAllocation());
  }
  ::memcpy(&_impl_.addr_, &from._impl_.addr_,
    static_cast<size_t>(reinterpret_cast<char*>(&_impl_.scale_) -
    reinterpret_cast<char*>(&_impl_.addr_)) + sizeof(_impl_.scale_));
  // @@protoc_insertion_point(copy_constructor:BatteryConfig.Attributes_balance)
}

inline void Attributes_balance::SharedCtor(
    ::_pb::Arena* arena, bool is_message_owned) {
  (void)arena;
  (void)is_message_owned;
  new (&_impl_) Impl_{
      decltype(_impl_.name_){}
    , decltype(_impl_.introduce_){}
    , decltype(_impl_.addr_){0}
    , decltype(_impl_.value_){0}
    , decltype(_impl_.scale_){0}
    , /*decltype(_impl_._cached_size_)*/{}
  };
  _impl_.name_.InitDefault();
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
    _impl_.name_.Set("", GetArenaForAllocation());
  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
  _impl_.introduce_.InitDefault();
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
    _impl_.introduce_.Set("", GetArenaForAllocation());
  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
}

Attributes_balance::~Attributes_balance() {
  // @@protoc_insertion_point(destructor:BatteryConfig.Attributes_balance)
  if (auto *arena = _internal_metadata_.DeleteReturnArena<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>()) {
  (void)arena;
    return;
  }
  SharedDtor();
}

inline void Attributes_balance::SharedDtor() {
  GOOGLE_DCHECK(GetArenaForAllocation() == nullptr);
  _impl_.name_.Destroy();
  _impl_.introduce_.Destroy();
}

void Attributes_balance::SetCachedSize(int size) const {
  _impl_._cached_size_.Set(size);
}

void Attributes_balance::Clear() {
// @@protoc_insertion_point(message_clear_start:BatteryConfig.Attributes_balance)
  uint32_t cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  _impl_.name_.ClearToEmpty();
  _impl_.introduce_.ClearToEmpty();
  ::memset(&_impl_.addr_, 0, static_cast<size_t>(
      reinterpret_cast<char*>(&_impl_.scale_) -
      reinterpret_cast<char*>(&_impl_.addr_)) + sizeof(_impl_.scale_));
  _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
}

const char* Attributes_balance::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) {
#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  while (!ctx->Done(&ptr)) {
    uint32_t tag;
    ptr = ::_pbi::ReadTag(ptr, &tag);
    switch (tag >> 3) {
      // string name = 1;
      case 1:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 10)) {
          auto str = _internal_mutable_name();
          ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
          CHK_(ptr);
          CHK_(::_pbi::VerifyUTF8(str, "BatteryConfig.Attributes_balance.name"));
        } else
          goto handle_unusual;
        continue;
      // int32 addr = 2;
      case 2:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 16)) {
          _impl_.addr_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
          CHK_(ptr);
        } else
          goto handle_unusual;
        continue;
      // int32 value = 3;
      case 3:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 24)) {
          _impl_.value_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
          CHK_(ptr);
        } else
          goto handle_unusual;
        continue;
      // float scale = 4;
      case 4:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 37)) {
          _impl_.scale_ = ::PROTOBUF_NAMESPACE_ID::internal::UnalignedLoad<float>(ptr);
          ptr += sizeof(float);
        } else
          goto handle_unusual;
        continue;
      // string introduce = 5;
      case 5:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 42)) {
          auto str = _internal_mutable_introduce();
          ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
          CHK_(ptr);
          CHK_(::_pbi::VerifyUTF8(str, "BatteryConfig.Attributes_balance.introduce"));
        } else
          goto handle_unusual;
        continue;
      default:
        goto handle_unusual;
    }  // switch
  handle_unusual:
    if ((tag == 0) || ((tag & 7) == 4)) {
      CHK_(ptr);
      ctx->SetLastTag(tag);
      goto message_done;
    }
    ptr = UnknownFieldParse(
        tag,
        _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(),
        ptr, ctx);
    CHK_(ptr != nullptr);
  }  // while
message_done:
  return ptr;
failure:
  ptr = nullptr;
  goto message_done;
#undef CHK_
}

uint8_t* Attributes_balance::_InternalSerialize(
    uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const {
  // @@protoc_insertion_point(serialize_to_array_start:BatteryConfig.Attributes_balance)
  uint32_t cached_has_bits = 0;
  (void) cached_has_bits;

  // string name = 1;
  if (!this->_internal_name().empty()) {
    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
      this->_internal_name().data(), static_cast<int>(this->_internal_name().length()),
      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
      "BatteryConfig.Attributes_balance.name");
    target = stream->WriteStringMaybeAliased(
        1, this->_internal_name(), target);
  }

  // int32 addr = 2;
  if (this->_internal_addr() != 0) {
    target = stream->EnsureSpace(target);
    target = ::_pbi::WireFormatLite::WriteInt32ToArray(2, this->_internal_addr(), target);
  }

  // int32 value = 3;
  if (this->_internal_value() != 0) {
    target = stream->EnsureSpace(target);
    target = ::_pbi::WireFormatLite::WriteInt32ToArray(3, this->_internal_value(), target);
  }

  // float scale = 4;
  static_assert(sizeof(uint32_t) == sizeof(float), "Code assumes uint32_t and float are the same size.");
  float tmp_scale = this->_internal_scale();
  uint32_t raw_scale;
  memcpy(&raw_scale, &tmp_scale, sizeof(tmp_scale));
  if (raw_scale != 0) {
    target = stream->EnsureSpace(target);
    target = ::_pbi::WireFormatLite::WriteFloatToArray(4, this->_internal_scale(), target);
  }

  // string introduce = 5;
  if (!this->_internal_introduce().empty()) {
    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
      this->_internal_introduce().data(), static_cast<int>(this->_internal_introduce().length()),
      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
      "BatteryConfig.Attributes_balance.introduce");
    target = stream->WriteStringMaybeAliased(
        5, this->_internal_introduce(), target);
  }

  if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
    target = ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray(
        _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream);
  }
  // @@protoc_insertion_point(serialize_to_array_end:BatteryConfig.Attributes_balance)
  return target;
}

size_t Attributes_balance::ByteSizeLong() const {
// @@protoc_insertion_point(message_byte_size_start:BatteryConfig.Attributes_balance)
  size_t total_size = 0;

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

  // string name = 1;
  if (!this->_internal_name().empty()) {
    total_size += 1 +
      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
        this->_internal_name());
  }

  // string introduce = 5;
  if (!this->_internal_introduce().empty()) {
    total_size += 1 +
      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
        this->_internal_introduce());
  }

  // int32 addr = 2;
  if (this->_internal_addr() != 0) {
    total_size += ::_pbi::WireFormatLite::Int32SizePlusOne(this->_internal_addr());
  }

  // int32 value = 3;
  if (this->_internal_value() != 0) {
    total_size += ::_pbi::WireFormatLite::Int32SizePlusOne(this->_internal_value());
  }

  // float scale = 4;
  static_assert(sizeof(uint32_t) == sizeof(float), "Code assumes uint32_t and float are the same size.");
  float tmp_scale = this->_internal_scale();
  uint32_t raw_scale;
  memcpy(&raw_scale, &tmp_scale, sizeof(tmp_scale));
  if (raw_scale != 0) {
    total_size += 1 + 4;
  }

  return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_);
}

const ::PROTOBUF_NAMESPACE_ID::Message::ClassData Attributes_balance::_class_data_ = {
    ::PROTOBUF_NAMESPACE_ID::Message::CopyWithSourceCheck,
    Attributes_balance::MergeImpl
};
const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*Attributes_balance::GetClassData() const { return &_class_data_; }


void Attributes_balance::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg) {
  auto* const _this = static_cast<Attributes_balance*>(&to_msg);
  auto& from = static_cast<const Attributes_balance&>(from_msg);
  // @@protoc_insertion_point(class_specific_merge_from_start:BatteryConfig.Attributes_balance)
  GOOGLE_DCHECK_NE(&from, _this);
  uint32_t cached_has_bits = 0;
  (void) cached_has_bits;

  if (!from._internal_name().empty()) {
    _this->_internal_set_name(from._internal_name());
  }
  if (!from._internal_introduce().empty()) {
    _this->_internal_set_introduce(from._internal_introduce());
  }
  if (from._internal_addr() != 0) {
    _this->_internal_set_addr(from._internal_addr());
  }
  if (from._internal_value() != 0) {
    _this->_internal_set_value(from._internal_value());
  }
  static_assert(sizeof(uint32_t) == sizeof(float), "Code assumes uint32_t and float are the same size.");
  float tmp_scale = from._internal_scale();
  uint32_t raw_scale;
  memcpy(&raw_scale, &tmp_scale, sizeof(tmp_scale));
  if (raw_scale != 0) {
    _this->_internal_set_scale(from._internal_scale());
  }
  _this->_internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
}

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

bool Attributes_balance::IsInitialized() const {
  return true;
}

void Attributes_balance::InternalSwap(Attributes_balance* other) {
  using std::swap;
  auto* lhs_arena = GetArenaForAllocation();
  auto* rhs_arena = other->GetArenaForAllocation();
  _internal_metadata_.InternalSwap(&other->_internal_metadata_);
  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
      &_impl_.name_, lhs_arena,
      &other->_impl_.name_, rhs_arena
  );
  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
      &_impl_.introduce_, lhs_arena,
      &other->_impl_.introduce_, rhs_arena
  );
  ::PROTOBUF_NAMESPACE_ID::internal::memswap<
      PROTOBUF_FIELD_OFFSET(Attributes_balance, _impl_.scale_)
      + sizeof(Attributes_balance::_impl_.scale_)
      - PROTOBUF_FIELD_OFFSET(Attributes_balance, _impl_.addr_)>(
          reinterpret_cast<char*>(&_impl_.addr_),
          reinterpret_cast<char*>(&other->_impl_.addr_));
}

::PROTOBUF_NAMESPACE_ID::Metadata Attributes_balance::GetMetadata() const {
  return ::_pbi::AssignDescriptors(
      &descriptor_table_battery_2eproto_getter, &descriptor_table_battery_2eproto_once,
      file_level_metadata_battery_2eproto[2]);
}

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

class Attributes_DIDO::_Internal {
 public:
};

Attributes_DIDO::Attributes_DIDO(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                         bool is_message_owned)
  : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned) {
  SharedCtor(arena, is_message_owned);
  // @@protoc_insertion_point(arena_constructor:BatteryConfig.Attributes_DIDO)
}
Attributes_DIDO::Attributes_DIDO(const Attributes_DIDO& from)
  : ::PROTOBUF_NAMESPACE_ID::Message() {
  Attributes_DIDO* const _this = this; (void)_this;
  new (&_impl_) Impl_{
      decltype(_impl_.name_){}
    , decltype(_impl_.introduce_){}
    , decltype(_impl_.addr_){}
    , decltype(_impl_.value_){}
    , decltype(_impl_.scale_){}
    , /*decltype(_impl_._cached_size_)*/{}};

  _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
  _impl_.name_.InitDefault();
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
    _impl_.name_.Set("", GetArenaForAllocation());
  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
  if (!from._internal_name().empty()) {
    _this->_impl_.name_.Set(from._internal_name(), 
      _this->GetArenaForAllocation());
  }
  _impl_.introduce_.InitDefault();
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
    _impl_.introduce_.Set("", GetArenaForAllocation());
  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
  if (!from._internal_introduce().empty()) {
    _this->_impl_.introduce_.Set(from._internal_introduce(), 
      _this->GetArenaForAllocation());
  }
  ::memcpy(&_impl_.addr_, &from._impl_.addr_,
    static_cast<size_t>(reinterpret_cast<char*>(&_impl_.scale_) -
    reinterpret_cast<char*>(&_impl_.addr_)) + sizeof(_impl_.scale_));
  // @@protoc_insertion_point(copy_constructor:BatteryConfig.Attributes_DIDO)
}

inline void Attributes_DIDO::SharedCtor(
    ::_pb::Arena* arena, bool is_message_owned) {
  (void)arena;
  (void)is_message_owned;
  new (&_impl_) Impl_{
      decltype(_impl_.name_){}
    , decltype(_impl_.introduce_){}
    , decltype(_impl_.addr_){0}
    , decltype(_impl_.value_){0}
    , decltype(_impl_.scale_){0}
    , /*decltype(_impl_._cached_size_)*/{}
  };
  _impl_.name_.InitDefault();
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
    _impl_.name_.Set("", GetArenaForAllocation());
  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
  _impl_.introduce_.InitDefault();
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
    _impl_.introduce_.Set("", GetArenaForAllocation());
  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
}

Attributes_DIDO::~Attributes_DIDO() {
  // @@protoc_insertion_point(destructor:BatteryConfig.Attributes_DIDO)
  if (auto *arena = _internal_metadata_.DeleteReturnArena<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>()) {
  (void)arena;
    return;
  }
  SharedDtor();
}

inline void Attributes_DIDO::SharedDtor() {
  GOOGLE_DCHECK(GetArenaForAllocation() == nullptr);
  _impl_.name_.Destroy();
  _impl_.introduce_.Destroy();
}

void Attributes_DIDO::SetCachedSize(int size) const {
  _impl_._cached_size_.Set(size);
}

void Attributes_DIDO::Clear() {
// @@protoc_insertion_point(message_clear_start:BatteryConfig.Attributes_DIDO)
  uint32_t cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  _impl_.name_.ClearToEmpty();
  _impl_.introduce_.ClearToEmpty();
  ::memset(&_impl_.addr_, 0, static_cast<size_t>(
      reinterpret_cast<char*>(&_impl_.scale_) -
      reinterpret_cast<char*>(&_impl_.addr_)) + sizeof(_impl_.scale_));
  _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
}

const char* Attributes_DIDO::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) {
#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  while (!ctx->Done(&ptr)) {
    uint32_t tag;
    ptr = ::_pbi::ReadTag(ptr, &tag);
    switch (tag >> 3) {
      // string name = 1;
      case 1:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 10)) {
          auto str = _internal_mutable_name();
          ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
          CHK_(ptr);
          CHK_(::_pbi::VerifyUTF8(str, "BatteryConfig.Attributes_DIDO.name"));
        } else
          goto handle_unusual;
        continue;
      // int32 addr = 2;
      case 2:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 16)) {
          _impl_.addr_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
          CHK_(ptr);
        } else
          goto handle_unusual;
        continue;
      // int32 value = 3;
      case 3:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 24)) {
          _impl_.value_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
          CHK_(ptr);
        } else
          goto handle_unusual;
        continue;
      // float scale = 4;
      case 4:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 37)) {
          _impl_.scale_ = ::PROTOBUF_NAMESPACE_ID::internal::UnalignedLoad<float>(ptr);
          ptr += sizeof(float);
        } else
          goto handle_unusual;
        continue;
      // string introduce = 5;
      case 5:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 42)) {
          auto str = _internal_mutable_introduce();
          ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
          CHK_(ptr);
          CHK_(::_pbi::VerifyUTF8(str, "BatteryConfig.Attributes_DIDO.introduce"));
        } else
          goto handle_unusual;
        continue;
      default:
        goto handle_unusual;
    }  // switch
  handle_unusual:
    if ((tag == 0) || ((tag & 7) == 4)) {
      CHK_(ptr);
      ctx->SetLastTag(tag);
      goto message_done;
    }
    ptr = UnknownFieldParse(
        tag,
        _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(),
        ptr, ctx);
    CHK_(ptr != nullptr);
  }  // while
message_done:
  return ptr;
failure:
  ptr = nullptr;
  goto message_done;
#undef CHK_
}

uint8_t* Attributes_DIDO::_InternalSerialize(
    uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const {
  // @@protoc_insertion_point(serialize_to_array_start:BatteryConfig.Attributes_DIDO)
  uint32_t cached_has_bits = 0;
  (void) cached_has_bits;

  // string name = 1;
  if (!this->_internal_name().empty()) {
    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
      this->_internal_name().data(), static_cast<int>(this->_internal_name().length()),
      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
      "BatteryConfig.Attributes_DIDO.name");
    target = stream->WriteStringMaybeAliased(
        1, this->_internal_name(), target);
  }

  // int32 addr = 2;
  if (this->_internal_addr() != 0) {
    target = stream->EnsureSpace(target);
    target = ::_pbi::WireFormatLite::WriteInt32ToArray(2, this->_internal_addr(), target);
  }

  // int32 value = 3;
  if (this->_internal_value() != 0) {
    target = stream->EnsureSpace(target);
    target = ::_pbi::WireFormatLite::WriteInt32ToArray(3, this->_internal_value(), target);
  }

  // float scale = 4;
  static_assert(sizeof(uint32_t) == sizeof(float), "Code assumes uint32_t and float are the same size.");
  float tmp_scale = this->_internal_scale();
  uint32_t raw_scale;
  memcpy(&raw_scale, &tmp_scale, sizeof(tmp_scale));
  if (raw_scale != 0) {
    target = stream->EnsureSpace(target);
    target = ::_pbi::WireFormatLite::WriteFloatToArray(4, this->_internal_scale(), target);
  }

  // string introduce = 5;
  if (!this->_internal_introduce().empty()) {
    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
      this->_internal_introduce().data(), static_cast<int>(this->_internal_introduce().length()),
      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
      "BatteryConfig.Attributes_DIDO.introduce");
    target = stream->WriteStringMaybeAliased(
        5, this->_internal_introduce(), target);
  }

  if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
    target = ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray(
        _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream);
  }
  // @@protoc_insertion_point(serialize_to_array_end:BatteryConfig.Attributes_DIDO)
  return target;
}

size_t Attributes_DIDO::ByteSizeLong() const {
// @@protoc_insertion_point(message_byte_size_start:BatteryConfig.Attributes_DIDO)
  size_t total_size = 0;

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

  // string name = 1;
  if (!this->_internal_name().empty()) {
    total_size += 1 +
      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
        this->_internal_name());
  }

  // string introduce = 5;
  if (!this->_internal_introduce().empty()) {
    total_size += 1 +
      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
        this->_internal_introduce());
  }

  // int32 addr = 2;
  if (this->_internal_addr() != 0) {
    total_size += ::_pbi::WireFormatLite::Int32SizePlusOne(this->_internal_addr());
  }

  // int32 value = 3;
  if (this->_internal_value() != 0) {
    total_size += ::_pbi::WireFormatLite::Int32SizePlusOne(this->_internal_value());
  }

  // float scale = 4;
  static_assert(sizeof(uint32_t) == sizeof(float), "Code assumes uint32_t and float are the same size.");
  float tmp_scale = this->_internal_scale();
  uint32_t raw_scale;
  memcpy(&raw_scale, &tmp_scale, sizeof(tmp_scale));
  if (raw_scale != 0) {
    total_size += 1 + 4;
  }

  return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_);
}

const ::PROTOBUF_NAMESPACE_ID::Message::ClassData Attributes_DIDO::_class_data_ = {
    ::PROTOBUF_NAMESPACE_ID::Message::CopyWithSourceCheck,
    Attributes_DIDO::MergeImpl
};
const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*Attributes_DIDO::GetClassData() const { return &_class_data_; }


void Attributes_DIDO::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg) {
  auto* const _this = static_cast<Attributes_DIDO*>(&to_msg);
  auto& from = static_cast<const Attributes_DIDO&>(from_msg);
  // @@protoc_insertion_point(class_specific_merge_from_start:BatteryConfig.Attributes_DIDO)
  GOOGLE_DCHECK_NE(&from, _this);
  uint32_t cached_has_bits = 0;
  (void) cached_has_bits;

  if (!from._internal_name().empty()) {
    _this->_internal_set_name(from._internal_name());
  }
  if (!from._internal_introduce().empty()) {
    _this->_internal_set_introduce(from._internal_introduce());
  }
  if (from._internal_addr() != 0) {
    _this->_internal_set_addr(from._internal_addr());
  }
  if (from._internal_value() != 0) {
    _this->_internal_set_value(from._internal_value());
  }
  static_assert(sizeof(uint32_t) == sizeof(float), "Code assumes uint32_t and float are the same size.");
  float tmp_scale = from._internal_scale();
  uint32_t raw_scale;
  memcpy(&raw_scale, &tmp_scale, sizeof(tmp_scale));
  if (raw_scale != 0) {
    _this->_internal_set_scale(from._internal_scale());
  }
  _this->_internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
}

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

bool Attributes_DIDO::IsInitialized() const {
  return true;
}

void Attributes_DIDO::InternalSwap(Attributes_DIDO* other) {
  using std::swap;
  auto* lhs_arena = GetArenaForAllocation();
  auto* rhs_arena = other->GetArenaForAllocation();
  _internal_metadata_.InternalSwap(&other->_internal_metadata_);
  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
      &_impl_.name_, lhs_arena,
      &other->_impl_.name_, rhs_arena
  );
  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
      &_impl_.introduce_, lhs_arena,
      &other->_impl_.introduce_, rhs_arena
  );
  ::PROTOBUF_NAMESPACE_ID::internal::memswap<
      PROTOBUF_FIELD_OFFSET(Attributes_DIDO, _impl_.scale_)
      + sizeof(Attributes_DIDO::_impl_.scale_)
      - PROTOBUF_FIELD_OFFSET(Attributes_DIDO, _impl_.addr_)>(
          reinterpret_cast<char*>(&_impl_.addr_),
          reinterpret_cast<char*>(&other->_impl_.addr_));
}

::PROTOBUF_NAMESPACE_ID::Metadata Attributes_DIDO::GetMetadata() const {
  return ::_pbi::AssignDescriptors(
      &descriptor_table_battery_2eproto_getter, &descriptor_table_battery_2eproto_once,
      file_level_metadata_battery_2eproto[3]);
}

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

class Attributes_SOX::_Internal {
 public:
};

Attributes_SOX::Attributes_SOX(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                         bool is_message_owned)
  : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned) {
  SharedCtor(arena, is_message_owned);
  // @@protoc_insertion_point(arena_constructor:BatteryConfig.Attributes_SOX)
}
Attributes_SOX::Attributes_SOX(const Attributes_SOX& from)
  : ::PROTOBUF_NAMESPACE_ID::Message() {
  Attributes_SOX* const _this = this; (void)_this;
  new (&_impl_) Impl_{
      decltype(_impl_.name_){}
    , decltype(_impl_.introduce_){}
    , decltype(_impl_.addr_){}
    , decltype(_impl_.value_){}
    , decltype(_impl_.scale_){}
    , /*decltype(_impl_._cached_size_)*/{}};

  _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
  _impl_.name_.InitDefault();
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
    _impl_.name_.Set("", GetArenaForAllocation());
  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
  if (!from._internal_name().empty()) {
    _this->_impl_.name_.Set(from._internal_name(), 
      _this->GetArenaForAllocation());
  }
  _impl_.introduce_.InitDefault();
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
    _impl_.introduce_.Set("", GetArenaForAllocation());
  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
  if (!from._internal_introduce().empty()) {
    _this->_impl_.introduce_.Set(from._internal_introduce(), 
      _this->GetArenaForAllocation());
  }
  ::memcpy(&_impl_.addr_, &from._impl_.addr_,
    static_cast<size_t>(reinterpret_cast<char*>(&_impl_.scale_) -
    reinterpret_cast<char*>(&_impl_.addr_)) + sizeof(_impl_.scale_));
  // @@protoc_insertion_point(copy_constructor:BatteryConfig.Attributes_SOX)
}

inline void Attributes_SOX::SharedCtor(
    ::_pb::Arena* arena, bool is_message_owned) {
  (void)arena;
  (void)is_message_owned;
  new (&_impl_) Impl_{
      decltype(_impl_.name_){}
    , decltype(_impl_.introduce_){}
    , decltype(_impl_.addr_){0}
    , decltype(_impl_.value_){0}
    , decltype(_impl_.scale_){0}
    , /*decltype(_impl_._cached_size_)*/{}
  };
  _impl_.name_.InitDefault();
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
    _impl_.name_.Set("", GetArenaForAllocation());
  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
  _impl_.introduce_.InitDefault();
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
    _impl_.introduce_.Set("", GetArenaForAllocation());
  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
}

Attributes_SOX::~Attributes_SOX() {
  // @@protoc_insertion_point(destructor:BatteryConfig.Attributes_SOX)
  if (auto *arena = _internal_metadata_.DeleteReturnArena<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>()) {
  (void)arena;
    return;
  }
  SharedDtor();
}

inline void Attributes_SOX::SharedDtor() {
  GOOGLE_DCHECK(GetArenaForAllocation() == nullptr);
  _impl_.name_.Destroy();
  _impl_.introduce_.Destroy();
}

void Attributes_SOX::SetCachedSize(int size) const {
  _impl_._cached_size_.Set(size);
}

void Attributes_SOX::Clear() {
// @@protoc_insertion_point(message_clear_start:BatteryConfig.Attributes_SOX)
  uint32_t cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  _impl_.name_.ClearToEmpty();
  _impl_.introduce_.ClearToEmpty();
  ::memset(&_impl_.addr_, 0, static_cast<size_t>(
      reinterpret_cast<char*>(&_impl_.scale_) -
      reinterpret_cast<char*>(&_impl_.addr_)) + sizeof(_impl_.scale_));
  _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
}

const char* Attributes_SOX::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) {
#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  while (!ctx->Done(&ptr)) {
    uint32_t tag;
    ptr = ::_pbi::ReadTag(ptr, &tag);
    switch (tag >> 3) {
      // string name = 1;
      case 1:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 10)) {
          auto str = _internal_mutable_name();
          ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
          CHK_(ptr);
          CHK_(::_pbi::VerifyUTF8(str, "BatteryConfig.Attributes_SOX.name"));
        } else
          goto handle_unusual;
        continue;
      // int32 addr = 2;
      case 2:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 16)) {
          _impl_.addr_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
          CHK_(ptr);
        } else
          goto handle_unusual;
        continue;
      // int32 value = 3;
      case 3:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 24)) {
          _impl_.value_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
          CHK_(ptr);
        } else
          goto handle_unusual;
        continue;
      // float scale = 4;
      case 4:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 37)) {
          _impl_.scale_ = ::PROTOBUF_NAMESPACE_ID::internal::UnalignedLoad<float>(ptr);
          ptr += sizeof(float);
        } else
          goto handle_unusual;
        continue;
      // string introduce = 5;
      case 5:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 42)) {
          auto str = _internal_mutable_introduce();
          ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
          CHK_(ptr);
          CHK_(::_pbi::VerifyUTF8(str, "BatteryConfig.Attributes_SOX.introduce"));
        } else
          goto handle_unusual;
        continue;
      default:
        goto handle_unusual;
    }  // switch
  handle_unusual:
    if ((tag == 0) || ((tag & 7) == 4)) {
      CHK_(ptr);
      ctx->SetLastTag(tag);
      goto message_done;
    }
    ptr = UnknownFieldParse(
        tag,
        _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(),
        ptr, ctx);
    CHK_(ptr != nullptr);
  }  // while
message_done:
  return ptr;
failure:
  ptr = nullptr;
  goto message_done;
#undef CHK_
}

uint8_t* Attributes_SOX::_InternalSerialize(
    uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const {
  // @@protoc_insertion_point(serialize_to_array_start:BatteryConfig.Attributes_SOX)
  uint32_t cached_has_bits = 0;
  (void) cached_has_bits;

  // string name = 1;
  if (!this->_internal_name().empty()) {
    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
      this->_internal_name().data(), static_cast<int>(this->_internal_name().length()),
      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
      "BatteryConfig.Attributes_SOX.name");
    target = stream->WriteStringMaybeAliased(
        1, this->_internal_name(), target);
  }

  // int32 addr = 2;
  if (this->_internal_addr() != 0) {
    target = stream->EnsureSpace(target);
    target = ::_pbi::WireFormatLite::WriteInt32ToArray(2, this->_internal_addr(), target);
  }

  // int32 value = 3;
  if (this->_internal_value() != 0) {
    target = stream->EnsureSpace(target);
    target = ::_pbi::WireFormatLite::WriteInt32ToArray(3, this->_internal_value(), target);
  }

  // float scale = 4;
  static_assert(sizeof(uint32_t) == sizeof(float), "Code assumes uint32_t and float are the same size.");
  float tmp_scale = this->_internal_scale();
  uint32_t raw_scale;
  memcpy(&raw_scale, &tmp_scale, sizeof(tmp_scale));
  if (raw_scale != 0) {
    target = stream->EnsureSpace(target);
    target = ::_pbi::WireFormatLite::WriteFloatToArray(4, this->_internal_scale(), target);
  }

  // string introduce = 5;
  if (!this->_internal_introduce().empty()) {
    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
      this->_internal_introduce().data(), static_cast<int>(this->_internal_introduce().length()),
      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
      "BatteryConfig.Attributes_SOX.introduce");
    target = stream->WriteStringMaybeAliased(
        5, this->_internal_introduce(), target);
  }

  if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
    target = ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray(
        _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream);
  }
  // @@protoc_insertion_point(serialize_to_array_end:BatteryConfig.Attributes_SOX)
  return target;
}

size_t Attributes_SOX::ByteSizeLong() const {
// @@protoc_insertion_point(message_byte_size_start:BatteryConfig.Attributes_SOX)
  size_t total_size = 0;

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

  // string name = 1;
  if (!this->_internal_name().empty()) {
    total_size += 1 +
      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
        this->_internal_name());
  }

  // string introduce = 5;
  if (!this->_internal_introduce().empty()) {
    total_size += 1 +
      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
        this->_internal_introduce());
  }

  // int32 addr = 2;
  if (this->_internal_addr() != 0) {
    total_size += ::_pbi::WireFormatLite::Int32SizePlusOne(this->_internal_addr());
  }

  // int32 value = 3;
  if (this->_internal_value() != 0) {
    total_size += ::_pbi::WireFormatLite::Int32SizePlusOne(this->_internal_value());
  }

  // float scale = 4;
  static_assert(sizeof(uint32_t) == sizeof(float), "Code assumes uint32_t and float are the same size.");
  float tmp_scale = this->_internal_scale();
  uint32_t raw_scale;
  memcpy(&raw_scale, &tmp_scale, sizeof(tmp_scale));
  if (raw_scale != 0) {
    total_size += 1 + 4;
  }

  return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_);
}

const ::PROTOBUF_NAMESPACE_ID::Message::ClassData Attributes_SOX::_class_data_ = {
    ::PROTOBUF_NAMESPACE_ID::Message::CopyWithSourceCheck,
    Attributes_SOX::MergeImpl
};
const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*Attributes_SOX::GetClassData() const { return &_class_data_; }


void Attributes_SOX::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg) {
  auto* const _this = static_cast<Attributes_SOX*>(&to_msg);
  auto& from = static_cast<const Attributes_SOX&>(from_msg);
  // @@protoc_insertion_point(class_specific_merge_from_start:BatteryConfig.Attributes_SOX)
  GOOGLE_DCHECK_NE(&from, _this);
  uint32_t cached_has_bits = 0;
  (void) cached_has_bits;

  if (!from._internal_name().empty()) {
    _this->_internal_set_name(from._internal_name());
  }
  if (!from._internal_introduce().empty()) {
    _this->_internal_set_introduce(from._internal_introduce());
  }
  if (from._internal_addr() != 0) {
    _this->_internal_set_addr(from._internal_addr());
  }
  if (from._internal_value() != 0) {
    _this->_internal_set_value(from._internal_value());
  }
  static_assert(sizeof(uint32_t) == sizeof(float), "Code assumes uint32_t and float are the same size.");
  float tmp_scale = from._internal_scale();
  uint32_t raw_scale;
  memcpy(&raw_scale, &tmp_scale, sizeof(tmp_scale));
  if (raw_scale != 0) {
    _this->_internal_set_scale(from._internal_scale());
  }
  _this->_internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
}

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

bool Attributes_SOX::IsInitialized() const {
  return true;
}

void Attributes_SOX::InternalSwap(Attributes_SOX* other) {
  using std::swap;
  auto* lhs_arena = GetArenaForAllocation();
  auto* rhs_arena = other->GetArenaForAllocation();
  _internal_metadata_.InternalSwap(&other->_internal_metadata_);
  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
      &_impl_.name_, lhs_arena,
      &other->_impl_.name_, rhs_arena
  );
  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
      &_impl_.introduce_, lhs_arena,
      &other->_impl_.introduce_, rhs_arena
  );
  ::PROTOBUF_NAMESPACE_ID::internal::memswap<
      PROTOBUF_FIELD_OFFSET(Attributes_SOX, _impl_.scale_)
      + sizeof(Attributes_SOX::_impl_.scale_)
      - PROTOBUF_FIELD_OFFSET(Attributes_SOX, _impl_.addr_)>(
          reinterpret_cast<char*>(&_impl_.addr_),
          reinterpret_cast<char*>(&other->_impl_.addr_));
}

::PROTOBUF_NAMESPACE_ID::Metadata Attributes_SOX::GetMetadata() const {
  return ::_pbi::AssignDescriptors(
      &descriptor_table_battery_2eproto_getter, &descriptor_table_battery_2eproto_once,
      file_level_metadata_battery_2eproto[4]);
}

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

class Attributes_other::_Internal {
 public:
};

Attributes_other::Attributes_other(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                         bool is_message_owned)
  : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned) {
  SharedCtor(arena, is_message_owned);
  // @@protoc_insertion_point(arena_constructor:BatteryConfig.Attributes_other)
}
Attributes_other::Attributes_other(const Attributes_other& from)
  : ::PROTOBUF_NAMESPACE_ID::Message() {
  Attributes_other* const _this = this; (void)_this;
  new (&_impl_) Impl_{
      decltype(_impl_.name_){}
    , decltype(_impl_.introduce_){}
    , decltype(_impl_.addr_){}
    , decltype(_impl_.value_){}
    , decltype(_impl_.scale_){}
    , /*decltype(_impl_._cached_size_)*/{}};

  _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
  _impl_.name_.InitDefault();
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
    _impl_.name_.Set("", GetArenaForAllocation());
  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
  if (!from._internal_name().empty()) {
    _this->_impl_.name_.Set(from._internal_name(), 
      _this->GetArenaForAllocation());
  }
  _impl_.introduce_.InitDefault();
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
    _impl_.introduce_.Set("", GetArenaForAllocation());
  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
  if (!from._internal_introduce().empty()) {
    _this->_impl_.introduce_.Set(from._internal_introduce(), 
      _this->GetArenaForAllocation());
  }
  ::memcpy(&_impl_.addr_, &from._impl_.addr_,
    static_cast<size_t>(reinterpret_cast<char*>(&_impl_.scale_) -
    reinterpret_cast<char*>(&_impl_.addr_)) + sizeof(_impl_.scale_));
  // @@protoc_insertion_point(copy_constructor:BatteryConfig.Attributes_other)
}

inline void Attributes_other::SharedCtor(
    ::_pb::Arena* arena, bool is_message_owned) {
  (void)arena;
  (void)is_message_owned;
  new (&_impl_) Impl_{
      decltype(_impl_.name_){}
    , decltype(_impl_.introduce_){}
    , decltype(_impl_.addr_){0}
    , decltype(_impl_.value_){0}
    , decltype(_impl_.scale_){0}
    , /*decltype(_impl_._cached_size_)*/{}
  };
  _impl_.name_.InitDefault();
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
    _impl_.name_.Set("", GetArenaForAllocation());
  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
  _impl_.introduce_.InitDefault();
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
    _impl_.introduce_.Set("", GetArenaForAllocation());
  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
}

Attributes_other::~Attributes_other() {
  // @@protoc_insertion_point(destructor:BatteryConfig.Attributes_other)
  if (auto *arena = _internal_metadata_.DeleteReturnArena<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>()) {
  (void)arena;
    return;
  }
  SharedDtor();
}

inline void Attributes_other::SharedDtor() {
  GOOGLE_DCHECK(GetArenaForAllocation() == nullptr);
  _impl_.name_.Destroy();
  _impl_.introduce_.Destroy();
}

void Attributes_other::SetCachedSize(int size) const {
  _impl_._cached_size_.Set(size);
}

void Attributes_other::Clear() {
// @@protoc_insertion_point(message_clear_start:BatteryConfig.Attributes_other)
  uint32_t cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  _impl_.name_.ClearToEmpty();
  _impl_.introduce_.ClearToEmpty();
  ::memset(&_impl_.addr_, 0, static_cast<size_t>(
      reinterpret_cast<char*>(&_impl_.scale_) -
      reinterpret_cast<char*>(&_impl_.addr_)) + sizeof(_impl_.scale_));
  _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
}

const char* Attributes_other::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) {
#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  while (!ctx->Done(&ptr)) {
    uint32_t tag;
    ptr = ::_pbi::ReadTag(ptr, &tag);
    switch (tag >> 3) {
      // string name = 1;
      case 1:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 10)) {
          auto str = _internal_mutable_name();
          ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
          CHK_(ptr);
          CHK_(::_pbi::VerifyUTF8(str, "BatteryConfig.Attributes_other.name"));
        } else
          goto handle_unusual;
        continue;
      // int32 addr = 2;
      case 2:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 16)) {
          _impl_.addr_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
          CHK_(ptr);
        } else
          goto handle_unusual;
        continue;
      // int32 value = 3;
      case 3:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 24)) {
          _impl_.value_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
          CHK_(ptr);
        } else
          goto handle_unusual;
        continue;
      // float scale = 4;
      case 4:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 37)) {
          _impl_.scale_ = ::PROTOBUF_NAMESPACE_ID::internal::UnalignedLoad<float>(ptr);
          ptr += sizeof(float);
        } else
          goto handle_unusual;
        continue;
      // string introduce = 5;
      case 5:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 42)) {
          auto str = _internal_mutable_introduce();
          ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
          CHK_(ptr);
          CHK_(::_pbi::VerifyUTF8(str, "BatteryConfig.Attributes_other.introduce"));
        } else
          goto handle_unusual;
        continue;
      default:
        goto handle_unusual;
    }  // switch
  handle_unusual:
    if ((tag == 0) || ((tag & 7) == 4)) {
      CHK_(ptr);
      ctx->SetLastTag(tag);
      goto message_done;
    }
    ptr = UnknownFieldParse(
        tag,
        _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(),
        ptr, ctx);
    CHK_(ptr != nullptr);
  }  // while
message_done:
  return ptr;
failure:
  ptr = nullptr;
  goto message_done;
#undef CHK_
}

uint8_t* Attributes_other::_InternalSerialize(
    uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const {
  // @@protoc_insertion_point(serialize_to_array_start:BatteryConfig.Attributes_other)
  uint32_t cached_has_bits = 0;
  (void) cached_has_bits;

  // string name = 1;
  if (!this->_internal_name().empty()) {
    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
      this->_internal_name().data(), static_cast<int>(this->_internal_name().length()),
      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
      "BatteryConfig.Attributes_other.name");
    target = stream->WriteStringMaybeAliased(
        1, this->_internal_name(), target);
  }

  // int32 addr = 2;
  if (this->_internal_addr() != 0) {
    target = stream->EnsureSpace(target);
    target = ::_pbi::WireFormatLite::WriteInt32ToArray(2, this->_internal_addr(), target);
  }

  // int32 value = 3;
  if (this->_internal_value() != 0) {
    target = stream->EnsureSpace(target);
    target = ::_pbi::WireFormatLite::WriteInt32ToArray(3, this->_internal_value(), target);
  }

  // float scale = 4;
  static_assert(sizeof(uint32_t) == sizeof(float), "Code assumes uint32_t and float are the same size.");
  float tmp_scale = this->_internal_scale();
  uint32_t raw_scale;
  memcpy(&raw_scale, &tmp_scale, sizeof(tmp_scale));
  if (raw_scale != 0) {
    target = stream->EnsureSpace(target);
    target = ::_pbi::WireFormatLite::WriteFloatToArray(4, this->_internal_scale(), target);
  }

  // string introduce = 5;
  if (!this->_internal_introduce().empty()) {
    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
      this->_internal_introduce().data(), static_cast<int>(this->_internal_introduce().length()),
      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
      "BatteryConfig.Attributes_other.introduce");
    target = stream->WriteStringMaybeAliased(
        5, this->_internal_introduce(), target);
  }

  if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
    target = ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray(
        _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream);
  }
  // @@protoc_insertion_point(serialize_to_array_end:BatteryConfig.Attributes_other)
  return target;
}

size_t Attributes_other::ByteSizeLong() const {
// @@protoc_insertion_point(message_byte_size_start:BatteryConfig.Attributes_other)
  size_t total_size = 0;

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

  // string name = 1;
  if (!this->_internal_name().empty()) {
    total_size += 1 +
      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
        this->_internal_name());
  }

  // string introduce = 5;
  if (!this->_internal_introduce().empty()) {
    total_size += 1 +
      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
        this->_internal_introduce());
  }

  // int32 addr = 2;
  if (this->_internal_addr() != 0) {
    total_size += ::_pbi::WireFormatLite::Int32SizePlusOne(this->_internal_addr());
  }

  // int32 value = 3;
  if (this->_internal_value() != 0) {
    total_size += ::_pbi::WireFormatLite::Int32SizePlusOne(this->_internal_value());
  }

  // float scale = 4;
  static_assert(sizeof(uint32_t) == sizeof(float), "Code assumes uint32_t and float are the same size.");
  float tmp_scale = this->_internal_scale();
  uint32_t raw_scale;
  memcpy(&raw_scale, &tmp_scale, sizeof(tmp_scale));
  if (raw_scale != 0) {
    total_size += 1 + 4;
  }

  return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_);
}

const ::PROTOBUF_NAMESPACE_ID::Message::ClassData Attributes_other::_class_data_ = {
    ::PROTOBUF_NAMESPACE_ID::Message::CopyWithSourceCheck,
    Attributes_other::MergeImpl
};
const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*Attributes_other::GetClassData() const { return &_class_data_; }


void Attributes_other::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg) {
  auto* const _this = static_cast<Attributes_other*>(&to_msg);
  auto& from = static_cast<const Attributes_other&>(from_msg);
  // @@protoc_insertion_point(class_specific_merge_from_start:BatteryConfig.Attributes_other)
  GOOGLE_DCHECK_NE(&from, _this);
  uint32_t cached_has_bits = 0;
  (void) cached_has_bits;

  if (!from._internal_name().empty()) {
    _this->_internal_set_name(from._internal_name());
  }
  if (!from._internal_introduce().empty()) {
    _this->_internal_set_introduce(from._internal_introduce());
  }
  if (from._internal_addr() != 0) {
    _this->_internal_set_addr(from._internal_addr());
  }
  if (from._internal_value() != 0) {
    _this->_internal_set_value(from._internal_value());
  }
  static_assert(sizeof(uint32_t) == sizeof(float), "Code assumes uint32_t and float are the same size.");
  float tmp_scale = from._internal_scale();
  uint32_t raw_scale;
  memcpy(&raw_scale, &tmp_scale, sizeof(tmp_scale));
  if (raw_scale != 0) {
    _this->_internal_set_scale(from._internal_scale());
  }
  _this->_internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
}

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

bool Attributes_other::IsInitialized() const {
  return true;
}

void Attributes_other::InternalSwap(Attributes_other* other) {
  using std::swap;
  auto* lhs_arena = GetArenaForAllocation();
  auto* rhs_arena = other->GetArenaForAllocation();
  _internal_metadata_.InternalSwap(&other->_internal_metadata_);
  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
      &_impl_.name_, lhs_arena,
      &other->_impl_.name_, rhs_arena
  );
  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
      &_impl_.introduce_, lhs_arena,
      &other->_impl_.introduce_, rhs_arena
  );
  ::PROTOBUF_NAMESPACE_ID::internal::memswap<
      PROTOBUF_FIELD_OFFSET(Attributes_other, _impl_.scale_)
      + sizeof(Attributes_other::_impl_.scale_)
      - PROTOBUF_FIELD_OFFSET(Attributes_other, _impl_.addr_)>(
          reinterpret_cast<char*>(&_impl_.addr_),
          reinterpret_cast<char*>(&other->_impl_.addr_));
}

::PROTOBUF_NAMESPACE_ID::Metadata Attributes_other::GetMetadata() const {
  return ::_pbi::AssignDescriptors(
      &descriptor_table_battery_2eproto_getter, &descriptor_table_battery_2eproto_once,
      file_level_metadata_battery_2eproto[5]);
}

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

class Attributes_alert_value::_Internal {
 public:
};

Attributes_alert_value::Attributes_alert_value(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                         bool is_message_owned)
  : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned) {
  SharedCtor(arena, is_message_owned);
  // @@protoc_insertion_point(arena_constructor:BatteryConfig.Attributes_alert_value)
}
Attributes_alert_value::Attributes_alert_value(const Attributes_alert_value& from)
  : ::PROTOBUF_NAMESPACE_ID::Message() {
  Attributes_alert_value* const _this = this; (void)_this;
  new (&_impl_) Impl_{
      decltype(_impl_.name_){}
    , decltype(_impl_.introduce_){}
    , decltype(_impl_.addr_){}
    , decltype(_impl_.value_){}
    , decltype(_impl_.scale_){}
    , /*decltype(_impl_._cached_size_)*/{}};

  _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
  _impl_.name_.InitDefault();
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
    _impl_.name_.Set("", GetArenaForAllocation());
  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
  if (!from._internal_name().empty()) {
    _this->_impl_.name_.Set(from._internal_name(), 
      _this->GetArenaForAllocation());
  }
  _impl_.introduce_.InitDefault();
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
    _impl_.introduce_.Set("", GetArenaForAllocation());
  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
  if (!from._internal_introduce().empty()) {
    _this->_impl_.introduce_.Set(from._internal_introduce(), 
      _this->GetArenaForAllocation());
  }
  ::memcpy(&_impl_.addr_, &from._impl_.addr_,
    static_cast<size_t>(reinterpret_cast<char*>(&_impl_.scale_) -
    reinterpret_cast<char*>(&_impl_.addr_)) + sizeof(_impl_.scale_));
  // @@protoc_insertion_point(copy_constructor:BatteryConfig.Attributes_alert_value)
}

inline void Attributes_alert_value::SharedCtor(
    ::_pb::Arena* arena, bool is_message_owned) {
  (void)arena;
  (void)is_message_owned;
  new (&_impl_) Impl_{
      decltype(_impl_.name_){}
    , decltype(_impl_.introduce_){}
    , decltype(_impl_.addr_){0}
    , decltype(_impl_.value_){0}
    , decltype(_impl_.scale_){0}
    , /*decltype(_impl_._cached_size_)*/{}
  };
  _impl_.name_.InitDefault();
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
    _impl_.name_.Set("", GetArenaForAllocation());
  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
  _impl_.introduce_.InitDefault();
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
    _impl_.introduce_.Set("", GetArenaForAllocation());
  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
}

Attributes_alert_value::~Attributes_alert_value() {
  // @@protoc_insertion_point(destructor:BatteryConfig.Attributes_alert_value)
  if (auto *arena = _internal_metadata_.DeleteReturnArena<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>()) {
  (void)arena;
    return;
  }
  SharedDtor();
}

inline void Attributes_alert_value::SharedDtor() {
  GOOGLE_DCHECK(GetArenaForAllocation() == nullptr);
  _impl_.name_.Destroy();
  _impl_.introduce_.Destroy();
}

void Attributes_alert_value::SetCachedSize(int size) const {
  _impl_._cached_size_.Set(size);
}

void Attributes_alert_value::Clear() {
// @@protoc_insertion_point(message_clear_start:BatteryConfig.Attributes_alert_value)
  uint32_t cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  _impl_.name_.ClearToEmpty();
  _impl_.introduce_.ClearToEmpty();
  ::memset(&_impl_.addr_, 0, static_cast<size_t>(
      reinterpret_cast<char*>(&_impl_.scale_) -
      reinterpret_cast<char*>(&_impl_.addr_)) + sizeof(_impl_.scale_));
  _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
}

const char* Attributes_alert_value::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) {
#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  while (!ctx->Done(&ptr)) {
    uint32_t tag;
    ptr = ::_pbi::ReadTag(ptr, &tag);
    switch (tag >> 3) {
      // string name = 1;
      case 1:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 10)) {
          auto str = _internal_mutable_name();
          ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
          CHK_(ptr);
          CHK_(::_pbi::VerifyUTF8(str, "BatteryConfig.Attributes_alert_value.name"));
        } else
          goto handle_unusual;
        continue;
      // int32 addr = 2;
      case 2:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 16)) {
          _impl_.addr_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
          CHK_(ptr);
        } else
          goto handle_unusual;
        continue;
      // int32 value = 3;
      case 3:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 24)) {
          _impl_.value_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
          CHK_(ptr);
        } else
          goto handle_unusual;
        continue;
      // float scale = 4;
      case 4:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 37)) {
          _impl_.scale_ = ::PROTOBUF_NAMESPACE_ID::internal::UnalignedLoad<float>(ptr);
          ptr += sizeof(float);
        } else
          goto handle_unusual;
        continue;
      // string introduce = 5;
      case 5:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 42)) {
          auto str = _internal_mutable_introduce();
          ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
          CHK_(ptr);
          CHK_(::_pbi::VerifyUTF8(str, "BatteryConfig.Attributes_alert_value.introduce"));
        } else
          goto handle_unusual;
        continue;
      default:
        goto handle_unusual;
    }  // switch
  handle_unusual:
    if ((tag == 0) || ((tag & 7) == 4)) {
      CHK_(ptr);
      ctx->SetLastTag(tag);
      goto message_done;
    }
    ptr = UnknownFieldParse(
        tag,
        _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(),
        ptr, ctx);
    CHK_(ptr != nullptr);
  }  // while
message_done:
  return ptr;
failure:
  ptr = nullptr;
  goto message_done;
#undef CHK_
}

uint8_t* Attributes_alert_value::_InternalSerialize(
    uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const {
  // @@protoc_insertion_point(serialize_to_array_start:BatteryConfig.Attributes_alert_value)
  uint32_t cached_has_bits = 0;
  (void) cached_has_bits;

  // string name = 1;
  if (!this->_internal_name().empty()) {
    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
      this->_internal_name().data(), static_cast<int>(this->_internal_name().length()),
      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
      "BatteryConfig.Attributes_alert_value.name");
    target = stream->WriteStringMaybeAliased(
        1, this->_internal_name(), target);
  }

  // int32 addr = 2;
  if (this->_internal_addr() != 0) {
    target = stream->EnsureSpace(target);
    target = ::_pbi::WireFormatLite::WriteInt32ToArray(2, this->_internal_addr(), target);
  }

  // int32 value = 3;
  if (this->_internal_value() != 0) {
    target = stream->EnsureSpace(target);
    target = ::_pbi::WireFormatLite::WriteInt32ToArray(3, this->_internal_value(), target);
  }

  // float scale = 4;
  static_assert(sizeof(uint32_t) == sizeof(float), "Code assumes uint32_t and float are the same size.");
  float tmp_scale = this->_internal_scale();
  uint32_t raw_scale;
  memcpy(&raw_scale, &tmp_scale, sizeof(tmp_scale));
  if (raw_scale != 0) {
    target = stream->EnsureSpace(target);
    target = ::_pbi::WireFormatLite::WriteFloatToArray(4, this->_internal_scale(), target);
  }

  // string introduce = 5;
  if (!this->_internal_introduce().empty()) {
    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
      this->_internal_introduce().data(), static_cast<int>(this->_internal_introduce().length()),
      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
      "BatteryConfig.Attributes_alert_value.introduce");
    target = stream->WriteStringMaybeAliased(
        5, this->_internal_introduce(), target);
  }

  if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
    target = ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray(
        _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream);
  }
  // @@protoc_insertion_point(serialize_to_array_end:BatteryConfig.Attributes_alert_value)
  return target;
}

size_t Attributes_alert_value::ByteSizeLong() const {
// @@protoc_insertion_point(message_byte_size_start:BatteryConfig.Attributes_alert_value)
  size_t total_size = 0;

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

  // string name = 1;
  if (!this->_internal_name().empty()) {
    total_size += 1 +
      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
        this->_internal_name());
  }

  // string introduce = 5;
  if (!this->_internal_introduce().empty()) {
    total_size += 1 +
      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
        this->_internal_introduce());
  }

  // int32 addr = 2;
  if (this->_internal_addr() != 0) {
    total_size += ::_pbi::WireFormatLite::Int32SizePlusOne(this->_internal_addr());
  }

  // int32 value = 3;
  if (this->_internal_value() != 0) {
    total_size += ::_pbi::WireFormatLite::Int32SizePlusOne(this->_internal_value());
  }

  // float scale = 4;
  static_assert(sizeof(uint32_t) == sizeof(float), "Code assumes uint32_t and float are the same size.");
  float tmp_scale = this->_internal_scale();
  uint32_t raw_scale;
  memcpy(&raw_scale, &tmp_scale, sizeof(tmp_scale));
  if (raw_scale != 0) {
    total_size += 1 + 4;
  }

  return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_);
}

const ::PROTOBUF_NAMESPACE_ID::Message::ClassData Attributes_alert_value::_class_data_ = {
    ::PROTOBUF_NAMESPACE_ID::Message::CopyWithSourceCheck,
    Attributes_alert_value::MergeImpl
};
const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*Attributes_alert_value::GetClassData() const { return &_class_data_; }


void Attributes_alert_value::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg) {
  auto* const _this = static_cast<Attributes_alert_value*>(&to_msg);
  auto& from = static_cast<const Attributes_alert_value&>(from_msg);
  // @@protoc_insertion_point(class_specific_merge_from_start:BatteryConfig.Attributes_alert_value)
  GOOGLE_DCHECK_NE(&from, _this);
  uint32_t cached_has_bits = 0;
  (void) cached_has_bits;

  if (!from._internal_name().empty()) {
    _this->_internal_set_name(from._internal_name());
  }
  if (!from._internal_introduce().empty()) {
    _this->_internal_set_introduce(from._internal_introduce());
  }
  if (from._internal_addr() != 0) {
    _this->_internal_set_addr(from._internal_addr());
  }
  if (from._internal_value() != 0) {
    _this->_internal_set_value(from._internal_value());
  }
  static_assert(sizeof(uint32_t) == sizeof(float), "Code assumes uint32_t and float are the same size.");
  float tmp_scale = from._internal_scale();
  uint32_t raw_scale;
  memcpy(&raw_scale, &tmp_scale, sizeof(tmp_scale));
  if (raw_scale != 0) {
    _this->_internal_set_scale(from._internal_scale());
  }
  _this->_internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
}

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

bool Attributes_alert_value::IsInitialized() const {
  return true;
}

void Attributes_alert_value::InternalSwap(Attributes_alert_value* other) {
  using std::swap;
  auto* lhs_arena = GetArenaForAllocation();
  auto* rhs_arena = other->GetArenaForAllocation();
  _internal_metadata_.InternalSwap(&other->_internal_metadata_);
  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
      &_impl_.name_, lhs_arena,
      &other->_impl_.name_, rhs_arena
  );
  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
      &_impl_.introduce_, lhs_arena,
      &other->_impl_.introduce_, rhs_arena
  );
  ::PROTOBUF_NAMESPACE_ID::internal::memswap<
      PROTOBUF_FIELD_OFFSET(Attributes_alert_value, _impl_.scale_)
      + sizeof(Attributes_alert_value::_impl_.scale_)
      - PROTOBUF_FIELD_OFFSET(Attributes_alert_value, _impl_.addr_)>(
          reinterpret_cast<char*>(&_impl_.addr_),
          reinterpret_cast<char*>(&other->_impl_.addr_));
}

::PROTOBUF_NAMESPACE_ID::Metadata Attributes_alert_value::GetMetadata() const {
  return ::_pbi::AssignDescriptors(
      &descriptor_table_battery_2eproto_getter, &descriptor_table_battery_2eproto_once,
      file_level_metadata_battery_2eproto[6]);
}

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

class Attributes_alert_delay::_Internal {
 public:
};

Attributes_alert_delay::Attributes_alert_delay(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                         bool is_message_owned)
  : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned) {
  SharedCtor(arena, is_message_owned);
  // @@protoc_insertion_point(arena_constructor:BatteryConfig.Attributes_alert_delay)
}
Attributes_alert_delay::Attributes_alert_delay(const Attributes_alert_delay& from)
  : ::PROTOBUF_NAMESPACE_ID::Message() {
  Attributes_alert_delay* const _this = this; (void)_this;
  new (&_impl_) Impl_{
      decltype(_impl_.name_){}
    , decltype(_impl_.introduce_){}
    , decltype(_impl_.addr_){}
    , decltype(_impl_.value_){}
    , decltype(_impl_.scale_){}
    , /*decltype(_impl_._cached_size_)*/{}};

  _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
  _impl_.name_.InitDefault();
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
    _impl_.name_.Set("", GetArenaForAllocation());
  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
  if (!from._internal_name().empty()) {
    _this->_impl_.name_.Set(from._internal_name(), 
      _this->GetArenaForAllocation());
  }
  _impl_.introduce_.InitDefault();
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
    _impl_.introduce_.Set("", GetArenaForAllocation());
  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
  if (!from._internal_introduce().empty()) {
    _this->_impl_.introduce_.Set(from._internal_introduce(), 
      _this->GetArenaForAllocation());
  }
  ::memcpy(&_impl_.addr_, &from._impl_.addr_,
    static_cast<size_t>(reinterpret_cast<char*>(&_impl_.scale_) -
    reinterpret_cast<char*>(&_impl_.addr_)) + sizeof(_impl_.scale_));
  // @@protoc_insertion_point(copy_constructor:BatteryConfig.Attributes_alert_delay)
}

inline void Attributes_alert_delay::SharedCtor(
    ::_pb::Arena* arena, bool is_message_owned) {
  (void)arena;
  (void)is_message_owned;
  new (&_impl_) Impl_{
      decltype(_impl_.name_){}
    , decltype(_impl_.introduce_){}
    , decltype(_impl_.addr_){0}
    , decltype(_impl_.value_){0}
    , decltype(_impl_.scale_){0}
    , /*decltype(_impl_._cached_size_)*/{}
  };
  _impl_.name_.InitDefault();
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
    _impl_.name_.Set("", GetArenaForAllocation());
  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
  _impl_.introduce_.InitDefault();
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
    _impl_.introduce_.Set("", GetArenaForAllocation());
  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
}

Attributes_alert_delay::~Attributes_alert_delay() {
  // @@protoc_insertion_point(destructor:BatteryConfig.Attributes_alert_delay)
  if (auto *arena = _internal_metadata_.DeleteReturnArena<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>()) {
  (void)arena;
    return;
  }
  SharedDtor();
}

inline void Attributes_alert_delay::SharedDtor() {
  GOOGLE_DCHECK(GetArenaForAllocation() == nullptr);
  _impl_.name_.Destroy();
  _impl_.introduce_.Destroy();
}

void Attributes_alert_delay::SetCachedSize(int size) const {
  _impl_._cached_size_.Set(size);
}

void Attributes_alert_delay::Clear() {
// @@protoc_insertion_point(message_clear_start:BatteryConfig.Attributes_alert_delay)
  uint32_t cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  _impl_.name_.ClearToEmpty();
  _impl_.introduce_.ClearToEmpty();
  ::memset(&_impl_.addr_, 0, static_cast<size_t>(
      reinterpret_cast<char*>(&_impl_.scale_) -
      reinterpret_cast<char*>(&_impl_.addr_)) + sizeof(_impl_.scale_));
  _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
}

const char* Attributes_alert_delay::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) {
#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  while (!ctx->Done(&ptr)) {
    uint32_t tag;
    ptr = ::_pbi::ReadTag(ptr, &tag);
    switch (tag >> 3) {
      // string name = 1;
      case 1:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 10)) {
          auto str = _internal_mutable_name();
          ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
          CHK_(ptr);
          CHK_(::_pbi::VerifyUTF8(str, "BatteryConfig.Attributes_alert_delay.name"));
        } else
          goto handle_unusual;
        continue;
      // int32 addr = 2;
      case 2:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 16)) {
          _impl_.addr_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
          CHK_(ptr);
        } else
          goto handle_unusual;
        continue;
      // int32 value = 3;
      case 3:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 24)) {
          _impl_.value_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
          CHK_(ptr);
        } else
          goto handle_unusual;
        continue;
      // float scale = 4;
      case 4:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 37)) {
          _impl_.scale_ = ::PROTOBUF_NAMESPACE_ID::internal::UnalignedLoad<float>(ptr);
          ptr += sizeof(float);
        } else
          goto handle_unusual;
        continue;
      // string introduce = 5;
      case 5:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 42)) {
          auto str = _internal_mutable_introduce();
          ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
          CHK_(ptr);
          CHK_(::_pbi::VerifyUTF8(str, "BatteryConfig.Attributes_alert_delay.introduce"));
        } else
          goto handle_unusual;
        continue;
      default:
        goto handle_unusual;
    }  // switch
  handle_unusual:
    if ((tag == 0) || ((tag & 7) == 4)) {
      CHK_(ptr);
      ctx->SetLastTag(tag);
      goto message_done;
    }
    ptr = UnknownFieldParse(
        tag,
        _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(),
        ptr, ctx);
    CHK_(ptr != nullptr);
  }  // while
message_done:
  return ptr;
failure:
  ptr = nullptr;
  goto message_done;
#undef CHK_
}

uint8_t* Attributes_alert_delay::_InternalSerialize(
    uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const {
  // @@protoc_insertion_point(serialize_to_array_start:BatteryConfig.Attributes_alert_delay)
  uint32_t cached_has_bits = 0;
  (void) cached_has_bits;

  // string name = 1;
  if (!this->_internal_name().empty()) {
    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
      this->_internal_name().data(), static_cast<int>(this->_internal_name().length()),
      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
      "BatteryConfig.Attributes_alert_delay.name");
    target = stream->WriteStringMaybeAliased(
        1, this->_internal_name(), target);
  }

  // int32 addr = 2;
  if (this->_internal_addr() != 0) {
    target = stream->EnsureSpace(target);
    target = ::_pbi::WireFormatLite::WriteInt32ToArray(2, this->_internal_addr(), target);
  }

  // int32 value = 3;
  if (this->_internal_value() != 0) {
    target = stream->EnsureSpace(target);
    target = ::_pbi::WireFormatLite::WriteInt32ToArray(3, this->_internal_value(), target);
  }

  // float scale = 4;
  static_assert(sizeof(uint32_t) == sizeof(float), "Code assumes uint32_t and float are the same size.");
  float tmp_scale = this->_internal_scale();
  uint32_t raw_scale;
  memcpy(&raw_scale, &tmp_scale, sizeof(tmp_scale));
  if (raw_scale != 0) {
    target = stream->EnsureSpace(target);
    target = ::_pbi::WireFormatLite::WriteFloatToArray(4, this->_internal_scale(), target);
  }

  // string introduce = 5;
  if (!this->_internal_introduce().empty()) {
    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
      this->_internal_introduce().data(), static_cast<int>(this->_internal_introduce().length()),
      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
      "BatteryConfig.Attributes_alert_delay.introduce");
    target = stream->WriteStringMaybeAliased(
        5, this->_internal_introduce(), target);
  }

  if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
    target = ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray(
        _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream);
  }
  // @@protoc_insertion_point(serialize_to_array_end:BatteryConfig.Attributes_alert_delay)
  return target;
}

size_t Attributes_alert_delay::ByteSizeLong() const {
// @@protoc_insertion_point(message_byte_size_start:BatteryConfig.Attributes_alert_delay)
  size_t total_size = 0;

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

  // string name = 1;
  if (!this->_internal_name().empty()) {
    total_size += 1 +
      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
        this->_internal_name());
  }

  // string introduce = 5;
  if (!this->_internal_introduce().empty()) {
    total_size += 1 +
      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
        this->_internal_introduce());
  }

  // int32 addr = 2;
  if (this->_internal_addr() != 0) {
    total_size += ::_pbi::WireFormatLite::Int32SizePlusOne(this->_internal_addr());
  }

  // int32 value = 3;
  if (this->_internal_value() != 0) {
    total_size += ::_pbi::WireFormatLite::Int32SizePlusOne(this->_internal_value());
  }

  // float scale = 4;
  static_assert(sizeof(uint32_t) == sizeof(float), "Code assumes uint32_t and float are the same size.");
  float tmp_scale = this->_internal_scale();
  uint32_t raw_scale;
  memcpy(&raw_scale, &tmp_scale, sizeof(tmp_scale));
  if (raw_scale != 0) {
    total_size += 1 + 4;
  }

  return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_);
}

const ::PROTOBUF_NAMESPACE_ID::Message::ClassData Attributes_alert_delay::_class_data_ = {
    ::PROTOBUF_NAMESPACE_ID::Message::CopyWithSourceCheck,
    Attributes_alert_delay::MergeImpl
};
const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*Attributes_alert_delay::GetClassData() const { return &_class_data_; }


void Attributes_alert_delay::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg) {
  auto* const _this = static_cast<Attributes_alert_delay*>(&to_msg);
  auto& from = static_cast<const Attributes_alert_delay&>(from_msg);
  // @@protoc_insertion_point(class_specific_merge_from_start:BatteryConfig.Attributes_alert_delay)
  GOOGLE_DCHECK_NE(&from, _this);
  uint32_t cached_has_bits = 0;
  (void) cached_has_bits;

  if (!from._internal_name().empty()) {
    _this->_internal_set_name(from._internal_name());
  }
  if (!from._internal_introduce().empty()) {
    _this->_internal_set_introduce(from._internal_introduce());
  }
  if (from._internal_addr() != 0) {
    _this->_internal_set_addr(from._internal_addr());
  }
  if (from._internal_value() != 0) {
    _this->_internal_set_value(from._internal_value());
  }
  static_assert(sizeof(uint32_t) == sizeof(float), "Code assumes uint32_t and float are the same size.");
  float tmp_scale = from._internal_scale();
  uint32_t raw_scale;
  memcpy(&raw_scale, &tmp_scale, sizeof(tmp_scale));
  if (raw_scale != 0) {
    _this->_internal_set_scale(from._internal_scale());
  }
  _this->_internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
}

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

bool Attributes_alert_delay::IsInitialized() const {
  return true;
}

void Attributes_alert_delay::InternalSwap(Attributes_alert_delay* other) {
  using std::swap;
  auto* lhs_arena = GetArenaForAllocation();
  auto* rhs_arena = other->GetArenaForAllocation();
  _internal_metadata_.InternalSwap(&other->_internal_metadata_);
  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
      &_impl_.name_, lhs_arena,
      &other->_impl_.name_, rhs_arena
  );
  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
      &_impl_.introduce_, lhs_arena,
      &other->_impl_.introduce_, rhs_arena
  );
  ::PROTOBUF_NAMESPACE_ID::internal::memswap<
      PROTOBUF_FIELD_OFFSET(Attributes_alert_delay, _impl_.scale_)
      + sizeof(Attributes_alert_delay::_impl_.scale_)
      - PROTOBUF_FIELD_OFFSET(Attributes_alert_delay, _impl_.addr_)>(
          reinterpret_cast<char*>(&_impl_.addr_),
          reinterpret_cast<char*>(&other->_impl_.addr_));
}

::PROTOBUF_NAMESPACE_ID::Metadata Attributes_alert_delay::GetMetadata() const {
  return ::_pbi::AssignDescriptors(
      &descriptor_table_battery_2eproto_getter, &descriptor_table_battery_2eproto_once,
      file_level_metadata_battery_2eproto[7]);
}

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

class Attributes_alert_release_value::_Internal {
 public:
};

Attributes_alert_release_value::Attributes_alert_release_value(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                         bool is_message_owned)
  : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned) {
  SharedCtor(arena, is_message_owned);
  // @@protoc_insertion_point(arena_constructor:BatteryConfig.Attributes_alert_release_value)
}
Attributes_alert_release_value::Attributes_alert_release_value(const Attributes_alert_release_value& from)
  : ::PROTOBUF_NAMESPACE_ID::Message() {
  Attributes_alert_release_value* const _this = this; (void)_this;
  new (&_impl_) Impl_{
      decltype(_impl_.name_){}
    , decltype(_impl_.introduce_){}
    , decltype(_impl_.addr_){}
    , decltype(_impl_.value_){}
    , decltype(_impl_.scale_){}
    , /*decltype(_impl_._cached_size_)*/{}};

  _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
  _impl_.name_.InitDefault();
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
    _impl_.name_.Set("", GetArenaForAllocation());
  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
  if (!from._internal_name().empty()) {
    _this->_impl_.name_.Set(from._internal_name(), 
      _this->GetArenaForAllocation());
  }
  _impl_.introduce_.InitDefault();
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
    _impl_.introduce_.Set("", GetArenaForAllocation());
  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
  if (!from._internal_introduce().empty()) {
    _this->_impl_.introduce_.Set(from._internal_introduce(), 
      _this->GetArenaForAllocation());
  }
  ::memcpy(&_impl_.addr_, &from._impl_.addr_,
    static_cast<size_t>(reinterpret_cast<char*>(&_impl_.scale_) -
    reinterpret_cast<char*>(&_impl_.addr_)) + sizeof(_impl_.scale_));
  // @@protoc_insertion_point(copy_constructor:BatteryConfig.Attributes_alert_release_value)
}

inline void Attributes_alert_release_value::SharedCtor(
    ::_pb::Arena* arena, bool is_message_owned) {
  (void)arena;
  (void)is_message_owned;
  new (&_impl_) Impl_{
      decltype(_impl_.name_){}
    , decltype(_impl_.introduce_){}
    , decltype(_impl_.addr_){0}
    , decltype(_impl_.value_){0}
    , decltype(_impl_.scale_){0}
    , /*decltype(_impl_._cached_size_)*/{}
  };
  _impl_.name_.InitDefault();
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
    _impl_.name_.Set("", GetArenaForAllocation());
  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
  _impl_.introduce_.InitDefault();
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
    _impl_.introduce_.Set("", GetArenaForAllocation());
  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
}

Attributes_alert_release_value::~Attributes_alert_release_value() {
  // @@protoc_insertion_point(destructor:BatteryConfig.Attributes_alert_release_value)
  if (auto *arena = _internal_metadata_.DeleteReturnArena<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>()) {
  (void)arena;
    return;
  }
  SharedDtor();
}

inline void Attributes_alert_release_value::SharedDtor() {
  GOOGLE_DCHECK(GetArenaForAllocation() == nullptr);
  _impl_.name_.Destroy();
  _impl_.introduce_.Destroy();
}

void Attributes_alert_release_value::SetCachedSize(int size) const {
  _impl_._cached_size_.Set(size);
}

void Attributes_alert_release_value::Clear() {
// @@protoc_insertion_point(message_clear_start:BatteryConfig.Attributes_alert_release_value)
  uint32_t cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  _impl_.name_.ClearToEmpty();
  _impl_.introduce_.ClearToEmpty();
  ::memset(&_impl_.addr_, 0, static_cast<size_t>(
      reinterpret_cast<char*>(&_impl_.scale_) -
      reinterpret_cast<char*>(&_impl_.addr_)) + sizeof(_impl_.scale_));
  _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
}

const char* Attributes_alert_release_value::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) {
#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  while (!ctx->Done(&ptr)) {
    uint32_t tag;
    ptr = ::_pbi::ReadTag(ptr, &tag);
    switch (tag >> 3) {
      // string name = 1;
      case 1:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 10)) {
          auto str = _internal_mutable_name();
          ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
          CHK_(ptr);
          CHK_(::_pbi::VerifyUTF8(str, "BatteryConfig.Attributes_alert_release_value.name"));
        } else
          goto handle_unusual;
        continue;
      // int32 addr = 2;
      case 2:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 16)) {
          _impl_.addr_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
          CHK_(ptr);
        } else
          goto handle_unusual;
        continue;
      // int32 value = 3;
      case 3:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 24)) {
          _impl_.value_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
          CHK_(ptr);
        } else
          goto handle_unusual;
        continue;
      // float scale = 4;
      case 4:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 37)) {
          _impl_.scale_ = ::PROTOBUF_NAMESPACE_ID::internal::UnalignedLoad<float>(ptr);
          ptr += sizeof(float);
        } else
          goto handle_unusual;
        continue;
      // string introduce = 5;
      case 5:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 42)) {
          auto str = _internal_mutable_introduce();
          ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
          CHK_(ptr);
          CHK_(::_pbi::VerifyUTF8(str, "BatteryConfig.Attributes_alert_release_value.introduce"));
        } else
          goto handle_unusual;
        continue;
      default:
        goto handle_unusual;
    }  // switch
  handle_unusual:
    if ((tag == 0) || ((tag & 7) == 4)) {
      CHK_(ptr);
      ctx->SetLastTag(tag);
      goto message_done;
    }
    ptr = UnknownFieldParse(
        tag,
        _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(),
        ptr, ctx);
    CHK_(ptr != nullptr);
  }  // while
message_done:
  return ptr;
failure:
  ptr = nullptr;
  goto message_done;
#undef CHK_
}

uint8_t* Attributes_alert_release_value::_InternalSerialize(
    uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const {
  // @@protoc_insertion_point(serialize_to_array_start:BatteryConfig.Attributes_alert_release_value)
  uint32_t cached_has_bits = 0;
  (void) cached_has_bits;

  // string name = 1;
  if (!this->_internal_name().empty()) {
    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
      this->_internal_name().data(), static_cast<int>(this->_internal_name().length()),
      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
      "BatteryConfig.Attributes_alert_release_value.name");
    target = stream->WriteStringMaybeAliased(
        1, this->_internal_name(), target);
  }

  // int32 addr = 2;
  if (this->_internal_addr() != 0) {
    target = stream->EnsureSpace(target);
    target = ::_pbi::WireFormatLite::WriteInt32ToArray(2, this->_internal_addr(), target);
  }

  // int32 value = 3;
  if (this->_internal_value() != 0) {
    target = stream->EnsureSpace(target);
    target = ::_pbi::WireFormatLite::WriteInt32ToArray(3, this->_internal_value(), target);
  }

  // float scale = 4;
  static_assert(sizeof(uint32_t) == sizeof(float), "Code assumes uint32_t and float are the same size.");
  float tmp_scale = this->_internal_scale();
  uint32_t raw_scale;
  memcpy(&raw_scale, &tmp_scale, sizeof(tmp_scale));
  if (raw_scale != 0) {
    target = stream->EnsureSpace(target);
    target = ::_pbi::WireFormatLite::WriteFloatToArray(4, this->_internal_scale(), target);
  }

  // string introduce = 5;
  if (!this->_internal_introduce().empty()) {
    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
      this->_internal_introduce().data(), static_cast<int>(this->_internal_introduce().length()),
      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
      "BatteryConfig.Attributes_alert_release_value.introduce");
    target = stream->WriteStringMaybeAliased(
        5, this->_internal_introduce(), target);
  }

  if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
    target = ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray(
        _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream);
  }
  // @@protoc_insertion_point(serialize_to_array_end:BatteryConfig.Attributes_alert_release_value)
  return target;
}

size_t Attributes_alert_release_value::ByteSizeLong() const {
// @@protoc_insertion_point(message_byte_size_start:BatteryConfig.Attributes_alert_release_value)
  size_t total_size = 0;

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

  // string name = 1;
  if (!this->_internal_name().empty()) {
    total_size += 1 +
      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
        this->_internal_name());
  }

  // string introduce = 5;
  if (!this->_internal_introduce().empty()) {
    total_size += 1 +
      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
        this->_internal_introduce());
  }

  // int32 addr = 2;
  if (this->_internal_addr() != 0) {
    total_size += ::_pbi::WireFormatLite::Int32SizePlusOne(this->_internal_addr());
  }

  // int32 value = 3;
  if (this->_internal_value() != 0) {
    total_size += ::_pbi::WireFormatLite::Int32SizePlusOne(this->_internal_value());
  }

  // float scale = 4;
  static_assert(sizeof(uint32_t) == sizeof(float), "Code assumes uint32_t and float are the same size.");
  float tmp_scale = this->_internal_scale();
  uint32_t raw_scale;
  memcpy(&raw_scale, &tmp_scale, sizeof(tmp_scale));
  if (raw_scale != 0) {
    total_size += 1 + 4;
  }

  return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_);
}

const ::PROTOBUF_NAMESPACE_ID::Message::ClassData Attributes_alert_release_value::_class_data_ = {
    ::PROTOBUF_NAMESPACE_ID::Message::CopyWithSourceCheck,
    Attributes_alert_release_value::MergeImpl
};
const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*Attributes_alert_release_value::GetClassData() const { return &_class_data_; }


void Attributes_alert_release_value::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg) {
  auto* const _this = static_cast<Attributes_alert_release_value*>(&to_msg);
  auto& from = static_cast<const Attributes_alert_release_value&>(from_msg);
  // @@protoc_insertion_point(class_specific_merge_from_start:BatteryConfig.Attributes_alert_release_value)
  GOOGLE_DCHECK_NE(&from, _this);
  uint32_t cached_has_bits = 0;
  (void) cached_has_bits;

  if (!from._internal_name().empty()) {
    _this->_internal_set_name(from._internal_name());
  }
  if (!from._internal_introduce().empty()) {
    _this->_internal_set_introduce(from._internal_introduce());
  }
  if (from._internal_addr() != 0) {
    _this->_internal_set_addr(from._internal_addr());
  }
  if (from._internal_value() != 0) {
    _this->_internal_set_value(from._internal_value());
  }
  static_assert(sizeof(uint32_t) == sizeof(float), "Code assumes uint32_t and float are the same size.");
  float tmp_scale = from._internal_scale();
  uint32_t raw_scale;
  memcpy(&raw_scale, &tmp_scale, sizeof(tmp_scale));
  if (raw_scale != 0) {
    _this->_internal_set_scale(from._internal_scale());
  }
  _this->_internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
}

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

bool Attributes_alert_release_value::IsInitialized() const {
  return true;
}

void Attributes_alert_release_value::InternalSwap(Attributes_alert_release_value* other) {
  using std::swap;
  auto* lhs_arena = GetArenaForAllocation();
  auto* rhs_arena = other->GetArenaForAllocation();
  _internal_metadata_.InternalSwap(&other->_internal_metadata_);
  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
      &_impl_.name_, lhs_arena,
      &other->_impl_.name_, rhs_arena
  );
  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
      &_impl_.introduce_, lhs_arena,
      &other->_impl_.introduce_, rhs_arena
  );
  ::PROTOBUF_NAMESPACE_ID::internal::memswap<
      PROTOBUF_FIELD_OFFSET(Attributes_alert_release_value, _impl_.scale_)
      + sizeof(Attributes_alert_release_value::_impl_.scale_)
      - PROTOBUF_FIELD_OFFSET(Attributes_alert_release_value, _impl_.addr_)>(
          reinterpret_cast<char*>(&_impl_.addr_),
          reinterpret_cast<char*>(&other->_impl_.addr_));
}

::PROTOBUF_NAMESPACE_ID::Metadata Attributes_alert_release_value::GetMetadata() const {
  return ::_pbi::AssignDescriptors(
      &descriptor_table_battery_2eproto_getter, &descriptor_table_battery_2eproto_once,
      file_level_metadata_battery_2eproto[8]);
}

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

class Attributes_alert_release_delay::_Internal {
 public:
};

Attributes_alert_release_delay::Attributes_alert_release_delay(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                         bool is_message_owned)
  : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned) {
  SharedCtor(arena, is_message_owned);
  // @@protoc_insertion_point(arena_constructor:BatteryConfig.Attributes_alert_release_delay)
}
Attributes_alert_release_delay::Attributes_alert_release_delay(const Attributes_alert_release_delay& from)
  : ::PROTOBUF_NAMESPACE_ID::Message() {
  Attributes_alert_release_delay* const _this = this; (void)_this;
  new (&_impl_) Impl_{
      decltype(_impl_.name_){}
    , decltype(_impl_.introduce_){}
    , decltype(_impl_.addr_){}
    , decltype(_impl_.value_){}
    , decltype(_impl_.scale_){}
    , /*decltype(_impl_._cached_size_)*/{}};

  _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
  _impl_.name_.InitDefault();
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
    _impl_.name_.Set("", GetArenaForAllocation());
  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
  if (!from._internal_name().empty()) {
    _this->_impl_.name_.Set(from._internal_name(), 
      _this->GetArenaForAllocation());
  }
  _impl_.introduce_.InitDefault();
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
    _impl_.introduce_.Set("", GetArenaForAllocation());
  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
  if (!from._internal_introduce().empty()) {
    _this->_impl_.introduce_.Set(from._internal_introduce(), 
      _this->GetArenaForAllocation());
  }
  ::memcpy(&_impl_.addr_, &from._impl_.addr_,
    static_cast<size_t>(reinterpret_cast<char*>(&_impl_.scale_) -
    reinterpret_cast<char*>(&_impl_.addr_)) + sizeof(_impl_.scale_));
  // @@protoc_insertion_point(copy_constructor:BatteryConfig.Attributes_alert_release_delay)
}

inline void Attributes_alert_release_delay::SharedCtor(
    ::_pb::Arena* arena, bool is_message_owned) {
  (void)arena;
  (void)is_message_owned;
  new (&_impl_) Impl_{
      decltype(_impl_.name_){}
    , decltype(_impl_.introduce_){}
    , decltype(_impl_.addr_){0}
    , decltype(_impl_.value_){0}
    , decltype(_impl_.scale_){0}
    , /*decltype(_impl_._cached_size_)*/{}
  };
  _impl_.name_.InitDefault();
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
    _impl_.name_.Set("", GetArenaForAllocation());
  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
  _impl_.introduce_.InitDefault();
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
    _impl_.introduce_.Set("", GetArenaForAllocation());
  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
}

Attributes_alert_release_delay::~Attributes_alert_release_delay() {
  // @@protoc_insertion_point(destructor:BatteryConfig.Attributes_alert_release_delay)
  if (auto *arena = _internal_metadata_.DeleteReturnArena<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>()) {
  (void)arena;
    return;
  }
  SharedDtor();
}

inline void Attributes_alert_release_delay::SharedDtor() {
  GOOGLE_DCHECK(GetArenaForAllocation() == nullptr);
  _impl_.name_.Destroy();
  _impl_.introduce_.Destroy();
}

void Attributes_alert_release_delay::SetCachedSize(int size) const {
  _impl_._cached_size_.Set(size);
}

void Attributes_alert_release_delay::Clear() {
// @@protoc_insertion_point(message_clear_start:BatteryConfig.Attributes_alert_release_delay)
  uint32_t cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  _impl_.name_.ClearToEmpty();
  _impl_.introduce_.ClearToEmpty();
  ::memset(&_impl_.addr_, 0, static_cast<size_t>(
      reinterpret_cast<char*>(&_impl_.scale_) -
      reinterpret_cast<char*>(&_impl_.addr_)) + sizeof(_impl_.scale_));
  _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
}

const char* Attributes_alert_release_delay::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) {
#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  while (!ctx->Done(&ptr)) {
    uint32_t tag;
    ptr = ::_pbi::ReadTag(ptr, &tag);
    switch (tag >> 3) {
      // string name = 1;
      case 1:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 10)) {
          auto str = _internal_mutable_name();
          ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
          CHK_(ptr);
          CHK_(::_pbi::VerifyUTF8(str, "BatteryConfig.Attributes_alert_release_delay.name"));
        } else
          goto handle_unusual;
        continue;
      // int32 addr = 2;
      case 2:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 16)) {
          _impl_.addr_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
          CHK_(ptr);
        } else
          goto handle_unusual;
        continue;
      // int32 value = 3;
      case 3:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 24)) {
          _impl_.value_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
          CHK_(ptr);
        } else
          goto handle_unusual;
        continue;
      // float scale = 4;
      case 4:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 37)) {
          _impl_.scale_ = ::PROTOBUF_NAMESPACE_ID::internal::UnalignedLoad<float>(ptr);
          ptr += sizeof(float);
        } else
          goto handle_unusual;
        continue;
      // string introduce = 5;
      case 5:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 42)) {
          auto str = _internal_mutable_introduce();
          ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
          CHK_(ptr);
          CHK_(::_pbi::VerifyUTF8(str, "BatteryConfig.Attributes_alert_release_delay.introduce"));
        } else
          goto handle_unusual;
        continue;
      default:
        goto handle_unusual;
    }  // switch
  handle_unusual:
    if ((tag == 0) || ((tag & 7) == 4)) {
      CHK_(ptr);
      ctx->SetLastTag(tag);
      goto message_done;
    }
    ptr = UnknownFieldParse(
        tag,
        _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(),
        ptr, ctx);
    CHK_(ptr != nullptr);
  }  // while
message_done:
  return ptr;
failure:
  ptr = nullptr;
  goto message_done;
#undef CHK_
}

uint8_t* Attributes_alert_release_delay::_InternalSerialize(
    uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const {
  // @@protoc_insertion_point(serialize_to_array_start:BatteryConfig.Attributes_alert_release_delay)
  uint32_t cached_has_bits = 0;
  (void) cached_has_bits;

  // string name = 1;
  if (!this->_internal_name().empty()) {
    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
      this->_internal_name().data(), static_cast<int>(this->_internal_name().length()),
      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
      "BatteryConfig.Attributes_alert_release_delay.name");
    target = stream->WriteStringMaybeAliased(
        1, this->_internal_name(), target);
  }

  // int32 addr = 2;
  if (this->_internal_addr() != 0) {
    target = stream->EnsureSpace(target);
    target = ::_pbi::WireFormatLite::WriteInt32ToArray(2, this->_internal_addr(), target);
  }

  // int32 value = 3;
  if (this->_internal_value() != 0) {
    target = stream->EnsureSpace(target);
    target = ::_pbi::WireFormatLite::WriteInt32ToArray(3, this->_internal_value(), target);
  }

  // float scale = 4;
  static_assert(sizeof(uint32_t) == sizeof(float), "Code assumes uint32_t and float are the same size.");
  float tmp_scale = this->_internal_scale();
  uint32_t raw_scale;
  memcpy(&raw_scale, &tmp_scale, sizeof(tmp_scale));
  if (raw_scale != 0) {
    target = stream->EnsureSpace(target);
    target = ::_pbi::WireFormatLite::WriteFloatToArray(4, this->_internal_scale(), target);
  }

  // string introduce = 5;
  if (!this->_internal_introduce().empty()) {
    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
      this->_internal_introduce().data(), static_cast<int>(this->_internal_introduce().length()),
      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
      "BatteryConfig.Attributes_alert_release_delay.introduce");
    target = stream->WriteStringMaybeAliased(
        5, this->_internal_introduce(), target);
  }

  if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
    target = ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray(
        _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream);
  }
  // @@protoc_insertion_point(serialize_to_array_end:BatteryConfig.Attributes_alert_release_delay)
  return target;
}

size_t Attributes_alert_release_delay::ByteSizeLong() const {
// @@protoc_insertion_point(message_byte_size_start:BatteryConfig.Attributes_alert_release_delay)
  size_t total_size = 0;

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

  // string name = 1;
  if (!this->_internal_name().empty()) {
    total_size += 1 +
      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
        this->_internal_name());
  }

  // string introduce = 5;
  if (!this->_internal_introduce().empty()) {
    total_size += 1 +
      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
        this->_internal_introduce());
  }

  // int32 addr = 2;
  if (this->_internal_addr() != 0) {
    total_size += ::_pbi::WireFormatLite::Int32SizePlusOne(this->_internal_addr());
  }

  // int32 value = 3;
  if (this->_internal_value() != 0) {
    total_size += ::_pbi::WireFormatLite::Int32SizePlusOne(this->_internal_value());
  }

  // float scale = 4;
  static_assert(sizeof(uint32_t) == sizeof(float), "Code assumes uint32_t and float are the same size.");
  float tmp_scale = this->_internal_scale();
  uint32_t raw_scale;
  memcpy(&raw_scale, &tmp_scale, sizeof(tmp_scale));
  if (raw_scale != 0) {
    total_size += 1 + 4;
  }

  return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_);
}

const ::PROTOBUF_NAMESPACE_ID::Message::ClassData Attributes_alert_release_delay::_class_data_ = {
    ::PROTOBUF_NAMESPACE_ID::Message::CopyWithSourceCheck,
    Attributes_alert_release_delay::MergeImpl
};
const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*Attributes_alert_release_delay::GetClassData() const { return &_class_data_; }


void Attributes_alert_release_delay::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg) {
  auto* const _this = static_cast<Attributes_alert_release_delay*>(&to_msg);
  auto& from = static_cast<const Attributes_alert_release_delay&>(from_msg);
  // @@protoc_insertion_point(class_specific_merge_from_start:BatteryConfig.Attributes_alert_release_delay)
  GOOGLE_DCHECK_NE(&from, _this);
  uint32_t cached_has_bits = 0;
  (void) cached_has_bits;

  if (!from._internal_name().empty()) {
    _this->_internal_set_name(from._internal_name());
  }
  if (!from._internal_introduce().empty()) {
    _this->_internal_set_introduce(from._internal_introduce());
  }
  if (from._internal_addr() != 0) {
    _this->_internal_set_addr(from._internal_addr());
  }
  if (from._internal_value() != 0) {
    _this->_internal_set_value(from._internal_value());
  }
  static_assert(sizeof(uint32_t) == sizeof(float), "Code assumes uint32_t and float are the same size.");
  float tmp_scale = from._internal_scale();
  uint32_t raw_scale;
  memcpy(&raw_scale, &tmp_scale, sizeof(tmp_scale));
  if (raw_scale != 0) {
    _this->_internal_set_scale(from._internal_scale());
  }
  _this->_internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
}

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

bool Attributes_alert_release_delay::IsInitialized() const {
  return true;
}

void Attributes_alert_release_delay::InternalSwap(Attributes_alert_release_delay* other) {
  using std::swap;
  auto* lhs_arena = GetArenaForAllocation();
  auto* rhs_arena = other->GetArenaForAllocation();
  _internal_metadata_.InternalSwap(&other->_internal_metadata_);
  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
      &_impl_.name_, lhs_arena,
      &other->_impl_.name_, rhs_arena
  );
  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
      &_impl_.introduce_, lhs_arena,
      &other->_impl_.introduce_, rhs_arena
  );
  ::PROTOBUF_NAMESPACE_ID::internal::memswap<
      PROTOBUF_FIELD_OFFSET(Attributes_alert_release_delay, _impl_.scale_)
      + sizeof(Attributes_alert_release_delay::_impl_.scale_)
      - PROTOBUF_FIELD_OFFSET(Attributes_alert_release_delay, _impl_.addr_)>(
          reinterpret_cast<char*>(&_impl_.addr_),
          reinterpret_cast<char*>(&other->_impl_.addr_));
}

::PROTOBUF_NAMESPACE_ID::Metadata Attributes_alert_release_delay::GetMetadata() const {
  return ::_pbi::AssignDescriptors(
      &descriptor_table_battery_2eproto_getter, &descriptor_table_battery_2eproto_once,
      file_level_metadata_battery_2eproto[9]);
}

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

class Attributes_alert_dropcurr_rate::_Internal {
 public:
};

Attributes_alert_dropcurr_rate::Attributes_alert_dropcurr_rate(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                         bool is_message_owned)
  : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned) {
  SharedCtor(arena, is_message_owned);
  // @@protoc_insertion_point(arena_constructor:BatteryConfig.Attributes_alert_dropcurr_rate)
}
Attributes_alert_dropcurr_rate::Attributes_alert_dropcurr_rate(const Attributes_alert_dropcurr_rate& from)
  : ::PROTOBUF_NAMESPACE_ID::Message() {
  Attributes_alert_dropcurr_rate* const _this = this; (void)_this;
  new (&_impl_) Impl_{
      decltype(_impl_.name_){}
    , decltype(_impl_.introduce_){}
    , decltype(_impl_.addr_){}
    , decltype(_impl_.value_){}
    , decltype(_impl_.scale_){}
    , /*decltype(_impl_._cached_size_)*/{}};

  _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
  _impl_.name_.InitDefault();
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
    _impl_.name_.Set("", GetArenaForAllocation());
  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
  if (!from._internal_name().empty()) {
    _this->_impl_.name_.Set(from._internal_name(), 
      _this->GetArenaForAllocation());
  }
  _impl_.introduce_.InitDefault();
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
    _impl_.introduce_.Set("", GetArenaForAllocation());
  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
  if (!from._internal_introduce().empty()) {
    _this->_impl_.introduce_.Set(from._internal_introduce(), 
      _this->GetArenaForAllocation());
  }
  ::memcpy(&_impl_.addr_, &from._impl_.addr_,
    static_cast<size_t>(reinterpret_cast<char*>(&_impl_.scale_) -
    reinterpret_cast<char*>(&_impl_.addr_)) + sizeof(_impl_.scale_));
  // @@protoc_insertion_point(copy_constructor:BatteryConfig.Attributes_alert_dropcurr_rate)
}

inline void Attributes_alert_dropcurr_rate::SharedCtor(
    ::_pb::Arena* arena, bool is_message_owned) {
  (void)arena;
  (void)is_message_owned;
  new (&_impl_) Impl_{
      decltype(_impl_.name_){}
    , decltype(_impl_.introduce_){}
    , decltype(_impl_.addr_){0}
    , decltype(_impl_.value_){0}
    , decltype(_impl_.scale_){0}
    , /*decltype(_impl_._cached_size_)*/{}
  };
  _impl_.name_.InitDefault();
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
    _impl_.name_.Set("", GetArenaForAllocation());
  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
  _impl_.introduce_.InitDefault();
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
    _impl_.introduce_.Set("", GetArenaForAllocation());
  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
}

Attributes_alert_dropcurr_rate::~Attributes_alert_dropcurr_rate() {
  // @@protoc_insertion_point(destructor:BatteryConfig.Attributes_alert_dropcurr_rate)
  if (auto *arena = _internal_metadata_.DeleteReturnArena<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>()) {
  (void)arena;
    return;
  }
  SharedDtor();
}

inline void Attributes_alert_dropcurr_rate::SharedDtor() {
  GOOGLE_DCHECK(GetArenaForAllocation() == nullptr);
  _impl_.name_.Destroy();
  _impl_.introduce_.Destroy();
}

void Attributes_alert_dropcurr_rate::SetCachedSize(int size) const {
  _impl_._cached_size_.Set(size);
}

void Attributes_alert_dropcurr_rate::Clear() {
// @@protoc_insertion_point(message_clear_start:BatteryConfig.Attributes_alert_dropcurr_rate)
  uint32_t cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  _impl_.name_.ClearToEmpty();
  _impl_.introduce_.ClearToEmpty();
  ::memset(&_impl_.addr_, 0, static_cast<size_t>(
      reinterpret_cast<char*>(&_impl_.scale_) -
      reinterpret_cast<char*>(&_impl_.addr_)) + sizeof(_impl_.scale_));
  _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
}

const char* Attributes_alert_dropcurr_rate::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) {
#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  while (!ctx->Done(&ptr)) {
    uint32_t tag;
    ptr = ::_pbi::ReadTag(ptr, &tag);
    switch (tag >> 3) {
      // string name = 1;
      case 1:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 10)) {
          auto str = _internal_mutable_name();
          ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
          CHK_(ptr);
          CHK_(::_pbi::VerifyUTF8(str, "BatteryConfig.Attributes_alert_dropcurr_rate.name"));
        } else
          goto handle_unusual;
        continue;
      // int32 addr = 2;
      case 2:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 16)) {
          _impl_.addr_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
          CHK_(ptr);
        } else
          goto handle_unusual;
        continue;
      // int32 value = 3;
      case 3:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 24)) {
          _impl_.value_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
          CHK_(ptr);
        } else
          goto handle_unusual;
        continue;
      // float scale = 4;
      case 4:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 37)) {
          _impl_.scale_ = ::PROTOBUF_NAMESPACE_ID::internal::UnalignedLoad<float>(ptr);
          ptr += sizeof(float);
        } else
          goto handle_unusual;
        continue;
      // string introduce = 5;
      case 5:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 42)) {
          auto str = _internal_mutable_introduce();
          ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
          CHK_(ptr);
          CHK_(::_pbi::VerifyUTF8(str, "BatteryConfig.Attributes_alert_dropcurr_rate.introduce"));
        } else
          goto handle_unusual;
        continue;
      default:
        goto handle_unusual;
    }  // switch
  handle_unusual:
    if ((tag == 0) || ((tag & 7) == 4)) {
      CHK_(ptr);
      ctx->SetLastTag(tag);
      goto message_done;
    }
    ptr = UnknownFieldParse(
        tag,
        _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(),
        ptr, ctx);
    CHK_(ptr != nullptr);
  }  // while
message_done:
  return ptr;
failure:
  ptr = nullptr;
  goto message_done;
#undef CHK_
}

uint8_t* Attributes_alert_dropcurr_rate::_InternalSerialize(
    uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const {
  // @@protoc_insertion_point(serialize_to_array_start:BatteryConfig.Attributes_alert_dropcurr_rate)
  uint32_t cached_has_bits = 0;
  (void) cached_has_bits;

  // string name = 1;
  if (!this->_internal_name().empty()) {
    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
      this->_internal_name().data(), static_cast<int>(this->_internal_name().length()),
      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
      "BatteryConfig.Attributes_alert_dropcurr_rate.name");
    target = stream->WriteStringMaybeAliased(
        1, this->_internal_name(), target);
  }

  // int32 addr = 2;
  if (this->_internal_addr() != 0) {
    target = stream->EnsureSpace(target);
    target = ::_pbi::WireFormatLite::WriteInt32ToArray(2, this->_internal_addr(), target);
  }

  // int32 value = 3;
  if (this->_internal_value() != 0) {
    target = stream->EnsureSpace(target);
    target = ::_pbi::WireFormatLite::WriteInt32ToArray(3, this->_internal_value(), target);
  }

  // float scale = 4;
  static_assert(sizeof(uint32_t) == sizeof(float), "Code assumes uint32_t and float are the same size.");
  float tmp_scale = this->_internal_scale();
  uint32_t raw_scale;
  memcpy(&raw_scale, &tmp_scale, sizeof(tmp_scale));
  if (raw_scale != 0) {
    target = stream->EnsureSpace(target);
    target = ::_pbi::WireFormatLite::WriteFloatToArray(4, this->_internal_scale(), target);
  }

  // string introduce = 5;
  if (!this->_internal_introduce().empty()) {
    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
      this->_internal_introduce().data(), static_cast<int>(this->_internal_introduce().length()),
      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
      "BatteryConfig.Attributes_alert_dropcurr_rate.introduce");
    target = stream->WriteStringMaybeAliased(
        5, this->_internal_introduce(), target);
  }

  if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
    target = ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray(
        _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream);
  }
  // @@protoc_insertion_point(serialize_to_array_end:BatteryConfig.Attributes_alert_dropcurr_rate)
  return target;
}

size_t Attributes_alert_dropcurr_rate::ByteSizeLong() const {
// @@protoc_insertion_point(message_byte_size_start:BatteryConfig.Attributes_alert_dropcurr_rate)
  size_t total_size = 0;

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

  // string name = 1;
  if (!this->_internal_name().empty()) {
    total_size += 1 +
      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
        this->_internal_name());
  }

  // string introduce = 5;
  if (!this->_internal_introduce().empty()) {
    total_size += 1 +
      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
        this->_internal_introduce());
  }

  // int32 addr = 2;
  if (this->_internal_addr() != 0) {
    total_size += ::_pbi::WireFormatLite::Int32SizePlusOne(this->_internal_addr());
  }

  // int32 value = 3;
  if (this->_internal_value() != 0) {
    total_size += ::_pbi::WireFormatLite::Int32SizePlusOne(this->_internal_value());
  }

  // float scale = 4;
  static_assert(sizeof(uint32_t) == sizeof(float), "Code assumes uint32_t and float are the same size.");
  float tmp_scale = this->_internal_scale();
  uint32_t raw_scale;
  memcpy(&raw_scale, &tmp_scale, sizeof(tmp_scale));
  if (raw_scale != 0) {
    total_size += 1 + 4;
  }

  return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_);
}

const ::PROTOBUF_NAMESPACE_ID::Message::ClassData Attributes_alert_dropcurr_rate::_class_data_ = {
    ::PROTOBUF_NAMESPACE_ID::Message::CopyWithSourceCheck,
    Attributes_alert_dropcurr_rate::MergeImpl
};
const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*Attributes_alert_dropcurr_rate::GetClassData() const { return &_class_data_; }


void Attributes_alert_dropcurr_rate::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg) {
  auto* const _this = static_cast<Attributes_alert_dropcurr_rate*>(&to_msg);
  auto& from = static_cast<const Attributes_alert_dropcurr_rate&>(from_msg);
  // @@protoc_insertion_point(class_specific_merge_from_start:BatteryConfig.Attributes_alert_dropcurr_rate)
  GOOGLE_DCHECK_NE(&from, _this);
  uint32_t cached_has_bits = 0;
  (void) cached_has_bits;

  if (!from._internal_name().empty()) {
    _this->_internal_set_name(from._internal_name());
  }
  if (!from._internal_introduce().empty()) {
    _this->_internal_set_introduce(from._internal_introduce());
  }
  if (from._internal_addr() != 0) {
    _this->_internal_set_addr(from._internal_addr());
  }
  if (from._internal_value() != 0) {
    _this->_internal_set_value(from._internal_value());
  }
  static_assert(sizeof(uint32_t) == sizeof(float), "Code assumes uint32_t and float are the same size.");
  float tmp_scale = from._internal_scale();
  uint32_t raw_scale;
  memcpy(&raw_scale, &tmp_scale, sizeof(tmp_scale));
  if (raw_scale != 0) {
    _this->_internal_set_scale(from._internal_scale());
  }
  _this->_internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
}

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

bool Attributes_alert_dropcurr_rate::IsInitialized() const {
  return true;
}

void Attributes_alert_dropcurr_rate::InternalSwap(Attributes_alert_dropcurr_rate* other) {
  using std::swap;
  auto* lhs_arena = GetArenaForAllocation();
  auto* rhs_arena = other->GetArenaForAllocation();
  _internal_metadata_.InternalSwap(&other->_internal_metadata_);
  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
      &_impl_.name_, lhs_arena,
      &other->_impl_.name_, rhs_arena
  );
  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
      &_impl_.introduce_, lhs_arena,
      &other->_impl_.introduce_, rhs_arena
  );
  ::PROTOBUF_NAMESPACE_ID::internal::memswap<
      PROTOBUF_FIELD_OFFSET(Attributes_alert_dropcurr_rate, _impl_.scale_)
      + sizeof(Attributes_alert_dropcurr_rate::_impl_.scale_)
      - PROTOBUF_FIELD_OFFSET(Attributes_alert_dropcurr_rate, _impl_.addr_)>(
          reinterpret_cast<char*>(&_impl_.addr_),
          reinterpret_cast<char*>(&other->_impl_.addr_));
}

::PROTOBUF_NAMESPACE_ID::Metadata Attributes_alert_dropcurr_rate::GetMetadata() const {
  return ::_pbi::AssignDescriptors(
      &descriptor_table_battery_2eproto_getter, &descriptor_table_battery_2eproto_once,
      file_level_metadata_battery_2eproto[10]);
}

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

class Attributes_alert_solve_measure::_Internal {
 public:
};

Attributes_alert_solve_measure::Attributes_alert_solve_measure(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                         bool is_message_owned)
  : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned) {
  SharedCtor(arena, is_message_owned);
  // @@protoc_insertion_point(arena_constructor:BatteryConfig.Attributes_alert_solve_measure)
}
Attributes_alert_solve_measure::Attributes_alert_solve_measure(const Attributes_alert_solve_measure& from)
  : ::PROTOBUF_NAMESPACE_ID::Message() {
  Attributes_alert_solve_measure* const _this = this; (void)_this;
  new (&_impl_) Impl_{
      decltype(_impl_.name_){}
    , decltype(_impl_.introduce_){}
    , decltype(_impl_.addr_){}
    , decltype(_impl_.value_){}
    , decltype(_impl_.scale_){}
    , /*decltype(_impl_._cached_size_)*/{}};

  _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
  _impl_.name_.InitDefault();
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
    _impl_.name_.Set("", GetArenaForAllocation());
  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
  if (!from._internal_name().empty()) {
    _this->_impl_.name_.Set(from._internal_name(), 
      _this->GetArenaForAllocation());
  }
  _impl_.introduce_.InitDefault();
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
    _impl_.introduce_.Set("", GetArenaForAllocation());
  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
  if (!from._internal_introduce().empty()) {
    _this->_impl_.introduce_.Set(from._internal_introduce(), 
      _this->GetArenaForAllocation());
  }
  ::memcpy(&_impl_.addr_, &from._impl_.addr_,
    static_cast<size_t>(reinterpret_cast<char*>(&_impl_.scale_) -
    reinterpret_cast<char*>(&_impl_.addr_)) + sizeof(_impl_.scale_));
  // @@protoc_insertion_point(copy_constructor:BatteryConfig.Attributes_alert_solve_measure)
}

inline void Attributes_alert_solve_measure::SharedCtor(
    ::_pb::Arena* arena, bool is_message_owned) {
  (void)arena;
  (void)is_message_owned;
  new (&_impl_) Impl_{
      decltype(_impl_.name_){}
    , decltype(_impl_.introduce_){}
    , decltype(_impl_.addr_){0}
    , decltype(_impl_.value_){0}
    , decltype(_impl_.scale_){0}
    , /*decltype(_impl_._cached_size_)*/{}
  };
  _impl_.name_.InitDefault();
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
    _impl_.name_.Set("", GetArenaForAllocation());
  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
  _impl_.introduce_.InitDefault();
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
    _impl_.introduce_.Set("", GetArenaForAllocation());
  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
}

Attributes_alert_solve_measure::~Attributes_alert_solve_measure() {
  // @@protoc_insertion_point(destructor:BatteryConfig.Attributes_alert_solve_measure)
  if (auto *arena = _internal_metadata_.DeleteReturnArena<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>()) {
  (void)arena;
    return;
  }
  SharedDtor();
}

inline void Attributes_alert_solve_measure::SharedDtor() {
  GOOGLE_DCHECK(GetArenaForAllocation() == nullptr);
  _impl_.name_.Destroy();
  _impl_.introduce_.Destroy();
}

void Attributes_alert_solve_measure::SetCachedSize(int size) const {
  _impl_._cached_size_.Set(size);
}

void Attributes_alert_solve_measure::Clear() {
// @@protoc_insertion_point(message_clear_start:BatteryConfig.Attributes_alert_solve_measure)
  uint32_t cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  _impl_.name_.ClearToEmpty();
  _impl_.introduce_.ClearToEmpty();
  ::memset(&_impl_.addr_, 0, static_cast<size_t>(
      reinterpret_cast<char*>(&_impl_.scale_) -
      reinterpret_cast<char*>(&_impl_.addr_)) + sizeof(_impl_.scale_));
  _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
}

const char* Attributes_alert_solve_measure::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) {
#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  while (!ctx->Done(&ptr)) {
    uint32_t tag;
    ptr = ::_pbi::ReadTag(ptr, &tag);
    switch (tag >> 3) {
      // string name = 1;
      case 1:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 10)) {
          auto str = _internal_mutable_name();
          ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
          CHK_(ptr);
          CHK_(::_pbi::VerifyUTF8(str, "BatteryConfig.Attributes_alert_solve_measure.name"));
        } else
          goto handle_unusual;
        continue;
      // int32 addr = 2;
      case 2:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 16)) {
          _impl_.addr_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
          CHK_(ptr);
        } else
          goto handle_unusual;
        continue;
      // int32 value = 3;
      case 3:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 24)) {
          _impl_.value_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
          CHK_(ptr);
        } else
          goto handle_unusual;
        continue;
      // float scale = 4;
      case 4:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 37)) {
          _impl_.scale_ = ::PROTOBUF_NAMESPACE_ID::internal::UnalignedLoad<float>(ptr);
          ptr += sizeof(float);
        } else
          goto handle_unusual;
        continue;
      // string introduce = 5;
      case 5:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 42)) {
          auto str = _internal_mutable_introduce();
          ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
          CHK_(ptr);
          CHK_(::_pbi::VerifyUTF8(str, "BatteryConfig.Attributes_alert_solve_measure.introduce"));
        } else
          goto handle_unusual;
        continue;
      default:
        goto handle_unusual;
    }  // switch
  handle_unusual:
    if ((tag == 0) || ((tag & 7) == 4)) {
      CHK_(ptr);
      ctx->SetLastTag(tag);
      goto message_done;
    }
    ptr = UnknownFieldParse(
        tag,
        _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(),
        ptr, ctx);
    CHK_(ptr != nullptr);
  }  // while
message_done:
  return ptr;
failure:
  ptr = nullptr;
  goto message_done;
#undef CHK_
}

uint8_t* Attributes_alert_solve_measure::_InternalSerialize(
    uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const {
  // @@protoc_insertion_point(serialize_to_array_start:BatteryConfig.Attributes_alert_solve_measure)
  uint32_t cached_has_bits = 0;
  (void) cached_has_bits;

  // string name = 1;
  if (!this->_internal_name().empty()) {
    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
      this->_internal_name().data(), static_cast<int>(this->_internal_name().length()),
      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
      "BatteryConfig.Attributes_alert_solve_measure.name");
    target = stream->WriteStringMaybeAliased(
        1, this->_internal_name(), target);
  }

  // int32 addr = 2;
  if (this->_internal_addr() != 0) {
    target = stream->EnsureSpace(target);
    target = ::_pbi::WireFormatLite::WriteInt32ToArray(2, this->_internal_addr(), target);
  }

  // int32 value = 3;
  if (this->_internal_value() != 0) {
    target = stream->EnsureSpace(target);
    target = ::_pbi::WireFormatLite::WriteInt32ToArray(3, this->_internal_value(), target);
  }

  // float scale = 4;
  static_assert(sizeof(uint32_t) == sizeof(float), "Code assumes uint32_t and float are the same size.");
  float tmp_scale = this->_internal_scale();
  uint32_t raw_scale;
  memcpy(&raw_scale, &tmp_scale, sizeof(tmp_scale));
  if (raw_scale != 0) {
    target = stream->EnsureSpace(target);
    target = ::_pbi::WireFormatLite::WriteFloatToArray(4, this->_internal_scale(), target);
  }

  // string introduce = 5;
  if (!this->_internal_introduce().empty()) {
    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
      this->_internal_introduce().data(), static_cast<int>(this->_internal_introduce().length()),
      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
      "BatteryConfig.Attributes_alert_solve_measure.introduce");
    target = stream->WriteStringMaybeAliased(
        5, this->_internal_introduce(), target);
  }

  if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
    target = ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray(
        _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream);
  }
  // @@protoc_insertion_point(serialize_to_array_end:BatteryConfig.Attributes_alert_solve_measure)
  return target;
}

size_t Attributes_alert_solve_measure::ByteSizeLong() const {
// @@protoc_insertion_point(message_byte_size_start:BatteryConfig.Attributes_alert_solve_measure)
  size_t total_size = 0;

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

  // string name = 1;
  if (!this->_internal_name().empty()) {
    total_size += 1 +
      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
        this->_internal_name());
  }

  // string introduce = 5;
  if (!this->_internal_introduce().empty()) {
    total_size += 1 +
      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
        this->_internal_introduce());
  }

  // int32 addr = 2;
  if (this->_internal_addr() != 0) {
    total_size += ::_pbi::WireFormatLite::Int32SizePlusOne(this->_internal_addr());
  }

  // int32 value = 3;
  if (this->_internal_value() != 0) {
    total_size += ::_pbi::WireFormatLite::Int32SizePlusOne(this->_internal_value());
  }

  // float scale = 4;
  static_assert(sizeof(uint32_t) == sizeof(float), "Code assumes uint32_t and float are the same size.");
  float tmp_scale = this->_internal_scale();
  uint32_t raw_scale;
  memcpy(&raw_scale, &tmp_scale, sizeof(tmp_scale));
  if (raw_scale != 0) {
    total_size += 1 + 4;
  }

  return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_);
}

const ::PROTOBUF_NAMESPACE_ID::Message::ClassData Attributes_alert_solve_measure::_class_data_ = {
    ::PROTOBUF_NAMESPACE_ID::Message::CopyWithSourceCheck,
    Attributes_alert_solve_measure::MergeImpl
};
const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*Attributes_alert_solve_measure::GetClassData() const { return &_class_data_; }


void Attributes_alert_solve_measure::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg) {
  auto* const _this = static_cast<Attributes_alert_solve_measure*>(&to_msg);
  auto& from = static_cast<const Attributes_alert_solve_measure&>(from_msg);
  // @@protoc_insertion_point(class_specific_merge_from_start:BatteryConfig.Attributes_alert_solve_measure)
  GOOGLE_DCHECK_NE(&from, _this);
  uint32_t cached_has_bits = 0;
  (void) cached_has_bits;

  if (!from._internal_name().empty()) {
    _this->_internal_set_name(from._internal_name());
  }
  if (!from._internal_introduce().empty()) {
    _this->_internal_set_introduce(from._internal_introduce());
  }
  if (from._internal_addr() != 0) {
    _this->_internal_set_addr(from._internal_addr());
  }
  if (from._internal_value() != 0) {
    _this->_internal_set_value(from._internal_value());
  }
  static_assert(sizeof(uint32_t) == sizeof(float), "Code assumes uint32_t and float are the same size.");
  float tmp_scale = from._internal_scale();
  uint32_t raw_scale;
  memcpy(&raw_scale, &tmp_scale, sizeof(tmp_scale));
  if (raw_scale != 0) {
    _this->_internal_set_scale(from._internal_scale());
  }
  _this->_internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
}

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

bool Attributes_alert_solve_measure::IsInitialized() const {
  return true;
}

void Attributes_alert_solve_measure::InternalSwap(Attributes_alert_solve_measure* other) {
  using std::swap;
  auto* lhs_arena = GetArenaForAllocation();
  auto* rhs_arena = other->GetArenaForAllocation();
  _internal_metadata_.InternalSwap(&other->_internal_metadata_);
  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
      &_impl_.name_, lhs_arena,
      &other->_impl_.name_, rhs_arena
  );
  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
      &_impl_.introduce_, lhs_arena,
      &other->_impl_.introduce_, rhs_arena
  );
  ::PROTOBUF_NAMESPACE_ID::internal::memswap<
      PROTOBUF_FIELD_OFFSET(Attributes_alert_solve_measure, _impl_.scale_)
      + sizeof(Attributes_alert_solve_measure::_impl_.scale_)
      - PROTOBUF_FIELD_OFFSET(Attributes_alert_solve_measure, _impl_.addr_)>(
          reinterpret_cast<char*>(&_impl_.addr_),
          reinterpret_cast<char*>(&other->_impl_.addr_));
}

::PROTOBUF_NAMESPACE_ID::Metadata Attributes_alert_solve_measure::GetMetadata() const {
  return ::_pbi::AssignDescriptors(
      &descriptor_table_battery_2eproto_getter, &descriptor_table_battery_2eproto_once,
      file_level_metadata_battery_2eproto[11]);
}

// @@protoc_insertion_point(namespace_scope)
}  // namespace BatteryConfig
PROTOBUF_NAMESPACE_OPEN
template<> PROTOBUF_NOINLINE ::BatteryConfig::Item*
Arena::CreateMaybeMessage< ::BatteryConfig::Item >(Arena* arena) {
  return Arena::CreateMessageInternal< ::BatteryConfig::Item >(arena);
}
template<> PROTOBUF_NOINLINE ::BatteryConfig::Attributes*
Arena::CreateMaybeMessage< ::BatteryConfig::Attributes >(Arena* arena) {
  return Arena::CreateMessageInternal< ::BatteryConfig::Attributes >(arena);
}
template<> PROTOBUF_NOINLINE ::BatteryConfig::Attributes_balance*
Arena::CreateMaybeMessage< ::BatteryConfig::Attributes_balance >(Arena* arena) {
  return Arena::CreateMessageInternal< ::BatteryConfig::Attributes_balance >(arena);
}
template<> PROTOBUF_NOINLINE ::BatteryConfig::Attributes_DIDO*
Arena::CreateMaybeMessage< ::BatteryConfig::Attributes_DIDO >(Arena* arena) {
  return Arena::CreateMessageInternal< ::BatteryConfig::Attributes_DIDO >(arena);
}
template<> PROTOBUF_NOINLINE ::BatteryConfig::Attributes_SOX*
Arena::CreateMaybeMessage< ::BatteryConfig::Attributes_SOX >(Arena* arena) {
  return Arena::CreateMessageInternal< ::BatteryConfig::Attributes_SOX >(arena);
}
template<> PROTOBUF_NOINLINE ::BatteryConfig::Attributes_other*
Arena::CreateMaybeMessage< ::BatteryConfig::Attributes_other >(Arena* arena) {
  return Arena::CreateMessageInternal< ::BatteryConfig::Attributes_other >(arena);
}
template<> PROTOBUF_NOINLINE ::BatteryConfig::Attributes_alert_value*
Arena::CreateMaybeMessage< ::BatteryConfig::Attributes_alert_value >(Arena* arena) {
  return Arena::CreateMessageInternal< ::BatteryConfig::Attributes_alert_value >(arena);
}
template<> PROTOBUF_NOINLINE ::BatteryConfig::Attributes_alert_delay*
Arena::CreateMaybeMessage< ::BatteryConfig::Attributes_alert_delay >(Arena* arena) {
  return Arena::CreateMessageInternal< ::BatteryConfig::Attributes_alert_delay >(arena);
}
template<> PROTOBUF_NOINLINE ::BatteryConfig::Attributes_alert_release_value*
Arena::CreateMaybeMessage< ::BatteryConfig::Attributes_alert_release_value >(Arena* arena) {
  return Arena::CreateMessageInternal< ::BatteryConfig::Attributes_alert_release_value >(arena);
}
template<> PROTOBUF_NOINLINE ::BatteryConfig::Attributes_alert_release_delay*
Arena::CreateMaybeMessage< ::BatteryConfig::Attributes_alert_release_delay >(Arena* arena) {
  return Arena::CreateMessageInternal< ::BatteryConfig::Attributes_alert_release_delay >(arena);
}
template<> PROTOBUF_NOINLINE ::BatteryConfig::Attributes_alert_dropcurr_rate*
Arena::CreateMaybeMessage< ::BatteryConfig::Attributes_alert_dropcurr_rate >(Arena* arena) {
  return Arena::CreateMessageInternal< ::BatteryConfig::Attributes_alert_dropcurr_rate >(arena);
}
template<> PROTOBUF_NOINLINE ::BatteryConfig::Attributes_alert_solve_measure*
Arena::CreateMaybeMessage< ::BatteryConfig::Attributes_alert_solve_measure >(Arena* arena) {
  return Arena::CreateMessageInternal< ::BatteryConfig::Attributes_alert_solve_measure >(arena);
}
PROTOBUF_NAMESPACE_CLOSE

// @@protoc_insertion_point(global_scope)
#include <google/protobuf/port_undef.inc>
